[
  {
    "path": ".gitattributes",
    "content": "text eol=lf\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: Build & Release\n\non:\n  push:\n    branches:\n      - master\n    tags:\n      - v*\n  pull_request:\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - name: Setup Node.js\n        uses: actions/setup-node@v1\n        with:\n          node-version: 18.x\n      - name: Get yarn cache directory path\n        id: yarn-cache-dir-path\n        run: echo \"::set-output name=dir::$(yarn cache dir)\"\n      - uses: actions/cache@v1\n        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)\n        with:\n          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}\n          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-yarn-\n      - name: Install\n        run: yarn --frozen-lockfile\n      - name: lint\n        run: yarn lint\n  build:\n    needs: lint\n    name: Build (${{ matrix.os }} - ${{ matrix.arch }})\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        # Build for supported platforms\n        # https://github.com/electron/electron-packager/blob/ebcbd439ff3e0f6f92fa880ff28a8670a9bcf2ab/src/targets.js#L9\n        # 32-bit Linux unsupported as of 2019: https://www.electronjs.org/blog/linux-32bit-support\n        os: [ macOS-latest, ubuntu-latest, windows-latest ]\n        arch: [ x64, arm64 ]\n        include:\n        - os: windows-latest\n          arch: ia32\n        - os: ubuntu-latest\n          arch: armv7l\n        # Publishing artifacts for multiple Windows architectures has\n        # a bug which can cause the wrong architecture to be downloaded\n        # for an update, so until that is fixed, only build Windows x64\n        exclude:\n        - os: windows-latest\n          arch: arm64\n\n    steps:\n      - uses: actions/checkout@v2\n      - name: Setup Node.js\n        uses: actions/setup-node@v1\n        with:\n          node-version: 18.x\n      - name: Get yarn cache directory path\n        id: yarn-cache-dir-path\n        run: echo \"::set-output name=dir::$(yarn cache dir)\"\n      - uses: actions/cache@v1\n        if: matrix.os != 'macOS-latest'\n        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)\n        with:\n          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}\n          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}\n          restore-keys: |\n            ${{ runner.os }}-yarn-\n      - name: Set MacOS signing certs\n        if: matrix.os == 'macOS-latest'\n        run: chmod +x tools/add-macos-cert.sh && ./tools/add-macos-cert.sh\n        env:\n          MACOS_CERT_P12: ${{ secrets.MACOS_CERT_P12 }}\n          MACOS_CERT_PASSWORD: ${{ secrets.MACOS_CERT_PASSWORD }}\n      - name: Set Windows signing certificate\n        if: matrix.os == 'windows-latest'\n        continue-on-error: true\n        id: write_file\n        uses: timheuer/base64-to-file@v1\n        with:\n          fileName: 'win-certificate.pfx'\n          encodedString: ${{ secrets.WINDOWS_CODESIGN_P12 }}\n      - name: Download disk image (ps1)\n        run: tools/download-disk.ps1\n        if: matrix.os == 'windows-latest' && startsWith(github.ref, 'refs/tags/')\n        env:\n          DISK_URL: ${{ secrets.DISK_URL }}\n      - name: Download disk image (sh)\n        run: chmod +x tools/download-disk.sh && ./tools/download-disk.sh\n        if: matrix.os != 'windows-latest' && startsWith(github.ref, 'refs/tags/')\n        env:\n          DISK_URL: ${{ secrets.DISK_URL }}\n      - name: Install\n        run: yarn\n      - name: Make\n        if: startsWith(github.ref, 'refs/tags/')\n        run: yarn make --arch=${{ matrix.arch }}\n        env:\n          APPLE_ID: ${{ secrets.APPLE_ID }}\n          APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          WINDOWS_CODESIGN_FILE: ${{ steps.write_file.outputs.filePath }}\n          WINDOWS_CODESIGN_PASSWORD: ${{ secrets.WINDOWS_CODESIGN_PASSWORD }}\n      - name: Release\n        uses: softprops/action-gh-release@v1\n        if: startsWith(github.ref, 'refs/tags/')\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        with:\n          draft: true\n          files: |\n            out/**/*.deb\n            out/**/*.dmg\n            out/**/*setup*.exe\n            out/**/*.rpm\n            out/**/*.zip"
  },
  {
    "path": ".gitignore",
    "content": "node_modules\nout\n.DS_Store\n\n/images*/\n/helper-images/\n\ndist\n!.github/images\n*.code-workspace\n*.pfx\n\nMicrosoft.Trusted.Signing.Client*\ntrusted-signing-metadata.json\n.env\nelectron-windows-sign.log\n"
  },
  {
    "path": "CREDITS.md",
    "content": "# windows95 Credits\n\nThis app was made possible by three major engineering efforts:\n\n * [v86 by Fabian Hemmer](https://github.com/copy/v86)\n * [Electron by the Electron Maintainers](https://electronjs.org)\n * Windows 95 by Microsoft\n\n# v86 License and Copyright Notice\n\nCopyright (c) 2012-2018, Fabian Hemmer\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those\nof the authors and should not be interpreted as representing official policies,\neither expressed or implied, of the FreeBSD Project.\n\n# Electron License and Copyright Notice\n\nCopyright (c) 2013-2018 GitHub Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Dockerfile",
    "content": "# DESCRIPTION:\t  Run Windows 95 in a container\n# AUTHOR:\t\t  Paul DeCarlo <toolboc@gmail.com>\n#\n#   Made possible through prior art by:\n#   copy (v86 - x86 virtualization in JavaScript) \n#   felixrieseberg (Windows95 running in electron) \n#   Microsoft (Windows 95)\n#\n#   ***Docker Run Command***\n#\n#   docker run -it \\\n#    -v /tmp/.X11-unix:/tmp/.X11-unix \\ # mount the X11 socket\n#    -e DISPLAY=unix$DISPLAY \\ # pass the display\n#    --device /dev/snd \\ # sound\n#    --name windows95 \\\n#    toolboc/windows95\n#\n#   ***TroubleShooting***\n#   If you receive Gtk-WARNING **: cannot open display: unix:0\n#   Run:\n#       xhost +\n#\n\nFROM node:10.9-stretch\n\nLABEL maintainer \"Paul DeCarlo <toolboc@gmail.com>\"\n\nRUN apt update && apt install -y \\\n    libgtk-3-0 \\\n    libcanberra-gtk3-module \\\n    libx11-xcb-dev \\\n    libgconf2-dev \\\n    libnss3 \\\n    libasound2 \\\n    libxtst-dev \\\n    libxss1 \\\n    git \\\n    --no-install-recommends && \\\n    rm -rf /var/lib/apt/lists/*\n\nCOPY . .\n\nRUN npm install \n\nENTRYPOINT [ \"npm\", \"start\"]\n"
  },
  {
    "path": "HELP.md",
    "content": "# Help & Commonly Asked Questions\n\n## MS-DOS seems to mess up the screen\nHit `Alt + Enter` to make the command screen \"Full Screen\" (as far as Windows 95 is\nconcerned). This should restore the display from the garbled mess you see and allow\nyou to access the Command Prompt. Press Alt-Enter again to leave Full Screen and go\nback to Window Mode. (Thanks to @DisplacedGamers for that wisdom)\n\n## Windows 95 is stuck in a bad state\n\nOn the app's home screen, select \"Settings\" in the lower menu. Then, delete your\nmachine's state before starting it again - this time hopefully without issues.\n\n\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright 2019 Felix Rieseberg\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n____\n\nv86 Source Code\n\nCopyright (c) 2012-2018, Fabian Hemmer\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nThe views and conclusions contained in the software and documentation are those\nof the authors and should not be interpreted as representing official policies,\neither expressed or implied, of the FreeBSD Project.\n"
  },
  {
    "path": "README.md",
    "content": "# windows95\n\nThis is Windows 95, running in an [Electron](https://electronjs.org/) app. Yes, it's the full thing. I'm sorry.\n\n## Downloads\n\n<table class=\"is-fullwidth\">\n</thead>\n<tbody>\n</tbody>\n  <tr>\n    <td>\n      <img src=\"./.github/images/windows.png\" width=\"24\"><br />\n      Windows\n    </td>\n    <td>\n      <span>32-bit</span>\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-4.0.0-setup-ia32.exe\">\n        💿 Installer\n      </a> |\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-win32-ia32-4.0.0.zip\">\n        📦 Standalone Zip\n      </a>\n      <br />\n      <span>64-bit</span>\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-4.0.0-setup-x64.exe\">\n        💿 Installer\n      </a> |\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-win32-x64-4.0.0.zip\">\n        📦 Standalone Zip\n      </a><br />\n      <span>ARM64</span>\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-4.0.0-setup-arm64.exe\">\n        💿 Installer\n      </a> |\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-win32-arm64-4.0.0.zip\">\n        📦 Standalone Zip\n      </a><br />\n      <span>\n        ❓ Don't know what kind of chip you have? It's probably `x64`. To confirm, on your computer, hit Start, enter \"processor\" for info.\n      </span>\n    </td>\n  </tr>\n  <tr>\n    <td>\n      <img src=\"./.github/images/macos.png\" width=\"24\"><br />\n      macOS\n    </td>\n    <td>\n      <span>Apple Silicon Processor</span>\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-darwin-arm64-4.0.0.zip\">\n        📦 Standalone Zip\n      </a><br />\n      <span>Intel Processor</span>\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-darwin-x64-4.0.0.zip\">\n        📦 Standalone Zip\n      </a>\n      <span>\n        ❓ Don't know what kind of chip you have? If you bought your computer after 2020, select \"Apple Silicon\". Learn more at <a href=\"https://support.apple.com/en-us/HT211814\">apple.com</a>.\n      </span>\n    </td>\n  </tr>\n  <tr>\n    <td>\n      <img src=\"./.github/images/linux.png\" width=\"24\"><br />\n      Linux\n    </td>\n    <td>\n      <span>64-bit</span>\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95-4.0.0-1.x86_64.rpm\">\n        💿 rpm\n      </a> |\n      <a href=\"https://github.com/felixrieseberg/windows95/releases/download/v4.0.0/windows95_4.0.0_amd64.deb\">\n        💿 deb\n      </a><br />\n    </td>\n  </tr>\n</table>\n\n<hr />\n\n<table width=\"100%\">\n  <tr>\n    <td width=\"50%\">\n      <img src=\"https://github.com/user-attachments/assets/43ab7126-765e-444b-ad14-27b1beadbc7c\" width=\"100%\" alt=\"Screenshot showing Windows 95\">\n    </td>\n    <td width=\"50%\">\n      <img src=\"https://github.com/user-attachments/assets/7ac5dc36-cbd4-4455-a616-0e5cca314b34\" width=\"100%\" alt=\"Screenshot showing Windows 95\">\n    </td>\n  </tr>\n</table>\n\n## Does it work?\nYes! Quite well, actually - on macOS, Windows, and Linux. Bear in mind that this is written entirely in JavaScript, so please adjust your expectations.\n\n## Should this have been a native app?\nAbsolutely.\n\n## Does it run Doom (or my other favorite game)?\nYou'll likely be better off with an actual virtualization app, but the short answer is yes. In fact, a few games are already preinstalled - and more can be found on the Internet, for instance at [archive.org](https://www.archive.org). [Thanks to\n@DisplacedGamers](https://youtu.be/xDXqmdFxofM) I can recommend that you switch to a resolution of\n640x480 @ 256 colors before starting DOS games - just like in the good ol' days.\n\n## Credits\n\n99% of the work was done over at [v86](https://github.com/copy/v86/) by Copy aka Fabian Hemmer and his contributors.\n\n## Contributing\n\nBefore you can run this from source, you'll need the disk image. It's not part of the\nrepository, but you can grab it using the `Show Disk Image` button from the packaged\nrelease, which does include the disk image. You can find that button in the\n`Modify C: Drive` section.\n\nUnpack the `images` folder into the `src` folder, creating this layout:\n\n```\n- /images/windows95.img\n- /images/default-state.bin\n- /assets/...\n- /bios/...\n- /docs/...\n```\n\nOnce you've done so, run `npm install` and `npm start` to run your local build.\n\nIf you want to tinker with the image or make a new one, check out the [QEMU docs](./docs/qemu.md).\n\n## Other Questions\n\n * [MS-DOS seems to brick the screen](./HELP.md#ms-dos-seems-to-brick-the-screen)\n * [Windows 95 is stuck in a bad state](./HELP.md#windows-95-is-stuck-in-a-bad-state)\n * [I want to install additional apps or games](./HELP.md#i-want-to-install-additional-apps-or-games)\n * [Running in Docker](./docs/docker-instructions.md)\n * [Running in an online VM with Kubernetes and Gitpod](./docs/docker-kubernetes-gitpod.md)\n\n## License\n\nThis project is provided for educational purposes only. It is not affiliated with and has\nnot been approved by Microsoft.\n"
  },
  {
    "path": "assets/entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n  <dict>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n    <true/>\n    <key>com.apple.security.cs.disable-library-validation</key>\n    <true/>\n    <key>com.apple.security.cs.disable-executable-page-protection</key>\n    <true/>\n    <key>com.apple.security.automation.apple-events</key>\n    <true/>\n  </dict>\n</plist>\n"
  },
  {
    "path": "bios/COPYING.LESSER",
    "content": "\t\t   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions. \n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version. \n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "docs/docker-instructions.md",
    "content": "# Running windows95 in Docker\n\n## Display using a volume mount of the host X11 Unix Socket (Linux Only):\n\n**Requirements:**\n* Linux OS with a running X-Server Display\n* [Docker](http://docker.io) \n\n        docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --device /dev/snd --name windows95 toolboc/windows95\n\n\nNote: You may need to run `xhost +` on your system to allow connections to the X server running on the host.\n\n## Display using Xming X11 Server over tcp Socket (Windows and beyond):\n\n**Requirements:**\n* [Xming](https://sourceforge.net/projects/xming/)\n* [Docker](http://docker.io) \n\n1. Start the Xming X11 Server\n2. Run the command below:\n\n        docker run -e DISPLAY=host.docker.internal:0 --name windows95 toolboc/windows95\n\n## Display using the host XQuartz Server (MacOS Only):\n**Requirements:**\n* [XQuartz](https://www.xquartz.org/)\n* [Docker](http://docker.io) \n\n1. Start XQuartz, go to `Preferences` -> `Security`, and check the box `Allow connections from network clients`\n2. Restart XQuartz\n3. In the terminal, run \n```\nxhost +\n```\n4. run \n```\ndocker run -it -e DISPLAY=host.docker.internal:0 toolboc/windows95\n```\n"
  },
  {
    "path": "docs/docker-kubernetes-gitpod.md",
    "content": "## Running an online version of windows95\nYou can also run windows95 in Electron, in a virtual X server, in a JavaScript VNC client, in a Kubernetes workspace. What could go wrong?\n\n[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/felixrieseberg/windows95)\n"
  },
  {
    "path": "docs/qemu.md",
    "content": "# QEMU Instructions\n\nThe image built here was made with QEMU. In this doc,  I'm keeping instructions\naround.\n\nDisk image creation\n\n```sh\nqemu-img create -f raw windows95_v4.raw 1G\n```\n\nISO CD image creation\n\n```sh\nhdiutil makehybrid -o output.iso /path/to/folder -iso -joliet\n```\n\nInstallation\n```sh\nqemu-system-i386 \\\n    -cdrom Win95_OSR25.iso \\\n    -m 128 \\\n    -hda windows95.img \\\n    -device sb16 \\\n    -nic user,model=ne2k_pci \\\n    -fda Win95_boot.img \\\n    -boot a \\\n    -M pc,acpi=off \\\n    -cpu pentium\n```\n\n- Boot from floppy\n- Run `fdisk` and `format c:`\n- Run `D:\\setup.exe` with `24796-OEM-0014736-66386`\n- After completing setup and restarting your computer, you might get an IOS Windows protection error\n- Use `fix95cpu.ima` as a bootable floppy to fix\n- Use `vga-driver.iso` to install different video driver\n\n```sh\nqemu-system-i386 \\\n    -m 128 \\\n    -hda images/windows95.img \\\n    -device sb16 \\\n    -M pc,acpi=off \\\n    -cpu pentium \\\n    -netdev user,id=mynet0 \\\n    -device ne2k_isa,netdev=mynet0,irq=10\n```\n"
  },
  {
    "path": "forge.config.js",
    "content": "const path = require('path');\nconst fs = require('fs');\nconst package = require('./package.json');\n\nrequire('dotenv').config()\n\nprocess.env.TEMP = process.env.TMP = `C:\\\\Users\\\\FelixRieseberg\\\\AppData\\\\Local\\\\Temp`\n\nconst FLAGS = {\n  SIGNTOOL_PATH: process.env.SIGNTOOL_PATH,\n  AZURE_CODE_SIGNING_DLIB: process.env.AZURE_CODE_SIGNING_DLIB || path.join(__dirname, 'Microsoft.Trusted.Signing.Client.1.0.60/bin/x64/Azure.CodeSigning.Dlib.dll'),\n  AZURE_METADATA_JSON: process.env.AZURE_METADATA_JSON || path.resolve(__dirname, 'trusted-signing-metadata.json'),\n  AZURE_TENANT_ID: process.env.AZURE_TENANT_ID,\n  AZURE_CLIENT_ID: process.env.AZURE_CLIENT_ID,\n  AZURE_CLIENT_SECRET: process.env.AZURE_CLIENT_SECRET,\n  APPLE_ID: process.env.APPLE_ID,\n  APPLE_ID_PASSWORD: process.env.APPLE_ID_PASSWORD,\n}\n\nfs.writeFileSync(FLAGS.AZURE_METADATA_JSON, JSON.stringify({\n  Endpoint: process.env.AZURE_CODE_SIGNING_ENDPOINT || \"https://wcus.codesigning.azure.net\",\n  CodeSigningAccountName: process.env.AZURE_CODE_SIGNING_ACCOUNT_NAME,\n  CertificateProfileName: process.env.AZURE_CODE_SIGNING_CERTIFICATE_PROFILE_NAME,\n}, null, 2));\n\nconst windowsSign = {\n  signToolPath: FLAGS.SIGNTOOL_PATH,\n  signWithParams: `/v /dlib ${FLAGS.AZURE_CODE_SIGNING_DLIB} /dmdf ${FLAGS.AZURE_METADATA_JSON}`,\n  timestampServer: \"http://timestamp.acs.microsoft.com\",\n  hashes: [\"sha256\"],\n}\n\nmodule.exports = {\n  hooks: {\n    generateAssets: require('./tools/generateAssets'),\n  },\n  packagerConfig: {\n    asar: false,\n    icon: path.resolve(__dirname, 'assets', 'icon'),\n    appBundleId: 'com.felixrieseberg.windows95',\n    appCategoryType: 'public.app-category.developer-tools',\n    win32metadata: {\n      CompanyName: 'Felix Rieseberg',\n      OriginalFilename: 'windows95'\n    },\n    osxSign: {\n      identity: 'Developer ID Application: Felix Rieseberg (LT94ZKYDCJ)',\n    },\n    osxNotarize: {\n      appleId: FLAGS.APPLE_ID,\n      appleIdPassword: FLAGS.APPLE_ID_PASSWORD,\n      teamId: 'LT94ZKYDCJ'\n    },\n    windowsSign,\n    ignore: [\n      /\\/assets(\\/?)/,\n      /\\/docs(\\/?)/,\n      /\\/tools(\\/?)/,\n      /\\/src\\/.*\\.ts/,\n      /\\/test(\\/?)/,\n      /\\/@types(\\/?)/,\n      /\\/helper-images(\\/?)/,\n      /package-lock\\.json/,\n      /README\\.md/,\n      /tsconfig\\.json/,\n      /Dockerfile/,\n      /issue_template\\.md/,\n      /HELP\\.md/,\n      /forge\\.config\\.js/,\n      /\\.github(\\/?)/,\n      /\\.circleci(\\/?)/,\n      /\\.vscode(\\/?)/,\n      /\\.gitignore/,\n      /\\.gitattributes/,\n      /\\.eslintignore/,\n      /\\.eslintrc/,\n      /\\.prettierrc/,\n      /\\/Microsoft\\.Trusted\\.Signing\\.Client.*/,\n      /\\/trusted-signing-metadata/,\n    ]\n  },\n  makers: [\n    {\n      name: '@electron-forge/maker-squirrel',\n      platforms: ['win32'],\n      config: (arch) => {\n        return {\n          name: 'windows95',\n          authors: 'Felix Rieseberg',\n          exe: 'windows95.exe',\n          noMsi: true,\n          remoteReleases: '',\n          iconUrl: 'https://raw.githubusercontent.com/felixrieseberg/windows95/master/assets/icon.ico',\n          loadingGif: './assets/boot.gif',\n          setupExe: `windows95-${package.version}-setup-${arch}.exe`,\n          setupIcon: path.resolve(__dirname, 'assets', 'icon.ico'),\n          windowsSign\n        }\n      }\n    },\n    {\n      name: '@electron-forge/maker-zip',\n      platforms: ['darwin', 'win32']\n    },\n    {\n      name: '@electron-forge/maker-deb',\n      platforms: ['linux']\n    },\n    {\n      name: '@electron-forge/maker-rpm',\n      platforms: ['linux']\n    }\n  ]\n};\n"
  },
  {
    "path": "issue_template.md",
    "content": "⚠️ Thank you for reporting an issue!\n\nBefore we go any further, understand that I probably won't be able to fullfil feature requests.\nFeel free to report what feature you'd love to see, just don't get angry when I don't have\ntime to implement it 🙇‍♂️\n\nI will however _gladly_ help you make a pull request if you're willing to play with Javascript!\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"windows95\",\n  \"productName\": \"windows95\",\n  \"version\": \"4.0.0\",\n  \"description\": \"Windows 95, in an app. I'm sorry.\",\n  \"main\": \"./dist/src/main/main.js\",\n  \"scripts\": {\n    \"start\": \"rimraf ./dist && electron-forge start\",\n    \"package\": \"electron-forge package\",\n    \"make\": \"electron-forge make\",\n    \"publish\": \"electron-forge publish\",\n    \"lint\": \"prettier --write src/**/*.{ts,tsx} && npm run check-links\",\n    \"less\": \"node ./tools/lessc.js\",\n    \"tsc\": \"tsc -p tsconfig.json --noEmit\",\n    \"check-links\": \"node tools/check-links.js\",\n    \"postinstall\": \"patch-package\"\n  },\n  \"keywords\": [],\n  \"author\": \"Felix Rieseberg, felix@felixrieseberg.com\",\n  \"license\": \"MIT\",\n  \"config\": {\n    \"forge\": \"./forge.config.js\"\n  },\n  \"dependencies\": {\n    \"electron-squirrel-startup\": \"^1.0.1\",\n    \"react\": \"^17.0.1\",\n    \"react-dom\": \"^17.0.1\",\n    \"update-electron-app\": \"^2.0.1\"\n  },\n  \"devDependencies\": {\n    \"@electron-forge/cli\": \"7.6.1\",\n    \"@electron-forge/maker-deb\": \"7.6.1\",\n    \"@electron-forge/maker-flatpak\": \"^7.6.1\",\n    \"@electron-forge/maker-rpm\": \"^7.6.1\",\n    \"@electron-forge/maker-squirrel\": \"^7.6.1\",\n    \"@electron-forge/maker-zip\": \"^7.6.1\",\n    \"@electron-forge/publisher-github\": \"^7.6.1\",\n    \"@types/node\": \"^20\",\n    \"@types/react\": \"^17.0.0\",\n    \"@types/react-dom\": \"^17.0.0\",\n    \"dotenv\": \"^16.4.7\",\n    \"electron\": \"34.2.0\",\n    \"less\": \"^3.13.0\",\n    \"parcel-bundler\": \"^1.12.5\",\n    \"patch-package\": \"^8.0.0\",\n    \"prettier\": \"^3.5.1\",\n    \"rimraf\": \"^6.0.1\",\n    \"typescript\": \"^5.7.3\"\n  }\n}\n"
  },
  {
    "path": "patches/@electron+packager+18.3.6.patch",
    "content": "diff --git a/node_modules/@electron/packager/dist/win32.js b/node_modules/@electron/packager/dist/win32.js\nindex 5399b3e..f3b6e88 100644\n--- a/node_modules/@electron/packager/dist/win32.js\n+++ b/node_modules/@electron/packager/dist/win32.js\n@@ -57,7 +57,26 @@ class WindowsApp extends platform_1.App {\n             resOpts.iconPath = icon;\n         }\n         (0, common_1.debug)(`Running resedit with the options ${JSON.stringify(resOpts)}`);\n-        await (0, resedit_1.resedit)(this.electronBinaryPath, resOpts);\n+\n+        // This causes segmentation faults for me on multiple machines\n+        // It's unclear why exactly but this spawn hack fixes it\n+        // await (0, resedit_1.resedit)(this.electronBinaryPath, resOpts);\n+\n+        const { spawnSync } = require('child_process');\n+        const resEditProcess = spawnSync('node', [\n+        'C:\\\\Users\\\\FelixRieseberg\\\\Code\\\\windows95\\\\tools\\\\resedit.js',\n+        this.electronBinaryPath\n+        ], {\n+        stdio: 'inherit'\n+        });\n+\n+        if (resEditProcess.error) {\n+        throw resEditProcess.error;\n+        }\n+\n+        if (resEditProcess.status !== 0) {\n+        throw new Error(`Resedit process exited with code ${resEditProcess.status}`);\n+        }\n     }\n     async signAppIfSpecified() {\n         const windowsSignOpt = this.opts.windowsSign;\n"
  },
  {
    "path": "src/cache.ts",
    "content": "import { session } from \"electron\";\n\nexport async function clearCaches() {\n  await clearCache();\n  await clearStorageData();\n}\n\nexport async function clearCache() {\n  if (session.defaultSession) {\n    await session.defaultSession.clearCache();\n  }\n}\n\nexport async function clearStorageData() {\n  if (!session.defaultSession) {\n    return;\n  }\n\n  await session.defaultSession.clearStorageData({\n    storages: [\n      \"appcache\",\n      \"cookies\",\n      \"filesystem\",\n      \"indexdb\",\n      \"localstorage\",\n      \"shadercache\",\n      \"websql\",\n      \"serviceworkers\",\n    ],\n    quotas: [\"temporary\", \"persistent\", \"syncable\"],\n  });\n}\n"
  },
  {
    "path": "src/constants.ts",
    "content": "import * as path from \"path\";\n\nconst IMAGES_PATH = path.join(__dirname, \"../../images\");\n\nexport const CONSTANTS = {\n  IMAGES_PATH,\n  IMAGE_PATH: path.join(IMAGES_PATH, \"windows95.img\"),\n  IMAGE_DEFAULT_SIZE: 1073741824, // 1GB\n  DEFAULT_STATE_PATH: path.join(IMAGES_PATH, \"default-state.bin\"),\n};\n\nexport const IPC_COMMANDS = {\n  TOGGLE_INFO: \"TOGGLE_INFO\",\n  SHOW_DISK_IMAGE: \"SHOW_DISK_IMAGE\",\n  ZOOM_IN: \"ZOOM_IN\",\n  ZOOM_OUT: \"ZOOM_OUT\",\n  ZOOM_RESET: \"ZOOM_RESET\",\n  // Machine instructions\n  MACHINE_START: \"MACHINE_START\",\n  MACHINE_RESTART: \"MACHINE_RESTART\",\n  MACHINE_STOP: \"MACHINE_STOP\",\n  MACHINE_RESET: \"MACHINE_RESET\",\n  MACHINE_ALT_F4: \"MACHINE_ALT_F4\",\n  MACHINE_ESC: \"MACHINE_ESC\",\n  MACHINE_ALT_ENTER: \"MACHINE_ALT_ENTER\",\n  MACHINE_CTRL_ALT_DEL: \"MACHINE_CTRL_ALT_DEL\",\n  // Machine events\n  MACHINE_STARTED: \"MACHINE_STARTED\",\n  MACHINE_STOPPED: \"MACHINE_STOPPED\",\n  // Else\n  APP_QUIT: \"APP_QUIT\",\n  GET_STATE_PATH: \"GET_STATE_PATH\",\n};\n"
  },
  {
    "path": "src/less/emulator.less",
    "content": "#emulator {\n  height: 100vh;\n  width: 100vw;\n  display: flex;\n\n  > div {\n    white-space: pre;\n    font: 14px monospace;\n    line-height: 14px\n  }\n\n  > canvas {\n    display: none;\n    margin: auto;\n  }\n}\n\n.paused {\n  canvas {\n    opacity: 0.2;\n    filter: blur(2px);\n    z-index: -100;\n  }\n\n  #emulator-text-screen {\n    display: none;\n    visibility: hidden;\n  }\n}\n"
  },
  {
    "path": "src/less/info.less",
    "content": "#information {\n  text-align: center;\n  position: absolute;\n  width: 100vw;\n  bottom: 50px;\n  font-size: 18px;\n}\n"
  },
  {
    "path": "src/less/root.less",
    "content": "@import \"./status.less\";\n@import \"./emulator.less\";\n@import \"./info.less\";\n@import \"./settings.less\";\n@import \"./start.less\";\n\n/* GENERAL RESETS */\n\nhtml, body {\n  margin: 0;\n  padding: 0;\n}\n\nbody {\n  background: #000;\n}\n\nbody.paused > #emulator {\n  display: none;\n}\n\nbody.paused {\n  background: #008080;\n  font-family: Courier;\n}\n\n#buttons {\n  user-select: none;\n}\n\nsection {\n  display: flex;\n  position: absolute;\n  width: 100vw;\n  height: 100vh;\n  align-items: center;\n  justify-content: center;\n}\n\n.card {\n  width: 75%;\n  max-width: 700px;\n  min-width: 400px;\n\n  .card-title {\n    img {\n      margin-right: 5px;\n    }\n  }\n}\n\n.nav-link > img,\n.btn > img {\n  height: 24px;\n  margin-right: 4px;\n}\n\n.windows95 {\n  * {\n    user-select: none;\n  }\n\n  *:focus {\n    outline: none;\n  }\n\n  nav .nav-link,\n  nav .nav-logo {\n    height: 37px;\n    display: flex;\n  }\n\n  nav .nav-logo img {\n    margin-left: 2px;\n    max-height: 20px;\n  }\n\n  nav .nav-logo > span {\n    position: absolute;\n    top: 9px;\n    left: 37px;\n    font-weight: bold;\n  }\n\n  .btn {\n    height: 40px;\n    padding-top: 3px;\n  }\n\n  .btn:focus {\n    border-color: #fff #000 #000 #fff;\n    outline: 5px auto -webkit-focus-ring-color;\n  }\n\n  .btn.active:before,\n  .btn:focus:before,\n  button.active:before,\n  button:focus:before,\n  input[type=submit].active:before,\n  input[type=submit]:focus:before {\n    border-color: #dedede grey grey #dedede;\n  }\n\n  .card {\n    // Fix link colors\n    .link, .link:active, .link:link, .link:visited, a, a:active, a:link, a:visited {\n      color: #008080;\n      text-decoration: underline;\n      cursor: pointer;\n    }\n\n    // Ensure a-elements in fieldsets receive click events\n    fieldset:before {\n      pointer-events: none;\n    }\n  }\n}\n"
  },
  {
    "path": "src/less/settings.less",
    "content": "#floppy-path {\n  font-size: .6rem;\n  width: 100%;\n  height: 30px;\n  padding-left: 8px;\n  border-color: #000 #fff #fff #000;\n  border-style: solid;\n  border-width: 2px;\n  background-color: #c3c3c3;\n  line-height: 27px;\n}\n\n#file-input {\n  display: none;\n}\n\n.settings {\n  legend > img {\n    margin-right: 5px;\n  }\n}\n"
  },
  {
    "path": "src/less/start.less",
    "content": "#section-start {\n  display: flex;\n  flex-direction: column;\n\n  > small {\n    margin-top: 25px;\n    font-size: .8rem;\n  }\n}\n"
  },
  {
    "path": "src/less/status.less",
    "content": "#status {\n  user-select: none;\n  position: absolute;\n  z-index: 100;\n  left: calc(50vw - 110px);\n  background: white;\n  font-size: 10px;\n  padding-bottom: 3px;\n  border-bottom-left-radius: 15px;\n  border-bottom-right-radius: 15px;\n  overflow: hidden;\n  padding-left: 10px;\n  padding-right: 10px;\n  max-height: 18px;\n  top: 0;\n}\n"
  },
  {
    "path": "src/less/vendor/95css.css",
    "content": "*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,:after,:before{box-sizing:inherit}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}@font-face{font-family:windows;src:url(windows.woff2) format(\"woff2\"),url(windows.woff) format(\"woff\")}body{font-family:windows,monospace;font-size:.8rem;line-height:1.7;padding:60px 0;color:#000;background-color:#008483}code,mark{background-color:#c3c3c3}code{padding:2px 4px;font-family:windows}.btn,button,input[type=submit]{font-size:.8rem;position:relative;display:inline-block;width:auto;height:30px;padding:2px 15px;border-color:#fff #000 #000 #fff;border-style:solid;border-width:2px;background-color:#c3c3c3}.btn:before,button:before,input[type=submit]:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:\"\";border-color:#dedede grey grey #dedede;border-style:solid;border-width:2px}.btn.active,.btn:focus,button.active,button:focus,input[type=submit].active,input[type=submit]:focus{border-color:#000 #fff #fff #000;outline:none}.btn.active:before,.btn:focus:before,button.active:before,button:focus:before,input[type=submit].active:before,input[type=submit]:focus:before{border-color:grey #dedede #dedede grey}.btn.disabled,button.disabled,input[type=submit].disabled{background-color:#c3c3c3}.input,input,select,textarea{font-size:.6rem;width:100%;height:30px;padding-left:8px;border-color:#000 #fff #fff #000;border-style:solid;border-width:2px;background-color:#fff}.input:focus,input:focus,select:focus,textarea:focus{outline:none}.disabled.input,.input:disabled,input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background-color:#c3c3c3}textarea{min-height:150px}select{padding:2px 32px 2px 4px;border-radius:0;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO8AAADvCAYAAAAacIO5AAAAAXNSR0IArs4c6QAACaVJREFUeAHt3LFuU9sSBmDn3hshISGQQBRISFBR0tCmoOVZ6KGgCEhIUNFQ8hy8AHkQHoACCmi52Uc60vGRjeNktmftmc8SRRJ7Zs03+/d2YXH0+/yx8iBAYFECr1+/Xv1nUSd2WAIEVlNwT09Phde1QGBJAn8HdzqzO++SNuesrQX+GdwJQnhbXw6GX4rAv4M7nVt4l7I952wrsCm4E4bwtr0kDL4EgW3Bnc4uvEvYoDO2FPhTcCcQ4W15WRh6dIFdwZ3OL7yjb9H52glcJLgTivC2uzQMPLLARYM7zSC8I2/S2VoJ7BPcCUZ4W10ehh1VYN/gTnMI76jbdK42ApcJ7oQjvG0uEYOOKHDZ4E6zCO+IG3WmFgJXCe4EJLwtLhNDjiZw1eBO8wjvaFt1nvICEcGdkI6i/ieNs7Oz8ugGJBAhcHJyElHGnTdEURECCQI+Niega0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIEhDdCUQ0CCQLCm4CuJYEIAeGNUFSDQIKA8Caga0kgQkB4IxTVIJAgILwJ6FoSiBAQ3ghFNQgkCAhvArqWBCIE/hdRZCk1Tk5OlnJU57yCwJcvX67w6uW81J13ObtyUgJrAsK7xuEHAssREN7l7MpJCawJCO8ahx8ILEdAeJezKyclsCYgvGscfiCwHAHhXc6unJTAmoDwrnH4gcByBIR3ObtyUgJrAsK7xuEHAssREN7l7MpJCawJtPpu8+fPn9eGv8gPHz9+XF3mdRep7Tl/Fnj27Nnq+fPnf35S47+2Cu+NGzf2XvXx8fHer/GCGIHJ/jI7i+k+fhUfm8ffkRMS2CggvBtZ/JLA+ALCO/6OnJDARgHh3cjilwTGFxDe8XfkhAQ2CgjvRha/JDC+gPCOvyMnJLBRQHg3svglgfEFhHf8HTkhgY0CwruRxS8JjC9w9Pv8EXHMs7OziDLD1fj+/fvq169fe53r69evqxcvXuz1mupPfv/+/erBgwd7jXn9+vXVrVu39nrNEp4c9f+Ht/pu82UWO108+15A+4b9Muda2mvu3r27unfv3tKOPfR5fWweej0OR2C7gPBut/EXAkMLCO/Q63E4AtsFhHe7jb8QGFpAeIdej8MR2C4gvNtt/IXA0ALCO/R6HI7AdgHh3W7jLwSGFhDeodfjcAS2Cwjvdht/ITC0gK9HzrCe+/fvrz59+rSz8rdv31YvX77c+byRn/Du3bvVnTt3dh5xMvGIFRDeWM+/ql27dm316NGjnZUr/J/EDx8+9J3lnZue5wk+Ns/jqiqB2QWEd3ZiDQjMIyC887iqSmB2AeGdnVgDAvMICO88rqoSmF1AeGcn1oDAPALCO4+rqgRmFxDe2Yk1IDCPgPDO46oqgdkFhHd2Yg0IzCPg65HzuF6o6u3bt1cfPnzY+dyfP3+uXr16tfN5kU94+/btavp/k3c9phk8cgSEN8f9r67Td6CfPHmy8wQ/fvzY+ZzoJzx+/Hh18+bN6LLqBQr42ByIqRSBQwoI7yG19SIQKCC8gZhKETikgPAeUlsvAoECwhuIqRSBQwoI7yG19SIQKCC8gZhKETikgPAeUlsvAoECwhuIqRSBQwoI7yG19SIQKODrkYGYc5WavmP85s2bucpvrHuR7zVvfKFfHkxAeA9GfflGx8fHq6dPn16+gFeWFPCxueRaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMJQWEt+RaDdVBQHg7bNmMNQV+BzxOT09/n+v4x8A1cMhr4KrZFVxvWt64k66Bq4RXcJOWdsh3d73G/TRx2fAKruC64yZfA5cJr+AmL83dcNy74SF3s294BVdw3XEHuQb2Ca/gDrK0Q7676zXuXf6i4RVcwXXHHewauEh4BXewpbkbjns3PORudoVXcAXXHXfQa+BP4RXcQZd2yHd3vca9y28Lr+AKrjvu4NfApvAK7uBLczcc9254yN38O7yCK7juuAu5Bv4ZXsFdyNIO+e6u17h3+b/DK7iC6467sGtgCq/gLmxp7obj3g0PuJv/Hh0dnWf39PxN14MAgSUJ/B9DhDGbr5D4RQAAAABJRU5ErkJggg==\");background-repeat:no-repeat;background-position:100%;background-size:26px;-webkit-appearance:none}fieldset{position:relative;margin-bottom:20px;padding:10px;border-color:grey #fff #fff grey;background-color:#c3c3c3}fieldset,fieldset:before{border-style:solid;border-width:2px}fieldset:before{position:absolute;top:11px;right:0;bottom:0;left:0;display:block;content:\"\";border-color:#dedede grey grey #dedede}legend{font-size:.9rem;font-weight:700;position:relative;display:inline-block;width:auto;padding:0 3px;background-color:#c3c3c3}.input-field{margin-bottom:20px}.link,.link:active,.link:hover,.link:link,.link:visited,a,a:active,a:hover,a:link,a:visited{color:#c3c3c3}::-webkit-scrollbar{width:20px;background-image:url(bg-pattern.png);background-size:20px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{position:relative;border-color:#fff #000 #000 #fff;border-style:solid;border-width:2px;background:#c3c3c3;background-color:#c3c3c3}::-webkit-scrollbar-thumb:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:\"\";border-color:#dedede grey grey #dedede;border-style:solid;border-width:2px}.card,.modal-dialog{position:relative;border-color:#fff #000 #000 #fff;border-style:solid;border-width:2px;background-color:#c3c3c3}.card:before,.modal-dialog:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:\"\";pointer-events:none;border-color:#dedede grey grey #dedede;border-style:solid;border-width:2px}.card-header,.modal-header{width:calc(100% - 4px);margin:2px;padding:4px 10px 6px;color:#fff;background-color:#0f0086}.card-title,.modal-title{font-size:1rem;display:block;margin:0}.card-body,.modal-body{margin:10px}.modal{display:none}.modal.is-open{position:fixed;top:0;right:0;bottom:0;left:0;display:block;width:100vw;height:100vh}.modal-bg{position:relative;width:100%;height:100%;background-color:rgba(0,0,0,.5)}.modal-dialog{position:absolute;top:50%;right:0;left:0;width:100%;max-width:600px;margin:0 auto;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.modal-header{position:relative}.modal-close{position:absolute;top:5px;right:4px;height:24px;padding:0 4px}.has-bottom-nav{padding-bottom:80px}.has-top-nav{padding-top:80px}.nav{position:relative;display:flex;margin-bottom:40px;padding:4px;border-bottom:2px solid #fff;background-color:#c3c3c3;box-shadow:0 2px 2px rgba(0,0,0,.2);justify-content:space-between;align-items:center}.nav:before{position:absolute;bottom:0;left:0;display:block;width:100%;height:2px;content:\"\";background-color:#dedede}.nav.nav-bottom,.nav.nav-top{position:fixed;z-index:20;width:100%;margin:0}.nav.nav-top{top:0}.nav.nav-bottom{bottom:0;border-top:2px solid #fff;border-bottom:none;box-shadow:0 -2px 2px rgba(0,0,0,.2)}.nav.nav-bottom:before{top:0;bottom:unset}.nav-logo,.nav-logo:active,.nav-logo:hover,.nav-logo:link,.nav-logo:visited{display:inline-block;min-width:150px;height:40px;margin-right:4px;padding:2px 20px 2px 2px;color:#000;border-color:#fff #000 #000 #fff;border-style:solid;border-width:2px;background-color:#c3c3c3}.nav-logo:active:before,.nav-logo:before,.nav-logo:hover:before,.nav-logo:link:before,.nav-logo:visited:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:\"\";border-color:#dedede grey grey #dedede;border-style:solid;border-width:2px}.nav-logo:active img,.nav-logo:hover img,.nav-logo:link img,.nav-logo:visited img,.nav-logo img{max-height:32px}.nav-menu-btn{display:block;height:40px}@media screen and (min-width:768px){.nav-menu-btn{display:none}}.nav-menu{position:absolute;bottom:100%;left:0;display:none;width:100%;color:#000;border-color:#fff #000 #000 #fff;border-style:solid;border-width:2px;background-color:#c3c3c3;flex-flow:column}.nav-menu.active{display:flex}.nav-menu:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:\"\";border-color:#dedede grey grey #dedede;border-style:solid;border-width:2px}@media screen and (min-width:768px){.nav-menu{position:relative;display:flex;border:none;flex-flow:row}.nav-menu:before{content:none}}.nav-link,.nav-link:active,.nav-link:hover,.nav-link:link,.nav-link:visited{line-height:2;position:relative;display:block;height:40px;margin:0 2px;padding:4px 40px 4px 10px;color:#000}.nav-link:active:hover,.nav-link:hover,.nav-link:hover:hover,.nav-link:link:hover,.nav-link:visited:hover{color:#fff;background-color:#0f0086}@media screen and (min-width:768px){.nav-link:active:hover,.nav-link:hover,.nav-link:hover:hover,.nav-link:link:hover,.nav-link:visited:hover{color:#000;background-color:#c3c3c3}}@media screen and (min-width:768px){.nav-link,.nav-link:active,.nav-link:hover,.nav-link:link,.nav-link:visited{border-color:#fff #000 #000 #fff;border-style:solid;border-width:2px;background-color:#c3c3c3}.nav-link:active:before,.nav-link:before,.nav-link:hover:before,.nav-link:link:before,.nav-link:visited:before{position:absolute;top:0;right:0;bottom:0;left:0;display:block;content:\"\";border-color:#dedede grey grey #dedede;border-style:solid;border-width:2px}.nav-link.active,.nav-link:active.active,.nav-link:hover.active,.nav-link:link.active,.nav-link:visited.active{border-color:#000 #fff #fff #000;background-image:url(bg-pattern.png)}.nav-link.active:before,.nav-link:active.active:before,.nav-link:hover.active:before,.nav-link:link.active:before,.nav-link:visited.active:before{border-color:grey #dedede #dedede grey}}"
  },
  {
    "path": "src/less/vendor/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Yoshi Mannaert\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "src/main/about-panel.ts",
    "content": "import { AboutPanelOptionsOptions, app } from \"electron\";\n\n/**\n * Sets Fiddle's About panel options on Linux and macOS\n *\n * @returns\n */\nexport function setupAboutPanel(): void {\n  if (process.platform === \"win32\") return;\n\n  const options: AboutPanelOptionsOptions = {\n    applicationName: \"windows95\",\n    applicationVersion: app.getVersion(),\n    version: process.versions.electron,\n    copyright: \"Felix Rieseberg\",\n  };\n\n  switch (process.platform) {\n    case \"linux\":\n      options.website = \"https://github.com/felixrieseberg/windows95\";\n    case \"darwin\":\n      options.credits = \"https://github.com/felixrieseberg/windows95\";\n    default:\n    // fallthrough\n  }\n\n  app.setAboutPanelOptions(options);\n}\n"
  },
  {
    "path": "src/main/fileserver/encoding.ts",
    "content": "export function encode(text: string) {\n  // Convert to windows-1252 compatible string by removing unsupported chars\n  let result = text.replaceAll(/[^\\x00-\\xFF]/g, '');\n\n  // If result would be empty, return original\n  if (!result.trim()) {\n    return text;\n  }\n\n  return result;\n}\n\nexport function getEncoding() {\n  return `<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">`;\n}\n"
  },
  {
    "path": "src/main/fileserver/fileserver.ts",
    "content": "import { protocol, net } from 'electron';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { generateDirectoryListing } from './page-directory-listing';\nimport { generateErrorPage } from './page-error';\nimport { log } from '../logging';\n\nexport interface FileEntry {\n  name: string;\n  fullPath: string;\n  stats: fs.Stats;\n}\n\nexport const APP_INTERCEPT = 'http://windows95/';\nexport const MY_COMPUTER_INTERCEPT = 'http://my-computer/';\n\nconst interceptedUrls = [\n  MY_COMPUTER_INTERCEPT,\n  APP_INTERCEPT\n];\n\nexport function setupFileServer() {\n  // Register protocol handler for our custom schema\n  protocol.handle('http', async (request) => {\n    if (!interceptedUrls.some(url => request.url.startsWith(url))) {\n      return fetch(request.url, {\n        headers: request.headers,\n        method: request.method,\n        body: request.body,\n      });\n    }\n\n    try {\n      const { fullPath, decodedPath } = getFilePath(request.url);\n\n      log(`FileServer: Handling request for ${request.url}`, { fullPath, decodedPath });\n\n      // Check if path exists\n      if (!fs.existsSync(fullPath)) {\n        return new Response(generateErrorPage(\n          'File or Directory Not Found',\n          decodedPath\n        ), {\n          status: 404,\n          headers: {\n            'Content-Type': 'text/html'\n          }\n        });\n      }\n\n      // Check if it's a directory\n      const stats = await fs.promises.stat(fullPath);\n      if (stats.isDirectory()) {\n        // If we're in an app-intercept, check if there's an index.htm file in the directory\n        if (request.url.startsWith(APP_INTERCEPT)) {\n          const indexHtmlPath = path.join(fullPath, 'index.htm');\n          if (fs.existsSync(indexHtmlPath)) {\n            return serveFile(indexHtmlPath);\n          }\n        }\n\n        // Generate directory listing\n        const files = await fs.promises.readdir(fullPath);\n        const listing = generateDirectoryListing(fullPath, files);\n        return new Response(listing, {\n          status: 200,\n          headers: {\n            'Content-Type': 'text/html'\n          }\n        });\n      } else {\n        try {\n          return await serveFile(fullPath);\n        } catch (error) {\n          // Handle specific file read errors\n          if (error.code === 'EACCES') {\n            return new Response(generateErrorPage(\n              'Access Denied',\n              'You do not have permission to access this file'\n            ), {\n              status: 403,\n              headers: {\n                'Content-Type': 'text/html'\n              }\n            });\n          }\n\n          // Re-throw other errors to be caught by outer try-catch\n          throw error;\n        }\n      }\n    } catch (error) {\n      const errorPage = generateErrorPage(\n        'Internal Server Error',\n        `An error occurred while processing your request: ${error.message}`\n      );\n      return new Response(errorPage, {\n        status: 500,\n        headers: {\n          'Content-Type': 'text/html'\n        }\n      });\n    }\n  });\n}\n\nfunction getFilePath(url: string) {\n  let urlPath: string;\n  let fullPath: string;\n  let decodedPath: string;\n\n  if (url.startsWith(APP_INTERCEPT)) {\n    fullPath = path.resolve(__dirname, '../../../static/www', url.replace(APP_INTERCEPT, ''));\n    decodedPath = '.';\n  } else if (url.startsWith(MY_COMPUTER_INTERCEPT)) {\n    urlPath = url.replace(MY_COMPUTER_INTERCEPT, '');\n    decodedPath = decodeURIComponent(urlPath);\n    fullPath = path.join('/', decodedPath);\n  } else {\n    throw new Error('Invalid URL');\n  }\n\n  return { fullPath, decodedPath };\n}\n\nasync function serveFile(fullPath: string): Promise<Response> {\n  const fileData = await fs.promises.readFile(fullPath);\n\n  // Determine content type based on file extension\n  const ext = path.extname(fullPath).toLowerCase();\n  let contentType = 'application/octet-stream';\n\n  // Common content types\n  const contentTypes: Record<string, string> = {\n    '.htm': 'text/html',\n    '.html': 'text/html',\n    '.txt': 'text/plain',\n    '.css': 'text/css',\n    '.js': 'text/javascript',\n    '.jpg': 'image/jpeg',\n    '.jpeg': 'image/jpeg',\n    '.png': 'image/png',\n    '.gif': 'image/gif'\n  };\n\n  if (ext in contentTypes) {\n    contentType = contentTypes[ext];\n  }\n\n  return new Response(fileData, {\n    status: 200,\n    headers: {\n      'Content-Type': contentType\n    }\n  });\n}\n\n"
  },
  {
    "path": "src/main/fileserver/hide-files.ts",
    "content": "import { Stats } from \"fs\";\nimport { settings } from \"../settings\";\nimport { FileEntry } from \"./fileserver\";\n\nconst FILES_TO_HIDE_ON_DARWIN: string[] = [\n  '.DS_Store',\n  '.localized',\n  '.Trashes',\n  '.fseventsd',\n  '.Spotlight-V100',\n  '.file',\n  '.hotfiles.btree',\n  '.DocumentRevisions-V100',\n  '.TemporaryItems',\n  '.file (resource fork files)',\n  '.VolumeIcon.icns',\n];\n\nconst FILES_TO_HIDE_ON_WINDOWS: string[] = [\n  'desktop.ini',\n  'Thumbs.db',\n  'ehthumbs.db',\n  'ehthumbs.db-shm',\n  'ehthumbs.db-wal',\n];\n\nconst FILES_TO_HIDE_ON_LINUX: string[] = [];\n\nexport function shouldHideFile(file: FileEntry) {\n  if (isHiddenFile(file) && !settings.get('isFileServerShowingHiddenFiles')) {\n    return true;\n  }\n\n  if (isSystemHiddenFile(file) && !settings.get('isFileServerShowingSystemHiddenFiles')) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function isHiddenFile(file: FileEntry) {\n  if (process.platform === 'win32') {\n    return (file.stats.mode & 0x2) === 0x2;\n  } else {\n    return file.name.startsWith('.');\n  }\n}\n\nexport function isSystemHiddenFile(file: FileEntry) {\n  return getFilesToHide().some(hiddenFile => file.name.endsWith(hiddenFile));\n}\n\nlet _filesToHide: string[];\n\nfunction getFilesToHide() {\n  if (_filesToHide) {\n    return _filesToHide;\n  }\n\n  if (process.platform === 'darwin') {\n    _filesToHide = FILES_TO_HIDE_ON_DARWIN;\n  } else if (process.platform === 'win32') {\n    _filesToHide = FILES_TO_HIDE_ON_WINDOWS;\n  } else {\n    _filesToHide = FILES_TO_HIDE_ON_LINUX;\n  }\n\n  return _filesToHide;\n}\n\n\n\n"
  },
  {
    "path": "src/main/fileserver/page-directory-listing.ts",
    "content": "import path from \"path\";\nimport fs from \"fs\";\n\nimport { APP_INTERCEPT, FileEntry, MY_COMPUTER_INTERCEPT } from \"./fileserver\";\nimport { shouldHideFile } from \"./hide-files\";\nimport { encode, getEncoding } from \"./encoding\";\nimport { log } from \"console\";\nimport { app } from \"electron\";\n\nexport function generateDirectoryListing(currentPath: string, files: string[]): string {\n  const parentPath = path.dirname(currentPath || '/');\n  const title = currentPath === '/' ? 'My Host Computer' : `Directory: ${encode(currentPath)}`;\n\n  // Get file info and sort (directories first, then alphabetically)\n  const items = files\n    .map(name => {\n      const fullPath = path.join(currentPath, name);\n      let stats: fs.Stats;\n      try {\n        stats = fs.statSync(fullPath);\n      } catch (error) {\n        log(`FileServer: Failed to get stats for ${fullPath}: ${error}`);\n        stats = new fs.Stats();\n      }\n\n      return {\n        name,\n        fullPath,\n        stats\n      } as FileEntry;\n    })\n    .filter(entry => entry.stats && !shouldHideFile(entry))\n    .sort((a, b) => {\n      if (a.stats.isDirectory() !== b.stats.isDirectory()) {\n        return a.stats.isDirectory() ? -1 : 1;\n      }\n      return a.name.localeCompare(b.name);\n    })\n    .map(getFileLiHtml)\n    .join('')\n\n  // Generate very simple HTML that works in IE 5.5\n  return `\n    <html>\n    <head>\n      ${getEncoding()}\n      <title>${title}</title>\n    </head>\n    <body>\n      <h2>${title}</h2>\n      <p>${getParentFolderLinkHtml(parentPath)} | ${getDesktopLinkHtml()} | ${getDownloadsLinkHtml()}</p>\n      <p>\n      <ul>\n        ${items}\n      </ul>\n    </body>\n    </html>\n  `;\n}\n\nfunction getParentFolderLinkHtml(parentPath: string) {\n  return `\n    ${getIconHtml('folder.gif')}\n    <a href=\"${MY_COMPUTER_INTERCEPT}${encodeURI(parentPath)}\">\n      [Parent Directory]\n    </a>\n  `;\n}\n\nfunction getDesktopLinkHtml() {\n  const desktopPath = app.getPath('desktop');\n\n  return `\n    ${getIconHtml('desktop.gif')}\n    <a href=\"${MY_COMPUTER_INTERCEPT}${encodeURI(desktopPath)}\">\n      Desktop\n    </a>\n  `;\n}\n\nfunction getDownloadsLinkHtml() {\n  const downloadsPath = app.getPath('downloads');\n\n  return `\n    ${getIconHtml('network.gif')}\n    <a href=\"${MY_COMPUTER_INTERCEPT}${encodeURI(downloadsPath)}\">\n      Downloads\n    </a>\n  `;\n}\n\nfunction getIconHtml(icon: string) {\n  return `<img src=\"${APP_INTERCEPT}images/${icon}\" style=\"vertical-align: middle; margin-right: 5px;\" width=\"16\" height=\"16\">`;\n}\n\nfunction getFileLiHtml(entry: FileEntry) {\n  const encodedPath = encodeURI(entry.fullPath);\n  const sizeDisplay = entry.stats.isDirectory() ? '' : ` (${formatFileSize(entry.stats.size)})`;\n  const icon = entry.stats.isDirectory() ? getIconHtml('folder.gif') : getIconHtml('doc.gif');\n\n  return `<li>\n    ${icon}\n    <a href=\"${MY_COMPUTER_INTERCEPT}${encodedPath}\">\n      ${getDisplayName(entry)}\n    </a>\n    ${sizeDisplay}\n  </li>`;\n}\n\nfunction getDisplayName(entry: FileEntry) {\n  return encode(entry.stats.isDirectory() ? `[${entry.name}]` : entry.name);\n}\n\nfunction formatFileSize(bytes: number): string {\n  if (bytes === 0) return '0 B';\n  const k = 1024;\n  const sizes = ['B', 'KB', 'MB', 'GB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n"
  },
  {
    "path": "src/main/fileserver/page-error.ts",
    "content": "import { getEncoding } from \"./encoding\";\nimport { MY_COMPUTER_INTERCEPT } from \"./fileserver\";\n\nexport function generateErrorPage(errorMessage: string, requestedPath: string): string {\n  return `\n    <html>\n    <head>\n      ${getEncoding()}\n      <title>Error - File Not Found</title>\n    </head>\n    <body>\n      <h2>Error: ${errorMessage}</h2>\n      <p>windows95 failed to find the file or directory on your host computer: <code>${requestedPath}</code></p>\n      <p>Options:</p>\n      <ul>\n        <li><a href=\"${MY_COMPUTER_INTERCEPT}\">Return to root directory</a></li>\n        <li><a href=\"javascript:history.back()\">Go back to previous page</a></li>\n      </ul>\n    </body>\n    </html>\n  `;\n}\n"
  },
  {
    "path": "src/main/ipc.ts",
    "content": "import { ipcMain, app } from \"electron\";\nimport * as path from \"path\";\n\nimport { IPC_COMMANDS } from \"../constants\";\n\nexport function setupIpcListeners() {\n  ipcMain.handle(IPC_COMMANDS.GET_STATE_PATH, () => {\n    return path.join(app.getPath(\"userData\"), \"state-v4.bin\");\n  });\n\n  ipcMain.handle(IPC_COMMANDS.APP_QUIT, () => {\n    app.quit();\n  });\n}\n"
  },
  {
    "path": "src/main/logging.ts",
    "content": "export function log(message: string, ...args: unknown[]) {\n  console.log(`[${new Date().toLocaleString()}] ${message}`, ...args);\n}\n"
  },
  {
    "path": "src/main/main.ts",
    "content": "import { app } from \"electron\";\n\nimport { isDevMode } from \"../utils/devmode\";\nimport { setupAboutPanel } from \"./about-panel\";\nimport { shouldQuit } from \"./squirrel\";\nimport { setupUpdates } from \"./update\";\nimport { getOrCreateWindow } from \"./windows\";\nimport { setupMenu } from \"./menu\";\nimport { setupIpcListeners } from \"./ipc\";\nimport { setupSession } from \"./session\";\nimport { setupFileServer } from './fileserver/fileserver';\n\n/**\n * Handle the app's \"ready\" event. This is essentially\n * the method that takes care of booting the application.\n */\nexport async function onReady() {\n  if (!isDevMode()) process.env.NODE_ENV = \"production\";\n\n  setupSession();\n  setupIpcListeners();\n  getOrCreateWindow();\n  setupAboutPanel();\n  setupMenu();\n  setupUpdates();\n  setupFileServer();\n}\n\n/**\n * Handle the \"before-quit\" event\n *\n * @export\n */\nexport function onBeforeQuit() {\n  (global as any).isQuitting = true;\n}\n\n/**\n * All windows have been closed, quit on anything but\n * macOS.\n */\nexport function onWindowsAllClosed() {\n  // On OS X it is common for applications and their menu bar\n  // to stay active until the user quits explicitly with Cmd + Q\n  if (process.platform !== \"darwin\") {\n    app.quit();\n  }\n}\n\n/**\n * The main method - and the first function to run\n * when Fiddle is launched.\n *\n * Exported for testing purposes.\n */\nexport function main() {\n  // Handle creating/removing shortcuts on Windows when\n  // installing/uninstalling.\n  if (shouldQuit()) {\n    app.quit();\n    return;\n  }\n\n  // Set the app's name\n  app.setName(\"windows95\");\n\n  // Launch\n  app.on(\"ready\", onReady);\n  app.on(\"before-quit\", onBeforeQuit);\n  app.on(\"window-all-closed\", onWindowsAllClosed);\n}\n\nmain();\n"
  },
  {
    "path": "src/main/menu.ts",
    "content": "import { app, shell, Menu, BrowserWindow, ipcMain, dialog } from \"electron\";\n\nimport { clearCaches } from \"../cache\";\nimport { IPC_COMMANDS } from \"../constants\";\nimport { isDevMode } from \"../utils/devmode\";\nimport { log } from \"./logging\";\n\nconst LINKS = {\n  homepage: \"https://www.felixrieseberg.com\",\n  repo: \"https://github.com/felixrieseberg/windows95\",\n  credits: \"https://github.com/felixrieseberg/windows95/blob/master/CREDITS.md\",\n  help: \"https://github.com/felixrieseberg/windows95/blob/master/HELP.md\",\n};\n\nexport async function setupMenu() {\n  await createMenu();\n\n  ipcMain.on(IPC_COMMANDS.MACHINE_STARTED, () =>\n    createMenu({ isRunning: true }),\n  );\n  ipcMain.on(IPC_COMMANDS.MACHINE_STOPPED, () =>\n    createMenu({ isRunning: false }),\n  );\n}\n\nfunction send(cmd: string) {\n  const windows = BrowserWindow.getAllWindows();\n\n  if (windows[0]) {\n    log(`Sending \"${cmd}\"`);\n    windows[0].webContents.send(cmd);\n  } else {\n    log(`Tried to send \"${cmd}\", but could not find window`);\n  }\n}\n\nasync function createMenu({ isRunning } = { isRunning: false }) {\n  const template: Array<Electron.MenuItemConstructorOptions> = [\n    {\n      label: \"View\",\n      submenu: [\n        {\n          label: \"Toggle Full Screen\",\n          accelerator: (function () {\n            if (process.platform === \"darwin\") {\n              return \"Ctrl+Command+F\";\n            } else {\n              return \"F11\";\n            }\n          })(),\n          click: function (_item, focusedWindow) {\n            if (focusedWindow) {\n              focusedWindow.setFullScreen(!focusedWindow.isFullScreen());\n            }\n          },\n        },\n        {\n          label: \"Toggle Developer Tools\",\n          accelerator: (function () {\n            if (process.platform === \"darwin\") {\n              return \"Alt+Command+I\";\n            } else {\n              return \"Ctrl+Shift+I\";\n            }\n          })(),\n          click: function (_item, focusedWindow) {\n            if (focusedWindow) {\n              focusedWindow.webContents.toggleDevTools();\n            }\n          },\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          label: \"Toggle Emulator Info\",\n          click: () => send(IPC_COMMANDS.TOGGLE_INFO),\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          role: \"reload\",\n        },\n      ],\n    },\n    {\n      role: \"editMenu\",\n      visible: isDevMode(),\n    },\n    {\n      label: \"Window\",\n      role: \"window\",\n      submenu: [\n        {\n          label: \"Minimize\",\n          accelerator: \"CmdOrCtrl+M\",\n          role: \"minimize\",\n        },\n        {\n          label: \"Close\",\n          accelerator: \"CmdOrCtrl+W\",\n          role: \"close\",\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          label: \"Zoom in\",\n          click: () => send(IPC_COMMANDS.ZOOM_IN),\n          enabled: isRunning,\n        },\n        {\n          label: \"Zoom out\",\n          click: () => send(IPC_COMMANDS.ZOOM_OUT),\n          enabled: isRunning,\n        },\n        {\n          label: \"Reset zoom\",\n          click: () => send(IPC_COMMANDS.ZOOM_RESET),\n          enabled: isRunning,\n        },\n      ],\n    },\n    {\n      label: \"Machine\",\n      submenu: [\n        {\n          label: \"Send Ctrl+Alt+Del\",\n          click: () => send(IPC_COMMANDS.MACHINE_CTRL_ALT_DEL),\n          enabled: isRunning,\n        },\n        {\n          label: \"Send Alt+F4\",\n          click: () => send(IPC_COMMANDS.MACHINE_ALT_F4),\n          enabled: isRunning,\n        },\n        {\n          label: \"Send Alt+Enter\",\n          click: () => send(IPC_COMMANDS.MACHINE_ALT_ENTER),\n          enabled: isRunning,\n        },\n        {\n          label: \"Send Esc\",\n          click: () => send(IPC_COMMANDS.MACHINE_ESC),\n          enabled: isRunning,\n        },\n        {\n          type: \"separator\",\n        },\n        isRunning\n          ? {\n              label: \"Stop\",\n              click: () => send(IPC_COMMANDS.MACHINE_STOP),\n            }\n          : {\n              label: \"Start\",\n              click: () => send(IPC_COMMANDS.MACHINE_START),\n            },\n        {\n          label: \"Restart\",\n          click: () => send(IPC_COMMANDS.MACHINE_RESTART),\n          enabled: isRunning,\n        },\n        {\n          label: \"Reset\",\n          click: async () => {\n            const result = await dialog.showMessageBox({\n              type: 'warning',\n              buttons: ['Reset', 'Cancel'],\n              defaultId: 1,\n              title: 'Reset Machine',\n              message: 'Are you sure you want to reset the machine?',\n              detail: 'This will delete the machine state, including all changes you have made.',\n            });\n\n            if (result.response === 0) {\n              send(IPC_COMMANDS.MACHINE_RESET);\n            }\n          },\n          enabled: isRunning,\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          label: \"Go to Disk Image\",\n          click: () => send(IPC_COMMANDS.SHOW_DISK_IMAGE),\n        },\n      ],\n    },\n    {\n      label: \"Help\",\n      role: \"help\",\n      submenu: [\n        {\n          label: \"Author\",\n          click: () => shell.openExternal(LINKS.homepage),\n        },\n        {\n          label: \"windows95 on GitHub\",\n          click: () => shell.openExternal(LINKS.repo),\n        },\n        {\n          label: \"Help\",\n          click: () => shell.openExternal(LINKS.help),\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          label: \"Troubleshooting\",\n          submenu: [\n            {\n              label: \"Clear Cache and Restart\",\n              async click() {\n                await clearCaches();\n\n                app.relaunch();\n                app.quit();\n              },\n            },\n          ],\n        },\n      ],\n    },\n  ];\n\n  if (process.platform === \"darwin\") {\n    template.unshift({\n      label: \"windows95\",\n      submenu: [\n        {\n          role: \"about\",\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          role: \"services\",\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          label: \"Hide windows95\",\n          accelerator: \"Command+H\",\n          role: \"hide\",\n        },\n        {\n          label: \"Hide Others\",\n          accelerator: \"Command+Shift+H\",\n          role: \"hideothers\",\n        },\n        {\n          role: \"unhide\",\n        },\n        {\n          type: \"separator\",\n        },\n        {\n          label: \"Quit\",\n          accelerator: \"Command+Q\",\n          click() {\n            app.quit();\n          },\n        },\n      ],\n    } as any);\n  }\n\n  Menu.setApplicationMenu(Menu.buildFromTemplate(template as any));\n}\n"
  },
  {
    "path": "src/main/session.ts",
    "content": "import { session } from \"electron\";\n\nexport function setupSession() {\n  const s = session.defaultSession;\n\n  s.webRequest.onBeforeSendHeaders(\n    (details, callback) => {\n      callback({ requestHeaders: { Origin: '*', ...details.requestHeaders } });\n    },\n  );\n\n  s.webRequest.onHeadersReceived((details, callback) => {\n    callback({\n      responseHeaders: {\n        'Access-Control-Allow-Origin': ['*'],\n        ...details.responseHeaders,\n      },\n    });\n  });\n}\n"
  },
  {
    "path": "src/main/settings.ts",
    "content": "import * as fs from 'fs';\nimport * as path from 'path';\nimport { app } from 'electron';\n\nexport interface Settings {\n  isFileServerEnabled: boolean;\n  isFileServerShowingHiddenFiles: boolean;\n  isFileServerShowingSystemHiddenFiles: boolean;\n}\n\nconst DEFAULT_SETTINGS: Settings = {\n  isFileServerEnabled: true,\n  isFileServerShowingHiddenFiles: false,\n  isFileServerShowingSystemHiddenFiles: false,\n};\n\nclass SettingsManager {\n  private filePath: string;\n  private data: Settings;\n\n  constructor() {\n    this.filePath = path.join(app.getPath('userData'), 'settings.json');\n    this.data = this.load();\n  }\n\n  private load(): Settings {\n    try {\n      if (fs.existsSync(this.filePath)) {\n        const fileContent = fs.readFileSync(this.filePath, 'utf8');\n        const parsed = JSON.parse(fileContent);\n\n        return {\n          ...DEFAULT_SETTINGS,\n          ...parsed,\n        };\n      }\n    } catch (error) {\n      console.error('Error loading settings:', error);\n    }\n\n    return DEFAULT_SETTINGS;\n  }\n\n  private save(): void {\n    try {\n      fs.writeFileSync(this.filePath, JSON.stringify(this.data, null, 2));\n    } catch (error) {\n      console.error('Error saving settings:', error);\n    }\n  }\n\n  get(key: keyof Settings): any {\n    return this.data[key];\n  }\n\n  set(key: keyof Settings, value: any): void {\n    this.data[key] = value;\n    this.save();\n  }\n\n  delete(key: keyof Settings): void {\n    delete this.data[key];\n    this.save();\n  }\n\n  clear(): void {\n    this.data = DEFAULT_SETTINGS;\n    this.save();\n  }\n}\n\nexport const settings = new SettingsManager();\n"
  },
  {
    "path": "src/main/squirrel.ts",
    "content": "export function shouldQuit() {\n  return require(\"electron-squirrel-startup\");\n}\n"
  },
  {
    "path": "src/main/update.ts",
    "content": "import { app } from \"electron\";\n\nexport function setupUpdates() {\n  if (app.isPackaged) {\n    require(\"update-electron-app\")({\n      repo: \"felixrieseberg/windows95\",\n      updateInterval: \"1 hour\",\n    });\n  }\n}\n"
  },
  {
    "path": "src/main/windows.ts",
    "content": "import { BrowserWindow, shell } from \"electron\";\n\nlet mainWindow: BrowserWindow | null = null;\n\nexport function getOrCreateWindow(): BrowserWindow {\n  if (mainWindow) return mainWindow;\n\n  // Create the browser window.\n  mainWindow = new BrowserWindow({\n    width: 1024,\n    height: 768,\n    useContentSize: true,\n    webPreferences: {\n      nodeIntegration: true,\n      sandbox: false,\n      webviewTag: false,\n      contextIsolation: false,\n    },\n  });\n\n  // mainWindow.webContents.toggleDevTools();\n  mainWindow.loadFile(\"./dist/static/index.html\");\n\n  mainWindow.webContents.on(\"will-navigate\", (event, url) =>\n    handleNavigation(event, url),\n  );\n\n  mainWindow.on(\"closed\", () => {\n    mainWindow = null;\n  });\n\n  return mainWindow;\n}\n\nfunction handleNavigation(event: Electron.Event, url: string) {\n  if (url.startsWith(\"http\")) {\n    event.preventDefault();\n    shell.openExternal(url);\n  }\n}\n"
  },
  {
    "path": "src/renderer/app.tsx",
    "content": "export interface Win95Window extends Window {\n  emulator: any;\n  win95: {\n    app: App;\n  };\n}\n\ndeclare let window: Win95Window;\n\n/**\n * The top-level class controlling the whole app. This is *not* a React component,\n * but it does eventually render all components.\n *\n * @class App\n */\nexport class App {\n  /**\n   * Initial setup call, loading Monaco and kicking off the React\n   * render process.\n   */\n  public async setup(): Promise<void | Element> {\n    const React = await import(\"react\");\n    const { render } = await import(\"react-dom\");\n    const { Emulator } = await import(\"./emulator\");\n\n    const className = `${process.platform}`;\n    const app = (\n      <div className={className}>\n        <Emulator />\n      </div>\n    );\n\n    const rendered = render(app, document.getElementById(\"app\"));\n\n    return rendered;\n  }\n}\n\nwindow.win95 = window.win95 || {\n  app: new App(),\n};\n\nwindow.win95.app.setup();\n"
  },
  {
    "path": "src/renderer/card-settings.tsx",
    "content": "import * as React from \"react\";\n\nimport { resetState } from \"./utils/reset-state\";\n\ninterface CardSettingsProps {\n  bootFromScratch: () => void;\n  setFloppy: (file: File) => void;\n  setCdrom: (cdrom: File) => void;\n  floppy?: File;\n  cdrom?: File;\n}\n\ninterface CardSettingsState {\n  isStateReset: boolean;\n}\n\nexport class CardSettings extends React.Component<\n  CardSettingsProps,\n  CardSettingsState\n> {\n  constructor(props: CardSettingsProps) {\n    super(props);\n\n    this.onChangeFloppy = this.onChangeFloppy.bind(this);\n    this.onChangeCdrom = this.onChangeCdrom.bind(this);\n    this.onResetState = this.onResetState.bind(this);\n\n    this.state = {\n      isStateReset: false,\n    };\n  }\n\n  public render() {\n    return (\n      <section>\n        <div className=\"card settings\">\n          <div className=\"card-header\">\n            <h2 className=\"card-title\">\n              <img src=\"../../static/settings.png\" />\n              Settings\n            </h2>\n          </div>\n          <div className=\"card-body\">\n            {this.renderCdrom()}\n            <hr />\n            {this.renderFloppy()}\n            <hr />\n            {this.renderState()}\n          </div>\n        </div>\n      </section>\n    );\n  }\n\n  public renderCdrom() {\n    // CD is currently not working, so.. let's return nothing.\n    return null;\n\n    const { cdrom } = this.props;\n\n    return (\n      <fieldset>\n        <legend>\n          <img src=\"../../static/cdrom.png\" />\n          CD-ROM\n        </legend>\n        <input\n          id=\"cdrom-input\"\n          type=\"file\"\n          onChange={this.onChangeCdrom}\n          style={{ display: \"none\" }}\n        />\n        <p>\n          windows95 comes with a virtual CD drive. It can mount images in the\n          \"iso\" format.\n        </p>\n        <p id=\"floppy-path\">\n          {cdrom ? `Inserted CD: ${cdrom?.path}` : `No CD mounted`}\n        </p>\n        <button\n          className=\"btn\"\n          onClick={() =>\n            (document.querySelector(\"#cdrom-input\") as any).click()\n          }\n        >\n          <img src=\"../../static/select-cdrom.png\" />\n          <span>Mount CD</span>\n        </button>\n      </fieldset>\n    );\n  }\n\n  public renderFloppy() {\n    const { floppy } = this.props;\n\n    return (\n      <fieldset>\n        <legend>\n          <img src=\"../../static/floppy.png\" />\n          Floppy\n        </legend>\n        <input\n          id=\"floppy-input\"\n          type=\"file\"\n          onChange={this.onChangeFloppy}\n          style={{ display: \"none\" }}\n        />\n        <p>\n          windows95 comes with a virtual floppy drive. It can mount floppy disk\n          images in the \"img\" format.\n        </p>\n        <p>\n          Back in the 90s and before CD-ROMs became a popular, software was\n          typically distributed on floppy disks. Some developers have since\n          released their apps or games for free, usually on virtual floppy disks\n          using the \"img\" format.\n        </p>\n        <p>\n          Once you've mounted a disk image, you might have to boot your virtual\n          windows95 machine from scratch.\n        </p>\n        <p id=\"floppy-path\">\n          {floppy\n            ? `Inserted Floppy Disk: ${floppy.name}`\n            : `No floppy mounted`}\n        </p>\n        <button\n          className=\"btn\"\n          onClick={() =>\n            (document.querySelector(\"#floppy-input\") as any).click()\n          }\n        >\n          <img src=\"../../static/select-floppy.png\" />\n          <span>Mount floppy disk</span>\n        </button>\n      </fieldset>\n    );\n  }\n\n  public renderState() {\n    const { isStateReset } = this.state;\n    const { bootFromScratch } = this.props;\n\n    return (\n      <fieldset>\n        <legend>\n          <img src=\"../../static/reset.png\" />\n          Reset machine state\n        </legend>\n        <div>\n          <p>\n            windows95 stores changes to your machine (like saved files) in a\n            state file. If you encounter any trouble, you can reset your state\n            or boot Windows 95 from scratch.{\" \"}\n            <strong>All your changes will be lost.</strong>\n          </p>\n          <button\n            className=\"btn\"\n            onClick={this.onResetState}\n            disabled={isStateReset}\n            style={{ marginRight: \"5px\" }}\n          >\n            <img src=\"../../static/reset-state.png\" />\n            {isStateReset ? \"State reset\" : \"Reset state\"}\n          </button>\n          <button className=\"btn\" onClick={bootFromScratch}>\n            <img src=\"../../static/boot-fresh.png\" />\n            Boot from scratch\n          </button>\n        </div>\n      </fieldset>\n    );\n  }\n\n  /**\n   * Handle a change in the floppy input\n   *\n   * @param event\n   */\n  private onChangeFloppy(event: React.ChangeEvent<HTMLInputElement>) {\n    const floppyFile =\n      event.target.files && event.target.files.length > 0\n        ? event.target.files[0]\n        : null;\n\n    if (floppyFile) {\n      this.props.setFloppy(floppyFile);\n    } else {\n      console.log(`Floppy: Input changed but no file selected`);\n    }\n  }\n\n  /**\n   * Handle a change in the cdrom input\n   *\n   * @param event\n   */\n  private onChangeCdrom(event: React.ChangeEvent<HTMLInputElement>) {\n    const CdromFile =\n      event.target.files && event.target.files.length > 0\n        ? event.target.files[0]\n        : null;\n\n    if (CdromFile) {\n      this.props.setCdrom(CdromFile);\n    } else {\n      console.log(`Cdrom: Input changed but no file selected`);\n    }\n  }\n\n  /**\n   * Handle the state reset\n   */\n  private async onResetState() {\n    await resetState();\n    this.setState({ isStateReset: true });\n  }\n}\n"
  },
  {
    "path": "src/renderer/card-start.tsx",
    "content": "import * as React from \"react\";\n\nexport interface CardStartProps {\n  startEmulator: () => void;\n}\n\nexport class CardStart extends React.Component<CardStartProps, {}> {\n  public render() {\n    return (\n      <section id=\"section-start\">\n        <button className=\"btn\" id=\"win95\" onClick={this.props.startEmulator}>\n          <img src=\"../../static/run.png\" />\n          <span>Start Windows 95</span>\n        </button>\n        <small>Hit ESC to lock or unlock your mouse</small>\n      </section>\n    );\n  }\n}\n"
  },
  {
    "path": "src/renderer/emulator-info.tsx",
    "content": "import * as React from \"react\";\n\ninterface EmulatorInfoProps {\n  toggleInfo: () => void;\n  emulator: any;\n}\n\ninterface EmulatorInfoState {\n  cpu: number;\n  disk: string;\n  lastCounter: number;\n  lastTick: number;\n}\n\nexport class EmulatorInfo extends React.Component<\n  EmulatorInfoProps,\n  EmulatorInfoState\n> {\n  private cpuInterval = -1;\n\n  constructor(props: EmulatorInfoProps) {\n    super(props);\n\n    this.cpuCount = this.cpuCount.bind(this);\n    this.onIDEReadStart = this.onIDEReadStart.bind(this);\n    this.onIDEReadWriteEnd = this.onIDEReadWriteEnd.bind(this);\n\n    this.state = {\n      cpu: 0,\n      disk: \"Idle\",\n      lastCounter: 0,\n      lastTick: 0,\n    };\n  }\n\n  public render() {\n    const { cpu, disk } = this.state;\n\n    return (\n      <div id=\"status\">\n        Disk: <span>{disk}</span> | CPU Speed: <span>{cpu}</span> |{\" \"}\n        <a href=\"#\" onClick={this.props.toggleInfo}>\n          Hide\n        </a>\n      </div>\n    );\n  }\n\n  public componentWillUnmount() {\n    this.uninstallListeners();\n  }\n\n  /**\n   * The emulator starts whenever, so install or uninstall listeners\n   * at the right time\n   *\n   * @param newProps\n   */\n  public componentDidUpdate(prevProps: EmulatorInfoProps) {\n    if (prevProps.emulator !== this.props.emulator) {\n      if (this.props.emulator) {\n        this.installListeners();\n      } else {\n        this.uninstallListeners();\n      }\n    }\n  }\n\n  /**\n   * Let's start listening to what the emulator is up to.\n   */\n  private installListeners() {\n    const { emulator } = this.props;\n\n    if (!emulator) {\n      console.log(\n        `Emulator info: Tried to install listeners, but emulator not defined yet.`,\n      );\n      return;\n    }\n\n    // CPU\n    if (this.cpuInterval > -1) {\n      clearInterval(this.cpuInterval);\n    }\n\n    // TypeScript think's we're using a Node.js setInterval. We're not.\n    this.cpuInterval = setInterval(this.cpuCount, 500) as unknown as number;\n\n    // Disk\n    emulator.add_listener(\"ide-read-start\", this.onIDEReadStart);\n    emulator.add_listener(\"ide-read-end\", this.onIDEReadWriteEnd);\n    emulator.add_listener(\"ide-write-end\", this.onIDEReadWriteEnd);\n\n    // Screen\n    emulator.add_listener(\"screen-set-size-graphical\", console.log);\n  }\n\n  /**\n   * Stop listening to the emulator.\n   */\n  private uninstallListeners() {\n    const { emulator } = this.props;\n\n    if (!emulator) {\n      console.log(\n        `Emulator info: Tried to uninstall listeners, but emulator not defined yet.`,\n      );\n      return;\n    }\n\n    // CPU\n    if (this.cpuInterval > -1) {\n      clearInterval(this.cpuInterval);\n    }\n\n    // Disk\n    emulator.remove_listener(\"ide-read-start\", this.onIDEReadStart);\n    emulator.remove_listener(\"ide-read-end\", this.onIDEReadWriteEnd);\n    emulator.remove_listener(\"ide-write-end\", this.onIDEReadWriteEnd);\n\n    // Screen\n    emulator.remove_listener(\"screen-set-size-graphical\", console.log);\n  }\n\n  /**\n   * The virtual IDE is handling read (start).\n   */\n  private onIDEReadStart() {\n    this.requestIdle(() => this.setState({ disk: \"Read\" }));\n  }\n\n  /**\n   * The virtual IDE is handling read/write (end).\n   */\n  private onIDEReadWriteEnd() {\n    this.requestIdle(() => this.setState({ disk: \"Idle\" }));\n  }\n\n  /**\n   * Request an idle callback with a 3s timeout.\n   *\n   * @param fn\n   */\n  private requestIdle(fn: () => void) {\n    (window as any).requestIdleCallback(fn, { timeout: 3000 });\n  }\n\n  /**\n   * Calculates what's up with the virtual cpu.\n   */\n  private cpuCount() {\n    const { lastCounter, lastTick } = this.state;\n\n    const now = Date.now();\n    const instructionCounter = this.props.emulator.get_instruction_counter();\n    const ips = instructionCounter - lastCounter;\n    const deltaTime = now - lastTick;\n\n    this.setState({\n      lastTick: now,\n      lastCounter: instructionCounter,\n      cpu: Math.round(ips / deltaTime),\n    });\n  }\n}\n"
  },
  {
    "path": "src/renderer/emulator.tsx",
    "content": "import * as React from \"react\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ipcRenderer, shell, webUtils } from \"electron\";\n\nimport { CONSTANTS, IPC_COMMANDS } from \"../constants\";\nimport { getDiskImageSize } from \"../utils/disk-image-size\";\nimport { CardStart } from \"./card-start\";\nimport { StartMenu } from \"./start-menu\";\nimport { CardSettings } from \"./card-settings\";\nimport { EmulatorInfo } from \"./emulator-info\";\nimport { getStatePath } from \"./utils/get-state-path\";\nimport { Win95Window } from \"./app\";\nimport { resetState } from \"./utils/reset-state\";\n\ndeclare let window: Win95Window;\n\nexport interface EmulatorState {\n  currentUiCard: \"start\" | \"settings\";\n  emulator?: any;\n  scale: number;\n  floppyFile?: File;\n  cdromFile?: File;\n  isBootingFresh: boolean;\n  isCursorCaptured: boolean;\n  isInfoDisplayed: boolean;\n  isRunning: boolean;\n}\n\nexport class Emulator extends React.Component<{}, EmulatorState> {\n  private isQuitting = false;\n  private isResetting = false;\n\n  constructor(props: {}) {\n    super(props);\n\n    this.startEmulator = this.startEmulator.bind(this);\n    this.stopEmulator = this.stopEmulator.bind(this);\n    this.restartEmulator = this.restartEmulator.bind(this);\n    this.resetEmulator = this.resetEmulator.bind(this);\n    this.bootFromScratch = this.bootFromScratch.bind(this);\n\n    this.state = {\n      isBootingFresh: false,\n      isCursorCaptured: false,\n      isRunning: false,\n      currentUiCard: \"start\",\n      isInfoDisplayed: true,\n      // We can start pretty large\n      // If it's too large, it'll just grow until it hits borders\n      scale: 2,\n    };\n\n    this.setupInputListeners();\n    this.setupIpcListeners();\n    this.setupUnloadListeners();\n  }\n\n  /**\n   * We want to capture and release the mouse at appropriate times.\n   */\n  public setupInputListeners() {\n    // ESC\n    document.onkeydown = (evt) => {\n      const { isCursorCaptured } = this.state;\n\n      evt = evt || window.event;\n\n      if (evt.keyCode === 27) {\n        if (isCursorCaptured) {\n          this.unlockMouse();\n        } else {\n          this.lockMouse();\n        }\n\n        evt.stopPropagation();\n      }\n    };\n\n    // Click\n    document.addEventListener(\"click\", () => {\n      const { isRunning } = this.state;\n\n      if (isRunning) {\n        this.lockMouse();\n      }\n    });\n  }\n\n  /**\n   * Save the emulator's state to disk during exit.\n   */\n  public setupUnloadListeners() {\n    const handleClose = async () => {\n      await this.saveState();\n\n      console.log(`Unload: Now done, quitting again.`);\n      this.isQuitting = true;\n\n      setImmediate(() => {\n        ipcRenderer.invoke(IPC_COMMANDS.APP_QUIT);\n      });\n    };\n\n    window.onbeforeunload = (event: Event) => {\n      if (this.isQuitting || this.isResetting) {\n        console.log(`Unload: Not preventing`);\n        return;\n      }\n\n      console.log(`Unload: Preventing to first save state`);\n\n      handleClose();\n      event.preventDefault();\n      event.returnValue = false;\n    };\n  }\n\n  /**\n   * Setup the various IPC messages sent to the renderer\n   * from the main process\n   */\n  public setupIpcListeners() {\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_CTRL_ALT_DEL, () => {\n      this.sendKeys([\n        0x1d, // ctrl\n        0x38, // alt\n        0x53, // delete\n      ]);\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_ALT_F4, () => {\n      this.sendKeys([\n        0x38, // alt\n        0x3e, // f4\n      ]);\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_ALT_ENTER, () => {\n      this.sendKeys([\n        0x38, // alt\n        0, // enter\n      ]);\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_ESC, () => {\n      this.sendKeys([\n        0x18, // alt\n      ]);\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_STOP, this.stopEmulator);\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_RESET, this.resetEmulator);\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_START, this.startEmulator);\n    ipcRenderer.on(IPC_COMMANDS.MACHINE_RESTART, this.restartEmulator);\n\n    ipcRenderer.on(IPC_COMMANDS.TOGGLE_INFO, () => {\n      this.setState({ isInfoDisplayed: !this.state.isInfoDisplayed });\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.SHOW_DISK_IMAGE, () => {\n      this.showDiskImage();\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.ZOOM_IN, () => {\n      this.setScale(this.state.scale * 1.2);\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.ZOOM_OUT, () => {\n      this.setScale(this.state.scale * 0.8);\n    });\n\n    ipcRenderer.on(IPC_COMMANDS.ZOOM_RESET, () => {\n      this.setScale(1);\n    });\n  }\n\n  /**\n   * If the emulator isn't running, this is rendering the, erm, UI.\n   *\n   * 🤡\n   */\n  public renderUI() {\n    const { isRunning, currentUiCard, floppyFile, cdromFile } = this.state;\n\n    if (isRunning) {\n      return null;\n    }\n\n    let card;\n\n    if (currentUiCard === \"settings\") {\n      card = (\n        <CardSettings\n          setFloppy={(floppyFile) => this.setState({ floppyFile })}\n          setCdrom={(cdromFile) => this.setState({ cdromFile })}\n          bootFromScratch={this.bootFromScratch}\n          floppy={floppyFile}\n          cdrom={cdromFile}\n        />\n      );\n    } else {\n      card = <CardStart startEmulator={this.startEmulator} />;\n    }\n\n    return (\n      <>\n        {card}\n        <StartMenu\n          navigate={(target) => this.setState({ currentUiCard: target as \"start\" | \"settings\" })}\n        />\n      </>\n    );\n  }\n\n  /**\n   * Yaknow, render things and stuff.\n   */\n  public render() {\n    return (\n      <>\n        {this.renderInfo()}\n        {this.renderUI()}\n        <div id=\"emulator\">\n          <div id=\"emulator-text-screen\"></div>\n          <canvas id=\"emulator-canvas\"></canvas>\n        </div>\n      </>\n    );\n  }\n\n  /**\n   * Render the little info thingy\n   */\n  public renderInfo() {\n    if (!this.state.isInfoDisplayed) {\n      return null;\n    }\n\n    return (\n      <EmulatorInfo\n        emulator={this.state.emulator}\n        toggleInfo={() => {\n          this.setState({ isInfoDisplayed: !this.state.isInfoDisplayed });\n        }}\n      />\n    );\n  }\n\n  /**\n   * Boot the emulator without restoring state\n   */\n  public bootFromScratch() {\n    this.setState({ isBootingFresh: true });\n    this.startEmulator();\n  }\n\n  /**\n   * Show the disk image on disk\n   */\n  public showDiskImage() {\n    // Contents/Resources/app/dist/static\n    console.log(`Showing disk image in ${CONSTANTS.IMAGE_PATH}`);\n\n    shell.showItemInFolder(CONSTANTS.IMAGE_PATH);\n  }\n\n  /**\n   * Start the actual emulator\n   */\n  private async startEmulator() {\n    document.body.classList.remove(\"paused\");\n\n    const cdromPath = this.state.cdromFile\n      ? webUtils.getPathForFile(this.state.cdromFile)\n      : null;\n\n    const options = {\n      wasm_path: path.join(__dirname, \"build/v86.wasm\"),\n      memory_size: 128 * 1024 * 1024,\n      vga_memory_size: 64 * 1024 * 1024,\n      screen: {\n        container: document.getElementById(\"emulator\"),\n        scale: 0\n      },\n      preserve_mac_from_state_image: true,\n      net_device: {\n        relay_url: \"fetch\",\n        type: \"ne2k\",\n      },\n      bios: {\n        url: path.join(__dirname, \"../../bios/seabios.bin\"),\n      },\n      vga_bios: {\n        url: path.join(__dirname, \"../../bios/vgabios.bin\"),\n      },\n      hda: {\n        url: CONSTANTS.IMAGE_PATH,\n        async: true,\n        size: await getDiskImageSize(CONSTANTS.IMAGE_PATH),\n      },\n      fda: this.state.floppyFile\n        ? {\n            buffer: this.state.floppyFile,\n          }\n        : undefined,\n      cdrom: cdromPath\n        ? {\n            url: cdromPath,\n            async: true,\n            size: await getDiskImageSize(cdromPath),\n          }\n        : undefined,\n      boot_order: 0x132,\n    };\n\n    console.log(`🚜 Starting emulator with options`, options);\n\n    window[\"emulator\"] = new V86(options);\n\n    // New v86 instance\n    this.setState({\n      emulator: window[\"emulator\"],\n      isRunning: true,\n    });\n\n    ipcRenderer.send(IPC_COMMANDS.MACHINE_STARTED);\n\n    // Restore state. We can't do this right away\n    // and randomly chose 500ms as the appropriate\n    // wait time (lol)\n    setTimeout(async () => {\n      if (!this.state.isBootingFresh) {\n        this.restoreState();\n      }\n\n      this.lockMouse();\n      this.state.emulator.run();\n      this.state.emulator.screen_set_scale(this.state.scale);\n    }, 500);\n  }\n\n  /**\n   * Restart emulator\n   */\n  private restartEmulator() {\n    if (this.state.emulator && this.state.isRunning) {\n      console.log(`🚜 Restarting emulator`);\n      this.state.emulator.restart();\n    } else {\n      console.log(`🚜 Restarting emulator failed: Emulator not running`);\n    }\n  }\n\n  /**\n   * Stop the emulator\n   */\n  private async stopEmulator() {\n    const { emulator, isRunning } = this.state;\n\n    if (!emulator || !isRunning) {\n      return;\n    }\n\n    console.log(`🚜 Stopping emulator`);\n\n    await this.saveState();\n    this.unlockMouse();\n    await emulator.stop();\n    this.setState({ isRunning: false });\n    this.resetCanvas();\n\n    document.body.classList.add(\"paused\");\n    ipcRenderer.send(IPC_COMMANDS.MACHINE_STOPPED);\n  }\n\n  /**\n   * Reset the emulator by reloading the whole page\n   */\n  private async resetEmulator() {\n    this.isResetting = true;\n\n    await this.stopEmulator();\n    await resetState();\n\n    document.location.reload();\n  }\n\n  /**\n   * Take the emulators state and write it to disk. This is possibly\n   * a fairly big file.\n   */\n  private async saveState(): Promise<void> {\n    const { emulator } = this.state;\n    const statePath = await getStatePath();\n\n    if (!emulator || !emulator.save_state) {\n      console.log(`restoreState: No emulator present`);\n      return;\n    }\n\n    try {\n      const newState = await emulator.save_state();\n      await fs.promises.writeFile(statePath, Buffer.from(newState), {\n        flush: true\n      });\n    } catch (error) {\n      console.warn(`saveState: Could not save state`, error);\n    }\n  }\n\n  /**\n   * Restores state to the emulator.\n   */\n  private async restoreState() {\n    const { emulator, isBootingFresh } = this.state;\n    const state = await this.getState();\n\n    if (isBootingFresh) {\n      console.log(`restoreState: Booting fresh, not restoring.`);\n      return;\n    } else if (!state) {\n      console.log(`restoreState: No state present, not restoring.`);\n      return;\n    } else if (!emulator) {\n      console.log(`restoreState: No emulator present`);\n      return;\n    }\n\n    try {\n      await this.state.emulator.restore_state(state);\n    } catch (error) {\n      console.log(\n        `restoreState: Could not read state file. Maybe none exists?`,\n        error,\n      );\n    }\n  }\n\n  /**\n   * Returns the current machine's state - either what\n   * we have saved or alternatively the default state.\n   *\n   * @returns {ArrayBuffer}\n   */\n  private async getState(): Promise<ArrayBuffer | null> {\n    const expectedStatePath = await getStatePath();\n    const statePath = fs.existsSync(expectedStatePath)\n      ? expectedStatePath\n      : CONSTANTS.DEFAULT_STATE_PATH;\n\n    if (fs.existsSync(statePath)) {\n      return fs.readFileSync(statePath).buffer;\n    } else {\n      console.log(`getState: No state file found at ${statePath}`);\n    }\n\n    return null;\n  }\n\n  private unlockMouse() {\n    const { emulator } = this.state;\n\n    this.setState({ isCursorCaptured: false });\n\n    if (emulator) {\n      emulator.mouse_set_status(false);\n    }\n\n    document.exitPointerLock();\n  }\n\n  private lockMouse() {\n    const { emulator } = this.state;\n\n    if (emulator) {\n      this.setState({ isCursorCaptured: true });\n      emulator.mouse_set_status(true);\n      emulator.lock_mouse();\n    } else {\n      console.warn(\n        `Emulator: Tried to lock mouse, but no emulator or not running`,\n      );\n    }\n  }\n\n  /**\n   * Set the emulator's scale\n   *\n   * @param target\n   */\n  private setScale(target: number) {\n    const { emulator, isRunning } = this.state;\n\n    if (emulator && isRunning) {\n      emulator.screen_set_scale(target);\n      this.setState({ scale: target });\n    }\n  }\n\n  /**\n   * Send keys to the emulator (including the key-up),\n   * if it's running\n   *\n   * @param {Array<number>} codes\n   */\n  private sendKeys(codes: Array<number>) {\n    if (this.state.emulator && this.state.isRunning) {\n      const scancodes = codes;\n\n      // Push break codes (key-up)\n      for (const scancode of scancodes) {\n        scancodes.push(scancode | 0x80);\n      }\n\n      this.state.emulator.keyboard_send_scancodes(scancodes);\n    }\n  }\n\n  /**\n   * Reset the canvas\n   */\n  private resetCanvas() {\n    const canvas = document.getElementById(\"emulator-canvas\");\n\n    if (canvas instanceof HTMLCanvasElement) {\n      const ctx = canvas.getContext('2d');\n      ctx?.clearRect(0, 0, canvas.width, canvas.height);\n    }\n  }\n}\n"
  },
  {
    "path": "src/renderer/global.d.ts",
    "content": "declare const V86: any;\ndeclare const win95: any;\n"
  },
  {
    "path": "src/renderer/lib/LICENSE.md",
    "content": "Copyright (c) 2012, The v86 contributors\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  },
  {
    "path": "src/renderer/lib/libv86.js",
    "content": ";(function(){'use strict';function aa(a,b){function c(y){y=y.toString(16);return\"#\"+\"0\".repeat(6-y.length)+y}function d(y){var v=256*ma,F=8*S,J=Oa?Oa.canvas:null;J&&J.width===v&&J.height===F||(J?(J.width=v,J.height=F):(J=new OffscreenCanvas(v,F),Oa=J.getContext(\"2d\")),sb=Oa.createImageData(v,F));const Q=sb.data;let P=0,T;F=tb?function(Y){T=T||Y;Q[P+3]=Y;Q[P+7]=Y;P+=8}:function(Y){T=T||Y;Q[P+3]=Y;P+=4};J=32-S;const ha=v*(S-1)*4;v=4*(ma-v*S);const ea=1020*ma;for(let Y=0,Aa=0;2048>Y;++Y,Aa+=J,P+=v){const Ba=Y%256;Y&&!Ba&&(P+=\nha);T=!1;for(let Ia=0;Ia<S;++Ia,++Aa,P+=ea){const Ja=y[Aa];for(let sa=128;0<sa;sa>>=1)F(Ja&sa?255:0);ub&&F(vb&&192<=Ba&&223>=Ba&&Ja&1?255:0)}Mb[Y]=T?1:0}Oa.putImageData(sb,0,0)}function e(y,v,F,J){if(v&&F){y.style.width=\"\";y.style.height=\"\";J&&(y.style.transform=\"\");var Q=y.getBoundingClientRect();J?y.style.transform=(1===v?\"\":\" scaleX(\"+v+\")\")+(1===F?\"\":\" scaleY(\"+F+\")\"):(0===v%1&&0===F%1?(f.style.imageRendering=\"crisp-edges\",f.style.imageRendering=\"pixelated\",f.style[\"-ms-interpolation-mode\"]=\"nearest-neighbor\"):\n(f.style.imageRendering=\"\",f.style[\"-ms-interpolation-mode\"]=\"\"),J=window.devicePixelRatio||1,0!==J%1&&(v/=J,F/=J));1!==v&&(y.style.width=Q.width*v+\"px\");1!==F&&(y.style.height=Q.height*F+\"px\")}}const g=a.container;this.screen_fill_buffer=b;console.assert(g,\"options.container must be provided\");this.FLAG_BLINKING=1;this.FLAG_FONT_PAGE_B=2;var f=g.getElementsByTagName(\"canvas\")[0],h=f.getContext(\"2d\",{alpha:!1}),l=g.getElementsByTagName(\"div\")[0],m=document.createElement(\"div\"),n,p,q=void 0!==a.scale?\na.scale:1,r=void 0!==a.scale?a.scale:1,A=1,w,u,G,z,I,R,na,Oa,sb,Mb=new Int8Array(2048),S,ma,ub,tb,vb,wb=0,xb=0,eb,Nb=0,fb,yb,gb,zb=[],hb=zb,ib=0,Ab=!1;this.init=function(){const y=new Uint16Array([32,9786,9787,9829,9830,9827,9824,8226,9688,9675,9689,9794,9792,9834,9835,9788,9658,9668,8597,8252,182,167,9644,8616,8593,8595,8594,8592,8735,8596,9650,9660]),v=new Uint16Array([8962,199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,201,230,198,244,246,242,251,249,255,214,220,162,163,165,8359,\n402,225,237,243,250,241,209,170,186,191,8976,172,189,188,161,171,187,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,945,223,915,960,931,963,181,964,934,920,937,948,8734,966,949,8745,8801,177,8805,8804,8992,8993,247,8776,176,8729,183,8730,8319,178,9632,160]);for(var F=0,J;256>F;F++)J=126<F?v[F-127]:32>F?y[F]:\nF,zb.push(String.fromCharCode(J));m.classList.add(\"cursor\");m.style.position=\"absolute\";m.style.backgroundColor=\"#ccc\";m.style.width=\"7px\";m.style.display=\"inline-block\";this.set_mode(!1);this.set_size_text(80,25);2===u&&this.set_size_graphical(720,400,720,400);this.set_scale(q,r);this.timer()};this.make_screenshot=function(){const y=new Image;if(1===u||2===u)y.src=f.toDataURL(\"image/png\");else{const v=[9,16],F=document.createElement(\"canvas\");F.width=z*v[0];F.height=I*v[1];const J=F.getContext(\"2d\");\nJ.imageSmoothingEnabled=!1;J.font=window.getComputedStyle(l).font;J.textBaseline=\"top\";for(let Q=0;Q<I;Q++)for(let P=0;P<z;P++){const T=4*(Q*z+P),ha=G[T+0],ea=G[T+3];J.fillStyle=c(G[T+2]);J.fillRect(P*v[0],Q*v[1],v[0],v[1]);J.fillStyle=c(ea);J.fillText(hb[ha],P*v[0],Q*v[1])}\"none\"!==m.style.display&&n<I&&p<z&&(J.fillStyle=m.style.backgroundColor,J.fillRect(p*v[0],n*v[1]+parseInt(m.style.marginTop,10),parseInt(m.style.width,10),parseInt(m.style.height,10)));y.src=F.toDataURL(\"image/png\")}return y};\nthis.put_char=function(y,v,F,J,Q,P){v=4*(y*z+v);G[v+0]=F;G[v+1]=J;G[v+2]=Q;G[v+3]=P;w[y]=1};this.timer=function(){ib=requestAnimationFrame(()=>this.update_screen())};this.update_screen=function(){Ab||(0===u?this.update_text():1===u?this.update_graphical():this.update_graphical_text());this.timer()};this.update_text=function(){for(var y=0;y<I;y++)w[y]&&(this.text_update_row(y),w[y]=0)};this.update_graphical=function(){this.screen_fill_buffer()};this.update_graphical_text=function(){if(R){var y=performance.now();\nif(266<y-Nb){eb=!eb;gb&&(w[n]=1);var v=4*z;for(let ha=0,ea=0;ha<I;++ha)if(w[ha])ea+=v;else for(var F=0;F<z;++F,ea+=4)if(G[ea+1]&1){w[ha]=1;ea+=v-4*F;break}Nb=y}y=Oa.canvas;v=na.canvas;F=4*z;const Q=z*ma,P=S;let T=0;for(let ha=0,ea=0,Y=0;ha<I;++ha,ea+=S){if(!w[ha]){Y+=F;continue}++T;na.clearRect(0,P,Q,S);let Aa,Ba,Ia,Ja;for(let sa=0;sa<Q;sa+=ma,Y+=4){const Ob=G[Y+0];var J=G[Y+1];const Pb=G[Y+2],Qb=G[Y+3],Rb=J&2?xb:wb;J=(!(J&1)||eb)&&Mb[(Rb<<8)+Ob];Ia!==Pb&&(void 0!==Ia&&(R.fillStyle=c(Ia),R.fillRect(Ja,\nea,sa-Ja,S)),Ia=Pb,Ja=sa);Aa!==Qb&&(void 0!==Aa&&(na.fillStyle=c(Aa),na.fillRect(Ba,0,sa-Ba,S)),Aa=Qb,Ba=sa);J&&na.drawImage(y,Ob*ma,Rb*S,ma,S,sa,P,ma,S)}na.fillStyle=c(Aa);na.fillRect(Ba,0,Q-Ba,S);na.globalCompositeOperation=\"destination-in\";na.drawImage(v,0,P,Q,S,0,0,Q,S);na.globalCompositeOperation=\"source-over\";R.fillStyle=c(Ia);R.fillRect(Ja,ea,Q-Ja,S);R.drawImage(v,0,0,Q,S,0,ea,Q,S)}T&&(eb&&gb&&w[n]&&(R.fillStyle=c(G[4*(n*z+p)+3]),R.fillRect(p*ma,n*S+fb,ma,yb-fb+1)),w.fill(0));T&&h.drawImage(R.canvas,\n0,0)}};this.destroy=function(){ib&&(cancelAnimationFrame(ib),ib=0)};this.pause=function(){Ab=!0;m.classList.remove(\"blinking-cursor\")};this.continue=function(){Ab=!1;m.classList.add(\"blinking-cursor\")};this.set_mode=function(y){u=y?1:a.use_graphical_text?2:0;0===u?(l.style.display=\"block\",f.style.display=\"none\"):(l.style.display=\"none\",f.style.display=\"block\",2===u&&w&&w.fill(1))};this.set_font_bitmap=function(y,v,F,J,Q,P){const T=F?16:v?9:8;if(S!==y||ma!==T||ub!==v||tb!==F||vb!==J||P)P=ma!==T||S!==\ny,S=y,ma=T,ub=v,tb=F,vb=J,2===u&&(d(Q),w.fill(1),P&&this.set_size_graphical_text())};this.set_font_page=function(y,v){if(wb!==y||xb!==v)wb=y,xb=v,w.fill(1)};this.clear_screen=function(){h.fillStyle=\"#000\";h.fillRect(0,0,f.width,f.height)};this.set_size_graphical_text=function(){if(Oa){var y=ma*z,v=S*I,F=2*S;R&&R.canvas.width===y&&R.canvas.height===v&&na.canvas.height===F||(R?(R.canvas.width=y,R.canvas.height=v,na.canvas.width=y,na.canvas.height=F):(R=(new OffscreenCanvas(y,v)).getContext(\"2d\",{alpha:!1}),\nna=(new OffscreenCanvas(y,F)).getContext(\"2d\")),this.set_size_graphical(y,v,y,v),w.fill(1))}};this.set_size_text=function(y,v){if(y!==z||v!==I)if(w=new Int8Array(v),G=new Int32Array(y*v*4),z=y,I=v,0===u){for(;l.childNodes.length>v;)l.removeChild(l.firstChild);for(;l.childNodes.length<v;)l.appendChild(document.createElement(\"div\"));for(y=0;y<v;y++)this.text_update_row(y);e(l,q,r,!0)}else 2===u&&this.set_size_graphical_text()};this.set_size_graphical=function(y,v){f.style.display=\"block\";f.width=y;\nf.height=v;h.imageSmoothingEnabled=!1;A=640>=y&&2*y<window.innerWidth*window.devicePixelRatio&&2*v<window.innerHeight*window.devicePixelRatio?2:1;e(f,q*A,r*A,!1)};this.set_charmap=function(y){hb=y||zb};this.set_scale=function(y,v){q=y;r=v;e(l,q,r,!0);e(f,q*A,r*A,!1)};this.update_cursor_scanline=function(y,v,F){if(y!==fb||v!==yb||F!==gb)0===u?F?(m.style.display=\"inline\",m.style.height=v-y+\"px\",m.style.marginTop=y+\"px\"):m.style.display=\"none\":2===u&&n<I&&(w[n]=1),fb=y,yb=v,gb=F};this.update_cursor=\nfunction(y,v){if(y!==n||v!==p)y<I&&(w[y]=1),n<I&&(w[n]=1),n=y,p=v};this.text_update_row=function(y){var v=4*y*z,F;var J=l.childNodes[y];var Q=document.createElement(\"div\");for(var P=0;P<z;){var T=document.createElement(\"span\");var ha=G[v+1]&1;var ea=G[v+2];var Y=G[v+3];ha&&T.classList.add(\"blink\");T.style.backgroundColor=c(ea);T.style.color=c(Y);for(F=\"\";P<z&&(G[v+1]&1)===ha&&G[v+2]===ea&&G[v+3]===Y;)if(F+=hb[G[v+0]],P++,v+=4,y===n)if(P===p)break;else if(P===p+1){m.style.backgroundColor=T.style.color;\nQ.appendChild(m);break}T.textContent=F;Q.appendChild(T)}J.parentNode.replaceChild(Q,J)};this.update_buffer=function(y){for(const v of y)h.putImageData(v.image_data,v.screen_x-v.buffer_x,v.screen_y-v.buffer_y,v.buffer_x,v.buffer_y,v.buffer_width,v.buffer_height)};this.get_text_screen=function(){for(var y=[],v=0;v<I;v++)y.push(this.get_text_row(v));return y};this.get_text_row=function(y){let v=\"\";for(let F=0;F<z;F++)v+=hb[G[4*(y*z+F)]];return v};this.init()};const ba=[\"shared\",\"exclusive\",\"unlock\"];\nfunction ca(a,b,c){this.fs=a;this.bus=c;this.configspace_tagname=[104,111,115,116,57,112];this.configspace_taglen=this.configspace_tagname.length;this.VERSION=\"9P2000.L\";this.msize=this.BLOCKSIZE=8192;this.replybuffer=new Uint8Array(2*this.msize);this.replybuffersize=0;this.fids=[];this.virtio=new da(b,{name:\"virtio-9p\",pci_id:48,device_id:4169,subsystem_device_id:9,common:{initial_port:43008,queues:[{size_supported:32,notify_offset:0}],features:[0,32,29,28],on_driver_ok:()=>{}},notification:{initial_port:43264,\nsingle_handler:!1,handlers:[d=>{if(0===d){for(;this.virtqueue.has_request();)d=this.virtqueue.pop_request(),this.ReceiveRequest(d);this.virtqueue.notify_me_after(0)}}]},isr_status:{initial_port:42752},device_specific:{initial_port:42496,struct:[{bytes:2,name:\"mount tag length\",read:()=>this.configspace_taglen,write:()=>{}}].concat(k.range(254).map(d=>({bytes:1,name:\"mount tag name \"+d,read:()=>this.configspace_tagname[d]||0,write:()=>{}})))}});this.virtqueue=this.virtio.queues[0]}\nca.prototype.get_state=function(){var a=[];a[0]=this.configspace_tagname;a[1]=this.configspace_taglen;a[2]=this.virtio;a[3]=this.VERSION;a[4]=this.BLOCKSIZE;a[5]=this.msize;a[6]=this.replybuffer;a[7]=this.replybuffersize;a[8]=this.fids.map(function(b){return[b.inodeid,b.type,b.uid,b.dbg_name]});a[9]=this.fs;return a};\nca.prototype.set_state=function(a){this.configspace_tagname=a[0];this.configspace_taglen=a[1];this.virtio.set_state(a[2]);this.virtqueue=this.virtio.queues[0];this.VERSION=a[3];this.BLOCKSIZE=a[4];this.msize=a[5];this.replybuffer=a[6];this.replybuffersize=a[7];this.fids=a[8].map(function(b){return{inodeid:b[0],type:b[1],uid:b[2],dbg_name:b[3]}});this.fs.set_state(a[9])};ca.prototype.Createfid=function(a,b,c,d){return{inodeid:a,type:b,uid:c,dbg_name:d}};\nca.prototype.update_dbg_name=function(a,b){for(const c of this.fids)c.inodeid===a&&(c.dbg_name=b)};ca.prototype.reset=function(){this.fids=[];this.virtio.reset()};ca.prototype.BuildReply=function(a,b,c){t.Marshall([\"w\",\"b\",\"h\"],[c+7,a+1,b],this.replybuffer,0);c+7>=this.replybuffer.length&&x.Debug(\"Error in 9p: payloadsize exceeds maximum length\");this.replybuffersize=c+7};ca.prototype.SendError=function(a,b,c){b=t.Marshall([\"w\"],[c],this.replybuffer,7);this.BuildReply(6,a,b)};\nca.prototype.SendReply=function(a){a.set_next_blob(this.replybuffer.subarray(0,this.replybuffersize));this.virtqueue.push_reply(a);this.virtqueue.flush_replies()};\nca.prototype.ReceiveRequest=async function(a){var b=new Uint8Array(a.length_readable);a.get_next_blob(b);var c={offset:0},d=t.Unmarshall([\"w\",\"b\",\"h\"],b,c),e=d[0],g=d[1],f=d[2];switch(g){case 8:e=this.fs.GetTotalSize();b=this.fs.GetSpace();d=[16914839];d[1]=this.BLOCKSIZE;d[2]=Math.floor(b/d[1]);d[3]=d[2]-Math.floor(e/d[1]);d[4]=d[2]-Math.floor(e/d[1]);d[5]=this.fs.CountUsedInodes();d[6]=this.fs.CountFreeInodes();d[7]=0;d[8]=256;e=t.Marshall(\"wwddddddw\".split(\"\"),d,this.replybuffer,7);this.BuildReply(g,\nf,e);this.SendReply(a);break;case 112:case 12:d=t.Unmarshall([\"w\",\"w\"],b,c);var h=d[0];c=d[1];x.Debug(\"[open] fid=\"+h+\", mode=\"+c);b=this.fids[h].inodeid;var l=this.fs.GetInode(b);x.Debug(\"file open \"+this.fids[h].dbg_name);e=this.fs.OpenInode(b,c);this.fs.AddEvent(this.fids[h].inodeid,function(){x.Debug(\"file opened \"+this.fids[h].dbg_name+\" tag:\"+f);var q=[];q[0]=l.qid;q[1]=this.msize-24;t.Marshall([\"Q\",\"w\"],q,this.replybuffer,7);this.BuildReply(g,f,17);this.SendReply(a)}.bind(this));break;case 70:d=\nt.Unmarshall([\"w\",\"w\",\"s\"],b,c);b=d[0];h=d[1];e=d[2];x.Debug(\"[link] dfid=\"+b+\", name=\"+e);e=this.fs.Link(this.fids[b].inodeid,this.fids[h].inodeid,e);if(0>e){this.SendError(f,-1===e?\"Operation not permitted\":\"Unknown error: \"+-e,-e);this.SendReply(a);break}this.BuildReply(g,f,0);this.SendReply(a);break;case 16:d=t.Unmarshall([\"w\",\"s\",\"s\",\"w\"],b,c);h=d[0];e=d[1];b=d[2];d=d[3];x.Debug(\"[symlink] fid=\"+h+\", name=\"+e+\", symgt=\"+b+\", gid=\"+d);b=this.fs.CreateSymlink(e,this.fids[h].inodeid,b);l=this.fs.GetInode(b);\nl.uid=this.fids[h].uid;l.gid=d;t.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);break;case 18:d=t.Unmarshall(\"wswwww\".split(\"\"),b,c);h=d[0];e=d[1];c=d[2];b=d[3];var m=d[4];d=d[5];x.Debug(\"[mknod] fid=\"+h+\", name=\"+e+\", major=\"+b+\", minor=\"+m);b=this.fs.CreateNode(e,this.fids[h].inodeid,b,m);l=this.fs.GetInode(b);l.mode=c;l.uid=this.fids[h].uid;l.gid=d;t.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);break;case 22:d=t.Unmarshall([\"w\"],\nb,c);h=d[0];l=this.fs.GetInode(this.fids[h].inodeid);x.Debug(\"[readlink] fid=\"+h+\" name=\"+this.fids[h].dbg_name+\" target=\"+l.symlink);e=t.Marshall([\"s\"],[l.symlink],this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 72:d=t.Unmarshall([\"w\",\"s\",\"w\",\"w\"],b,c);h=d[0];e=d[1];c=d[2];d=d[3];x.Debug(\"[mkdir] fid=\"+h+\", name=\"+e+\", mode=\"+c+\", gid=\"+d);b=this.fs.CreateDirectory(e,this.fids[h].inodeid);l=this.fs.GetInode(b);l.mode=c|fa;l.uid=this.fids[h].uid;l.gid=d;t.Marshall([\"Q\"],[l.qid],\nthis.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);break;case 14:d=t.Unmarshall([\"w\",\"s\",\"w\",\"w\",\"w\"],b,c);h=d[0];e=d[1];b=d[2];c=d[3];d=d[4];this.bus.send(\"9p-create\",[e,this.fids[h].inodeid]);x.Debug(\"[create] fid=\"+h+\", name=\"+e+\", flags=\"+b+\", mode=\"+c+\", gid=\"+d);b=this.fs.CreateFile(e,this.fids[h].inodeid);this.fids[h].inodeid=b;this.fids[h].type=1;this.fids[h].dbg_name=e;l=this.fs.GetInode(b);l.uid=this.fids[h].uid;l.gid=d;l.mode=c|ia;t.Marshall([\"Q\",\"w\"],[l.qid,this.msize-24],this.replybuffer,\n7);this.BuildReply(g,f,17);this.SendReply(a);break;case 52:d=t.Unmarshall(\"wbwddws\".split(\"\"),b,c);h=d[0];b=d[2];e=0===d[4]?Infinity:d[4];d=this.fs.DescribeLock(d[1],d[3],e,d[5],d[6]);x.Debug(\"[lock] fid=\"+h+\", type=\"+ba[d.type]+\", start=\"+d.start+\", length=\"+d.length+\", proc_id=\"+d.proc_id);e=this.fs.Lock(this.fids[h].inodeid,d,b);t.Marshall([\"b\"],[e],this.replybuffer,7);this.BuildReply(g,f,1);this.SendReply(a);break;case 54:d=t.Unmarshall(\"wbddws\".split(\"\"),b,c);h=d[0];e=0===d[3]?Infinity:d[3];\nd=this.fs.DescribeLock(d[1],d[2],e,d[4],d[5]);x.Debug(\"[getlock] fid=\"+h+\", type=\"+ba[d.type]+\", start=\"+d.start+\", length=\"+d.length+\", proc_id=\"+d.proc_id);e=this.fs.GetLock(this.fids[h].inodeid,d);e||(e=d,e.type=2);e=t.Marshall([\"b\",\"d\",\"d\",\"w\",\"s\"],[e.type,e.start,Infinity===e.length?0:e.length,e.proc_id,e.client_id],this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 24:d=t.Unmarshall([\"w\",\"d\"],b,c);h=d[0];l=this.fs.GetInode(this.fids[h].inodeid);x.Debug(\"[getattr]: fid=\"+\nh+\" name=\"+this.fids[h].dbg_name+\" request mask=\"+d[1]);if(!l||l.status===ja){x.Debug(\"getattr: unlinked\");this.SendError(f,\"No such file or directory\",2);this.SendReply(a);break}d[0]=d[1];d[1]=l.qid;d[2]=l.mode;d[3]=l.uid;d[4]=l.gid;d[5]=l.nlinks;d[6]=l.major<<8|l.minor;d[7]=l.size;d[8]=this.BLOCKSIZE;d[9]=Math.floor(l.size/512+1);d[10]=l.atime;d[11]=0;d[12]=l.mtime;d[13]=0;d[14]=l.ctime;d[15]=0;d[16]=0;d[17]=0;d[18]=0;d[19]=0;t.Marshall(\"dQwwwddddddddddddddd\".split(\"\"),d,this.replybuffer,7);this.BuildReply(g,\nf,153);this.SendReply(a);break;case 26:d=t.Unmarshall(\"wwwwwddddd\".split(\"\"),b,c);h=d[0];l=this.fs.GetInode(this.fids[h].inodeid);x.Debug(\"[setattr]: fid=\"+h+\" request mask=\"+d[1]+\" name=\"+this.fids[h].dbg_name);d[1]&1&&(l.mode=d[2]);d[1]&2&&(l.uid=d[3]);d[1]&4&&(l.gid=d[4]);d[1]&16&&(l.atime=Math.floor((new Date).getTime()/1E3));d[1]&32&&(l.mtime=Math.floor((new Date).getTime()/1E3));d[1]&64&&(l.ctime=Math.floor((new Date).getTime()/1E3));d[1]&128&&(l.atime=d[6]);d[1]&256&&(l.mtime=d[8]);d[1]&8&&\nawait this.fs.ChangeSize(this.fids[h].inodeid,d[5]);this.BuildReply(g,f,0);this.SendReply(a);break;case 50:d=t.Unmarshall([\"w\",\"d\"],b,c);h=d[0];this.BuildReply(g,f,0);this.SendReply(a);break;case 40:case 116:d=t.Unmarshall([\"w\",\"d\",\"w\"],b,c);h=d[0];e=d[1];m=d[2];l=this.fs.GetInode(this.fids[h].inodeid);40===g&&x.Debug(\"[treaddir]: fid=\"+h+\" offset=\"+e+\" count=\"+m);116===g&&x.Debug(\"[read]: fid=\"+h+\" (\"+this.fids[h].dbg_name+\") offset=\"+e+\" count=\"+m+\" fidtype=\"+this.fids[h].type);if(!l||l.status===\nja){x.Debug(\"read/treaddir: unlinked\");this.SendError(f,\"No such file or directory\",2);this.SendReply(a);break}if(2===this.fids[h].type)for(l.caps.length<e+m&&(m=l.caps.length-e),d=0;d<m;d++)this.replybuffer[11+d]=l.caps[e+d];else this.fs.OpenInode(this.fids[h].inodeid,void 0),d=this.fids[h].inodeid,m=Math.min(m,this.replybuffer.length-11),l.size<e+m?m=l.size-e:40===g&&(m=this.fs.RoundToDirentry(d,e+m)-e),e>l.size&&(m=0),this.bus.send(\"9p-read-start\",[this.fids[h].dbg_name]),d=await this.fs.Read(d,\ne,m),this.bus.send(\"9p-read-end\",[this.fids[h].dbg_name,m]),d&&this.replybuffer.set(d,11);t.Marshall([\"w\"],[m],this.replybuffer,7);this.BuildReply(g,f,4+m);this.SendReply(a);break;case 118:d=t.Unmarshall([\"w\",\"d\",\"w\"],b,c);h=d[0];e=d[1];m=d[2];d=this.fids[h].dbg_name;x.Debug(\"[write]: fid=\"+h+\" (\"+d+\") offset=\"+e+\" count=\"+m+\" fidtype=\"+this.fids[h].type);if(2===this.fids[h].type){this.SendError(f,\"Setxattr not supported\",95);this.SendReply(a);break}else await this.fs.Write(this.fids[h].inodeid,e,\nm,b.subarray(c.offset));this.bus.send(\"9p-write-end\",[d,m]);t.Marshall([\"w\"],[m],this.replybuffer,7);this.BuildReply(g,f,4);this.SendReply(a);break;case 74:d=t.Unmarshall([\"w\",\"s\",\"w\",\"s\"],b,c);e=d[0];b=d[1];c=d[2];d=d[3];x.Debug(\"[renameat]: oldname=\"+b+\" newname=\"+d);e=await this.fs.Rename(this.fids[e].inodeid,b,this.fids[c].inodeid,d);if(0>e){this.SendError(f,-2===e?\"No such file or directory\":-1===e?\"Operation not permitted\":-39===e?\"Directory not empty\":\"Unknown error: \"+-e,-e);this.SendReply(a);\nbreak}this.BuildReply(g,f,0);this.SendReply(a);break;case 76:d=t.Unmarshall([\"w\",\"s\",\"w\"],b,c);c=d[0];e=d[1];b=d[2];x.Debug(\"[unlink]: dirfd=\"+c+\" name=\"+e+\" flags=\"+b);h=this.fs.Search(this.fids[c].inodeid,e);if(-1===h){this.SendError(f,\"No such file or directory\",2);this.SendReply(a);break}e=this.fs.Unlink(this.fids[c].inodeid,e);if(0>e){this.SendError(f,-39===e?\"Directory not empty\":-1===e?\"Operation not permitted\":\"Unknown error: \"+-e,-e);this.SendReply(a);break}this.BuildReply(g,f,0);this.SendReply(a);\nbreak;case 100:d=t.Unmarshall([\"w\",\"s\"],b,c);x.Debug(\"[version]: msize=\"+d[0]+\" version=\"+d[1]);this.msize!==d[0]&&(this.msize=d[0],this.replybuffer=new Uint8Array(Math.min(16777216,2*this.msize)));e=t.Marshall([\"w\",\"s\"],[this.msize,this.VERSION],this.replybuffer,7);this.BuildReply(g,f,e);this.SendReply(a);break;case 104:d=t.Unmarshall([\"w\",\"w\",\"s\",\"s\",\"w\"],b,c);h=d[0];e=d[4];x.Debug(\"[attach]: fid=\"+h+\" afid=\"+B(d[1])+\" uname=\"+d[2]+\" aname=\"+d[3]);this.fids[h]=this.Createfid(0,1,e,\"\");l=this.fs.GetInode(this.fids[h].inodeid);\nt.Marshall([\"Q\"],[l.qid],this.replybuffer,7);this.BuildReply(g,f,13);this.SendReply(a);this.bus.send(\"9p-attach\");break;case 108:d=t.Unmarshall([\"h\"],b,c);x.Debug(\"[flush] \"+f);this.BuildReply(g,f,0);this.SendReply(a);break;case 110:d=t.Unmarshall([\"w\",\"w\",\"h\"],b,c);h=d[0];m=d[1];var n=d[2];x.Debug(\"[walk]: fid=\"+d[0]+\" nwfid=\"+d[1]+\" nwname=\"+n);if(0===n){this.fids[m]=this.Createfid(this.fids[h].inodeid,1,this.fids[h].uid,this.fids[h].dbg_name);t.Marshall([\"h\"],[0],this.replybuffer,7);this.BuildReply(g,\nf,2);this.SendReply(a);break}e=[];for(d=0;d<n;d++)e.push(\"s\");c=t.Unmarshall(e,b,c);b=this.fids[h].inodeid;e=9;var p=0;x.Debug(\"walk in dir \"+this.fids[h].dbg_name+\" to: \"+c.toString());for(d=0;d<n;d++){b=this.fs.Search(b,c[d]);if(-1===b){x.Debug(\"Could not find: \"+c[d]);break}e+=t.Marshall([\"Q\"],[this.fs.GetInode(b).qid],this.replybuffer,e);p++;this.fids[m]=this.Createfid(b,1,this.fids[h].uid,c[d])}t.Marshall([\"h\"],[p],this.replybuffer,7);this.BuildReply(g,f,e-7);this.SendReply(a);break;case 120:d=\nt.Unmarshall([\"w\"],b,c);x.Debug(\"[clunk]: fid=\"+d[0]);this.fids[d[0]]&&0<=this.fids[d[0]].inodeid&&(await this.fs.CloseInode(this.fids[d[0]].inodeid),this.fids[d[0]].inodeid=-1,this.fids[d[0]].type=-1);this.BuildReply(g,f,0);this.SendReply(a);break;case 32:d=t.Unmarshall([\"w\",\"s\",\"d\",\"w\"],b,c);h=d[0];e=d[1];c=d[2];b=d[3];x.Debug(\"[txattrcreate]: fid=\"+h+\" name=\"+e+\" attr_size=\"+c+\" flags=\"+b);this.fids[h].type=2;this.BuildReply(g,f,0);this.SendReply(a);break;case 30:d=t.Unmarshall([\"w\",\"w\",\"s\"],b,\nc);h=d[0];e=d[2];x.Debug(\"[xattrwalk]: fid=\"+d[0]+\" newfid=\"+d[1]+\" name=\"+d[2]);this.SendError(f,\"Setxattr not supported\",95);this.SendReply(a);break;default:x.Debug(\"Error in Virtio9p: Unknown id \"+g+\" received\"),x.Abort()}};function C(a){this.ports=[];this.cpu=a;for(var b=0;65536>b;b++)this.ports[b]=this.create_empty_entry();var c=a.memory_size[0];for(b=0;b<<17<c;b++)a.memory_map_read8[b]=a.memory_map_write8[b]=void 0,a.memory_map_read32[b]=a.memory_map_write32[b]=void 0;this.mmap_register(c,4294967296-c,function(d){B(d>>>0,8);return 255},function(d,e){B(d>>>0,8);B(e,2)},function(d){B(d>>>0,8);return-1},function(d,e){B(d>>>0,8);B(e>>>0,8)})}\nC.prototype.create_empty_entry=function(){return{read8:this.empty_port_read8,read16:this.empty_port_read16,read32:this.empty_port_read32,write8:this.empty_port_write,write16:this.empty_port_write,write32:this.empty_port_write,device:void 0}};C.prototype.empty_port_read8=function(){return 255};C.prototype.empty_port_read16=function(){return 65535};C.prototype.empty_port_read32=function(){return-1};C.prototype.empty_port_write=function(){};\nC.prototype.register_read=function(a,b,c,d,e){c&&(this.ports[a].read8=c);d&&(this.ports[a].read16=d);e&&(this.ports[a].read32=e);this.ports[a].device=b};C.prototype.register_write=function(a,b,c,d,e){c&&(this.ports[a].write8=c);d&&(this.ports[a].write16=d);e&&(this.ports[a].write32=e);this.ports[a].device=b};\nC.prototype.register_read_consecutive=function(a,b,c,d,e,g){function f(){return c.call(this)|d.call(this)<<8}function h(){return e.call(this)|g.call(this)<<8}function l(){return c.call(this)|d.call(this)<<8|e.call(this)<<16|g.call(this)<<24}e&&g?(this.register_read(a,b,c,f,l),this.register_read(a+1,b,d),this.register_read(a+2,b,e,h),this.register_read(a+3,b,g)):(this.register_read(a,b,c,f),this.register_read(a+1,b,d))};\nC.prototype.register_write_consecutive=function(a,b,c,d,e,g){function f(m){c.call(this,m&255);d.call(this,m>>8&255)}function h(m){e.call(this,m&255);g.call(this,m>>8&255)}function l(m){c.call(this,m&255);d.call(this,m>>8&255);e.call(this,m>>16&255);g.call(this,m>>>24)}e&&g?(this.register_write(a,b,c,f,l),this.register_write(a+1,b,d),this.register_write(a+2,b,e,h),this.register_write(a+3,b,g)):(this.register_write(a,b,c,f),this.register_write(a+1,b,d))};\nC.prototype.mmap_read32_shim=function(a){var b=this.cpu.memory_map_read8[a>>>17];return b(a)|b(a+1)<<8|b(a+2)<<16|b(a+3)<<24};C.prototype.mmap_write32_shim=function(a,b){var c=this.cpu.memory_map_write8[a>>>17];c(a,b&255);c(a+1,b>>8&255);c(a+2,b>>16&255);c(a+3,b>>>24)};\nC.prototype.mmap_register=function(a,b,c,d,e,g){B(a>>>0,8);B(b,8);e||(e=this.mmap_read32_shim.bind(this));g||(g=this.mmap_write32_shim.bind(this));for(a>>>=17;0<b;a++)this.cpu.memory_map_read8[a]=c,this.cpu.memory_map_write8[a]=d,this.cpu.memory_map_read32[a]=e,this.cpu.memory_map_write32[a]=g,b-=131072};C.prototype.port_write8=function(a,b){var c=this.ports[a];c.write8===this.empty_port_write&&(B(a,4),B(b,2),this.get_port_description(a));return c.write8.call(c.device,b)};\nC.prototype.port_write16=function(a,b){var c=this.ports[a];c.write16===this.empty_port_write&&(B(a,4),B(b,4),this.get_port_description(a));return c.write16.call(c.device,b)};C.prototype.port_write32=function(a,b){var c=this.ports[a];c.write32===this.empty_port_write&&(B(a,4),B(b>>>0,8),this.get_port_description(a));return c.write32.call(c.device,b)};\nC.prototype.port_read8=function(a){var b=this.ports[a];b.read8===this.empty_port_read8&&(B(a,4),this.get_port_description(a));b=b.read8.call(b.device);B(a);return b};C.prototype.port_read16=function(a){var b=this.ports[a];b.read16===this.empty_port_read16&&(B(a,4),this.get_port_description(a));b=b.read16.call(b.device);B(a);return b};C.prototype.port_read32=function(a){var b=this.ports[a];b.read32===this.empty_port_read32&&(B(a,4),this.get_port_description(a));return b.read32.call(b.device)};\nvar ka={4:\"PORT_DMA_ADDR_2\",5:\"PORT_DMA_CNT_2\",10:\"PORT_DMA1_MASK_REG\",11:\"PORT_DMA1_MODE_REG\",12:\"PORT_DMA1_CLEAR_FF_REG\",13:\"PORT_DMA1_MASTER_CLEAR\",32:\"PORT_PIC1_CMD\",33:\"PORT_PIC1_DATA\",64:\"PORT_PIT_COUNTER0\",65:\"PORT_PIT_COUNTER1\",66:\"PORT_PIT_COUNTER2\",67:\"PORT_PIT_MODE\",96:\"PORT_PS2_DATA\",97:\"PORT_PS2_CTRLB\",100:\"PORT_PS2_STATUS\",112:\"PORT_CMOS_INDEX\",113:\"PORT_CMOS_DATA\",128:\"PORT_DIAG\",129:\"PORT_DMA_PAGE_2\",146:\"PORT_A20\",160:\"PORT_PIC2_CMD\",161:\"PORT_PIC2_DATA\",178:\"PORT_SMI_CMD\",179:\"PORT_SMI_STATUS\",\n212:\"PORT_DMA2_MASK_REG\",214:\"PORT_DMA2_MODE_REG\",218:\"PORT_DMA2_MASTER_CLEAR\",240:\"PORT_MATH_CLEAR\",368:\"PORT_ATA2_CMD_BASE\",496:\"PORT_ATA1_CMD_BASE\",632:\"PORT_LPT2\",744:\"PORT_SERIAL4\",760:\"PORT_SERIAL2\",884:\"PORT_ATA2_CTRL_BASE\",888:\"PORT_LPT1\",1E3:\"PORT_SERIAL3\",1008:\"PORT_FD_BASE\",1010:\"PORT_FD_DOR\",1012:\"PORT_FD_STATUS\",1013:\"PORT_FD_DATA\",1014:\"PORT_HD_DATA\",1015:\"PORT_FD_DIR\",1016:\"PORT_SERIAL1\",3320:\"PORT_PCI_CMD\",3321:\"PORT_PCI_REBOOT\",3324:\"PORT_PCI_DATA\",1026:\"PORT_BIOS_DEBUG\",1296:\"PORT_QEMU_CFG_CTL\",\n1297:\"PORT_QEMU_CFG_DATA\",45056:\"PORT_ACPI_PM_BASE\",45312:\"PORT_SMB_BASE\",35072:\"PORT_BIOS_APM\"};C.prototype.get_port_description=function(a){return ka[a]?\"  (\"+ka[a]+\")\":\"\"};function D(a,b){this.stopping=this.running=!1;this.idle=!0;this.tick_counter=0;this.worker=null;this.cpu=new E(a,b,()=>{this.idle&&this.next_tick(0)});this.bus=a;this.register_yield()}D.prototype.run=function(){this.stopping=!1;this.running||(this.running=!0,this.bus.send(\"emulator-started\"));this.next_tick(0)};D.prototype.do_tick=function(){if(this.stopping||!this.running)this.stopping=this.running=!1,this.bus.send(\"emulator-stopped\");else{this.idle=!1;var a=this.cpu.main_loop();this.next_tick(a)}};\nD.prototype.next_tick=function(a){const b=++this.tick_counter;this.idle=!0;this.yield(a,b)};D.prototype.yield_callback=function(a){a===this.tick_counter&&this.do_tick()};D.prototype.stop=function(){this.running&&(this.stopping=!0)};D.prototype.destroy=function(){this.unregister_yield()};D.prototype.restart=function(){this.cpu.reset_cpu();this.cpu.load_bios()};D.prototype.init=function(a){this.cpu.init(a,this.bus);this.bus.send(\"emulator-ready\")};\nif(\"undefined\"!==typeof process)D.prototype.yield=function(a,b){1>a?global.setImmediate(c=>this.yield_callback(c),b):setTimeout(c=>this.yield_callback(c),a,b)},D.prototype.register_yield=function(){},D.prototype.unregister_yield=function(){};else if(\"undefined\"!==typeof Worker){function a(){let b;globalThis.onmessage=function(c){const d=c.data.t;b=b&&clearTimeout(b);1>d?postMessage(c.data.tick):b=setTimeout(()=>postMessage(c.data.tick),d)}}D.prototype.register_yield=function(){const b=URL.createObjectURL(new Blob([\"(\"+\na.toString()+\")()\"],{type:\"text/javascript\"}));this.worker=new Worker(b);this.worker.onmessage=c=>this.yield_callback(c.data);URL.revokeObjectURL(b)};D.prototype.yield=function(b,c){this.worker.postMessage({t:b,tick:c})};D.prototype.unregister_yield=function(){this.worker&&this.worker.terminate();this.worker=null}}else D.prototype.yield=function(a){setTimeout(()=>{this.do_tick()},a)},D.prototype.register_yield=function(){},D.prototype.unregister_yield=function(){};D.prototype.save_state=function(){return this.cpu.save_state()};\nD.prototype.restore_state=function(a){return this.cpu.restore_state(a)};if(\"object\"===typeof performance&&performance.now)D.microtick=performance.now.bind(performance);else if(\"function\"===typeof require){const {performance:a}=require(\"perf_hooks\");D.microtick=a.now.bind(a)}else D.microtick=\"object\"===typeof process&&process.hrtime?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:Date.now;var H=H||{};H.exportSymbol=function(a,b){\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports?module.exports[a]=b:\"undefined\"!==typeof window?window[a]=b:\"function\"===typeof importScripts&&(self[a]=b)};H.exportProperty=function(){};var k=k||{};k.pads=function(a,b){return(a||0===a?a+\"\":\"\").padEnd(b,\" \")};k.pad0=function(a,b){return(a||0===a?a+\"\":\"\").padStart(b,\"0\")};k.zeros=function(a){return Array(a).fill(0)};k.range=function(a){return Array.from(Array(a).keys())};\nk.view=function(a,b,c,d){return new Proxy({},{get:function(e,g){e=new a(b.buffer,c,d);const f=e[g];if(\"function\"===typeof f)return f.bind(e);/^\\d+$/.test(g);return f},set:function(e,g,f){/^\\d+$/.test(g);(new a(b.buffer,c,d))[g]=f;return!0}})};function B(a,b){a=a?a.toString(16):\"\";return\"0x\"+k.pad0(a.toUpperCase(),b||1)}\nif(\"undefined\"!==typeof crypto&&crypto.getRandomValues){const a=new Int32Array(1);k.get_rand_int=function(){crypto.getRandomValues(a);return a[0]}}else if(\"undefined\"!==typeof require){const a=require(\"crypto\");k.get_rand_int=function(){return a.randomBytes(4).readInt32LE(0)}}\n(function(){if(\"function\"===typeof Math.clz32)k.int_log2=function(d){return 31-Math.clz32(d)};else{for(var a=new Int8Array(256),b=0,c=-2;256>b;b++)b&b-1||c++,a[b]=c;k.int_log2=function(d){d>>>=0;var e=d>>>16;if(e){var g=e>>>8;return g?24+a[g]:16+a[e]}return(g=d>>>8)?8+a[g]:a[d]}}})();k.round_up_to_next_power_of_2=function(a){return 1>=a?1:1<<1+k.int_log2(a-1)};\nfunction la(a){var b=new Uint8Array(a),c,d;this.length=0;this.push=function(e){this.length!==a&&this.length++;b[d]=e;d=d+1&a-1};this.shift=function(){if(this.length){var e=b[c];c=c+1&a-1;this.length--;return e}return-1};this.peek=function(){return this.length?b[c]:-1};this.clear=function(){this.length=d=c=0};this.clear()}function oa(a){this.size=a;this.data=new Float32Array(a);this.length=this.end=this.start=0}\noa.prototype.push=function(a){this.length===this.size?this.start=this.start+1&this.size-1:this.length++;this.data[this.end]=a;this.end=this.end+1&this.size-1};oa.prototype.shift=function(){if(this.length){var a=this.data[this.start];this.start=this.start+1&this.size-1;this.length--;return a}};\noa.prototype.shift_block=function(a){var b=new Float32Array(a);a>this.length&&(a=this.length);var c=this.start+a,d=this.data.subarray(this.start,c);b.set(d);c>=this.size&&(c-=this.size,b.set(this.data.subarray(0,c),d.length));this.start=c;this.length-=a;return b};oa.prototype.peek=function(){if(this.length)return this.data[this.start]};oa.prototype.clear=function(){this.length=this.end=this.start=0};\nk.Bitmap=function(a){\"number\"===typeof a?this.view=new Uint8Array(a+7>>3):a instanceof ArrayBuffer&&(this.view=new Uint8Array(a))};k.Bitmap.prototype.set=function(a,b){const c=a>>3;a=1<<(a&7);this.view[c]=b?this.view[c]|a:this.view[c]&~a};k.Bitmap.prototype.get=function(a){return this.view[a>>3]>>(a&7)&1};k.Bitmap.prototype.get_buffer=function(){return this.view.buffer};k.load_file=\"undefined\"===typeof XMLHttpRequest?pa:qa;\nfunction qa(a,b,c){function d(){const l=c||0;setTimeout(()=>{qa(a,b,l+1)},1E3*([1,1,2,3,5,8,13,21][l]||34))}var e=new XMLHttpRequest;e.open(b.method||\"get\",a,!0);e.responseType=b.as_json?\"json\":\"arraybuffer\";if(b.headers)for(var g=Object.keys(b.headers),f=0;f<g.length;f++){var h=g[f];e.setRequestHeader(h,b.headers[h])}b.range&&(g=b.range.start,e.setRequestHeader(\"Range\",\"bytes=\"+g+\"-\"+(g+b.range.length-1)),e.setRequestHeader(\"X-Accept-Encoding\",\"identity\"),e.onreadystatechange=function(){200===e.status&&\n(console.error(\"Server sent full file in response to ranged request, aborting\",{filename:a}),e.abort())});e.onload=function(){if(4===e.readyState)if(200!==e.status&&206!==e.status)console.error(\"Loading the image \"+a+\" failed (status %d)\",e.status),500<=e.status&&600>e.status&&d();else if(e.response){if(b.range){const l=e.getResponseHeader(\"Content-Encoding\");l&&\"identity\"!==l&&console.error(\"Server sent Content-Encoding in response to ranged request\",{filename:a,enc:l})}b.done&&b.done(e.response,\ne)}};e.onerror=function(l){console.error(\"Loading the image \"+a+\" failed\",l);d()};b.progress&&(e.onprogress=function(l){b.progress(l)});e.send(null)}\nfunction pa(a,b){const c=require(\"fs\");b.range?c.open(a,\"r\",(d,e)=>{if(d)throw d;d=b.range.length;var g=Buffer.allocUnsafe(d);c.read(e,g,0,d,b.range.start,f=>{if(f)throw f;b.done&&b.done(new Uint8Array(g));c.close(e,h=>{if(h)throw h;})})}):c.readFile(a,{encoding:b.as_json?\"utf-8\":null},function(d,e){d?console.log(\"Could not read file:\",a,d):(d=e,d=b.as_json?JSON.parse(d):(new Uint8Array(d)).buffer,b.done(d))})}\nk.read_sized_string_from_mem=function(a,b,c){return String.fromCharCode(...(new Uint8Array(a.buffer,b>>>0,c>>>0)))};(function(){function a(f){this.buffer=f;this.byteLength=f.byteLength;this.onprogress=this.onload=void 0}function b(f,h,l){this.filename=f;this.byteLength=h;this.block_cache=new Map;this.block_cache_is_write=new Set;this.fixed_chunk_size=l;this.cache_reads=!!l;this.onprogress=this.onload=void 0}function c(f,h,l,m,n){const p=f.match(/\\.[^\\.]+(\\.zst)?$/);this.extension=p?p[0]:\"\";this.basename=f.substring(0,f.length-this.extension.length);this.is_zstd=this.extension.endsWith(\".zst\");this.basename.endsWith(\"/\")||\n(this.basename+=\"-\");this.block_cache=new Map;this.block_cache_is_write=new Set;this.byteLength=h;this.fixed_chunk_size=l;this.partfile_alt_format=!!m;this.zstd_decompress=n;this.cache_reads=!!l;this.onprogress=this.onload=void 0}function d(f){this.file=f;this.byteLength=f.size;1073741824<f.size&&console.warn(\"SyncFileBuffer: Allocating buffer of \"+(f.size>>20)+\" MB ...\");this.buffer=new ArrayBuffer(f.size);this.onprogress=this.onload=void 0}function e(f){this.file=f;this.byteLength=f.size;this.block_cache=\nnew Map;this.block_cache_is_write=new Set;this.onprogress=this.onload=void 0}k.SyncBuffer=a;k.AsyncXHRBuffer=b;k.AsyncXHRPartfileBuffer=c;k.AsyncFileBuffer=e;k.SyncFileBuffer=d;k.buffer_from_object=function(f,h){if(f.buffer instanceof ArrayBuffer)return new k.SyncBuffer(f.buffer);if(\"undefined\"!==typeof File&&f.buffer instanceof File)return h=f.async,void 0===h&&(h=268435456<=f.buffer.size),h?new k.AsyncFileBuffer(f.buffer):new k.SyncFileBuffer(f.buffer);if(f.url)return f.use_parts?new k.AsyncXHRPartfileBuffer(f.url,\nf.size,f.fixed_chunk_size,!1,h):new k.AsyncXHRBuffer(f.url,f.size,f.fixed_chunk_size)};a.prototype.load=function(){this.onload&&this.onload({buffer:this.buffer})};a.prototype.get=function(f,h,l){l(new Uint8Array(this.buffer,f,h))};a.prototype.set=function(f,h,l){(new Uint8Array(this.buffer,f,h.byteLength)).set(h);l()};a.prototype.get_buffer=function(f){f(this.buffer)};a.prototype.get_state=function(){const f=[];f[0]=this.byteLength;f[1]=new Uint8Array(this.buffer);return f};a.prototype.set_state=\nfunction(f){this.byteLength=f[0];this.buffer=f[1].slice().buffer};b.prototype.load=function(){void 0!==this.byteLength?this.onload&&this.onload(Object.create(null)):g(this.filename,(f,h)=>{if(f)throw Error(\"Cannot use: \"+this.filename+\". \"+f);this.byteLength=h;this.onload&&this.onload(Object.create(null))})};b.prototype.get_from_cache=function(f,h){var l=h/256;f/=256;for(var m=0;m<l;m++)if(!this.block_cache.get(f+m))return;if(1===l)return this.block_cache.get(f);h=new Uint8Array(h);for(m=0;m<l;m++)h.set(this.block_cache.get(f+\nm),256*m);return h};b.prototype.get=function(f,h,l){var m=this.get_from_cache(f,h);if(m)l(m);else{var n=f,p=h;this.fixed_chunk_size&&(n=f-f%this.fixed_chunk_size,p=Math.ceil((f-n+h)/this.fixed_chunk_size)*this.fixed_chunk_size);k.load_file(this.filename,{done:function(q){q=new Uint8Array(q);this.handle_read(n,p,q);n===f&&p===h?l(q):l(q.subarray(f-n,f-n+h))}.bind(this),range:{start:n,length:p}})}};b.prototype.set=function(f,h,l){f/=256;for(var m=h.length/256,n=0;n<m;n++){var p=this.block_cache.get(f+\nn);if(void 0===p)p=h.slice(256*n,256*(n+1)),this.block_cache.set(f+n,p);else{const q=h.subarray(256*n,256*(n+1));p.set(q)}this.block_cache_is_write.add(f+n)}l()};b.prototype.handle_read=function(f,h,l){f/=256;h/=256;for(var m=0;m<h;m++){const n=this.block_cache.get(f+m);n?l.set(n,256*m):this.cache_reads&&this.block_cache.set(f+m,l.slice(256*m,256*(m+1)))}};b.prototype.get_buffer=function(f){f()};b.prototype.get_state=function(){const f=[],h=[];for(const [l,m]of this.block_cache)isFinite(l),this.block_cache_is_write.has(l)&&\nh.push([l,m]);f[0]=h;return f};b.prototype.set_state=function(f){f=f[0];this.block_cache.clear();this.block_cache_is_write.clear();for(const [h,l]of f)isFinite(h),this.block_cache.set(h,l),this.block_cache_is_write.add(h)};c.prototype.load=function(){this.onload&&this.onload(Object.create(null))};c.prototype.get=function(f,h,l){var m=this.get_from_cache(f,h);if(m)l(m);else if(this.fixed_chunk_size){const p=Math.floor(f/this.fixed_chunk_size),q=f-p*this.fixed_chunk_size,r=Math.ceil((q+h)/this.fixed_chunk_size),\nA=new Uint8Array(r*this.fixed_chunk_size);let w=0;for(let u=0;u<r;u++){var n=(p+u)*this.fixed_chunk_size;m=this.partfile_alt_format?this.basename+(p+u+\"\").padStart(8,\"0\")+this.extension:this.basename+n+\"-\"+(n+this.fixed_chunk_size)+this.extension;(n=this.get_from_cache(n,this.fixed_chunk_size))?(A.set(n,u*this.fixed_chunk_size),w++,w===r&&l(A.subarray(q,q+h))):k.load_file(m,{done:async function(G){G=new Uint8Array(G);this.is_zstd&&(G=await this.zstd_decompress(this.fixed_chunk_size,G),G=new Uint8Array(G));\nA.set(G,u*this.fixed_chunk_size);this.handle_read((p+u)*this.fixed_chunk_size,this.fixed_chunk_size|0,G);w++;w===r&&l(A.subarray(q,q+h))}.bind(this)})}}else k.load_file(this.basename+f+\"-\"+(f+h)+this.extension,{done:function(p){p=new Uint8Array(p);this.handle_read(f,h,p);l(p)}.bind(this)})};c.prototype.get_from_cache=b.prototype.get_from_cache;c.prototype.set=b.prototype.set;c.prototype.handle_read=b.prototype.handle_read;c.prototype.get_state=b.prototype.get_state;c.prototype.set_state=b.prototype.set_state;\nd.prototype.load=function(){this.load_next(0)};d.prototype.load_next=function(f){var h=new FileReader;h.onload=function(m){m=new Uint8Array(m.target.result);(new Uint8Array(this.buffer,f)).set(m);this.load_next(f+4194304)}.bind(this);if(this.onprogress)this.onprogress({loaded:f,total:this.byteLength,lengthComputable:!0});if(f<this.byteLength){var l=this.file.slice(f,Math.min(f+4194304,this.byteLength));h.readAsArrayBuffer(l)}else this.file=void 0,this.onload&&this.onload({buffer:this.buffer})};d.prototype.get=\na.prototype.get;d.prototype.set=a.prototype.set;d.prototype.get_buffer=a.prototype.get_buffer;d.prototype.get_state=a.prototype.get_state;d.prototype.set_state=a.prototype.set_state;e.prototype.load=function(){this.onload&&this.onload(Object.create(null))};e.prototype.get=function(f,h,l){var m=this.get_from_cache(f,h);m?l(m):(m=new FileReader,m.onload=function(n){n=new Uint8Array(n.target.result);this.handle_read(f,h,n);l(n)}.bind(this),m.readAsArrayBuffer(this.file.slice(f,f+h)))};e.prototype.get_from_cache=\nb.prototype.get_from_cache;e.prototype.set=b.prototype.set;e.prototype.handle_read=b.prototype.handle_read;e.prototype.get_state=b.prototype.get_state;e.prototype.set_state=b.prototype.set_state;e.prototype.get_buffer=function(f){f()};e.prototype.get_as_file=function(f){for(var h=[],l=Array.from(this.block_cache.keys()).sort(function(r,A){return r-A}),m=0,n=0;n<l.length;n++){var p=l[n],q=this.block_cache.get(p);p*=256;p!==m&&(h.push(this.file.slice(m,p)),m=p);h.push(q);m+=q.length}m!==this.file.size&&\nh.push(this.file.slice(m));return new File(h,f)};var g=\"undefined\"===typeof XMLHttpRequest?function(f,h){require(\"fs\").stat(f,(l,m)=>{l?h(l):h(null,m.size)})}:function(f,h){k.load_file(f,{done:(l,m)=>{l=m.getResponseHeader(\"Content-Range\")||\"\";(m=l.match(/\\/(\\d+)\\s*$/))?h(null,+m[1]):h(\"`Range: bytes=...` header not supported (Got `\"+l+\"`)\")},headers:{Range:\"bytes=0-0\",\"X-Accept-Encoding\":\"identity\"}})}})();function ra(a,b,c,d,e,g){this.master=new K(this,a,b,d,e,0,g);this.slave=new K(this,a,c,!1,e,1,g);this.current_interface=this.master;this.cpu=a;0===e?(this.ata_port=496,this.irq=14,this.pci_id=240):1===e&&(this.ata_port=368,this.irq=15,this.pci_id=248);this.ata_port_high=this.ata_port|516;this.master_port=46080;this.pci_space=[134,128,16,112,5,0,160,2,0,128,1,1,0,0,0,0,this.ata_port&255|1,this.ata_port>>8,0,0,this.ata_port_high&255|1,this.ata_port_high>>8,0,0,0,0,0,0,0,0,0,0,this.master_port&255|1,\nthis.master_port>>8,0,0,0,0,0,0,0,0,0,0,67,16,212,130,0,0,0,0,0,0,0,0,0,0,0,0,this.irq,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_bars=[{size:8},{size:4},void 0,void 0,{size:16}];this.name=\"ide\"+e;this.device_control=2;a.io.register_read(this.ata_port|7,this,function(){this.cpu.device_lower_irq(this.irq);return this.read_status()});a.io.register_read(this.ata_port_high|\n2,this,this.read_status);a.io.register_write(this.ata_port_high|2,this,this.write_control);a.io.register_read(this.ata_port|0,this,function(){return this.current_interface.read_data(1)},function(){return this.current_interface.read_data(2)},function(){return this.current_interface.read_data(4)});a.io.register_read(this.ata_port|1,this,function(){B(this.current_interface.error&255);return this.current_interface.error&255});a.io.register_read(this.ata_port|2,this,function(){B(this.current_interface.bytecount&\n255);return this.current_interface.bytecount&255});a.io.register_read(this.ata_port|3,this,function(){B(this.current_interface.sector&255);return this.current_interface.sector&255});a.io.register_read(this.ata_port|4,this,function(){B(this.current_interface.cylinder_low&255);return this.current_interface.cylinder_low&255});a.io.register_read(this.ata_port|5,this,function(){B(this.current_interface.cylinder_high&255);return this.current_interface.cylinder_high&255});a.io.register_read(this.ata_port|\n6,this,function(){return this.current_interface.drive_head&255});a.io.register_write(this.ata_port|0,this,function(f){this.current_interface.write_data_port8(f)},function(f){this.current_interface.write_data_port16(f)},function(f){this.current_interface.write_data_port32(f)});a.io.register_write(this.ata_port|1,this,function(f){B(f);this.master.lba_count=(this.master.lba_count<<8|f)&65535;this.slave.lba_count=(this.slave.lba_count<<8|f)&65535});a.io.register_write(this.ata_port|2,this,function(f){B(f);\nthis.master.bytecount=(this.master.bytecount<<8|f)&65535;this.slave.bytecount=(this.slave.bytecount<<8|f)&65535});a.io.register_write(this.ata_port|3,this,function(f){B(f);this.master.sector=(this.master.sector<<8|f)&65535;this.slave.sector=(this.slave.sector<<8|f)&65535});a.io.register_write(this.ata_port|4,this,function(f){B(f);this.master.cylinder_low=(this.master.cylinder_low<<8|f)&65535;this.slave.cylinder_low=(this.slave.cylinder_low<<8|f)&65535});a.io.register_write(this.ata_port|5,this,function(f){B(f);\nthis.master.cylinder_high=(this.master.cylinder_high<<8|f)&65535;this.slave.cylinder_high=(this.slave.cylinder_high<<8|f)&65535});a.io.register_write(this.ata_port|6,this,function(f){var h=f&16;B(f,2);this.current_interface=h?this.slave:this.master;this.master.drive_head=f;this.slave.drive_head=f;this.master.is_lba=this.slave.is_lba=f>>6&1;this.master.head=this.slave.head=f&15});this.dma_command=this.dma_status=this.prdt_addr=0;a.io.register_write(this.ata_port|7,this,function(f){this.cpu.device_lower_irq(this.irq);\nthis.current_interface.ata_command(f)});a.io.register_read(this.master_port|4,this,void 0,void 0,this.dma_read_addr);a.io.register_write(this.master_port|4,this,void 0,void 0,this.dma_set_addr);a.io.register_read(this.master_port,this,this.dma_read_command8,void 0,this.dma_read_command);a.io.register_write(this.master_port,this,this.dma_write_command8,void 0,this.dma_write_command);a.io.register_read(this.master_port|2,this,this.dma_read_status);a.io.register_write(this.master_port|2,this,this.dma_write_status);\na.io.register_read(this.master_port|8,this,function(){return 0});a.io.register_read(this.master_port|10,this,function(){return 0});a.devices.pci.register_device(this)}ra.prototype.read_status=function(){if(this.current_interface.buffer){var a=this.current_interface.status;B(a,2);return a}return 0};ra.prototype.write_control=function(a){B(a,2);a&4&&(this.cpu.device_lower_irq(this.irq),this.master.device_reset(),this.slave.device_reset());this.device_control=a};\nra.prototype.dma_read_addr=function(){B(this.prdt_addr,8);return this.prdt_addr};ra.prototype.dma_set_addr=function(a){B(a,8);this.prdt_addr=a};ra.prototype.dma_read_status=function(){B(this.dma_status);return this.dma_status};ra.prototype.dma_write_status=function(a){B(a);this.dma_status&=~(a&6)};ra.prototype.dma_read_command=function(){return this.dma_read_command8()|this.dma_read_status()<<16};ra.prototype.dma_read_command8=function(){B(this.dma_command);return this.dma_command};\nra.prototype.dma_write_command=function(a){B(a);this.dma_write_command8(a&255);this.dma_write_status(a>>16&255)};\nra.prototype.dma_write_command8=function(a){B(a);const b=this.dma_command;this.dma_command=a&9;if((b&1)!==(a&1))if(0===(a&1))this.dma_status&=-2;else switch(this.dma_status|=1,this.current_interface.current_command){case 37:case 200:this.current_interface.do_ata_read_sectors_dma();break;case 202:case 53:this.current_interface.do_ata_write_sectors_dma();break;case 160:this.current_interface.do_atapi_dma();break;default:B(this.current_interface.current_command)}};\nra.prototype.push_irq=function(){0===(this.device_control&2)&&(this.dma_status|=4,this.cpu.device_raise_irq(this.irq))};ra.prototype.get_state=function(){var a=[];a[0]=this.master;a[1]=this.slave;a[2]=this.ata_port;a[3]=this.irq;a[4]=this.pci_id;a[5]=this.ata_port_high;a[6]=this.master_port;a[7]=this.name;a[8]=this.device_control;a[9]=this.prdt_addr;a[10]=this.dma_status;a[11]=this.current_interface===this.master;a[12]=this.dma_command;return a};\nra.prototype.set_state=function(a){this.master.set_state(a[0]);this.slave.set_state(a[1]);this.ata_port=a[2];this.irq=a[3];this.pci_id=a[4];this.ata_port_high=a[5];this.master_port=a[6];this.name=a[7];this.device_control=a[8];this.prdt_addr=a[9];this.dma_status=a[10];this.current_interface=a[11]?this.master:this.slave;this.dma_command=a[12]};\nfunction K(a,b,c,d,e,g,f){this.device=a;this.bus=f;this.nr=e;this.cpu=b;this.buffer=c;this.sector_size=d?2048:512;this.is_atapi=d;this.cylinder_count=this.sectors_per_track=this.head_count=this.sector_count=0;this.buffer&&(this.sector_count=this.buffer.byteLength/this.sector_size,this.sector_count!==(this.sector_count|0)&&(this.sector_count=Math.ceil(this.sector_count)),d?(this.head_count=1,this.sectors_per_track=0):(this.head_count=16,this.sectors_per_track=63),this.cylinder_count=this.sector_count/\nthis.head_count/this.sectors_per_track,this.cylinder_count!==(this.cylinder_count|0)&&(this.cylinder_count=Math.floor(this.cylinder_count)),a=b.devices.rtc,a.cmos_write(57,a.cmos_read(57)|1<<4*this.nr),a.cmos_write(18,a.cmos_read(18)&15|240),a.cmos_write(27,this.cylinder_count&255),a.cmos_write(28,this.cylinder_count>>8&255),a.cmos_write(29,this.head_count&255),a.cmos_write(30,255),a.cmos_write(31,255),a.cmos_write(32,200),a.cmos_write(33,this.cylinder_count&255),a.cmos_write(34,this.cylinder_count>>\n8&255),a.cmos_write(35,this.sectors_per_track&255));this.buffer=c;this.drive_head=this.head=this.cylinder_high=this.cylinder_low=this.lba_count=this.sector=this.bytecount=this.is_lba=0;this.status=80;this.sectors_per_drq=128;this.data_pointer=this.error=0;this.data=new Uint8Array(65536);this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.data_end=this.data_length=0;this.current_atapi_command=this.current_command=-1;this.last_io_id=this.write_dest=0;this.in_progress_io_ids=\nnew Set;this.cancelled_io_ids=new Set;Object.seal(this)}K.prototype.device_reset=function(){this.is_atapi?(this.status=0,this.sector=this.error=this.bytecount=1,this.cylinder_low=20,this.cylinder_high=235):(this.status=81,this.sector=this.error=this.bytecount=1,this.cylinder_high=this.cylinder_low=0);this.cancel_io_operations()};K.prototype.push_irq=function(){this.device.push_irq()};\nK.prototype.ata_command=function(a){B(a);if(this.buffer)switch(this.current_command=a,this.error=0,a){case 8:this.data_length=this.data_end=this.data_pointer=0;this.device_reset();this.push_irq();break;case 16:this.status=80;this.cylinder_low=0;this.push_irq();break;case 248:this.status=80;a=this.sector_count-1;this.sector=a&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;this.drive_head=this.drive_head&240|a>>24&15;this.push_irq();break;case 39:this.status=80;a=this.sector_count-1;this.sector=\na&255;this.cylinder_low=a>>8&255;this.cylinder_high=a>>16&255;this.sector|=a>>24<<8&65280;this.push_irq();break;case 32:case 36:case 41:case 196:this.ata_read_sectors(a);break;case 48:case 52:case 57:case 197:this.ata_write_sectors(a);break;case 144:this.push_irq();this.error=257;this.status=80;break;case 145:this.status=80;this.push_irq();break;case 160:this.is_atapi&&(this.status=88,this.data_allocate(12),this.data_end=12,this.bytecount=1,this.push_irq());break;case 161:this.is_atapi?(this.create_identify_packet(),\nthis.status=88,this.cylinder_low=20,this.cylinder_high=235):this.status=65;this.push_irq();break;case 198:B(this.bytecount&255);this.sectors_per_drq=this.bytecount&255;this.status=80;this.push_irq();break;case 37:case 200:this.ata_read_sectors_dma(a);break;case 53:case 202:this.ata_write_sectors_dma(a);break;case 64:this.status=80;this.push_irq();break;case 218:this.status=65;this.error=4;this.push_irq();break;case 224:this.status=80;this.push_irq();break;case 225:this.status=80;this.push_irq();break;\ncase 231:this.status=80;this.push_irq();break;case 236:if(this.is_atapi){this.status=65;this.error=4;this.push_irq();break}this.create_identify_packet();this.status=88;this.push_irq();break;case 234:this.status=80;this.push_irq();break;case 239:B(this.bytecount&255);this.status=80;this.push_irq();break;case 222:this.status=80;this.push_irq();break;case 245:this.status=80;this.push_irq();break;case 249:this.status=65;this.error=4;break;default:B(a),this.status=65,this.error=4}else this.error=4,this.status=\n65,this.push_irq()};\nK.prototype.atapi_handle=function(){B(this.data[0]);this.data_pointer=0;this.current_atapi_command=this.data[0];switch(this.current_atapi_command){case 0:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 3:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;this.data[0]=240;this.data[2]=5;this.data[7]=8;break;case 18:var a=this.data[4];this.status=88;B(this.data[1],2);this.data.set([5,128,1,49,31,0,0,0,83,79,78,89,32,32,32,32,67,68,45,82,79,\n77,32,67,68,85,45,49,48,48,48,32,49,46,49,97]);this.data_end=this.data_length=Math.min(36,a);break;case 26:this.data_allocate(this.data[4]);this.data_end=this.data_length;this.status=88;break;case 30:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 37:a=this.sector_count-1;this.data_set(new Uint8Array([a>>24&255,a>>16&255,a>>8&255,a&255,0,0,this.sector_size>>8&255,this.sector_size&255]));this.data_end=this.data_length;this.status=88;break;case 40:this.lba_count&1?this.atapi_read_dma(this.data):\nthis.atapi_read(this.data);break;case 66:a=this.data[8];this.data_allocate(Math.min(8,a));this.data_end=this.data_length;this.status=88;break;case 67:a=this.data[8]|this.data[7]<<8;var b=this.data[9]>>6;this.data_allocate(a);this.data_end=this.data_length;B(b,2);B(this.data[6]);0===b?(a=this.sector_count,this.data.set(new Uint8Array([0,18,1,1,0,20,1,0,0,0,0,0,0,22,170,0,a>>24,a>>16&255,a>>8&255,a&255]))):1===b&&this.data.set(new Uint8Array([0,10,1,1,0,0,0,0,0,0,0,0]));this.status=88;break;case 70:a=\nthis.data[8]|this.data[7]<<8;a=Math.min(a,32);this.data_allocate(a);this.data_end=this.data_length;this.data[0]=a-4>>24&255;this.data[1]=a-4>>16&255;this.data[2]=a-4>>8&255;this.data[3]=a-4&255;this.data[6]=8;this.data[10]=3;this.status=88;break;case 81:this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;case 82:B(this.data[0]);this.status=81;this.data_length=0;this.error=80;break;case 90:a=this.data[8]|this.data[7]<<8;b=this.data[2];B(b);42===b&&this.data_allocate(Math.min(30,\na));this.data_end=this.data_length;this.status=88;break;case 189:this.data_allocate(this.data[9]|this.data[8]<<8);this.data_end=this.data_length;this.data[5]=1;this.status=88;break;case 74:this.status=81;this.data_length=0;this.error=80;B(this.data[0]);break;case 190:B(this.data[0]);this.data_allocate(0);this.data_end=this.data_length;this.status=80;break;default:this.status=81,this.data_length=0,this.error=80,B(this.data[0])}this.bytecount=this.bytecount&-8|2;0===(this.status&128)&&this.push_irq();\n0===(this.status&128)&&0===this.data_length&&(this.bytecount|=1,this.status&=-9)};K.prototype.do_write=function(){this.status=80;var a=this.data.subarray(0,this.data_length);this.ata_advance(this.current_command,this.data_length/512);this.push_irq();this.buffer.set(this.write_dest,a,function(){});this.report_write(this.data_length)};\nK.prototype.atapi_read=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<8|a[5],c=a[7]<<8|a[8];a=a[1];var d=c*this.sector_size,e=b*this.sector_size;ta(\"CD read lba=\"+B(b)+\" lbacount=\"+B(c)+\" bytecount=\"+B(d)+\" flags=\"+B(a),32768);this.data_length=0;var g=this.cylinder_high<<8&65280|this.cylinder_low&255;ta(B(this.cylinder_high,2)+\" \"+B(this.cylinder_low,2),32768);this.cylinder_low=this.cylinder_high=0;65535===g&&g--;g>d&&(g=d);e>=this.buffer.byteLength?(ua(!1,\"CD read: Outside of disk  end=\"+B(e+d)+\" size=\"+\nB(this.buffer.byteLength),32768),this.status=255,this.push_irq()):0===d?(this.status=80,this.data_pointer=0):(d=Math.min(d,this.buffer.byteLength-e),this.status=208,this.report_read_start(),this.read_buffer(e,d,f=>{this.data_set(f);this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();this.data_end=g&=-4;this.data_end>this.data_length&&(this.data_end=this.data_length);this.cylinder_low=this.data_end&255;this.cylinder_high=this.data_end>>8&255;this.report_read_end(d)}))};\nK.prototype.atapi_read_dma=function(a){var b=a[2]<<24|a[3]<<16|a[4]<<8|a[5],c=a[7]<<8|a[8];a=a[1];var d=c*this.sector_size,e=b*this.sector_size;ta(\"CD read DMA lba=\"+B(b)+\" lbacount=\"+B(c)+\" bytecount=\"+B(d)+\" flags=\"+B(a),32768);e>=this.buffer.byteLength?(ua(!1,\"CD read: Outside of disk  end=\"+B(e+d)+\" size=\"+B(this.buffer.byteLength),32768),this.status=255,this.push_irq()):(this.status=208,this.report_read_start(),this.read_buffer(e,d,g=>{this.report_read_end(d);this.status=88;this.bytecount=this.bytecount&\n-8|2;this.data_set(g);this.do_atapi_dma()}))};\nK.prototype.do_atapi_dma=function(){if(0!==(this.device.dma_status&1)&&0!==(this.status&8)){var a=this.device.prdt_addr,b=0,c=this.data;do{var d=this.cpu.read32s(a),e=this.cpu.read16(a+4),g=this.cpu.read8(a+7)&128;e||(e=65536);B(d);B(e);B(this.data_length);this.cpu.write_blob(c.subarray(b,Math.min(b+e,this.data_length)),d);b+=e;a+=8;if(b>=this.data_length&&!g){B(b);B(this.data_length);B(this.current_command);break}}while(!g);this.status=80;this.device.dma_status&=-2;this.bytecount=this.bytecount&\n-8|3;this.push_irq()}};K.prototype.read_data=function(a){if(this.data_pointer<this.data_end){B(this.data_pointer);var b=1===a?this.data[this.data_pointer]:2===a?this.data16[this.data_pointer>>>1]:this.data32[this.data_pointer>>>2];this.data_pointer+=a;0===(this.data_pointer&(0===(this.data_end&4095)?4095:255))&&(B(this.data[this.data_pointer],2),B(this.data_pointer),B(this.data_length));this.data_pointer>=this.data_end&&this.read_end();return b}this.data_pointer+=a;return 0};\nK.prototype.read_end=function(){B(this.current_command);B(this.data_pointer);B(this.data_end);B(this.data_length);if(160===this.current_command)if(this.data_end===this.data_length)this.status=80,this.bytecount=this.bytecount&-8|3,this.push_irq();else{this.status=88;this.bytecount=this.bytecount&-8|2;this.push_irq();var a=this.cylinder_high<<8&65280|this.cylinder_low&255;this.data_end+a>this.data_length?(this.cylinder_low=this.data_length-this.data_end&255,this.cylinder_high=this.data_length-this.data_end>>\n8&255,this.data_end=this.data_length):this.data_end+=a;B(this.data_end)}else this.error=0,this.data_pointer>=this.data_length?this.status=80:(a=196===this.current_command||41===this.current_command?Math.min(this.sectors_per_drq,(this.data_length-this.data_end)/512):1,this.ata_advance(this.current_command,a),this.data_end+=512*a,this.status=88,this.push_irq())};\nK.prototype.write_data_port=function(a,b){if(this.data_pointer>=this.data_end)B(a),B(this.data_end),B(this.data_pointer);else{if(0===(this.data_pointer+b&(0===(this.data_end&4095)?4095:255))||20>this.data_end)B(a>>>0),B(this.data_end),B(this.data_pointer);1===b?this.data[this.data_pointer++]=a:2===b?(this.data16[this.data_pointer>>>1]=a,this.data_pointer+=2):(this.data32[this.data_pointer>>>2]=a,this.data_pointer+=4);this.data_pointer===this.data_end&&this.write_end()}};\nK.prototype.write_data_port8=function(a){this.write_data_port(a,1)};K.prototype.write_data_port16=function(a){this.write_data_port(a,2)};K.prototype.write_data_port32=function(a){this.write_data_port(a,4)};K.prototype.write_end=function(){160===this.current_command?this.atapi_handle():(B(this.data_pointer),B(this.data_length),this.data_pointer>=this.data_length?this.do_write():(B(this.current_command),this.status=88,this.data_end+=512,this.push_irq()))};\nK.prototype.ata_advance=function(a,b){this.bytecount-=b;36===a||41===a||52===a||57===a||37===a||53===a?(a=b+this.get_lba48(),this.sector=a&255|a>>16&65280,this.cylinder_low=a>>8&255,this.cylinder_high=a>>16&255):this.is_lba?(a=b+this.get_lba28(),this.sector=a&255,this.cylinder_low=a>>8&255,this.cylinder_high=a>>16&255,this.head=this.head&-16|a&15):(a=b+this.get_chs(),b=a/(this.head_count*this.sectors_per_track)|0,this.cylinder_low=b&255,this.cylinder_high=b>>8&255,this.head=(a/this.sectors_per_track|\n0)%this.head_count&15,this.sector=a%this.sectors_per_track+1&255,this.get_chs())};\nK.prototype.ata_read_sectors=function(a){var b=36===a||41===a,c=this.get_count(b);b=this.get_lba(b);var d=32===a||36===a,e=c*this.sector_size,g=b*this.sector_size;ta(\"ATA read cmd=\"+B(a)+\" mode=\"+(this.is_lba?\"lba\":\"chs\")+\" lba=\"+B(b)+\" lbacount=\"+B(c)+\" bytecount=\"+B(e),32768);g+e>this.buffer.byteLength?(this.status=255,this.push_irq()):(this.status=192,this.report_read_start(),this.read_buffer(g,e,f=>{this.data_set(f);this.status=88;this.data_end=d?512:Math.min(e,512*this.sectors_per_drq);this.ata_advance(a,\nd?1:Math.min(c,this.sectors_per_track));this.push_irq();this.report_read_end(e)}))};K.prototype.ata_read_sectors_dma=function(a){var b=37===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;B(b);B(a);B(c);d+c>this.buffer.byteLength?(this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};\nK.prototype.do_ata_read_sectors_dma=function(){var a=37===this.current_command,b=this.get_count(a);a=this.get_lba(a);var c=b*this.sector_size;a*=this.sector_size;this.report_read_start();this.read_buffer(a,c,d=>{var e=this.device.prdt_addr,g=0;do{var f=this.cpu.read32s(e),h=this.cpu.read16(e+4),l=this.cpu.read8(e+7)&128;h||(h=65536);B(f);B(h);this.cpu.write_blob(d.subarray(g,g+h),f);g+=h;e+=8}while(!l);this.ata_advance(this.current_command,b);this.status=80;this.device.dma_status&=-2;this.current_command=\n-1;this.push_irq();this.report_read_end(c)})};K.prototype.ata_write_sectors=function(a){var b=52===a||57===a,c=this.get_count(b);b=this.get_lba(b);a=48===a||52===a;var d=c*this.sector_size,e=b*this.sector_size;B(b);B(c);B(d);e+d>this.buffer.byteLength?(this.status=255,this.push_irq()):(this.status=88,this.data_allocate_noclear(d),this.data_end=a?512:Math.min(d,512*this.sectors_per_drq),this.write_dest=e)};\nK.prototype.ata_write_sectors_dma=function(a){var b=53===a;a=this.get_count(b);b=this.get_lba(b);var c=a*this.sector_size,d=b*this.sector_size;B(b);B(a);B(c);d+c>this.buffer.byteLength?(this.status=255,this.push_irq()):(this.status=88,this.device.dma_status|=1)};\nK.prototype.do_ata_write_sectors_dma=function(){var a=53===this.current_command,b=this.get_count(a),c=this.get_lba(a);a=b*this.sector_size;c*=this.sector_size;var d=this.device.prdt_addr,e=0;ta(\"prdt addr: \"+B(d,8),32768);const g=new Uint8Array(a);do{var f=this.cpu.read32s(d),h=this.cpu.read16(d+4),l=this.cpu.read8(d+7)&128;h||(h=65536);ta(\"dma write transfer dest=\"+B(f)+\" prd_count=\"+B(h),32768);f=this.cpu.mem8.subarray(f,f+h);g.set(f,e);e+=h;d+=8}while(!l);this.buffer.set(c,g,()=>{this.ata_advance(this.current_command,\nb);this.status=80;this.push_irq();this.device.dma_status&=-2;this.current_command=-1});this.report_write(a)};K.prototype.get_chs=function(){return((this.cylinder_low&255|this.cylinder_high<<8&65280)*this.head_count+this.head)*this.sectors_per_track+(this.sector&255)-1};K.prototype.get_lba28=function(){return this.sector&255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|(this.head&15)<<24};\nK.prototype.get_lba48=function(){return(this.sector&255|this.cylinder_low<<8&65280|this.cylinder_high<<16&16711680|this.sector>>8<<24&4278190080)>>>0};K.prototype.get_lba=function(a){return a?this.get_lba48():this.is_lba?this.get_lba28():this.get_chs()};K.prototype.get_count=function(a){a?(a=this.bytecount,0===a&&(a=65536)):(a=this.bytecount&255,0===a&&(a=256));return a};\nK.prototype.create_identify_packet=function(){if(this.drive_head&16)this.data_allocate(0);else{for(var a=0;512>a;a++)this.data[a]=0;a=Math.min(16383,this.cylinder_count);this.data_set([64,this.is_atapi?133:0,a,a>>8,0,0,this.head_count,this.head_count>>8,this.sectors_per_track/512,this.sectors_per_track/512>>8,0,2,this.sectors_per_track,this.sectors_per_track>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,4,0,0,0,0,0,0,0,0,0,56,118,32,54,68,72,32,32,32,32,32,32,32,32,32,32,32,32,32,\n32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,128,0,1,0,0,2,0,0,0,2,0,2,7,0,a,a>>8,this.head_count,this.head_count>>8,this.sectors_per_track,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255,0,0,160===this.current_command?0:7,160===this.current_command?0:4,0,0,30,0,30,0,30,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,0,\n0,0,0,0,0,116,0,64,0,64,0,116,0,64,0,0,0,0,0,0,0,0,0,0,1,96,0,0,0,0,0,0,0,0,0,0,0,0,this.sector_count&255,this.sector_count>>8&255,this.sector_count>>16&255,this.sector_count>>24&255]);this.data_end=this.data_length=512}};K.prototype.data_allocate=function(a){this.data_allocate_noclear(a);for(var b=0;b<a+3>>2;b++)this.data32[b]=0};\nK.prototype.data_allocate_noclear=function(a){this.data.length<a&&(this.data=new Uint8Array(a+3&-4),this.data16=new Uint16Array(this.data.buffer),this.data32=new Int32Array(this.data.buffer));this.data_length=a;this.data_pointer=0};K.prototype.data_set=function(a){this.data_allocate_noclear(a.length);this.data.set(a)};K.prototype.report_read_start=function(){this.bus.send(\"ide-read-start\")};K.prototype.report_read_end=function(a){this.bus.send(\"ide-read-end\",[this.nr,a,a/this.sector_size|0])};\nK.prototype.report_write=function(a){this.bus.send(\"ide-write-end\",[this.nr,a,a/this.sector_size|0])};K.prototype.read_buffer=function(a,b,c){const d=this.last_io_id++;this.in_progress_io_ids.add(d);this.buffer.get(a,b,e=>{this.cancelled_io_ids.delete(d)?this.in_progress_io_ids.has(d):(this.in_progress_io_ids.delete(d),c(e))})};K.prototype.cancel_io_operations=function(){for(const a of this.in_progress_io_ids)this.cancelled_io_ids.add(a);this.in_progress_io_ids.clear()};\nK.prototype.get_state=function(){var a=[];a[0]=this.bytecount;a[1]=this.cylinder_count;a[2]=this.cylinder_high;a[3]=this.cylinder_low;a[4]=this.data_pointer;a[5]=0;a[6]=0;a[7]=0;a[8]=0;a[9]=this.drive_head;a[10]=this.error;a[11]=this.head;a[12]=this.head_count;a[13]=this.is_atapi;a[14]=this.is_lba;a[15]=this.lba_count;a[16]=this.data;a[17]=this.data_length;a[18]=this.sector;a[19]=this.sector_count;a[20]=this.sector_size;a[21]=this.sectors_per_drq;a[22]=this.sectors_per_track;a[23]=this.status;a[24]=\nthis.write_dest;a[25]=this.current_command;a[26]=this.data_end;a[27]=this.current_atapi_command;a[28]=this.buffer;return a};\nK.prototype.set_state=function(a){this.bytecount=a[0];this.cylinder_count=a[1];this.cylinder_high=a[2];this.cylinder_low=a[3];this.data_pointer=a[4];this.drive_head=a[9];this.error=a[10];this.head=a[11];this.head_count=a[12];this.is_atapi=a[13];this.is_lba=a[14];this.lba_count=a[15];this.data=a[16];this.data_length=a[17];this.sector=a[18];this.sector_count=a[19];this.sector_size=a[20];this.sectors_per_drq=a[21];this.sectors_per_track=a[22];this.status=a[23];this.write_dest=a[24];this.current_command=\na[25];this.data_end=a[26];this.current_atapi_command=a[27];this.data16=new Uint16Array(this.data.buffer);this.data32=new Int32Array(this.data.buffer);this.buffer&&this.buffer.set_state(a[28])};function va(a){this.pci_addr=new Uint8Array(4);this.pci_value=new Uint8Array(4);this.pci_response=new Uint8Array(4);this.pci_status=new Uint8Array(4);this.pci_addr32=new Int32Array(this.pci_addr.buffer);this.pci_value32=new Int32Array(this.pci_value.buffer);this.pci_response32=new Int32Array(this.pci_response.buffer);this.pci_status32=new Int32Array(this.pci_status.buffer);this.device_spaces=[];this.devices=[];this.cpu=a;for(var b=0;256>b;b++)this.device_spaces[b]=void 0,this.devices[b]=void 0;this.io=\na.io;a.io.register_write(3324,this,function(c){this.pci_write8(this.pci_addr32[0],c)},function(c){this.pci_write16(this.pci_addr32[0],c)},function(c){this.pci_write32(this.pci_addr32[0],c)});a.io.register_write(3325,this,function(c){this.pci_write8(this.pci_addr32[0]+1|0,c)});a.io.register_write(3326,this,function(c){this.pci_write8(this.pci_addr32[0]+2|0,c)},function(c){this.pci_write16(this.pci_addr32[0]+2|0,c)});a.io.register_write(3327,this,function(c){this.pci_write8(this.pci_addr32[0]+3|0,c)});\na.io.register_read_consecutive(3324,this,function(){return this.pci_response[0]},function(){return this.pci_response[1]},function(){return this.pci_response[2]},function(){return this.pci_response[3]});a.io.register_read_consecutive(3320,this,function(){return this.pci_status[0]},function(){return this.pci_status[1]},function(){return this.pci_status[2]},function(){return this.pci_status[3]});a.io.register_write_consecutive(3320,this,function(c){this.pci_addr[0]=c&252},function(c){2===(this.pci_addr[1]&\n6)&&6===(c&6)?a.reboot_internal():this.pci_addr[1]=c},function(c){this.pci_addr[2]=c},function(c){this.pci_addr[3]=c;this.pci_query()});this.register_device({pci_id:0,pci_space:[134,128,55,18,0,0,0,0,2,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0],pci_bars:[],name:\"82441FX PMC\"});this.isa_bridge={pci_id:8,pci_space:[134,128,0,112,7,0,0,2,0,0,1,6,0,0,128,0,0,0,0,0,0,0,0,\n0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],pci_bars:[],name:\"82371SB PIIX3 ISA\"};this.isa_bridge_space=this.register_device(this.isa_bridge);this.isa_bridge_space8=new Uint8Array(this.isa_bridge_space.buffer)}va.prototype.get_state=function(){for(var a=[],b=0;256>b;b++)a[b]=this.device_spaces[b];a[256]=this.pci_addr;a[257]=this.pci_value;a[258]=this.pci_response;a[259]=this.pci_status;return a};\nva.prototype.set_state=function(a){for(var b=0;256>b;b++){var c=this.devices[b],d=a[b];if(c&&d){for(var e=0;e<c.pci_bars.length;e++){var g=d[4+e];if(g&1){var f=c.pci_bars[e];this.set_io_bars(f,f.original_bar&65534,g&65534)}}this.device_spaces[b].set(d)}else d&&B(b,2)}this.pci_addr.set(a[256]);this.pci_value.set(a[257]);this.pci_response.set(a[258]);this.pci_status.set(a[259])};\nva.prototype.pci_query=function(){var a=this.pci_addr[2]<<8|this.pci_addr[1],b=this.pci_addr[0]&252,c=a>>3&31;var d=\"query enabled=\"+(this.pci_addr[3]>>7)+(\" bdf=\"+B(a,4));d+=\" dev=\"+B(c,2);d+=\" addr=\"+B(b,2);a=this.device_spaces[a];void 0!==a?(this.pci_status32[0]=-2147483648,this.pci_response32[0]=b<a.byteLength?a[b>>2]:0,d+=\" \"+B(this.pci_addr32[0]>>>0,8)+\" -> \"+B(this.pci_response32[0]>>>0,8)):(this.pci_response32[0]=-1,this.pci_status32[0]=0)};\nva.prototype.pci_write8=function(a,b){var c=a>>8&65535;a&=255;var d=new Uint8Array(this.device_spaces[c].buffer);B(a);B(c>>3,2);B(a,4);B(b,2);d[a]=b};va.prototype.pci_write16=function(a,b){var c=a>>8&65535;a&=255;var d=new Uint16Array(this.device_spaces[c].buffer);16<=a&&44>a?B(a):(B(a),B(c>>3,2),B(a,4),B(b,4),d[a>>>1]=b)};\nva.prototype.pci_write32=function(a,b){var c=a>>8&65535;a&=255;var d=this.device_spaces[c],e=this.devices[c];if(d)if(16<=a&&40>a){e=e.pci_bars[a-16>>2];B(b>>>0);B(c>>3,2);if(e){c=a>>2;var g=d[c]&1;-1===(b|3|e.size-1)?(b=~(e.size-1)|g,0===g&&(d[c]=b)):0===g&&(d[c]=e.original_bar);if(1===g){g=d[c]&65534;var f=b&65534;B(g>>>0,8);B(f>>>0,8);this.set_io_bars(e,g,f);d[c]=b|1}}else d[a>>2]=0;B(d[a>>2]>>>0)}else 48===a?(B(c>>3,2),B(b>>>0,8),d[a>>2]=e.pci_rom_size?-1===(b|2047)?-e.pci_rom_size|0:e.pci_rom_address|\n0:0):4===a?(B(c>>3,2),B(a,4),B(b>>>0,8)):(B(c>>3,2),B(a,4),B(b>>>0,8),d[a>>>2]=b)};va.prototype.register_device=function(a){var b=a.pci_id;B(b);var c=new Int32Array(64);c.set(new Int32Array((new Uint8Array(a.pci_space)).buffer));this.device_spaces[b]=c;this.devices[b]=a;b=c.slice(4,10);for(var d=0;d<a.pci_bars.length;d++){var e=a.pci_bars[d];if(e){var g=b[d],f=g&1;e.original_bar=g;e.entries=[];if(0!==f)for(g&=-2,f=0;f<e.size;f++)e.entries[f]=this.io.ports[g+f]}}return c};\nva.prototype.set_io_bars=function(a,b,c){var d=a.size;B(b);B(c);for(var e=this.io.ports,g=0;g<d;g++){var f=e[b+g];4096<=b+g&&(e[b+g]=this.io.create_empty_entry());f.read8===this.io.empty_port_read8&&f.read16===this.io.empty_port_read16&&f.read32===this.io.empty_port_read32&&f.write8===this.io.empty_port_write&&f.write16===this.io.empty_port_write&&f.write32===this.io.empty_port_write&&B(b+g,4);f=a.entries[g];var h=e[c+g];4096<=c+g&&(e[c+g]=f);h.read8!==this.io.empty_port_read8&&h.read16!==this.io.empty_port_read16&&\nh.read32!==this.io.empty_port_read32&&h.write8!==this.io.empty_port_write&&h.write16!==this.io.empty_port_write&&h.write32!==this.io.empty_port_write||B(c+g,4)}};va.prototype.raise_irq=function(a){this.cpu.device_raise_irq(this.isa_bridge_space8[96+((this.device_spaces[a][15]>>8&255)-1+((a>>3)-1&255)&3)])};va.prototype.lower_irq=function(a){this.cpu.device_lower_irq(this.isa_bridge_space8[96+((this.device_spaces[a][15]>>8&255)+(a>>3&255)-2&3)])};function L(a,b){this.io=a.io;this.cpu=a;this.dma=a.devices.dma;this.bytes_expecting=0;this.receiving_command=new Uint8Array(10);this.receiving_index=0;this.next_command=null;this.response_data=new Uint8Array(10);this.last_head=this.last_cylinder=this.drive=this.status_reg2=this.status_reg1=this.status_reg0=this.response_length=this.response_index=0;this.last_sector=1;this.dir=this.dor=0;this.fdb_image=this.fda_image=null;b?this.set_fda(b):(this.eject_fda(),this.cpu.devices.rtc.cmos_write(16,64));\nthis.io.register_read(1008,this,this.port3F0_read);this.io.register_read(1010,this,this.port3F2_read);this.io.register_read(1012,this,this.port3F4_read);this.io.register_read(1013,this,this.port3F5_read);this.io.register_read(1015,this,this.port3F7_read);this.io.register_write(1010,this,this.port3F2_write);this.io.register_write(1012,this,this.port3F4_write);this.io.register_write(1013,this,this.port3F5_write)}\nL.prototype.eject_fda=function(){this.fda_image=null;this.number_of_cylinders=this.number_of_heads=this.sectors_per_track=0;this.dir=128};\nL.prototype.set_fda=function(a){var b={[163840]:{type:1,tracks:40,sectors:8,heads:1},[184320]:{type:1,tracks:40,sectors:9,heads:1},[204800]:{type:1,tracks:40,sectors:10,heads:1},[327680]:{type:1,tracks:40,sectors:8,heads:2},[368640]:{type:1,tracks:40,sectors:9,heads:2},[409600]:{type:1,tracks:40,sectors:10,heads:2},[737280]:{type:3,tracks:80,sectors:9,heads:2},[1228800]:{type:2,tracks:80,sectors:15,heads:2},[1474560]:{type:4,tracks:80,sectors:18,heads:2},[1763328]:{type:5,tracks:82,sectors:21,heads:2},\n[2949120]:{type:5,tracks:80,sectors:36,heads:2},512:{type:1,tracks:1,sectors:1,heads:1}};let c=a.byteLength,d=b[c];d||(c=1474560<a.byteLength?2949120:1474560,d=b[c],b=new Uint8Array(c),b.set(new Uint8Array(a.buffer)),a=new k.SyncBuffer(b.buffer));this.sectors_per_track=d.sectors;this.number_of_heads=d.heads;this.number_of_cylinders=d.tracks;this.fda_image=a;this.dir=128;this.cpu.devices.rtc.cmos_write(16,d.type<<4)};\nL.prototype.get_state=function(){var a=[];a[0]=this.bytes_expecting;a[1]=this.receiving_command;a[2]=this.receiving_index;a[4]=this.response_data;a[5]=this.response_index;a[6]=this.response_length;a[8]=this.status_reg0;a[9]=this.status_reg1;a[10]=this.status_reg2;a[11]=this.drive;a[12]=this.last_cylinder;a[13]=this.last_head;a[14]=this.last_sector;a[15]=this.dor;a[16]=this.sectors_per_track;a[17]=this.number_of_heads;a[18]=this.number_of_cylinders;return a};\nL.prototype.set_state=function(a){this.bytes_expecting=a[0];this.receiving_command=a[1];this.receiving_index=a[2];this.next_command=a[3];this.response_data=a[4];this.response_index=a[5];this.response_length=a[6];this.status_reg0=a[8];this.status_reg1=a[9];this.status_reg2=a[10];this.drive=a[11];this.last_cylinder=a[12];this.last_head=a[13];this.last_sector=a[14];this.dor=a[15];this.sectors_per_track=a[16];this.number_of_heads=a[17];this.number_of_cylinders=a[18]};L.prototype.port3F0_read=function(){return 0};\nL.prototype.port3F4_read=function(){var a=128;this.response_index<this.response_length&&(a|=80);0===(this.dor&8)&&(a|=32);return a};L.prototype.port3F7_read=function(){return this.dir};L.prototype.port3F5_read=function(){return this.response_index<this.response_length?(this.cpu.device_lower_irq(6),this.response_data[this.response_index++]):255};L.prototype.port3F4_write=function(a){B(a);a&128&&(this.status_reg0=192,this.cpu.device_raise_irq(6))};\nL.prototype.port3F5_write=function(a){ta(\"3F5 write \"+B(a),8192);if(0<this.bytes_expecting)this.receiving_command[this.receiving_index++]=a,this.bytes_expecting--,0===this.bytes_expecting&&this.next_command.call(this,this.receiving_command);else{switch(a){case 3:this.next_command=this.fix_drive_data;this.bytes_expecting=2;break;case 19:this.next_command=this.configure;this.bytes_expecting=3;break;case 4:this.next_command=this.check_drive_status;this.bytes_expecting=1;break;case 5:case 69:case 197:this.next_command=\nfunction(b){this.do_sector(!0,b)};this.bytes_expecting=8;break;case 6:case 70:case 198:case 230:this.next_command=function(b){this.do_sector(!1,b)};this.bytes_expecting=8;break;case 7:this.next_command=this.calibrate;this.bytes_expecting=1;break;case 8:this.check_interrupt_status();break;case 74:this.next_command=this.read_sector_id;this.bytes_expecting=1;break;case 15:this.bytes_expecting=2;this.next_command=this.seek;break;case 14:case 16:this.status_reg0=128;this.response_data[0]=this.status_reg0;\nthis.response_index=0;this.response_length=1;this.bytes_expecting=0;break;default:ua(!1,\"Unimplemented floppy command call \"+B(a))}this.receiving_index=0}};L.prototype.port3F2_read=function(){return this.dor};L.prototype.port3F2_write=function(a){4===(a&4)&&0===(this.dor&4)&&(this.status_reg0=192,this.cpu.device_raise_irq(6));B(a>>4);B(a);this.dor=a};L.prototype.check_drive_status=function(){this.status_reg1=this.fda_image?0:5;this.response_index=0;this.response_length=1;this.response_data[0]=0};\nL.prototype.seek=function(a){if(0===(a[0]&3)){var b=a[1];a=a[0]>>2&1;b!==this.last_cylinder&&(this.dir=0);this.status_reg1=this.fda_image?0:5;this.status_reg0=32;this.last_cylinder=b;this.last_head=a}this.raise_irq()};L.prototype.calibrate=function(a){this.seek([a[0],0])};L.prototype.check_interrupt_status=function(){this.response_index=0;this.response_length=2;this.response_data[0]=this.status_reg0;this.response_data[1]=this.last_cylinder};\nL.prototype.do_sector=function(a,b){var c=b[2],d=b[1],e=b[3],g=128<<b[4],f=b[5]-b[3]+1,h=((c+this.number_of_heads*d)*this.sectors_per_track+e-1)*g;B(h);B(f*g);this.fda_image?(this.status_reg1=0,a?this.dma.do_write(this.fda_image,h,f*g,2,this.done.bind(this,b,d,c,e)):this.dma.do_read(this.fda_image,h,f*g,2,this.done.bind(this,b,d,c,e))):this.status_reg1=5};\nL.prototype.done=function(a,b,c,d,e){e||(d++,d>this.sectors_per_track&&(d=1,c++,c>=this.number_of_heads&&(c=0,b++)),b!==this.last_cylinder&&(this.dir=0),this.status_reg0=32,this.last_cylinder=b,this.last_head=c,this.last_sector=d,this.response_index=0,this.response_length=7,this.response_data[0]=c<<2|32,this.response_data[1]=0,this.response_data[2]=0,this.response_data[3]=b,this.response_data[4]=c,this.response_data[5]=d,this.response_data[6]=a[4],this.raise_irq())};\nL.prototype.fix_drive_data=function(a){a.slice(0,this.bytes_expecting)};L.prototype.configure=function(a){a.slice(0,this.bytes_expecting)};L.prototype.read_sector_id=function(){this.response_index=0;this.response_length=7;this.response_data[0]=0;this.response_data[1]=0;this.response_data[2]=0;this.response_data[3]=0;this.response_data[4]=0;this.response_data[5]=0;this.response_data[6]=0;this.raise_irq()};L.prototype.raise_irq=function(){this.dor&8&&this.cpu.device_raise_irq(6)};E.prototype.mmap_read8=function(a){return this.memory_map_read8[a>>>17](a)};E.prototype.mmap_write8=function(a,b){this.memory_map_write8[a>>>17](a,b)};E.prototype.mmap_read16=function(a){var b=this.memory_map_read8[a>>>17];return b(a)|b(a+1|0)<<8};E.prototype.mmap_write16=function(a,b){var c=this.memory_map_write8[a>>>17];c(a,b&255);c(a+1|0,b>>8)};E.prototype.mmap_read32=function(a){return this.memory_map_read32[a>>>17](a)};\nE.prototype.mmap_write32=function(a,b){this.memory_map_write32[a>>>17](a,b)};E.prototype.mmap_write64=function(a,b,c){var d=this.memory_map_write32[a>>>17];d(a,b);d(a+4,c)};E.prototype.mmap_write128=function(a,b,c,d,e){var g=this.memory_map_write32[a>>>17];g(a,b);g(a+4,c);g(a+8,d);g(a+12,e)};E.prototype.write_blob=function(a,b){a.length&&(this.in_mapped_range(b),this.in_mapped_range(b+a.length-1),this.jit_dirty_cache(b,b+a.length),this.mem8.set(a,b))};\nE.prototype.read_blob=function(a,b){b&&(this.in_mapped_range(a),this.in_mapped_range(a+b-1));return this.mem8.subarray(a,a+b)};function M(a){this.cpu=a;this.channel_page=new Uint8Array(8);this.channel_pagehi=new Uint8Array(8);this.channel_addr=new Uint16Array(8);this.channel_addr_init=new Uint16Array(8);this.channel_count=new Uint16Array(8);this.channel_count_init=new Uint16Array(8);this.channel_mask=new Uint8Array(8);this.channel_mode=new Uint8Array(8);this.unmask_listeners=[];this.lsb_msb_flipflop=0;a=a.io;a.register_write(0,this,this.port_addr_write.bind(this,0));a.register_write(2,this,this.port_addr_write.bind(this,\n1));a.register_write(4,this,this.port_addr_write.bind(this,2));a.register_write(6,this,this.port_addr_write.bind(this,3));a.register_write(1,this,this.port_count_write.bind(this,0));a.register_write(3,this,this.port_count_write.bind(this,1));a.register_write(5,this,this.port_count_write.bind(this,2));a.register_write(7,this,this.port_count_write.bind(this,3));a.register_read(0,this,this.port_addr_read.bind(this,0));a.register_read(2,this,this.port_addr_read.bind(this,1));a.register_read(4,this,this.port_addr_read.bind(this,\n2));a.register_read(6,this,this.port_addr_read.bind(this,3));a.register_read(1,this,this.port_count_read.bind(this,0));a.register_read(3,this,this.port_count_read.bind(this,1));a.register_read(5,this,this.port_count_read.bind(this,2));a.register_read(7,this,this.port_count_read.bind(this,3));a.register_write(192,this,this.port_addr_write.bind(this,4));a.register_write(196,this,this.port_addr_write.bind(this,5));a.register_write(200,this,this.port_addr_write.bind(this,6));a.register_write(204,this,\nthis.port_addr_write.bind(this,7));a.register_write(194,this,this.port_count_write.bind(this,4));a.register_write(198,this,this.port_count_write.bind(this,5));a.register_write(202,this,this.port_count_write.bind(this,6));a.register_write(206,this,this.port_count_write.bind(this,7));a.register_read(192,this,this.port_addr_read.bind(this,4));a.register_read(196,this,this.port_addr_read.bind(this,5));a.register_read(200,this,this.port_addr_read.bind(this,6));a.register_read(204,this,this.port_addr_read.bind(this,\n7));a.register_read(194,this,this.port_count_read.bind(this,4));a.register_read(198,this,this.port_count_read.bind(this,5));a.register_read(202,this,this.port_count_read.bind(this,6));a.register_read(206,this,this.port_count_read.bind(this,7));a.register_write(135,this,this.port_page_write.bind(this,0));a.register_write(131,this,this.port_page_write.bind(this,1));a.register_write(129,this,this.port_page_write.bind(this,2));a.register_write(130,this,this.port_page_write.bind(this,3));a.register_write(143,\nthis,this.port_page_write.bind(this,4));a.register_write(139,this,this.port_page_write.bind(this,5));a.register_write(137,this,this.port_page_write.bind(this,6));a.register_write(138,this,this.port_page_write.bind(this,7));a.register_read(135,this,this.port_page_read.bind(this,0));a.register_read(131,this,this.port_page_read.bind(this,1));a.register_read(129,this,this.port_page_read.bind(this,2));a.register_read(130,this,this.port_page_read.bind(this,3));a.register_read(143,this,this.port_page_read.bind(this,\n4));a.register_read(139,this,this.port_page_read.bind(this,5));a.register_read(137,this,this.port_page_read.bind(this,6));a.register_read(138,this,this.port_page_read.bind(this,7));a.register_write(1159,this,this.port_pagehi_write.bind(this,0));a.register_write(1155,this,this.port_pagehi_write.bind(this,1));a.register_write(1153,this,this.port_pagehi_write.bind(this,2));a.register_write(1154,this,this.port_pagehi_write.bind(this,3));a.register_write(1163,this,this.port_pagehi_write.bind(this,5));\na.register_write(1161,this,this.port_pagehi_write.bind(this,6));a.register_write(1162,this,this.port_pagehi_write.bind(this,7));a.register_read(1159,this,this.port_pagehi_read.bind(this,0));a.register_read(1155,this,this.port_pagehi_read.bind(this,1));a.register_read(1153,this,this.port_pagehi_read.bind(this,2));a.register_read(1154,this,this.port_pagehi_read.bind(this,3));a.register_read(1163,this,this.port_pagehi_read.bind(this,5));a.register_read(1161,this,this.port_pagehi_read.bind(this,6));a.register_read(1162,\nthis,this.port_pagehi_read.bind(this,7));a.register_write(10,this,this.port_singlemask_write.bind(this,0));a.register_write(212,this,this.port_singlemask_write.bind(this,4));a.register_write(15,this,this.port_multimask_write.bind(this,0));a.register_write(222,this,this.port_multimask_write.bind(this,4));a.register_read(15,this,this.port_multimask_read.bind(this,0));a.register_read(222,this,this.port_multimask_read.bind(this,4));a.register_write(11,this,this.port_mode_write.bind(this,0));a.register_write(214,\nthis,this.port_mode_write.bind(this,4));a.register_write(12,this,this.portC_write);a.register_write(216,this,this.portC_write)}M.prototype.get_state=function(){return[this.channel_page,this.channel_pagehi,this.channel_addr,this.channel_addr_init,this.channel_count,this.channel_count_init,this.channel_mask,this.channel_mode,this.lsb_msb_flipflop]};\nM.prototype.set_state=function(a){this.channel_page=a[0];this.channel_pagehi=a[1];this.channel_addr=a[2];this.channel_addr_init=a[3];this.channel_count=a[4];this.channel_count_init=a[5];this.channel_mask=a[6];this.channel_mode=a[7];this.lsb_msb_flipflop=a[8]};M.prototype.port_count_write=function(a,b){B(b);this.channel_count[a]=this.flipflop_get(this.channel_count[a],b,!1);this.channel_count_init[a]=this.flipflop_get(this.channel_count_init[a],b,!0)};\nM.prototype.port_count_read=function(a){B(this.channel_count[a]);return this.flipflop_read(this.channel_count[a])};M.prototype.port_addr_write=function(a,b){B(b);this.channel_addr[a]=this.flipflop_get(this.channel_addr[a],b,!1);this.channel_addr_init[a]=this.flipflop_get(this.channel_addr_init[a],b,!0)};M.prototype.port_addr_read=function(a){B(this.channel_addr[a]);return this.flipflop_read(this.channel_addr[a])};M.prototype.port_pagehi_write=function(a,b){B(b);this.channel_pagehi[a]=b};\nM.prototype.port_pagehi_read=function(a){return this.channel_pagehi[a]};M.prototype.port_page_write=function(a,b){B(b);this.channel_page[a]=b};M.prototype.port_page_read=function(a){return this.channel_page[a]};M.prototype.port_singlemask_write=function(a,b){this.update_mask((b&3)+a,b&4?1:0)};M.prototype.port_multimask_write=function(a,b){B(b);for(var c=0;4>c;c++)this.update_mask(a+c,b&1<<c)};\nM.prototype.port_multimask_read=function(a){var b=0|this.channel_mask[a+0];b|=this.channel_mask[a+1]<<1;b|=this.channel_mask[a+2]<<2;b|=this.channel_mask[a+3]<<3;B(b);return b};M.prototype.port_mode_write=function(a,b){a=(b&3)+a;B(b);this.channel_mode[a]=b};M.prototype.portC_write=function(){this.lsb_msb_flipflop=0};M.prototype.on_unmask=function(a,b){this.unmask_listeners.push({fn:a,this_value:b})};\nM.prototype.update_mask=function(a,b){if(this.channel_mask[a]!==b&&(this.channel_mask[a]=b,!b))for(b=0;b<this.unmask_listeners.length;b++)this.unmask_listeners[b].fn.call(this.unmask_listeners[b].this_value,a)};\nM.prototype.do_read=function(a,b,c,d,e){var g=this.count_get_8bit(d),f=this.address_get_8bit(d);ta(\"to \"+B(f)+\" len \"+B(g),16);c<g&&ta(\"DMA should read more than provided: \"+B(c)+\" \"+B(g),16);if(b+g>a.byteLength)e(!0);else{var h=this.cpu;this.channel_addr[d]+=g;a.get(b,g,function(l){h.write_blob(l,f);e(!1)})}};\nM.prototype.do_write=function(a,b,c,d,e){var g=this.channel_count[d]+1&65535,f=5<=d?2:1,h=g*f,l=this.address_get_8bit(d),m=!1,n=!1,p=this.channel_mode[d]&16;ta(\"to \"+B(l)+\" len \"+B(h),16);c<h?(g=Math.floor(c/f),h=g*f,m=!0):c>h&&(n=!0);b+h>a.byteLength?e(!0):(this.channel_addr[d]+=g,this.channel_count[d]-=g,!m&&p&&(this.channel_addr[d]=this.channel_addr_init[d],this.channel_count[d]=this.channel_count_init[d]),a.set(b,this.cpu.mem8.subarray(l,l+h),()=>{n&&p?this.do_write(a,b+h,c-h,d,e):e(!1)}))};\nM.prototype.address_get_8bit=function(a){var b=this.channel_addr[a];5<=a&&(b<<=1);b=b&65535|this.channel_page[a]<<16;return b|=this.channel_pagehi[a]<<24};M.prototype.count_get_8bit=function(a){var b=this.channel_count[a]+1;5<=a&&(b*=2);return b};M.prototype.flipflop_get=function(a,b,c){c||(this.lsb_msb_flipflop^=1);return this.lsb_msb_flipflop?a&-256|b:a&-65281|b<<8};M.prototype.flipflop_read=function(a){return(this.lsb_msb_flipflop^=1)?a&255:a>>8&255};function wa(a,b){this.cpu=a;this.bus=b;this.counter_start_time=new Float64Array(3);this.counter_start_value=new Uint16Array(3);this.counter_next_low=new Uint8Array(4);this.counter_enabled=new Uint8Array(4);this.counter_mode=new Uint8Array(4);this.counter_read_mode=new Uint8Array(4);this.counter_latch=new Uint8Array(4);this.counter_latch_value=new Uint16Array(3);this.counter_reload=new Uint16Array(3);a.io.register_read(97,this,function(){var c=D.microtick(),d=66.66666666666667*c&1;c=this.did_rollover(2,\nc);return d<<4|c<<5});a.io.register_write(97,this,function(c){c&1?this.bus.send(\"pcspeaker-enable\"):this.bus.send(\"pcspeaker-disable\")});a.io.register_read(64,this,function(){return this.counter_read(0)});a.io.register_read(65,this,function(){return this.counter_read(1)});a.io.register_read(66,this,function(){return this.counter_read(2)});a.io.register_write(64,this,function(c){this.counter_write(0,c)});a.io.register_write(65,this,function(c){this.counter_write(1,c)});a.io.register_write(66,this,\nfunction(c){this.counter_write(2,c);this.bus.send(\"pcspeaker-update\",[this.counter_mode[2],this.counter_reload[2]])});a.io.register_write(67,this,this.port43_write)}wa.prototype.get_state=function(){var a=[];a[0]=this.counter_next_low;a[1]=this.counter_enabled;a[2]=this.counter_mode;a[3]=this.counter_read_mode;a[4]=this.counter_latch;a[5]=this.counter_latch_value;a[6]=this.counter_reload;a[7]=this.counter_start_time;a[8]=this.counter_start_value;return a};\nwa.prototype.set_state=function(a){this.counter_next_low=a[0];this.counter_enabled=a[1];this.counter_mode=a[2];this.counter_read_mode=a[3];this.counter_latch=a[4];this.counter_latch_value=a[5];this.counter_reload=a[6];this.counter_start_time=a[7];this.counter_start_value=a[8]};\nwa.prototype.timer=function(a,b){var c=100;b||(this.counter_enabled[0]&&this.did_rollover(0,a)?(this.counter_start_value[0]=this.get_counter_value(0,a),this.counter_start_time[0]=a,this.cpu.device_lower_irq(0),this.cpu.device_raise_irq(0),0===this.counter_mode[0]&&(this.counter_enabled[0]=0)):this.cpu.device_lower_irq(0),this.counter_enabled[0]&&(c=(this.counter_start_value[0]-Math.floor(1193.1816666*(a-this.counter_start_time[0])))/1193.1816666));return c};\nwa.prototype.get_counter_value=function(a,b){if(!this.counter_enabled[a])return 0;b=this.counter_start_value[a]-Math.floor(1193.1816666*(b-this.counter_start_time[a]));a=this.counter_reload[a];b>=a?b%=a:0>b&&(b=b%a+a);return b};wa.prototype.did_rollover=function(a,b){b-=this.counter_start_time[a];return 0>b?!0:this.counter_start_value[a]<Math.floor(1193.1816666*b)};\nwa.prototype.counter_read=function(a){var b=this.counter_latch[a];if(b)return this.counter_latch[a]--,2===b?this.counter_latch_value[a]&255:this.counter_latch_value[a]>>8;b=this.counter_next_low[a];3===this.counter_mode[a]&&(this.counter_next_low[a]^=1);a=this.get_counter_value(a,D.microtick());return b?a&255:a>>8};\nwa.prototype.counter_write=function(a,b){this.counter_reload[a]=this.counter_next_low[a]?this.counter_reload[a]&-256|b:this.counter_reload[a]&255|b<<8;3===this.counter_read_mode[a]&&this.counter_next_low[a]||(this.counter_reload[a]||(this.counter_reload[a]=65535),this.counter_start_value[a]=this.counter_reload[a],this.counter_enabled[a]=!0,this.counter_start_time[a]=D.microtick(),B(this.counter_reload[a]));3===this.counter_read_mode[a]&&(this.counter_next_low[a]^=1)};\nwa.prototype.port43_write=function(a){var b=a>>1&7,c=a>>6&3;a=a>>4&3;3!==c&&(0===a?(this.counter_latch[c]=2,b=this.get_counter_value(c,D.microtick()),this.counter_latch_value[c]=b?b-1:0):(6<=b&&(b&=-5),this.counter_next_low[c]=1===a?0:1,0===c&&this.cpu.device_lower_irq(0),0!==b&&3!==b&&2!==b&&B(b),this.counter_mode[c]=b,this.counter_read_mode[c]=a,2===c&&this.bus.send(\"pcspeaker-update\",[this.counter_mode[2],this.counter_reload[2]])))};wa.prototype.dump=function(){};const xa=Uint32Array.from([655360,655360,720896,753664]),ya=Uint32Array.from([131072,65536,32768,32768]);\nfunction N(a,b,c,d){this.cpu=a;this.bus=b;this.screen=c;this.vga_memory_size=d;this.cursor_address=0;this.cursor_scanline_start=14;this.cursor_scanline_end=15;this.max_cols=80;this.max_rows=25;this.virtual_height=this.virtual_width=this.screen_height=this.screen_width=0;this.layers=[];this.start_address_latched=this.start_address=0;this.crtc=new Uint8Array(25);this.line_compare=this.offset_register=this.preset_row_scan=this.underline_location_register=this.vertical_blank_start=this.vertical_display_enable_end=\nthis.horizontal_blank_start=this.horizontal_display_enable_end=this.crtc_mode=0;this.graphical_mode=!1;this.vga256_palette=new Int32Array(256);this.latch_dword=0;this.svga_version=45253;this.svga_height=this.svga_width=0;this.svga_enabled=!1;this.svga_bpp=32;this.svga_offset_y=this.svga_offset_x=this.svga_offset=this.svga_bank_offset=0;this.vga_memory_size=void 0===this.vga_memory_size||262144>this.vga_memory_size?262144:268435456<this.vga_memory_size?268435456:k.round_up_to_next_power_of_2(this.vga_memory_size);\nthis.pci_space=[52,18,17,17,3,1,0,0,0,0,0,3,0,0,0,0,8,14680064,57344,224,0,0,0,0,0,0,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,190,254,0,0,0,0,0,0,0,0,0,0,0,0];this.pci_id=144;this.pci_bars=[{size:this.vga_memory_size}];this.pci_rom_size=65536;this.pci_rom_address=4272947200;this.name=\"vga\";this.dac_state=this.dac_color_index_read=this.dac_color_index_write=this.index_crtc=0;this.dac_mask=255;this.dac_map=new Uint8Array(16);this.attribute_controller_index=-1;this.palette_source=32;this.color_select=\nthis.horizontal_panning=this.color_plane_enable=this.attribute_mode=0;this.sequencer_index=-1;this.plane_write_bm=15;this.clocking_mode=this.sequencer_memory_mode=0;this.graphics_index=-1;this.planar_rotate_reg=this.planar_mode=this.plane_read=this.character_map_select=0;this.planar_bitmap=255;this.max_scan_line=this.color_dont_care=this.color_compare=this.miscellaneous_graphics_register=this.planar_setreset_enable=this.planar_setreset=0;this.port_3DA_value=this.miscellaneous_output_register=255;\nthis.font_page_ab_enabled=!1;b=a.io;b.register_write(960,this,this.port3C0_write);b.register_read(960,this,this.port3C0_read,this.port3C0_read16);b.register_read(961,this,this.port3C1_read);b.register_write(962,this,this.port3C2_write);b.register_write_consecutive(964,this,this.port3C4_write,this.port3C5_write);b.register_read(964,this,this.port3C4_read);b.register_read(965,this,this.port3C5_read);b.register_write_consecutive(974,this,this.port3CE_write,this.port3CF_write);b.register_read(974,this,\nthis.port3CE_read);b.register_read(975,this,this.port3CF_read);b.register_read(966,this,this.port3C6_read);b.register_write(966,this,this.port3C6_write);b.register_write(967,this,this.port3C7_write);b.register_read(967,this,this.port3C7_read);b.register_write(968,this,this.port3C8_write);b.register_read(968,this,this.port3C8_read);b.register_write(969,this,this.port3C9_write);b.register_read(969,this,this.port3C9_read);b.register_read(972,this,this.port3CC_read);b.register_write(980,this,this.port3D4_write,\nthis.port3D4_write16);b.register_write(981,this,this.port3D5_write,this.port3D5_write16);b.register_read(980,this,this.port3D4_read);b.register_read(981,this,this.port3D5_read,this.port3D5_read16);b.register_write(948,this,this.port3D4_write,this.port3D4_write16);b.register_write(949,this,this.port3D5_write,this.port3D5_write16);b.register_read(948,this,this.port3D4_read);b.register_read(949,this,this.port3D5_read,this.port3D5_read16);b.register_read(970,this,function(){return 0});b.register_read(986,\nthis,this.port3DA_read);b.register_read(954,this,this.port3DA_read);this.dispi_index=-1;this.dispi_enable_value=0;b.register_write(462,this,void 0,this.port1CE_write);b.register_write(463,this,void 0,this.port1CF_write);b.register_read(463,this,void 0,this.port1CF_read);c=a.svga_allocate_memory(this.vga_memory_size)>>>0;this.svga_memory=k.view(Uint8Array,a.wasm_memory,c,this.vga_memory_size);this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=\n0;this.image_data=null;this.vga_memory=new Uint8Array(262144);this.plane0=new Uint8Array(this.vga_memory.buffer,0,65536);this.plane1=new Uint8Array(this.vga_memory.buffer,65536,65536);this.plane2=new Uint8Array(this.vga_memory.buffer,131072,65536);this.plane3=new Uint8Array(this.vga_memory.buffer,196608,65536);this.pixel_buffer=new Uint8Array(524288);b.mmap_register(655360,131072,e=>this.vga_memory_read(e),(e,g)=>this.vga_memory_write(e,g));a.devices.pci.register_device(this)}\nN.prototype.get_state=function(){var a=[];a[0]=this.vga_memory_size;a[1]=this.cursor_address;a[2]=this.cursor_scanline_start;a[3]=this.cursor_scanline_end;a[4]=this.max_cols;a[5]=this.max_rows;a[6]=this.vga_memory;a[7]=this.dac_state;a[8]=this.start_address;a[9]=this.graphical_mode;a[10]=this.vga256_palette;a[11]=this.latch_dword;a[12]=this.color_compare;a[13]=this.color_dont_care;a[14]=this.miscellaneous_graphics_register;a[15]=this.svga_width;a[16]=this.svga_height;a[17]=this.crtc_mode;a[18]=this.svga_enabled;\na[19]=this.svga_bpp;a[20]=this.svga_bank_offset;a[21]=this.svga_offset;a[22]=this.index_crtc;a[23]=this.dac_color_index_write;a[24]=this.dac_color_index_read;a[25]=this.dac_map;a[26]=this.sequencer_index;a[27]=this.plane_write_bm;a[28]=this.sequencer_memory_mode;a[29]=this.graphics_index;a[30]=this.plane_read;a[31]=this.planar_mode;a[32]=this.planar_rotate_reg;a[33]=this.planar_bitmap;a[34]=this.max_scan_line;a[35]=this.miscellaneous_output_register;a[36]=this.port_3DA_value;a[37]=this.dispi_index;\na[38]=this.dispi_enable_value;a[39]=this.svga_memory;a[41]=this.attribute_controller_index;a[42]=this.offset_register;a[43]=this.planar_setreset;a[44]=this.planar_setreset_enable;a[45]=this.start_address_latched;a[46]=this.crtc;a[47]=this.horizontal_display_enable_end;a[48]=this.horizontal_blank_start;a[49]=this.vertical_display_enable_end;a[50]=this.vertical_blank_start;a[51]=this.underline_location_register;a[52]=this.preset_row_scan;a[53]=this.offset_register;a[54]=this.palette_source;a[55]=this.attribute_mode;\na[56]=this.color_plane_enable;a[57]=this.horizontal_panning;a[58]=this.color_select;a[59]=this.clocking_mode;a[60]=this.line_compare;a[61]=this.pixel_buffer;a[62]=this.dac_mask;a[63]=this.character_map_select;a[64]=this.font_page_ab_enabled;return a};\nN.prototype.set_state=function(a){this.vga_memory_size=a[0];this.cursor_address=a[1];this.cursor_scanline_start=a[2];this.cursor_scanline_end=a[3];this.max_cols=a[4];this.max_rows=a[5];a[6]&&this.vga_memory.set(a[6]);this.dac_state=a[7];this.start_address=a[8];this.graphical_mode=a[9];this.vga256_palette=a[10];this.latch_dword=a[11];this.color_compare=a[12];this.color_dont_care=a[13];this.miscellaneous_graphics_register=a[14];this.svga_width=a[15];this.svga_height=a[16];this.crtc_mode=a[17];this.svga_enabled=\na[18];this.svga_bpp=a[19];this.svga_bank_offset=a[20];this.svga_offset=a[21];this.index_crtc=a[22];this.dac_color_index_write=a[23];this.dac_color_index_read=a[24];this.dac_map=a[25];this.sequencer_index=a[26];this.plane_write_bm=a[27];this.sequencer_memory_mode=a[28];this.graphics_index=a[29];this.plane_read=a[30];this.planar_mode=a[31];this.planar_rotate_reg=a[32];this.planar_bitmap=a[33];this.max_scan_line=a[34];this.miscellaneous_output_register=a[35];this.port_3DA_value=a[36];this.dispi_index=\na[37];this.dispi_enable_value=a[38];this.svga_memory.set(a[39]);this.attribute_controller_index=a[41];this.offset_register=a[42];this.planar_setreset=a[43];this.planar_setreset_enable=a[44];this.start_address_latched=a[45];this.crtc.set(a[46]);this.horizontal_display_enable_end=a[47];this.horizontal_blank_start=a[48];this.vertical_display_enable_end=a[49];this.vertical_blank_start=a[50];this.underline_location_register=a[51];this.preset_row_scan=a[52];this.offset_register=a[53];this.palette_source=\na[54];this.attribute_mode=a[55];this.color_plane_enable=a[56];this.horizontal_panning=a[57];this.color_select=a[58];this.clocking_mode=a[59];this.line_compare=a[60];a[61]&&this.pixel_buffer.set(a[61]);this.dac_mask=void 0===a[62]?255:a[62];this.character_map_select=void 0===a[63]?0:a[63];this.font_page_ab_enabled=void 0===a[64]?0:a[64];this.screen.set_mode(this.graphical_mode);this.graphical_mode?(this.screen_height=this.screen_width=0,this.svga_enabled?(this.set_size_graphical(this.svga_width,this.svga_height,\nthis.svga_width,this.svga_height,this.svga_bpp),this.update_layers()):(this.update_vga_size(),this.update_layers(),this.complete_replot())):(this.set_font_bitmap(!0),this.set_size_text(this.max_cols,this.max_rows),this.set_font_page(),this.update_cursor_scanline(),this.update_cursor());this.complete_redraw()};\nN.prototype.vga_memory_read=function(a){if(this.svga_enabled)return this.cpu.read8((a-655360|this.svga_bank_offset)+3758096384|0);var b=this.miscellaneous_graphics_register>>2&3;a-=xa[b];if(0>a||a>=ya[b])return B(a),0;this.latch_dword=this.plane0[a];this.latch_dword|=this.plane1[a]<<8;this.latch_dword|=this.plane2[a]<<16;this.latch_dword|=this.plane3[a]<<24;if(this.planar_mode&8)return b=255,this.color_dont_care&1&&(b&=this.plane0[a]^~(this.color_compare&1?255:0)),this.color_dont_care&2&&(b&=this.plane1[a]^\n~(this.color_compare&2?255:0)),this.color_dont_care&4&&(b&=this.plane2[a]^~(this.color_compare&4?255:0)),this.color_dont_care&8&&(b&=this.plane3[a]^~(this.color_compare&8?255:0)),b;b=this.plane_read;this.graphical_mode?this.sequencer_memory_mode&8?(b=a&3,a&=-4):this.planar_mode&16&&(b=a&1,a&=-2):b&=3;return this.vga_memory[b<<16|a]};\nN.prototype.vga_memory_write=function(a,b){if(this.svga_enabled)this.cpu.write8((a-655360|this.svga_bank_offset)+3758096384|0,b);else{var c=this.miscellaneous_graphics_register>>2&3;a-=xa[c];0>a||a>=ya[c]?(B(a),B(b)):this.graphical_mode?this.vga_memory_write_graphical(a,b):this.plane_write_bm&3?this.vga_memory_write_text_mode(a,b):this.plane_write_bm&4&&(this.plane2[a]=b)}};\nN.prototype.vga_memory_write_graphical=function(a,b){var c=this.planar_mode&3,d=this.apply_feed(this.planar_bitmap),e=this.apply_expand(this.planar_setreset),g=this.apply_expand(this.planar_setreset_enable);switch(c){case 0:b=this.apply_rotate(b);var f=this.apply_feed(b);f=this.apply_setreset(f,g);f=this.apply_logical(f,this.latch_dword);f=this.apply_bitmask(f,d);break;case 1:f=this.latch_dword;break;case 2:f=this.apply_expand(b);f=this.apply_logical(f,this.latch_dword);f=this.apply_bitmask(f,d);\nbreak;case 3:b=this.apply_rotate(b),d&=this.apply_feed(b),f=this.apply_bitmask(e,d)}b=15;switch(this.sequencer_memory_mode&12){case 0:b=5<<(a&1);a&=-2;break;case 8:case 12:b=1<<(a&3),a&=-4}b&=this.plane_write_bm;b&1&&(this.plane0[a]=f>>0&255);b&2&&(this.plane1[a]=f>>8&255);b&4&&(this.plane2[a]=f>>16&255);b&8&&(this.plane3[a]=f>>24&255);a=this.vga_addr_to_pixel(a);this.partial_replot(a,a+7)};N.prototype.apply_feed=function(a){return a|a<<8|a<<16|a<<24};\nN.prototype.apply_expand=function(a){return(a&1?255:0)|(a&2?255:0)<<8|(a&4?255:0)<<16|(a&8?255:0)<<24};N.prototype.apply_rotate=function(a){return(a|a<<8)>>>(this.planar_rotate_reg&7)&255};N.prototype.apply_setreset=function(a,b){var c=this.apply_expand(this.planar_setreset);return(a|b&c)&(~b|c)};N.prototype.apply_logical=function(a,b){switch(this.planar_rotate_reg&24){case 8:return a&b;case 16:return a|b;case 24:return a^b}return a};N.prototype.apply_bitmask=function(a,b){return b&a|~b&this.latch_dword};\nN.prototype.text_mode_redraw=function(){const a=this.scan_line_to_screen_row(this.line_compare),b=Math.max(0,2*(2*this.offset_register-this.max_cols)),c=this.attribute_mode&8,d=this.font_page_ab_enabled?7:15,e=c?7:15,g=this.screen.FLAG_BLINKING,f=this.screen.FLAG_FONT_PAGE_B;let h=this.start_address<<1;for(let l=0;l<this.max_rows;l++){l===a&&(h=0);for(let m=0;m<this.max_cols;m++){const n=this.vga_memory[h],p=this.vga_memory[h|1],q=(c&&p&128?g:0)|(!this.font_page_ab_enabled||p&8?0:f);this.bus.send(\"screen-put-char\",\n[l,m,n]);this.screen.put_char(l,m,n,q,this.vga256_palette[this.dac_mask&this.dac_map[p>>4&e]],this.vga256_palette[this.dac_mask&this.dac_map[p&d]]);h+=2}h+=b}};\nN.prototype.vga_memory_write_text_mode=function(a,b){this.vga_memory[a]=b;var c=Math.max(this.max_cols,2*this.offset_register);let d;if(a>>1>=this.start_address){var e=(a>>1)-this.start_address;d=e/c|0;c=e%c}else e=a>>1,d=(e/c|0)+this.scan_line_to_screen_row(this.line_compare),c=e%c;if(!(c>=this.max_cols||d>=this.max_rows)){a&1?(e=b,b=this.vga_memory[a&-2]):e=this.vga_memory[a|1];var g=this.attribute_mode&8;a=(g&&e&128?this.screen.FLAG_BLINKING:0)|(!this.font_page_ab_enabled||e&8?0:this.screen.FLAG_FONT_PAGE_B);\nvar f=this.font_page_ab_enabled?7:15;g=g?7:15;this.bus.send(\"screen-put-char\",[d,c,b]);this.screen.put_char(d,c,b,a,this.vga256_palette[this.dac_mask&this.dac_map[e>>4&g]],this.vga256_palette[this.dac_mask&this.dac_map[e&f]])}};\nN.prototype.update_cursor=function(){var a=Math.max(this.max_cols,2*this.offset_register);let b;this.cursor_address>=this.start_address?(b=(this.cursor_address-this.start_address)/a|0,a=(this.cursor_address-this.start_address)%a):(b=(this.cursor_address/a|0)+this.scan_line_to_screen_row(this.line_compare),a=this.cursor_address%a);this.screen.update_cursor(b,a)};\nN.prototype.complete_redraw=function(){this.graphical_mode?this.svga_enabled?this.cpu.svga_mark_dirty():(this.diff_addr_min=0,this.diff_addr_max=524288):this.text_mode_redraw()};N.prototype.complete_replot=function(){this.graphical_mode&&!this.svga_enabled&&(this.diff_plot_min=0,this.diff_plot_max=524288,this.complete_redraw())};N.prototype.partial_redraw=function(a,b){a<this.diff_addr_min&&(this.diff_addr_min=a);b>this.diff_addr_max&&(this.diff_addr_max=b)};\nN.prototype.partial_replot=function(a,b){a<this.diff_plot_min&&(this.diff_plot_min=a);b>this.diff_plot_max&&(this.diff_plot_max=b);this.partial_redraw(a,b)};N.prototype.reset_diffs=function(){this.diff_addr_min=this.vga_memory_size;this.diff_addr_max=0;this.diff_plot_min=this.vga_memory_size;this.diff_plot_max=0};N.prototype.destroy=function(){};N.prototype.vga_bytes_per_line=function(){var a=this.offset_register<<2;this.underline_location_register&64?a<<=1:this.crtc_mode&64&&(a>>>=1);return a};\nN.prototype.vga_addr_shift_count=function(){var a=128+(~this.underline_location_register&this.crtc_mode&64);a-=this.underline_location_register&64;a-=this.attribute_mode&64;return a>>>6};\nN.prototype.vga_addr_to_pixel=function(a){var b=this.vga_addr_shift_count();if(~this.crtc_mode&3){var c=a-this.start_address;c&=this.crtc_mode<<13|-24577;c<<=b;var d=c/this.virtual_width|0;c%=this.virtual_width;switch(this.crtc_mode&3){case 2:d=d<<1|a>>13&1;break;case 1:d=d<<1|a>>14&1;break;case 0:d=d<<2|a>>13&3}return d*this.virtual_width+c+(this.start_address<<b)}return a<<b};\nN.prototype.scan_line_to_screen_row=function(a){this.max_scan_line&128&&(a>>>=1);a=Math.ceil(a/(1+(this.max_scan_line&31)));this.crtc_mode&1||(a<<=1);this.crtc_mode&2||(a<<=1);return a};N.prototype.set_size_text=function(a,b){this.max_cols=a;this.max_rows=b;this.screen.set_size_text(a,b);this.bus.send(\"screen-set-size\",[a,b,0])};\nN.prototype.set_size_graphical=function(a,b,c,d,e){c=Math.max(c,1);d=Math.max(d,1);if(this.screen_width!==a||this.screen_height!==b||this.virtual_width!==c||this.virtual_height!==d){this.screen_width=a;this.screen_height=b;this.virtual_width=c;this.virtual_height=d;if(\"undefined\"!==typeof ImageData){const g=c*d,f=this.cpu.svga_allocate_dest_buffer(g)>>>0;this.dest_buffet_offset=f;this.image_data=new ImageData(new Uint8ClampedArray(this.cpu.wasm_memory.buffer,f,4*g),c,d);this.cpu.svga_mark_dirty()}this.screen.set_size_graphical(a,\nb,c,d);this.bus.send(\"screen-set-size\",[a,b,e])}};\nN.prototype.update_vga_size=function(){if(!this.svga_enabled){var a=Math.min(1+this.horizontal_display_enable_end,this.horizontal_blank_start),b=Math.min(1+this.vertical_display_enable_end,this.vertical_blank_start);if(a&&b)if(this.graphical_mode){a<<=3;var c=this.offset_register<<4;this.attribute_mode&64&&(a>>>=1,c>>>=1);b=this.scan_line_to_screen_row(b);var d=ya[0];const e=this.vga_bytes_per_line();this.set_size_graphical(a,b,c,e?Math.ceil(d/e):b,8);this.update_vertical_retrace();this.update_layers()}else this.max_scan_line&\n128&&(b>>>=1),c=b/(1+(this.max_scan_line&31))|0,a&&c&&this.set_size_text(a,c)}};\nN.prototype.update_layers=function(){this.graphical_mode||this.text_mode_redraw();if(this.svga_enabled)this.layers=[];else if(this.virtual_width&&this.screen_width)if(!this.palette_source||this.clocking_mode&32)this.layers=[],this.screen.clear_screen();else{var a=this.start_address_latched,b=this.horizontal_panning;this.attribute_mode&64&&(b>>>=1);var c=this.preset_row_scan>>5&3,d=this.vga_addr_to_pixel(a+c);a=d/this.virtual_width|0;var e=d%this.virtual_width+b;d=this.scan_line_to_screen_row(1+this.line_compare);\nd=Math.min(d,this.screen_height);var g=this.screen_height-d;this.layers=[];e=-e;for(var f=0;e<this.screen_width;e+=this.virtual_width,f++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:0,buffer_x:0,buffer_y:a+f,buffer_width:this.virtual_width,buffer_height:d});a=0;this.attribute_mode&32||(a=this.vga_addr_to_pixel(c)+b);e=-a;for(f=0;e<this.screen_width;e+=this.virtual_width,f++)this.layers.push({image_data:this.image_data,screen_x:e,screen_y:d,buffer_x:0,buffer_y:f,buffer_width:this.virtual_width,\nbuffer_height:g})}};N.prototype.update_vertical_retrace=function(){this.port_3DA_value|=8;this.start_address_latched!==this.start_address&&(this.start_address_latched=this.start_address,this.update_layers())};N.prototype.update_cursor_scanline=function(){var a=this.max_scan_line&31;const b=Math.min(a,this.cursor_scanline_start&31);a=Math.min(a,this.cursor_scanline_end&31);this.screen.update_cursor_scanline(b,a,!(this.cursor_scanline_start&32)&&b<a)};\nN.prototype.port3C0_write=function(a){if(-1===this.attribute_controller_index)B(a),this.attribute_controller_index=a&31,B(this.attribute_controller_index),this.palette_source!==(a&32)&&(this.palette_source=a&32,this.update_layers());else{if(16>this.attribute_controller_index)B(this.attribute_controller_index),B(a),this.dac_map[this.attribute_controller_index]=a,this.attribute_mode&64||this.complete_redraw();else switch(this.attribute_controller_index){case 16:B(a);if(this.attribute_mode!==a){var b=\nthis.attribute_mode;this.attribute_mode=a;const c=0!==(a&1);this.svga_enabled||this.graphical_mode===c||(this.graphical_mode=c,this.screen.set_mode(this.graphical_mode));(b^a)&64&&this.complete_replot();this.update_vga_size();this.complete_redraw();this.set_font_bitmap(!1)}break;case 18:B(a);this.color_plane_enable!==a&&(this.color_plane_enable=a,this.complete_redraw());break;case 19:B(a);this.horizontal_panning!==a&&(this.horizontal_panning=a&15,this.update_layers());break;case 20:B(a);this.color_select!==\na&&(this.color_select=a,this.complete_redraw());break;default:B(this.attribute_controller_index),B(a)}this.attribute_controller_index=-1}};N.prototype.port3C0_read=function(){return(this.attribute_controller_index|this.palette_source)&255};N.prototype.port3C0_read16=function(){return this.port3C0_read()|this.port3C1_read()<<8&65280};\nN.prototype.port3C1_read=function(){if(16>this.attribute_controller_index)return B(this.attribute_controller_index),B(this.dac_map[this.attribute_controller_index]),this.dac_map[this.attribute_controller_index]&255;switch(this.attribute_controller_index){case 16:return B(this.attribute_mode),this.attribute_mode;case 18:return B(this.color_plane_enable),this.color_plane_enable;case 19:return B(this.horizontal_panning),this.horizontal_panning;case 20:return B(this.color_select),this.color_select;default:B(this.attribute_controller_index)}return 255};\nN.prototype.port3C2_write=function(a){B(a);this.miscellaneous_output_register=a};N.prototype.port3C4_write=function(a){this.sequencer_index=a};N.prototype.port3C4_read=function(){return this.sequencer_index};\nN.prototype.port3C5_write=function(a){switch(this.sequencer_index){case 1:B(a);var b=this.clocking_mode;this.clocking_mode=a;(b^a)&32&&this.update_layers();this.set_font_bitmap(!1);break;case 2:B(a);b=this.plane_write_bm;this.plane_write_bm=a;this.graphical_mode||!(b&4)||this.plane_write_bm&4||this.set_font_bitmap(!0);break;case 3:B(a);b=this.character_map_select;this.character_map_select=a;this.graphical_mode||b===a||this.set_font_page();break;case 4:B(a);this.sequencer_memory_mode=a;break;default:B(this.sequencer_index),\nB(a)}};N.prototype.port3C5_read=function(){B(this.sequencer_index);switch(this.sequencer_index){case 1:return this.clocking_mode;case 2:return this.plane_write_bm;case 3:return this.character_map_select;case 4:return this.sequencer_memory_mode;case 6:return 18}return 0};N.prototype.port3C6_write=function(a){this.dac_mask!==a&&(this.dac_mask=a,this.complete_redraw())};N.prototype.port3C6_read=function(){return this.dac_mask};\nN.prototype.port3C7_write=function(a){B(a);this.dac_color_index_read=3*a;this.dac_state&=0};N.prototype.port3C7_read=function(){return this.dac_state};N.prototype.port3C8_write=function(a){this.dac_color_index_write=3*a;this.dac_state|=3};N.prototype.port3C8_read=function(){return this.dac_color_index_write/3&255};\nN.prototype.port3C9_write=function(a){var b=this.dac_color_index_write/3|0,c=this.dac_color_index_write%3,d=this.vga256_palette[b];if(0===(this.dispi_enable_value&32)){a&=63;const e=a&1;a=a<<2|e<<1|e}0===c?d=d&-16711681|a<<16:1===c?d=d&-65281|a<<8:(d=d&-256|a,B(b),B(d));this.vga256_palette[b]!==d&&(this.vga256_palette[b]=d,this.complete_redraw());this.dac_color_index_write++};\nN.prototype.port3C9_read=function(){var a=this.vga256_palette[this.dac_color_index_read/3|0]>>8*(2-this.dac_color_index_read%3)&255;this.dac_color_index_read++;return this.dispi_enable_value&32?a:a>>2};N.prototype.port3CC_read=function(){return this.miscellaneous_output_register};N.prototype.port3CE_write=function(a){this.graphics_index=a};N.prototype.port3CE_read=function(){return this.graphics_index};\nN.prototype.port3CF_write=function(a){switch(this.graphics_index){case 0:this.planar_setreset=a;B(a);break;case 1:this.planar_setreset_enable=a;B(a);break;case 2:this.color_compare=a;B(a);break;case 3:this.planar_rotate_reg=a;B(a);break;case 4:this.plane_read=a;B(a);break;case 5:var b=this.planar_mode;this.planar_mode=a;B(a);(b^a)&96&&this.complete_replot();break;case 6:B(a);this.miscellaneous_graphics_register!==a&&(this.miscellaneous_graphics_register=a,this.update_vga_size());break;case 7:this.color_dont_care=\na;B(a);break;case 8:this.planar_bitmap=a;B(a);break;default:B(this.graphics_index),B(a)}};N.prototype.port3CF_read=function(){B(this.graphics_index);switch(this.graphics_index){case 0:return this.planar_setreset;case 1:return this.planar_setreset_enable;case 2:return this.color_compare;case 3:return this.planar_rotate_reg;case 4:return this.plane_read;case 5:return this.planar_mode;case 6:return this.miscellaneous_graphics_register;case 7:return this.color_dont_care;case 8:return this.planar_bitmap}return 0};\nN.prototype.port3D4_write=function(a){this.index_crtc=a};N.prototype.port3D4_write16=function(a){this.port3D4_write(a&255);this.port3D5_write(a>>8&255)};N.prototype.port3D4_read=function(){return this.index_crtc};\nN.prototype.port3D5_write=function(a){switch(this.index_crtc){case 1:B(a);this.horizontal_display_enable_end!==a&&(this.horizontal_display_enable_end=a,this.update_vga_size());break;case 2:this.horizontal_blank_start!==a&&(this.horizontal_blank_start=a,this.update_vga_size());break;case 7:B(a);var b=this.vertical_display_enable_end;this.vertical_display_enable_end&=255;this.vertical_display_enable_end=this.vertical_display_enable_end|a<<3&512|a<<7&256;b!==this.vertical_display_enable_end&&this.update_vga_size();\nthis.line_compare=this.line_compare&767|a<<4&256;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&767|a<<5&256;b!==this.vertical_blank_start&&this.update_vga_size();this.update_layers();break;case 8:B(a);this.preset_row_scan=a;this.update_layers();break;case 9:B(a);var c=this.max_scan_line;this.max_scan_line=a;this.line_compare=this.line_compare&511|a<<3&512;b=this.vertical_blank_start;this.vertical_blank_start=this.vertical_blank_start&511|a<<4&512;((c^this.max_scan_line)&\n159||b!==this.vertical_blank_start)&&this.update_vga_size();this.update_cursor_scanline();this.update_layers();this.set_font_bitmap(!1);break;case 10:B(a);this.cursor_scanline_start=a;this.update_cursor_scanline();break;case 11:B(a);this.cursor_scanline_end=a;this.update_cursor_scanline();break;case 12:(this.start_address>>8&255)!==a&&(this.start_address=this.start_address&255|a<<8,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());B(a);B(this.start_address,4);break;case 13:(this.start_address&\n255)!==a&&(this.start_address=this.start_address&65280|a,this.update_layers(),~this.crtc_mode&3&&this.complete_replot());B(a);B(this.start_address,4);break;case 14:B(a);this.cursor_address=this.cursor_address&255|a<<8;this.update_cursor();break;case 15:B(a);this.cursor_address=this.cursor_address&65280|a;this.update_cursor();break;case 18:B(a);(this.vertical_display_enable_end&255)!==a&&(this.vertical_display_enable_end=this.vertical_display_enable_end&768|a,this.update_vga_size());break;case 19:B(a);\nthis.offset_register!==a&&(this.offset_register=a,this.update_vga_size(),~this.crtc_mode&3&&this.complete_replot());break;case 20:B(a);this.underline_location_register!==a&&(b=this.underline_location_register,this.underline_location_register=a,this.update_vga_size(),(b^a)&64&&this.complete_replot());break;case 21:B(a);(this.vertical_blank_start&255)!==a&&(this.vertical_blank_start=this.vertical_blank_start&768|a,this.update_vga_size());break;case 23:B(a);this.crtc_mode!==a&&(b=this.crtc_mode,this.crtc_mode=\na,this.update_vga_size(),(b^a)&67&&this.complete_replot());break;case 24:B(a);this.line_compare=this.line_compare&768|a;this.update_layers();break;default:this.index_crtc<this.crtc.length&&(this.crtc[this.index_crtc]=a),B(this.index_crtc),B(a)}};N.prototype.port3D5_write16=function(a){B(a,4);this.port3D5_write(a&255)};\nN.prototype.port3D5_read=function(){B(this.index_crtc);switch(this.index_crtc){case 1:return this.horizontal_display_enable_end;case 2:return this.horizontal_blank_start;case 7:return this.vertical_display_enable_end>>7&2|this.vertical_blank_start>>5&8|this.line_compare>>4&16|this.vertical_display_enable_end>>3&64;case 8:return this.preset_row_scan;case 9:return this.max_scan_line;case 10:return this.cursor_scanline_start;case 11:return this.cursor_scanline_end;case 12:return this.start_address&255;\ncase 13:return this.start_address>>8;case 14:return this.cursor_address>>8;case 15:return this.cursor_address&255;case 18:return this.vertical_display_enable_end&255;case 19:return this.offset_register;case 20:return this.underline_location_register;case 21:return this.vertical_blank_start&255;case 23:return this.crtc_mode;case 24:return this.line_compare&255}return this.index_crtc<this.crtc.length?this.crtc[this.index_crtc]:0};N.prototype.port3D5_read16=function(){return this.port3D5_read()};\nN.prototype.port3DA_read=function(){var a=this.port_3DA_value;this.graphical_mode?(this.port_3DA_value^=1,this.port_3DA_value&=1):(this.port_3DA_value&1&&(this.port_3DA_value^=8),this.port_3DA_value^=1);this.attribute_controller_index=-1;return a};N.prototype.port1CE_write=function(a){this.dispi_index=a};\nN.prototype.port1CF_write=function(a){B(this.dispi_index);B(a);const b=this.svga_enabled;switch(this.dispi_index){case 0:45248<=a&&45253>=a?this.svga_version=a:B(a);break;case 1:this.svga_width=a;2560<this.svga_width&&(this.svga_width=2560);break;case 2:this.svga_height=a;1600<this.svga_height&&(this.svga_height=1600);break;case 3:this.svga_bpp=a;break;case 4:(this.svga_enabled=1===(a&1))&&0===(a&128)&&this.svga_memory.fill(0);this.dispi_enable_value=a;break;case 5:B(a<<16);this.svga_bank_offset=\na<<16;break;case 8:B(a);this.svga_offset_x!==a&&(this.svga_offset_x=a,this.svga_offset=this.svga_offset_y*this.svga_width+this.svga_offset_x,this.complete_redraw());break;case 9:B(a*this.svga_width);B(a);this.svga_offset_y!==a&&(this.svga_offset_y=a,this.svga_offset=this.svga_offset_y*this.svga_width+this.svga_offset_x,this.complete_redraw());break;default:B(this.dispi_index)}!this.svga_enabled||this.svga_width&&this.svga_height||(this.svga_enabled=!1);this.svga_enabled&&!b&&(this.svga_offset_y=this.svga_offset_x=\nthis.svga_offset=0,this.graphical_mode=!0,this.screen.set_mode(this.graphical_mode),this.set_size_graphical(this.svga_width,this.svga_height,this.svga_width,this.svga_height,this.svga_bpp));this.svga_enabled||(this.svga_bank_offset=0);this.update_layers()};N.prototype.port1CF_read=function(){B(this.dispi_index);return this.svga_register_read(this.dispi_index)};\nN.prototype.svga_register_read=function(a){switch(a){case 0:return this.svga_version;case 1:return this.dispi_enable_value&2?2560:this.svga_width;case 2:return this.dispi_enable_value&2?1600:this.svga_height;case 3:return this.dispi_enable_value&2?32:this.svga_bpp;case 4:return this.dispi_enable_value;case 5:return this.svga_bank_offset>>>16;case 6:return this.screen_width?this.screen_width:1;case 8:return this.svga_offset_x;case 9:return this.svga_offset_y;case 10:return this.vga_memory_size/65536|\n0;default:B(this.dispi_index)}return 255};\nN.prototype.vga_replot=function(){for(var a=this.diff_plot_min&-16,b=Math.min(this.diff_plot_max|15,524287),c=this.vga_addr_shift_count(),d=~this.crtc_mode&3,e=this.planar_mode&96,g=this.attribute_mode&64;a<=b;){var f=a>>>c;if(d){var h=a/this.virtual_width|0,l=a-this.virtual_width*h;switch(d){case 1:f=(h&1)<<13;h>>>=1;break;case 2:f=(h&1)<<14;h>>>=1;break;case 3:f=(h&3)<<13,h>>>=2}f|=(h*this.virtual_width+l>>>c)+this.start_address}h=this.plane0[f];l=this.plane1[f];var m=this.plane2[f],n=this.plane3[f];\nf=new Uint8Array(8);switch(e){case 0:h<<=0;l<<=1;m<<=2;n<<=3;for(var p=7;0<=p;p--)f[7-p]=h>>p&1|l>>p&2|m>>p&4|n>>p&8;break;case 32:f[0]=h>>6&3|m>>4&12;f[1]=h>>4&3|m>>2&12;f[2]=h>>2&3|m>>0&12;f[3]=h>>0&3|m<<2&12;f[4]=l>>6&3|n>>4&12;f[5]=l>>4&3|n>>2&12;f[6]=l>>2&3|n>>0&12;f[7]=l>>0&3|n<<2&12;break;case 64:case 96:f[0]=h>>4&15,f[1]=h>>0&15,f[2]=l>>4&15,f[3]=l>>0&15,f[4]=m>>4&15,f[5]=m>>0&15,f[6]=n>>4&15,f[7]=n>>0&15}if(g)for(h=p=0;4>p;p++,a++,h+=2)this.pixel_buffer[a]=f[h]<<4|f[h+1];else for(p=0;8>p;p++,\na++)this.pixel_buffer[a]=f[p]}};\nN.prototype.vga_redraw=function(){var a=this.diff_addr_min,b=Math.min(this.diff_addr_max,524287);const c=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.virtual_width*this.virtual_height);var d=255,e=0;this.attribute_mode&128&&(d&=207,e|=this.color_select<<4&48);if(this.attribute_mode&64)for(;a<=b;a++){var g=this.pixel_buffer[a]&d|e;g=this.vga256_palette[g];c[a]=g&65280|g<<16|g>>16|4278190080}else for(d&=63,e|=this.color_select<<4&192;a<=b;a++)g=this.dac_map[this.pixel_buffer[a]&\nthis.color_plane_enable]&d|e,g=this.vga256_palette[g],c[a]=g&65280|g<<16|g>>16|4278190080};\nN.prototype.screen_fill_buffer=function(){if(this.graphical_mode){if(0===this.image_data.data.byteLength){var a=new Uint8ClampedArray(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,4*this.virtual_width*this.virtual_height);this.image_data=new ImageData(a,this.virtual_width,this.virtual_height);this.update_layers()}if(this.svga_enabled){a=0;let d=this.svga_height;if(8===this.svga_bpp){const e=new Int32Array(this.cpu.wasm_memory.buffer,this.dest_buffet_offset,this.screen_width*this.screen_height),\ng=new Uint8Array(this.cpu.wasm_memory.buffer,this.svga_memory.byteOffset,this.vga_memory_size);for(var b=0;b<e.length;b++){var c=this.vga256_palette[g[b]];e[b]=c&65280|c<<16|c>>16|4278190080}}else this.cpu.svga_fill_pixel_buffer(this.svga_bpp,this.svga_offset),b=15===this.svga_bpp?2:this.svga_bpp/8,a=((this.cpu.svga_dirty_bitmap_min_offset[0]/b|0)-this.svga_offset)/this.svga_width|0,d=(((this.cpu.svga_dirty_bitmap_max_offset[0]/b|0)-this.svga_offset)/this.svga_width|0)+1;a<d&&(a=Math.max(a,0),d=Math.min(d,\nthis.svga_height),this.screen.update_buffer([{image_data:this.image_data,screen_x:0,screen_y:a,buffer_x:0,buffer_y:a,buffer_width:this.svga_width,buffer_height:d-a}]))}else this.vga_replot(),this.vga_redraw(),this.screen.update_buffer(this.layers);this.reset_diffs()}this.update_vertical_retrace()};\nN.prototype.set_font_bitmap=function(a){const b=this.max_scan_line&31;if(b&&!this.graphical_mode){const c=!!(this.clocking_mode&8);this.screen.set_font_bitmap(b+1,!c&&!(this.clocking_mode&1),c,!!(this.attribute_mode&4),this.plane2,a)}};\nN.prototype.set_font_page=function(){const a=[0,2,4,6,1,3,5,7],b=(this.character_map_select&12)>>2|(this.character_map_select&32)>>3,c=this.character_map_select&3|(this.character_map_select&16)>>2;this.font_page_ab_enabled=b!==c;this.screen.set_font_page(a[b],a[c]);this.complete_redraw()};function za(a,b){this.cpu=a;this.bus=b;this.use_mouse=this.enable_mouse_stream=!1;this.have_mouse=!0;this.mouse_clicks=this.mouse_delta_y=this.mouse_delta_x=0;this.have_keyboard=!0;this.next_read_resolution=this.next_read_rate=this.next_handle_scan_code_set=this.next_read_led=this.next_read_sample=this.next_is_mouse_command=this.enable_keyboard_stream=!1;this.kbd_buffer=new la(1024);this.last_port60_byte=0;this.sample_rate=100;this.mouse_id=this.mouse_detect_state=0;this.mouse_reset_workaround=!1;\nthis.wheel_movement=0;this.resolution=4;this.scaling2=!1;this.last_mouse_packet=-1;this.mouse_buffer=new la(1024);this.next_byte_is_aux=this.next_byte_is_ready=!1;this.bus.register(\"keyboard-code\",function(c){this.kbd_send_code(c)},this);this.bus.register(\"mouse-click\",function(c){this.mouse_send_click(c[0],c[1],c[2])},this);this.bus.register(\"mouse-delta\",function(c){this.mouse_send_delta(c[0],c[1])},this);this.bus.register(\"mouse-wheel\",function(c){this.wheel_movement-=c[0];this.wheel_movement-=\n2*c[1];this.wheel_movement=Math.min(7,Math.max(-8,this.wheel_movement));this.send_mouse_packet(0,0)},this);this.command_register=5;this.controller_output_port=0;this.read_controller_output_port=this.read_command_register=this.read_output_register=!1;a.io.register_read(96,this,this.port60_read);a.io.register_read(100,this,this.port64_read);a.io.register_write(96,this,this.port60_write);a.io.register_write(100,this,this.port64_write)}\nza.prototype.get_state=function(){var a=[];a[0]=this.enable_mouse_stream;a[1]=this.use_mouse;a[2]=this.have_mouse;a[3]=this.mouse_delta_x;a[4]=this.mouse_delta_y;a[5]=this.mouse_clicks;a[6]=this.have_keyboard;a[7]=this.enable_keyboard_stream;a[8]=this.next_is_mouse_command;a[9]=this.next_read_sample;a[10]=this.next_read_led;a[11]=this.next_handle_scan_code_set;a[12]=this.next_read_rate;a[13]=this.next_read_resolution;a[15]=this.last_port60_byte;a[16]=this.sample_rate;a[17]=this.resolution;a[18]=this.scaling2;\na[20]=this.command_register;a[21]=this.read_output_register;a[22]=this.read_command_register;a[23]=this.controller_output_port;a[24]=this.read_controller_output_port;a[25]=this.mouse_id;a[26]=this.mouse_detect_state;a[27]=this.mouse_reset_workaround;return a};\nza.prototype.set_state=function(a){this.enable_mouse_stream=a[0];this.use_mouse=a[1];this.have_mouse=a[2];this.mouse_delta_x=a[3];this.mouse_delta_y=a[4];this.mouse_clicks=a[5];this.have_keyboard=a[6];this.enable_keyboard_stream=a[7];this.next_is_mouse_command=a[8];this.next_read_sample=a[9];this.next_read_led=a[10];this.next_handle_scan_code_set=a[11];this.next_read_rate=a[12];this.next_read_resolution=a[13];this.last_port60_byte=a[15];this.sample_rate=a[16];this.resolution=a[17];this.scaling2=a[18];\nthis.command_register=a[20];this.read_output_register=a[21];this.read_command_register=a[22];this.controller_output_port=a[23];this.read_controller_output_port=a[24];this.mouse_id=a[25]||0;this.mouse_detect_state=a[26]||0;this.mouse_reset_workaround=a[27]||!1;this.next_byte_is_aux=this.next_byte_is_ready=!1;this.kbd_buffer.clear();this.mouse_buffer.clear();this.bus.send(\"mouse-enable\",this.use_mouse)};\nza.prototype.raise_irq=function(){this.next_byte_is_ready||(this.kbd_buffer.length?this.kbd_irq():this.mouse_buffer.length&&this.mouse_irq())};za.prototype.mouse_irq=function(){this.next_byte_is_aux=this.next_byte_is_ready=!0;this.command_register&2&&(this.cpu.device_lower_irq(12),this.cpu.device_raise_irq(12))};za.prototype.kbd_irq=function(){this.next_byte_is_ready=!0;this.next_byte_is_aux=!1;this.command_register&1&&(this.cpu.device_lower_irq(1),this.cpu.device_raise_irq(1))};\nza.prototype.kbd_send_code=function(a){this.enable_keyboard_stream&&(B(a),this.kbd_buffer.push(a),this.raise_irq())};za.prototype.mouse_send_delta=function(a,b){if(this.have_mouse&&this.use_mouse){var c=this.resolution*this.sample_rate/80;this.mouse_delta_x+=a*c;this.mouse_delta_y+=b*c;this.enable_mouse_stream&&(a=this.mouse_delta_x|0,b=this.mouse_delta_y|0,a||b)&&(Date.now(),this.mouse_delta_x-=a,this.mouse_delta_y-=b,this.send_mouse_packet(a,b))}};\nza.prototype.mouse_send_click=function(a,b,c){this.have_mouse&&this.use_mouse&&(this.mouse_clicks=a|c<<1|b<<2,this.enable_mouse_stream&&this.send_mouse_packet(0,0))};\nza.prototype.send_mouse_packet=function(a,b){var c=(0>b)<<5|(0>a)<<4|8|this.mouse_clicks;this.last_mouse_packet=Date.now();this.mouse_buffer.push(c);this.mouse_buffer.push(a);this.mouse_buffer.push(b);4===this.mouse_id?(this.mouse_buffer.push(0|this.wheel_movement&15),this.wheel_movement=0):3===this.mouse_id&&(this.mouse_buffer.push(this.wheel_movement&255),this.wheel_movement=0);this.raise_irq()};\nza.prototype.apply_scaling2=function(a){var b=a>>31;switch(Math.abs(a)){case 0:case 1:case 3:return a;case 2:return b;case 4:return 6*b;case 5:return 9*b;default:return a<<1}};\nza.prototype.port60_read=function(){this.next_byte_is_ready=!1;if(!this.kbd_buffer.length&&!this.mouse_buffer.length)return this.last_port60_byte;this.next_byte_is_aux?(this.cpu.device_lower_irq(12),this.last_port60_byte=this.mouse_buffer.shift()):(this.cpu.device_lower_irq(1),this.last_port60_byte=this.kbd_buffer.shift());B(this.last_port60_byte);(this.kbd_buffer.length||this.mouse_buffer.length)&&this.raise_irq();return this.last_port60_byte};\nza.prototype.port64_read=function(){var a=16;this.next_byte_is_ready&&(a|=1);this.next_byte_is_aux&&(a|=32);B(a);return a};\nza.prototype.port60_write=function(a){B(a);if(this.read_command_register)this.command_register=a,this.read_command_register=!1,B(this.command_register);else if(this.read_output_register)this.read_output_register=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(a),this.mouse_irq();else if(this.next_read_sample){this.next_read_sample=!1;this.mouse_buffer.clear();this.mouse_buffer.push(250);this.sample_rate=a;switch(this.mouse_detect_state){case -1:60===a?(this.mouse_reset_workaround=!0,this.mouse_detect_state=\n0):(this.mouse_reset_workaround=!1,this.mouse_detect_state=200===a?1:0);break;case 0:200===a&&(this.mouse_detect_state=1);break;case 1:this.mouse_detect_state=100===a?2:200===a?3:0;break;case 2:80===a&&(this.mouse_id=3);this.mouse_detect_state=-1;break;case 3:80===a&&(this.mouse_id=4),this.mouse_detect_state=-1}B(a);B(this.mouse_id);this.sample_rate||(this.sample_rate=100);this.mouse_irq()}else if(this.next_read_resolution)this.next_read_resolution=!1,this.mouse_buffer.clear(),this.mouse_buffer.push(250),\nthis.resolution=3<a?4:1<<a,this.mouse_irq();else if(this.next_read_led)this.next_read_led=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_handle_scan_code_set)this.next_handle_scan_code_set=!1,this.kbd_buffer.push(250),this.kbd_irq(),a||this.kbd_buffer.push(1);else if(this.next_read_rate)this.next_read_rate=!1,this.kbd_buffer.push(250),this.kbd_irq();else if(this.next_is_mouse_command){if(this.next_is_mouse_command=!1,B(a),this.have_mouse){this.kbd_buffer.clear();this.mouse_buffer.clear();\nthis.mouse_buffer.push(250);switch(a){case 230:this.scaling2=!1;break;case 231:this.scaling2=!0;break;case 232:this.next_read_resolution=!0;break;case 233:this.send_mouse_packet(0,0);break;case 235:this.send_mouse_packet(0,0);break;case 242:B(this.mouse_id);this.mouse_buffer.push(this.mouse_id);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;this.raise_irq();break;case 243:this.next_read_sample=!0;break;case 244:this.use_mouse=this.enable_mouse_stream=!0;this.bus.send(\"mouse-enable\",!0);\nthis.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=0;break;case 245:this.enable_mouse_stream=!1;break;case 246:this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;break;case 255:this.mouse_buffer.push(170);this.mouse_buffer.push(0);this.use_mouse=!0;this.bus.send(\"mouse-enable\",!0);this.enable_mouse_stream=!1;this.sample_rate=100;this.scaling2=!1;this.resolution=4;this.mouse_reset_workaround||(this.mouse_id=0);this.mouse_clicks=this.mouse_delta_x=this.mouse_delta_y=\n0;break;default:B(a)}this.mouse_irq()}}else if(this.read_controller_output_port)this.read_controller_output_port=!1,this.controller_output_port=a;else{B(a);this.mouse_buffer.clear();this.kbd_buffer.clear();this.kbd_buffer.push(250);switch(a){case 237:this.next_read_led=!0;break;case 240:this.next_handle_scan_code_set=!0;break;case 242:this.kbd_buffer.push(171);this.kbd_buffer.push(131);break;case 243:this.next_read_rate=!0;break;case 244:this.enable_keyboard_stream=!0;break;case 245:this.enable_keyboard_stream=\n!1;break;case 246:break;case 255:this.kbd_buffer.clear();this.kbd_buffer.push(250);this.kbd_buffer.push(170);this.kbd_buffer.push(0);break;default:B(a)}this.kbd_irq()}};\nza.prototype.port64_write=function(a){B(a);switch(a){case 32:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(this.command_register);this.kbd_irq();break;case 96:this.read_command_register=!0;break;case 209:this.read_controller_output_port=!0;break;case 211:this.read_output_register=!0;break;case 212:this.next_is_mouse_command=!0;break;case 167:this.command_register|=32;break;case 168:this.command_register&=-33;break;case 169:this.kbd_buffer.clear();this.mouse_buffer.clear();\nthis.kbd_buffer.push(0);this.kbd_irq();break;case 170:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(85);this.kbd_irq();break;case 171:this.kbd_buffer.clear();this.mouse_buffer.clear();this.kbd_buffer.push(0);this.kbd_irq();break;case 173:this.command_register|=16;break;case 174:this.command_register&=-17;break;case 254:this.cpu.reboot_internal();break;default:B(a)}};function Ca(a){this.cpu=a;this.cmos_index=0;this.cmos_data=new Uint8Array(128);this.last_update=this.rtc_time=Date.now();this.next_interrupt_alarm=this.next_interrupt=0;this.periodic_interrupt=!1;this.periodic_interrupt_time=.9765625;this.cmos_a=38;this.cmos_b=2;this.nmi_disabled=this.cmos_c=0;a.io.register_write(112,this,function(b){this.cmos_index=b&127;this.nmi_disabled=b>>7});a.io.register_write(113,this,this.cmos_port_write);a.io.register_read(113,this,this.cmos_port_read)}\nCa.prototype.get_state=function(){var a=[];a[0]=this.cmos_index;a[1]=this.cmos_data;a[2]=this.rtc_time;a[3]=this.last_update;a[4]=this.next_interrupt;a[5]=this.next_interrupt_alarm;a[6]=this.periodic_interrupt;a[7]=this.periodic_interrupt_time;a[8]=this.cmos_a;a[9]=this.cmos_b;a[10]=this.cmos_c;a[11]=this.nmi_disabled;return a};\nCa.prototype.set_state=function(a){this.cmos_index=a[0];this.cmos_data=a[1];this.rtc_time=a[2];this.last_update=a[3];this.next_interrupt=a[4];this.next_interrupt_alarm=a[5];this.periodic_interrupt=a[6];this.periodic_interrupt_time=a[7];this.cmos_a=a[8];this.cmos_b=a[9];this.cmos_c=a[10];this.nmi_disabled=a[11]};\nCa.prototype.timer=function(a){a=Date.now();this.rtc_time+=a-this.last_update;this.last_update=a;this.periodic_interrupt&&this.next_interrupt<a?(this.cpu.device_raise_irq(8),this.cmos_c|=192,this.next_interrupt+=this.periodic_interrupt_time*Math.ceil((a-this.next_interrupt)/this.periodic_interrupt_time)):this.next_interrupt_alarm&&this.next_interrupt_alarm<a&&(this.cpu.device_raise_irq(8),this.cmos_c|=160,this.next_interrupt_alarm=0);let b=100;this.periodic_interrupt&&this.next_interrupt&&(b=Math.min(b,\nMath.max(0,this.next_interrupt-a)));this.next_interrupt_alarm&&(b=Math.min(b,Math.max(0,this.next_interrupt_alarm-a)));return b};Ca.prototype.bcd_pack=function(a){for(var b=0,c=0,d;a;)d=a%10,c|=d<<4*b,b++,a=(a-d)/10;return c};Ca.prototype.bcd_unpack=function(a){return(a&15)+10*(a>>4&15)};Ca.prototype.encode_time=function(a){return this.cmos_b&4?a:this.bcd_pack(a)};Ca.prototype.decode_time=function(a){return this.cmos_b&4?a:this.bcd_unpack(a)};\nCa.prototype.cmos_port_read=function(){var a=this.cmos_index;switch(a){case 0:return B(this.encode_time((new Date(this.rtc_time)).getUTCSeconds())),this.encode_time((new Date(this.rtc_time)).getUTCSeconds());case 2:return B(this.encode_time((new Date(this.rtc_time)).getUTCMinutes())),this.encode_time((new Date(this.rtc_time)).getUTCMinutes());case 4:return B(this.encode_time((new Date(this.rtc_time)).getUTCHours())),this.encode_time((new Date(this.rtc_time)).getUTCHours());case 6:return B(this.encode_time((new Date(this.rtc_time)).getUTCDay()+\n1)),this.encode_time((new Date(this.rtc_time)).getUTCDay()+1);case 7:return B(this.encode_time((new Date(this.rtc_time)).getUTCDate())),this.encode_time((new Date(this.rtc_time)).getUTCDate());case 8:return B(this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1)),this.encode_time((new Date(this.rtc_time)).getUTCMonth()+1);case 9:return B(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100)),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()%100);case 10:return 999<=D.microtick()%\n1E3?this.cmos_a|128:this.cmos_a;case 11:return this.cmos_b;case 12:return this.cpu.device_lower_irq(8),a=this.cmos_c,this.cmos_c&=-241,a;case 13:return 0;case 50:case 55:return B(this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0)),this.encode_time((new Date(this.rtc_time)).getUTCFullYear()/100|0);default:return B(a),this.cmos_data[this.cmos_index]}};\nCa.prototype.cmos_port_write=function(a){switch(this.cmos_index){case 10:this.cmos_a=a&127;this.periodic_interrupt_time=1E3/(32768>>(this.cmos_a&15)-1);B(this.cmos_a,2);break;case 11:this.cmos_b=a;this.cmos_b&64&&(this.next_interrupt=Date.now());if(this.cmos_b&32){a=new Date;const b=this.decode_time(this.cmos_data[1]),c=this.decode_time(this.cmos_data[3]),d=this.decode_time(this.cmos_data[5]);this.next_interrupt_alarm=+new Date(Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate(),d,c,b))}B(this.cmos_b,\n2);break;case 1:case 3:case 5:this.cmos_write(this.cmos_index,a);break;default:B(this.cmos_index),B(a)}this.periodic_interrupt=64===(this.cmos_b&64)&&0<(this.cmos_a&15)};Ca.prototype.cmos_read=function(a){return this.cmos_data[a]};Ca.prototype.cmos_write=function(a,b){B(a);B(b);this.cmos_data[a]=b};function Da(a,b,c){this.bus=c;this.cpu=a;this.ints=4;this.line_control=this.baud_rate=0;this.lsr=96;this.ier=this.fifo_control=0;this.iir=1;this.irq=this.scratch_register=this.modem_status=this.modem_control=0;this.input=[];this.current_line=\"\";switch(b){case 1016:this.com=0;this.irq=4;break;case 760:this.com=1;this.irq=3;break;case 1E3:this.com=2;this.irq=4;break;case 744:this.irq=this.com=3;break;default:ta(\"Invalid serial port: \"+B(b),16384),this.com=0,this.irq=4}this.bus.register(\"serial\"+this.com+\n\"-input\",function(d){this.data_received(d)},this);this.bus.register(\"serial\"+this.com+\"-modem-status-input\",function(d){this.set_modem_status(d)},this);this.bus.register(\"serial\"+this.com+\"-carrier-detect-input\",function(d){this.set_modem_status(d?this.modem_status|136:this.modem_status&-137)},this);this.bus.register(\"serial\"+this.com+\"-ring-indicator-input\",function(d){this.set_modem_status(d?this.modem_status|68:this.modem_status&-69)},this);this.bus.register(\"serial\"+this.com+\"-data-set-ready-input\",\nfunction(d){this.set_modem_status(d?this.modem_status|34:this.modem_status&-35)},this);this.bus.register(\"serial\"+this.com+\"-clear-to-send-input\",function(d){this.set_modem_status(d?this.modem_status|17:this.modem_status&-18)},this);a=a.io;a.register_write(b,this,function(d){this.write_data(d)},function(d){this.write_data(d&255);this.write_data(d>>8)});a.register_write(b|1,this,function(d){this.line_control&128?(this.baud_rate=this.baud_rate&255|d<<8,B(this.baud_rate)):(0===(this.ier&2)&&d&2&&this.ThrowInterrupt(2),\nthis.ier=d&15,B(d),this.CheckInterrupt())});a.register_read(b,this,function(){if(this.line_control&128)return this.baud_rate&255;let d=0;0!==this.input.length&&(d=this.input.shift(),B(d));0===this.input.length&&(this.lsr&=-2,this.ClearInterrupt(12),this.ClearInterrupt(4));return d});a.register_read(b|1,this,function(){return this.line_control&128?this.baud_rate>>8:this.ier&15});a.register_read(b|2,this,function(){var d=this.iir&15;B(this.iir);2===this.iir&&this.ClearInterrupt(2);this.fifo_control&\n1&&(d|=192);return d});a.register_write(b|2,this,function(d){B(d);this.fifo_control=d});a.register_read(b|3,this,function(){B(this.line_control);return this.line_control});a.register_write(b|3,this,function(d){B(d);this.line_control=d});a.register_read(b|4,this,function(){return this.modem_control});a.register_write(b|4,this,function(d){B(d);this.modem_control=d});a.register_read(b|5,this,function(){B(this.lsr);return this.lsr});a.register_write(b|5,this,function(){});a.register_read(b|6,this,function(){B(this.modem_status);\nreturn this.modem_status&=240});a.register_write(b|6,this,function(d){B(d);this.set_modem_status(d)});a.register_read(b|7,this,function(){return this.scratch_register});a.register_write(b|7,this,function(d){this.scratch_register=d})}Da.prototype.get_state=function(){var a=[];a[0]=this.ints;a[1]=this.baud_rate;a[2]=this.line_control;a[3]=this.lsr;a[4]=this.fifo_control;a[5]=this.ier;a[6]=this.iir;a[7]=this.modem_control;a[8]=this.modem_status;a[9]=this.scratch_register;a[10]=this.irq;return a};\nDa.prototype.set_state=function(a){this.ints=a[0];this.baud_rate=a[1];this.line_control=a[2];this.lsr=a[3];this.fifo_control=a[4];this.ier=a[5];this.iir=a[6];this.modem_control=a[7];this.modem_status=a[8];this.scratch_register=a[9];this.irq=a[10]};\nDa.prototype.CheckInterrupt=function(){this.ints&4096&&this.ier&1?(this.iir=12,this.cpu.device_raise_irq(this.irq)):this.ints&16&&this.ier&1?(this.iir=4,this.cpu.device_raise_irq(this.irq)):this.ints&4&&this.ier&2?(this.iir=2,this.cpu.device_raise_irq(this.irq)):this.ints&1&&this.ier&8?(this.iir=0,this.cpu.device_raise_irq(this.irq)):(this.iir=1,this.cpu.device_lower_irq(this.irq))};Da.prototype.ThrowInterrupt=function(a){this.ints|=1<<a;this.CheckInterrupt()};\nDa.prototype.ClearInterrupt=function(a){this.ints&=~(1<<a);this.CheckInterrupt()};Da.prototype.data_received=function(a){B(a);this.input.push(a);this.lsr|=1;this.fifo_control&1?this.ThrowInterrupt(12):this.ThrowInterrupt(4)};Da.prototype.write_data=function(a){this.line_control&128?this.baud_rate=this.baud_rate&-256|a:(B(a),this.ThrowInterrupt(2),this.bus.send(\"serial\"+this.com+\"-output-byte\",a))};\nDa.prototype.set_modem_status=function(a){B(a);const b=this.modem_status&15;let c=(this.modem_status^a)>>4;this.modem_status=a;this.modem_status=this.modem_status|c|b};function Ea(a){this.cpu=a;var b=a.io;a.devices.pci.register_device({pci_id:56,pci_space:[134,128,19,113,7,0,128,2,8,0,128,6,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,1,0,0],pci_bars:[],name:\"acpi\"});this.timer_imprecision_offset=this.timer_last_value=0;this.status=1;this.pm1_enable=this.pm1_status=0;this.last_timer=this.get_timer(D.microtick());this.gpe=new Uint8Array(4);b.register_read(45056,this,void 0,function(){return this.pm1_status});\nb.register_write(45056,this,void 0,function(c){B(c,4);this.pm1_status&=~c});b.register_read(45058,this,void 0,function(){return this.pm1_enable});b.register_write(45058,this,void 0,function(c){B(c);this.pm1_enable=c});b.register_read(45060,this,void 0,function(){return this.status});b.register_write(45060,this,void 0,function(c){B(c);this.status=c});b.register_read(45064,this,void 0,void 0,function(){return this.get_timer(D.microtick())&16777215});b.register_read(45024,this,function(){return this.gpe[0]});\nb.register_read(45025,this,function(){return this.gpe[1]});b.register_read(45026,this,function(){return this.gpe[2]});b.register_read(45027,this,function(){return this.gpe[3]});b.register_write(45024,this,function(c){B(c);this.gpe[0]=c});b.register_write(45025,this,function(c){B(c);this.gpe[1]=c});b.register_write(45026,this,function(c){B(c);this.gpe[2]=c});b.register_write(45027,this,function(c){B(c);this.gpe[3]=c})}\nEa.prototype.timer=function(a){a=this.get_timer(a);var b=0!==((a^this.last_timer)&8388608);this.pm1_enable&1&&b?(this.pm1_status|=1,this.cpu.device_raise_irq(9)):this.cpu.device_lower_irq(9);this.last_timer=a;return 100};\nEa.prototype.get_timer=function(a){a=Math.round(3579.545*a);a===this.timer_last_value?3579.545>this.timer_imprecision_offset&&this.timer_imprecision_offset++:this.timer_last_value+this.timer_imprecision_offset<=a&&(this.timer_imprecision_offset=0,this.timer_last_value=a);return this.timer_last_value+this.timer_imprecision_offset};Ea.prototype.get_state=function(){var a=[];a[0]=this.status;a[1]=this.pm1_status;a[2]=this.pm1_enable;a[3]=this.gpe;return a};\nEa.prototype.set_state=function(a){this.status=a[0];this.pm1_status=a[1];this.pm1_enable=a[2];this.gpe=a[3]};function Fa(a){this.cpu=a;this.timer_divider=this.apic_id=0;this.timer_divider_shift=1;this.timer_current_count=this.timer_initial_count=0;this.next_tick=D.microtick();this.lvt_error=this.lvt_int1=this.lvt_int0=this.lvt_perf_counter=this.lvt_timer=65536;this.icr1=this.icr0=this.tpr=0;this.irr=new Int32Array(8);this.isr=new Int32Array(8);this.tmr=new Int32Array(8);this.spurious_vector=254;this.destination_format=-1;this.read_error=this.error=this.local_destination=0;a.io.mmap_register(4276092928,1048576,\nb=>{B(b>>>0);var c=b&3;return this.read32(b&-4)>>8*c&255},(b,c)=>{B(b);B(c)},b=>this.read32(b),(b,c)=>this.write32(b,c))}\nFa.prototype.read32=function(a){a=a-4276092928|0;switch(a){case 32:return this.apic_id;case 48:return 327700;case 128:return this.tpr;case 208:return this.local_destination;case 224:return this.destination_format;case 240:return this.spurious_vector;case 256:case 272:case 288:case 304:case 320:case 336:case 352:case 368:return a=a-256>>4,B(this.isr[a]>>>0,8),this.isr[a];case 384:case 400:case 416:case 432:case 448:case 464:case 480:case 496:return a=a-384>>4,B(this.tmr[a]>>>0,8),this.tmr[a];case 512:case 528:case 544:case 560:case 576:case 592:case 608:case 624:return a=\na-512>>4,B(this.irr[a]>>>0,8),this.irr[a];case 640:return B(this.read_error>>>0,8),this.read_error;case 768:return this.icr0;case 784:return this.icr1;case 800:return this.lvt_timer;case 832:return this.lvt_perf_counter;case 848:return this.lvt_int0;case 864:return this.lvt_int1;case 880:return this.lvt_error;case 992:return this.timer_divider;case 896:return this.timer_initial_count;case 912:return B(this.timer_current_count>>>0,8),this.timer_current_count;default:return B(a),0}};\nFa.prototype.write32=function(a,b){a=a-4276092928|0;switch(a){case 32:B(b>>>8,8);this.apic_id=b;break;case 48:B(b>>>0,8);break;case 128:this.tpr=b&255;this.check_vector();break;case 176:b=this.highest_isr();-1!==b&&(this.register_clear_bit(this.isr,b),this.register_get_bit(this.tmr,b)&&this.cpu.devices.ioapic.remote_eoi(b),this.check_vector());break;case 208:B(b>>>0,8);this.local_destination=b&4278190080;break;case 224:B(b>>>0,8);this.destination_format=b|16777215;break;case 240:B(b>>>0,8);this.spurious_vector=\nb;break;case 640:B(b>>>0,8);this.read_error=this.error;this.error=0;break;case 768:a=b&255;var c=b>>8&7,d=b>>11&1,e=b>>15&1,g=b>>18&3,f=this.icr1>>>24;B(b,8);B(a,2);this.icr0=b&-4097;0===g?this.route(a,c,e,f,d):1===g?this.deliver(a,0,e):2===g&&this.deliver(a,c,e);break;case 784:B(b>>>0,8);this.icr1=b;break;case 800:B(b>>>0,8);this.lvt_timer=b;break;case 832:B(b>>>0,8);this.lvt_perf_counter=b;break;case 848:B(b>>>0,8);this.lvt_int0=b;break;case 864:B(b>>>0,8);this.lvt_int1=b;break;case 880:B(b>>>0,\n8);this.lvt_error=b;break;case 992:B(b>>>0,8);this.timer_divider=b;b=b&3|(b&8)>>1;this.timer_divider_shift=7===b?0:b+1;break;case 896:B(b>>>0,8);this.timer_initial_count=b>>>0;this.timer_current_count=b>>>0;this.next_tick=D.microtick();this.timer_active=!0;break;case 912:B(b>>>0,8);break;default:B(a),B(b>>>0,8)}};\nFa.prototype.timer=function(a){if(0===this.timer_current_count)return 100;const b=1E6/(1<<this.timer_divider_shift);a=(a-this.next_tick)*b>>>0;this.next_tick+=a/b;this.timer_current_count-=a;0>=this.timer_current_count&&(a=this.lvt_timer&393216,131072===a?(this.timer_current_count%=this.timer_initial_count,0>=this.timer_current_count&&(this.timer_current_count+=this.timer_initial_count),0===(this.lvt_timer&65536)&&this.deliver(this.lvt_timer&255,0,!1)):0===a&&(this.timer_current_count=0,0===(this.lvt_timer&\n65536)&&this.deliver(this.lvt_timer&255,0,!1)));return Math.max(0,this.timer_current_count/b)};Fa.prototype.route=function(a,b,c){this.deliver(a,b,c)};Fa.prototype.deliver=function(a,b,c){5!==b&&4!==b&&(this.register_get_bit(this.irr,a)?B(a,2):(this.register_set_bit(this.irr,a),c?this.register_set_bit(this.tmr,a):this.register_clear_bit(this.tmr,a),this.check_vector()))};Fa.prototype.highest_irr=function(){return this.register_get_highest_bit(this.irr)};Fa.prototype.highest_isr=function(){return this.register_get_highest_bit(this.isr)};\nFa.prototype.check_vector=function(){var a=this.highest_irr();-1!==a&&(this.highest_isr()>=a||(a&240)<=(this.tpr&240)||this.cpu.handle_irqs())};Fa.prototype.acknowledge_irq=function(){var a=this.highest_irr();if(-1===a||this.highest_isr()>=a||(a&240)<=(this.tpr&240))return-1;this.register_clear_bit(this.irr,a);this.register_set_bit(this.isr,a);this.check_vector();return a};\nFa.prototype.get_state=function(){var a=[];a[0]=this.apic_id;a[1]=this.timer_divider;a[2]=this.timer_divider_shift;a[3]=this.timer_initial_count;a[4]=this.timer_current_count;a[5]=this.next_tick;a[6]=this.lvt_timer;a[7]=this.lvt_perf_counter;a[8]=this.lvt_int0;a[9]=this.lvt_int1;a[10]=this.lvt_error;a[11]=this.tpr;a[12]=this.icr0;a[13]=this.icr1;a[14]=this.irr;a[15]=this.isr;a[16]=this.tmr;a[17]=this.spurious_vector;a[18]=this.destination_format;a[19]=this.local_destination;a[20]=this.error;a[21]=\nthis.read_error;return a};\nFa.prototype.set_state=function(a){this.apic_id=a[0];this.timer_divider=a[1];this.timer_divider_shift=a[2];this.timer_initial_count=a[3];this.timer_current_count=a[4];this.next_tick=a[5];this.lvt_timer=a[6];this.lvt_perf_counter=a[7];this.lvt_int0=a[8];this.lvt_int1=a[9];this.lvt_error=a[10];this.tpr=a[11];this.icr0=a[12];this.icr1=a[13];this.irr=a[14];this.isr=a[15];this.tmr=a[16];this.spurious_vector=a[17];this.destination_format=a[18];this.local_destination=a[19];this.error=a[20];this.read_error=\na[21]};Fa.prototype.register_get_bit=function(a,b){return a[b>>5]>>(b&31)&1};Fa.prototype.register_set_bit=function(a,b){a[b>>5]|=1<<(b&31)};Fa.prototype.register_clear_bit=function(a,b){a[b>>5]&=~(1<<(b&31))};Fa.prototype.register_get_highest_bit=function(a){for(var b=7;0<=b;b--){var c=a[b];if(c)return k.int_log2(c>>>0)|b<<5}return-1};function Ga(a){this.cpu=a;this.ioredtbl_config=new Int32Array(24);this.ioredtbl_destination=new Int32Array(24);for(var b=0;b<this.ioredtbl_config.length;b++)this.ioredtbl_config[b]=65536;this.irq_value=this.irr=this.ioapic_id=this.ioregsel=0;a.io.mmap_register(4273995776,131072,c=>{c=c-4273995776|0;if(16<=c&&20>c)return c-=16,B(this.ioregsel),this.read(this.ioregsel)>>8*c&255;B(c>>>0);return 0},c=>{B(c>>>0)},c=>{c=c-4273995776|0;if(0===c)return this.ioregsel;if(16===c)return this.read(this.ioregsel);\nB(c>>>0);return 0},(c,d)=>{c=c-4273995776|0;0===c?this.ioregsel=d:16===c?this.write(this.ioregsel,d):(B(c>>>0),B(d>>>0,8))})}Ga.prototype.remote_eoi=function(a){for(var b=0;24>b;b++){var c=this.ioredtbl_config[b];(c&255)===a&&c&16384&&(B(b),this.ioredtbl_config[b]&=-16385,this.check_irq(b))}};\nGa.prototype.check_irq=function(a){var b=1<<a;if(0!==(this.irr&b)){var c=this.ioredtbl_config[a];if(0===(c&65536)){var d=c>>8&7,e=this.ioredtbl_destination[a]>>>24;if(0===(c&32768))this.irr&=~b;else if(this.ioredtbl_config[a]|=16384,c&16384)return;0!==d&&1!==d||this.cpu.devices.apic.route(c&255,d,32768===(c&32768),e,c>>11&1);this.ioredtbl_config[a]&=-4097}}};\nGa.prototype.set_irq=function(a){if(!(24<=a)){var b=1<<a;0===(this.irq_value&b)&&(this.irq_value|=b,65536!==(this.ioredtbl_config[a]&98304)&&(this.irr|=b,this.check_irq(a)))}};Ga.prototype.clear_irq=function(a){if(!(24<=a)){var b=1<<a;(this.irq_value&b)===b&&(this.irq_value&=~b,this.ioredtbl_config[a]&32768&&(this.irr&=~b))}};\nGa.prototype.read=function(a){if(0===a)return this.ioapic_id<<24;if(1===a)return 1507345;if(2===a)return this.ioapic_id<<24;if(16<=a&&64>a){var b=a-16>>1;a=a&1?this.ioredtbl_destination[b]:this.ioredtbl_config[b];B(b);B(a,8);return a}B(a);return 0};\nGa.prototype.write=function(a,b){if(0===a)this.ioapic_id=b>>>24&15;else if(1!==a&&2!==a)if(16<=a&&64>a){var c=a-16>>1;a&1?(this.ioredtbl_destination[c]=b&4278190080,B(b>>>0,8),B(c),B(b>>>24,2)):(this.ioredtbl_config[c]=b&110591|this.ioredtbl_config[c]&-110592,a=b&255,B(b>>>0,8),B(c),B(a,2),this.check_irq(c))}else B(a),B(b>>>0,8)};\nGa.prototype.get_state=function(){var a=[];a[0]=this.ioredtbl_config;a[1]=this.ioredtbl_destination;a[2]=this.ioregsel;a[3]=this.ioapic_id;a[4]=this.irr;a[5]=this.irq_value;return a};Ga.prototype.set_state=function(a){this.ioredtbl_config=a[0];this.ioredtbl_destination=a[1];this.ioregsel=a[2];this.ioapic_id=a[3];this.irr=a[4];this.irq_value=a[5]};function Ha(a){this.message=a}Ha.prototype=Error();const Ka={Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array};\nfunction La(a,b){if(\"object\"!==typeof a||null===a)return a;if(Array.isArray(a))return a.map(e=>La(e,b));a.constructor===Object&&console.log(a);if(a.BYTES_PER_ELEMENT){var c=new Uint8Array(a.buffer,a.byteOffset,a.length*a.BYTES_PER_ELEMENT);return{__state_type__:a.constructor.name.replace(\"bound \",\"\"),buffer_id:b.push(c)-1}}a=a.get_state();c=[];for(var d=0;d<a.length;d++)c[d]=La(a[d],b);return c}\nfunction Ma(a,b){if(\"object\"!==typeof a||null===a)return a;if(Array.isArray(a)){for(let c=0;c<a.length;c++)a[c]=Ma(a[c],b);return a}return new Ka[a.__state_type__](b[a.buffer_id])}\nE.prototype.save_state=function(){for(var a=[],b=La(this,a),c=[],d=0,e=0;e<a.length;e++){var g=a[e].byteLength;c[e]={offset:d,length:g};d+=g;d=d+3&-4}e=JSON.stringify({buffer_infos:c,state:b});e=(new TextEncoder).encode(e);b=16+e.length;b=b+3&-4;g=b+d;d=new ArrayBuffer(g);var f=new Int32Array(d,0,4);(new Uint8Array(d,16,e.length)).set(e);b=new Uint8Array(d,b);f[0]=-2039052682;f[1]=6;f[2]=g;f[3]=e.length;for(e=0;e<a.length;e++)b.set(a[e],c[e].offset);return d};\nE.prototype.restore_state=function(a){function b(p,q){const r=p.length;if(16>r)throw new Ha(\"Invalid length: \"+r);p=new Int32Array(p.buffer,p.byteOffset,4);if(-2039052682!==p[0])throw new Ha(\"Invalid header: \"+B(p[0]>>>0));if(6!==p[1])throw new Ha(\"Version mismatch: dump=\"+p[1]+\" we=6\");if(q&&p[2]!==r)throw new Ha(\"Length doesn't match header: real=\"+r+\" header=\"+p[2]);return p[3]}function c(p){p=(new TextDecoder).decode(p);return JSON.parse(p)}a=new Uint8Array(a);if(4247762216===(new Uint32Array(a.buffer,\n0,1))[0]){var d=this.zstd_create_ctx(a.length);(new Uint8Array(this.wasm_memory.buffer,this.zstd_get_src_ptr(d),a.length)).set(a);var e=this.zstd_read(d,16),g=new Uint8Array(this.wasm_memory.buffer,e,16),f=b(g,!1);this.zstd_read_free(e,16);e=this.zstd_read(d,f);g=new Uint8Array(this.wasm_memory.buffer,e,f);g=c(g);this.zstd_read_free(e,f);e=g.state;var h=g.buffer_infos;g=[];f=16+f;for(var l of h){h=(f+3&-4)-f;if(1048576<l.length){var m=this.zstd_read(d,h);this.zstd_read_free(m,h);m=new Uint8Array(l.length);\ng.push(m.buffer);for(var n=0;n<l.length;){const p=Math.min(l.length-n,1048576),q=this.zstd_read(d,p);m.set(new Uint8Array(this.wasm_memory.buffer,q,p),n);this.zstd_read_free(q,p);n+=p}}else m=this.zstd_read(d,h+l.length),n=m+h,g.push(this.wasm_memory.buffer.slice(n,n+l.length)),this.zstd_read_free(m,h+l.length);f+=h+l.length}e=Ma(e,g);this.set_state(e);this.zstd_free_ctx(d)}else{d=b(a,!0);if(0>d||d+12>=a.length)throw new Ha(\"Invalid info block length: \"+d);l=a.subarray(16,16+d);e=c(l);l=e.state;e=\ne.buffer_infos;let p=16+d;p=p+3&-4;d=e.map(q=>{const r=p+q.offset;return a.buffer.slice(r,r+q.length)});l=Ma(l,d);this.set_state(l)}};function Na(a,b,c){a[0]===b[0]&&a[1]===b[1]&&a[2]===b[2]&&a[3]===b[3]&&a[4]===b[4]&&a[5]===b[5]&&(a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3],a[4]=c[4],a[5]=c[5]);a[6]===b[0]&&a[7]===b[1]&&a[8]===b[2]&&a[9]===b[3]&&a[10]===b[4]&&a[11]===b[5]&&(a[6]=c[0],a[7]=c[1],a[8]=c[2],a[9]=c[3],a[10]=c[4],a[11]=c[5]);var d=a[12]<<8|a[13];if(2048===d){if(a=a.subarray(14),4===a[0]>>4&&17===a[9]){a=a.subarray(20);d=a[0]<<8|a[1];var e=a[2]<<8|a[3];B(a[6]<<8|a[7],4);if(67===d||67===e)if(d=a.subarray(8),e=d[236]<<24|d[237]<<\n16|d[238]<<8|d[239],1669485411!==e)B(e,8);else for(d[28]===b[0]&&d[29]===b[1]&&d[30]===b[2]&&d[31]===b[3]&&d[32]===b[4]&&d[33]===b[5]&&(d[28]=c[0],d[29]=c[1],d[30]=c[2],d[31]=c[3],d[32]=c[4],d[33]=c[5],a[6]=a[7]=0),e=240;e<d.length;){const g=d[e++];if(255===g)break;const f=d[e++];61===g&&1===d[e+0]&&d[e+1]===b[0]&&d[e+2]===b[1]&&d[e+3]===b[2]&&d[e+4]===b[3]&&d[e+5]===b[4]&&d[e+6]===b[5]&&(d[e+1]=c[0],d[e+2]=c[1],d[e+3]=c[2],d[e+4]=c[3],d[e+5]=c[4],d[e+6]=c[5],a[6]=a[7]=0);e+=f}}}else 2054===d&&(a=\na.subarray(14),Pa(a.subarray(8,14)),Pa(a.subarray(18,24)),a[8]===b[0]&&a[9]===b[1]&&a[10]===b[2]&&a[11]===b[3]&&a[12]===b[4]&&a[13]===b[5]&&(a[8]=c[0],a[9]=c[1],a[10]=c[2],a[11]=c[3],a[12]=c[4],a[13]=c[5]))}function Pa(a){return[a[0].toString(16).padStart(2,\"0\"),a[1].toString(16).padStart(2,\"0\"),a[2].toString(16).padStart(2,\"0\"),a[3].toString(16).padStart(2,\"0\"),a[4].toString(16).padStart(2,\"0\"),a[5].toString(16).padStart(2,\"0\")].join(\":\")}\nfunction Qa(a,b,c,d,e){this.cpu=a;this.pci=a.devices.pci;this.id=e||0;this.preserve_mac_from_state_image=c;this.mac_address_translation=d;this.bus=b;this.bus.register(\"net\"+this.id+\"-receive\",function(g){this.receive(g)},this);this.port=768+256*this.id;this.name=\"ne2k\";this.pci_space=[236,16,41,128,3,1,0,0,0,0,0,2,0,0,0,0,this.port&255|1,this.port>>8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,0,17,0,0,184,254,0,0,0,0,0,0,0,0,0,1,0,0];this.pci_id=(0===this.id?5:7+this.id)<<3;this.pci_bars=\n[{size:32}];this.imr=this.isr=0;this.cr=1;this.tpsr=this.tcnt=this.rcnt=this.dcfg=0;this.memory=new Uint8Array(32768);this.txcr=this.rxcr=0;this.tsr=1;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send(\"net\"+this.id+\"-mac\",Pa(this.mac));this.mar=Uint8Array.of(255,255,255,255,255,255,255,255);this.mac_address_in_state=null;for(b=0;6>b;b++)this.memory[b<<1]=this.memory[b<<1|1]=this.mac[b];this.memory[28]=this.memory[29]=87;this.memory[30]=this.memory[31]=\n87;ta(\"Mac: \"+Pa(this.mac),1048576);this.rsar=0;this.pstart=64;this.pstop=128;this.boundary=this.curpg=76;b=a.io;b.register_read(this.port|0,this,function(){return this.cr});b.register_write(this.port|0,this,function(g){this.cr=g;B(g,2);B(this.txcr,2);this.cr&1||(g&24&&0===this.rcnt&&this.do_interrupt(64),g&4&&(g=this.tpsr<<8,g=this.memory.subarray(g,g+this.tcnt),this.mac_address_in_state&&(g=new Uint8Array(g),Na(g,this.mac_address_in_state,this.mac)),this.bus.send(\"net\"+this.id+\"-send\",g),this.bus.send(\"eth-transmit-end\",\n[g.length]),this.cr&=-5,this.do_interrupt(2),B(g.byteLength)))});b.register_read(this.port|13,this,function(){return 1===this.get_page()?this.mar[5]:0});b.register_read(this.port|14,this,function(){return 1===this.get_page()?this.mar[6]:0},function(){this.get_page();return 0});b.register_read(this.port|15,this,function(){return 1===this.get_page()?this.mar[7]:0});b.register_read(this.port|31,this,function(){this.get_page();this.do_interrupt(128);return 0});b.register_write(this.port|31,this,function(g){this.get_page();\nB(g,2)});b.register_read(this.port|1,this,function(){var g=this.get_page();return 0===g?this.pstart:1===g?this.mac[0]:2===g?this.pstart:0});b.register_write(this.port|1,this,function(g){var f=this.get_page();0===f?(B(g,2),this.pstart=g):1===f?(B(g),this.mac[0]=g):B(g)});b.register_read(this.port|2,this,function(){var g=this.get_page();return 0===g?this.pstop:1===g?this.mac[1]:2===g?this.pstop:0});b.register_write(this.port|2,this,function(g){var f=this.get_page();0===f?(B(g,2),g>this.memory.length>>\n8&&(g=this.memory.length>>8,B(g)),this.pstop=g):1===f?(B(g),this.mac[1]=g):B(g)});b.register_read(this.port|7,this,function(){var g=this.get_page();return 0===g?(B(this.isr,2),this.isr):1===g?(B(this.curpg,2),this.curpg):0});b.register_write(this.port|7,this,function(g){var f=this.get_page();0===f?(B(g,2),this.isr&=~g,this.update_irq()):1===f&&(B(g,2),this.curpg=g)});b.register_write(this.port|13,this,function(g){0===this.get_page()&&(this.txcr=g);B(g,2)});b.register_write(this.port|14,this,function(g){0===\nthis.get_page()?(B(g,2),this.dcfg=g):B(g,2)});b.register_read(this.port|10,this,function(){var g=this.get_page();return 0===g?80:1===g?this.mar[2]:0});b.register_write(this.port|10,this,function(g){0===this.get_page()?(B(g,2),this.rcnt=this.rcnt&65280|g&255):B(g,2)});b.register_read(this.port|11,this,function(){var g=this.get_page();return 0===g?67:1===g?this.mar[3]:0});b.register_write(this.port|11,this,function(g){0===this.get_page()?(B(g,2),this.rcnt=this.rcnt&255|g<<8&65280):B(g,2)});b.register_read(this.port|\n8,this,function(){var g=this.get_page();return 0===g?this.rsar&255:1===g?this.mar[0]:0});b.register_write(this.port|8,this,function(g){0===this.get_page()?(B(g,2),this.rsar=this.rsar&65280|g&255):B(g,2)});b.register_read(this.port|9,this,function(){var g=this.get_page();return 0===g?this.rsar>>8&255:1===g?this.mar[1]:0});b.register_write(this.port|9,this,function(g){0===this.get_page()?(B(g,2),this.rsar=this.rsar&255|g<<8&65280):B(g,2)});b.register_write(this.port|15,this,function(g){0===this.get_page()?\n(B(g,2),B(this.isr,2),this.imr=g,this.update_irq()):B(g,2)});b.register_read(this.port|3,this,function(){var g=this.get_page();return 0===g?(B(this.boundary,2),this.boundary):1===g?this.mac[2]:0});b.register_write(this.port|3,this,function(g){var f=this.get_page();0===f?(B(g,2),this.boundary=g):1===f?(B(g),this.mac[2]=g):B(g)});b.register_read(this.port|4,this,function(){var g=this.get_page();return 0===g?this.tsr:1===g?this.mac[3]:0});b.register_write(this.port|4,this,function(g){var f=this.get_page();\n0===f?(B(g,2),this.tpsr=g):1===f?(B(g),this.mac[3]=g):B(g)});b.register_read(this.port|5,this,function(){var g=this.get_page();return 0===g?0:1===g?this.mac[4]:0});b.register_write(this.port|5,this,function(g){var f=this.get_page();0===f?(B(g,2),this.tcnt=this.tcnt&-256|g):1===f?(B(g),this.mac[4]=g):B(g)});b.register_read(this.port|6,this,function(){var g=this.get_page();return 0===g?0:1===g?this.mac[5]:0});b.register_write(this.port|6,this,function(g){var f=this.get_page();0===f?(B(g,2),this.tcnt=\nthis.tcnt&255|g<<8):1===f?(B(g),this.mac[5]=g):B(g)});b.register_read(this.port|12,this,function(){var g=this.get_page();return 0===g?9:1===g?this.mar[4]:0});b.register_write(this.port|12,this,function(g){0===this.get_page()?(B(g,2),this.rxcr=g):B(g)});b.register_read(this.port|16,this,this.data_port_read8,this.data_port_read16,this.data_port_read32);b.register_write(this.port|16,this,this.data_port_write16,this.data_port_write16,this.data_port_write32);a.devices.pci.register_device(this)}\nQa.prototype.get_state=function(){var a=[];a[0]=this.isr;a[1]=this.imr;a[2]=this.cr;a[3]=this.dcfg;a[4]=this.rcnt;a[5]=this.tcnt;a[6]=this.tpsr;a[7]=this.rsar;a[8]=this.pstart;a[9]=this.curpg;a[10]=this.boundary;a[11]=this.pstop;a[12]=this.rxcr;a[13]=this.txcr;a[14]=this.tsr;a[15]=this.mac;a[16]=this.memory;return a};\nQa.prototype.set_state=function(a){this.isr=a[0];this.imr=a[1];this.cr=a[2];this.dcfg=a[3];this.rcnt=a[4];this.tcnt=a[5];this.tpsr=a[6];this.rsar=a[7];this.pstart=a[8];this.curpg=a[9];this.boundary=a[10];this.pstop=a[11];this.rxcr=a[12];this.txcr=a[13];this.tsr=a[14];this.preserve_mac_from_state_image?(this.mac=a[15],this.memory=a[16]):this.mac_address_translation&&(this.mac_address_in_state=a[15],this.memory=a[16],Pa(this.mac_address_in_state),Pa(this.mac));this.bus.send(\"net\"+this.id+\"-mac\",Pa(this.mac))};\nQa.prototype.do_interrupt=function(a){B(a,2);this.isr|=a;this.update_irq()};Qa.prototype.update_irq=function(){this.imr&this.isr?this.pci.raise_irq(this.pci_id):this.pci.lower_irq(this.pci_id)};Qa.prototype.data_port_write=function(a){if(16>=this.rsar||16384<=this.rsar&&32768>this.rsar)this.memory[this.rsar]=a;this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64)};\nQa.prototype.data_port_write16=function(a){this.data_port_write(a);this.dcfg&1&&this.data_port_write(a>>8)};Qa.prototype.data_port_write32=function(a){this.data_port_write(a);this.data_port_write(a>>8);this.data_port_write(a>>16);this.data_port_write(a>>24)};Qa.prototype.data_port_read=function(){let a=0;32768>this.rsar&&(a=this.memory[this.rsar]);this.rsar++;this.rcnt--;this.rsar>=this.pstop<<8&&(this.rsar+=this.pstart-this.pstop<<8);0===this.rcnt&&this.do_interrupt(64);return a};\nQa.prototype.data_port_read8=function(){return this.data_port_read16()&255};Qa.prototype.data_port_read16=function(){return this.dcfg&1?this.data_port_read()|this.data_port_read()<<8:this.data_port_read()};Qa.prototype.data_port_read32=function(){return this.data_port_read()|this.data_port_read()<<8|this.data_port_read()<<16|this.data_port_read()<<24};\nQa.prototype.receive=function(a){if(!(this.cr&1)&&(this.bus.send(\"eth-receive-end\",[a.length]),this.rxcr&16||this.rxcr&4&&255===a[0]&&255===a[1]&&255===a[2]&&255===a[3]&&255===a[4]&&255===a[5]||!(this.rxcr&8&&1===(a[0]&1)||a[0]!==this.mac[0]||a[1]!==this.mac[1]||a[2]!==this.mac[2]||a[3]!==this.mac[3]||a[4]!==this.mac[4]||a[5]!==this.mac[5]))){this.mac_address_in_state&&(a=new Uint8Array(a),Na(a,this.mac,this.mac_address_in_state));var b=this.curpg<<8,c=Math.max(60,a.length)+4,d=b+4,e=this.curpg+1+\n(c>>8),g=b+c,f=1+(c>>8),h=this.boundary>this.curpg?this.boundary-this.curpg:this.pstop-this.curpg+this.boundary-this.pstart;h<f&&0!==this.boundary?(B(this.pstart),B(this.pstop),B(this.curpg),B(f),B(this.boundary),B(h)):(g>this.pstop<<8?(g=(this.pstop<<8)-d,this.memory.set(a.subarray(0,g),d),this.memory.set(a.subarray(g),this.pstart<<8),B(g)):(this.memory.set(a,d),60>a.length&&this.memory.fill(0,d+a.length,d+60)),e>=this.pstop&&(e+=this.pstart-this.pstop),this.memory[b]=1,this.memory[b+1]=e,this.memory[b+\n2]=c,this.memory[b+3]=c>>8,this.curpg=e,B(b),B(c),B(e),this.do_interrupt(1))}};Qa.prototype.get_page=function(){return this.cr>>6&3};var Ra=new Uint8Array(256),Sa=[],Ta=[],Ua=[],Va=new Uint8Array(256),Wa=[];\nfunction O(a,b){this.cpu=a;this.bus=b;this.write_buffer=new la(64);this.read_buffer=new la(64);this.mixer_current_address=this.command_size=this.command=this.read_buffer_lastvalue=0;this.mixer_registers=new Uint8Array(256);this.mixer_reset();this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers=[new oa(65536),new oa(65536)];this.dma=a.devices.dma;this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=\nthis.dma_bytes_count=this.dma_sample_count=0;this.dma_channel_8bit=1;this.dma_channel_16bit=5;this.dma_autoinit=!1;this.dma_buffer=new ArrayBuffer(65536);this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_uint8=new Uint8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=new Uint16Array(this.dma_buffer);this.dma_syncbuffer=new k.SyncBuffer(this.dma_buffer);this.dma_paused=this.dma_waiting_transfer=!1;this.sampling_rate=22050;b.send(\"dac-tell-sampling-rate\",\nthis.sampling_rate);this.bytes_per_sample=1;this.e2_value=170;this.e2_count=0;this.asp_registers=new Uint8Array(256);this.mpu_read_buffer=new la(64);this.fm_current_address1=this.fm_current_address0=this.mpu_read_buffer_lastvalue=0;this.fm_waveform_select_enable=!1;this.irq=5;this.irq_triggered=new Uint8Array(16);a.io.register_read_consecutive(544,this,this.port2x0_read,this.port2x1_read,this.port2x2_read,this.port2x3_read);a.io.register_read_consecutive(904,this,this.port2x0_read,this.port2x1_read);\na.io.register_read_consecutive(548,this,this.port2x4_read,this.port2x5_read);a.io.register_read(550,this,this.port2x6_read);a.io.register_read(551,this,this.port2x7_read);a.io.register_read(552,this,this.port2x8_read);a.io.register_read(553,this,this.port2x9_read);a.io.register_read(554,this,this.port2xA_read);a.io.register_read(555,this,this.port2xB_read);a.io.register_read(556,this,this.port2xC_read);a.io.register_read(557,this,this.port2xD_read);a.io.register_read_consecutive(558,this,this.port2xE_read,\nthis.port2xF_read);a.io.register_write_consecutive(544,this,this.port2x0_write,this.port2x1_write,this.port2x2_write,this.port2x3_write);a.io.register_write_consecutive(904,this,this.port2x0_write,this.port2x1_write);a.io.register_write_consecutive(548,this,this.port2x4_write,this.port2x5_write);a.io.register_write(550,this,this.port2x6_write);a.io.register_write(551,this,this.port2x7_write);a.io.register_write_consecutive(552,this,this.port2x8_write,this.port2x9_write);a.io.register_write(554,this,\nthis.port2xA_write);a.io.register_write(555,this,this.port2xB_write);a.io.register_write(556,this,this.port2xC_write);a.io.register_write(557,this,this.port2xD_write);a.io.register_write(558,this,this.port2xE_write);a.io.register_write(559,this,this.port2xF_write);a.io.register_read_consecutive(816,this,this.port3x0_read,this.port3x1_read);a.io.register_write_consecutive(816,this,this.port3x0_write,this.port3x1_write);this.dma.on_unmask(this.dma_on_unmask,this);b.register(\"dac-request-data\",function(){this.dac_handle_request()},\nthis);b.register(\"speaker-has-initialized\",function(){this.mixer_reset()},this);b.send(\"speaker-confirm-initialized\");this.dsp_reset()}\nO.prototype.dsp_reset=function(){this.write_buffer.clear();this.read_buffer.clear();this.command_size=this.command=0;this.dummy_speaker_enabled=!1;this.test_register=0;this.dsp_signed=this.dsp_16bit=this.dsp_stereo=this.dsp_highspeed=!1;this.dac_buffers[0].clear();this.dac_buffers[1].clear();this.dma_channel=this.dma_irq=this.dma_bytes_block=this.dma_bytes_left=this.dma_bytes_count=this.dma_sample_count=0;this.dma_autoinit=!1;this.dma_buffer_uint8.fill(0);this.dma_paused=this.dma_waiting_transfer=\n!1;this.e2_value=170;this.e2_count=0;this.sampling_rate=22050;this.bytes_per_sample=1;this.lower_irq(1);this.irq_triggered.fill(0);this.asp_registers.fill(0);this.asp_registers[5]=1;this.asp_registers[9]=248};\nO.prototype.get_state=function(){var a=[];a[2]=this.read_buffer_lastvalue;a[3]=this.command;a[4]=this.command_size;a[5]=this.mixer_current_address;a[6]=this.mixer_registers;a[7]=this.dummy_speaker_enabled;a[8]=this.test_register;a[9]=this.dsp_highspeed;a[10]=this.dsp_stereo;a[11]=this.dsp_16bit;a[12]=this.dsp_signed;a[15]=this.dma_sample_count;a[16]=this.dma_bytes_count;a[17]=this.dma_bytes_left;a[18]=this.dma_bytes_block;a[19]=this.dma_irq;a[20]=this.dma_channel;a[21]=this.dma_channel_8bit;a[22]=\nthis.dma_channel_16bit;a[23]=this.dma_autoinit;a[24]=this.dma_buffer_uint8;a[25]=this.dma_waiting_transfer;a[26]=this.dma_paused;a[27]=this.sampling_rate;a[28]=this.bytes_per_sample;a[29]=this.e2_value;a[30]=this.e2_count;a[31]=this.asp_registers;a[33]=this.mpu_read_buffer_last_value;a[34]=this.irq;a[35]=this.irq_triggered;return a};\nO.prototype.set_state=function(a){this.read_buffer_lastvalue=a[2];this.command=a[3];this.command_size=a[4];this.mixer_current_address=a[5];this.mixer_registers=a[6];this.mixer_full_update();this.dummy_speaker_enabled=a[7];this.test_register=a[8];this.dsp_highspeed=a[9];this.dsp_stereo=a[10];this.dsp_16bit=a[11];this.dsp_signed=a[12];this.dma_sample_count=a[15];this.dma_bytes_count=a[16];this.dma_bytes_left=a[17];this.dma_bytes_block=a[18];this.dma_irq=a[19];this.dma_channel=a[20];this.dma_channel_8bit=\na[21];this.dma_channel_16bit=a[22];this.dma_autoinit=a[23];this.dma_buffer_uint8=a[24];this.dma_waiting_transfer=a[25];this.dma_paused=a[26];this.sampling_rate=a[27];this.bytes_per_sample=a[28];this.e2_value=a[29];this.e2_count=a[30];this.asp_registers=a[31];this.mpu_read_buffer_last_value=a[33];this.irq=a[34];this.irq_triggered=a[35];this.dma_buffer=this.dma_buffer_uint8.buffer;this.dma_buffer_int8=new Int8Array(this.dma_buffer);this.dma_buffer_int16=new Int16Array(this.dma_buffer);this.dma_buffer_uint16=\nnew Uint16Array(this.dma_buffer);this.dma_syncbuffer=new k.SyncBuffer(this.dma_buffer);this.dma_paused?this.bus.send(\"dac-disable\"):this.bus.send(\"dac-enable\")};O.prototype.port2x0_read=function(){return 255};O.prototype.port2x1_read=function(){return 255};O.prototype.port2x2_read=function(){return 255};O.prototype.port2x3_read=function(){return 255};O.prototype.port2x4_read=function(){return this.mixer_current_address};O.prototype.port2x5_read=function(){return this.mixer_read(this.mixer_current_address)};\nO.prototype.port2x6_read=function(){return 255};O.prototype.port2x7_read=function(){return 255};O.prototype.port2x8_read=function(){return 255};O.prototype.port2x9_read=function(){return 255};O.prototype.port2xA_read=function(){this.read_buffer.length&&(this.read_buffer_lastvalue=this.read_buffer.shift());B(this.read_buffer_lastvalue);String.fromCharCode(this.read_buffer_lastvalue);return this.read_buffer_lastvalue};O.prototype.port2xB_read=function(){return 255};O.prototype.port2xC_read=function(){return 127};\nO.prototype.port2xD_read=function(){return 255};O.prototype.port2xE_read=function(){this.irq_triggered[1]&&this.lower_irq(1);return(this.read_buffer.length&&!this.dsp_highspeed)<<7|127};O.prototype.port2xF_read=function(){this.lower_irq(2);return 0};O.prototype.port2x0_write=function(a){B(a);this.fm_current_address0=0};O.prototype.port2x1_write=function(a){B(a);var b=Wa[this.fm_current_address0];b||(b=this.fm_default_write);b.call(this,a,0,this.fm_current_address0)};\nO.prototype.port2x2_write=function(a){B(a);this.fm_current_address1=0};O.prototype.port2x3_write=function(a){B(a);var b=Wa[this.fm_current_address1];b||(b=this.fm_default_write);b.call(this,a,1,this.fm_current_address1)};O.prototype.port2x4_write=function(a){B(a);this.mixer_current_address=a};O.prototype.port2x5_write=function(a){B(a);this.mixer_write(this.mixer_current_address,a)};\nO.prototype.port2x6_write=function(a){B(a);this.dsp_highspeed?this.dsp_highspeed=!1:a&&this.dsp_reset();this.read_buffer.clear();this.read_buffer.push(170)};O.prototype.port2x7_write=function(){};O.prototype.port2x8_write=function(){};O.prototype.port2x9_write=function(){};O.prototype.port2xA_write=function(){};O.prototype.port2xB_write=function(){};\nO.prototype.port2xC_write=function(a){0===this.command?(B(a),this.command=a,this.write_buffer.clear(),this.command_size=Ra[a]):(B(a),this.write_buffer.push(a));this.write_buffer.length>=this.command_size&&this.command_do()};O.prototype.port2xD_write=function(){};O.prototype.port2xE_write=function(){};O.prototype.port2xF_write=function(){};\nO.prototype.port3x0_read=function(){this.mpu_read_buffer.length&&(this.mpu_read_buffer_lastvalue=this.mpu_read_buffer.shift());B(this.mpu_read_buffer_lastvalue);return this.mpu_read_buffer_lastvalue};O.prototype.port3x0_write=function(a){B(a)};O.prototype.port3x1_read=function(){return 0|128*!this.mpu_read_buffer.length};O.prototype.port3x1_write=function(a){B(a);255===a&&(this.mpu_read_buffer.clear(),this.mpu_read_buffer.push(254))};\nO.prototype.command_do=function(){var a=Sa[this.command];a||(a=this.dsp_default_handler);a.call(this);this.command_size=this.command=0;this.write_buffer.clear()};O.prototype.dsp_default_handler=function(){B(this.command)};function U(a,b,c){c||(c=O.prototype.dsp_default_handler);for(var d=0;d<a.length;d++)Ra[a[d]]=b,Sa[a[d]]=c}function Xa(a){for(var b=[],c=0;16>c;c++)b.push(a+c);return b}U([14],2,function(){this.asp_registers[this.write_buffer.shift()]=this.write_buffer.shift()});\nU([15],1,function(){this.read_buffer.clear();this.read_buffer.push(this.asp_registers[this.write_buffer.shift()])});U([16],1,function(){var a=this.write_buffer.shift();a=Ya(a/127.5+-1,-1,1);this.dac_buffers[0].push(a);this.dac_buffers[1].push(a);this.bus.send(\"dac-enable\")});U([20,21],2,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=this.dma_autoinit=!1;this.dma_transfer_size_set();this.dma_transfer_start()});U([22],2);U([23],2);\nU([28],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_highspeed=this.dsp_16bit=this.dsp_signed=!1;this.dma_transfer_start()});U([31],0);U([32],0,function(){this.read_buffer.clear();this.read_buffer.push(127)});U([36],2);U([44],0);U([48],0);U([49],0);U([52],0);U([53],0);U([54],0);U([55],0);U([56],0);U([64],1,function(){this.sampling_rate_change(1E6/(256-this.write_buffer.shift())/this.get_channel_count())});\nU([65,66],2,function(){this.sampling_rate_change(this.write_buffer.shift()<<8|this.write_buffer.shift())});U([72],2,function(){this.dma_transfer_size_set()});U([116],2);U([117],2);U([118],2);U([119],2);U([125],0);U([127],0);U([128],2);U([144],0,function(){this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!0;this.dsp_signed=!1;this.dsp_highspeed=!0;this.dsp_16bit=!1;this.dma_transfer_start()});U([145],0);U([152],0);U([153],0);U([160],0);U([168],0);\nU(Xa(176),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=2;this.dma_channel=this.dma_channel_16bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!0;this.dma_transfer_size_set();this.dma_transfer_start()}});\nU(Xa(192),3,function(){if(this.command&8)this.dsp_default_handler();else{var a=this.write_buffer.shift();this.dma_irq=1;this.dma_channel=this.dma_channel_8bit;this.dma_autoinit=!!(this.command&4);this.dsp_signed=!!(a&16);this.dsp_stereo=!!(a&32);this.dsp_16bit=!1;this.dma_transfer_size_set();this.dma_transfer_start()}});U([208],0,function(){this.dma_paused=!0;this.bus.send(\"dac-disable\")});U([209],0,function(){this.dummy_speaker_enabled=!0});U([211],0,function(){this.dummy_speaker_enabled=!1});\nU([212],0,function(){this.dma_paused=!1;this.bus.send(\"dac-enable\")});U([213],0,function(){this.dma_paused=!0;this.bus.send(\"dac-disable\")});U([214],0,function(){this.dma_paused=!1;this.bus.send(\"dac-enable\")});U([216],0,function(){this.read_buffer.clear();this.read_buffer.push(255*this.dummy_speaker_enabled)});U([217,218],0,function(){this.dma_autoinit=!1});U([224],1,function(){this.read_buffer.clear();this.read_buffer.push(~this.write_buffer.shift())});\nU([225],0,function(){this.read_buffer.clear();this.read_buffer.push(4);this.read_buffer.push(5)});U([226],1);U([227],0,function(){this.read_buffer.clear();for(var a=0;44>a;a++)this.read_buffer.push(\"COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.\".charCodeAt(a));this.read_buffer.push(0)});U([228],1,function(){this.test_register=this.write_buffer.shift()});U([232],0,function(){this.read_buffer.clear();this.read_buffer.push(this.test_register)});U([242,243],0,function(){this.raise_irq()});var Za=new Uint8Array(256);\nZa[14]=255;Za[15]=7;Za[55]=56;U([249],1,function(){var a=this.write_buffer.shift();this.read_buffer.clear();this.read_buffer.push(Za[a])});O.prototype.mixer_read=function(a){var b=Ta[a];b?b=b.call(this):(b=this.mixer_registers[a],B(a),B(b));return b};O.prototype.mixer_write=function(a,b){var c=Ua[a];c?c.call(this,b):(B(a),B(b))};O.prototype.mixer_default_read=function(){B(this.mixer_current_address);return this.mixer_registers[this.mixer_current_address]};\nO.prototype.mixer_default_write=function(a){B(this.mixer_current_address);B(a);this.mixer_registers[this.mixer_current_address]=a};\nO.prototype.mixer_reset=function(){this.mixer_registers[4]=204;this.mixer_registers[34]=204;this.mixer_registers[38]=204;this.mixer_registers[40]=0;this.mixer_registers[46]=0;this.mixer_registers[10]=0;this.mixer_registers[48]=192;this.mixer_registers[49]=192;this.mixer_registers[50]=192;this.mixer_registers[51]=192;this.mixer_registers[52]=192;this.mixer_registers[53]=192;this.mixer_registers[54]=0;this.mixer_registers[55]=0;this.mixer_registers[56]=0;this.mixer_registers[57]=0;this.mixer_registers[59]=\n0;this.mixer_registers[60]=31;this.mixer_registers[61]=21;this.mixer_registers[62]=11;this.mixer_registers[63]=0;this.mixer_registers[64]=0;this.mixer_registers[65]=0;this.mixer_registers[66]=0;this.mixer_registers[67]=0;this.mixer_registers[68]=128;this.mixer_registers[69]=128;this.mixer_registers[70]=128;this.mixer_registers[71]=128;this.mixer_full_update()};O.prototype.mixer_full_update=function(){for(var a=1;a<this.mixer_registers.length;a++)Va[a]||this.mixer_write(a,this.mixer_registers[a])};\nfunction $a(a,b){b||(b=O.prototype.mixer_default_read);Ta[a]=b}function ab(a,b){b||(b=O.prototype.mixer_default_write);Ua[a]=b}function bb(a,b,c){Va[a]=1;Ta[a]=function(){return this.mixer_registers[b]&240|this.mixer_registers[c]>>>4};Ua[a]=function(d){this.mixer_registers[a]=d;var e=d<<4&240|this.mixer_registers[c]&15;this.mixer_write(b,d&240|this.mixer_registers[b]&15);this.mixer_write(c,e)}}\nfunction cb(a,b,c){Ta[a]=O.prototype.mixer_default_read;Ua[a]=function(d){this.mixer_registers[a]=d;this.bus.send(\"mixer-volume\",[b,c,(d>>>2)-62])}}$a(0,function(){this.mixer_reset();return 0});ab(0);bb(4,50,51);bb(34,48,49);bb(38,52,53);bb(40,54,55);bb(46,56,57);cb(48,0,0);cb(49,0,1);cb(50,2,0);cb(51,2,1);$a(59);ab(59,function(a){this.mixer_registers[59]=a;this.bus.send(\"mixer-volume\",[1,2,6*(a>>>6)-18])});$a(65);\nab(65,function(a){this.mixer_registers[65]=a;this.bus.send(\"mixer-gain-left\",6*(a>>>6))});$a(66);ab(66,function(a){this.mixer_registers[66]=a;this.bus.send(\"mixer-gain-right\",6*(a>>>6))});$a(68);ab(68,function(a){this.mixer_registers[68]=a;a>>>=3;this.bus.send(\"mixer-treble-left\",a-(16>a?14:16))});$a(69);ab(69,function(a){this.mixer_registers[69]=a;a>>>=3;this.bus.send(\"mixer-treble-right\",a-(16>a?14:16))});$a(70);\nab(70,function(a){this.mixer_registers[70]=a;a>>>=3;this.bus.send(\"mixer-bass-right\",a-(16>a?14:16))});$a(71);ab(71,function(a){this.mixer_registers[71]=a;a>>>=3;this.bus.send(\"mixer-bass-right\",a-(16>a?14:16))});$a(128,function(){switch(this.irq){case 2:return 1;case 5:return 2;case 7:return 4;case 10:return 8;default:return 0}});ab(128,function(a){a&1&&(this.irq=2);a&2&&(this.irq=5);a&4&&(this.irq=7);a&8&&(this.irq=10)});\n$a(129,function(){var a=0;switch(this.dma_channel_8bit){case 0:a|=1;break;case 1:a|=2;break;case 3:a|=8}switch(this.dma_channel_16bit){case 5:a|=32;break;case 6:a|=64;break;case 7:a|=128}return a});ab(129,function(a){a&1&&(this.dma_channel_8bit=0);a&2&&(this.dma_channel_8bit=1);a&8&&(this.dma_channel_8bit=3);a&32&&(this.dma_channel_16bit=5);a&64&&(this.dma_channel_16bit=6);a&128&&(this.dma_channel_16bit=7)});$a(130,function(){for(var a=32,b=0;16>b;b++)a|=b*this.irq_triggered[b];return a});\nO.prototype.fm_default_write=function(a,b,c){B(c);B(a)};function db(a,b){b||(b=O.prototype.fm_default_write);for(var c=0;c<a.length;c++)Wa[a[c]]=b}function jb(a,b){for(var c=[];a<=b;a++)c.push(a);return c}var kb=new Uint8Array(32);kb[0]=0;kb[1]=1;kb[2]=2;kb[3]=3;kb[4]=4;kb[5]=5;kb[8]=6;kb[9]=7;kb[10]=8;kb[11]=9;kb[12]=10;kb[13]=11;kb[16]=12;kb[17]=13;kb[18]=14;kb[19]=15;kb[20]=16;kb[21]=17;db([1],function(a,b){this.fm_waveform_select_enable[b]=a&1;this.fm_update_waveforms()});db([2]);db([3]);\ndb([4],function(){});db([5],function(a,b,c){0===b&&this.fm_default_write(a,b,c)});db([8],function(){});db(jb(32,53),function(){});db(jb(64,85),function(){});db(jb(96,117),function(){});db(jb(128,149),function(){});db(jb(160,168),function(){});db(jb(176,184),function(){});db([189],function(){});db(jb(192,200),function(){});db(jb(224,245),function(){});O.prototype.fm_update_waveforms=function(){};\nO.prototype.sampling_rate_change=function(a){this.sampling_rate=a;this.bus.send(\"dac-tell-sampling-rate\",a)};O.prototype.get_channel_count=function(){return this.dsp_stereo?2:1};O.prototype.dma_transfer_size_set=function(){this.dma_sample_count=1+(this.write_buffer.shift()<<0)+(this.write_buffer.shift()<<8)};\nO.prototype.dma_transfer_start=function(){this.bytes_per_sample=1;this.dsp_16bit&&(this.bytes_per_sample*=2);this.dma_bytes_count=this.dma_sample_count*this.bytes_per_sample;this.dma_bytes_block=1024*this.bytes_per_sample;this.dma_bytes_block=Math.min(Math.max(this.dma_bytes_count>>2&-4,32),this.dma_bytes_block);this.dma_waiting_transfer=!0;this.dma.channel_mask[this.dma_channel]||this.dma_on_unmask(this.dma_channel)};\nO.prototype.dma_on_unmask=function(a){a===this.dma_channel&&this.dma_waiting_transfer&&(this.dma_waiting_transfer=!1,this.dma_bytes_left=this.dma_bytes_count,this.dma_paused=!1,this.bus.send(\"dac-enable\"))};\nO.prototype.dma_transfer_next=function(){var a=Math.min(this.dma_bytes_left,this.dma_bytes_block),b=Math.floor(a/this.bytes_per_sample);this.dma.do_write(this.dma_syncbuffer,0,a,this.dma_channel,c=>{c||(this.dma_to_dac(b),this.dma_bytes_left-=a,this.dma_bytes_left||(this.raise_irq(this.dma_irq),this.dma_autoinit&&(this.dma_bytes_left=this.dma_bytes_count)))})};\nO.prototype.dma_to_dac=function(a){var b=this.dsp_16bit?32767.5:127.5,c=this.dsp_signed?0:-1,d=this.dsp_stereo?1:2;var e=this.dsp_16bit?this.dsp_signed?this.dma_buffer_int16:this.dma_buffer_uint16:this.dsp_signed?this.dma_buffer_int8:this.dma_buffer_uint8;for(var g=0,f=0;f<a;f++)for(var h=Ya(e[f]/b+c,-1,1),l=0;l<d;l++)this.dac_buffers[g].push(h),g^=1;this.dac_send()};O.prototype.dac_handle_request=function(){!this.dma_bytes_left||this.dma_paused?this.dac_send():this.dma_transfer_next()};\nO.prototype.dac_send=function(){if(this.dac_buffers[0].length){var a=this.dac_buffers[0].shift_block(this.dac_buffers[0].length),b=this.dac_buffers[1].shift_block(this.dac_buffers[1].length);this.bus.send(\"dac-send-data\",[a,b],[a.buffer,b.buffer])}};O.prototype.raise_irq=function(a){this.irq_triggered[a]=1;this.cpu.device_raise_irq(this.irq)};O.prototype.lower_irq=function(a){this.irq_triggered[a]=0;this.cpu.device_lower_irq(this.irq)};function Ya(a,b,c){return(a<b)*b+(a>c)*c+(b<=a&&a<=c)*a};function da(a,b){this.cpu=a;this.pci=a.devices.pci;this.device_id=b.device_id;this.pci_space=[244,26,b.device_id&255,b.device_id>>8,7,5,16,0,1,0,2,0,0,0,0,0,1,168,0,0,0,16,191,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,244,26,b.subsystem_device_id&255,b.subsystem_device_id>>8,0,0,0,0,64,0,0,0,0,0,0,0,0,1,0,0];this.pci_space=this.pci_space.concat(k.zeros(256-this.pci_space.length));this.pci_id=b.pci_id;this.pci_bars=[];this.name=b.name;this.driver_feature_select=this.device_feature_select=0;this.device_feature=\nnew Uint32Array(4);this.driver_feature=new Uint32Array(4);for(var c of b.common.features)this.device_feature[c>>>5]|=1<<(c&31),this.driver_feature[c>>>5]|=1<<(c&31);b.common.features.includes(32);this.features_ok=!0;this.device_status=0;this.config_has_changed=!1;this.config_generation=0;this.queues=[];for(const d of b.common.queues)this.queues.push(new V(a,this,d));this.queue_select=0;this.queue_selected=this.queues[0];this.isr_status=0;c=[];c.push(this.create_common_capability(b.common));c.push(this.create_notification_capability(b.notification));\nc.push(this.create_isr_capability(b.isr_status));b.device_specific&&c.push(this.create_device_specific_capability(b.device_specific));this.init_capabilities(c);a.devices.pci.register_device(this);this.reset()}\nda.prototype.create_common_capability=function(a){return{type:1,bar:0,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:4,name:\"device_feature_select\",read:()=>this.device_feature_select,write:b=>{this.device_feature_select=b}},{bytes:4,name:\"device_feature\",read:()=>this.device_feature[this.device_feature_select]||0,write:()=>{}},{bytes:4,name:\"driver_feature_select\",read:()=>this.driver_feature_select,write:b=>{this.driver_feature_select=b}},{bytes:4,name:\"driver_feature\",\nread:()=>this.driver_feature[this.driver_feature_select]||0,write:b=>{const c=this.device_feature[this.driver_feature_select];this.driver_feature_select<this.driver_feature.length&&(this.driver_feature[this.driver_feature_select]=b&c);this.features_ok=this.features_ok&&!(b&~c)}},{bytes:2,name:\"msix_config\",read:()=>65535,write:()=>{}},{bytes:2,name:\"num_queues\",read:()=>this.queues.length,write:()=>{}},{bytes:1,name:\"device_status\",read:()=>this.device_status,write:b=>{0===b&&this.reset();b&~this.device_status&\n4&&this.device_status&64&&this.notify_config_changes();this.features_ok||(b&=-9);this.device_status=b;if(b&~this.device_status&4)a.on_driver_ok()}},{bytes:1,name:\"config_generation\",read:()=>this.config_generation,write:()=>{}},{bytes:2,name:\"queue_select\",read:()=>this.queue_select,write:b=>{this.queue_select=b;this.queue_selected=this.queue_select<this.queues.length?this.queues[this.queue_select]:null}},{bytes:2,name:\"queue_size\",read:()=>this.queue_selected?this.queue_selected.size:0,write:b=>\n{this.queue_selected&&(b&b-1&&(b=1<<k.int_log2(b-1)+1),b>this.queue_selected.size_supported&&(b=this.queue_selected.size_supported),this.queue_selected.set_size(b))}},{bytes:2,name:\"queue_msix_vector\",read:()=>65535,write:()=>{}},{bytes:2,name:\"queue_enable\",read:()=>this.queue_selected?this.queue_selected.enabled|0:0,write:b=>{this.queue_selected&&1===b&&this.queue_selected.is_configured()&&this.queue_selected.enable()}},{bytes:2,name:\"queue_notify_off\",read:()=>this.queue_selected?this.queue_selected.notify_offset:\n0,write:()=>{}},{bytes:4,name:\"queue_desc (low dword)\",read:()=>this.queue_selected?this.queue_selected.desc_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.desc_addr=b)}},{bytes:4,name:\"queue_desc (high dword)\",read:()=>0,write:()=>{}},{bytes:4,name:\"queue_avail (low dword)\",read:()=>this.queue_selected?this.queue_selected.avail_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.avail_addr=b)}},{bytes:4,name:\"queue_avail (high dword)\",read:()=>0,write:()=>{}},{bytes:4,name:\"queue_used (low dword)\",\nread:()=>this.queue_selected?this.queue_selected.used_addr:0,write:b=>{this.queue_selected&&(this.queue_selected.used_addr=b)}},{bytes:4,name:\"queue_used (high dword)\",read:()=>0,write:()=>{}}]}};\nda.prototype.create_notification_capability=function(a){const b=[];let c;c=a.single_handler?0:2;for(const [d,e]of a.handlers.entries())b.push({bytes:2,name:\"notify\"+d,read:()=>65535,write:e||(()=>{})});return{type:2,bar:1,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array([c&255,c>>8&255,c>>16&255,c>>24]),struct:b}};\nda.prototype.create_isr_capability=function(a){return{type:3,bar:2,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:[{bytes:1,name:\"isr_status\",read:()=>{const b=this.isr_status;this.lower_irq();return b},write:()=>{}}]}};da.prototype.create_device_specific_capability=function(a){return{type:4,bar:3,port:a.initial_port,use_mmio:!1,offset:0,extra:new Uint8Array(0),struct:a.struct}};\nda.prototype.init_capabilities=function(a){let b=this.pci_space[52]=64;var c=b;for(const e of a){a=16+e.extra.length;c=b;b=c+a;var d=e.struct.reduce((g,f)=>g+f.bytes,0);d+=e.offset;d=16>d?16:1<<k.int_log2(d-1)+1;this.pci_bars[e.bar]={size:d};this.pci_space[c]=9;this.pci_space[c+1]=b;this.pci_space[c+2]=a;this.pci_space[c+3]=e.type;this.pci_space[c+4]=e.bar;this.pci_space[c+5]=0;this.pci_space[c+6]=0;this.pci_space[c+7]=0;this.pci_space[c+8]=e.offset&255;this.pci_space[c+9]=e.offset>>>8&255;this.pci_space[c+\n10]=e.offset>>>16&255;this.pci_space[c+11]=e.offset>>>24;this.pci_space[c+12]=d&255;this.pci_space[c+13]=d>>>8&255;this.pci_space[c+14]=d>>>16&255;this.pci_space[c+15]=d>>>24;for(const [g,f]of e.extra.entries())this.pci_space[c+16+g]=f;c=16+4*e.bar;this.pci_space[c]=e.port&254|!e.use_mmio;this.pci_space[c+1]=e.port>>>8&255;this.pci_space[c+2]=e.port>>>16&255;this.pci_space[c+3]=e.port>>>24&255;c=e.port+e.offset;for(const g of e.struct){let f=g.read;a=g.write;if(!e.use_mmio){d=function(l){return f(l&\n-2)>>((l&1)<<3)&255};const h=function(l){return f(l&-4)>>((l&3)<<3)&255};switch(g.bytes){case 4:this.cpu.io.register_read(c,this,h,void 0,f);this.cpu.io.register_write(c,this,void 0,void 0,a);break;case 2:this.cpu.io.register_read(c,this,d,f);this.cpu.io.register_write(c,this,void 0,a);break;case 1:this.cpu.io.register_read(c,this,f),this.cpu.io.register_write(c,this,a)}}c+=g.bytes}}this.pci_space[b]=9;this.pci_space[b+1]=0;this.pci_space[b+2]=20;this.pci_space[b+3]=5;this.pci_space[b+4]=0;this.pci_space[b+\n5]=0;this.pci_space[b+6]=0;this.pci_space[b+7]=0;this.pci_space[b+8]=0;this.pci_space[b+9]=0;this.pci_space[b+10]=0;this.pci_space[b+11]=0;this.pci_space[b+12]=0;this.pci_space[b+13]=0;this.pci_space[b+14]=0;this.pci_space[b+15]=0;this.pci_space[b+16]=0;this.pci_space[b+17]=0;this.pci_space[b+18]=0;this.pci_space[b+19]=0};\nda.prototype.get_state=function(){let a=[];a[0]=this.device_feature_select;a[1]=this.driver_feature_select;a[2]=this.device_feature;a[3]=this.driver_feature;a[4]=this.features_ok;a[5]=this.device_status;a[6]=this.config_has_changed;a[7]=this.config_generation;a[8]=this.isr_status;a[9]=this.queue_select;return a=a.concat(this.queues)};\nda.prototype.set_state=function(a){this.device_feature_select=a[0];this.driver_feature_select=a[1];this.device_feature=a[2];this.driver_feature=a[3];this.features_ok=a[4];this.device_status=a[5];this.config_has_changed=a[6];this.config_generation=a[7];this.isr_status=a[8];this.queue_select=a[9];let b=0;for(const c of a.slice(10))this.queues[b].set_state(c),b++;this.queue_selected=this.queues[this.queue_select]||null};\nda.prototype.reset=function(){this.driver_feature_select=this.device_feature_select=0;this.driver_feature.set(this.device_feature);this.features_ok=!0;this.queue_select=this.device_status=0;this.queue_selected=this.queues[0];for(const a of this.queues)a.reset();this.config_has_changed=!1;this.config_generation=0;this.lower_irq()};da.prototype.notify_config_changes=function(){this.config_has_changed=!0;this.device_status&4&&this.raise_irq(2)};\nda.prototype.update_config_generation=function(){this.config_has_changed&&(this.config_generation++,this.config_generation&=255,this.config_has_changed=!1)};da.prototype.is_feature_negotiated=function(a){return 0<(this.driver_feature[a>>>5]&1<<(a&31))};da.prototype.needs_reset=function(){this.device_status|=64;this.device_status&4&&this.notify_config_changes()};da.prototype.raise_irq=function(a){B(a);this.isr_status|=a;this.pci.raise_irq(this.pci_id)};\nda.prototype.lower_irq=function(){this.isr_status=0;this.pci.lower_irq(this.pci_id)};function V(a,b,c){this.cpu=a;this.virtio=b;this.size_supported=this.size=c.size_supported;this.mask=this.size-1;this.enabled=!1;this.notify_offset=c.notify_offset;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.reset()}\nV.prototype.get_state=function(){const a=[];a[0]=this.size;a[1]=this.size_supported;a[2]=this.enabled;a[3]=this.notify_offset;a[4]=this.desc_addr;a[5]=this.avail_addr;a[6]=this.avail_last_idx;a[7]=this.used_addr;a[8]=this.num_staged_replies;return a};\nV.prototype.set_state=function(a){this.size=a[0];this.size_supported=a[1];this.enabled=a[2];this.notify_offset=a[3];this.desc_addr=a[4];this.avail_addr=a[5];this.avail_last_idx=a[6];this.used_addr=a[7];this.num_staged_replies=a[8];this.mask=this.size-1};V.prototype.reset=function(){this.enabled=!1;this.num_staged_replies=this.used_addr=this.avail_last_idx=this.avail_addr=this.desc_addr=0;this.set_size(this.size_supported)};\nV.prototype.is_configured=function(){return this.desc_addr&&this.avail_addr&&this.used_addr};V.prototype.enable=function(){this.is_configured();this.enabled=!0};V.prototype.set_size=function(a){this.size=a;this.mask=a-1};V.prototype.count_requests=function(){return this.avail_get_idx()-this.avail_last_idx&this.mask};V.prototype.has_request=function(){return(this.avail_get_idx()&this.mask)!==this.avail_last_idx};\nV.prototype.pop_request=function(){this.has_request();var a=this.avail_get_entry(this.avail_last_idx);a=new lb(this,a);this.avail_last_idx=this.avail_last_idx+1&this.mask;return a};V.prototype.push_reply=function(a){const b=this.used_get_idx()+this.num_staged_replies&this.mask;this.used_set_entry(b,a.head_idx,a.length_written);this.num_staged_replies++};\nV.prototype.flush_replies=function(){if(0!==this.num_staged_replies){var a=this.used_get_idx()+this.num_staged_replies&65535;this.used_set_idx(a);this.num_staged_replies=0;this.virtio.is_feature_negotiated(29)?(this.avail_get_used_event(),this.virtio.raise_irq(1)):~this.avail_get_flags()&1&&this.virtio.raise_irq(1)}};V.prototype.notify_me_after=function(a){a=this.avail_get_idx()+a&65535;this.used_set_avail_event(a)};\nV.prototype.get_descriptor=function(a,b){return{addr_low:this.cpu.read32s(a+16*b),addr_high:this.cpu.read32s(a+16*b+4),len:this.cpu.read32s(a+16*b+8),flags:this.cpu.read16(a+16*b+12),next:this.cpu.read16(a+16*b+14)}};V.prototype.avail_get_flags=function(){return this.cpu.read16(this.avail_addr)};V.prototype.avail_get_idx=function(){return this.cpu.read16(this.avail_addr+2)};V.prototype.avail_get_entry=function(a){return this.cpu.read16(this.avail_addr+4+2*a)};\nV.prototype.avail_get_used_event=function(){return this.cpu.read16(this.avail_addr+4+2*this.size)};V.prototype.used_get_flags=function(){return this.cpu.read16(this.used_addr)};V.prototype.used_set_flags=function(a){this.cpu.write16(this.used_addr,a)};V.prototype.used_get_idx=function(){return this.cpu.read16(this.used_addr+2)};V.prototype.used_set_idx=function(a){this.cpu.write16(this.used_addr+2,a)};\nV.prototype.used_set_entry=function(a,b,c){this.cpu.write32(this.used_addr+4+8*a,b);this.cpu.write32(this.used_addr+8+8*a,c)};V.prototype.used_set_avail_event=function(a){this.cpu.write16(this.used_addr+4+8*this.size,a)};\nfunction lb(a,b){this.cpu=a.cpu;this.virtio=a.virtio;this.head_idx=b;this.read_buffers=[];this.length_readable=this.read_buffer_offset=this.read_buffer_idx=0;this.write_buffers=[];this.length_writable=this.length_written=this.write_buffer_offset=this.write_buffer_idx=0;let c=a.desc_addr,d=0,e=a.size,g=!1;const f=this.virtio.is_feature_negotiated(28);do{const h=a.get_descriptor(c,b);B(h.addr_high,8);B(h.addr_low,8);B(h.len,8);B(h.flags,4);B(h.next,4);if(f&&h.flags&4)c=h.addr_low,d=b=0,e=h.len/16;else{if(h.flags&\n2)g=!0,this.write_buffers.push(h),this.length_writable+=h.len;else{if(g)break;this.read_buffers.push(h);this.length_readable+=h.len}d++;if(d>e)break;if(h.flags&1)b=h.next;else break}}while(1)}\nlb.prototype.get_next_blob=function(a){let b=0,c=a.length;for(;c&&this.read_buffer_idx!==this.read_buffers.length;){var d=this.read_buffers[this.read_buffer_idx];const e=d.addr_low+this.read_buffer_offset;d=d.len-this.read_buffer_offset;d>c?(d=c,this.read_buffer_offset+=c):(this.read_buffer_idx++,this.read_buffer_offset=0);a.set(this.cpu.read_blob(e,d),b);b+=d;c-=d}return b};\nlb.prototype.set_next_blob=function(a){let b=0,c=a.length;for(;c&&this.write_buffer_idx!==this.write_buffers.length;){var d=this.write_buffers[this.write_buffer_idx];const e=d.addr_low+this.write_buffer_offset;d=d.len-this.write_buffer_offset;d>c?(d=c,this.write_buffer_offset+=c):(this.write_buffer_idx++,this.write_buffer_offset=0);this.cpu.write_blob(a.subarray(b,b+d),e);b+=d;c-=d}this.length_written+=b;return b};function mb(a,b){this.bus=b;this.rows=25;this.cols=80;this.ports=4;b=[{size_supported:16,notify_offset:0},{size_supported:16,notify_offset:1},{size_supported:16,notify_offset:2},{size_supported:16,notify_offset:3}];for(let c=1;c<this.ports;++c)b.push({size_supported:16,notify_offset:0}),b.push({size_supported:8,notify_offset:1});this.virtio=new da(a,{name:\"virtio-console\",pci_id:96,device_id:4163,subsystem_device_id:3,common:{initial_port:47104,queues:b,features:[0,1,32],on_driver_ok:()=>{}},notification:{initial_port:47360,\nsingle_handler:!1,handlers:[c=>{for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{const d=this.virtio.queues[c],e=3<c?c-3>>1:0;for(;d.has_request();){const g=d.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send(\"virtio-console\"+e+\"-output-bytes\",f);this.Ack(c,g)}},c=>{if(2===c)for(c=this.virtio.queues[c];c.count_requests()>c.size-2;)c.pop_request()},c=>{if(3===c)for(var d=this.virtio.queues[c];d.has_request();){var e=d.pop_request(),g=new Uint8Array(e.length_readable);\ne.get_next_blob(g);var f=t.Unmarshall([\"w\",\"h\",\"h\"],g,{offset:0});g=f[0];f=f[1];this.Ack(c,e);switch(f){case 0:for(e=0;e<this.ports;++e)this.SendEvent(e,1,0);break;case 3:this.Ack(c,e);this.SendEvent(g,4,1);this.SendName(g,\"virtio-\"+g);this.SendEvent(g,6,1);break;case 6:this.Ack(c,e);0===g&&this.SendWindowSize(g);break;default:return}}}]},isr_status:{initial_port:46848},device_specific:{initial_port:46592,struct:[{bytes:2,name:\"cols\",read:()=>this.cols,write:()=>{}},{bytes:2,name:\"rows\",read:()=>\nthis.rows,write:()=>{}},{bytes:4,name:\"max_nr_ports\",read:()=>this.ports,write:()=>{}},{bytes:4,name:\"emerg_wr\",read:()=>0,write:()=>{}}]}});for(let c=0;c<this.ports;++c){const d=0===c?0:2*c+2;this.bus.register(\"virtio-console\"+c+\"-input-bytes\",function(e){var g=this.virtio.queues[d];g.has_request()&&(g=g.pop_request(),this.Send(d,g,new Uint8Array(e)))},this);this.bus.register(\"virtio-console\"+c+\"-resize\",function(e){this.cols=e[0];this.rows=e[1];this.virtio.queues[2].is_configured()&&this.virtio.queues[2].has_request()&&\nthis.SendWindowSize(c)},this)}}mb.prototype.SendWindowSize=function(a){const b=this.virtio.queues[2].pop_request(),c=new Uint8Array(12);t.Marshall([\"w\",\"h\",\"h\",\"h\",\"h\"],[a,5,0,this.rows,this.cols],c,0);this.Send(2,b,c)};mb.prototype.SendName=function(a,b){const c=this.virtio.queues[2].pop_request();b=(new TextEncoder).encode(b);const d=new Uint8Array(8+b.length+1);t.Marshall([\"w\",\"h\",\"h\"],[a,7,1],d,0);for(a=0;a<b.length;++a)d[a+8]=b[a];d[8+b.length]=0;this.Send(2,c,d)};\nmb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.rows;a[2]=this.cols;a[3]=this.ports;return a};mb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.rows=a[1];this.cols=a[2];this.ports=a[3]};mb.prototype.reset=function(){this.virtio.reset()};mb.prototype.SendEvent=function(a,b,c){const d=this.virtio.queues[2].pop_request(),e=new Uint8Array(8);t.Marshall([\"w\",\"h\",\"h\"],[a,b,c],e,0);this.Send(2,d,e)};\nmb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};mb.prototype.Ack=function(a,b){b.set_next_blob(new Uint8Array(0));this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};function nb(a,b,c){this.bus=b;this.id=a.devices.net?1:0;this.status=this.pairs=1;this.preserve_mac_from_state_image=c;this.mac=new Uint8Array([0,34,21,255*Math.random()|0,255*Math.random()|0,255*Math.random()|0]);this.bus.send(\"net\"+this.id+\"-mac\",Pa(this.mac));b=[];for(c=0;c<this.pairs;++c)b.push({size_supported:32,notify_offset:0}),b.push({size_supported:32,notify_offset:1});b.push({size_supported:16,notify_offset:2});this.virtio=new da(a,{name:\"virtio-net\",pci_id:80,device_id:4161,subsystem_device_id:1,\ncommon:{initial_port:51200,queues:b,features:[5,16,22,3,17,23,32],on_driver_ok:()=>{}},notification:{initial_port:51456,single_handler:!1,handlers:[d=>{d=this.virtio.queues[d];var e=d.avail_get_entry(d.avail_last_idx);e=new lb(d,e);d.avail_last_idx=d.avail_last_idx+1&d.mask;this.virtio.queues[0].push_reply(e);this.virtio.queues[0].flush_replies()},d=>{const e=this.virtio.queues[d];for(;e.has_request();){const g=e.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);this.bus.send(\"net\"+\nthis.id+\"-send\",f.subarray(12));this.bus.send(\"eth-transmit-end\",[f.length-12]);this.virtio.queues[d].push_reply(g)}this.virtio.queues[d].flush_replies()},d=>{if(d===2*this.pairs)for(var e=this.virtio.queues[d];e.has_request();){const g=e.pop_request(),f=new Uint8Array(g.length_readable);g.get_next_blob(f);const h=t.Unmarshall([\"b\",\"b\"],f,{offset:0});switch(h[0]<<8|h[1]){case 1024:t.Unmarshall([\"h\"],f,{offset:2});this.Send(d,g,new Uint8Array([0]));break;case 257:this.mac=f.subarray(2,8);this.Send(d,\ng,new Uint8Array([0]));this.bus.send(\"net\"+this.id+\"-mac\",Pa(this.mac));break;default:this.Send(d,g,new Uint8Array([1]));return}}}]},isr_status:{initial_port:50944},device_specific:{initial_port:50688,struct:[0,1,2,3,4,5].map((d,e)=>({bytes:1,name:\"mac_\"+e,read:()=>this.mac[e],write:()=>{}})).concat([{bytes:2,name:\"status\",read:()=>this.status,write:()=>{}},{bytes:2,name:\"max_pairs\",read:()=>this.pairs,write:()=>{}},{bytes:2,name:\"mtu\",read:()=>1500,write:()=>{}}])}});this.bus.register(\"net\"+this.id+\n\"-receive\",d=>{this.bus.send(\"eth-receive-end\",[d.length]);const e=new Uint8Array(12+d.byteLength);(new DataView(e.buffer,e.byteOffset,e.byteLength)).setInt16(10,1);e.set(d,12);d=this.virtio.queues[0];d.has_request()?(d=d.pop_request(),d.set_next_blob(e),this.virtio.queues[0].push_reply(d),this.virtio.queues[0].flush_replies()):console.log(\"No buffer to write into!\")},this)}nb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.id;a[2]=this.mac;return a};\nnb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.id=a[1];this.preserve_mac_from_state_image&&(this.mac=a[2],this.bus.send(\"net\"+this.id+\"-mac\",Pa(this.mac)))};nb.prototype.reset=function(){this.virtio.reset()};nb.prototype.Send=function(a,b,c){b.set_next_blob(c);this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};nb.prototype.Ack=function(a,b){this.virtio.queues[a].push_reply(b);this.virtio.queues[a].flush_replies()};const ob=\"SWAP_IN SWAP_OUT MAJFLT MINFLT MEMFREE MEMTOT AVAIL CACHES HTLB_PGALLOC HTLB_PGFAIL\".split(\" \");\nfunction pb(a,b){this.bus=b;this.zeroed=this.fp_cmd=this.actual=this.num_pages=0;this.virtio=new da(a,{name:\"virtio-balloon\",pci_id:88,device_id:4165,subsystem_device_id:5,common:{initial_port:55296,queues:[{size_supported:32,notify_offset:0},{size_supported:32,notify_offset:0},{size_supported:2,notify_offset:1},{size_supported:64,notify_offset:2}],features:[1,3,32],on_driver_ok:()=>{}},notification:{initial_port:55552,single_handler:!1,handlers:[c=>{const d=this.virtio.queues[c];for(;d.has_request();){var e=\nd.pop_request();const g=new Uint8Array(e.length_readable);e.get_next_blob(g);this.virtio.queues[c].push_reply(e);e=g.byteLength/4;this.actual+=0===c?e:-e}this.virtio.queues[c].flush_replies()},c=>{var d=this.virtio.queues[c];if(d.has_request()){d=d.pop_request();const e=new Uint8Array(d.length_readable);d.get_next_blob(e);let g={};for(let f=0;f<d.length_readable;f+=10){let [h,l]=t.Unmarshall([\"h\",\"d\"],e,{offset:f});g[ob[h]]=l}this.virtio.queues[c].push_reply(d);this.stats_cb&&this.stats_cb(g)}},c=>\n{const d=this.virtio.queues[c];for(;d.has_request();){const g=d.pop_request();if(0<g.length_readable){var e=new Uint8Array(g.length_readable);g.get_next_blob(e);[e]=t.Unmarshall([\"w\"],e,{offset:0});0===e&&(this.free_cb&&this.free_cb(this.zeroed),1<this.fp_cmd&&(this.fp_cmd=1),this.virtio.notify_config_changes())}if(0<g.length_writable)for(new Uint8Array(0),e=0;e<g.write_buffers.length;++e){let f=g.write_buffers[e];this.zeroed+=f.len;this.virtio.cpu.zero_memory(f.addr_low,f.len)}this.virtio.queues[c].push_reply(g)}this.virtio.queues[c].flush_replies()}]},\nisr_status:{initial_port:55040},device_specific:{initial_port:54784,struct:[{bytes:4,name:\"num_pages\",read:()=>this.num_pages,write:()=>{}},{bytes:4,name:\"actual\",read:()=>this.actual,write:()=>{}},{bytes:4,name:\"free_page_hint_cmd_id\",read:()=>this.fp_cmd,write:()=>{}}]}})}pb.prototype.Inflate=function(a){this.num_pages+=a;this.virtio.notify_config_changes()};pb.prototype.Deflate=function(a){this.num_pages-=a;this.virtio.notify_config_changes()};\npb.prototype.Cleanup=function(a){this.fp_cmd=2;this.free_cb=a;this.zeroed=0;this.virtio.notify_config_changes()};pb.prototype.get_state=function(){const a=[];a[0]=this.virtio;a[1]=this.num_pages;a[2]=this.actual;return a};pb.prototype.set_state=function(a){this.virtio.set_state(a[0]);this.num_pages=a[1];this.actual=a[2]};pb.prototype.GetStats=function(a){this.stats_cb=a;for(a=this.virtio.queues[2];a.has_request();){const b=a.pop_request();this.virtio.queues[2].push_reply(b)}this.virtio.queues[2].flush_replies()};\npb.prototype.Reset=function(){};var qb={};function rb(){this.listeners={};this.pair=void 0}rb.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};rb.prototype.unregister=function(a,b){var c=this.listeners[a];void 0!==c&&(this.listeners[a]=c.filter(function(d){return d.fn!==b}))};rb.prototype.send=function(a,b){if(this.pair&&(a=this.pair.listeners[a],void 0!==a))for(var c=0;c<a.length;c++){var d=a[c];d.fn.call(d.this_value,b)}};\nrb.prototype.send_async=function(a,b){setTimeout(this.send.bind(this,a,b),0)};qb.create=function(){var a=new rb,b=new rb;a.pair=b;b.pair=a;return[a,b]};function ta(){}function ua(){};function E(a,b,c){this.stop_idling=c;this.wm=b;this.wasm_patch();this.create_jit_imports();this.wasm_memory=b=this.wm.exports.memory;this.memory_size=k.view(Uint32Array,b,812,1);this.mem8=new Uint8Array(0);this.mem32s=new Int32Array(this.mem8.buffer);this.segment_is_null=k.view(Uint8Array,b,724,8);this.segment_offsets=k.view(Int32Array,b,736,8);this.segment_limits=k.view(Uint32Array,b,768,8);this.segment_access_bytes=k.view(Uint8Array,b,512,8);this.protected_mode=k.view(Int32Array,b,800,1);this.idtr_size=\nk.view(Int32Array,b,564,1);this.idtr_offset=k.view(Int32Array,b,568,1);this.gdtr_size=k.view(Int32Array,b,572,1);this.gdtr_offset=k.view(Int32Array,b,576,1);this.tss_size_32=k.view(Int32Array,b,1128,1);this.page_fault=k.view(Uint32Array,b,540,8);this.cr=k.view(Int32Array,b,580,8);this.cpl=k.view(Uint8Array,b,612,1);this.is_32=k.view(Int32Array,b,804,1);this.stack_size_32=k.view(Int32Array,b,808,1);this.in_hlt=k.view(Uint8Array,b,616,1);this.last_virt_eip=k.view(Int32Array,b,620,1);this.eip_phys=k.view(Int32Array,\nb,624,1);this.sysenter_cs=k.view(Int32Array,b,636,1);this.sysenter_esp=k.view(Int32Array,b,640,1);this.sysenter_eip=k.view(Int32Array,b,644,1);this.prefixes=k.view(Int32Array,b,648,1);this.flags=k.view(Int32Array,b,120,1);this.flags_changed=k.view(Int32Array,b,100,1);this.last_op_size=k.view(Int32Array,b,96,1);this.last_op1=k.view(Int32Array,b,104,1);this.last_result=k.view(Int32Array,b,112,1);this.current_tsc=k.view(Uint32Array,b,960,2);this.devices={};this.instruction_pointer=k.view(Int32Array,\nb,556,1);this.previous_ip=k.view(Int32Array,b,560,1);this.apic_enabled=k.view(Uint8Array,b,548,1);this.acpi_enabled=k.view(Uint8Array,b,552,1);this.memory_map_read8=[];this.memory_map_write8=[];this.memory_map_read32=[];this.memory_map_write32=[];this.bios={main:null,vga:null};this.instruction_counter=k.view(Uint32Array,b,664,1);this.reg32=k.view(Int32Array,b,64,8);this.fpu_st=k.view(Int32Array,b,1152,32);this.fpu_stack_empty=k.view(Uint8Array,b,816,1);this.fpu_stack_empty[0]=255;this.fpu_stack_ptr=\nk.view(Uint8Array,b,1032,1);this.fpu_stack_ptr[0]=0;this.fpu_control_word=k.view(Uint16Array,b,1036,1);this.fpu_control_word[0]=895;this.fpu_status_word=k.view(Uint16Array,b,1040,1);this.fpu_status_word[0]=0;this.fpu_ip=k.view(Int32Array,b,1048,1);this.fpu_ip[0]=0;this.fpu_ip_selector=k.view(Int32Array,b,1052,1);this.fpu_ip_selector[0]=0;this.fpu_opcode=k.view(Int32Array,b,1044,1);this.fpu_opcode[0]=0;this.fpu_dp=k.view(Int32Array,b,1056,1);this.fpu_dp[0]=0;this.fpu_dp_selector=k.view(Int32Array,\nb,1060,1);this.fpu_dp_selector[0]=0;this.reg_xmm32s=k.view(Int32Array,b,832,32);this.mxcsr=k.view(Int32Array,b,824,1);this.sreg=k.view(Uint16Array,b,668,8);this.dreg=k.view(Int32Array,b,684,8);this.reg_pdpte=k.view(Int32Array,b,968,8);this.svga_dirty_bitmap_min_offset=k.view(Uint32Array,b,716,1);this.svga_dirty_bitmap_max_offset=k.view(Uint32Array,b,720,1);this.fw_value=[];this.fw_pointer=0;this.option_roms=[];this.io=void 0;this.bus=a;this.set_tsc(0,0);this.debug_init()}\nE.prototype.clear_opstats=function(){(new Uint8Array(this.wasm_memory.buffer,32768,131072)).fill(0);this.wm.exports.profiler_init()};E.prototype.create_jit_imports=function(){const a=Object.create(null);a.m=this.wm.exports.memory;for(const b of Object.keys(this.wm.exports))b.startsWith(\"_\")||b.startsWith(\"zstd\")||b.endsWith(\"_js\")||(a[b]=this.wm.exports[b]);this.jit_imports=a};\nE.prototype.wasm_patch=function(){const a=c=>this.wm.exports[c],b=c=>{const d=a(c);console.assert(d,\"Missing import: \"+c);return d};this.reset_cpu=b(\"reset_cpu\");this.getiopl=b(\"getiopl\");this.get_eflags=b(\"get_eflags\");this.handle_irqs=b(\"handle_irqs\");this.main_loop=b(\"main_loop\");this.set_jit_config=b(\"set_jit_config\");this.read8=b(\"read8\");this.read16=b(\"read16\");this.read32s=b(\"read32s\");this.write8=b(\"write8\");this.write16=b(\"write16\");this.write32=b(\"write32\");this.in_mapped_range=b(\"in_mapped_range\");\nthis.fpu_load_tag_word=b(\"fpu_load_tag_word\");this.fpu_load_status_word=b(\"fpu_load_status_word\");this.fpu_get_sti_f64=b(\"fpu_get_sti_f64\");this.translate_address_system_read=b(\"translate_address_system_read_js\");this.get_seg_cs=b(\"get_seg_cs\");this.get_real_eip=b(\"get_real_eip\");this.clear_tlb=b(\"clear_tlb\");this.full_clear_tlb=b(\"full_clear_tlb\");this.update_state_flags=b(\"update_state_flags\");this.set_tsc=b(\"set_tsc\");this.store_current_tsc=b(\"store_current_tsc\");this.set_cpuid_level=b(\"set_cpuid_level\");\nthis.pic_set_irq=b(\"pic_set_irq\");this.pic_clear_irq=b(\"pic_clear_irq\");this.jit_clear_cache=b(\"jit_clear_cache_js\");this.jit_dirty_cache=b(\"jit_dirty_cache\");this.codegen_finalize_finished=b(\"codegen_finalize_finished\");this.allocate_memory=b(\"allocate_memory\");this.zero_memory=b(\"zero_memory\");this.is_memory_zeroed=b(\"is_memory_zeroed\");this.svga_allocate_memory=b(\"svga_allocate_memory\");this.svga_allocate_dest_buffer=b(\"svga_allocate_dest_buffer\");this.svga_fill_pixel_buffer=b(\"svga_fill_pixel_buffer\");\nthis.svga_mark_dirty=b(\"svga_mark_dirty\");this.get_pic_addr_master=b(\"get_pic_addr_master\");this.get_pic_addr_slave=b(\"get_pic_addr_slave\");this.zstd_create_ctx=b(\"zstd_create_ctx\");this.zstd_get_src_ptr=b(\"zstd_get_src_ptr\");this.zstd_free_ctx=b(\"zstd_free_ctx\");this.zstd_read=b(\"zstd_read\");this.zstd_read_free=b(\"zstd_read_free\");this.port20_read=b(\"port20_read\");this.port21_read=b(\"port21_read\");this.portA0_read=b(\"portA0_read\");this.portA1_read=b(\"portA1_read\");this.port20_write=b(\"port20_write\");\nthis.port21_write=b(\"port21_write\");this.portA0_write=b(\"portA0_write\");this.portA1_write=b(\"portA1_write\");this.port4D0_read=b(\"port4D0_read\");this.port4D1_read=b(\"port4D1_read\");this.port4D0_write=b(\"port4D0_write\");this.port4D1_write=b(\"port4D1_write\")};E.prototype.jit_force_generate=function(a){this.jit_force_generate_unsafe&&this.jit_force_generate_unsafe(a)};E.prototype.jit_clear_func=function(a){this.wm.wasm_table.set(a+1024,null)};\nE.prototype.jit_clear_all_funcs=function(){const a=this.wm.wasm_table;for(let b=0;900>b;b++)a.set(1024+b,null)};\nE.prototype.get_state=function(){var a=[];a[0]=this.memory_size[0];a[1]=new Uint8Array([...this.segment_is_null,...this.segment_access_bytes]);a[2]=this.segment_offsets;a[3]=this.segment_limits;a[4]=this.protected_mode[0];a[5]=this.idtr_offset[0];a[6]=this.idtr_size[0];a[7]=this.gdtr_offset[0];a[8]=this.gdtr_size[0];a[9]=this.page_fault[0];a[10]=this.cr;a[11]=this.cpl[0];a[13]=this.is_32[0];a[16]=this.stack_size_32[0];a[17]=this.in_hlt[0];a[18]=this.last_virt_eip[0];a[19]=this.eip_phys[0];a[22]=this.sysenter_cs[0];\na[23]=this.sysenter_eip[0];a[24]=this.sysenter_esp[0];a[25]=this.prefixes[0];a[26]=this.flags[0];a[27]=this.flags_changed[0];a[28]=this.last_op1[0];a[30]=this.last_op_size[0];a[37]=this.instruction_pointer[0];a[38]=this.previous_ip[0];a[39]=this.reg32;a[40]=this.sreg;a[41]=this.dreg;a[42]=this.reg_pdpte;this.store_current_tsc();a[43]=this.current_tsc;a[45]=this.devices.virtio_9p;a[46]=this.devices.apic;a[47]=this.devices.rtc;a[48]=this.devices.pci;a[49]=this.devices.dma;a[50]=this.devices.acpi;a[52]=\nthis.devices.vga;a[53]=this.devices.ps2;a[54]=this.devices.uart0;a[55]=this.devices.fdc;a[56]=this.devices.cdrom;a[57]=this.devices.hda;a[58]=this.devices.pit;a[59]=this.devices.net;a[60]=this.get_state_pic();a[61]=this.devices.sb16;a[62]=this.fw_value;a[63]=this.devices.ioapic;a[64]=this.tss_size_32[0];a[66]=this.reg_xmm32s;a[67]=this.fpu_st;a[68]=this.fpu_stack_empty[0];a[69]=this.fpu_stack_ptr[0];a[70]=this.fpu_control_word[0];a[71]=this.fpu_ip[0];a[72]=this.fpu_ip_selector[0];a[73]=this.fpu_dp[0];\na[74]=this.fpu_dp_selector[0];a[75]=this.fpu_opcode[0];const {packed_memory:b,bitmap:c}=this.pack_memory();a[77]=b;a[78]=new Uint8Array(c.get_buffer());a[79]=this.devices.uart1;a[80]=this.devices.uart2;a[81]=this.devices.uart3;a[82]=this.devices.virtio_console;a[83]=this.devices.virtio_net;a[84]=this.devices.virtio_balloon;return a};\nE.prototype.get_state_pic=function(){const a=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13),c=[],d=[];c[0]=a[0];c[1]=a[1];c[2]=a[2];c[3]=a[3];c[4]=a[4];c[5]=d;c[6]=a[6];c[7]=a[7];c[8]=a[8];c[9]=a[9];c[10]=a[10];c[11]=a[11];c[12]=a[12];d[0]=b[0];d[1]=b[1];d[2]=b[2];d[3]=b[3];d[4]=b[4];d[5]=null;d[6]=b[6];d[7]=b[7];d[8]=b[8];d[9]=b[9];d[10]=b[10];d[11]=b[11];d[12]=b[12];return c};\nE.prototype.set_state=function(a){this.memory_size[0]=a[0];this.mem8.length!==this.memory_size[0]&&console.warn(\"Note: Memory size mismatch. we=\"+this.mem8.length+\" state=\"+this.memory_size[0]);8===a[1].length?(this.segment_is_null.set(a[1]),this.segment_access_bytes.fill(242),this.segment_access_bytes[1]=250):16===a[1].length&&(this.segment_is_null.set(a[1].subarray(0,8)),this.segment_access_bytes.set(a[1].subarray(8,16)));this.segment_offsets.set(a[2]);this.segment_limits.set(a[3]);this.protected_mode[0]=\na[4];this.idtr_offset[0]=a[5];this.idtr_size[0]=a[6];this.gdtr_offset[0]=a[7];this.gdtr_size[0]=a[8];this.page_fault[0]=a[9];this.cr.set(a[10]);this.cpl[0]=a[11];this.is_32[0]=a[13];this.stack_size_32[0]=a[16];this.in_hlt[0]=a[17];this.last_virt_eip[0]=a[18];this.eip_phys[0]=a[19];this.sysenter_cs[0]=a[22];this.sysenter_eip[0]=a[23];this.sysenter_esp[0]=a[24];this.prefixes[0]=a[25];this.flags[0]=a[26];this.flags_changed[0]=a[27];this.last_op1[0]=a[28];this.last_op_size[0]=a[30];this.instruction_pointer[0]=\na[37];this.previous_ip[0]=a[38];this.reg32.set(a[39]);this.sreg.set(a[40]);this.dreg.set(a[41]);a[42]&&this.reg_pdpte.set(a[42]);this.set_tsc(a[43][0],a[43][1]);this.devices.virtio_9p&&this.devices.virtio_9p.set_state(a[45]);this.devices.apic&&this.devices.apic.set_state(a[46]);this.devices.rtc&&this.devices.rtc.set_state(a[47]);this.devices.pci&&this.devices.pci.set_state(a[48]);this.devices.dma&&this.devices.dma.set_state(a[49]);this.devices.acpi&&this.devices.acpi.set_state(a[50]);this.devices.vga&&\nthis.devices.vga.set_state(a[52]);this.devices.ps2&&this.devices.ps2.set_state(a[53]);this.devices.uart0&&this.devices.uart0.set_state(a[54]);this.devices.fdc&&this.devices.fdc.set_state(a[55]);this.devices.cdrom&&this.devices.cdrom.set_state(a[56]);this.devices.hda&&this.devices.hda.set_state(a[57]);this.devices.pit&&this.devices.pit.set_state(a[58]);this.devices.net&&this.devices.net.set_state(a[59]);this.set_state_pic(a[60]);this.devices.sb16&&this.devices.sb16.set_state(a[61]);this.devices.uart1&&\nthis.devices.uart1.set_state(a[79]);this.devices.uart2&&this.devices.uart2.set_state(a[80]);this.devices.uart3&&this.devices.uart3.set_state(a[81]);this.devices.virtio_console&&this.devices.virtio_console.set_state(a[82]);this.devices.virtio_net&&this.devices.virtio_net.set_state(a[83]);this.devices.virtio_balloon&&this.devices.virtio_balloon.set_state(a[84]);this.fw_value=a[62];this.devices.ioapic&&this.devices.ioapic.set_state(a[63]);this.tss_size_32[0]=a[64];this.reg_xmm32s.set(a[66]);this.fpu_st.set(a[67]);\nthis.fpu_stack_empty[0]=a[68];this.fpu_stack_ptr[0]=a[69];this.fpu_control_word[0]=a[70];this.fpu_ip[0]=a[71];this.fpu_ip_selector[0]=a[72];this.fpu_dp[0]=a[73];this.fpu_dp_selector[0]=a[74];this.fpu_opcode[0]=a[75];const b=new k.Bitmap(a[78].buffer);this.unpack_memory(b,a[77]);this.update_state_flags();this.full_clear_tlb();this.jit_clear_cache()};\nE.prototype.set_state_pic=function(a){const b=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_master(),13),c=new Uint8Array(this.wasm_memory.buffer,this.get_pic_addr_slave(),13);b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];const d=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12]};\nE.prototype.pack_memory=function(){var a=this.mem8.length>>12,b=[];for(var c=0;c<a;c++)this.is_memory_zeroed(c<<12,4096)||b.push(c);a=new k.Bitmap(a);c=new Uint8Array(b.length<<12);for(const [d,e]of b.entries())a.set(e,1),b=e<<12,b=this.mem8.subarray(b,b+4096),c.set(b,d<<12);return{bitmap:a,packed_memory:c}};\nE.prototype.unpack_memory=function(a,b){this.zero_memory(0,this.memory_size[0]);const c=this.memory_size[0]>>12;let d=0;for(let g=0;g<c;g++)if(a.get(g)){var e=d<<12;e=b.subarray(e,e+4096);this.mem8.set(e,g<<12);d++}};E.prototype.reboot_internal=function(){this.reset_cpu();this.fw_value=[];this.devices.virtio_9p&&this.devices.virtio_9p.reset();this.devices.virtio_console&&this.devices.virtio_console.reset();this.devices.virtio_net&&this.devices.virtio_net.reset();this.load_bios()};\nE.prototype.reset_memory=function(){this.mem8.fill(0)};E.prototype.create_memory=function(a,b){a<b?a=b:0>(a|0)&&(a=Math.pow(2,31)-131072);a=(a-1|131071)+1|0;console.assert(0===this.memory_size[0],\"Expected uninitialised memory\");this.memory_size[0]=a;b=this.allocate_memory(a);this.mem8=k.view(Uint8Array,this.wasm_memory,b,a);this.mem32s=k.view(Uint32Array,this.wasm_memory,b,a>>2)};\nE.prototype.init=function(a,b){this.create_memory(a.memory_size||67108864,a.initrd?67108864:1048576);a.disable_jit&&this.set_jit_config(0,1);a.cpuid_level&&this.set_cpuid_level(a.cpuid_level);this.acpi_enabled[0]=+a.acpi;this.reset_cpu();var c=new C(this);this.io=c;this.bios.main=a.bios;this.bios.vga=a.vga_bios;this.load_bios();if(a.bzimage){const e=Bb(this.mem8,a.bzimage,a.initrd,a.cmdline||\"\");e&&this.option_roms.push(e)}c.register_read(179,this,function(){return 0});var d=0;c.register_read(146,\nthis,function(){return d});c.register_write(146,this,function(e){d=e});c.register_read(1297,this,function(){return this.fw_pointer<this.fw_value.length?this.fw_value[this.fw_pointer++]:0});c.register_write(1296,this,void 0,function(e){function g(l){return new Uint8Array(Int32Array.of(l).buffer)}function f(l){return l>>8|l<<8&65280}function h(l){return l<<24|l<<8&16711680|l>>8&65280|l>>>24}ta(\"bios config port, index=\"+B(e));this.fw_pointer=0;if(0===e)this.fw_value=g(1431127377);else if(1===e)this.fw_value=\ng(0);else if(3===e)this.fw_value=g(this.memory_size[0]);else if(5===e)this.fw_value=g(1);else if(15===e)this.fw_value=g(1);else if(13===e)this.fw_value=new Uint8Array(16);else if(25===e){e=new Int32Array(4+64*this.option_roms.length);const l=new Uint8Array(e.buffer);e[0]=h(this.option_roms.length);for(let m=0;m<this.option_roms.length;m++){const {name:n,data:p}=this.option_roms[m],q=4+64*m;e[q+0>>2]=h(p.length);e[q+4>>2]=f(49152+m);for(let r=0;r<n.length;r++)l[q+8+r]=n.charCodeAt(r)}this.fw_value=\nl}else 32768<=e&&49152>e?this.fw_value=g(0):49152<=e&&e-49152<this.option_roms.length?this.fw_value=this.option_roms[e-49152].data:(ta(\"Warning: Unimplemented fw index: \"+B(e)),this.fw_value=g(0))});c.register_read(32,this,this.port20_read);c.register_read(33,this,this.port21_read);c.register_read(160,this,this.portA0_read);c.register_read(161,this,this.portA1_read);c.register_write(32,this,this.port20_write);c.register_write(33,this,this.port21_write);c.register_write(160,this,this.portA0_write);\nc.register_write(161,this,this.portA1_write);c.register_read(1232,this,this.port4D0_read);c.register_read(1233,this,this.port4D1_read);c.register_write(1232,this,this.port4D0_write);c.register_write(1233,this,this.port4D1_write);this.devices={};a.load_devices&&(this.devices.pci=new va(this),this.acpi_enabled[0]&&(this.devices.ioapic=new Ga(this),this.devices.apic=new Fa(this),this.devices.acpi=new Ea(this)),this.devices.rtc=new Ca(this),this.fill_cmos(this.devices.rtc,a),this.devices.dma=new M(this),\nthis.devices.vga=new N(this,b,a.screen,a.vga_memory_size||8388608),this.devices.ps2=new za(this,b),this.devices.uart0=new Da(this,1016,b),a.uart1&&(this.devices.uart1=new Da(this,760,b)),a.uart2&&(this.devices.uart2=new Da(this,1E3,b)),a.uart3&&(this.devices.uart3=new Da(this,744,b)),this.devices.fdc=new L(this,a.fda,a.fdb),c=0,a.hda&&(this.devices.hda=new ra(this,a.hda,a.hdb,!1,c++,b)),a.cdrom&&(this.devices.cdrom=new ra(this,a.cdrom,void 0,!0,c++,b)),this.devices.pit=new wa(this,b),\"ne2k\"===a.net_device.type?\nthis.devices.net=new Qa(this,b,a.preserve_mac_from_state_image,a.mac_address_translation):\"virtio\"===a.net_device.type&&(this.devices.virtio_net=new nb(this,b,a.preserve_mac_from_state_image)),a.fs9p&&(this.devices.virtio_9p=new ca(a.fs9p,this,b)),a.virtio_console&&(this.devices.virtio_console=new mb(this,b)),a.virtio_balloon&&(this.devices.virtio_balloon=new pb(this,b)),this.devices.sb16=new O(this,b));a.multiboot&&(a=this.load_multiboot_option_rom(a.multiboot,a.initrd,a.cmdline))&&(this.bios.main?\nthis.option_roms.push(a):this.reg32[0]=this.io.port_read32(244))};E.prototype.load_multiboot=function(a){this.load_multiboot_option_rom(a,void 0,\"\")&&(this.reg32[0]=this.io.port_read32(244))};\nE.prototype.load_multiboot_option_rom=function(a,b,c){if(8192>a.byteLength){var d=new Int32Array(2048);(new Uint8Array(d.buffer)).set(new Uint8Array(a))}else d=new Int32Array(a,0,2048);for(var e=0;8192>e;e+=4){if(464367618===d[e>>2]){var g=d[e+4>>2];if(464367618+g+d[e+8>>2]|0)continue}else continue;ta(\"Multiboot magic found, flags: \"+B(g>>>0,8),2);var f=this;this.io.register_read(244,this,function(){return 0},function(){return 0},function(){var n=31860,p=0;if(c){p|=4;f.write32(31760,n);c+=\"\\x00\";\nvar q=(new TextEncoder).encode(c);f.write_blob(q,n);n+=q.length}if(g&2){p|=64;q=0;f.write32(31788,0);f.write32(31792,n);var r=0;var A=!1;for(let u=0;4294967296>u;u+=131072)A&&void 0!==f.memory_map_read8[u>>>17]?(f.write32(n,20),f.write32(n+4,r),f.write32(n+8,0),f.write32(n+12,u-r),f.write32(n+16,0),f.write32(n+20,1),n+=24,q+=24,A=!1):A||void 0!==f.memory_map_read8[u>>>17]||(r=u,A=!0);f.write32(31788,q)}f.write32(31744,p);q=p=0;if(g&65536){A=d[e+12>>2];p=d[e+16>>2];var w=d[e+20>>2];q=d[e+24>>2];r=\nd[e+28>>2];B(A,8);B(p,8);B(w,8);B(q,8);B(r,8);A=new Uint8Array(a,e-(A-p),0===w?void 0:w-p);f.write_blob(A,p);p=r|0;q=Math.max(w,q)}else if(1179403647===d[0]){r=new DataView(a);const [u,G]=Cb(r,Db);console.assert(52===G);console.assert(1179403647===u.magic,\"Bad magic\");console.assert(1===u.class,\"Unimplemented: 64 bit elf\");console.assert(1===u.data,\"Unimplemented: big endian\");console.assert(1===u.version0,\"Bad version0\");console.assert(2===u.type,\"Unimplemented type\");console.assert(1===u.version1,\n\"Bad version1\");console.assert(52===u.ehsize,\"Bad header size\");console.assert(32===u.phentsize,\"Bad program header size\");console.assert(40===u.shentsize,\"Bad section header size\");[p]=Eb(new DataView(r.buffer,r.byteOffset+u.phoff,u.phentsize*u.phnum),Fb,u.phnum);Eb(new DataView(r.buffer,r.byteOffset+u.shoff,u.shentsize*u.shnum),Gb,u.shnum);r=u;A=p;p=r.entry;for(w of A)0!==w.type&&(1===w.type?w.paddr+w.memsz<f.memory_size[0]?(w.filesz&&(A=new Uint8Array(a,w.offset,w.filesz),f.write_blob(A,w.paddr)),\nq=Math.max(q,w.paddr+w.memsz),p===r.entry&&w.vaddr<=p&&w.vaddr+w.memsz>p&&(p=p-w.vaddr+w.paddr)):B(w.paddr):2===w.type||3===w.type||4===w.type||6===w.type||7===w.type||1685382480===w.type||1685382481===w.type||1685382482===w.type||1685382483===w.type||B(w.type))}b&&(f.write32(31764,1),f.write32(31768,n),w=q,0!==(w&4095)&&(w=(w&-4096)+4096),q=w+b.byteLength,f.write32(n,w),f.write32(n+4,q),f.write32(n+8,0),f.write32(n+12,0),f.write_blob(new Uint8Array(b),w));f.reg32[3]=31744;f.cr[0]=1;f.protected_mode[0]=\n1;f.flags[0]=2;f.is_32[0]=1;f.stack_size_32[0]=1;for(n=0;6>n;n++)f.segment_is_null[n]=0,f.segment_offsets[n]=0,f.segment_limits[n]=4294967295,f.sreg[n]=45058;f.instruction_pointer[0]=f.get_seg_cs()+p|0;f.update_state_flags();f.debug.dump_state();f.debug.dump_regs();return 732803074});this.io.register_write_consecutive(244,this,function(n){console.log(\"Test exited with code \"+B(n,2));throw\"HALT\";},function(){},function(){},function(){});for(let n=0;15>=n;n++){function p(q){B(n);B(q,2);q?this.device_raise_irq(n):\nthis.device_lower_irq(n)}this.io.register_write(8192+n,this,p,p,p)}const l=new Uint8Array(512);(new Uint16Array(l.buffer))[0]=43605;l[2]=1;var h=3;l[h++]=102;l[h++]=229;l[h++]=244;let m=l[h]=0;for(let n=0;n<l.length;n++)m+=l[n];l[h]=-m;return{name:\"genroms/multiboot.bin\",data:l}}};\nE.prototype.fill_cmos=function(a,b){var c=b.boot_order||291;a.cmos_write(56,1|c>>4&240);a.cmos_write(61,c&255);a.cmos_write(21,128);a.cmos_write(22,2);c=0;1048576<=this.memory_size[0]&&(c=this.memory_size[0]-1048576>>10,c=Math.min(c,65535));a.cmos_write(23,c&255);a.cmos_write(24,c>>8&255);a.cmos_write(48,c&255);a.cmos_write(49,c>>8&255);c=0;16777216<=this.memory_size[0]&&(c=this.memory_size[0]-16777216>>16,c=Math.min(c,65535));a.cmos_write(52,c&255);a.cmos_write(53,c>>8&255);a.cmos_write(91,0);a.cmos_write(92,\n0);a.cmos_write(93,0);a.cmos_write(20,47);a.cmos_write(95,0);b.fastboot&&a.cmos_write(63,1)};\nE.prototype.load_bios=function(){var a=this.bios.main,b=this.bios.vga;if(a){var c=new Uint8Array(a);this.write_blob(c,1048576-a.byteLength);if(b){var d=new Uint8Array(b);this.write_blob(d,786432);this.io.mmap_register(4272947200,1048576,function(e){e=e-4272947200|0;return e<d.length?d[e]:0},function(){})}this.io.mmap_register(4293918720,1048576,function(e){return this.mem8[e&1048575]}.bind(this),function(e,g){this.mem8[e&1048575]=g}.bind(this))}};\nE.prototype.codegen_finalize=function(a,b,c,d,e){const g=new Uint8Array(this.wasm_memory.buffer,d>>>0,e>>>0);WebAssembly.instantiate(g,{e:this.jit_imports}).then(f=>{this.wm.wasm_table.set(a+1024,f.instance.exports.f);this.codegen_finalize_finished(a,b,c);this.test_hook_did_finalize_wasm&&this.test_hook_did_finalize_wasm(g)})};E.prototype.log_uncompiled_code=function(){};E.prototype.dump_function_code=function(){};\nE.prototype.run_hardware_timers=function(a,b){const c=this.devices.pit.timer(b,!1),d=this.devices.rtc.timer(b,!1);let e=100,g=100;a&&(e=this.devices.acpi.timer(b),g=this.devices.apic.timer(b));return Math.min(c,d,e,g)};E.prototype.device_raise_irq=function(a){this.pic_set_irq(a);this.devices.ioapic&&this.devices.ioapic.set_irq(a)};E.prototype.device_lower_irq=function(a){this.pic_clear_irq(a);this.devices.ioapic&&this.devices.ioapic.clear_irq(a)};E.prototype.debug_init=function(){var a=this,b={};this.debug=b;b.init=function(){};b.get_regs_short=function(){};b.dump_regs=function(){};b.get_state=function(){};b.dump_state=function(){};b.dump_stack=function(){};b.dump_page_structures=function(){if(a.cr[4]&32)for(var g=0;4>g;g++)a.read32s(a.cr[3]+8*g)};b.dump_gdt_ldt=function(){};b.dump_idt=function(){};b.get_memory_dump=function(){};b.memory_hex_dump=function(){};b.used_memory_dump=function(){};b.debug_interrupt=function(){};let c,d;b.dump_code=\nfunction(g,f,h){if(!d){if(void 0===c&&(c=\"function\"===typeof require?require(\"./capstone-x86.min.js\"):window.cs,void 0===c))return;d=[new c.Capstone(c.ARCH_X86,c.MODE_16),new c.Capstone(c.ARCH_X86,c.MODE_32)]}try{d[g].disasm(f,h).forEach(function(l){ta(B(l.address>>>0)+\": \"+k.pads(l.bytes.map(m=>B(m,2).slice(-2)).join(\" \"),20)+\" \"+l.mnemonic+\" \"+l.op_str)})}catch(l){ta(\"Could not disassemble: \"+Array.from(f).map(m=>B(m,2)).join(\" \"))}};let e;b.dump_wasm=function(g){if(void 0===e&&(e=\"function\"===\ntypeof require?require(\"./libwabt.js\"):new window.WabtModule,void 0===e))return;g=g.slice();try{var f=e.readWasm(g,{readDebugNames:!1});f.generateNames();f.applyNames();f.toText({foldExprs:!0,inlineExport:!0})}catch(m){var h=new Blob([g]),l=document.createElement(\"a\");l.download=\"failed.wasm\";l.href=window.URL.createObjectURL(h);l.dataset.downloadurl=[\"application/octet-stream\",l.download,l.href].join(\":\");l.click();window.URL.revokeObjectURL(l.src);console.log(m.toString())}finally{f&&f.destroy()}}};const Hb=DataView.prototype,Ib={size:1,get:Hb.getUint8,set:Hb.setUint8},Jb={size:2,get:Hb.getUint16,set:Hb.setUint16},W={size:4,get:Hb.getUint32,set:Hb.setUint32},Db=Kb([{magic:W},{class:Ib},{data:Ib},{version0:Ib},{osabi:Ib},{abiversion:Ib},{pad0:function(a){return{size:a,get:()=>-1}}(7)},{type:Jb},{machine:Jb},{version1:W},{entry:W},{phoff:W},{shoff:W},{flags:W},{ehsize:Jb},{phentsize:Jb},{phnum:Jb},{shentsize:Jb},{shnum:Jb},{shstrndx:Jb}]);console.assert(52===Db.reduce((a,b)=>a+b.size,0));\nconst Fb=Kb([{type:W},{offset:W},{vaddr:W},{paddr:W},{filesz:W},{memsz:W},{flags:W},{align:W}]);console.assert(32===Fb.reduce((a,b)=>a+b.size,0));const Gb=Kb([{name:W},{type:W},{flags:W},{addr:W},{offset:W},{size:W},{link:W},{info:W},{addralign:W},{entsize:W}]);console.assert(40===Gb.reduce((a,b)=>a+b.size,0));function Kb(a){return a.map(function(b){var c=Object.keys(b);console.assert(1===c.length);c=c[0];b=b[c];console.assert(0<b.size);return{name:c,type:b,size:b.size,get:b.get,set:b.set}})}\nfunction Cb(a,b){const c={};let d=0;for(const e of b)b=e.get.call(a,d,!0),console.assert(void 0===c[e.name]),c[e.name]=b,d+=e.size;return[c,d]}function Eb(a,b,c){const d=[];let e=0;for(var g=0;g<c;g++){const [f,h]=Cb(new DataView(a.buffer,a.byteOffset+e,void 0),b);d.push(f);e+=h}return[d,e]};function Bb(a,b,c,d){var e=new Uint8Array(b);const g=new Uint16Array(b);var f=new Uint32Array(b),h=e[497]||4,l=g[255];if(43605!==l)B(l);else if(l=g[257]|g[258]<<16,1400005704!==l)B(l);else{l=g[259];var m=e[529],n=g[283],p=f[139],q=f[140],r=e[565],A=518<=l?f[142]:255,w=f[146],u=f[147],G=f[150],z=f[151],I=f[152];B(l);B(m);B(n);B(f[133]);B(p);B(q);B(r);B(A);B(w);B(u);B(z);B(G);B(I);e[528]=255;e[529]=m&-97|128;g[274]=56832;g[253]=65535;B(56832);d+=\"\\x00\";B(581632);f[138]=581632;for(e=0;e<d.length;e++)a[581632+\ne]=d.charCodeAt(e);h=512*(h+1);B(h);d=new Uint8Array(b,0,h);b=new Uint8Array(b,h);e=h=0;c&&(h=67108864,e=c.byteLength,a.set(new Uint8Array(c),h));f[134]=h;f[135]=e;a.set(d,524288);a.set(b,1048576);a=new Uint8Array(512);(new Uint16Array(a.buffer))[0]=43605;a[2]=1;c=3;a[c++]=250;a[c++]=184;a[c++]=32768;a[c++]=128;a[c++]=142;a[c++]=192;a[c++]=142;a[c++]=216;a[c++]=142;a[c++]=224;a[c++]=142;a[c++]=232;a[c++]=142;a[c++]=208;a[c++]=188;a[c++]=57344;a[c++]=224;a[c++]=234;a[c++]=0;a[c++]=0;a[c++]=32800;a[c++]=\n128;f=a[c]=0;for(b=0;b<a.length;b++)f+=a[b];a[c]=-f;return{name:\"genroms/kernel.bin\",data:a}}};const Lb=\"undefined\"!==typeof window&&0<=window.navigator.platform.toString().toLowerCase().search(\"win\");\nfunction Sb(a){function b(z){return z.shiftKey&&z.ctrlKey&&(73===z.keyCode||74===z.keyCode||75===z.keyCode)||!r.emu_enabled?!1:z.target?z.target.classList.contains(\"phone_keyboard\")||\"INPUT\"!==z.target.nodeName&&\"TEXTAREA\"!==z.target.nodeName:!0}function c(z){!z.altKey&&m[56]&&h(56,!1);return g(z,!1)}function d(z){!z.altKey&&m[56]&&h(56,!1);return g(z,!0)}function e(){for(var z=Object.keys(m),I,R=0;R<z.length;R++)I=+z[R],m[I]&&h(I,!1);m={}}function g(z,I){if(r.bus&&b(z)){z.preventDefault&&z.preventDefault();\nif(Lb&&(n&&(clearTimeout(q),z.getModifierState&&z.getModifierState(\"AltGraph\")&&p===I&&\"ControlLeft\"===n.code&&\"AltRight\"===z.code||f(n,p),n=null),\"ControlLeft\"===z.code))return n=z,p=I,q=setTimeout(()=>{f(n,p);n=null},10),!1;f(z,I);return!1}}function f(z,I){a:{if(void 0!==z.code){var R=G[z.code];if(void 0!==R)break a}R=A[z.keyCode]}R?h(R,I,z.repeat):console.log(\"Missing char in map: keyCode=\"+(z.keyCode||-1).toString(16)+\" code=\"+z.code)}function h(z,I,R){if(I)m[z]&&!R&&h(z,!1);else if(!m[z])return;\n(m[z]=I)||(z|=128);255<z?(l(z>>8),l(z&255)):l(z)}function l(z){r.bus.send(\"keyboard-code\",z)}var m={},n=null,p=!1,q=0,r=this;this.emu_enabled=!0;var A=new Uint16Array([0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,0,58,0,0,0,0,0,0,1,0,0,0,0,57,57417,57425,57423,57415,57419,57416,57421,80,0,0,0,0,82,83,0,11,2,3,4,5,6,7,8,9,10,0,39,0,13,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,19,31,20,22,47,17,45,21,44,57435,57436,57437,0,0,82,79,80,81,75,76,77,71,72,73,0,0,0,0,0,0,59,60,61,62,63,64,\n65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,0,57435,57400,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),w={8:8,10:13,32:32,39:222,44:188,45:189,46:190,47:191,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,59:186,61:187,91:219,92:220,93:221,96:192,97:65,98:66,99:67,100:68,101:69,102:70,103:71,104:72,105:73,106:74,107:75,\n108:76,109:77,110:78,111:79,112:80,113:81,114:82,115:83,116:84,117:85,118:86,119:87,120:88,121:89,122:90},u={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,42:56,43:187,58:186,60:188,62:190,63:191,64:50,65:65,66:66,67:67,68:68,69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,94:54,95:189,123:219,124:220,125:221,126:192},G={Escape:1,Digit1:2,Digit2:3,Digit3:4,Digit4:5,Digit5:6,Digit6:7,Digit7:8,Digit8:9,Digit9:10,\nDigit0:11,Minus:12,Equal:13,Backspace:14,Tab:15,KeyQ:16,KeyW:17,KeyE:18,KeyR:19,KeyT:20,KeyY:21,KeyU:22,KeyI:23,KeyO:24,KeyP:25,BracketLeft:26,BracketRight:27,Enter:28,ControlLeft:29,KeyA:30,KeyS:31,KeyD:32,KeyF:33,KeyG:34,KeyH:35,KeyJ:36,KeyK:37,KeyL:38,Semicolon:39,Quote:40,Backquote:41,ShiftLeft:42,Backslash:43,KeyZ:44,KeyX:45,KeyC:46,KeyV:47,KeyB:48,KeyN:49,KeyM:50,Comma:51,Period:52,Slash:53,IntlRo:53,ShiftRight:54,NumpadMultiply:55,AltLeft:56,Space:57,CapsLock:58,F1:59,F2:60,F3:61,F4:62,F5:63,\nF6:64,F7:65,F8:66,F9:67,F10:68,NumLock:69,ScrollLock:70,Numpad7:71,Numpad8:72,Numpad9:73,NumpadSubtract:74,Numpad4:75,Numpad5:76,Numpad6:77,NumpadAdd:78,Numpad1:79,Numpad2:80,Numpad3:81,Numpad0:82,NumpadDecimal:83,IntlBackslash:86,F11:87,F12:88,NumpadEnter:57372,ControlRight:57373,NumpadDivide:57397,AltRight:57400,Home:57415,ArrowUp:57416,PageUp:57417,ArrowLeft:57419,ArrowRight:57421,End:57423,ArrowDown:57424,PageDown:57425,Insert:57426,Delete:57427,OSLeft:57435,OSRight:57436,ContextMenu:57437};this.bus=\na;this.destroy=function(){\"undefined\"!==typeof window&&(window.removeEventListener(\"keyup\",c,!1),window.removeEventListener(\"keydown\",d,!1),window.removeEventListener(\"blur\",e,!1))};this.init=function(){\"undefined\"!==typeof window&&(this.destroy(),window.addEventListener(\"keyup\",c,!1),window.addEventListener(\"keydown\",d,!1),window.addEventListener(\"blur\",e,!1))};this.init();this.simulate_press=function(z){z={keyCode:z};g(z,!0);g(z,!1)};this.simulate_char=function(z){var I=z.charCodeAt(0);I in w?this.simulate_press(w[I]):\nI in u?(l(42),this.simulate_press(u[I]),l(170)):console.log(\"ascii -> keyCode not found: \",I,z)}};function Tb(a,b){function c(u){if(!w.enabled||!w.emu_enabled)return!1;var G=b||document.body,z;if(!(z=document.pointerLockElement))a:{for(u=u.target;u.parentNode;){if(u===G){z=!0;break a}u=u.parentNode}z=!1}return z}function d(u){c(u)&&(u=u.changedTouches)&&u.length&&(u=u[u.length-1],r=u.clientX,A=u.clientY)}function e(){if(n||q||p)w.bus.send(\"mouse-click\",[!1,!1,!1]),n=q=p=!1}function g(u){if(w.bus&&c(u)&&w.is_running){var G=0,z=0,I=u.changedTouches;I?I.length&&(I=I[I.length-1],G=I.clientX-r,z=I.clientY-\nA,r=I.clientX,A=I.clientY,u.preventDefault()):\"number\"===typeof u.movementX?(G=u.movementX,z=u.movementY):\"number\"===typeof u.webkitMovementX?(G=u.webkitMovementX,z=u.webkitMovementY):\"number\"===typeof u.mozMovementX?(G=u.mozMovementX,z=u.mozMovementY):(G=u.clientX-r,z=u.clientY-A,r=u.clientX,A=u.clientY);w.bus.send(\"mouse-delta\",[.15*G,-(.15*z)]);b&&w.bus.send(\"mouse-absolute\",[u.pageX-b.offsetLeft,u.pageY-b.offsetTop,b.offsetWidth,b.offsetHeight])}}function f(u){c(u)&&l(u,!0)}function h(u){c(u)&&\nl(u,!1)}function l(u,G){w.bus&&(1===u.which?n=G:2===u.which?q=G:3===u.which&&(p=G),w.bus.send(\"mouse-click\",[n,q,p]),u.preventDefault())}function m(u){if(c(u)){var G=u.wheelDelta||-u.detail;0>G?G=-1:0<G&&(G=1);w.bus.send(\"mouse-wheel\",[G,0]);u.preventDefault()}}var n=!1,p=!1,q=!1,r=0,A=0,w=this;this.enabled=!1;this.emu_enabled=!0;this.bus=a;this.bus.register(\"mouse-enable\",function(u){this.enabled=u},this);this.is_running=!1;this.bus.register(\"emulator-stopped\",function(){this.is_running=!1},this);\nthis.bus.register(\"emulator-started\",function(){this.is_running=!0},this);this.destroy=function(){\"undefined\"!==typeof window&&(window.removeEventListener(\"touchstart\",d,!1),window.removeEventListener(\"touchend\",e,!1),window.removeEventListener(\"touchmove\",g,!1),window.removeEventListener(\"mousemove\",g,!1),window.removeEventListener(\"mousedown\",f,!1),window.removeEventListener(\"mouseup\",h,!1),window.removeEventListener(\"wheel\",m,{passive:!1}))};this.init=function(){\"undefined\"!==typeof window&&(this.destroy(),\nwindow.addEventListener(\"touchstart\",d,!1),window.addEventListener(\"touchend\",e,!1),window.addEventListener(\"touchmove\",g,!1),window.addEventListener(\"mousemove\",g,!1),window.addEventListener(\"mousedown\",f,!1),window.addEventListener(\"mouseup\",h,!1),window.addEventListener(\"wheel\",m,{passive:!1}))};this.init()};function Ub(a){if(\"undefined\"!==typeof window)if(window.AudioContext||window.webkitAudioContext){var b=window.AudioWorklet?Vb:Wb;this.bus=a;this.audio_context=window.AudioContext?new AudioContext:new webkitAudioContext;this.mixer=new Xb(a,this.audio_context);this.pcspeaker=new Yb(a,this.audio_context,this.mixer);this.dac=new b(a,this.audio_context,this.mixer);this.pcspeaker.start();a.register(\"emulator-stopped\",function(){this.audio_context.suspend()},this);a.register(\"emulator-started\",function(){this.audio_context.resume()},\nthis);a.register(\"speaker-confirm-initialized\",function(){a.send(\"speaker-has-initialized\")},this);a.send(\"speaker-has-initialized\")}else console.warn(\"Web browser doesn't support Web Audio API\")}Ub.prototype.destroy=function(){this.audio_context&&this.audio_context.close();this.audio_context=null;this.dac&&this.dac.node_processor&&this.dac.node_processor.port.close();this.dac=null};\nfunction Xb(a,b){function c(d){return function(e){d.gain.setValueAtTime(e,this.audio_context.currentTime)}}this.audio_context=b;this.sources=new Map;this.gain_right=this.gain_left=this.volume_right=this.volume_left=this.volume_both=1;this.node_treble_left=this.audio_context.createBiquadFilter();this.node_treble_right=this.audio_context.createBiquadFilter();this.node_treble_left.type=\"highshelf\";this.node_treble_right.type=\"highshelf\";this.node_treble_left.frequency.setValueAtTime(2E3,this.audio_context.currentTime);\nthis.node_treble_right.frequency.setValueAtTime(2E3,this.audio_context.currentTime);this.node_bass_left=this.audio_context.createBiquadFilter();this.node_bass_right=this.audio_context.createBiquadFilter();this.node_bass_left.type=\"lowshelf\";this.node_bass_right.type=\"lowshelf\";this.node_bass_left.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_bass_right.frequency.setValueAtTime(200,this.audio_context.currentTime);this.node_gain_left=this.audio_context.createGain();this.node_gain_right=\nthis.audio_context.createGain();this.node_merger=this.audio_context.createChannelMerger(2);this.input_left=this.node_treble_left;this.input_right=this.node_treble_right;this.node_treble_left.connect(this.node_bass_left);this.node_bass_left.connect(this.node_gain_left);this.node_gain_left.connect(this.node_merger,0,0);this.node_treble_right.connect(this.node_bass_right);this.node_bass_right.connect(this.node_gain_right);this.node_gain_right.connect(this.node_merger,0,1);this.node_merger.connect(this.audio_context.destination);\na.register(\"mixer-connect\",function(d){this.connect_source(d[0],d[1])},this);a.register(\"mixer-disconnect\",function(d){this.disconnect_source(d[0],d[1])},this);a.register(\"mixer-volume\",function(d){var e=d[0],g=d[1];d=Math.pow(10,d[2]/20);e=0===e?this:this.sources.get(e);void 0===e||e.set_volume(d,g)},this);a.register(\"mixer-gain-left\",function(d){this.gain_left=Math.pow(10,d/20);this.update()},this);a.register(\"mixer-gain-right\",function(d){this.gain_right=Math.pow(10,d/20);this.update()},this);\na.register(\"mixer-treble-left\",c(this.node_treble_left),this);a.register(\"mixer-treble-right\",c(this.node_treble_right),this);a.register(\"mixer-bass-left\",c(this.node_bass_left),this);a.register(\"mixer-bass-right\",c(this.node_bass_right),this)}Xb.prototype.add_source=function(a,b){a=new Zb(this.audio_context,a,this.input_left,this.input_right);this.sources.has(b);this.sources.set(b,a);return a};Xb.prototype.connect_source=function(a,b){a=this.sources.get(a);void 0===a||a.connect(b)};\nXb.prototype.disconnect_source=function(a,b){a=this.sources.get(a);void 0===a||a.disconnect(b)};Xb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:return}this.update()};\nXb.prototype.update=function(){var a=this.volume_both*this.volume_right*this.gain_right;this.node_gain_left.gain.setValueAtTime(this.volume_both*this.volume_left*this.gain_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};\nfunction Zb(a,b,c,d){this.audio_context=a;this.connected_right=this.connected_left=!0;this.volume_right=this.volume_left=this.volume_both=this.gain_hidden=1;this.node_splitter=a.createChannelSplitter(2);this.node_gain_left=a.createGain();this.node_gain_right=a.createGain();b.connect(this.node_splitter);this.node_splitter.connect(this.node_gain_left,0);this.node_gain_left.connect(c);this.node_splitter.connect(this.node_gain_right,1);this.node_gain_right.connect(d)}\nZb.prototype.update=function(){var a=this.connected_right*this.gain_hidden*this.volume_both*this.volume_right;this.node_gain_left.gain.setValueAtTime(this.connected_left*this.gain_hidden*this.volume_both*this.volume_left,this.audio_context.currentTime);this.node_gain_right.gain.setValueAtTime(a,this.audio_context.currentTime)};Zb.prototype.connect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!0;if(b||1===a)this.connected_right=!0;this.update()};\nZb.prototype.disconnect=function(a){var b=!a||2===a;if(b||0===a)this.connected_left=!1;if(b||1===a)this.connected_right=!1;this.update()};Zb.prototype.set_volume=function(a,b){void 0===b&&(b=2);switch(b){case 0:this.volume_left=a;break;case 1:this.volume_right=a;break;case 2:this.volume_both=a;break;default:return}this.update()};Zb.prototype.set_gain_hidden=function(a){this.gain_hidden=a};\nfunction Yb(a,b,c){this.node_oscillator=b.createOscillator();this.node_oscillator.type=\"square\";this.node_oscillator.frequency.setValueAtTime(440,b.currentTime);this.mixer_connection=c.add_source(this.node_oscillator,1);this.mixer_connection.disconnect();a.register(\"pcspeaker-enable\",function(){c.connect_source(1)},this);a.register(\"pcspeaker-disable\",function(){c.disconnect_source(1)},this);a.register(\"pcspeaker-update\",function(d){var e=d[1],g=0;3===d[0]&&(g=Math.min(1193181.6665999999/e,this.node_oscillator.frequency.maxValue),\ng=Math.max(g,0));this.node_oscillator.frequency.setValueAtTime(g,b.currentTime)},this)}Yb.prototype.start=function(){this.node_oscillator.start()};\nfunction Vb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=48E3;b=function(){function f(m){if(0===m)return 1;m*=Math.PI;return Math.sin(m)/m}function h(){var m=Reflect.construct(AudioWorkletProcessor,[],h);m.kernel_size=3;m.queue_data=Array(1024);m.queue_start=0;m.queue_end=0;m.queue_length=0;m.queue_size=m.queue_data.length;m.queued_samples=0;m.source_buffer_previous=l;m.source_buffer_current=l;m.source_samples_per_destination=1;m.source_block_start=0;m.source_time=0;m.source_offset=\n0;m.port.onmessage=n=>{switch(n.data.type){case \"queue\":m.queue_push(n.data.value);break;case \"sampling-rate\":m.source_samples_per_destination=n.data.value/sampleRate}};return m}var l=[new Float32Array(256),new Float32Array(256)];Reflect.setPrototypeOf(h.prototype,AudioWorkletProcessor.prototype);Reflect.setPrototypeOf(h,AudioWorkletProcessor);h.prototype.process=h.prototype.process=function(m,n){for(m=0;m<n[0][0].length;m++){for(var p=0,q=0,r=this.source_offset+this.kernel_size,A=this.source_offset-\nthis.kernel_size+1;A<=r;A++){var w=this.source_block_start+A;p+=this.get_sample(w,0)*this.kernel(this.source_time-A);q+=this.get_sample(w,1)*this.kernel(this.source_time-A)}if(isNaN(p)||isNaN(q))p=q=0,this.dbg_log(\"ERROR: NaN values! Ignoring for now.\");n[0][0][m]=p;n[0][1][m]=q;this.source_time+=this.source_samples_per_destination;this.source_offset=Math.floor(this.source_time)}n=this.source_offset;n+=this.kernel_size+2;this.source_time-=this.source_offset;this.source_block_start+=this.source_offset;\nthis.source_offset=0;this.ensure_enough_data(n);return!0};h.prototype.kernel=function(m){return f(m)*f(m/this.kernel_size)};h.prototype.get_sample=function(m,n){return 0>m?(m+=this.source_buffer_previous[0].length,this.source_buffer_previous[n][m]):this.source_buffer_current[n][m]};h.prototype.ensure_enough_data=function(m){var n=this.source_buffer_current[0].length;n-this.source_block_start<m&&(this.prepare_next_buffer(),this.source_block_start-=n)};h.prototype.prepare_next_buffer=function(){256>\nthis.queued_samples&&this.queue_length&&this.dbg_log(\"Not enough samples - should not happen during midway of playback\");this.source_buffer_previous=this.source_buffer_current;this.source_buffer_current=this.queue_shift();var m=this.source_buffer_current[0].length;if(256>m){for(var n=this.queue_start,p=0;256>m&&p<this.queue_length;)m+=this.queue_data[n][0].length,n=n+1&this.queue_size-1,p++;m=Math.max(m,256);m=[new Float32Array(m),new Float32Array(m)];m[0].set(this.source_buffer_current[0]);m[1].set(this.source_buffer_current[1]);\nn=this.source_buffer_current[0].length;for(var q=0;q<p;q++){var r=this.queue_shift();m[0].set(r[0],n);m[1].set(r[1],n);n+=r[0].length}this.source_buffer_current=m}this.pump()};h.prototype.pump=function(){1024>this.queued_samples/this.source_samples_per_destination&&this.port.postMessage({type:\"pump\"})};h.prototype.queue_push=function(m){this.queue_length<this.queue_size&&(this.queue_data[this.queue_end]=m,this.queue_end=this.queue_end+1&this.queue_size-1,this.queue_length++,this.queued_samples+=m[0].length,\nthis.pump())};h.prototype.queue_shift=function(){if(!this.queue_length)return l;var m=this.queue_data[this.queue_start];this.queue_data[this.queue_start]=null;this.queue_start=this.queue_start+1&this.queue_size-1;this.queue_length--;this.queued_samples-=m[0].length;return m};h.prototype.dbg_log=function(){};registerProcessor(\"dac-processor\",h)}.toString();var d=b.indexOf(\"{\")+1,e=b.lastIndexOf(\"}\");b=b.substring(d,e);b=new Blob([b],{type:\"application/javascript\"});var g=URL.createObjectURL(b);this.node_processor=\nnull;this.node_output=this.audio_context.createGain();this.audio_context.audioWorklet.addModule(g).then(()=>{URL.revokeObjectURL(g);this.node_processor=new AudioWorkletNode(this.audio_context,\"dac-processor\",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2],parameterData:{},processorOptions:{}});this.node_processor.port.postMessage({type:\"sampling-rate\",value:this.sampling_rate});this.node_processor.port.onmessage=f=>{switch(f.data.type){case \"pump\":this.pump()}};this.node_processor.connect(this.node_output)});\nthis.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register(\"dac-send-data\",function(f){this.queue(f)},this);a.register(\"dac-enable\",function(){this.enabled=!0},this);a.register(\"dac-disable\",function(){this.enabled=!1},this);a.register(\"dac-tell-sampling-rate\",function(f){this.sampling_rate=f;this.node_processor&&this.node_processor.port.postMessage({type:\"sampling-rate\",value:f})},this)}\nVb.prototype.queue=function(a){this.node_processor&&this.node_processor.port.postMessage({type:\"queue\",value:a},[a[0].buffer,a[1].buffer])};Vb.prototype.pump=function(){this.enabled&&this.bus.send(\"dac-request-data\")};\nfunction Wb(a,b,c){this.bus=a;this.audio_context=b;this.enabled=!1;this.sampling_rate=22050;this.buffered_time=0;this.rate_ratio=1;this.node_lowpass=this.audio_context.createBiquadFilter();this.node_lowpass.type=\"lowpass\";this.node_output=this.node_lowpass;this.mixer_connection=c.add_source(this.node_output,2);this.mixer_connection.set_gain_hidden(3);a.register(\"dac-send-data\",function(d){this.queue(d)},this);a.register(\"dac-enable\",function(){this.enabled=!0;this.pump()},this);a.register(\"dac-disable\",\nfunction(){this.enabled=!1},this);a.register(\"dac-tell-sampling-rate\",function(d){this.sampling_rate=d;this.rate_ratio=Math.ceil(8E3/d);this.node_lowpass.frequency.setValueAtTime(d/2,this.audio_context.currentTime)},this)}\nWb.prototype.queue=function(a){var b=a[0].length,c=b/this.sampling_rate;if(1<this.rate_ratio){var d=this.audio_context.createBuffer(2,b*this.rate_ratio,this.sampling_rate*this.rate_ratio);for(var e=d.getChannelData(0),g=d.getChannelData(1),f=0,h=0;h<b;h++)for(var l=0;l<this.rate_ratio;l++,f++)e[f]=a[0][h],g[f]=a[1][h]}else d=this.audio_context.createBuffer(2,b,this.sampling_rate),d.copyToChannel?(d.copyToChannel(a[0],0),d.copyToChannel(a[1],1)):(d.getChannelData(0).set(a[0]),d.getChannelData(1).set(a[1]));\na=this.audio_context.createBufferSource();a.buffer=d;a.connect(this.node_lowpass);a.addEventListener(\"ended\",this.pump.bind(this));d=this.audio_context.currentTime;if(this.buffered_time<d)for(this.buffered_time=d,d=.2-c,b=0;b<=d;)b+=c,this.buffered_time+=c,setTimeout(()=>this.pump(),1E3*b);a.start(this.buffered_time);this.buffered_time+=c;setTimeout(()=>this.pump(),0)};Wb.prototype.pump=function(){this.enabled&&(.2<this.buffered_time-this.audio_context.currentTime||this.bus.send(\"dac-request-data\"))};function $b(a,b){function c(h){f.bus&&f.enabled&&(f.send_char(h.which),h.preventDefault())}function d(h){var l=h.which;8===l?(f.send_char(127),h.preventDefault()):9===l&&(f.send_char(9),h.preventDefault())}function e(h){if(f.enabled){for(var l=h.clipboardData.getData(\"text/plain\"),m=0;m<l.length;m++)f.send_char(l.charCodeAt(m));h.preventDefault()}}function g(h){h.target!==a&&a.blur()}var f=this;this.enabled=!0;this.bus=b;this.text=\"\";this.text_new_line=!1;this.last_update=0;this.bus.register(\"serial0-output-byte\",\nfunction(h){h=String.fromCharCode(h);this.show_char(h)},this);this.destroy=function(){a.removeEventListener(\"keypress\",c,!1);a.removeEventListener(\"keydown\",d,!1);a.removeEventListener(\"paste\",e,!1);window.removeEventListener(\"mousedown\",g,!1)};this.init=function(){this.destroy();a.style.display=\"block\";a.addEventListener(\"keypress\",c,!1);a.addEventListener(\"keydown\",d,!1);a.addEventListener(\"paste\",e,!1);window.addEventListener(\"mousedown\",g,!1)};this.init();this.show_char=function(h){\"\\b\"===h?(this.text=\nthis.text.slice(0,-1),this.update()):\"\\r\"!==h&&(this.text+=h,\"\\n\"===h&&(this.text_new_line=!0),this.update())};this.update=function(){var h=Date.now(),l=h-this.last_update;16>l?void 0===this.update_timer&&(this.update_timer=setTimeout(()=>{this.update_timer=void 0;this.last_update=Date.now();this.render()},16-l)):(void 0!==this.update_timer&&(clearTimeout(this.update_timer),this.update_timer=void 0),this.last_update=h,this.render())};this.render=function(){a.value=this.text;this.text_new_line&&(this.text_new_line=\n!1,a.scrollTop=1E9)};this.send_char=function(h){f.bus&&f.bus.send(\"serial0-input\",h)}}\nfunction ac(a,b){this.element=a;if(window.Terminal){var c=this.term=new window.Terminal({logLevel:\"off\"});c.write(\"This is the serial console. Whatever you type or paste here will be sent to COM1\");var d=c.onData(function(e){for(let g=0;g<e.length;g++)b.send(\"serial0-input\",e.charCodeAt(g))});b.register(\"serial0-output-byte\",function(e){c.write(Uint8Array.of(e))},this);this.destroy=function(){d.dispose();c.dispose()}}}ac.prototype.show=function(){this.term&&this.term.open(this.element)};function bc(a,b,c){this.bus=b;this.socket=void 0;this.id=c||0;this.send_queue=[];this.url=a;this.reconnect_interval=1E4;this.last_connect_attempt=Date.now()-this.reconnect_interval;this.send_queue_limit=64;this.destroyed=!1;this.bus.register(\"net\"+this.id+\"-send\",function(d){this.send(d)},this)}bc.prototype.handle_message=function(a){this.bus&&this.bus.send(\"net\"+this.id+\"-receive\",new Uint8Array(a.data))};\nbc.prototype.handle_close=function(){this.destroyed||(this.connect(),setTimeout(this.connect.bind(this),this.reconnect_interval))};bc.prototype.handle_open=function(){for(var a=0;a<this.send_queue.length;a++)this.send(this.send_queue[a]);this.send_queue=[]};bc.prototype.handle_error=function(){};bc.prototype.destroy=function(){this.destroyed=!0;this.socket&&this.socket.close()};\nbc.prototype.connect=function(){if(\"undefined\"!==typeof WebSocket){if(this.socket){var a=this.socket.readyState;if(0===a||1===a)return}a=Date.now();if(!(this.last_connect_attempt+this.reconnect_interval>a)){this.last_connect_attempt=Date.now();try{this.socket=new WebSocket(this.url)}catch(b){console.error(b);return}this.socket.binaryType=\"arraybuffer\";this.socket.onopen=this.handle_open.bind(this);this.socket.onmessage=this.handle_message.bind(this);this.socket.onclose=this.handle_close.bind(this);\nthis.socket.onerror=this.handle_error.bind(this)}}};bc.prototype.send=function(a){this.socket&&1===this.socket.readyState?this.socket.send(a):(this.send_queue.push(a),this.send_queue.length>2*this.send_queue_limit&&(this.send_queue=this.send_queue.slice(-this.send_queue_limit)),this.connect())};bc.prototype.change_proxy=function(a){this.url=a;this.socket&&(this.socket.onclose=function(){},this.socket.onerror=function(){},this.socket.close(),this.socket=void 0)};function X(a){this.cpu_is_running=!1;this.cpu_exception_hook=function(){};var b=qb.create();this.bus=b[0];this.emulator_bus=b[1];var c,d;const e=new WebAssembly.Table({element:\"anyfunc\",initial:1924});b={cpu_exception_hook:f=>this.cpu_exception_hook(f),run_hardware_timers:function(f,h){return c.run_hardware_timers(f,h)},cpu_event_halt:()=>{this.emulator_bus.send(\"cpu-event-halt\")},abort:function(){},microtick:D.microtick,get_rand_int:function(){return k.get_rand_int()},apic_acknowledge_irq:function(){return c.devices.apic.acknowledge_irq()},\nstop_idling:function(){return c.stop_idling()},io_port_read8:function(f){return c.io.port_read8(f)},io_port_read16:function(f){return c.io.port_read16(f)},io_port_read32:function(f){return c.io.port_read32(f)},io_port_write8:function(f,h){c.io.port_write8(f,h)},io_port_write16:function(f,h){c.io.port_write16(f,h)},io_port_write32:function(f,h){c.io.port_write32(f,h)},mmap_read8:function(f){return c.mmap_read8(f)},mmap_read16:function(f){return c.mmap_read16(f)},mmap_read32:function(f){return c.mmap_read32(f)},\nmmap_write8:function(f,h){c.mmap_write8(f,h)},mmap_write16:function(f,h){c.mmap_write16(f,h)},mmap_write32:function(f,h){c.mmap_write32(f,h)},mmap_write64:function(f,h,l){c.mmap_write64(f,h,l)},mmap_write128:function(f,h,l,m,n){c.mmap_write128(f,h,l,m,n)},log_from_wasm:function(f,h){k.read_sized_string_from_mem(d,f,h)},console_log_from_wasm:function(f,h){f=k.read_sized_string_from_mem(d,f,h);console.error(f)},dbg_trace_from_wasm:function(){},codegen_finalize:(f,h,l,m,n)=>{c.codegen_finalize(f,h,l,\nm,n)},jit_clear_func:f=>c.jit_clear_func(f),jit_clear_all_funcs:()=>c.jit_clear_all_funcs(),__indirect_function_table:e};let g=a.wasm_fn;g||(g=f=>new Promise(h=>{let l=\"v86.wasm\",m=\"v86-fallback.wasm\";if(a.wasm_path){l=a.wasm_path;const n=l.lastIndexOf(\"/\");m=(-1===n?\"\":l.substr(0,n))+\"/\"+m}else\"undefined\"===typeof window&&\"string\"===typeof __dirname?(l=__dirname+\"/\"+l,m=__dirname+\"/\"+m):(l=\"build/\"+l,m=\"build/\"+m);k.load_file(l,{done:async n=>{try{const {instance:p}=await WebAssembly.instantiate(n,\nf);this.wasm_source=n;h(p.exports)}catch(p){k.load_file(m,{done:async q=>{const {instance:r}=await WebAssembly.instantiate(q,f);this.wasm_source=q;h(r.exports)}})}},progress:n=>{this.emulator_bus.send(\"download-progress\",{file_index:0,file_count:1,file_name:l,lengthComputable:n.lengthComputable,total:n.total,loaded:n.loaded})}})}));g({env:b}).then(f=>{d=f.memory;f.rust_init();f=this.v86=new D(this.emulator_bus,{exports:f,wasm_table:e});c=f.cpu;this.continue_init(f,a)});this.zstd_worker=null;this.zstd_worker_request_id=\n0}H.exportSymbol(\"V86\",X);\nX.prototype.continue_init=async function(a,b){function c(q,r){switch(q){case \"hda\":e.hda=this.disk_images.hda=r;break;case \"hdb\":e.hdb=this.disk_images.hdb=r;break;case \"cdrom\":e.cdrom=this.disk_images.cdrom=r;break;case \"fda\":e.fda=this.disk_images.fda=r;break;case \"fdb\":e.fdb=this.disk_images.fdb=r;break;case \"multiboot\":e.multiboot=this.disk_images.multiboot=r.buffer;break;case \"bzimage\":e.bzimage=this.disk_images.bzimage=r.buffer;break;case \"initrd\":e.initrd=this.disk_images.initrd=r.buffer;break;\ncase \"bios\":e.bios=r.buffer;break;case \"vga_bios\":e.vga_bios=r.buffer;break;case \"initial_state\":e.initial_state=r.buffer;break;case \"fs9p_json\":e.fs9p_json=r}}async function d(){if(e.fs9p&&e.fs9p_json&&!e.initial_state&&(e.fs9p.load_from_json(e.fs9p_json),b.bzimage_initrd_from_filesystem)){const {bzimage_path:q,initrd_path:r}=this.get_bzimage_initrd_from_filesystem(e.fs9p),[A,w]=await Promise.all([e.fs9p.read_file(r),e.fs9p.read_file(q)]);c.call(this,\"initrd\",new k.SyncBuffer(A.buffer));c.call(this,\n\"bzimage\",new k.SyncBuffer(w.buffer))}this.serial_adapter&&this.serial_adapter.show&&this.serial_adapter.show();this.v86.init(e);e.initial_state&&(a.restore_state(e.initial_state),e.initial_state=void 0);b.autostart&&this.v86.run();this.emulator_bus.send(\"emulator-loaded\")}this.bus.register(\"emulator-stopped\",function(){this.cpu_is_running=!1;this.screen_adapter.pause()},this);this.bus.register(\"emulator-started\",function(){this.cpu_is_running=!0;this.screen_adapter.continue()},this);var e={};this.disk_images=\n{fda:void 0,fdb:void 0,hda:void 0,hdb:void 0,cdrom:void 0};var g=b.boot_order?b.boot_order:b.fda?801:b.hda?786:291;e.acpi=b.acpi;e.disable_jit=b.disable_jit;e.load_devices=!0;e.memory_size=b.memory_size||67108864;e.vga_memory_size=b.vga_memory_size||8388608;e.boot_order=g;e.fastboot=b.fastboot||!1;e.fda=void 0;e.fdb=void 0;e.uart1=b.uart1;e.uart2=b.uart2;e.uart3=b.uart3;e.cmdline=b.cmdline;e.preserve_mac_from_state_image=b.preserve_mac_from_state_image;e.mac_address_translation=b.mac_address_translation;\ne.cpuid_level=b.cpuid_level;e.virtio_balloon=b.virtio_balloon;e.virtio_console=b.virtio_console;e.virtio_net=b.virtio_net;e.screen_options=b.screen_options;if(g=b.network_relay_url||b.net_device&&b.net_device.relay_url)\"fetch\"===g?this.network_adapter=new cc(this.bus,b.net_device):\"inbrowser\"===g?this.network_adapter=new dc(this.bus,b.net_device):g.startsWith(\"wisp://\")||g.startsWith(\"wisps://\")?this.network_adapter=new ec(g,this.bus,b.net_device):this.network_adapter=new bc(g,this.bus);e.net_device=\nb.net_device||{type:\"ne2k\"};g=b.screen||{};b.screen_container&&(g.container=b.screen_container);b.disable_keyboard||(this.keyboard_adapter=new Sb(this.bus));b.disable_mouse||(this.mouse_adapter=new Tb(this.bus,g.container));this.screen_adapter=g.container?new aa(g,()=>this.v86.cpu.devices.vga&&this.v86.cpu.devices.vga.screen_fill_buffer()):new fc;e.screen=this.screen_adapter;e.screen_options=g;b.serial_container&&(this.serial_adapter=new $b(b.serial_container,this.bus));b.serial_container_xtermjs&&\n(this.serial_adapter=new ac(b.serial_container_xtermjs,this.bus));b.disable_speaker||(this.speaker_adapter=new Ub(this.bus));var f=[];g=(q,r)=>{if(r)if(r.get&&r.set&&r.load)f.push({name:q,loadable:r});else{if(\"bios\"===q||\"vga_bios\"===q||\"initial_state\"===q||\"multiboot\"===q||\"bzimage\"===q||\"initrd\"===q)r.async=!1;if(\"fda\"===q||\"fdb\"===q)r.async=!1;r.url&&!r.async?f.push({name:q,url:r.url,size:r.size}):f.push({name:q,loadable:k.buffer_from_object(r,this.zstd_decompress_worker.bind(this))})}};b.state&&\nconsole.warn(\"Warning: Unknown option 'state'. Did you mean 'initial_state'?\");g(\"bios\",b.bios);g(\"vga_bios\",b.vga_bios);g(\"cdrom\",b.cdrom);g(\"hda\",b.hda);g(\"hdb\",b.hdb);g(\"fda\",b.fda);g(\"fdb\",b.fdb);g(\"initial_state\",b.initial_state);g(\"multiboot\",b.multiboot);g(\"bzimage\",b.bzimage);g(\"initrd\",b.initrd);if(b.filesystem){g=b.filesystem.basefs;var h=b.filesystem.baseurl;let q=new gc;h&&(q=new hc(q,h));e.fs9p=this.fs9p=new Z(q);if(g){if(\"object\"===typeof g){var l=g.size;g=g.url}f.push({name:\"fs9p_json\",\nurl:g,size:l,as_json:!0})}}var m=this,n=f.length,p=function(q){if(q===n)setTimeout(d.bind(this),0);else{var r=f[q];r.loadable?(r.loadable.onload=function(){c.call(this,r.name,r.loadable);p(q+1)}.bind(this),r.loadable.load()):k.load_file(r.url,{done:function(A){r.url.endsWith(\".zst\")&&\"initial_state\"!==r.name&&(A=this.zstd_decompress(r.size,new Uint8Array(A)));c.call(this,r.name,r.as_json?A:new k.SyncBuffer(A));p(q+1)}.bind(this),progress:function(A){200===A.target.status?m.emulator_bus.send(\"download-progress\",\n{file_index:q,file_count:n,file_name:r.url,lengthComputable:A.lengthComputable,total:A.total||r.size,loaded:A.loaded}):m.emulator_bus.send(\"download-error\",{file_index:q,file_count:n,file_name:r.url,request:A.target})},as_json:r.as_json})}}.bind(this);p(0)};\nX.prototype.zstd_decompress=function(a,b){const c=this.v86.cpu;this.zstd_context=c.zstd_create_ctx(b.length);(new Uint8Array(c.wasm_memory.buffer)).set(b,c.zstd_get_src_ptr(this.zstd_context));b=c.zstd_read(this.zstd_context,a);const d=c.wasm_memory.buffer.slice(b,b+a);c.zstd_read_free(b,a);c.zstd_free_ctx(this.zstd_context);this.zstd_context=null;return d};\nX.prototype.zstd_decompress_worker=async function(a,b){if(!this.zstd_worker){const c=URL.createObjectURL(new Blob([\"(\"+function(){let d;globalThis.onmessage=function(e){if(d){var {src:g,decompressed_size:f,id:h}=e.data;e=d.exports;var l=e.zstd_create_ctx(g.length);(new Uint8Array(e.memory.buffer)).set(g,e.zstd_get_src_ptr(l));var m=e.zstd_read(l,f),n=e.memory.buffer.slice(m,m+f);e.zstd_read_free(m,f);e.zstd_free_ctx(l);postMessage({result:n,id:h},[n])}else l=Object.fromEntries(\"cpu_exception_hook run_hardware_timers cpu_event_halt microtick get_rand_int apic_acknowledge_irq stop_idling io_port_read8 io_port_read16 io_port_read32 io_port_write8 io_port_write16 io_port_write32 mmap_read8 mmap_read16 mmap_read32 mmap_write8 mmap_write16 mmap_write32 mmap_write64 mmap_write128 codegen_finalize jit_clear_func jit_clear_all_funcs\".split(\" \").map(p=>\n[p,()=>console.error(\"zstd worker unexpectedly called \"+p)])),l.__indirect_function_table=new WebAssembly.Table({element:\"anyfunc\",initial:1024}),l.abort=()=>{throw Error(\"zstd worker aborted\");},l.log_from_wasm=l.console_log_from_wasm=(p,q)=>{console.log(String.fromCharCode(...(new Uint8Array(d.exports.memory.buffer,p,q))))},l.dbg_trace_from_wasm=()=>console.trace(),d=new WebAssembly.Instance(new WebAssembly.Module(e.data),{env:l})}}.toString()+\")()\"],{type:\"text/javascript\"}));this.zstd_worker=\nnew Worker(c);URL.revokeObjectURL(c);this.zstd_worker.postMessage(this.wasm_source,[this.wasm_source])}return new Promise(c=>{const d=this.zstd_worker_request_id++,e=async g=>{g.data.id===d&&(this.zstd_worker.removeEventListener(\"message\",e),c(g.data.result))};this.zstd_worker.addEventListener(\"message\",e);this.zstd_worker.postMessage({src:b,decompressed_size:a,id:d},[b.buffer])})};\nX.prototype.get_bzimage_initrd_from_filesystem=function(a){const b=(a.read_dir(\"/\")||[]).map(e=>\"/\"+e);a=(a.read_dir(\"/boot/\")||[]).map(e=>\"/boot/\"+e);let c,d;for(const e of[].concat(b,a)){const g=/old/i.test(e)||/fallback/i.test(e),f=/vmlinuz/i.test(e)||/bzimage/i.test(e),h=/initrd/i.test(e)||/initramfs/i.test(e);!f||d&&g||(d=e);!h||c&&g||(c=e)}c&&d||(console.log(\"Failed to find bzimage or initrd in filesystem. Files:\"),console.log(b.join(\" \")),console.log(a.join(\" \")));return{initrd_path:c,bzimage_path:d}};\nX.prototype.run=async function(){this.v86.run()};H.exportProperty(X.prototype,\"run\",X.prototype.run);X.prototype.stop=async function(){this.cpu_is_running&&await new Promise(a=>{const b=()=>{this.remove_listener(\"emulator-stopped\",b);a()};this.add_listener(\"emulator-stopped\",b);this.v86.stop()})};H.exportProperty(X.prototype,\"stop\",X.prototype.stop);\nX.prototype.destroy=async function(){await this.stop();this.v86.destroy();this.keyboard_adapter&&this.keyboard_adapter.destroy();this.network_adapter&&this.network_adapter.destroy();this.mouse_adapter&&this.mouse_adapter.destroy();this.screen_adapter&&this.screen_adapter.destroy();this.serial_adapter&&this.serial_adapter.destroy();this.speaker_adapter&&this.speaker_adapter.destroy()};H.exportProperty(X.prototype,\"destroy\",X.prototype.destroy);X.prototype.restart=function(){this.v86.restart()};\nH.exportProperty(X.prototype,\"restart\",X.prototype.restart);X.prototype.add_listener=function(a,b){this.bus.register(a,b,this)};H.exportProperty(X.prototype,\"add_listener\",X.prototype.add_listener);X.prototype.remove_listener=function(a,b){this.bus.unregister(a,b)};H.exportProperty(X.prototype,\"remove_listener\",X.prototype.remove_listener);X.prototype.restore_state=async function(a){this.v86.restore_state(a)};H.exportProperty(X.prototype,\"restore_state\",X.prototype.restore_state);\nX.prototype.save_state=async function(){return this.v86.save_state()};H.exportProperty(X.prototype,\"save_state\",X.prototype.save_state);X.prototype.get_instruction_counter=function(){return this.v86?this.v86.cpu.instruction_counter[0]>>>0:0};H.exportProperty(X.prototype,\"get_instruction_counter\",X.prototype.get_instruction_counter);X.prototype.is_running=function(){return this.cpu_is_running};H.exportProperty(X.prototype,\"is_running\",X.prototype.is_running);\nX.prototype.set_fda=async function(a){if(a.url&&!a.async)k.load_file(a.url,{done:b=>{this.v86.cpu.devices.fdc.set_fda(new k.SyncBuffer(b))}});else{const b=k.buffer_from_object(a,this.zstd_decompress_worker.bind(this));b.onload=()=>{this.v86.cpu.devices.fdc.set_fda(b)};await b.load()}};H.exportProperty(X.prototype,\"set_fda\",X.prototype.set_fda);X.prototype.eject_fda=function(){this.v86.cpu.devices.fdc.eject_fda()};H.exportProperty(X.prototype,\"eject_fda\",X.prototype.eject_fda);\nX.prototype.keyboard_send_scancodes=function(a){for(var b=0;b<a.length;b++)this.bus.send(\"keyboard-code\",a[b])};H.exportProperty(X.prototype,\"keyboard_send_scancodes\",X.prototype.keyboard_send_scancodes);X.prototype.keyboard_send_keys=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_press(a[b])};H.exportProperty(X.prototype,\"keyboard_send_keys\",X.prototype.keyboard_send_keys);X.prototype.keyboard_send_text=function(a){for(var b=0;b<a.length;b++)this.keyboard_adapter.simulate_char(a[b])};\nH.exportProperty(X.prototype,\"keyboard_send_text\",X.prototype.keyboard_send_text);X.prototype.screen_make_screenshot=function(){return this.screen_adapter?this.screen_adapter.make_screenshot():null};H.exportProperty(X.prototype,\"screen_make_screenshot\",X.prototype.screen_make_screenshot);X.prototype.screen_set_scale=function(a,b){this.screen_adapter&&this.screen_adapter.set_scale(a,b)};H.exportProperty(X.prototype,\"screen_set_scale\",X.prototype.screen_set_scale);\nX.prototype.screen_go_fullscreen=function(){if(this.screen_adapter){var a=document.getElementById(\"screen_container\");if(a){var b=a.requestFullScreen||a.webkitRequestFullscreen||a.mozRequestFullScreen||a.msRequestFullScreen;b&&(b.call(a),(a=document.getElementsByClassName(\"phone_keyboard\")[0])&&a.focus());try{navigator.keyboard.lock()}catch(c){}this.lock_mouse()}}};H.exportProperty(X.prototype,\"screen_go_fullscreen\",X.prototype.screen_go_fullscreen);\nX.prototype.lock_mouse=function(){var a=document.body,b=a.requestPointerLock||a.mozRequestPointerLock||a.webkitRequestPointerLock;b&&b.call(a)};H.exportProperty(X.prototype,\"lock_mouse\",X.prototype.lock_mouse);X.prototype.mouse_set_status=function(a){this.mouse_adapter&&(this.mouse_adapter.emu_enabled=a)};X.prototype.keyboard_set_status=function(a){this.keyboard_adapter&&(this.keyboard_adapter.emu_enabled=a)};H.exportProperty(X.prototype,\"keyboard_set_status\",X.prototype.keyboard_set_status);\nX.prototype.serial0_send=function(a){for(var b=0;b<a.length;b++)this.bus.send(\"serial0-input\",a.charCodeAt(b))};H.exportProperty(X.prototype,\"serial0_send\",X.prototype.serial0_send);X.prototype.serial_send_bytes=function(a,b){for(var c=0;c<b.length;c++)this.bus.send(\"serial\"+a+\"-input\",b[c])};H.exportProperty(X.prototype,\"serial_send_bytes\",X.prototype.serial_send_bytes);X.prototype.serial_set_modem_status=function(a,b){this.bus.send(\"serial\"+a+\"-modem-status-input\",b)};\nX.prototype.serial_set_carrier_detect=function(a,b){this.bus.send(\"serial\"+a+\"-carrier-detect-input\",b)};X.prototype.serial_set_ring_indicator=function(a,b){this.bus.send(\"serial\"+a+\"-ring-indicator-input\",b)};X.prototype.serial_set_data_set_ready=function(a,b){this.bus.send(\"serial\"+a+\"-data-set-ready-input\",b)};X.prototype.serial_set_clear_to_send=function(a,b){this.bus.send(\"serial\"+a+\"-clear-to-send-input\",b)};\nX.prototype.mount_fs=async function(a,b,c){var d=new gc;b&&(d=new hc(d,b));d=new Z(d,this.fs9p.qidcounter);b&&d.load_from_json(c);a=this.fs9p.Mount(a,d);if(-2===a)throw new ic;if(-17===a)throw new jc;if(0>a)throw Error(\"Failed to mount. Error number: \"+-a);};H.exportProperty(X.prototype,\"mount_fs\",X.prototype.mount_fs);X.prototype.create_file=async function(a,b){var c=this.fs9p;if(c){var d=a.split(\"/\");d=d[d.length-1];a=c.SearchPath(a).parentid;if(\"\"!==d&&-1!==a)await c.CreateBinaryFile(d,a,b);else return Promise.reject(new ic)}};\nH.exportProperty(X.prototype,\"create_file\",X.prototype.create_file);X.prototype.read_file=async function(a){var b=this.fs9p;if(b)return(a=await b.read_file(a))?a:Promise.reject(new ic)};H.exportProperty(X.prototype,\"read_file\",X.prototype.read_file);\nX.prototype.automatically=function(a){const b=c=>{const d=c[0];if(d){var e=c.slice(1);d.sleep?setTimeout(()=>b(e),1E3*d.sleep):d.vga_text?this.wait_until_vga_screen_contains(d.vga_text).then(()=>b(e)):d.keyboard_send?(Array.isArray(d.keyboard_send)?this.keyboard_send_scancodes(d.keyboard_send):this.keyboard_send_text(d.keyboard_send),b(e)):d.call&&(d.call(),b(e))}};b(a)};\nX.prototype.wait_until_vga_screen_contains=function(a){return new Promise(b=>{function c(f){return\"string\"===typeof a?f.includes(a):a.test(f)}function d(f){[f]=f;e.add(f)}for(const f of this.screen_adapter.get_text_screen())if(c(f)){b(!0);return}const e=new Set,g=()=>{for(const f of e){const h=this.screen_adapter.get_text_row(f);if(c(h)){this.remove_listener(\"screen-put-char\",d);b();return}}e.clear();setTimeout(g,100)};g();this.add_listener(\"screen-put-char\",d)})};\nX.prototype.read_memory=function(a,b){return this.v86.cpu.read_blob(a,b)};X.prototype.write_memory=function(a,b){this.v86.cpu.write_blob(a,b)};X.prototype.set_serial_container_xtermjs=function(a){this.serial_adapter&&this.serial_adapter.destroy&&this.serial_adapter.destroy();this.serial_adapter=new ac(a,this.bus);this.serial_adapter.show()};function jc(a){this.message=a||\"File already exists\"}jc.prototype=Error.prototype;function ic(a){this.message=a||\"File not found\"}ic.prototype=Error.prototype;var kc={Connector:function(a){this.listeners={};this.pair=a;a.addEventListener(\"message\",function(b){b=b.data;for(var c=this.listeners[b[0]],d=0;d<c.length;d++){var e=c[d];e.fn.call(e.this_value,b[1])}}.bind(this),!1)}};kc.Connector.prototype.register=function(a,b,c){var d=this.listeners[a];void 0===d&&(d=this.listeners[a]=[]);d.push({fn:b,this_value:c})};kc.Connector.prototype.send=function(a,b,c){this.pair&&this.pair.postMessage([a,b],c)};kc.init=function(a){return new kc.Connector(a)};function fc(){var a,b=0,c=0;this.put_char=function(d,e,g){a[d*b+e]=g};this.destroy=function(){};this.pause=function(){};this.continue=function(){};this.set_mode=function(){};this.set_font_bitmap=function(){};this.set_font_page=function(){};this.clear_screen=function(){};this.set_size_text=function(d,e){if(d!==b||e!==c)a=new Uint8Array(d*e),b=d,c=e};this.set_size_graphical=function(){};this.set_scale=function(){};this.update_cursor_scanline=function(){};this.update_cursor=function(){};this.update_buffer=\nfunction(){};this.get_text_screen=function(){for(var d=[],e=0;e<c;e++)d.push(this.get_text_row(e));return d};this.get_text_row=function(d){d*=b;return String.fromCharCode.apply(String,a.subarray(d,d+b))};this.set_size_text(80,25)};function dc(a,b){b=b.id||0;this.bus=a;this.bus_send_msgid=`net${b}-send`;this.bus_recv_msgid=`net${b}-receive`;this.channel=new BroadcastChannel(`v86-inbrowser-${b}`);this.is_open=!0;this.nic_to_hub_fn=c=>{this.channel.postMessage(c)};this.bus.register(this.bus_send_msgid,this.nic_to_hub_fn,this);this.hub_to_nic_fn=c=>{this.bus.send(this.bus_recv_msgid,c.data)};this.channel.addEventListener(\"message\",this.hub_to_nic_fn)}\ndc.prototype.destroy=function(){this.is_open&&(this.bus.unregister(this.bus_send_msgid,this.nic_to_hub_fn),this.channel.removeEventListener(\"message\",this.hub_to_nic_fn),this.channel.close(),this.is_open=!1)};const lc=(new Date(\"1970-01-01T00:00:00Z\")).getTime(),mc=(new Date(\"1900-01-01T00:00:00Z\")).getTime(),nc=lc-mc,oc=Math.pow(2,32),pc=[118,56,54];function qc(a){return[0,1,2,3,4,5].map(b=>a[b].toString(16)).map(b=>1===b.length?\"0\"+b:b).join(\":\")}function rc(a){return a[0]<<24|a[1]<<16|a[2]<<8|a[3]}\nclass sc{constructor(a,b){a=Math.min(a,16);this.maximum_capacity=b?Math.max(b,a):0;this.length=this.head=this.tail=0;this.buffer=new Uint8Array(a)}write(a){const b=a.length;var c=this.length+b;let d=this.buffer.length;if(d<c){for(;d<c;)d*=2;if(this.maximum_capacity&&d>this.maximum_capacity)throw Error(\"stream capacity overflow in GrowableRingbuffer.write(), package dropped\");c=new Uint8Array(d);this.peek(c);this.tail=0;this.head=this.length;this.buffer=c}c=this.buffer;const e=this.head+b;if(e>d){const g=\nd-this.head;c.set(a.subarray(0,g),this.head);c.set(a.subarray(g))}else c.set(a,this.head);this.head=e%d;this.length+=b}peek(a){const b=Math.min(this.length,a.length);if(b){const e=this.buffer;var c=e.length,d=this.tail+b;d>c?(d%=c,c-=this.tail,a.set(e.subarray(this.tail)),a.set(e.subarray(0,d),c)):a.set(e.subarray(this.tail,d))}return b}remove(a){a>this.length&&(a=this.length);a&&(this.tail=(this.tail+a)%this.buffer.length,this.length-=a);return a}}\nfunction tc(){const a=new Uint8Array(1518),b=a.buffer,c=a.byteOffset;return{eth_frame:a,eth_frame_view:new DataView(b),eth_payload_view:new DataView(b,c+14,1500),ipv4_payload_view:new DataView(b,c+34,1480),udp_payload_view:new DataView(b,c+42,1472),text_encoder:new TextEncoder}}function uc(a,b,c,d){d.eth_frame.set(b,c.byteOffset+a);return b.length}\nfunction vc(a,b,c,d){const e=c.byteOffset+(a&-2);d=d.eth_frame;for(c=c.byteOffset;c<e;c+=2)b+=d[c]<<8|d[c+1];for(a&1&&(b+=d[e]<<8);b>>16;)b=(b&65535)+(b>>16);return~b&65535}\nfunction wc(a,b){a.eth_frame.fill(0);var c=a.eth_frame,d=c.subarray,e=a.eth_frame_view;uc(0,b.eth.dest,e,a);uc(6,b.eth.src,e,a);e.setUint16(12,b.eth.ethertype);e=14;if(b.arp){var g=a.eth_payload_view;g.setUint16(0,b.arp.htype);g.setUint16(2,b.arp.ptype);g.setUint8(4,b.arp.sha.length);g.setUint8(5,b.arp.spa.length);g.setUint16(6,b.arp.oper);uc(8,b.arp.sha,g,a);uc(14,b.arp.spa,g,a);uc(18,b.arp.tha,g,a);uc(24,b.arp.tpa,g,a);e+=28}else if(b.ipv4){g=a.eth_payload_view;var f=20;if(b.icmp){var h=a.ipv4_payload_view;\nh.setUint8(0,b.icmp.type);h.setUint8(1,b.icmp.code);h.setUint16(2,0);var l=4+uc(4,b.icmp.data,h,a);h.setUint16(2,vc(l,0,h,a));f+=l}else if(b.udp){h=a.ipv4_payload_view;var m=8;if(b.dhcp){l=m;var n=a.udp_payload_view;n.setUint8(0,b.dhcp.op);n.setUint8(1,b.dhcp.htype);n.setUint8(2,b.dhcp.hlen);n.setUint8(3,b.dhcp.hops);n.setUint32(4,b.dhcp.xid);n.setUint16(8,b.dhcp.secs);n.setUint16(10,b.dhcp.flags);n.setUint32(12,b.dhcp.ciaddr);n.setUint32(16,b.dhcp.yiaddr);n.setUint32(20,b.dhcp.siaddr);n.setUint32(24,\nb.dhcp.giaddr);uc(28,b.dhcp.chaddr,n,a);n.setUint32(236,1669485411);m=240;for(var p of b.dhcp.options)m+=uc(m,p,n,a);l+=m}else if(b.dns){p=m;m=a.udp_payload_view;m.setUint16(0,b.dns.id);m.setUint16(2,b.dns.flags);m.setUint16(4,b.dns.questions.length);m.setUint16(6,b.dns.answers.length);let A=12;for(var q=0;q<b.dns.questions.length;++q){var r=b.dns.questions[q];for(n of r.name){const w=a.text_encoder.encodeInto(n,a.eth_frame.subarray(m.byteOffset+(A+1))).written;m.setUint8(A,w);A+=1+w}m.setUint16(A,\nr.type);A+=2;m.setUint16(A,r.class);A+=2}for(q=0;q<b.dns.answers.length;++q){n=b.dns.answers[q];for(l of n.name)r=a.text_encoder.encodeInto(l,a.eth_frame.subarray(m.byteOffset+(A+1))).written,m.setUint8(A,r),A+=1+r;m.setUint16(A,n.type);A+=2;m.setUint16(A,n.class);A+=2;m.setUint32(A,n.ttl);A+=4;m.setUint16(A,n.data.length);A+=2;A+=uc(A,n.data,m,a)}l=p+A}else b.ntp?(l=m,n=a.udp_payload_view,n.setUint8(0,b.ntp.flags),n.setUint8(1,b.ntp.stratum),n.setUint8(2,b.ntp.poll),n.setUint8(3,b.ntp.precision),\nn.setUint32(4,b.ntp.root_delay),n.setUint32(8,b.ntp.root_disp),n.setUint32(12,b.ntp.ref_id),n.setUint32(16,b.ntp.ref_ts_i),n.setUint32(20,b.ntp.ref_ts_f),n.setUint32(24,b.ntp.ori_ts_i),n.setUint32(28,b.ntp.ori_ts_f),n.setUint32(32,b.ntp.rec_ts_i),n.setUint32(36,b.ntp.rec_ts_f),n.setUint32(40,b.ntp.trans_ts_i),n.setUint32(44,b.ntp.trans_ts_f),l+=48):l=m+uc(0,b.udp.data,a.udp_payload_view,a);m=l;h.setUint16(0,b.udp.sport);h.setUint16(2,b.udp.dport);h.setUint16(4,m);h.setUint16(6,0);h.setUint16(6,vc(m,\n(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+17+m,h,a));f+=m}else b.tcp&&(h=a.ipv4_payload_view,l=0,n=b.tcp,n.fin&&(l|=1),n.syn&&(l|=2),n.rst&&(l|=4),n.psh&&(l|=8),n.ack&&(l|=16),n.urg&&(l|=32),n.ece&&(l|=64),n.cwr&&(l|=128),h.setUint16(0,n.sport),h.setUint16(2,n.dport),h.setUint32(4,n.seq),h.setUint32(8,n.ackn),h.setUint8(12,80),h.setUint8(13,l),h.setUint16(14,n.winsize),h.setUint16(16,0),h.setUint16(18,n.urgent||\n0),l=20,b.tcp_data&&(l+=uc(20,b.tcp_data,h,a)),h.setUint16(16,vc(l,(b.ipv4.src[0]<<8|b.ipv4.src[1])+(b.ipv4.src[2]<<8|b.ipv4.src[3])+(b.ipv4.dest[0]<<8|b.ipv4.dest[1])+(b.ipv4.dest[2]<<8|b.ipv4.dest[3])+6+l,h,a)),f+=l);g.setUint8(0,69);g.setUint8(1,b.ipv4.tos||0);g.setUint16(2,f);g.setUint16(4,b.ipv4.id||0);g.setUint8(6,64);g.setUint8(8,b.ipv4.ttl||32);g.setUint8(9,b.ipv4.proto);g.setUint16(10,0);uc(12,b.ipv4.src,g,a);uc(16,b.ipv4.dest,g,a);g.setUint16(10,vc(20,0,g,a));e+=f}return d.call(c,0,e)}\nfunction xc(a,b){fetch(`https://${b.doh_server||\"cloudflare-dns.com\"}/dns-query`,{method:\"POST\",headers:[[\"content-type\",\"application/dns-message\"]],body:a.udp.data}).then(async c=>{c={eth:{ethertype:2048,src:b.router_mac,dest:a.eth.src},ipv4:{proto:17,src:b.router_ip,dest:a.ipv4.src},udp:{sport:53,dport:a.udp.sport,data:new Uint8Array(await c.arrayBuffer())}};b.receive(wc(b.eth_encoder_buf,c))});return!0}\nfunction yc(a,b){let c={};c.eth={ethertype:2048,src:b.router_mac,dest:a.eth.src};c.ipv4={proto:17,src:b.router_ip,dest:b.vm_ip};c.udp={sport:67,dport:68};c.dhcp={htype:1,hlen:6,hops:0,xid:a.dhcp.xid,secs:0,flags:0,ciaddr:0,yiaddr:rc(b.vm_ip),siaddr:rc(b.router_ip),giaddr:rc(b.router_ip),chaddr:a.dhcp.chaddr};let d=[],e=a.dhcp.options.find(function(g){return 53===g[0]});e&&3===e[2]&&(a.dhcp.op=3);1===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,1,2])));3===a.dhcp.op&&(c.dhcp.op=2,d.push(new Uint8Array([53,\n1,5])),d.push(new Uint8Array([51,4,8,0,0,0])));a=[b.router_ip[0],b.router_ip[1],b.router_ip[2],b.router_ip[3]];d.push(new Uint8Array([1,4,255,255,255,0]));b.masquerade&&(d.push(new Uint8Array([3,4].concat(a))),d.push(new Uint8Array([6,4].concat(a))));d.push(new Uint8Array([54,4].concat(a)));d.push(new Uint8Array([60,3].concat(pc)));d.push(new Uint8Array([255,0]));c.dhcp.options=d;b.receive(wc(b.eth_encoder_buf,c))}\nfunction zc(a,b){let c={};var d=(new DataView(a.buffer,a.byteOffset,a.byteLength)).getUint16(12),e={ethertype:d,dest:a.subarray(0,6),dest_s:qc(a.subarray(0,6)),src:a.subarray(6,12),src_s:qc(a.subarray(6,12))};c.eth=e;a=a.subarray(14,a.length);if(2048===d){var g=new DataView(a.buffer,a.byteOffset,a.byteLength),f=a[0]>>4&15;e=a[0]&15;var h=g.getUint8(1),l=g.getUint16(2);let m=g.getUint8(8);d=g.getUint8(9);g=g.getUint16(10);f={version:f,ihl:e,tos:h,len:l,ttl:m,proto:d,ip_checksum:g,src:a.subarray(12,\n16),dest:a.subarray(16,20)};c.ipv4=f;e=a.subarray(4*e,l);if(1===d)a=new DataView(e.buffer,e.byteOffset,e.byteLength),a={type:a.getUint8(0),code:a.getUint8(1),checksum:a.getUint16(2),data:e.subarray(4)},c.icmp=a;else if(6===d)d=new DataView(e.buffer,e.byteOffset,e.byteLength),a={sport:d.getUint16(0),dport:d.getUint16(2),seq:d.getUint32(4),ackn:d.getUint32(8),doff:d.getUint8(12)>>4,winsize:d.getUint16(14),checksum:d.getUint16(16),urgent:d.getUint16(18)},d=d.getUint8(13),a.fin=!!(d&1),a.syn=!!(d&2),\na.rst=!!(d&4),a.psh=!!(d&8),a.ack=!!(d&16),a.urg=!!(d&32),a.ece=!!(d&64),a.cwr=!!(d&128),c.tcp=a,c.tcp_data=e.subarray(4*a.doff);else if(17===d){a=new DataView(e.buffer,e.byteOffset,e.byteLength);a={sport:a.getUint16(0),dport:a.getUint16(2),len:a.getUint16(4),checksum:a.getUint16(6),data:e.subarray(8),data_s:(new TextDecoder).decode(e.subarray(8))};if(67===a.dport||67===a.sport){e=e.subarray(8);d=new DataView(e.buffer,e.byteOffset,e.byteLength);e.subarray(44,236);d={op:d.getUint8(0),htype:d.getUint8(1),\nhlen:d.getUint8(2),hops:d.getUint8(3),xid:d.getUint32(4),secs:d.getUint16(8),flags:d.getUint16(10),ciaddr:d.getUint32(12),yiaddr:d.getUint32(16),siaddr:d.getUint32(20),giaddr:d.getUint32(24),chaddr:e.subarray(28,44),magic:d.getUint32(236),options:[]};e=e.subarray(240);for(l=0;l<e.length;++l)f=l,0!==e[l]&&(++l,h=e[l],l+=h,d.options.push(e.subarray(f,f+h+2)));c.dhcp=d;c.dhcp_options=d.options}else 53===a.dport||53===a.sport?Ac(e.subarray(8),c):123===a.dport&&(d=e.subarray(8),d=new DataView(d.buffer,\nd.byteOffset,d.byteLength),c.ntp={flags:d.getUint8(0),stratum:d.getUint8(1),poll:d.getUint8(2),precision:d.getUint8(3),root_delay:d.getUint32(4),root_disp:d.getUint32(8),ref_id:d.getUint32(12),ref_ts_i:d.getUint32(16),ref_ts_f:d.getUint32(20),ori_ts_i:d.getUint32(24),ori_ts_f:d.getUint32(28),rec_ts_i:d.getUint32(32),rec_ts_f:d.getUint32(36),trans_ts_i:d.getUint32(40),trans_ts_f:d.getUint32(44)});c.udp=a}}else 2054===d?(d=new DataView(a.buffer,a.byteOffset,a.byteLength),a={htype:d.getUint16(0),ptype:d.getUint16(2),\noper:d.getUint16(6),sha:a.subarray(8,14),spa:a.subarray(14,18),tha:a.subarray(18,24),tpa:a.subarray(24,28)},c.arp=a):34525!==d&&B(d);if(c.ipv4)if(c.tcp){if(a=`${c.ipv4.src.join(\".\")}:${c.tcp.sport}:${c.ipv4.dest.join(\".\")}:${c.tcp.dport}`,!c.tcp.syn||!b.on_tcp_connection(c,a))if(b.tcp_conn[a])b.tcp_conn[a].process(c);else{a=c.tcp.ackn;if(c.tcp.fin||c.tcp.syn)a+=1;d={};d.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};d.ipv4={proto:6,src:c.ipv4.dest,dest:c.ipv4.src};d.tcp={sport:c.tcp.dport,dport:c.tcp.sport,\nseq:a,ackn:c.tcp.seq+(c.tcp.syn?1:0),winsize:c.tcp.winsize,rst:!0,ack:c.tcp.syn};b.receive(wc(b.eth_encoder_buf,d))}}else if(c.udp)if(c.dns)if(\"static\"===b.dns_method){a={};a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src};a.ipv4={proto:17,src:b.router_ip,dest:c.ipv4.src};a.udp={sport:53,dport:c.udp.sport};d=[];for(e=0;e<c.dns.questions.length;++e)switch(l=c.dns.questions[e],l.type){case 1:d.push({name:l.name,type:l.type,class:l.class,ttl:600,data:[192,168,87,1]})}a.dns={id:c.dns.id,flags:33152,\nquestions:c.dns.questions,answers:d};b.receive(wc(b.eth_encoder_buf,a))}else xc(c,b);else c.dhcp?yc(c,b):c.ntp?(a=Date.now()+nc,d=a%1E3/1E3*oc,e={},e.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},e.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},e.udp={sport:123,dport:c.udp.sport},e.ntp=Object.assign({},c.ntp),e.ntp.flags=36,e.ntp.poll=10,e.ntp.ori_ts_i=c.ntp.trans_ts_i,e.ntp.ori_ts_f=c.ntp.trans_ts_f,e.ntp.rec_ts_i=a/1E3,e.ntp.rec_ts_f=d,e.ntp.trans_ts_i=a/1E3,e.ntp.trans_ts_f=d,e.ntp.stratum=\n2,b.receive(wc(b.eth_encoder_buf,e))):8===c.udp.dport&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:17,src:c.ipv4.dest,dest:c.ipv4.src},a.udp={sport:c.udp.dport,dport:c.udp.sport,data:(new TextEncoder).encode(c.udp.data_s)},b.receive(wc(b.eth_encoder_buf,a)));else c.icmp&&8===c.icmp.type&&(a={},a.eth={ethertype:2048,src:b.router_mac,dest:c.eth.src},a.ipv4={proto:1,src:c.ipv4.dest,dest:c.ipv4.src},a.icmp={type:0,code:c.icmp.code,data:c.icmp.data},b.receive(wc(b.eth_encoder_buf,\na)));else c.arp&&1===c.arp.oper&&2048===c.arp.ptype&&(a=rc(c.arp.tpa)&4294967040,d=rc(b.router_ip)&4294967040,!b.masquerade&&a!==d||a===d&&99<c.arp.tpa[3]||(a={},a.eth={ethertype:2054,src:b.router_mac,dest:c.eth.src},a.arp={htype:1,ptype:2048,oper:2,sha:b.router_mac,spa:c.arp.tpa,tha:c.eth.src,tpa:c.arp.spa},b.receive(wc(b.eth_encoder_buf,a))))}\nfunction Ac(a,b){function c(){let m=[],n;do n=d.getUint8(h),m.push((new TextDecoder).decode(a.subarray(h+1,h+1+n))),h+=n+1;while(0<n);return m}let d=new DataView(a.buffer,a.byteOffset,a.byteLength),e={id:d.getUint16(0),flags:d.getUint16(2),questions:[],answers:[]};var g=d.getUint16(4);let f=d.getUint16(6);d.getUint16(8);d.getUint16(10);let h=12;for(var l=0;l<g;l++)e.questions.push({name:c(),type:d.getInt16(h),class:d.getInt16(h+2)}),h+=4;for(g=0;g<f;g++){l={name:c(),type:d.getInt16(h),class:d.getUint16(h+\n2),ttl:d.getUint32(h+4)};h+=8;let m=d.getUint16(h);h+=2;l.data=a.subarray(h,h+m);h+=m;e.answers.push(l)}b.dns=e}\nfunction Bc(a,b){const c=b.vm_ip.join(\".\"),d=b.router_ip.join(\".\"),e=16383*Math.random()|0;let g,f,h=0;do g=49152+(e+h)%16383,f=`${c}:${a}:${d}:${g}`;while(16383>++h&&b.tcp_conn[f]);if(b.tcp_conn[f])throw Error(\"pool of dynamic TCP port numbers exhausted, connection aborted\");let l,m,n,p,q=new Cc;q.net=b;q.on_data=function(A){l&&l.call(r,A)};q.on_connect=function(){m&&m.call(r)};q.on_close=function(){n&&n.call(r)};q.on_shutdown=function(){p&&p.call(r)};q.tuple=f;q.hsrc=b.router_mac;q.psrc=b.router_ip;\nq.sport=g;q.hdest=b.vm_mac;q.dport=a;q.pdest=b.vm_ip;b.tcp_conn[f]=q;q.connect();let r={write:function(A){q.write(A)},on:function(A,w){\"data\"===A&&(l=w);\"connect\"===A&&(m=w);\"close\"===A&&(n=w);\"shutdown\"===A&&(p=w)},close:function(){q.close()}};return r}function Cc(){this.state=\"closed\";this.net=null;this.send_buffer=new sc(2048,0);this.send_chunk_buf=new Uint8Array(1460);this.delayed_send_fin=this.in_active_close=!1;this.delayed_state=void 0}\nCc.prototype.ipv4_reply=function(){let a={};a.eth={ethertype:2048,src:this.hsrc,dest:this.hdest};a.ipv4={proto:6,src:this.psrc,dest:this.pdest};a.tcp={sport:this.sport,dport:this.dport,winsize:this.winsize,ackn:this.ack,seq:this.seq,ack:!0};return a};Cc.prototype.packet_reply=function(a,b){a={sport:a.tcp.dport,dport:a.tcp.sport,winsize:a.tcp.winsize,ackn:this.ack,seq:this.seq};if(b)for(const c in b)a[c]=b[c];b=this.ipv4_reply();b.tcp=a;return b};\nCc.prototype.connect=function(){this.seq=1338;this.ack=1;this.start_seq=0;this.winsize=64240;this.state=\"syn-sent\";let a=this.ipv4_reply();a.ipv4.id=2345;a.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:0,winsize:0,syn:!0};this.net.receive(wc(this.net.eth_encoder_buf,a))};\nCc.prototype.accept=function(a){this.seq=1338;this.ack=a.tcp.seq+1;this.start_seq=a.tcp.seq;this.hsrc=this.net.router_mac;this.psrc=a.ipv4.dest;this.sport=a.tcp.dport;this.hdest=a.eth.src;this.dport=a.tcp.sport;this.pdest=a.ipv4.src;this.winsize=a.tcp.winsize;let b=this.ipv4_reply();b.tcp={sport:this.sport,dport:this.dport,seq:1337,ackn:this.ack,winsize:a.tcp.winsize,syn:!0,ack:!0};this.state=\"established\";this.net.receive(wc(this.net.eth_encoder_buf,b))};\nCc.prototype.process=function(a){if(\"closed\"===this.state)a=this.packet_reply(a,{rst:!0}),this.net.receive(wc(this.net.eth_encoder_buf,a));else if(a.tcp.rst)this.on_close(),this.release();else if(a.tcp.syn)\"syn-sent\"===this.state&&a.tcp.ack&&(this.ack=a.tcp.seq+1,this.start_seq=a.tcp.seq,this.last_received_ackn=a.tcp.ackn,a=this.ipv4_reply(),this.net.receive(wc(this.net.eth_encoder_buf,a)),this.state=\"established\",this.on_connect&&this.on_connect.call(this));else{if(a.tcp.ack)if(\"syn-received\"===\nthis.state)this.state=\"established\";else if(\"fin-wait-1\"===this.state)a.tcp.fin||(this.state=\"fin-wait-2\");else if(\"closing\"===this.state||\"last-ack\"===this.state){this.release();return}if(void 0===this.last_received_ackn)this.last_received_ackn=a.tcp.ackn;else{var b=a.tcp.ackn-this.last_received_ackn;if(0<b){if(this.last_received_ackn=a.tcp.ackn,this.send_buffer.remove(b),this.seq+=b,this.pending=!1,this.delayed_send_fin&&!this.send_buffer.length){this.delayed_send_fin=!1;this.state=this.delayed_state;\na=this.ipv4_reply();a.tcp.fin=!0;this.net.receive(wc(this.net.eth_encoder_buf,a));return}}else if(0>b){a=this.packet_reply(a,{rst:!0});this.net.receive(wc(this.net.eth_encoder_buf,a));this.on_close();this.release();return}}a.tcp.fin?(++this.ack,b=this.packet_reply(a,{}),\"established\"===this.state?(b.tcp.ack=!0,this.state=\"close-wait\",this.on_shutdown()):\"fin-wait-1\"===this.state?(a.tcp.ack?this.release():this.state=\"closing\",b.tcp.ack=!0):\"fin-wait-2\"===this.state?(this.release(),b.tcp.ack=!0):(this.release(),\nthis.on_close(),b.tcp.rst=!0),this.net.receive(wc(this.net.eth_encoder_buf,b))):this.ack!==a.tcp.seq?(a=this.packet_reply(a,{ack:!0}),this.net.receive(wc(this.net.eth_encoder_buf,a))):a.tcp.ack&&0<a.tcp_data.length&&(this.ack+=a.tcp_data.length,b=this.ipv4_reply(),this.net.receive(wc(this.net.eth_encoder_buf,b)),this.on_data(a.tcp_data));this.pump()}};Cc.prototype.write=function(a){this.in_active_close||this.send_buffer.write(a);this.pump()};\nCc.prototype.writev=function(a){if(!this.in_active_close)for(const b of a)this.send_buffer.write(b);this.pump()};\nCc.prototype.close=function(){if(!this.in_active_close){this.in_active_close=!0;if(\"established\"===this.state||\"syn-received\"===this.state)var a=\"fin-wait-1\";else if(\"close-wait\"===this.state)a=\"last-ack\";else{this.release();return}this.send_buffer.length||this.pending?(this.delayed_send_fin=!0,this.delayed_state=a):(this.state=a,a=this.ipv4_reply(),a.tcp.fin=!0,this.net.receive(wc(this.net.eth_encoder_buf,a)))}this.pump()};Cc.prototype.on_shutdown=function(){};Cc.prototype.on_close=function(){};\nCc.prototype.release=function(){this.net.tcp_conn[this.tuple]&&(this.state=\"closed\",delete this.net.tcp_conn[this.tuple])};Cc.prototype.pump=function(){if(this.send_buffer.length&&!this.pending){const a=this.send_chunk_buf,b=this.send_buffer.peek(a),c=this.ipv4_reply();c.tcp.psh=!0;c.tcp_data=a.subarray(0,b);this.net.receive(wc(this.net.eth_encoder_buf,c));this.pending=!0}};function ec(a,b,c){this.register_ws(a);this.last_stream=1;this.connections={0:{congestion:0}};this.congested_buffer=[];c=c||{};this.bus=b;this.id=c.id||0;this.router_mac=new Uint8Array((c.router_mac||\"52:54:0:1:2:3\").split(\":\").map(function(d){return parseInt(d,16)}));this.router_ip=new Uint8Array((c.router_ip||\"192.168.86.1\").split(\".\").map(function(d){return parseInt(d,10)}));this.vm_ip=new Uint8Array((c.vm_ip||\"192.168.86.100\").split(\".\").map(function(d){return parseInt(d,10)}));this.masquerade=\nvoid 0===c.masquerade||!!c.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=c.dns_method||\"doh\";this.doh_server=c.doh_server;this.tcp_conn={};this.eth_encoder_buf=tc();this.bus.register(\"net\"+this.id+\"-mac\",function(d){this.vm_mac=new Uint8Array(d.split(\":\").map(function(e){return parseInt(e,16)}))},this);this.bus.register(\"net\"+this.id+\"-send\",function(d){this.send(d)},this)}\nec.prototype.register_ws=function(a){this.wispws=new WebSocket(a.replace(\"wisp://\",\"ws://\").replace(\"wisps://\",\"wss://\"));this.wispws.binaryType=\"arraybuffer\";this.wispws.onmessage=b=>{this.process_incoming_wisp_frame(new Uint8Array(b.data))};this.wispws.onclose=()=>{setTimeout(()=>{this.register_ws(a)},1E4)}};\nec.prototype.send_packet=function(a,b,c){this.connections[c]&&(0<this.connections[c].congestion?(\"DATA\"===b&&this.connections[c].congestion--,this.wispws.send(a)):(this.connections[c].congested=!0,this.congested_buffer.push({data:a,type:b})))};\nec.prototype.process_incoming_wisp_frame=function(a){const b=new DataView(a.buffer),c=b.getUint32(1,!0);switch(a[0]){case 2:if(this.connections[c])this.connections[c].data_callback(a.slice(5));else throw Error(\"Got a DATA packet but stream not registered. ID: \"+c);break;case 3:this.connections[c]&&(this.connections[c].congestion=b.getUint32(5,!0));if(this.connections[c].congested){for(const d of this.congested_buffer)this.send_packet(d.data,d.type,c);this.connections[c].congested=!1}break;case 4:this.connections[c]&&\nthis.connections[c].close_callback(b.getUint8(5)),delete this.connections[c]}};\nec.prototype.send_wisp_frame=function(a){let b,c;switch(a.type){case \"CONNECT\":const d=(new TextEncoder).encode(a.hostname);b=new Uint8Array(8+d.length);c=new DataView(b.buffer);c.setUint8(0,1);c.setUint32(1,a.stream_id,!0);c.setUint8(5,1);c.setUint16(6,a.port,!0);b.set(d,8);this.connections[a.stream_id]={data_callback:a.data_callback,close_callback:a.close_callback,congestion:this.connections[0].congestion};break;case \"DATA\":b=new Uint8Array(5+a.data.length);c=new DataView(b.buffer);c.setUint8(0,\n2);c.setUint32(1,a.stream_id,!0);b.set(a.data,5);break;case \"CLOSE\":b=new Uint8Array(6),c=new DataView(b.buffer),c.setUint8(0,4),c.setUint32(1,a.stream_id,!0),c.setUint8(5,a.reason)}this.send_packet(b,a.type,a.stream_id)};ec.prototype.destroy=function(){this.wispws&&(this.wispws.onmessage=null,this.wispws.onclose=null,this.wispws.close(),this.wispws=null)};\nec.prototype.on_tcp_connection=function(a,b){let c=new Cc;c.state=\"syn-received\";c.net=this;c.tuple=b;c.stream_id=this.last_stream++;this.tcp_conn[b]=c;c.on_data=d=>{0!==d.length&&this.send_wisp_frame({type:\"DATA\",stream_id:c.stream_id,data:d})};c.on_close=()=>{this.send_wisp_frame({type:\"CLOSE\",stream_id:c.stream_id,reason:2})};c.on_shutdown=c.on_close;this.send_wisp_frame({type:\"CONNECT\",stream_id:c.stream_id,hostname:a.ipv4.dest.join(\".\"),port:a.tcp.dport,data_callback:d=>{c.write(d)},close_callback:()=>\n{c.close()}});c.accept(a);return!0};ec.prototype.send=function(a){zc(a,this)};ec.prototype.receive=function(a){this.bus.send(\"net\"+this.id+\"-receive\",new Uint8Array(a))};function cc(a,b){b=b||{};this.bus=a;this.id=b.id||0;this.router_mac=new Uint8Array((b.router_mac||\"52:54:0:1:2:3\").split(\":\").map(function(c){return parseInt(c,16)}));this.router_ip=new Uint8Array((b.router_ip||\"192.168.86.1\").split(\".\").map(function(c){return parseInt(c,10)}));this.vm_ip=new Uint8Array((b.vm_ip||\"192.168.86.100\").split(\".\").map(function(c){return parseInt(c,10)}));this.masquerade=void 0===b.masquerade||!!b.masquerade;this.vm_mac=new Uint8Array(6);this.dns_method=b.dns_method||\"static\";\nthis.doh_server=b.doh_server;this.tcp_conn={};this.eth_encoder_buf=tc();this.fetch=fetch;this.cors_proxy=b.cors_proxy;this.bus.register(\"net\"+this.id+\"-mac\",function(c){this.vm_mac=new Uint8Array(c.split(\":\").map(function(d){return parseInt(d,16)}))},this);this.bus.register(\"net\"+this.id+\"-send\",function(c){this.send(c)},this)}H.exportSymbol(\"FetchNetworkAdapter\",cc);cc.prototype.destroy=function(){};\ncc.prototype.on_tcp_connection=function(a,b){if(80===a.tcp.dport){let c=new Cc;c.state=\"syn-received\";c.net=this;c.on_data=Dc;c.tuple=b;c.accept(a);this.tcp_conn[b]=c;return!0}return!1};cc.prototype.connect=function(a){return Bc(a,this)};\nasync function Dc(a){this.read=this.read||\"\";if((this.read+=(new TextDecoder).decode(a))&&-1!==this.read.indexOf(\"\\r\\n\\r\\n\")){var b=this.read.indexOf(\"\\r\\n\\r\\n\");a=this.read.substring(0,b).split(/\\r\\n/);b=this.read.substring(b+4);this.read=\"\";let c=a[0].split(\" \"),d;d=/^https?:/.test(c[1])?new URL(c[1]):new URL(\"http://host\"+c[1]);\"undefined\"!==typeof window&&\"http:\"===d.protocol&&\"https:\"===window.location.protocol&&(d.protocol=\"https:\");let e=new Headers;for(let l=1;l<a.length;++l){const m=this.net.parse_http_header(a[l]);\nif(!m){console.warn('The request contains an invalid header: \"%s\"',a[l]);this.write((new TextEncoder).encode(\"HTTP/1.1 400 Bad Request\\r\\nContent-Length: 0\"));return}\"host\"===m.key.toLowerCase()?d.host=m.value:e.append(m.key,m.value)}this.name=d.href;a={method:c[0],headers:e};-1!==[\"put\",\"post\"].indexOf(a.method.toLowerCase())&&(a.body=b);const g=this.net.cors_proxy?this.net.cors_proxy+encodeURIComponent(d.href):d.href,f=new TextEncoder;let h=!1;this.net.fetch(g,a).then(l=>{const m=[`HTTP/1.1 ${l.status} ${l.statusText}`,\n`x-was-fetch-redirected: ${!!l.redirected}`,`x-fetch-resp-url: ${l.url}`,\"Connection: closed\"];for(const [n,p]of l.headers.entries())[\"content-encoding\",\"connection\",\"content-length\",\"transfer-encoding\"].includes(n.toLowerCase())||m.push(`${n}:  ${p}`);this.write(f.encode(m.join(\"\\r\\n\")+\"\\r\\n\\r\\n\"));h=!0;if(l.body&&l.body.getReader){const n=l.body.getReader(),p=({value:q,done:r})=>{q&&this.write(q);if(r)this.close();else return n.read().then(p)};n.read().then(p)}else l.arrayBuffer().then(n=>{this.write(new Uint8Array(n));\nthis.close()})}).catch(l=>{console.warn(\"Fetch Failed: \"+g+\"\\n\"+l);h||(l=f.encode(`Fetch ${g} failed:\\n\\n${l.stack||l.message}`),this.writev([f.encode([\"HTTP/1.1 502 Fetch Error\",\"Content-Type: text/plain\",`Content-Length: ${l.length}`,\"Connection: closed\"].join(\"\\r\\n\")+\"\\r\\n\\r\\n\"),l]));this.close()})}}\ncc.prototype.fetch=async function(a,b){this.cors_proxy&&(a=this.cors_proxy+encodeURIComponent(a));try{const c=await fetch(a,b),d=await c.arrayBuffer();return[c,d]}catch(c){return console.warn(\"Fetch Failed: \"+a+\"\\n\"+c),b=new Headers,b.set(\"Content-Type\",\"text/plain\"),[{status:502,statusText:\"Fetch Error\",headers:b},(new TextEncoder).encode(`Fetch ${a} failed:\\n\\n${c.stack}`).buffer]}};\ncc.prototype.parse_http_header=function(a){var b=a.match(/^([^:]*):(.*)$/);if(b&&(a=b[1],b=b[2].trim(),0!==a.length&&0!==b.length&&/^[\\w-]+$/.test(a)&&/^[\\x20-\\x7E]+$/.test(b)))return{key:a,value:b}};cc.prototype.send=function(a){zc(a,this)};cc.prototype.receive=function(a){this.bus.send(\"net\"+this.id+\"-receive\",new Uint8Array(a))};const Ec={stats_to_string:function(a){return Ec.print_misc_stats(a)+Ec.print_instruction_counts(a)},print_misc_stats:function(a){let b=\"\";var c=\"COMPILE COMPILE_SKIPPED_NO_NEW_ENTRY_POINTS COMPILE_WRONG_ADDRESS_SPACE COMPILE_CUT_OFF_AT_END_OF_PAGE COMPILE_WITH_LOOP_SAFETY COMPILE_PAGE COMPILE_PAGE/COMPILE COMPILE_BASIC_BLOCK COMPILE_DUPLICATED_BASIC_BLOCK COMPILE_WASM_BLOCK COMPILE_WASM_LOOP COMPILE_DISPATCHER COMPILE_ENTRY_POINT COMPILE_WASM_TOTAL_BYTES COMPILE_WASM_TOTAL_BYTES/COMPILE_PAGE RUN_INTERPRETED RUN_INTERPRETED_NEW_PAGE RUN_INTERPRETED_PAGE_HAS_CODE RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK RUN_INTERPRETED_NEAR_END_OF_PAGE RUN_INTERPRETED_DIFFERENT_STATE RUN_INTERPRETED_DIFFERENT_STATE_CPL3 RUN_INTERPRETED_DIFFERENT_STATE_FLAT RUN_INTERPRETED_DIFFERENT_STATE_IS32 RUN_INTERPRETED_DIFFERENT_STATE_SS32 RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED RUN_INTERPRETED_STEPS RUN_FROM_CACHE RUN_FROM_CACHE_STEPS RUN_FROM_CACHE_STEPS/RUN_FROM_CACHE RUN_FROM_CACHE_STEPS/RUN_INTERPRETED_STEPS DIRECT_EXIT INDIRECT_JUMP INDIRECT_JUMP_NO_ENTRY NORMAL_PAGE_CHANGE NORMAL_FALLTHRU NORMAL_FALLTHRU_WITH_TARGET_BLOCK NORMAL_BRANCH NORMAL_BRANCH_WITH_TARGET_BLOCK CONDITIONAL_JUMP CONDITIONAL_JUMP_PAGE_CHANGE CONDITIONAL_JUMP_EXIT CONDITIONAL_JUMP_FALLTHRU CONDITIONAL_JUMP_FALLTHRU_WITH_TARGET_BLOCK CONDITIONAL_JUMP_BRANCH CONDITIONAL_JUMP_BRANCH_WITH_TARGET_BLOCK DISPATCHER_SMALL DISPATCHER_LARGE LOOP LOOP_SAFETY CONDITION_OPTIMISED CONDITION_UNOPTIMISED CONDITION_UNOPTIMISED_PF CONDITION_UNOPTIMISED_UNHANDLED_L CONDITION_UNOPTIMISED_UNHANDLED_LE FAILED_PAGE_CHANGE SAFE_READ_FAST SAFE_READ_SLOW_PAGE_CROSSED SAFE_READ_SLOW_NOT_VALID SAFE_READ_SLOW_NOT_USER SAFE_READ_SLOW_IN_MAPPED_RANGE SAFE_WRITE_FAST SAFE_WRITE_SLOW_PAGE_CROSSED SAFE_WRITE_SLOW_NOT_VALID SAFE_WRITE_SLOW_NOT_USER SAFE_WRITE_SLOW_IN_MAPPED_RANGE SAFE_WRITE_SLOW_READ_ONLY SAFE_WRITE_SLOW_HAS_CODE SAFE_READ_WRITE_FAST SAFE_READ_WRITE_SLOW_PAGE_CROSSED SAFE_READ_WRITE_SLOW_NOT_VALID SAFE_READ_WRITE_SLOW_NOT_USER SAFE_READ_WRITE_SLOW_IN_MAPPED_RANGE SAFE_READ_WRITE_SLOW_READ_ONLY SAFE_READ_WRITE_SLOW_HAS_CODE PAGE_FAULT TLB_MISS MAIN_LOOP MAIN_LOOP_IDLE DO_MANY_CYCLES CYCLE_INTERNAL INVALIDATE_ALL_MODULES_NO_FREE_WASM_INDICES INVALIDATE_MODULE_WRITTEN_WHILE_COMPILED INVALIDATE_MODULE_UNUSED_AFTER_OVERWRITE INVALIDATE_MODULE_DIRTY_PAGE INVALIDATE_PAGE_HAD_CODE INVALIDATE_PAGE_HAD_ENTRY_POINTS DIRTY_PAGE_DID_NOT_HAVE_CODE RUN_FROM_CACHE_EXIT_SAME_PAGE RUN_FROM_CACHE_EXIT_NEAR_END_OF_PAGE RUN_FROM_CACHE_EXIT_DIFFERENT_PAGE CLEAR_TLB FULL_CLEAR_TLB TLB_FULL TLB_GLOBAL_FULL MODRM_SIMPLE_REG MODRM_SIMPLE_REG_WITH_OFFSET MODRM_SIMPLE_CONST_OFFSET MODRM_COMPLEX SEG_OFFSET_OPTIMISED SEG_OFFSET_NOT_OPTIMISED SEG_OFFSET_NOT_OPTIMISED_ES SEG_OFFSET_NOT_OPTIMISED_FS SEG_OFFSET_NOT_OPTIMISED_GS SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT\".split(\" \"),\nd=0;const e={};for(let f=0;f<c.length;f++){const h=c[f];var g=void 0;if(h.includes(\"/\")){d++;const [l,m]=h.split(\"/\");g=e[l]/e[m]}else g=e[h]=a.wm.exports.profiler_stat_get(f-d),g=1E8<=g?Math.round(g/1E6)+\"m\":1E5<=g?Math.round(g/1E3)+\"k\":g;b+=h+\"=\"+g+\"\\n\"}b+=\"\\n\";c=a.wm.exports.get_valid_tlb_entries_count();d=a.wm.exports.get_valid_global_tlb_entries_count();b=b+(\"TLB_ENTRIES=\"+c+\" (\"+d+\" global, \"+(c-d)+\" non-global)\\nWASM_TABLE_FREE=\")+(a.wm.exports.jit_get_wasm_table_index_free_list_count()+\"\\n\");\nb+=\"JIT_CACHE_SIZE=\"+a.wm.exports.jit_get_cache_size()+\"\\n\";b+=\"FLAT_SEGMENTS=\"+a.wm.exports.has_flat_segmentation()+\"\\n\";b+=\"wasm memory size: \"+(a.wasm_memory.buffer.byteLength>>20)+\"m\\n\";b=b+\"Config:\\nJIT_DISABLED=\"+(a.wm.exports.get_jit_config(0)+\"\\n\");b+=\"MAX_PAGES=\"+a.wm.exports.get_jit_config(1)+\"\\n\";b+=\"JIT_USE_LOOP_SAFETY=\"+!!a.wm.exports.get_jit_config(2)+\"\\n\";return b+=\"MAX_EXTRA_BASIC_BLOCKS=\"+a.wm.exports.get_jit_config(3)+\"\\n\"},print_instruction_counts:function(a){return[Ec.print_instruction_counts_offset(a,\n!1,!1,!1,!1),Ec.print_instruction_counts_offset(a,!0,!1,!1,!1),Ec.print_instruction_counts_offset(a,!1,!0,!1,!1),Ec.print_instruction_counts_offset(a,!1,!1,!0,!1),Ec.print_instruction_counts_offset(a,!1,!1,!1,!0)].join(\"\\n\\n\")},print_instruction_counts_offset:function(a,b,c,d,e){let g=\"\";var f=[],h=b?\"compiled\":c?\"jit exit\":d?\"unguarded register\":e?\"wasm size\":\"executed\";for(let n=0;256>n;n++)for(let p=0;8>p;p++)for(const q of[!1,!0]){var l=a.wm.exports.get_opstats_buffer(b,c,d,e,n,!1,q,p);f.push({opcode:n,\ncount:l,is_mem:q,fixed_g:p});l=a.wm.exports.get_opstats_buffer(b,c,d,e,n,!0,q,p);f.push({opcode:3840|n,count:l,is_mem:q,fixed_g:p})}a=0;b=new Set([38,46,54,62,100,101,102,103,240,242,243]);for(const {count:n,opcode:p}of f)b.has(p)||(a+=n);if(0===a)return\"\";c=new Uint32Array(256);b=new Uint32Array(256);for(const {opcode:n,count:p}of f)3840===(n&65280)?b[n&255]+=p:c[n&255]+=p;g=g+\"------------------\\nTotal: \"+(a+\"\\n\");const m=1E7<a?1E3:1;d=Math.max.apply(Math,f.map(({count:n})=>Math.round(n/m)));d=\nString(d).length;g+=`Instruction counts ${h} (in ${m}):\\n`;for(e=0;256>e;e++)g+=e.toString(16).padStart(2,\"0\")+\":\"+k.pads(Math.round(c[e]/m),d),g=15===e%16?g+\"\\n\":g+\" \";g=g+\"\\n\"+`Instruction counts ${h} (0f, in ${m}):\\n`;for(h=0;256>h;h++)g+=(h&255).toString(16).padStart(2,\"0\")+\":\"+k.pads(Math.round(b[h]/m),d),g=15===h%16?g+\"\\n\":g+\" \";g+=\"\\n\";f=f.filter(({count:n})=>n).sort(({count:n},{count:p})=>p-n);for(const {opcode:n,is_mem:p,fixed_g:q,count:r}of f.slice(0,200))f=n.toString(16)+\"_\"+q+(p?\"_m\":\n\"_r\"),g+=f+\":\"+(r/a*100).toFixed(2)+\" \";return g+\"\\n\"}};H.exportSymbol(\"print_stats\",Ec);function gc(){this.filedata=new Map}gc.prototype.read=async function(a,b,c){return(a=this.filedata.get(a))?a.subarray(b,b+c):null};gc.prototype.cache=async function(a,b){this.filedata.set(a,b)};gc.prototype.uncache=function(a){this.filedata.delete(a)};function hc(a,b){b.endsWith(\"/\")||(b+=\"/\");this.storage=a;this.baseurl=b}hc.prototype.load_from_server=function(a){return new Promise(b=>{k.load_file(this.baseurl+a,{done:async c=>{c=new Uint8Array(c);await this.cache(a,c);b(c)}})})};\nhc.prototype.read=async function(a,b,c){const d=await this.storage.read(a,b,c);return d?d:(await this.load_from_server(a)).subarray(b,b+c)};hc.prototype.cache=async function(a,b){return await this.storage.cache(a,b)};hc.prototype.uncache=function(a){this.storage.uncache(a)};var ia=32768,fa=16384,ja=4;function Z(a,b){this.inodes=[];this.events=[];this.storage=a;this.qidcounter=b||{last_qidnumber:0};this.inodedata={};this.total_size=274877906944;this.used_size=0;this.mounts=[];this.CreateDirectory(\"\",-1)}Z.prototype.get_state=function(){let a=[];a[0]=this.inodes;a[1]=this.qidcounter.last_qidnumber;a[2]=[];for(const [b,c]of Object.entries(this.inodedata))0===(this.inodes[b].mode&fa)&&a[2].push([b,c]);a[3]=this.total_size;a[4]=this.used_size;return a=a.concat(this.mounts)};\nZ.prototype.set_state=function(a){this.inodes=a[0].map(b=>{const c=new Fc(0);c.set_state(b);return c});this.qidcounter.last_qidnumber=a[1];this.inodedata={};for(let [b,c]of a[2])c.buffer.byteLength!==c.byteLength&&(c=c.slice()),this.inodedata[b]=c;this.total_size=a[3];this.used_size=a[4];this.mounts=a.slice(5)};Z.prototype.AddEvent=function(a,b){var c=this.inodes[a];0===c.status||2===c.status?b():this.is_forwarder(c)?this.follow_fs(c).AddEvent(c.foreign_id,b):this.events.push({id:a,OnEvent:b})};\nZ.prototype.HandleEvent=function(a){var b=this.inodes[a];this.is_forwarder(b)&&this.follow_fs(b).HandleEvent(b.foreign_id);b=[];for(var c=0;c<this.events.length;c++)this.events[c].id===a?this.events[c].OnEvent():b.push(this.events[c]);this.events=b};\nZ.prototype.load_from_json=function(a){if(3!==a.version)throw\"The filesystem JSON format has changed. Please update your fs2json (https://github.com/copy/fs2json) and recreate the filesystem JSON.\";var b=a.fsroot;this.used_size=a.size;for(a=0;a<b.length;a++)this.LoadRecursive(b[a],0)};\nZ.prototype.LoadRecursive=function(a,b){var c=this.CreateInode();const d=a[0];c.size=a[1];c.mtime=a[2];c.ctime=c.mtime;c.atime=c.mtime;c.mode=a[3];c.uid=a[4];c.gid=a[5];var e=c.mode&61440;e===fa?(this.PushInode(c,b,d),this.LoadDir(this.inodes.length-1,a[6])):e===ia?(c.status=2,c.sha256sum=a[6],this.PushInode(c,b,d)):40960===e?(c.symlink=a[6],this.PushInode(c,b,d)):49152!==e&&B(e)};Z.prototype.LoadDir=function(a,b){for(var c=0;c<b.length;c++)this.LoadRecursive(b[c],a)};\nZ.prototype.should_be_linked=function(a){return!this.is_forwarder(a)||0===a.foreign_id};Z.prototype.link_under_dir=function(a,b,c){const d=this.inodes[b],e=this.inodes[a];this.is_forwarder(e);this.IsDirectory(a);this.should_be_linked(d);e.direntries.has(c);e.direntries.set(c,b);d.nlinks++;this.IsDirectory(b)&&(d.direntries.has(\"..\"),d.direntries.has(\".\")||d.nlinks++,d.direntries.set(\".\",b),d.direntries.set(\"..\",a),e.nlinks++)};\nZ.prototype.unlink_from_dir=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];this.is_forwarder(e);this.IsDirectory(a);e.direntries.delete(b)&&(d.nlinks--,this.IsDirectory(c)&&(d.direntries.get(\"..\"),d.direntries.delete(\"..\"),e.nlinks--))};\nZ.prototype.PushInode=function(a,b,c){-1!==b?(this.inodes.push(a),a.fid=this.inodes.length-1,this.link_under_dir(b,a.fid,c)):0===this.inodes.length?(this.inodes.push(a),a.direntries.set(\".\",0),a.direntries.set(\"..\",0),a.nlinks=2):(x.Debug(\"Error in Filesystem: Pushed inode with name = \"+c+\" has no parent\"),x.Abort())};\nfunction Fc(a){this.direntries=new Map;this.minor=this.major=this.mtime=this.atime=this.ctime=this.fid=this.gid=this.uid=this.size=this.status=0;this.symlink=\"\";this.mode=493;this.qid={type:0,version:0,path:a};this.caps=void 0;this.nlinks=0;this.sha256sum=\"\";this.locks=[];this.foreign_id=this.mount_id=-1}\nFc.prototype.get_state=function(){const a=[];a[0]=this.mode;a[1]=(this.mode&61440)===fa?[...this.direntries]:(this.mode&61440)===ia?this.sha256sum:40960===(this.mode&61440)?this.symlink:49152===(this.mode&61440)?[this.minor,this.major]:null;a[2]=this.locks;a[3]=this.status;a[4]=this.size;a[5]=this.uid;a[6]=this.gid;a[7]=this.fid;a[8]=this.ctime;a[9]=this.atime;a[10]=this.mtime;a[11]=this.qid.version;a[12]=this.qid.path;a[13]=this.nlinks;return a};\nFc.prototype.set_state=function(a){this.mode=a[0];if((this.mode&61440)===fa){this.direntries=new Map;for(const [b,c]of a[1])this.direntries.set(b,c)}else(this.mode&61440)===ia?this.sha256sum=a[1]:40960===(this.mode&61440)?this.symlink=a[1]:49152===(this.mode&61440)&&([this.minor,this.major]=a[1]);this.locks=[];for(const b of a[2]){const c=new Gc;c.set_state(b);this.locks.push(c)}this.status=a[3];this.size=a[4];this.uid=a[5];this.gid=a[6];this.fid=a[7];this.ctime=a[8];this.atime=a[9];this.mtime=a[10];\nthis.qid.type=(this.mode&61440)>>8;this.qid.version=a[11];this.qid.path=a[12];this.nlinks=a[13]};\nZ.prototype.divert=function(a,b){const c=this.Search(a,b),d=this.inodes[c],e=new Fc(-1);this.IsDirectory(c);Object.assign(e,d);const g=this.inodes.length;this.inodes.push(e);e.fid=g;this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.set(d.foreign_id,g);this.should_be_linked(d)&&(this.unlink_from_dir(a,b),this.link_under_dir(a,g,b));if(this.IsDirectory(c)&&!this.is_forwarder(d))for(const [f,h]of e.direntries)\".\"!==f&&\"..\"!==f&&this.IsDirectory(h)&&this.inodes[h].direntries.set(\"..\",g);this.inodedata[g]=\nthis.inodedata[c];delete this.inodedata[c];d.direntries=new Map;d.nlinks=0;return g};Z.prototype.copy_inode=function(a,b){Object.assign(b,a,{fid:b.fid,direntries:b.direntries,nlinks:b.nlinks})};Z.prototype.CreateInode=function(){const a=Math.round(Date.now()/1E3),b=new Fc(++this.qidcounter.last_qidnumber);b.atime=b.ctime=b.mtime=a;return b};\nZ.prototype.CreateDirectory=function(a,b){var c=this.inodes[b];if(0<=b&&this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateDirectory(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.mode=511|fa;0<=b&&(c.uid=this.inodes[b].uid,c.gid=this.inodes[b].gid,c.mode=this.inodes[b].mode&511|fa);c.qid.type=fa>>8;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,\"newdir\");return this.inodes.length-1};\nZ.prototype.CreateFile=function(a,b){var c=this.inodes[b];if(this.is_forwarder(c))return b=c.foreign_id,a=this.follow_fs(c).CreateFile(a,b),this.create_forwarder(c.mount_id,a);c=this.CreateInode();c.uid=this.inodes[b].uid;c.gid=this.inodes[b].gid;c.qid.type=ia>>8;c.mode=this.inodes[b].mode&438|ia;this.PushInode(c,b,a);this.NotifyListeners(this.inodes.length-1,\"newfile\");return this.inodes.length-1};\nZ.prototype.CreateNode=function(a,b,c,d){var e=this.inodes[b];if(this.is_forwarder(e))return b=e.foreign_id,a=this.follow_fs(e).CreateNode(a,b,c,d),this.create_forwarder(e.mount_id,a);e=this.CreateInode();e.major=c;e.minor=d;e.uid=this.inodes[b].uid;e.gid=this.inodes[b].gid;e.qid.type=192;e.mode=this.inodes[b].mode&438;this.PushInode(e,b,a);return this.inodes.length-1};\nZ.prototype.CreateSymlink=function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,a=this.follow_fs(d).CreateSymlink(a,b,c),this.create_forwarder(d.mount_id,a);d=this.CreateInode();d.uid=this.inodes[b].uid;d.gid=this.inodes[b].gid;d.qid.type=160;d.symlink=c;d.mode=40960;this.PushInode(d,b,a);return this.inodes.length-1};\nZ.prototype.CreateTextFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateTextFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);b=this.inodes[d];a=new Uint8Array(c.length);b.size=c.length;for(b=0;b<c.length;b++)a[b]=c.charCodeAt(b);await this.set_data(d,a);return d};\nZ.prototype.CreateBinaryFile=async function(a,b,c){var d=this.inodes[b];if(this.is_forwarder(d))return b=d.foreign_id,c=await this.follow_fs(d).CreateBinaryFile(a,b,c),this.create_forwarder(d.mount_id,c);d=this.CreateFile(a,b);a=this.inodes[d];b=new Uint8Array(c.length);b.set(c);await this.set_data(d,b);a.size=c.length;return d};\nZ.prototype.OpenInode=function(a,b){var c=this.inodes[a];if(this.is_forwarder(c))return this.follow_fs(c).OpenInode(c.foreign_id,b);(c.mode&61440)===fa&&this.FillDirectory(a);return!0};Z.prototype.CloseInode=async function(a){var b=this.inodes[a];if(this.is_forwarder(b))return await this.follow_fs(b).CloseInode(b.foreign_id);2===b.status&&this.storage.uncache(b.sha256sum);b.status===ja&&(b.status=-1,await this.DeleteData(a))};\nZ.prototype.Rename=async function(a,b,c,d){if(a===c&&b===d)return 0;var e=this.Search(a,b);if(-1===e)return-2;var g=this.GetFullPath(a)+\"/\"+b;if(-1!==this.Search(c,d)){var f=this.Unlink(c,d);if(0>f)return f}var h=this.inodes[e],l=this.inodes[a];f=this.inodes[c];if(this.is_forwarder(l)||this.is_forwarder(f))if(this.is_forwarder(l)&&l.mount_id===f.mount_id){if(a=await this.follow_fs(l).Rename(l.foreign_id,b,f.foreign_id,d),0>a)return a}else{if(this.is_a_root(e)||!this.IsDirectory(e)&&1<this.GetInode(e).nlinks)return-1;\nl=this.divert(a,b);const m=this.GetInode(e),n=await this.Read(l,0,m.size);this.is_forwarder(f)?(c=this.follow_fs(f),d=this.IsDirectory(l)?c.CreateDirectory(d,f.foreign_id):c.CreateFile(d,f.foreign_id),c=c.GetInode(d),this.copy_inode(m,c),this.set_forwarder(e,f.mount_id,d)):(this.delete_forwarder(h),this.copy_inode(m,h),this.link_under_dir(c,e,d));await this.ChangeSize(e,m.size);n&&n.length&&await this.Write(e,0,n.length,n);if(this.IsDirectory(e))for(const p of this.GetChildren(l))if(f=await this.Rename(l,\np,e,p),0>f)return f;await this.DeleteData(l);a=this.Unlink(a,b);if(0>a)return a}else this.unlink_from_dir(a,b),this.link_under_dir(c,e,d),h.qid.version++;this.NotifyListeners(e,\"rename\",{oldpath:g});return 0};\nZ.prototype.Write=async function(a,b,c,d){this.NotifyListeners(a,\"write\");var e=this.inodes[a];if(this.is_forwarder(e))a=e.foreign_id,await this.follow_fs(e).Write(a,b,c,d);else{var g=await this.get_buffer(a);!g||g.length<b+c?(await this.ChangeSize(a,Math.floor(3*(b+c)/2)),e.size=b+c,g=await this.get_buffer(a)):e.size<b+c&&(e.size=b+c);d&&g.set(d.subarray(0,c),b);await this.set_data(a,g)}};\nZ.prototype.Read=async function(a,b,c){const d=this.inodes[a];return this.is_forwarder(d)?(a=d.foreign_id,await this.follow_fs(d).Read(a,b,c)):await this.get_data(a,b,c)};Z.prototype.Search=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){const c=a.foreign_id;b=this.follow_fs(a).Search(c,b);return-1===b?-1:this.get_forwarder(a.mount_id,b)}b=a.direntries.get(b);return void 0===b?-1:b};\nZ.prototype.CountUsedInodes=function(){let a=this.inodes.length;for(const {fs:b,backtrack:c}of this.mounts)a+=b.CountUsedInodes(),a-=c.size;return a};Z.prototype.CountFreeInodes=function(){let a=1048576;for(const {fs:b}of this.mounts)a+=b.CountFreeInodes();return a};Z.prototype.GetTotalSize=function(){let a=this.used_size;for(const {fs:b}of this.mounts)a+=b.GetTotalSize();return a};Z.prototype.GetSpace=function(){let a=this.total_size;for(const {fs:b}of this.mounts)a+=b.GetSpace();return this.total_size};\nZ.prototype.GetDirectoryName=function(a){const b=this.inodes[this.GetParent(a)];if(this.is_forwarder(b))return this.follow_fs(b).GetDirectoryName(this.inodes[a].foreign_id);if(!b)return\"\";for(const [c,d]of b.direntries)if(d===a)return c;return\"\"};Z.prototype.GetFullPath=function(a){this.IsDirectory(a);for(var b=\"\";0!==a;)b=\"/\"+this.GetDirectoryName(a)+b,a=this.GetParent(a);return b.substring(1)};\nZ.prototype.Link=function(a,b,c){if(this.IsDirectory(b))return-1;const d=this.inodes[a],e=this.inodes[b];if(this.is_forwarder(d))return this.is_forwarder(e)&&e.mount_id===d.mount_id?this.follow_fs(d).Link(d.foreign_id,e.foreign_id,c):-1;if(this.is_forwarder(e))return-1;this.link_under_dir(a,b,c);return 0};\nZ.prototype.Unlink=function(a,b){if(\".\"===b||\"..\"===b)return-1;const c=this.Search(a,b),d=this.inodes[c],e=this.inodes[a];if(this.is_forwarder(e))return this.is_forwarder(d),a=e.foreign_id,this.follow_fs(e).Unlink(a,b);if(this.IsDirectory(c)&&!this.IsEmpty(c))return-39;this.unlink_from_dir(a,b);0===d.nlinks&&(d.status=ja,this.NotifyListeners(c,\"delete\"));return 0};\nZ.prototype.DeleteData=async function(a){const b=this.inodes[a];this.is_forwarder(b)?await this.follow_fs(b).DeleteData(b.foreign_id):(b.size=0,delete this.inodedata[a])};Z.prototype.get_buffer=async function(a){const b=this.inodes[a];return this.inodedata[a]?this.inodedata[a]:2===b.status?await this.storage.read(b.sha256sum,0,b.size):null};\nZ.prototype.get_data=async function(a,b,c){const d=this.inodes[a];return this.inodedata[a]?this.inodedata[a].subarray(b,b+c):2===d.status?await this.storage.read(d.sha256sum,b,c):null};Z.prototype.set_data=async function(a,b){this.inodedata[a]=b;2===this.inodes[a].status&&(this.inodes[a].status=0,this.storage.uncache(this.inodes[a].sha256sum))};Z.prototype.GetInode=function(a){isNaN(a);a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).GetInode(a.foreign_id):a};\nZ.prototype.ChangeSize=async function(a,b){var c=this.GetInode(a),d=await this.get_data(a,0,c.size);if(b!==c.size){var e=new Uint8Array(b);c.size=b;d&&e.set(d.subarray(0,Math.min(d.length,c.size)),0);await this.set_data(a,e)}};\nZ.prototype.SearchPath=function(a){a=a.replace(\"//\",\"/\");a=a.split(\"/\");0<a.length&&0===a[a.length-1].length&&a.pop();0<a.length&&0===a[0].length&&a.shift();const b=a.length;var c=-1,d=0;let e=null;for(var g=0;g<b;g++)if(c=d,d=this.Search(c,a[g]),!e&&this.is_forwarder(this.inodes[c])&&(e=\"/\"+a.slice(g).join(\"/\")),-1===d)return g<b-1?{id:-1,parentid:-1,name:a[g],forward_path:e}:{id:-1,parentid:c,name:a[g],forward_path:e};return{id:d,parentid:c,name:a[g],forward_path:e}};\nZ.prototype.GetRecursiveList=function(a,b){if(this.is_forwarder(this.inodes[a])){const c=this.follow_fs(this.inodes[a]),d=this.inodes[a].mount_id,e=b.length;c.GetRecursiveList(this.inodes[a].foreign_id,b);for(a=e;a<b.length;a++)b[a].parentid=this.get_forwarder(d,b[a].parentid)}else for(const [c,d]of this.inodes[a].direntries)\".\"!==c&&\"..\"!==c&&(b.push({parentid:a,name:c}),this.IsDirectory(d)&&this.GetRecursiveList(d,b))};\nZ.prototype.RecursiveDelete=function(a){var b=[];a=this.SearchPath(a);if(-1!==a.id)for(this.GetRecursiveList(a.id,b),a=b.length-1;0<=a;a--)this.Unlink(b[a].parentid,b[a].name)};Z.prototype.DeleteNode=function(a){var b=this.SearchPath(a);-1!==b.id&&((this.inodes[b.id].mode&61440)===ia?this.Unlink(b.parentid,b.name):(this.inodes[b.id].mode&61440)===fa&&(this.RecursiveDelete(a),this.Unlink(b.parentid,b.name)))};Z.prototype.NotifyListeners=function(){};\nZ.prototype.Check=function(){for(var a=1;a<this.inodes.length;a++)if(-1!==this.inodes[a].status){var b=this.GetInode(a);0>b.nlinks&&x.Debug(\"Error in filesystem: negative nlinks=\"+b.nlinks+\" at id =\"+a);if(this.IsDirectory(a)){b=this.GetInode(a);this.IsDirectory(a)&&0>this.GetParent(a)&&x.Debug(\"Error in filesystem: negative parent id \"+a);for(const [c,d]of b.direntries){0===c.length&&x.Debug(\"Error in filesystem: inode with no name and id \"+d);for(const e of c)32>e&&x.Debug(\"Error in filesystem: Unallowed char in filename\")}}}};\nZ.prototype.FillDirectory=function(a){var b=this.inodes[a];if(this.is_forwarder(b))this.follow_fs(b).FillDirectory(b.foreign_id);else{var c=0;for(const d of b.direntries.keys())c+=24+Hc.encode(d).length;a=this.inodedata[a]=new Uint8Array(c);b.size=c;c=0;for(const [d,e]of b.direntries)b=this.GetInode(e),c+=t.Marshall([\"Q\",\"d\",\"b\",\"s\"],[b.qid,c+13+8+1+2+Hc.encode(d).length,b.mode>>12,d],a,c)}};\nZ.prototype.RoundToDirentry=function(a,b){a=this.inodedata[a];if(b>=a.length)return a.length;let c=0;for(;;){const d=t.Unmarshall([\"Q\",\"d\"],a,{offset:c})[1];if(d>b)break;c=d}return c};Z.prototype.IsDirectory=function(a){a=this.inodes[a];return this.is_forwarder(a)?this.follow_fs(a).IsDirectory(a.foreign_id):(a.mode&61440)===fa};\nZ.prototype.IsEmpty=function(a){a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).IsDirectory(a.foreign_id);for(const b of a.direntries.keys())if(\".\"!==b&&\"..\"!==b)return!1;return!0};Z.prototype.GetChildren=function(a){this.IsDirectory(a);a=this.inodes[a];if(this.is_forwarder(a))return this.follow_fs(a).GetChildren(a.foreign_id);const b=[];for(const c of a.direntries.keys())\".\"!==c&&\"..\"!==c&&b.push(c);return b};\nZ.prototype.GetParent=function(a){this.IsDirectory(a);a=this.inodes[a];if(this.should_be_linked(a))return a.direntries.get(\"..\");const b=this.follow_fs(a).GetParent(a.foreign_id);return this.get_forwarder(a.mount_id,b)};\nZ.prototype.PrepareCAPs=function(a){a=this.GetInode(a);if(a.caps)return a.caps.length;a.caps=new Uint8Array(20);a.caps[0]=0;a.caps[1]=0;a.caps[2]=0;a.caps[3]=2;a.caps[4]=255;a.caps[5]=255;a.caps[6]=255;a.caps[7]=255;a.caps[8]=255;a.caps[9]=255;a.caps[10]=255;a.caps[11]=255;a.caps[12]=63;a.caps[13]=0;a.caps[14]=0;a.caps[15]=0;a.caps[16]=63;a.caps[17]=0;a.caps[18]=0;a.caps[19]=0;return a.caps.length};function Ic(a){this.fs=a;this.backtrack=new Map}\nIc.prototype.get_state=function(){const a=[];a[0]=this.fs;a[1]=[...this.backtrack];return a};Ic.prototype.set_state=function(a){this.fs=a[0];this.backtrack=new Map(a[1])};Z.prototype.set_forwarder=function(a,b,c){const d=this.inodes[a];this.is_forwarder(d)&&this.mounts[d.mount_id].backtrack.delete(d.foreign_id);d.status=5;d.mount_id=b;d.foreign_id=c;this.mounts[b].backtrack.set(c,a)};\nZ.prototype.create_forwarder=function(a,b){const c=this.CreateInode(),d=this.inodes.length;this.inodes.push(c);c.fid=d;this.set_forwarder(d,a,b);return d};Z.prototype.is_forwarder=function(a){return 5===a.status};Z.prototype.is_a_root=function(a){return 0===this.GetInode(a).fid};Z.prototype.get_forwarder=function(a,b){const c=this.mounts[a].backtrack.get(b);return void 0===c?this.create_forwarder(a,b):c};Z.prototype.delete_forwarder=function(a){this.is_forwarder(a);a.status=-1;this.mounts[a.mount_id].backtrack.delete(a.foreign_id)};\nZ.prototype.follow_fs=function(a){const b=this.mounts[a.mount_id];this.is_forwarder(a);return b.fs};Z.prototype.Mount=function(a,b){a=this.SearchPath(a);if(-1===a.parentid)return-2;if(-1!==a.id)return-17;if(a.forward_path){var c=this.inodes[a.parentid];b=this.follow_fs(c).Mount(a.forward_path,b);return 0>b?b:this.get_forwarder(c.mount_id,b)}c=this.mounts.length;this.mounts.push(new Ic(b));b=this.create_forwarder(c,0);this.link_under_dir(a.parentid,b,a.name);return b};\nfunction Gc(){this.type=2;this.start=0;this.length=Infinity;this.proc_id=-1;this.client_id=\"\"}Gc.prototype.get_state=function(){const a=[];a[0]=this.type;a[1]=this.start;a[2]=Infinity===this.length?0:this.length;a[3]=this.proc_id;a[4]=this.client_id;return a};Gc.prototype.set_state=function(a){this.type=a[0];this.start=a[1];this.length=0===a[2]?Infinity:a[2];this.proc_id=a[3];this.client_id=a[4]};Gc.prototype.clone=function(){const a=new Gc;a.set_state(this.get_state());return a};\nGc.prototype.conflicts_with=function(a){return this.proc_id===a.proc_id&&this.client_id===a.client_id||2===this.type||2===a.type||1!==this.type&&1!==a.type||this.start+this.length<=a.start||a.start+a.length<=this.start?!1:!0};Gc.prototype.is_alike=function(a){return a.proc_id===this.proc_id&&a.client_id===this.client_id&&a.type===this.type};Gc.prototype.may_merge_after=function(a){return this.is_alike(a)&&a.start+a.length===this.start};\nZ.prototype.DescribeLock=function(a,b,c,d,e){const g=new Gc;g.type=a;g.start=b;g.length=c;g.proc_id=d;g.client_id=e;return g};Z.prototype.GetLock=function(a,b){a=this.inodes[a];if(this.is_forwarder(a)){var c=a.foreign_id;return this.follow_fs(a).GetLock(c,b)}for(c of a.locks)if(b.conflicts_with(c))return c.clone();return null};\nZ.prototype.Lock=function(a,b,c){const d=this.inodes[a];if(this.is_forwarder(d))return a=d.foreign_id,this.follow_fs(d).Lock(a,b,c);b=b.clone();if(2!==b.type&&this.GetLock(a,b))return 1;for(c=0;c<d.locks.length;c++){a=d.locks[c];if(a.start+a.length<=b.start)continue;if(b.start+b.length<=a.start)break;if(a.proc_id!==b.proc_id||a.client_id!==b.client_id){a.conflicts_with(b);continue}var e=b.start+b.length;const g=b.start-a.start,f=a.start+a.length-e;if(0<g&&0<f&&a.type===b.type)return 0;0<g&&(a.length=\ng);if(0>=g&&0<f)a.start=e,a.length=f;else if(0<f){for(;c<d.locks.length&&d.locks[c].start<e;)c++;d.locks.splice(c,0,this.DescribeLock(a.type,e,f,a.proc_id,a.client_id))}else 0>=g&&(d.locks.splice(c,1),c--)}if(2!==b.type){c=b;a=!1;for(e=0;e<d.locks.length&&!(c.may_merge_after(d.locks[e])&&(d.locks[e].length+=b.length,c=d.locks[e],a=!0),b.start<=d.locks[e].start);e++);a||(d.locks.splice(e,0,c),e++);for(;e<d.locks.length;e++)if(d.locks[e].is_alike(c)){d.locks[e].may_merge_after(c)&&(c.length+=d.locks[e].length,\nd.locks.splice(e,1));break}}return 0};Z.prototype.read_dir=function(a){a=this.SearchPath(a);if(-1!==a.id)return a=this.GetInode(a.id),Array.from(a.direntries.keys()).filter(b=>\".\"!==b&&\"..\"!==b)};Z.prototype.read_file=function(a){a=this.SearchPath(a);if(-1===a.id)return Promise.resolve(null);const b=this.GetInode(a.id);return this.Read(a.id,0,b.size)};var x={Debug:function(a){[].slice.apply(arguments).join(\" \")},Abort:function(){}};var t={};const Jc=new TextDecoder,Hc=new TextEncoder;\nt.Marshall=function(a,b,c,d){for(var e,g=0,f=0;f<a.length;f++)switch(e=b[f],a[f]){case \"w\":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;g+=4;break;case \"d\":c[d++]=e&255;c[d++]=e>>8&255;c[d++]=e>>16&255;c[d++]=e>>24&255;c[d++]=0;c[d++]=0;c[d++]=0;c[d++]=0;g+=8;break;case \"h\":c[d++]=e&255;c[d++]=e>>8;g+=2;break;case \"b\":c[d++]=e;g+=1;break;case \"s\":var h=d,l=0;c[d++]=0;c[d++]=0;g+=2;e=Hc.encode(e);g+=e.byteLength;l+=e.byteLength;c.set(e,d);d+=e.byteLength;c[h+0]=l&255;c[h+1]=l>>8&\n255;break;case \"Q\":t.Marshall([\"b\",\"w\",\"d\"],[e.type,e.version,e.path],c,d);d+=13;g+=13;break;default:x.Debug(\"Marshall: Unknown type=\"+a[f])}return g};\nt.Unmarshall=function(a,b,c){let d=c.offset;for(var e=[],g=0;g<a.length;g++)switch(a[g]){case \"w\":var f=b[d++];f+=b[d++]<<8;f+=b[d++]<<16;f+=b[d++]<<24>>>0;e.push(f);break;case \"d\":f=b[d++];f+=b[d++]<<8;f+=b[d++]<<16;f+=b[d++]<<24>>>0;d+=4;e.push(f);break;case \"h\":f=b[d++];e.push(f+(b[d++]<<8));break;case \"b\":e.push(b[d++]);break;case \"s\":f=b[d++];f+=b[d++]<<8;var h=b.slice(d,d+f);d+=f;e.push(Jc.decode(h));break;case \"Q\":c.offset=d;f=t.Unmarshall([\"b\",\"w\",\"d\"],b,c);d=c.offset;e.push({type:f[0],version:f[1],\npath:f[2]});break;default:x.Debug(\"Error in Unmarshall: Unknown type=\"+a[g])}c.offset=d;return e};}).call(this);\n"
  },
  {
    "path": "src/renderer/start-menu.tsx",
    "content": "import * as React from \"react\";\n\nexport interface StartMenuProps {\n  navigate: (to: string) => void;\n}\n\nexport class StartMenu extends React.Component<StartMenuProps, {}> {\n  constructor(props: StartMenuProps) {\n    super(props);\n\n    this.navigate = this.navigate.bind(this);\n  }\n\n  public render() {\n    return (\n      <nav className=\"nav nav-bottom\">\n        <a onClick={this.navigate} href=\"#\" id=\"start\" className=\"nav-link\">\n          <img src=\"../../static/start.png\" alt=\"Start\" />\n          <span>Start</span>\n        </a>\n        <div className=\"nav-menu\">\n          <a\n            onClick={this.navigate}\n            href=\"#\"\n            id=\"settings\"\n            className=\"nav-link\"\n          >\n            <img src=\"../../static/settings.png\" />\n            <span>Settings</span>\n          </a>\n        </div>\n      </nav>\n    );\n  }\n\n  private navigate(event: React.SyntheticEvent<HTMLAnchorElement>) {\n    this.props.navigate(event.currentTarget.id);\n  }\n}\n"
  },
  {
    "path": "src/renderer/status.tsx",
    "content": ""
  },
  {
    "path": "src/renderer/utils/get-state-path.ts",
    "content": "import { ipcRenderer } from \"electron\";\nimport { IPC_COMMANDS } from \"../../constants\";\n\nlet _statePath = \"\";\n\nexport async function getStatePath(): Promise<string> {\n  if (_statePath) {\n    return _statePath;\n  }\n\n  const statePath = await ipcRenderer.invoke(IPC_COMMANDS.GET_STATE_PATH);\n  return (_statePath = statePath);\n}\n"
  },
  {
    "path": "src/renderer/utils/reset-state.ts",
    "content": "import fs from \"fs\";\nimport { getStatePath } from \"./get-state-path\";\n\nexport async function resetState() {\n  const statePath = await getStatePath();\n\n  if (fs.existsSync(statePath)) {\n    try {\n      await fs.promises.unlink(statePath);\n    } catch (error) {\n      console.error(`Failed to delete state file: ${error}`);\n    }\n  }\n}\n"
  },
  {
    "path": "src/utils/devmode.ts",
    "content": "/**\n * Are we currently running in development mode?\n *\n * @returns {boolean}\n */\nexport function isDevMode() {\n  return !!process.defaultApp;\n}\n"
  },
  {
    "path": "src/utils/disk-image-size.ts",
    "content": "import * as fs from \"fs\";\n\nimport { CONSTANTS } from \"../constants\";\n\n/**\n * Get the size of the disk image\n *\n * @returns {number}\n */\nexport async function getDiskImageSize(path: string) {\n  try {\n    const stats = await fs.promises.stat(path);\n\n    if (stats) {\n      return stats.size;\n    }\n  } catch (error) {\n    console.warn(`Could not determine image size`, error);\n  }\n\n  return CONSTANTS.IMAGE_DEFAULT_SIZE;\n}\n"
  },
  {
    "path": "static/entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n  <dict>\n    <key>com.apple.security.cs.allow-jit</key>\n    <true/>\n    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>\n    <true/>\n  </dict>\n</plist>"
  },
  {
    "path": "static/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"utf-8\" />\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  <title>windows95</title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"stylesheet\" href=\"../src/less/vendor/95css.css\">\n  <link rel=\"stylesheet\" href=\"../src/less/root.less\">\n  <!-- libv86 -->\n</head>\n<body class=\"paused windows95\">\n  <div id=\"app\"></div>\n  <script src=\"../src/renderer/app.tsx\"></script>\n</body>\n</html>"
  },
  {
    "path": "static/www/apps.htm",
    "content": "<html>\n<head>\n  <title>windows95 Help</title>\n</head>\n<body bgcolor=\"#C0C0C0\">\n  <table width=\"100%\" cellpadding=\"10\" cellspacing=\"0\">\n    <tr>\n      <td>\n        <font face=\"Arial\" color=\"#000000\">\n          <font size=\"5\"><b>windows95 Apps & Games</b></font>\n          <hr>\n\n          <p>I've installed a few apps and games for you to try out. Check out the Games folder on the desktop!</p>\n          <p>If you want to try other games, I recommend trying to find them on the Internet Archive. On your host computer, visit https://archive.org, then find the \"Classic PC Games\" category. Once downloaded, you can import them into windows95 from <a href=\"http://my-computer\">your host's Download folder</a>.</p>\n        </font>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n"
  },
  {
    "path": "static/www/credits.htm",
    "content": "<html>\n<head>\n  <title>Windows 95 Credits</title>\n</head>\n<body bgcolor=\"#C0C0C0\">\n  <table width=\"100%\" cellpadding=\"10\" cellspacing=\"0\">\n    <tr>\n      <td>\n        <font face=\"Arial\" color=\"#000000\">\n          <font size=\"5\"><b>windows95 Credits</b></font>\n          <hr>\n\n          <h3>Emulation Engine</h3>\n          <p>\n            None of this would be possible without the people working on v86, in particular Fabian Hemmer aka copy.\n            You can visit his website at <a href=\"http://copy.sh\" target=\"_blank\">copy.sh</a>. It also wouldn't be\n            possible without the QEMU project. If you enjoy running old systems, you probably want QEMU - windows95\n            is merely a toy, QEMU lets you actually run old systems in a stable manner.\n          </p>\n\n          <h3>Electron</h3>\n          <p>\n            Electron is a framework for building desktop applications using web technologies. It's what powers windows95.\n            You can visit the project's website at electronjs.org (in a modern browser, not in windows95).\n          </p>\n        </font>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n"
  },
  {
    "path": "static/www/help.htm",
    "content": "<html>\n<head>\n  <title>windows95 Help</title>\n</head>\n<body bgcolor=\"#C0C0C0\">\n  <table width=\"100%\" cellpadding=\"10\" cellspacing=\"0\">\n    <tr>\n      <td>\n        <font face=\"Arial\" color=\"#000000\">\n          <font size=\"5\"><b>windows95 Help</b></font>\n          <hr>\n\n          <h3>MS-DOS Display Issues</h3>\n          <p>If MS-DOS seems to mess up the screen:</p>\n          <ol>\n            <li>Hit <code>Alt + Enter</code> to make the command screen \"Full Screen\" (as far as Windows 95 is concerned)</li>\n            <li>This should restore the display from the garbled mess you see and allow you to access the Command Prompt</li>\n            <li>Press Alt-Enter again to leave Full Screen and go back to Window Mode</li>\n          </ol>\n          <p><i>(Thanks to @DisplacedGamers for that wisdom)</i></p>\n\n          <h3>windows95 Stuck in Bad State</h3>\n          <p>If windows95 becomes unresponsive or stuck:</p>\n          <ol>\n            <li>On the app's home screen, select \"Settings\" in the lower menu</li>\n            <li>Delete your machine's state before starting it again</li>\n            <li>This should resolve the issue when you restart</li>\n          </ol>\n        </font>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n"
  },
  {
    "path": "static/www/home.htm",
    "content": "<html>\n<head>\n  <title>Welcome to Windows 95!</title>\n</head>\n<body bgcolor=\"#C0C0C0\">\n  <table width=\"100%\" cellpadding=\"10\" cellspacing=\"0\">\n    <tr>\n      <td>\n        <center>\n          <marquee scrollamount=\"3\">\n            <font face=\"Arial\" size=\"6\" color=\"#000000\">\n              <blink>Welcome to Windows 95!</blink>\n            </font>\n          </marquee>\n        </center>\n\n        <font face=\"Arial\" color=\"#000000\">\n          <p>Hi, I'm Felix, the maker behind windows95. I hope you're having fun!</p>\n\n          <p>Reach out to me in a modern browser (as in: not in windows95) on <font color=\"#0000FF\">felixrieseberg.com</font> or find me on Bluesky at <font color=\"#0000FF\">@felixrieseberg</font>.</p>\n\n          <hr width=\"75%\">\n          <a name=\"internet\"></a>\n          <font size=\"5\" color=\"#000000\"><img src=\"images/ie.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\"> <b>The Internet!</b></font>\n          <hr width=\"75%\">\n\n          <p>In a major update since the last version, windows95 now has working Internet! That said, most modern websites will not work, so brace yourself. I recommend using <a href=\"http://theoldnet.com/\" target=\"_blank\">The Old Net</a> to travel back in time.</p>\n        </font>\n\n        <center>\n          <font size=\"2\" color=\"#000000\">Last updated: 2025</font>\n        </center>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n"
  },
  {
    "path": "static/www/index.htm",
    "content": "<html>\n\n<head>\n  <title>Welcome to Windows 95!</title>\n</head>\n\n<frameset cols=\"200,*\" border=\"0\" framespacing=\"0\" frameborder=\"NO\">\n  <frame src=\"navigation.htm\" name=\"nav\" scrolling=\"auto\" noresize>\n  <frame src=\"home.htm\" name=\"main\" scrolling=\"auto\" noresize>\n  <noframes>\n    <body bgcolor=\"#000080\">\n      <font face=\"Arial\" color=\"#FFFFFF\">\n        <h2>Frame Alert!</h2>\n        <p>This page uses frames, but your browser doesn't support them.</p>\n        <p>Please upgrade to Netscape Navigator 2.0 or Internet Explorer 3.0!</p>\n      </font>\n    </body>\n  </noframes>\n</frameset>\n\n</html>\n"
  },
  {
    "path": "static/www/navigation.htm",
    "content": "<html>\n<head>\n  <title>Navigation</title>\n</head>\n<body bgcolor=\"#C0C0C0\" background=\"images/bg.gif\">\n  <table width=\"100%\" cellpadding=\"4\" cellspacing=\"1\" bgcolor=\"#000000\">\n    <tr><td bgcolor=\"#C0C0C0\">\n      <font face=\"Arial\" size=\"2\" color=\"#000000\">\n        <img src=\"images/folder.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\"> <b>Navigation</b>\n      </font>\n    </td></tr>\n    <tr><td bgcolor=\"#C0C0C0\">\n      <font face=\"Arial\" size=\"2\" color=\"#000000\">\n        <img src=\"images/desktop.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\"> <a href=\"home.htm\" target=\"main\">Home</a>\n      </font>\n    </td></tr>\n    <tr><td bgcolor=\"#C0C0C0\">\n      <font face=\"Arial\" size=\"2\" color=\"#000000\">\n        <img src=\"images/programs.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\"> <a href=\"apps.htm\" target=\"main\">Apps & Games</a>\n      </font>\n    </td></tr>\n    <tr><td bgcolor=\"#C0C0C0\">\n      <font face=\"Arial\" size=\"2\" color=\"#000000\">\n        <img src=\"images/help.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\"> <a href=\"help.htm\" target=\"main\">Help</a>\n      </font>\n    </td></tr>\n    <tr><td bgcolor=\"#C0C0C0\">\n      <font face=\"Arial\" size=\"2\" color=\"#000000\">\n        <img src=\"images/doc.gif\" width=\"16\" height=\"16\" border=\"0\" align=\"absmiddle\"> <a href=\"credits.htm\" target=\"main\">Credits</a>\n      </font>\n    </td></tr>\n  </table>\n  <br>\n  <center>\n    <p>\n      <font face=\"Arial\" size=\"1\" color=\"#000000\">\n        Best viewed with<br>\n        Internet Explorer 5.5 and windows95\n      </font>\n    </p>\n    <img src=\"buttons/madewithelectron.gif\" width=\"88\" height=\"31\" border=\"0\" align=\"absmiddle\">\n    <img src=\"buttons/macos.gif\" width=\"88\" height=\"31\" border=\"0\" align=\"absmiddle\">\n    <img src=\"buttons/msie.gif\" width=\"88\" height=\"31\" border=\"0\" align=\"absmiddle\">\n  </center>\n</body>\n</html>\n"
  },
  {
    "path": "tools/add-macos-cert.sh",
    "content": "#!/usr/bin/env sh\n\nKEY_CHAIN=build.keychain\nMACOS_CERT_P12_FILE=certificate.p12\n\n# Recreate the certificate from the secure environment variable\necho $MACOS_CERT_P12 | base64 --decode > $MACOS_CERT_P12_FILE\n\n#create a keychain\nsecurity create-keychain -p actions $KEY_CHAIN\n\n# Make the keychain the default so identities are found\nsecurity default-keychain -s $KEY_CHAIN\n\n# Unlock the keychain\nsecurity unlock-keychain -p actions $KEY_CHAIN\n\nsecurity import $MACOS_CERT_P12_FILE -k $KEY_CHAIN -P $MACOS_CERT_PASSWORD -T /usr/bin/codesign;\n\nsecurity set-key-partition-list -S apple-tool:,apple: -s -k actions $KEY_CHAIN\n\n# remove certs\nrm -fr *.p12\n"
  },
  {
    "path": "tools/check-links.js",
    "content": "const fs = require('fs/promises')\nconst path = require('path')\nconst fetch = require('node-fetch')\n\nconst LINK_RGX = /(http|ftp|https):\\/\\/([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?/g;\n\nasync function main() {\n  const readmePath = path.join(__dirname, '../README.md')\n  const readme = await fs.readFile(readmePath, 'utf-8')\n  const links = readme.match(LINK_RGX)\n  let failed = false\n\n  for (const link of links) {\n    try {\n      const response = await fetch(link, { method: 'HEAD' })\n\n      if (!response.ok) {\n        // If we're inside GitHub's release asset server, we just ran into AWS not allowing\n        // HEAD requests, which is different from a 404.\n        if (!response.url.startsWith('https://github-production-release-asset')) {\n          throw new Error (`HTTP Error Response: ${response.status} ${response.statusText}`)\n        }\n      }\n\n      console.log(`✅ ${link}`);\n    } catch (error) {\n      failed = true\n\n      console.log(`❌ ${link}\\n${error}`)\n    }\n  }\n\n  if (failed) {\n    process.exit(-1);\n  }\n}\n\nmain()\n"
  },
  {
    "path": "tools/download-disk.ps1",
    "content": "mkdir images\ncd images\n\n$wc = New-Object System.Net.WebClient\n$wc.DownloadFile($env:DISK_URL, \"$(Resolve-Path .)\\images.zip\")\n\n7z x images.zip -y -aoa\nRemove-Item images.zip\nRemove-Item __MACOSX -Recurse -ErrorAction Ignore\ncd ..\nTree ./ /F\n"
  },
  {
    "path": "tools/download-disk.sh",
    "content": "#!/usr/bin/env sh\n\nmkdir -p ./images\ncd ./images\nwget -O images.zip $DISK_URL\nunzip -o images.zip\nrm images.zip\nrm -r __MACOSX\ncd -\nls images\n"
  },
  {
    "path": "tools/generateAssets.js",
    "content": "/* tslint:disable */\n\nconst { compileParcel } = require('./parcel-build')\n\nmodule.exports = async () => {\n  await Promise.all([compileParcel()])\n}\n"
  },
  {
    "path": "tools/parcel-build.js",
    "content": "/* tslint:disable */\n\nconst Bundler = require('parcel-bundler')\nconst path = require('path')\nconst fs = require('fs')\n\nasync function copyLib() {\n  const target = path.join(__dirname, '../dist/static')\n  const lib = path.join(__dirname, '../src/renderer/lib')\n  const index = path.join(target, 'index.html')\n\n  // Copy in lib\n  await fs.promises.cp(lib, target, { recursive: true });\n\n  // Patch so that fs.read is used\n  const libv86path = path.join(target, 'libv86.js')\n  const libv86 = fs.readFileSync(libv86path, 'utf-8')\n\n  let patchedLibv86 = libv86.replace('k.load_file=\"undefined\"===typeof XMLHttpRequest?pa:qa', 'k.load_file=pa')\n  patchedLibv86 = patchedLibv86.replace('H.exportSymbol=function(a,b){\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports?module.exports[a]=b:\"undefined\"!==typeof window?window[a]=b:\"function\"===typeof importScripts&&(self[a]=b)}', 'H.exportSymbol=function(a,b){\"undefined\"!==typeof window?window[a]=b:\"undefined\"!==typeof module&&\"undefined\"!==typeof module.exports?module.exports[a]=b:\"function\"===typeof importScripts&&(self[a]=b)}')\n  patchedLibv86 = patchedLibv86.replace('this.fetch=fetch;', 'this.fetch=(...args)=>fetch(...args);')\n\n  fs.writeFileSync(libv86path, patchedLibv86)\n\n  // Overwrite\n  const indexContents = fs.readFileSync(index, 'utf-8');\n  const replacedContents = indexContents.replace('<!-- libv86 -->', '<script src=\"libv86.js\"></script>')\n  fs.writeFileSync(index, replacedContents)\n}\n\nasync function compileParcel (options = {}) {\n  const entryFiles = [\n    path.join(__dirname, '../static/index.html'),\n    path.join(__dirname, '../src/main/main.ts')\n  ]\n\n  const bundlerOptions = {\n    outDir: './dist', // The out directory to put the build files in, defaults to dist\n    outFile: undefined, // The name of the outputFile\n    publicUrl: '../', // The url to server on, defaults to dist\n    watch: false, // whether to watch the files and rebuild them on change, defaults to process.env.NODE_ENV !== 'production'\n    cache: false, // Enabled or disables caching, defaults to true\n    cacheDir: '.cache', // The directory cache gets put in, defaults to .cache\n    contentHash: false, // Disable content hash from being included on the filename\n    minify: false, // Minify files, enabled if process.env.NODE_ENV === 'production'\n    scopeHoist: false, // turn on experimental scope hoisting/tree shaking flag, for smaller production bundles\n    target: 'electron', // browser/node/electron, defaults to browser\n    // https: { // Define a custom {key, cert} pair, use true to generate one or false to use http\n    //   cert: './ssl/c.crt', // path to custom certificate\n    //   key: './ssl/k.key' // path to custom key\n    // },\n    logLevel: 3, // 3 = log everything, 2 = log warnings & errors, 1 = log errors\n    hmr: false, // Enable or disable HMR while watching\n    hmrPort: 0, // The port the HMR socket runs on, defaults to a random free port (0 in node.js resolves to a random free port)\n    sourceMaps: false, // Enable or disable sourcemaps, defaults to enabled (minified builds currently always create sourcemaps)\n    hmrHostname: '', // A hostname for hot module reload, default to ''\n    detailedReport: false, // Prints a detailed report of the bundles, assets, filesizes and times, defaults to false, reports are only printed if watch is disabled,\n    ...options\n  }\n\n  const bundler = new Bundler(entryFiles, bundlerOptions)\n\n  // Run the bundler, this returns the main bundle\n  // Use the events if you're using watch mode as this promise will only trigger once and not for every rebuild\n  await bundler.bundle()\n\n  await copyLib();\n}\n\nmodule.exports = {\n  compileParcel\n}\n\nif (require.main === module) compileParcel()\n"
  },
  {
    "path": "tools/parcel-watch.js",
    "content": "const { compileParcel } = require('./parcel-build')\n\nasync function watchParcel () {\n  return compileParcel({ watch: true })\n}\n\nmodule.exports = {\n  watchParcel\n}\n\nif (require.main === module) watchParcel()\n"
  },
  {
    "path": "tools/resedit.js",
    "content": "const path = require('path');\n\nconst resedit = require('../node_modules/@electron/packager/dist/resedit.js')\nconst package = require('../package.json');\n\nconst exePath = process.argv[process.argv.length - 1]\n\nconsole.log(exePath)\n\nasync function main() {\n  await resedit.resedit(exePath, {\n    \"productVersion\": package.version,\n    \"fileVersion\": package.version,\n    \"productName\": package.productName,\n    \"iconPath\": path.join(__dirname, \"../assets/icon.ico\"),\n    \"win32Metadata\": {\n      \"FileDescription\": package.productName,\n      \"InternalName\": package.name,\n      \"OriginalFilename\": `${package.name}.exe`,\n      \"ProductName\": package.productName,\n      \"CompanyName\": package.author\n    }\n  });\n}\n\nmain();\n"
  },
  {
    "path": "tools/run-bin.js",
    "content": "/* tslint:disable */\n\nconst childProcess = require('child_process')\nconst path = require('path')\n\nasync function run (name, bin, args = []) {\n  await new Promise((resolve, reject) => {\n    console.info(`Running ${name}`)\n\n    const cmd = process.platform === 'win32' ? `${bin}.cmd` : bin\n    const child = childProcess.spawn(\n      path.resolve(__dirname, '..', 'node_modules', '.bin', cmd),\n      args,\n      {\n        cwd: path.resolve(__dirname, '..'),\n        stdio: 'inherit'\n      }\n    )\n\n    child.on('exit', (code) => {\n      console.log('')\n      if (code === 0) return resolve()\n      reject(new Error(`${name} failed`))\n    })\n  })\n};\n\nmodule.exports = {\n  run\n}\n"
  },
  {
    "path": "tools/tsc.js",
    "content": "/* tslint:disable */\n\nconst { run } = require('./run-bin')\n\nasync function compileTypeScript () {\n  await run('TypeScript', 'tsc', ['-p', 'tsconfig.json'])\n};\n\nmodule.exports = {\n  compileTypeScript\n}\n\nif (require.main === module) compileTypeScript()\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"outDir\": \"./dist\",\n    \"allowJs\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"experimentalDecorators\": true,\n    \"removeComments\": false,\n    \"preserveConstEnums\": true,\n    \"sourceMap\": true,\n    \"lib\": [\n      \"es2023\",\n      \"dom\"\n    ],\n    \"noImplicitAny\": true,\n    \"noImplicitReturns\": true,\n    \"strictNullChecks\": true,\n    \"noUnusedLocals\": true,\n    \"noImplicitThis\": true,\n    \"noUnusedParameters\": true,\n    \"noEmitHelpers\": false,\n    \"module\": \"commonjs\",\n    \"moduleResolution\": \"node\",\n    \"pretty\": true,\n    \"target\": \"es2023\",\n    \"jsx\": \"react\",\n    \"typeRoots\": [\n      \"./node_modules/@types\"\n    ],\n    \"baseUrl\": \".\"\n  },\n  \"include\": [\n    \"src/**/*\"\n  ],\n  \"exclude\": [\n    \"node_modules\"\n  ],\n  \"formatCodeOptions\": {\n    \"indentSize\": 2,\n    \"tabSize\": 2\n  }\n}\n"
  }
]