summaryrefslogtreecommitdiffstats
path: root/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html
diff options
context:
space:
mode:
authorOpen-IOV <dev@open-iov.org>2026-09-23 05:44:08 -0400
committerOpen-IOV <dev@open-iov.org>2026-09-23 05:46:43 -0400
commit68cdd7728a7cc6715bbbff7decfe2b11c3bdf558 (patch)
tree3dc8ce2e6af313a97ec6852f5c663a9a93665d2e /wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html
downloadopen-iov-68cdd7728a7cc6715bbbff7decfe2b11c3bdf558.tar.gz
open-iov-68cdd7728a7cc6715bbbff7decfe2b11c3bdf558.zip
Open-IOV: initial public release
Open-IOV virtualizes NVIDIA GPUs so that unmodified guest drivers run with real GPU functionality - CUDA first, 3D and video to follow - on unmodified hosts, without a proprietary vGPU license and without patching any driver, firmware or hypervisor. Core principle: emulate the interface, pass through the work. kernel/ open-iov-vfio.ko - host VFIO mdev driver: virtual GPU device (PCI config space, BAR shadows, MSI-X), GSP boot emulation, GSP-RM message-queue/RPC emulation, memory model (GPU-VA to guest-PA discovery) and the semaphore-completion service that advances guest UVM progress. userspace/ libiov.so management API and examples. tools/ guest diagnostics, firmware analysis wrappers, RM probes. scripts/ stack manager, VM harness, build/load/test automation. config/ hardware/version profiles (the portability surface). docs/ documentation tree - start at docs/README.md. wiki/ long-form firmware and protocol deep dives. Status: initialization works end to end for a stock 570.144 Linux guest on Turing (TU104): driver probe, nvidia-smi, the full GSP-RM control battery, object creation and the early CUDA/UVM start-up path. GPU work forwarding - the step that makes CUDA kernels execute on real hardware - is the active work item; see docs/04-implementation/01-known-knowns-and-unknowns.md. License: BSD-3-Clause for the project; GPL-2.0 for kernel modules that link GPL-only kernel interfaces. See LICENSE and docs/09-reference/legal-and-licensing.md.
Diffstat (limited to 'wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html')
-rw-r--r--wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html231
1 files changed, 231 insertions, 0 deletions
diff --git a/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html
new file mode 100644
index 0000000..06240c3
--- /dev/null
+++ b/wiki/open-iov.org/index.php?title=LIME_Is_Mediated_Emulation&action=edit.html
@@ -0,0 +1,231 @@
+<!DOCTYPE html>
+<html class="client-nojs" lang="en" dir="ltr">
+<head>
+<meta charset="UTF-8"/>
+<title>View source for LIME Is Mediated Emulation - Open-IOV</title>
+<script>document.documentElement.className="client-js";RLCONF={"wgBreakFrames":!0,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"d36e9ee075610f5296ba1077","wgCSPNonce":!1,"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":!1,"wgNamespaceNumber":0,"wgPageName":"LIME_Is_Mediated_Emulation","wgTitle":"LIME Is Mediated Emulation","wgCurRevisionId":786,"wgRevisionId":0,"wgArticleId":89,"wgIsArticle":!1,"wgIsRedirect":!1,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"LIME_Is_Mediated_Emulation","wgRelevantArticleId":89,"wgIsProbablyEditable":!1,"wgRelevantPageIsProbablyEditable":!1,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgVisualEditor":{"pageLanguageCode":"en",
+"pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgEditSubmitButtonLabelPublish":!1};RLSTATE={"site.styles":"ready","noscript":"ready","user.styles":"ready","user":"ready","user.options":"loading","skins.vector.styles.legacy":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready"};RLPAGEMODULES=["mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","skins.vector.legacy.js","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader"];</script>
+<script>(RLQ=window.RLQ||[]).push(function(){mw.loader.implement("user.options@1hzgi",function($,jQuery,require,module){/*@nomin*/mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"});
+});});</script>
+<link rel="stylesheet" href="load.php%3Flang=en&amp;modules=ext.visualEditor.desktopArticleTarget.noscript|skins.vector.styles.legacy&amp;only=styles&amp;skin=vector.css"/>
+<script async="" src="load.php%3Flang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector"></script>
+<meta name="generator" content="MediaWiki 1.37.1"/>
+<meta name="robots" content="noindex,nofollow"/>
+<meta name="format-detection" content="telephone=no"/>
+<link rel="shortcut icon" href="favicon.ico.html"/>
+<link rel="search" type="application/opensearchdescription+xml" href="opensearch_desc.php" title="Open-IOV (en)"/>
+<link rel="EditURI" type="application/rsd+xml" href="api.php%3Faction=rsd"/>
+<link rel="alternate" type="application/atom+xml" title="Open-IOV Atom feed" href="./index.php%3Ftitle=Special:RecentChanges&amp;feed=atom"/>
+</head>
+<body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-LIME_Is_Mediated_Emulation rootpage-LIME_Is_Mediated_Emulation skin-vector action-edit skin-vector-legacy"><div id="mw-page-base" class="noprint"></div>
+<div id="mw-head-base" class="noprint"></div>
+<div id="content" class="mw-body" role="main">
+ <a id="top"></a>
+ <div id="siteNotice"></div>
+ <div class="mw-indicators">
+ </div>
+ <h1 id="firstHeading" class="firstHeading" >View source for LIME Is Mediated Emulation</h1>
+ <div id="bodyContent" class="vector-body">
+
+ <div id="contentSub">← <a href="index.php/LIME_Is_Mediated_Emulation.html" title="LIME Is Mediated Emulation">LIME Is Mediated Emulation</a></div>
+ <div id="contentSub2"></div>
+
+ <div id="jump-to-nav"></div>
+ <a class="mw-jump-link" href="index.php%3Ftitle=LIME_Is_Mediated_Emulation&amp;action=edit.html#mw-head">Jump to navigation</a>
+ <a class="mw-jump-link" href="index.php%3Ftitle=LIME_Is_Mediated_Emulation&amp;action=edit.html#searchInput">Jump to search</a>
+ <div id="mw-content-text" class="mw-body-content"><p>You do not have permission to edit this page, for the following reason:
+</p>
+<div class="permissions-errors">
+<p>The action you have requested is limited to users in the group: <a href="https://open-iov.org/index.php?title=Open-IOV:Administrators&amp;action=edit&amp;redlink=1" class="new" title="Open-IOV:Administrators (page does not exist)">Administrators</a>.
+</p>
+</div><hr />
+<p>You can view and copy the source of this page.
+</p><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="en" dir="ltr" name="wpTextbox1">LIME Is Mediated Emulation is an in-development feature in [https://open-iov.org/index.php/ ] which enables the execution of full performance [https://docs.microsoft.com/en-us/windows/win32/winprog64/programming-guide-for-64-bit-windows Win64] binaries with full compatibility for all current and future software making use of the Windows ABI. An initial demo of this technology can be viewed [https://streamable.com/ps3wdg here].
+
+== Design Goals ==
+LIME aims to provide similar functionality to [https://winehq.org/ WINE Is Not Emulation], Valve's [https://github.com/ValveSoftware/Proton/ Proton] / [https://github.com/ValveSoftware/dxvk DXVK] but with the use of graphics virtualization (vGPU/SR-IOV on consumer GPUs), a shared filesystem between host/guest, and [https://open-iov.org/index.php/Looking_Glass_KVMFR KVM Frame Relay] (high performance graphics buffer sharing via [https://www.qemu.org/docs/master/system/devices/ivshmem.html Inter-VM Shared Memory Device / IVSHMEM]).
+
+Compared to WINE, and Proton the benefits of this approach are that Win64 binaries execute without the incompatibilities introduced in new games taking advantage of the latest version of [https://docs.microsoft.com/en-us/windows/win32/directx DirectX], or when changes are introduced to the latest version of the Win64 [https://infogalactic.com/info/Application_binary_interface ABI].
+
+This functionality is enabled via the use of [ GPU Virtual Machine] (for consumer GPU Virtualization), [https://virtio-fs.gitlab.io/design.html VirtIO-FS] (for host &lt;-> guest filesystem sharing), [https://looking-glass.io/ Looking Glass] (for host &lt;-> guest shared frame buffer), and [https://github.com///tree/master// ] (for orchestration).
+
+== Use-Cases ==
+
+=== Win64 Subsystem ===
+LIME's most immediate use case is around ABI compatibility with Win64 programs in environments without native support.
+
+'''A blog post detailing the problems which lead to this work can be read here'''. A summary of this post is traditional models for backwards compatibility with Application Binary Interfaces (ABIs) lock-in existing models for kernel/userland development and stagnate architectural innovation. On the other hand consumer oriented systems like those based on [https://github.com/apple/darwin-xnu Darwin/XNU] break backwards compatibility with user programs version to version of the system in order to introduce architectural improvements in the kernel / userland (for instance micro-service device drivers which may recover from faults at OS runtime).
+
+These two approaches might be considered two discretely separable models for software development ''&lt;nowiki/>'enterprise'&lt;nowiki/>'' /''&lt;nowiki/>'consumer''' - LIME might then be considered a third approach which preserves the functions of both prior approaches (continual innovation afforded in the kernel-space and backwards compatibility with existing software libraries).
+
+ie: A method by which programs "import" a particular explicitly versioned ABI similar to how [https://docs.docker.com/engine/api/latest/ Docker] provisions [https://wiki.archlinux.org/title/Chroot chroot] resources like configuration files and support libraries, but extended to drivers, and the kernel.
+
+=== Win64 Orchestration ===
+Because LIME necessarily provisions application data, program files, and [https://open-iov.org/index.php/Glossary#NUMA_Node NUMA]-aware vCPU/vGPU resources (in the context of multi-GPU, multi-socket CPU systems) through for automatic execution by one or more VM guests LIME might provide an ideal architecture for orchestration of Win64 applications at scale. This could include execution of programs for game streaming in a server environment, or multiple applications in a single user environment for '[https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-tools.md#using-windows-appvms-in-seamless-mode seamless-mode]' execution of guest programs similar to that of [https://www.qubes-os.org/doc/ QubesOS] with hardware GPU acceleration added.
+
+=== Compatibility With Other ABIs ===
+To solve the problems of 'ABI lock-in' discussed in the "Why Computers Suck" post it may be possible to port LIME support to multiple different guest operating systems allowing execution of any program with any ABI with near indistinguishable performance compared to native execution.
+
+=== Quality of Service (QoS) ===
+[https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/tree/Documentation/driver-api/vfio-mediated-device.rst VFIO-Mdev] functionality like that used in [ GPU Virtual Machine (GVM)] provides granular GPU resource allocation and load balancing functions similar to those seen in [https://infogalactic.com/info/Cgroups control groups (cgroups)] as they are commonly applied today to RAM and CPU resources. In the context LIME VFIO-Mdev could be applied for load balancing of individual processes running in a virtualized state to ensure individual processes making use of the GPU cannot deny service to others on the system.
+
+== Development Status ==
+Development of this functionality is ongoing. Efforts to improve LIME are primarily focused on stabilization of shared filesystem functions.
+
+=== VirtIO-FS ===
+VirtIO-FS provides shared filesystem functionality between host and guest using [https://github.com/libfuse/libfuse FUSE] which is ideal for LIME, however in the context of Windows guests the C version of virtiofsd appears unstable (seen in [https://github.com/virtio-win/kvm-guest-drivers-windows virtio-win] issue [https://github.com/virtio-win/kvm-guest-drivers-windows/issues/550 &lt;nowiki>550 [closed]&lt;/nowiki>], [https://github.com/virtio-win/kvm-guest-drivers-windows/issues/723 &lt;nowiki>723 [closed]&lt;/nowiki>], [https://github.com/virtio-win/kvm-guest-drivers-windows/issues/724 &lt;nowiki>724 [open]&lt;/nowiki>]). Testing has been performed by members of the Open-IOV community which have shown initial signs of increased filesystem stability under continuous read/write loads using the Rust version of virtiofsd ([https://gitlab.com/virtio-fs/virtiofsd virtiofsd-rs]).
+
+While many programs can be stored in the VirtIO-FS shared directory some programs such as [https://store.steampowered.com/ Steam] don't want to install programs into the VirtIO-FS drive (seen as a secondary drive in Windows - in often as disk D:/ if no additional media is attached). This game installation behaviour (which drive the user may place their programs in) may not be in common with other game stores such as the [https://store.epicgames.com/en-US/ Epic Games Store], or [https://www.gog.com/good-old-games Good Old Games (GOG)].
+</textarea><div class="templatesUsed"></div><p id="mw-returnto">Return to <a href="index.php/LIME_Is_Mediated_Emulation.html" title="LIME Is Mediated Emulation">LIME Is Mediated Emulation</a>.</p>
+
+<div class="printfooter">Retrieved from "<a dir="ltr" href="index.php/LIME_Is_Mediated_Emulation.html">https://open-iov.org/index.php/LIME_Is_Mediated_Emulation</a>"</div></div>
+ <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div>
+ </div>
+</div>
+
+<div id="mw-navigation">
+ <h2>Navigation menu</h2>
+ <div id="mw-head">
+ <nav id="p-personal" class="mw-portlet mw-portlet-personal vector-user-menu-legacy vector-menu" aria-labelledby="p-personal-label" role="navigation"
+ >
+ <h3 id="p-personal-label" class="vector-menu-heading"> <span>Personal tools</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"><li id="pt-login" class="mw-list-item"><a href="https://open-iov.org/index.php?title=Special:UserLogin&amp;returnto=LIME+Is+Mediated+Emulation&amp;returntoquery=action%3Dedit" title="You are encouraged to log in; however, it is not mandatory [o]" accesskey="o">Log in</a></li></ul>
+
+ </div>
+</nav>
+
+ <div id="left-navigation">
+ <nav id="p-namespaces" class="mw-portlet mw-portlet-namespaces vector-menu vector-menu-tabs" aria-labelledby="p-namespaces-label" role="navigation"
+ >
+ <h3 id="p-namespaces-label" class="vector-menu-heading"> <span>Namespaces</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"><li id="ca-nstab-main" class="selected mw-list-item"><a href="index.php/LIME_Is_Mediated_Emulation.html" title="View the content page [c]" accesskey="c">Page</a></li><li id="ca-talk" class="new mw-list-item"><a href="https://open-iov.org/index.php?title=Talk:LIME_Is_Mediated_Emulation&amp;action=edit&amp;redlink=1" rel="discussion" title="Discussion about the content page (page does not exist) [t]" accesskey="t">Discussion</a></li></ul>
+
+ </div>
+</nav>
+
+ <nav id="p-variants" class="mw-portlet mw-portlet-variants emptyPortlet vector-menu-dropdown-noicon vector-menu vector-menu-dropdown" aria-labelledby="p-variants-label" role="navigation"
+ >
+ <input type="checkbox"
+ id="p-variants-checkbox"
+ role="button"
+ aria-haspopup="true"
+ data-event-name="ui.dropdown-p-variants"
+ class=" vector-menu-checkbox" aria-labelledby="p-variants-label" />
+ <h3 id="p-variants-label" class="vector-menu-heading"> <span>Variants</span>
+ <span class="vector-menu-checkbox-expanded">expanded</span>
+ <span class="vector-menu-checkbox-collapsed">collapsed</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"></ul>
+
+ </div>
+</nav>
+
+ </div>
+ <div id="right-navigation">
+ <nav id="p-views" class="mw-portlet mw-portlet-views vector-menu vector-menu-tabs" aria-labelledby="p-views-label" role="navigation"
+ >
+ <h3 id="p-views-label" class="vector-menu-heading"> <span>Views</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"><li id="ca-view" class="mw-list-item"><a href="index.php/LIME_Is_Mediated_Emulation.html">Read</a></li><li id="ca-viewsource" class="selected mw-list-item"><a href="index.php%3Ftitle=LIME_Is_Mediated_Emulation&amp;action=edit.html" title="This page is protected.&#10;You can view its source [e]" accesskey="e">View source</a></li><li id="ca-history" class="mw-list-item"><a href="index.php%3Ftitle=LIME_Is_Mediated_Emulation&amp;action=history.html" title="Past revisions of this page [h]" accesskey="h">View history</a></li></ul>
+
+ </div>
+</nav>
+
+ <nav id="p-cactions" class="mw-portlet mw-portlet-cactions emptyPortlet vector-menu-dropdown-noicon vector-menu vector-menu-dropdown" aria-labelledby="p-cactions-label" role="navigation" title="More options"
+ >
+ <input type="checkbox"
+ id="p-cactions-checkbox"
+ role="button"
+ aria-haspopup="true"
+ data-event-name="ui.dropdown-p-cactions"
+ class=" vector-menu-checkbox" aria-labelledby="p-cactions-label" />
+ <h3 id="p-cactions-label" class="vector-menu-heading"> <span>More</span>
+ <span class="vector-menu-checkbox-expanded">expanded</span>
+ <span class="vector-menu-checkbox-collapsed">collapsed</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"></ul>
+
+ </div>
+</nav>
+
+ <div id="p-search" role="search" class="vector-search-box">
+ <div>
+ <h3 >
+ <label for="searchInput">Search</label>
+ </h3>
+ <form action="https://open-iov.org/index.php" id="searchform">
+ <div id="simpleSearch" data-search-loc="header-navigation">
+ <input type="search" name="search" placeholder="Search Open-IOV" autocapitalize="sentences" title="Search Open-IOV [f]" accesskey="f" id="searchInput"/>
+ <input type="hidden" name="title" value="Special:Search"/>
+ <input type="submit" name="fulltext" value="Search" title="Search the pages for this text" id="mw-searchButton" class="searchButton mw-fallbackSearchButton"/>
+ <input type="submit" name="go" value="Go" title="Go to a page with this exact name if it exists" id="searchButton" class="searchButton"/>
+ </div>
+ </form>
+ </div>
+</div>
+
+ </div>
+ </div>
+
+<div id="mw-panel">
+ <div id="p-logo" role="banner">
+ <a class="mw-wiki-logo" href="images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html"
+ title="Visit the main page"></a>
+ </div>
+ <nav id="p-navigation" class="mw-portlet mw-portlet-navigation vector-menu vector-menu-portal portal" aria-labelledby="p-navigation-label" role="navigation"
+ >
+ <h3 id="p-navigation-label" class="vector-menu-heading"> <span>Navigation</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"><li id="n-mainpage-description" class="mw-list-item"><a href="images/archive/c/c3/20221214193624!I915_Scheduling_Events_and_Requests.png.html" title="Visit the main page [z]" accesskey="z">Main page</a></li><li id="n-recentchanges" class="mw-list-item"><a href="https://open-iov.org/index.php/Special:RecentChanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li><li id="n-randompage" class="mw-list-item"><a href="index.php/Special:Random.html" title="Load a random page [x]" accesskey="x">Random page</a></li><li id="n-help-mediawiki" class="mw-list-item"><a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">Help about MediaWiki</a></li></ul>
+
+ </div>
+</nav>
+
+ <nav id="p-tb" class="mw-portlet mw-portlet-tb vector-menu vector-menu-portal portal" aria-labelledby="p-tb-label" role="navigation"
+ >
+ <h3 id="p-tb-label" class="vector-menu-heading"> <span>Tools</span>
+ </h3>
+ <div class="vector-menu-content">
+
+ <ul class="vector-menu-content-list"><li id="t-whatlinkshere" class="mw-list-item"><a href="https://open-iov.org/index.php/Special:WhatLinksHere/LIME_Is_Mediated_Emulation" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="https://open-iov.org/index.php/Special:RecentChangesLinked/LIME_Is_Mediated_Emulation" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li><li id="t-specialpages" class="mw-list-item"><a href="index.php/Special:SpecialPages.html" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li id="t-info" class="mw-list-item"><a href="index.php%3Ftitle=LIME_Is_Mediated_Emulation&amp;action=info.html" title="More information about this page">Page information</a></li></ul>
+
+ </div>
+</nav>
+
+
+</div>
+
+</div>
+<footer id="footer" class="mw-footer" role="contentinfo" >
+ <ul id="footer-info" >
+</ul>
+
+ <ul id="footer-places" >
+ <li id="footer-places-privacy"><a href="https://open-iov.org/index.php/Open-IOV:Privacy_policy" title="Open-IOV:Privacy policy">Privacy policy</a></li>
+ <li id="footer-places-about"><a href="index.php/Open-IOV:About.html" title="Open-IOV:About">About Open-IOV</a></li>
+ <li id="footer-places-disclaimer"><a href="https://open-iov.org/index.php/Open-IOV:General_disclaimer" title="Open-IOV:General disclaimer">Disclaimers</a></li>
+</ul>
+
+ <ul id="footer-icons" class="noprint">
+ <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/"><img src="resources/assets/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" srcset="resources/assets/poweredby_mediawiki_132x47.png 1.5x, resources/assets/poweredby_mediawiki_176x62.png 2x" width="88" height="31" loading="lazy"/></a></li>
+</ul>
+
+</footer>
+
+
+<script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgBackendResponseTime":86});});</script>
+<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a39969a0ce7739c9',t:'MTc4OTE1ODQ0MQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html> \ No newline at end of file