Full Code of felixrieseberg/macintosh.js for AI

master 6b84c6005118 cached
48 files
4.1 MB
1.1M tokens
3213 symbols
1 requests
Download .txt
Showing preview only (4,337K chars total). Download the full file or copy to clipboard to get everything.
Repository: felixrieseberg/macintosh.js
Branch: master
Commit: 6b84c6005118
Files: 48
Total size: 4.1 MB

Directory structure:
gitextract_d6lh78vc/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── CREDITS.md
├── README.md
├── assets/
│   ├── entitlements.plist
│   └── icon.icns
├── forge.config.js
├── package.json
├── src/
│   ├── basilisk/
│   │   ├── BasiliskII-worker-boot.js
│   │   ├── BasiliskII.js
│   │   ├── BasiliskII.js.mem
│   │   ├── LICENSE.txt
│   │   ├── prefs_template
│   │   └── rom
│   ├── main/
│   │   ├── appfolder.js
│   │   ├── devmode.js
│   │   ├── index.js
│   │   ├── ipc.js
│   │   ├── squirrel.js
│   │   ├── update.js
│   │   └── windows.js
│   └── renderer/
│       ├── atomics.js
│       ├── audio.js
│       ├── controls.js
│       ├── credits.html
│       ├── credits.js
│       ├── dialogs.js
│       ├── emulator.js
│       ├── help.html
│       ├── help.js
│       ├── index.html
│       ├── input.js
│       ├── ipc.js
│       ├── iso.js
│       ├── powershell.js
│       ├── screen.js
│       ├── style/
│       │   ├── base.css
│       │   ├── credits.css
│       │   ├── help.css
│       │   ├── index.css
│       │   └── spinner.css
│       ├── video.js
│       └── worker.js
└── tools/
    ├── add-macos-cert.sh
    ├── check-links.js
    ├── download-disk.ps1
    └── download-disk.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
text eol=lf
rom -text

================================================
FILE: .github/workflows/build.yml
================================================
name: Build & Release

on:
  push:
    branches:
      - master
    tags:
      - v*
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: lts/*
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - uses: actions/cache@v3
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Install
        run: yarn --frozen-lockfile
      - name: lint
        run: yarn lint
  build:
    needs: lint
    name: Build (${{ matrix.os }} - ${{ matrix.arch }})
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        # Build for supported platforms
        # https://github.com/electron/electron-packager/blob/ebcbd439ff3e0f6f92fa880ff28a8670a9bcf2ab/src/targets.js#L9
        # 32-bit Linux unsupported as of 2019: https://www.electronjs.org/blog/linux-32bit-support
        os: [ macOS-latest, ubuntu-20.04, windows-latest ]
        arch: [ x64, arm64 ]
        include:
        - os: windows-latest
          arch: ia32
        - os: ubuntu-20.04
          arch: armv7l
        # Publishing artifacts for multiple Windows architectures has
        # a bug which can cause the wrong architecture to be downloaded
        # for an update, so until that is fixed, only build Windows x64
        exclude:
        - os: windows-latest
          arch: arm64

    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: lts/*
      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"
      - uses: actions/cache@v3
        if: matrix.os != 'macOS-latest'
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-
      - name: Set MacOS signing certs
        if: matrix.os == 'macOS-latest'
        run: chmod +x tools/add-macos-cert.sh && ./tools/add-macos-cert.sh
        env:
          MACOS_CERT_P12: ${{ secrets.MACOS_CERT_P12 }}
          MACOS_CERT_PASSWORD: ${{ secrets.MACOS_CERT_PASSWORD }}
      - name: Set Windows signing certificate
        if: matrix.os == 'windows-latest'
        continue-on-error: true
        id: write_file
        uses: timheuer/base64-to-file@v1
        with:
          fileName: 'win-certificate.pfx'
          encodedString: ${{ secrets.WINDOWS_CODESIGN_P12 }}
      - name: Download disk image (ps1)
        run: tools/download-disk.ps1
        if: matrix.os == 'windows-latest' && startsWith(github.ref, 'refs/tags/')
        env:
          DISK_URL: ${{ secrets.DISK_URL }}
      - name: Download disk image (sh)
        run: chmod +x tools/download-disk.sh && ./tools/download-disk.sh
        if: matrix.os != 'windows-latest' && startsWith(github.ref, 'refs/tags/')
        env:
          DISK_URL: ${{ secrets.DISK_URL }}
      - name: Install
        run: yarn
      - name: Make
        if: startsWith(github.ref, 'refs/tags/')
        run: yarn make --arch=${{ matrix.arch }}
        env:
          APPLE_ID: ${{ secrets.APPLE_ID }}
          APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
          WINDOWS_CODESIGN_FILE: ${{ steps.write_file.outputs.filePath }}
          WINDOWS_CODESIGN_PASSWORD: ${{ secrets.WINDOWS_CODESIGN_PASSWORD }}
      # - name: Archive production artifacts
      #   uses: actions/upload-artifact@v2
      #   with:
      #     name: ${{ matrix.os }}
      #     path: out/make/**/*
      - name: Release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          draft: true
          files: |
            out/**/*.deb
            out/**/*.dmg
            out/**/*setup*.exe
            out/**/*.rpm
            out/**/*.zip

================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock
.DS_Store

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# next.js build output
.next

# nuxt.js build output
.nuxt

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# Webpack
.webpack/

# Electron-Forge
out/

# Custom stuff
src/basilisk/user_files
src/basilisk/user_image_*
src/basilisk/disk
src/basilisk/prefs


================================================
FILE: CREDITS.md
================================================
# macintosh.js Credits

This app by <a href="https://www.felixrieseberg.com">Felix Rieseberg</a>. The real work was done by the people below:

**Emulator**: Basilisk II, a 68k Macintosh emulator, by [Christian Bauer et al](http://basilisk.cebix.net), modified and compiled [with Emscripten](https://jamesfriend.com.au/basilisk-ii-classic-mac-emulator-in-the-browser) by [James Friend](https://jamesfriend.com.au).

**Runtime**: The developers behind Electron, electron-forge, Chromium, Node.js.

**Installed software** from vintage computing archives: [WinWorldPC](https://winworldpc.com), [Macintosh Garden](https://macintoshgarden.org), and [Macintosh Repository](https://www.macintoshrepository.org/).

This software is not affiliated with nor authorized by Apple. It is provided for educational purposes only. This is an unstable toy and should not be expected to work properly.

# Licenses

The [source code for this app can be found on GitHub](https://github.com/felixrieseberg/macintosh).

Basilisk II and its components are released under the GNU GPL. See [LICENSE](src/basilisk/LICENSE.txt) for details.


================================================
FILE: README.md
================================================
# macintosh.js

This is Mac OS 8, running in an [Electron](https://electronjs.org/) app pretending to be a 1991 Macintosh Quadra. Yes, it's the full thing. I'm sorry.

![Screenshot](https://user-images.githubusercontent.com/1426799/88612692-a1d81a00-d040-11ea-85c9-c64142c503d5.jpg)

## Downloads

<table class="is-fullwidth">
</thead>
<tbody>
</tbody>
  <tr>
    <td>
      <img src="./.github/images/windows.png" width="24"><br />
      Windows
    </td>
    <td>
      <span>32-bit</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintoshjs-1.2.0-setup-ia32.exe">
        💿 Installer
      </a> |
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintosh.js-win32-ia32-1.2.0.zip">
        📦 Standalone Zip
      </a>
      <br />
      <span>64-bit</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintoshjs-1.2.0-setup-x64.exe">
        💿 Installer
      </a> |
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.2.0/macintosh.js-win32-x64-1.2.0.zip">
        📦 Standalone Zip
      </a><br />
      <span>
        ❓ Don't know what kind of chip you have? Hit start, enter "processor" for info.
      </span>
    </td>
  </tr>
  <tr>
    <td>
      <img src="./.github/images/macos.png" width="24"><br />
      macOS
    </td>
    <td>
      <span>Intel Processor</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-darwin-x64-1.1.0.zip">
        📦 Standalone Zip
      </a><br />
      <span>Apple M1 Processor</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-darwin-arm64-1.1.0.zip">
        📦 Standalone Zip
      </a><br />
      <span>
        ❓ Don't know what kind of chip you have? Learn more at <a href="https://support.apple.com/en-us/HT211814">apple.com</a>.
      </span>
    </td>
  </tr>
  <tr>
    <td>
      <img src="./.github/images/linux.png" width="24"><br />
      Linux
    </td>
    <td>
      <span>32-bit</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.i386.rpm">
        💿 rpm
      </a> |
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_i386.deb">
        💿 deb
      </a><br />
      <span>64-bit</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.x86_64.rpm">
        💿 rpm
      </a> |
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_amd64.deb">
        💿 deb
      </a><br />
      <span>ARM64</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.arm64.rpm">
        💿 rpm
      </a> |
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_arm64.deb">
        💿 deb
      </a><br />
      <span>ARMv7 (armhf)</span>
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js-1.1.0-1.armv7hl.rpm">
        💿 rpm
      </a> |
      <a href="https://github.com/felixrieseberg/macintosh.js/releases/download/v1.1.0/macintosh.js_1.1.0_armhf.deb">
        💿 deb
      </a><br />
      <span>
        ❓ Don't know what kind of chip you have? Run `uname -m` in the console.
      </span>
    </td>
  </tr>
</table>

<hr />

## Does it work?
Yes! Quite well, actually - on macOS, Windows, and Linux. Bear in mind that this is written entirely in JavaScript, so please adjust your expectations. The virtual machine is emulating a 1991 Macintosh Quadra 900 with a Motorola CPU, which Apple used before switching to the PowerPC architecture (Apple/IBM/Motorola) in the mid 1990s.

## Should this have been a native app?
Absolutely.

## Does it run my favorite game or app?
The short answer is "Yes". In fact, you'll find various games and demos preinstalled, thanks to an old MacWorld Demo CD from 1997. Namely, Oregon Trail, Duke Nukem 3D, Civilization II, Alley 19 Bowling, Damage Incorporated, and Dungeons & Dragons.

There are also various apps and trials preinstalled, including Photoshop 3, Premiere 4, Illustrator 5.5, StuffIt Expander, the Apple Web Page Construction Kit, and more.

## Can I transfer files from and to the machine?

Yes, you can. Click on the "Help" button at the bottom of the running app to see instructions. You can transfer files directly - or mount disk images.

## Can I connect to the Internet?

No. For what it's worth, the web was quite different 30 years ago - and you wouldn't be able to open even Google. However, Internet Explorer and Netscape are installed, as is the "Web Sharing Server", if you want to play around a bit.

## Should I use this for [serious application]?

Probably not. This is a toy - it's not the best nor the most performant way to emulate an old Macintosh. It is, however, a quick and easy way to experience a bit of nostalgia if you're _not_ trying to do anything serious with it.

## Credits

Please check out the [CREDITS](CREDITS.md)! This app wouldn't be possible without the hard work of [Christian Bauer](https://www.cebix.net/) and [James Friend](https://jamesfriend.com.au/), who did everything that seems like computing magic here.

## License

This project is provided for educational purposes only. It is not affiliated with and has
not been approved by Apple.


================================================
FILE: assets/entitlements.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.automation.apple-events</key>
    <true/>
  </dict>
</plist>

================================================
FILE: forge.config.js
================================================
const path = require('path');
const fs = require('fs');
const package = require('./package.json');

if (process.env['WINDOWS_CODESIGN_FILE']) {
  const certPath = path.join(__dirname, 'win-certificate.pfx');
  const certExists = fs.existsSync(certPath);

  if (certExists) {
    process.env['WINDOWS_CODESIGN_FILE'] = certPath;
  }
}

module.exports = {
  packagerConfig: {
    asar: false,
    icon: path.resolve(__dirname, 'assets', 'icon'),
    appBundleId: 'com.felixrieseberg.macintoshjs',
    appCategoryType: 'public.app-category.developer-tools',
    win32metadata: {
      CompanyName: 'Felix Rieseberg',
      OriginalFilename: 'macintoshjs'
    },
    osxSign: {
      identity: 'Developer ID Application: Felix Rieseberg (LT94ZKYDCJ)',
      'hardened-runtime': true,
      'gatekeeper-assess': false,
      'entitlements': 'assets/entitlements.plist',
      'entitlements-inherit': 'assets/entitlements.plist',
      'signature-flags': 'library'
    },
    osxNotarize: {
      appBundleId: 'com.felixrieseberg.macintoshjs',
      appleId: process.env['APPLE_ID'],
      appleIdPassword: process.env['APPLE_ID_PASSWORD'],
      ascProvider: 'LT94ZKYDCJ'
    },
    ignore: [
      /\/github(\/?)/,
      /\/assets(\/?)/,
      /\/docs(\/?)/,
      /\/tools(\/?)/,
      /\/src\/basilisk\/user_files(\/?)/,
      /package-lock\.json/,
      /README\.md/,
      /CREDITS\.md/,
      /issue_template\.md/,
      /HELP\.md/,
      /win-certificate\.pfx/,
      /user_image_.*/
    ]
  },
  makers: [
    {
      name: '@electron-forge/maker-squirrel',
      platforms: ['win32'],
      config: (arch) => {
        return {
          name: 'macintosh.js',
          authors: 'Felix Rieseberg',
          exe: 'macintosh.js.exe',
          noMsi: true,
          remoteReleases: '',
          setupExe: `macintoshjs-${package.version}-setup-${arch}.exe`,
          setupIcon: path.resolve(__dirname, 'assets', 'icon.ico'),
          certificateFile: process.env['WINDOWS_CODESIGN_FILE'],
          certificatePassword: process.env['WINDOWS_CODESIGN_PASSWORD'],
          loadingGif: './assets/loadingGif.gif',
        }
      }
    },
    {
      name: '@electron-forge/maker-zip',
      platforms: ['darwin', 'win32']
    },
    {
      name: '@electron-forge/maker-deb',
      platforms: ['linux'],
      options: {
        maintainer: 'Felix Rieseberg',
        homepage: 'https://github.com/felixrieseberg/macintosh.js',
        categories: [
          'Education',
        ],
        icon: path.resolve(__dirname, 'assets', 'icon.png')
      }
    },
    {
      name: '@electron-forge/maker-rpm',
      platforms: ['linux']
    }
  ],
  publishers: [
    {
      name: '@electron-forge/publisher-github',
      config: {
        repository: {
          owner: 'felixrieseberg',
          name: 'macintosh.js'
        },
        draft: true,
        prerelease: true
      }
    }
  ]
};


================================================
FILE: package.json
================================================
{
  "name": "macintosh.js",
  "productName": "macintosh.js",
  "version": "1.2.0",
  "description": "Macintosh's System 8 in an Electron app. I'm sorry.",
  "main": "src/main/index.js",
  "scripts": {
    "start": "electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make",
    "publish": "electron-forge publish",
    "lint": "npx prettier --check src/{main,renderer}/*.{js,css} && npm run check-links",
    "fix": "npx prettier --write \"src/{main,renderer}/**.{js,css}\"",
    "check-links": "node tools/check-links.js"
  },
  "keywords": [],
  "author": {
    "name": "Felix Rieseberg",
    "email": "felix@felixrieseberg.com"
  },
  "license": "MIT",
  "config": {
    "forge": "./forge.config.js"
  },
  "dependencies": {
    "electron-squirrel-startup": "^1.0.0",
    "update-electron-app": "^2.0.1"
  },
  "devDependencies": {
    "@electron-forge/cli": "6.0.5",
    "@electron-forge/maker-deb": "6.0.5",
    "@electron-forge/maker-rpm": "6.0.5",
    "@electron-forge/maker-squirrel": "6.0.5",
    "@electron-forge/maker-zip": "6.0.5",
    "electron": "23.1.3",
    "node-fetch": "^2.6.1"
  }
}


================================================
FILE: src/basilisk/BasiliskII-worker-boot.js
================================================
const fs = require("fs");
const path = require("path");

const homeDir = require("os").homedir();
const macDir = path.join(homeDir, "macintosh.js");
const macintoshCopyPath = path.join(__dirname, "user_files");

// Set by config
let userDataPath;

function getUserDataDiskPath() {
  return path.join(userDataPath, "disk");
}

// File type utilities

function isFile(v = "") {
  return fs.statSync(path.join(macDir, v)).isFile();
}

function isHiddenFile(filename = '') {
  return filename.startsWith('.');
}

function isCDImage(filename = '') {
  return filename.endsWith('.iso') || filename.endsWith('.toast');
}

function isDiskImage(filename = '') {
  return filename.endsWith('.img') || filename.endsWith('.dsk') || filename.endsWith('.hda');
}

function cleanupCopyPath() {
  try {
    if (fs.existsSync(macintoshCopyPath)) {
      fs.rmdirSync(macintoshCopyPath, { recursive: true });
    }

    fs.mkdirSync(macintoshCopyPath);
  } catch (error) {
    console.error(`cleanupCopyPath: Failed to remove`, error);
  }
}

function getUserDataDiskImage() {
  if (!userDataPath) {
    console.error(`getUserDataDiskImage: userDataPath not set`);
    return;
  }

  const diskImageUserPath = getUserDataDiskPath();
  const diskImagePath = path.join(__dirname, "disk");

  // If there's a disk image, move it over
  if (!fs.existsSync(diskImageUserPath)) {
    try {
      fs.renameSync(diskImagePath, diskImageUserPath);
    } catch (error) {
      // This is _probably_ a permissions thing, let's copy the file
      fs.copyFileSync(diskImagePath, diskImageUserPath);
    }
  } else {
    console.log(
      `getUserDataDiskImage: Image in user data dir, not doing anything`
    );
  }
}

// Taken a given path, it'll look at all the files in there,
// copy them over to the basilisk folder, and then add them
// to MEMFS
function preloadFilesAtPath(module, initalSourcePath) {
  try {
    const sourcePath = path.join(macDir, initalSourcePath);
    const targetPath = `/macintosh.js${
      initalSourcePath ? `/${initalSourcePath}` : ""
    }`;
    const files = fs.readdirSync(sourcePath).filter((v) => {
      // Remove hidden, iso, and img files
      return !isHiddenFile(v) && !isDiskImage(v) && !isCDImage(v);
    });

    (files || []).forEach((fileName) => {
      try {
        // If not, let's move on
        const fileSourcePath = path.join(sourcePath, fileName);
        const relativeSourcePath = `${
          initalSourcePath ? `${initalSourcePath}/` : ""
        }${fileName}`;

        // Check if directory
        if (fs.statSync(fileSourcePath).isDirectory()) {
          try {
            const virtualDirPath = `${targetPath}/${fileName}`;
            module.FS.mkdir(virtualDirPath);
          } catch (error) {
            console.log(error);
          }

          preloadFilesAtPath(module, relativeSourcePath);
          return;
        }

        createPreloadedFile(module, {
          parent: targetPath,
          name: fileName,
          url: fileSourcePath,
        });
      } catch (error) {
        postMessage("showMessageBoxSync", {
          type: "error",
          title: "Could not transfer file",
          message: `We tried to transfer ${fileName} to the virtual machine, but failed. The error was: ${error}`,
        });

        console.error(
          `preloadFilesAtPath: Failed to preload ${fileName}`,
          error
        );
      }
    });
  } catch (error) {
    postMessage("showMessageBoxSync", {
      type: "error",
      title: "Could not transfer files",
      message: `We tried to transfer files to the virtual machine, but failed. The error was: ${error}`,
    });

    console.error(`preloadFilesAtPath: Failed to preloadFilesAtPath`, error);
  }
}

function createPreloadedFile(module, options) {
  const parent = options.parent || `/`;
  const name = options.name || path.basename(options.url);
  const url = options.url;

  console.log(`Adding preload file`, { parent, name, url });
  module.FS_createPreloadedFile(parent, name, url, true, true);
}

function addAutoloader(module) {
  const loadDatafiles = function () {
    module.autoloadFiles.forEach(({ url, name }) =>
      createPreloadedFile(module, { url, name })
    );

    // If the user has a macintosh.js dir, we'll copy over user
    // data
    if (!fs.existsSync(macDir)) {
      return;
    }

    // Load user files
    preloadFilesAtPath(module, "");
  };

  if (module.autoloadFiles) {
    module.preRun = module.preRun || [];
    module.preRun.unshift(loadDatafiles);
  }

  return module;
}

function addCustomAsyncInit(module) {
  if (module.asyncInit) {
    module.preRun = module.preRun || [];
    module.preRun.push(function waitForCustomAsyncInit() {
      module.addRunDependency("__moduleAsyncInit");

      module.asyncInit(module, function asyncInitCallback() {
        module.removeRunDependency("__moduleAsyncInit");
      });
    });
  }
}

function writeSafely(filePath, fileData) {
  return new Promise((resolve) => {
    fs.writeFile(filePath, fileData, (error) => {
      if (error) {
        postMessage("showMessageBoxSync", {
          type: "error",
          title: "Could not save files",
          message: `We tried to save files from the virtual machine, but failed. The error was: ${error}`,
        });

        console.error(`Disk save: Encountered error for ${filePath}`, error);
      } else {
        console.log(`Disk save: Finished writing ${filePath}`);
      }

      resolve();
    });
  });
}

function writePrefs(userImages = []) {
  try {
    const prefsTemplatePath = path.join(__dirname, "prefs_template");
    const prefsPath = path.join(userDataPath, "prefs");

    let prefs = fs.readFileSync(prefsTemplatePath, { encoding: "utf-8" });

    // Replace line endings, just in case
    prefs = prefs.replaceAll("\r\n", "\n");

    if (userImages && userImages.length > 0) {
      console.log(`writePrefs: Found ${userImages.length} user images`);
      userImages.forEach(({ name }) => {
        if (isCDImage(name)) {
          prefs += `\ncdrom ${name}`;
        } else if (isDiskImage(name)) {
          prefs += `\ndisk ${name}`;
        }
      });
    }

    prefs += `\n`;

    fs.writeFileSync(prefsPath, prefs);
  } catch (error) {
    console.error(`writePrefs: Failed to set prefs`, error);
  }
}

function getUserImages() {
  const result = [];

  try {
    // No need if the macDir doesn't exist
    if (!fs.existsSync(macDir)) {
      console.log(`getUserImages: ${macDir} does not exist, exit`);
      return result;
    }

    const macDirFiles = fs.readdirSync(macDir);
    const imgFiles = macDirFiles.filter((v) => isFile(v) && isDiskImage(v));
    const isoFiles = macDirFiles.filter((v) => isFile(v) && isCDImage(v));
    const isoImgFiles = [...isoFiles, ...imgFiles];

    console.log(`getUserImages: iso and img files`, isoImgFiles);

    isoImgFiles.forEach((fileName, i) => {
      const url = path.join(macDir, fileName);
      const sanitizedFileName = `user_image_${i}_${fileName.replace(
        /[^\w\s\.]/gi,
        ""
      )}`;

      result.push({ url, name: sanitizedFileName });
    });
  } catch (error) {
    console.error(`getUserImages: Encountered error`, error);
  }

  return result;
}

function getAutoLoadFiles(userImages = []) {
  const autoLoadFiles = [
    {
      name: "disk",
      url: path.join(userDataPath, "disk"),
    },
    {
      name: "rom",
      url: path.join(__dirname, "rom"),
    },
    {
      name: "prefs",
      url: path.join(userDataPath, "prefs"),
    },
    ...userImages,
  ];

  return autoLoadFiles;
}

async function saveFilesInPath(folderPath) {
  const entries = (Module.FS.readdir(folderPath) || []).filter(
    (v) => !v.startsWith(".")
  );

  if (!entries || entries.length === 0) return;

  // Ensure directory
  const targetDir = path.join(homeDir, folderPath);
  if (!fs.existsSync(targetDir)) {
    fs.mkdirSync(targetDir);
  }

  for (const file of entries) {
    try {
      const fileSourcePath = `${folderPath}/${file}`;
      const stat = Module.FS.analyzePath(fileSourcePath);

      if (stat && stat.object && stat.object.isFolder) {
        // This is a folder, step into
        await saveFilesInPath(fileSourcePath);
      } else if (stat && stat.object && stat.object.contents) {
        const fileData = stat.object.contents;
        const filePath = path.join(targetDir, file);

        await writeSafely(filePath, fileData);
      } else {
        console.log(
          `Disk save: Object at ${fileSourcePath} is something, but we don't know what`,
          stat
        );
      }
    } catch (error) {
      postMessage("showMessageBoxSync", {
        type: "error",
        title: "Could not safe file",
        message: `We tried to save the file "${file}" from the virtual machine, but failed. The error was: ${error}`,
      });

      console.error(`Disk save: Could not write ${file}`, error);
    }
  }
}

let InputBufferAddresses = {
  globalLockAddr: 0,
  mouseMoveFlagAddr: 1,
  mouseMoveXDeltaAddr: 2,
  mouseMoveYDeltaAddr: 3,
  mouseButtonStateAddr: 4,
  keyEventFlagAddr: 5,
  keyCodeAddr: 6,
  keyStateAddr: 7,
};

let LockStates = {
  READY_FOR_UI_THREAD: 0,
  UI_THREAD_LOCK: 1,
  READY_FOR_EMUL_THREAD: 2,
  EMUL_THREAD_LOCK: 3,
};

var Module = null;

self.onmessage = async function (msg) {
  console.log("Worker message received", msg.data);

  // If it's a config object, start the show
  if (msg && msg.data && msg.data.SCREEN_WIDTH) {
    console.log("Start emulator worker");
    startEmulator(
      Object.assign({}, msg.data, { singleThreadedEmscripten: true })
    );
  }

  if (msg && msg.data === "disk_save") {
    const diskData = Module.FS.readFile("/disk");
    const diskPath = getUserDataDiskPath();

    // I wish we could do this with promises, but OOM crashes kill that idea
    try {
      console.log(`Trying to save disk`);
      fs.writeFileSync(diskPath, diskData);
      console.log(`Finished writing disk`);
    } catch (error) {
      console.error(`Failed to write disk`, error);
    }

    // Now, user files
    console.log(`Saving user files`);
    await saveFilesInPath("/macintosh.js");

    // Clean up old copy dir
    cleanupCopyPath();

    postMessage({ type: "disk_saved" });
  }
};

function startEmulator(parentConfig) {
  userDataPath = parentConfig.userDataPath;

  getUserDataDiskImage();

  let screenBufferView = new Uint8Array(
    parentConfig.screenBuffer,
    0,
    parentConfig.screenBufferSize
  );

  let videoModeBufferView = new Int32Array(
    parentConfig.videoModeBuffer,
    0,
    parentConfig.videoModeBufferSize
  );

  let inputBufferView = new Int32Array(
    parentConfig.inputBuffer,
    0,
    parentConfig.inputBufferSize
  );

  let nextAudioChunkIndex = 0;
  let audioDataBufferView = new Uint8Array(
    parentConfig.audioDataBuffer,
    0,
    parentConfig.audioDataBufferSize
  );

  function waitForTwoStateLock(bufferView, lockIndex) {
    if (Atomics.load(bufferView, lockIndex) === LockStates.UI_THREAD_LOCK) {
      while (
        Atomics.compareExchange(
          bufferView,
          lockIndex,
          LockStates.UI_THREAD_LOCK,
          LockStates.EMUL_THREAD_LOCK
        ) !== LockStates.UI_THREAD_LOCK
      ) {
        // spin
        // TODO use wait and wake
      }
    } else {
      // already unlocked
    }
  }

  function releaseTwoStateLock(bufferView, lockIndex) {
    Atomics.store(bufferView, lockIndex, LockStates.UI_THREAD_LOCK); // unlock
  }

  function tryToAcquireCyclicalLock(bufferView, lockIndex) {
    let res = Atomics.compareExchange(
      bufferView,
      lockIndex,
      LockStates.READY_FOR_EMUL_THREAD,
      LockStates.EMUL_THREAD_LOCK
    );
    if (res === LockStates.READY_FOR_EMUL_THREAD) {
      return 1;
    }
    return 0;
  }

  function releaseCyclicalLock(bufferView, lockIndex) {
    Atomics.store(bufferView, lockIndex, LockStates.READY_FOR_UI_THREAD); // unlock
  }

  function acquireInputLock() {
    return tryToAcquireCyclicalLock(
      inputBufferView,
      InputBufferAddresses.globalLockAddr
    );
  }

  function releaseInputLock() {
    // reset
    inputBufferView[InputBufferAddresses.mouseMoveFlagAddr] = 0;
    inputBufferView[InputBufferAddresses.mouseMoveXDeltaAddr] = 0;
    inputBufferView[InputBufferAddresses.mouseMoveYDeltaAddr] = 0;
    inputBufferView[InputBufferAddresses.mouseButtonStateAddr] = 0;
    inputBufferView[InputBufferAddresses.keyEventFlagAddr] = 0;
    inputBufferView[InputBufferAddresses.keyCodeAddr] = 0;
    inputBufferView[InputBufferAddresses.keyStateAddr] = 0;

    releaseCyclicalLock(inputBufferView, InputBufferAddresses.globalLockAddr);
  }

  let AudioConfig = null;
  let AudioBufferQueue = [];

  // Check for user images
  const userImages = getUserImages();

  // Write prefs to user data dir
  writePrefs(userImages);

  // Assemble preload files
  const autoloadFiles = getAutoLoadFiles(userImages);

  // Set arguments
  const arguments = ["--config", "prefs"];

  Module = {
    autoloadFiles,
    userImages,
    arguments,
    canvas: null,

    blit: function blit(bufPtr, width, height, depth, usingPalette) {
      videoModeBufferView[0] = width;
      videoModeBufferView[1] = height;
      videoModeBufferView[2] = depth;
      videoModeBufferView[3] = usingPalette;
      let length = width * height * (depth === 32 ? 4 : 1); // 32bpp or 8bpp
      for (let i = 0; i < length; i++) {
        screenBufferView[i] = Module.HEAPU8[bufPtr + i];
      }
      // releaseTwoStateLock(videoModeBufferView, 9);
    },

    openAudio: function openAudio(
      sampleRate,
      sampleSize,
      channels,
      framesPerBuffer
    ) {
      AudioConfig = {
        sampleRate: sampleRate,
        sampleSize: sampleSize,
        channels: channels,
        framesPerBuffer: framesPerBuffer,
      };
      console.log(AudioConfig);
    },

    enqueueAudio: function enqueueAudio(bufPtr, nbytes, type) {
      let newAudio = Module.HEAPU8.slice(bufPtr, bufPtr + nbytes);
      let writingChunkIndex = nextAudioChunkIndex;
      let writingChunkAddr =
        writingChunkIndex * parentConfig.audioBlockChunkSize;

      if (audioDataBufferView[writingChunkAddr] === LockStates.UI_THREAD_LOCK) {
        console.warn(
          "worker tried to write audio data to UI-thread-locked chunk",
          writingChunkIndex
        );
        return 0;
      }

      let nextNextChunkIndex = writingChunkIndex + 1;
      if (
        nextNextChunkIndex * parentConfig.audioBlockChunkSize >
        audioDataBufferView.length - 1
      ) {
        nextNextChunkIndex = 0;
      }

      audioDataBufferView[writingChunkAddr + 1] = nextNextChunkIndex;
      audioDataBufferView.set(newAudio, writingChunkAddr + 2);
      audioDataBufferView[writingChunkAddr] = LockStates.UI_THREAD_LOCK;

      nextAudioChunkIndex = nextNextChunkIndex;
      return nbytes;
    },

    debugPointer: function debugPointer(ptr) {
      console.log("debugPointer", ptr);
    },

    acquireInputLock: acquireInputLock,

    InputBufferAddresses: InputBufferAddresses,

    getInputValue: function getInputValue(addr) {
      return inputBufferView[addr];
    },

    totalDependencies: 0,
    monitorRunDependencies: function (left) {
      this.totalDependencies = Math.max(this.totalDependencies, left);

      if (left == 0) {
        postMessage({ type: "emulator_ready" });
      } else {
        postMessage({
          type: "emulator_loading",
          completion: (this.totalDependencies - left) / this.totalDependencies,
        });
      }
    },

    print: (message) => {
      console.log(message);

      postMessage({
        type: "TTY",
        data: message,
      });
    },

    printErr: console.warn.bind(console),

    releaseInputLock: releaseInputLock,
  };

  addAutoloader(Module);
  addCustomAsyncInit(Module);

  if (parentConfig.singleThreadedEmscripten) {
    importScripts("BasiliskII.js");
  }
}


================================================
FILE: src/basilisk/BasiliskII.js
================================================
// The Module object: Our interface to the outside world. We import
// and export values on it, and do the work to get that through
// closure compiler if necessary. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to do an eval in order to handle the closure compiler
// case, where this code here is minified but Module was defined
// elsewhere (e.g. case 4 above). We also need to check if Module
// already exists (e.g. case 3 above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define   var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module;
if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};

// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = {};
for (var key in Module) {
  if (Module.hasOwnProperty(key)) {
    moduleOverrides[key] = Module[key];
  }
}

// The environment setup code below is customized to use Module.
// *** Environment setup code ***
var ENVIRONMENT_IS_WEB = false;
var ENVIRONMENT_IS_WORKER = false;
var ENVIRONMENT_IS_NODE = true;
var ENVIRONMENT_IS_SHELL = false;

// Three configurations we can be running in:
// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)
// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)
// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)

if (Module['ENVIRONMENT']) {
  if (Module['ENVIRONMENT'] === 'WEB') {
    ENVIRONMENT_IS_WEB = true;
  } else if (Module['ENVIRONMENT'] === 'WORKER') {
    ENVIRONMENT_IS_WORKER = true;
  } else if (Module['ENVIRONMENT'] === 'NODE') {
    ENVIRONMENT_IS_NODE = true;
  } else if (Module['ENVIRONMENT'] === 'SHELL') {
    ENVIRONMENT_IS_SHELL = true;
  } else {
    throw new Error('The provided Module[\'ENVIRONMENT\'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.');
  }
} else {
  ENVIRONMENT_IS_WEB = typeof window === 'object';
  ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
  ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
  ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
}

if (ENVIRONMENT_IS_NODE) {
  // Expose functionality in the same simple way that the shells work
  // Note that we pollute the global namespace here, otherwise we break in node
  if (!Module['print']) Module['print'] = console.log;
  if (!Module['printErr']) Module['printErr'] = console.warn;

  var nodeFS;
  var nodePath;

  Module['read'] = function shell_read(filename, binary) {
    if (!nodeFS) nodeFS = require('fs');
    if (!nodePath) nodePath = require('path');
    filename = nodePath['normalize'](filename);
    var ret = nodeFS['readFileSync'](filename);
    return binary ? ret : ret.toString();
  };

  Module['readBinary'] = function readBinary(filename) {
    var ret = Module['read'](filename, true);
    if (!ret.buffer) {
      ret = new Uint8Array(ret);
    }
    assert(ret.buffer);
    return ret;
  };

  Module['load'] = function load(f) {
    globalEval(read(f));
  };

  if (!Module['thisProgram']) {
    if (process['argv'].length > 1) {
      Module['thisProgram'] = process['argv'][1].replace(/\\/g, '/');
    } else {
      Module['thisProgram'] = 'unknown-program';
    }
  }

  Module['arguments'] = process['argv'].slice(2);

  if (typeof module !== 'undefined') {
    module['exports'] = Module;
  }

  process['on']('uncaughtException', function(ex) {
    // suppress ExitStatus exceptions from showing an error
    if (!(ex instanceof ExitStatus)) {
      throw ex;
    }
  });

  Module['inspect'] = function () { return '[Emscripten Module object]'; };
}
else if (ENVIRONMENT_IS_SHELL) {
  if (!Module['print']) Module['print'] = print;
  if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm

  if (typeof read != 'undefined') {
    Module['read'] = read;
  } else {
    Module['read'] = function shell_read() { throw 'no read() available' };
  }

  Module['readBinary'] = function readBinary(f) {
    if (typeof readbuffer === 'function') {
      return new Uint8Array(readbuffer(f));
    }
    var data = read(f, 'binary');
    assert(typeof data === 'object');
    return data;
  };

  if (typeof scriptArgs != 'undefined') {
    Module['arguments'] = scriptArgs;
  } else if (typeof arguments != 'undefined') {
    Module['arguments'] = arguments;
  }

  if (typeof quit === 'function') {
    Module['quit'] = function(status, toThrow) {
      quit(status);
    }
  }

}
else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
  Module['read'] = function shell_read(url) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, false);
    xhr.send(null);
    return xhr.responseText;
  };

  if (ENVIRONMENT_IS_WORKER) {
    Module['readBinary'] = function readBinary(url) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET', url, false);
      xhr.responseType = 'arraybuffer';
      xhr.send(null);
      return new Uint8Array(xhr.response);
    };
  }

  Module['readAsync'] = function readAsync(url, onload, onerror) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function xhr_onload() {
      if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
        onload(xhr.response);
      } else {
        onerror();
      }
    };
    xhr.onerror = onerror;
    xhr.send(null);
  };

  if (typeof arguments != 'undefined') {
    Module['arguments'] = arguments;
  }

  if (typeof console !== 'undefined') {
    if (!Module['print']) Module['print'] = function shell_print(x) {
      console.log(x);
    };
    if (!Module['printErr']) Module['printErr'] = function shell_printErr(x) {
      console.warn(x);
    };
  } else {
    // Probably a worker, and without console.log. We can do very little here...
    var TRY_USE_DUMP = false;
    if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
      dump(x);
    }) : (function(x) {
      // self.postMessage(x); // enable this if you want stdout to be sent as messages
    }));
  }

  if (ENVIRONMENT_IS_WORKER) {
    Module['load'] = importScripts;
  }

  if (typeof Module['setWindowTitle'] === 'undefined') {
    Module['setWindowTitle'] = function(title) { document.title = title };
  }
}
else {
  // Unreachable because SHELL is dependant on the others
  throw 'Unknown runtime environment. Where are we?';
}

function globalEval(x) {
  eval.call(null, x);
}
if (!Module['load'] && Module['read']) {
  Module['load'] = function load(f) {
    globalEval(Module['read'](f));
  };
}
if (!Module['print']) {
  Module['print'] = function(){};
}
if (!Module['printErr']) {
  Module['printErr'] = Module['print'];
}
if (!Module['arguments']) {
  Module['arguments'] = [];
}
if (!Module['thisProgram']) {
  Module['thisProgram'] = './this.program';
}
if (!Module['quit']) {
  Module['quit'] = function(status, toThrow) {
    throw toThrow;
  }
}

// *** Environment setup code ***

// Closure helpers
Module.print = Module['print'];
Module.printErr = Module['printErr'];

// Callbacks
Module['preRun'] = [];
Module['postRun'] = [];

// Merge back in the overrides
for (var key in moduleOverrides) {
  if (moduleOverrides.hasOwnProperty(key)) {
    Module[key] = moduleOverrides[key];
  }
}
// Free the object hierarchy contained in the overrides, this lets the GC
// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
moduleOverrides = undefined;



// {{PREAMBLE_ADDITIONS}}

// === Preamble library stuff ===

// Documentation for the public APIs defined in this file must be updated in:
//    site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
//    site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
//    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html

//========================================
// Runtime code shared with compiler
//========================================

var Runtime = {
  setTempRet0: function (value) {
    tempRet0 = value;
    return value;
  },
  getTempRet0: function () {
    return tempRet0;
  },
  stackSave: function () {
    return STACKTOP;
  },
  stackRestore: function (stackTop) {
    STACKTOP = stackTop;
  },
  getNativeTypeSize: function (type) {
    switch (type) {
      case 'i1': case 'i8': return 1;
      case 'i16': return 2;
      case 'i32': return 4;
      case 'i64': return 8;
      case 'float': return 4;
      case 'double': return 8;
      default: {
        if (type[type.length-1] === '*') {
          return Runtime.QUANTUM_SIZE; // A pointer
        } else if (type[0] === 'i') {
          var bits = parseInt(type.substr(1));
          assert(bits % 8 === 0);
          return bits/8;
        } else {
          return 0;
        }
      }
    }
  },
  getNativeFieldSize: function (type) {
    return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
  },
  STACK_ALIGN: 16,
  prepVararg: function (ptr, type) {
    if (type === 'double' || type === 'i64') {
      // move so the load is aligned
      if (ptr & 7) {
        assert((ptr & 7) === 4);
        ptr += 4;
      }
    } else {
      assert((ptr & 3) === 0);
    }
    return ptr;
  },
  getAlignSize: function (type, size, vararg) {
    // we align i64s and doubles on 64-bit boundaries, unlike x86
    if (!vararg && (type == 'i64' || type == 'double')) return 8;
    if (!type) return Math.min(size, 8); // align structures internally to 64 bits
    return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
  },
  dynCall: function (sig, ptr, args) {
    if (args && args.length) {
      return Module['dynCall_' + sig].apply(null, [ptr].concat(args));
    } else {
      return Module['dynCall_' + sig].call(null, ptr);
    }
  },
  functionPointers: [],
  addFunction: function (func) {
    for (var i = 0; i < Runtime.functionPointers.length; i++) {
      if (!Runtime.functionPointers[i]) {
        Runtime.functionPointers[i] = func;
        return 2*(1 + i);
      }
    }
    throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
  },
  removeFunction: function (index) {
    Runtime.functionPointers[(index-2)/2] = null;
  },
  warnOnce: function (text) {
    if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
    if (!Runtime.warnOnce.shown[text]) {
      Runtime.warnOnce.shown[text] = 1;
      Module.printErr(text);
    }
  },
  funcWrappers: {},
  getFuncWrapper: function (func, sig) {
    assert(sig);
    if (!Runtime.funcWrappers[sig]) {
      Runtime.funcWrappers[sig] = {};
    }
    var sigCache = Runtime.funcWrappers[sig];
    if (!sigCache[func]) {
      // optimize away arguments usage in common cases
      if (sig.length === 1) {
        sigCache[func] = function dynCall_wrapper() {
          return Runtime.dynCall(sig, func);
        };
      } else if (sig.length === 2) {
        sigCache[func] = function dynCall_wrapper(arg) {
          return Runtime.dynCall(sig, func, [arg]);
        };
      } else {
        // general case
        sigCache[func] = function dynCall_wrapper() {
          return Runtime.dynCall(sig, func, Array.prototype.slice.call(arguments));
        };
      }
    }
    return sigCache[func];
  },
  getCompilerSetting: function (name) {
    throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
  },
  stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+15)&-16); return ret; },
  staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+15)&-16); return ret; },
  dynamicAlloc: function (size) { var ret = HEAP32[DYNAMICTOP_PTR>>2];var end = (((ret + size + 15)|0) & -16);HEAP32[DYNAMICTOP_PTR>>2] = end;if (end >= TOTAL_MEMORY) {var success = enlargeMemory();if (!success) {HEAP32[DYNAMICTOP_PTR>>2] = ret;return 0;}}return ret;},
  alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 16))*(quantum ? quantum : 16); return ret; },
  makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; },
  GLOBAL_BASE: 8,
  QUANTUM_SIZE: 4,
  __dummy__: 0
}



Module["Runtime"] = Runtime;



//========================================
// Runtime essentials
//========================================

var ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort()
var EXITSTATUS = 0;

/** @type {function(*, string=)} */
function assert(condition, text) {
  if (!condition) {
    abort('Assertion failed: ' + text);
  }
}

var globalScope = this;

// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
function getCFunc(ident) {
  var func = Module['_' + ident]; // closure exported function
  if (!func) {
    try { func = eval('_' + ident); } catch(e) {}
  }
  assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
  return func;
}

var cwrap, ccall;
(function(){
  var JSfuncs = {
    // Helpers for cwrap -- it can't refer to Runtime directly because it might
    // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find
    // out what the minified function name is.
    'stackSave': function() {
      Runtime.stackSave()
    },
    'stackRestore': function() {
      Runtime.stackRestore()
    },
    // type conversion from js to c
    'arrayToC' : function(arr) {
      var ret = Runtime.stackAlloc(arr.length);
      writeArrayToMemory(arr, ret);
      return ret;
    },
    'stringToC' : function(str) {
      var ret = 0;
      if (str !== null && str !== undefined && str !== 0) { // null string
        // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
        var len = (str.length << 2) + 1;
        ret = Runtime.stackAlloc(len);
        stringToUTF8(str, ret, len);
      }
      return ret;
    }
  };
  // For fast lookup of conversion functions
  var toC = {'string' : JSfuncs['stringToC'], 'array' : JSfuncs['arrayToC']};

  // C calling interface.
  ccall = function ccallFunc(ident, returnType, argTypes, args, opts) {
    var func = getCFunc(ident);
    var cArgs = [];
    var stack = 0;
    if (args) {
      for (var i = 0; i < args.length; i++) {
        var converter = toC[argTypes[i]];
        if (converter) {
          if (stack === 0) stack = Runtime.stackSave();
          cArgs[i] = converter(args[i]);
        } else {
          cArgs[i] = args[i];
        }
      }
    }
    var ret = func.apply(null, cArgs);
    if (returnType === 'string') ret = Pointer_stringify(ret);
    if (stack !== 0) {
      if (opts && opts.async) {
        EmterpreterAsync.asyncFinalizers.push(function() {
          Runtime.stackRestore(stack);
        });
        return;
      }
      Runtime.stackRestore(stack);
    }
    return ret;
  }

  var sourceRegex = /^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;
  function parseJSFunc(jsfunc) {
    // Match the body and the return value of a javascript function source
    var parsed = jsfunc.toString().match(sourceRegex).slice(1);
    return {arguments : parsed[0], body : parsed[1], returnValue: parsed[2]}
  }

  // sources of useful functions. we create this lazily as it can trigger a source decompression on this entire file
  var JSsource = null;
  function ensureJSsource() {
    if (!JSsource) {
      JSsource = {};
      for (var fun in JSfuncs) {
        if (JSfuncs.hasOwnProperty(fun)) {
          // Elements of toCsource are arrays of three items:
          // the code, and the return value
          JSsource[fun] = parseJSFunc(JSfuncs[fun]);
        }
      }
    }
  }

  cwrap = function cwrap(ident, returnType, argTypes) {
    argTypes = argTypes || [];
    var cfunc = getCFunc(ident);
    // When the function takes numbers and returns a number, we can just return
    // the original function
    var numericArgs = argTypes.every(function(type){ return type === 'number'});
    var numericRet = (returnType !== 'string');
    if ( numericRet && numericArgs) {
      return cfunc;
    }
    // Creation of the arguments list (["$1","$2",...,"$nargs"])
    var argNames = argTypes.map(function(x,i){return '$'+i});
    var funcstr = "(function(" + argNames.join(',') + ") {";
    var nargs = argTypes.length;
    if (!numericArgs) {
      // Generate the code needed to convert the arguments from javascript
      // values to pointers
      ensureJSsource();
      funcstr += 'var stack = ' + JSsource['stackSave'].body + ';';
      for (var i = 0; i < nargs; i++) {
        var arg = argNames[i], type = argTypes[i];
        if (type === 'number') continue;
        var convertCode = JSsource[type + 'ToC']; // [code, return]
        funcstr += 'var ' + convertCode.arguments + ' = ' + arg + ';';
        funcstr += convertCode.body + ';';
        funcstr += arg + '=(' + convertCode.returnValue + ');';
      }
    }

    // When the code is compressed, the name of cfunc is not literally 'cfunc' anymore
    var cfuncname = parseJSFunc(function(){return cfunc}).returnValue;
    // Call the function
    funcstr += 'var ret = ' + cfuncname + '(' + argNames.join(',') + ');';
    if (!numericRet) { // Return type can only by 'string' or 'number'
      // Convert the result to a string
      var strgfy = parseJSFunc(function(){return Pointer_stringify}).returnValue;
      funcstr += 'ret = ' + strgfy + '(ret);';
    }
    if (!numericArgs) {
      // If we had a stack, restore it
      ensureJSsource();
      funcstr += JSsource['stackRestore'].body.replace('()', '(stack)') + ';';
    }
    funcstr += 'return ret})';
    return eval(funcstr);
  };
})();
Module["ccall"] = ccall;
Module["cwrap"] = cwrap;

/** @type {function(number, number, string, boolean=)} */
function setValue(ptr, value, type, noSafe) {
  type = type || 'i8';
  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
    switch(type) {
      case 'i1': HEAP8[((ptr)>>0)]=value; break;
      case 'i8': HEAP8[((ptr)>>0)]=value; break;
      case 'i16': HEAP16[((ptr)>>1)]=value; break;
      case 'i32': HEAP32[((ptr)>>2)]=value; break;
      case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;
      case 'float': HEAPF32[((ptr)>>2)]=value; break;
      case 'double': HEAPF64[((ptr)>>3)]=value; break;
      default: abort('invalid type for setValue: ' + type);
    }
}
Module["setValue"] = setValue;

/** @type {function(number, string, boolean=)} */
function getValue(ptr, type, noSafe) {
  type = type || 'i8';
  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
    switch(type) {
      case 'i1': return HEAP8[((ptr)>>0)];
      case 'i8': return HEAP8[((ptr)>>0)];
      case 'i16': return HEAP16[((ptr)>>1)];
      case 'i32': return HEAP32[((ptr)>>2)];
      case 'i64': return HEAP32[((ptr)>>2)];
      case 'float': return HEAPF32[((ptr)>>2)];
      case 'double': return HEAPF64[((ptr)>>3)];
      default: abort('invalid type for setValue: ' + type);
    }
  return null;
}
Module["getValue"] = getValue;

var ALLOC_NORMAL = 0; // Tries to use _malloc()
var ALLOC_STACK = 1; // Lives for the duration of the current function call
var ALLOC_STATIC = 2; // Cannot be freed
var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
var ALLOC_NONE = 4; // Do not allocate
Module["ALLOC_NORMAL"] = ALLOC_NORMAL;
Module["ALLOC_STACK"] = ALLOC_STACK;
Module["ALLOC_STATIC"] = ALLOC_STATIC;
Module["ALLOC_DYNAMIC"] = ALLOC_DYNAMIC;
Module["ALLOC_NONE"] = ALLOC_NONE;

// allocate(): This is for internal use. You can use it yourself as well, but the interface
//             is a little tricky (see docs right below). The reason is that it is optimized
//             for multiple syntaxes to save space in generated code. So you should
//             normally not use allocate(), and instead allocate memory using _malloc(),
//             initialize it with setValue(), and so forth.
// @slab: An array of data, or a number. If a number, then the size of the block to allocate,
//        in *bytes* (note that this is sometimes confusing: the next parameter does not
//        affect this!)
// @types: Either an array of types, one for each byte (or 0 if no type at that position),
//         or a single type which is used for the entire block. This only matters if there
//         is initial data - if @slab is a number, then this does not matter at all and is
//         ignored.
// @allocator: How to allocate memory, see ALLOC_*
/** @type {function((TypedArray|Array<number>|number), string, number, number=)} */
function allocate(slab, types, allocator, ptr) {
  var zeroinit, size;
  if (typeof slab === 'number') {
    zeroinit = true;
    size = slab;
  } else {
    zeroinit = false;
    size = slab.length;
  }

  var singleType = typeof types === 'string' ? types : null;

  var ret;
  if (allocator == ALLOC_NONE) {
    ret = ptr;
  } else {
    ret = [typeof _malloc === 'function' ? _malloc : Runtime.staticAlloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
  }

  if (zeroinit) {
    var ptr = ret, stop;
    assert((ret & 3) == 0);
    stop = ret + (size & ~3);
    for (; ptr < stop; ptr += 4) {
      HEAP32[((ptr)>>2)]=0;
    }
    stop = ret + size;
    while (ptr < stop) {
      HEAP8[((ptr++)>>0)]=0;
    }
    return ret;
  }

  if (singleType === 'i8') {
    if (slab.subarray || slab.slice) {
      HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);
    } else {
      HEAPU8.set(new Uint8Array(slab), ret);
    }
    return ret;
  }

  var i = 0, type, typeSize, previousType;
  while (i < size) {
    var curr = slab[i];

    if (typeof curr === 'function') {
      curr = Runtime.getFunctionIndex(curr);
    }

    type = singleType || types[i];
    if (type === 0) {
      i++;
      continue;
    }

    if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later

    setValue(ret+i, curr, type);

    // no need to look up size unless type changes, so cache it
    if (previousType !== type) {
      typeSize = Runtime.getNativeTypeSize(type);
      previousType = type;
    }
    i += typeSize;
  }

  return ret;
}
Module["allocate"] = allocate;

// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready
function getMemory(size) {
  if (!staticSealed) return Runtime.staticAlloc(size);
  if (!runtimeInitialized) return Runtime.dynamicAlloc(size);
  return _malloc(size);
}
Module["getMemory"] = getMemory;

/** @type {function(number, number=)} */
function Pointer_stringify(ptr, length) {
  if (length === 0 || !ptr) return '';
  // TODO: use TextDecoder
  // Find the length, and check for UTF while doing so
  var hasUtf = 0;
  var t;
  var i = 0;
  while (1) {
    t = HEAPU8[(((ptr)+(i))>>0)];
    hasUtf |= t;
    if (t == 0 && !length) break;
    i++;
    if (length && i == length) break;
  }
  if (!length) length = i;

  var ret = '';

  if (hasUtf < 128) {
    var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
    var curr;
    while (length > 0) {
      curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
      ret = ret ? ret + curr : curr;
      ptr += MAX_CHUNK;
      length -= MAX_CHUNK;
    }
    return ret;
  }
  return Module['UTF8ToString'](ptr);
}
Module["Pointer_stringify"] = Pointer_stringify;

// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.

function AsciiToString(ptr) {
  var str = '';
  while (1) {
    var ch = HEAP8[((ptr++)>>0)];
    if (!ch) return str;
    str += String.fromCharCode(ch);
  }
}
Module["AsciiToString"] = AsciiToString;

// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.

function stringToAscii(str, outPtr) {
  return writeAsciiToMemory(str, outPtr, false);
}
Module["stringToAscii"] = stringToAscii;

// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns
// a copy of that string as a Javascript String object.

var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
function UTF8ArrayToString(u8Array, idx) {
  var endPtr = idx;
  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
  while (u8Array[endPtr]) ++endPtr;

  if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
    return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));
  } else {
    var u0, u1, u2, u3, u4, u5;

    var str = '';
    while (1) {
      // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
      u0 = u8Array[idx++];
      if (!u0) return str;
      if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
      u1 = u8Array[idx++] & 63;
      if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
      u2 = u8Array[idx++] & 63;
      if ((u0 & 0xF0) == 0xE0) {
        u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
      } else {
        u3 = u8Array[idx++] & 63;
        if ((u0 & 0xF8) == 0xF0) {
          u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;
        } else {
          u4 = u8Array[idx++] & 63;
          if ((u0 & 0xFC) == 0xF8) {
            u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;
          } else {
            u5 = u8Array[idx++] & 63;
            u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;
          }
        }
      }
      if (u0 < 0x10000) {
        str += String.fromCharCode(u0);
      } else {
        var ch = u0 - 0x10000;
        str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
      }
    }
  }
}
Module["UTF8ArrayToString"] = UTF8ArrayToString;

// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.

function UTF8ToString(ptr) {
  return UTF8ArrayToString(HEAPU8,ptr);
}
Module["UTF8ToString"] = UTF8ToString;

// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',
// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.
// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
//   str: the Javascript string to copy.
//   outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.
//   outIdx: The starting offset in the array to begin the copying.
//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
//                    terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.
//                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.

function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
  if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.
    return 0;

  var startIdx = outIdx;
  var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
  for (var i = 0; i < str.length; ++i) {
    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
    // See http://unicode.org/faq/utf_bom.html#utf16-3
    // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629
    var u = str.charCodeAt(i); // possibly a lead surrogate
    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
    if (u <= 0x7F) {
      if (outIdx >= endIdx) break;
      outU8Array[outIdx++] = u;
    } else if (u <= 0x7FF) {
      if (outIdx + 1 >= endIdx) break;
      outU8Array[outIdx++] = 0xC0 | (u >> 6);
      outU8Array[outIdx++] = 0x80 | (u & 63);
    } else if (u <= 0xFFFF) {
      if (outIdx + 2 >= endIdx) break;
      outU8Array[outIdx++] = 0xE0 | (u >> 12);
      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
      outU8Array[outIdx++] = 0x80 | (u & 63);
    } else if (u <= 0x1FFFFF) {
      if (outIdx + 3 >= endIdx) break;
      outU8Array[outIdx++] = 0xF0 | (u >> 18);
      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
      outU8Array[outIdx++] = 0x80 | (u & 63);
    } else if (u <= 0x3FFFFFF) {
      if (outIdx + 4 >= endIdx) break;
      outU8Array[outIdx++] = 0xF8 | (u >> 24);
      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
      outU8Array[outIdx++] = 0x80 | (u & 63);
    } else {
      if (outIdx + 5 >= endIdx) break;
      outU8Array[outIdx++] = 0xFC | (u >> 30);
      outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63);
      outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63);
      outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);
      outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);
      outU8Array[outIdx++] = 0x80 | (u & 63);
    }
  }
  // Null-terminate the pointer to the buffer.
  outU8Array[outIdx] = 0;
  return outIdx - startIdx;
}
Module["stringToUTF8Array"] = stringToUTF8Array;

// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.
// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.
// Returns the number of bytes written, EXCLUDING the null terminator.

function stringToUTF8(str, outPtr, maxBytesToWrite) {
  return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
}
Module["stringToUTF8"] = stringToUTF8;

// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.

function lengthBytesUTF8(str) {
  var len = 0;
  for (var i = 0; i < str.length; ++i) {
    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.
    // See http://unicode.org/faq/utf_bom.html#utf16-3
    var u = str.charCodeAt(i); // possibly a lead surrogate
    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);
    if (u <= 0x7F) {
      ++len;
    } else if (u <= 0x7FF) {
      len += 2;
    } else if (u <= 0xFFFF) {
      len += 3;
    } else if (u <= 0x1FFFFF) {
      len += 4;
    } else if (u <= 0x3FFFFFF) {
      len += 5;
    } else {
      len += 6;
    }
  }
  return len;
}
Module["lengthBytesUTF8"] = lengthBytesUTF8;

// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
// a copy of that string as a Javascript String object.

var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;
function UTF16ToString(ptr) {
  var endPtr = ptr;
  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.
  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.
  var idx = endPtr >> 1;
  while (HEAP16[idx]) ++idx;
  endPtr = idx << 1;

  if (endPtr - ptr > 32 && UTF16Decoder) {
    return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));
  } else {
    var i = 0;

    var str = '';
    while (1) {
      var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
      if (codeUnit == 0) return str;
      ++i;
      // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
      str += String.fromCharCode(codeUnit);
    }
  }
}


// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.
// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
//   str: the Javascript string to copy.
//   outPtr: Byte address in Emscripten HEAP where to write the string to.
//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
//                    terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.
//                    maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.

function stringToUTF16(str, outPtr, maxBytesToWrite) {
  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
  if (maxBytesToWrite === undefined) {
    maxBytesToWrite = 0x7FFFFFFF;
  }
  if (maxBytesToWrite < 2) return 0;
  maxBytesToWrite -= 2; // Null terminator.
  var startPtr = outPtr;
  var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;
  for (var i = 0; i < numCharsToWrite; ++i) {
    // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
    HEAP16[((outPtr)>>1)]=codeUnit;
    outPtr += 2;
  }
  // Null-terminate the pointer to the HEAP.
  HEAP16[((outPtr)>>1)]=0;
  return outPtr - startPtr;
}


// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.

function lengthBytesUTF16(str) {
  return str.length*2;
}


function UTF32ToString(ptr) {
  var i = 0;

  var str = '';
  while (1) {
    var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
    if (utf32 == 0)
      return str;
    ++i;
    // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.
    // See http://unicode.org/faq/utf_bom.html#utf16-3
    if (utf32 >= 0x10000) {
      var ch = utf32 - 0x10000;
      str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
    } else {
      str += String.fromCharCode(utf32);
    }
  }
}


// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.
// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.
// Parameters:
//   str: the Javascript string to copy.
//   outPtr: Byte address in Emscripten HEAP where to write the string to.
//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null
//                    terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.
//                    maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.
// Returns the number of bytes written, EXCLUDING the null terminator.

function stringToUTF32(str, outPtr, maxBytesToWrite) {
  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.
  if (maxBytesToWrite === undefined) {
    maxBytesToWrite = 0x7FFFFFFF;
  }
  if (maxBytesToWrite < 4) return 0;
  var startPtr = outPtr;
  var endPtr = startPtr + maxBytesToWrite - 4;
  for (var i = 0; i < str.length; ++i) {
    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
    // See http://unicode.org/faq/utf_bom.html#utf16-3
    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
      var trailSurrogate = str.charCodeAt(++i);
      codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
    }
    HEAP32[((outPtr)>>2)]=codeUnit;
    outPtr += 4;
    if (outPtr + 4 > endPtr) break;
  }
  // Null-terminate the pointer to the HEAP.
  HEAP32[((outPtr)>>2)]=0;
  return outPtr - startPtr;
}


// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.

function lengthBytesUTF32(str) {
  var len = 0;
  for (var i = 0; i < str.length; ++i) {
    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.
    // See http://unicode.org/faq/utf_bom.html#utf16-3
    var codeUnit = str.charCodeAt(i);
    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.
    len += 4;
  }

  return len;
}


function demangle(func) {
  var __cxa_demangle_func = Module['___cxa_demangle'] || Module['__cxa_demangle'];
  if (__cxa_demangle_func) {
    try {
      var s =
        func.substr(1);
      var len = lengthBytesUTF8(s)+1;
      var buf = _malloc(len);
      stringToUTF8(s, buf, len);
      var status = _malloc(4);
      var ret = __cxa_demangle_func(buf, 0, 0, status);
      if (getValue(status, 'i32') === 0 && ret) {
        return Pointer_stringify(ret);
      }
      // otherwise, libcxxabi failed
    } catch(e) {
      // ignore problems here
    } finally {
      if (buf) _free(buf);
      if (status) _free(status);
      if (ret) _free(ret);
    }
    // failure when using libcxxabi, don't demangle
    return func;
  }
  Runtime.warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');
  return func;
}

function demangleAll(text) {
  var regex =
    /__Z[\w\d_]+/g;
  return text.replace(regex,
    function(x) {
      var y = demangle(x);
      return x === y ? x : (x + ' [' + y + ']');
    });
}

function jsStackTrace() {
  var err = new Error();
  if (!err.stack) {
    // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,
    // so try that as a special-case.
    try {
      throw new Error(0);
    } catch(e) {
      err = e;
    }
    if (!err.stack) {
      return '(no stack trace available)';
    }
  }
  return err.stack.toString();
}

function stackTrace() {
  var js = jsStackTrace();
  if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace']();
  return demangleAll(js);
}
Module["stackTrace"] = stackTrace;

// Memory management

var PAGE_SIZE = 16384;
var WASM_PAGE_SIZE = 65536;
var ASMJS_PAGE_SIZE = 16777216;
var MIN_TOTAL_MEMORY = 16777216;

function alignUp(x, multiple) {
  if (x % multiple > 0) {
    x += multiple - (x % multiple);
  }
  return x;
}

var HEAP,
/** @type {ArrayBuffer} */
  buffer,
/** @type {Int8Array} */
  HEAP8,
/** @type {Uint8Array} */
  HEAPU8,
/** @type {Int16Array} */
  HEAP16,
/** @type {Uint16Array} */
  HEAPU16,
/** @type {Int32Array} */
  HEAP32,
/** @type {Uint32Array} */
  HEAPU32,
/** @type {Float32Array} */
  HEAPF32,
/** @type {Float64Array} */
  HEAPF64;

function updateGlobalBuffer(buf) {
  Module['buffer'] = buffer = buf;
}

function updateGlobalBufferViews() {
  Module['HEAP8'] = HEAP8 = new Int8Array(buffer);
  Module['HEAP16'] = HEAP16 = new Int16Array(buffer);
  Module['HEAP32'] = HEAP32 = new Int32Array(buffer);
  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);
  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);
  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);
  Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);
  Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);
}

var STATIC_BASE, STATICTOP, staticSealed; // static area
var STACK_BASE, STACKTOP, STACK_MAX; // stack area
var DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk

  STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;
  staticSealed = false;



function abortOnCannotGrowMemory() {
  abort('Cannot enlarge memory arrays. Either (1) compile with  -s TOTAL_MEMORY=X  with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with  -s ALLOW_MEMORY_GROWTH=1  which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with  -s ABORTING_MALLOC=0 ');
}


function enlargeMemory() {
  abortOnCannotGrowMemory();
}


var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 536870912;
if (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');

// Initialize the runtime's memory



// Use a provided buffer, if there is one, or else allocate a new one
if (Module['buffer']) {
  buffer = Module['buffer'];
} else {
  // Use a WebAssembly memory where available
  {
    buffer = new ArrayBuffer(TOTAL_MEMORY);
  }
}
updateGlobalBufferViews();


function getTotalMemory() {
  return TOTAL_MEMORY;
}

// Endianness check (note: assumes compiler arch was little-endian)
  HEAP32[0] = 0x63736d65; /* 'emsc' */
HEAP16[1] = 0x6373;
if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!';

Module['HEAP'] = HEAP;
Module['buffer'] = buffer;
Module['HEAP8'] = HEAP8;
Module['HEAP16'] = HEAP16;
Module['HEAP32'] = HEAP32;
Module['HEAPU8'] = HEAPU8;
Module['HEAPU16'] = HEAPU16;
Module['HEAPU32'] = HEAPU32;
Module['HEAPF32'] = HEAPF32;
Module['HEAPF64'] = HEAPF64;

function callRuntimeCallbacks(callbacks) {
  while(callbacks.length > 0) {
    var callback = callbacks.shift();
    if (typeof callback == 'function') {
      callback();
      continue;
    }
    var func = callback.func;
    if (typeof func === 'number') {
      if (callback.arg === undefined) {
        Module['dynCall_v'](func);
      } else {
        Module['dynCall_vi'](func, callback.arg);
      }
    } else {
      func(callback.arg === undefined ? null : callback.arg);
    }
  }
}

var __ATPRERUN__  = []; // functions called before the runtime is initialized
var __ATINIT__    = []; // functions called during startup
var __ATMAIN__    = []; // functions called when main() is to be run
var __ATEXIT__    = []; // functions called during shutdown
var __ATPOSTRUN__ = []; // functions called after the runtime has exited

var runtimeInitialized = false;
var runtimeExited = false;


function preRun() {
  // compatibility - merge in anything from Module['preRun'] at this time
  if (Module['preRun']) {
    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
    while (Module['preRun'].length) {
      addOnPreRun(Module['preRun'].shift());
    }
  }
  callRuntimeCallbacks(__ATPRERUN__);
}

function ensureInitRuntime() {
  if (runtimeInitialized) return;
  runtimeInitialized = true;
  callRuntimeCallbacks(__ATINIT__);
}

function preMain() {
  callRuntimeCallbacks(__ATMAIN__);
}

function exitRuntime() {
  callRuntimeCallbacks(__ATEXIT__);
  runtimeExited = true;
}

function postRun() {
  // compatibility - merge in anything from Module['postRun'] at this time
  if (Module['postRun']) {
    if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
    while (Module['postRun'].length) {
      addOnPostRun(Module['postRun'].shift());
    }
  }
  callRuntimeCallbacks(__ATPOSTRUN__);
}

function addOnPreRun(cb) {
  __ATPRERUN__.unshift(cb);
}
Module["addOnPreRun"] = addOnPreRun;

function addOnInit(cb) {
  __ATINIT__.unshift(cb);
}
Module["addOnInit"] = addOnInit;

function addOnPreMain(cb) {
  __ATMAIN__.unshift(cb);
}
Module["addOnPreMain"] = addOnPreMain;

function addOnExit(cb) {
  __ATEXIT__.unshift(cb);
}
Module["addOnExit"] = addOnExit;

function addOnPostRun(cb) {
  __ATPOSTRUN__.unshift(cb);
}
Module["addOnPostRun"] = addOnPostRun;

// Tools

/** @type {function(string, boolean=, number=)} */
function intArrayFromString(stringy, dontAddNull, length) {
  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;
  var u8array = new Array(len);
  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);
  if (dontAddNull) u8array.length = numBytesWritten;
  return u8array;
}
Module["intArrayFromString"] = intArrayFromString;

function intArrayToString(array) {
  var ret = [];
  for (var i = 0; i < array.length; i++) {
    var chr = array[i];
    if (chr > 0xFF) {
      chr &= 0xFF;
    }
    ret.push(String.fromCharCode(chr));
  }
  return ret.join('');
}
Module["intArrayToString"] = intArrayToString;

// Deprecated: This function should not be called because it is unsafe and does not provide
// a maximum length limit of how many bytes it is allowed to write. Prefer calling the
// function stringToUTF8Array() instead, which takes in a maximum length that can be used
// to be secure from out of bounds writes.
/** @deprecated */
function writeStringToMemory(string, buffer, dontAddNull) {
  Runtime.warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');

  var /** @type {number} */ lastChar, /** @type {number} */ end;
  if (dontAddNull) {
    // stringToUTF8Array always appends null. If we don't want to do that, remember the
    // character that existed at the location where the null will be placed, and restore
    // that after the write (below).
    end = buffer + lengthBytesUTF8(string);
    lastChar = HEAP8[end];
  }
  stringToUTF8(string, buffer, Infinity);
  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.
}
Module["writeStringToMemory"] = writeStringToMemory;

function writeArrayToMemory(array, buffer) {
  HEAP8.set(array, buffer);
}
Module["writeArrayToMemory"] = writeArrayToMemory;

function writeAsciiToMemory(str, buffer, dontAddNull) {
  for (var i = 0; i < str.length; ++i) {
    HEAP8[((buffer++)>>0)]=str.charCodeAt(i);
  }
  // Null-terminate the pointer to the HEAP.
  if (!dontAddNull) HEAP8[((buffer)>>0)]=0;
}
Module["writeAsciiToMemory"] = writeAsciiToMemory;

function unSign(value, bits, ignore) {
  if (value >= 0) {
    return value;
  }
  return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts
                    : Math.pow(2, bits)         + value;
}
function reSign(value, bits, ignore) {
  if (value <= 0) {
    return value;
  }
  var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
                        : Math.pow(2, bits-1);
  if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that
                                                       // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
                                                       // TODO: In i64 mode 1, resign the two parts separately and safely
    value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
  }
  return value;
}

// check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
  var ah  = a >>> 16;
  var al = a & 0xffff;
  var bh  = b >>> 16;
  var bl = b & 0xffff;
  return (al*bl + ((ah*bl + al*bh) << 16))|0;
};
Math.imul = Math['imul'];


if (!Math['clz32']) Math['clz32'] = function(x) {
  x = x >>> 0;
  for (var i = 0; i < 32; i++) {
    if (x & (1 << (31 - i))) return i;
  }
  return 32;
};
Math.clz32 = Math['clz32']

if (!Math['trunc']) Math['trunc'] = function(x) {
  return x < 0 ? Math.ceil(x) : Math.floor(x);
};
Math.trunc = Math['trunc'];

var Math_abs = Math.abs;
var Math_cos = Math.cos;
var Math_sin = Math.sin;
var Math_tan = Math.tan;
var Math_acos = Math.acos;
var Math_asin = Math.asin;
var Math_atan = Math.atan;
var Math_atan2 = Math.atan2;
var Math_exp = Math.exp;
var Math_log = Math.log;
var Math_sqrt = Math.sqrt;
var Math_ceil = Math.ceil;
var Math_floor = Math.floor;
var Math_pow = Math.pow;
var Math_imul = Math.imul;
var Math_fround = Math.fround;
var Math_round = Math.round;
var Math_min = Math.min;
var Math_clz32 = Math.clz32;
var Math_trunc = Math.trunc;

// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// PRE_RUN_ADDITIONS (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled

function getUniqueRunDependency(id) {
  return id;
}

function addRunDependency(id) {
  runDependencies++;
  if (Module['monitorRunDependencies']) {
    Module['monitorRunDependencies'](runDependencies);
  }
}
Module["addRunDependency"] = addRunDependency;

function removeRunDependency(id) {
  runDependencies--;
  if (Module['monitorRunDependencies']) {
    Module['monitorRunDependencies'](runDependencies);
  }
  if (runDependencies == 0) {
    if (runDependencyWatcher !== null) {
      clearInterval(runDependencyWatcher);
      runDependencyWatcher = null;
    }
    if (dependenciesFulfilled) {
      var callback = dependenciesFulfilled;
      dependenciesFulfilled = null;
      callback(); // can add another dependenciesFulfilled
    }
  }
}
Module["removeRunDependency"] = removeRunDependency;

Module["preloadedImages"] = {}; // maps url to image data
Module["preloadedAudios"] = {}; // maps url to audio data



var memoryInitializer = null;






// === Body ===

var ASM_CONSTS = [function($0) { Module.debugPointer($0); },
 function($0, $1, $2, $3, $4) { Module.blit($0, $1, $2, $3, $4); },
 function() { return Module.acquireInputLock(); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.mouseButtonStateAddr); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.mouseMoveFlagAddr); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.mouseMoveXDeltaAddr); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.mouseMoveYDeltaAddr); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.keyEventFlagAddr); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.keyCodeAddr); },
 function() { return Module.getInputValue(Module.InputBufferAddresses.keyStateAddr); },
 function() { Module.releaseInputLock(); },
 function($0, $1, $2, $3) { Module.openAudio($0, $1, $2, $3); },
 function($0, $1, $2) { return Module.enqueueAudio($0, $1, $2); }];

function _emscripten_asm_const_iiiii(code, a0, a1, a2, a3) {
  return ASM_CONSTS[code](a0, a1, a2, a3);
}

function _emscripten_asm_const_i(code) {
  return ASM_CONSTS[code]();
}

function _emscripten_asm_const_ii(code, a0) {
  return ASM_CONSTS[code](a0);
}

function _emscripten_asm_const_iiii(code, a0, a1, a2) {
  return ASM_CONSTS[code](a0, a1, a2);
}

function _emscripten_asm_const_iiiiii(code, a0, a1, a2, a3, a4) {
  return ASM_CONSTS[code](a0, a1, a2, a3, a4);
}



STATIC_BASE = Runtime.GLOBAL_BASE;

STATICTOP = STATIC_BASE + 660784;
/* global initializers */  __ATINIT__.push({ func: function() { __GLOBAL__sub_I_ether_cpp() } }, { func: function() { __GLOBAL__sub_I_sony_cpp() } }, { func: function() { __GLOBAL__sub_I_disk_cpp() } }, { func: function() { __GLOBAL__sub_I_cdrom_cpp() } }, { func: function() { __GLOBAL__sub_I_video_cpp() } }, { func: function() { __GLOBAL__sub_I_audio_cpp() } }, { func: function() { __GLOBAL__sub_I_video_sdl_cpp() } }, { func: function() { __GLOBAL__sub_I_prefs_unix_cpp() } });


memoryInitializer = "BasiliskII.js.mem";





/* no memory initializer */
var tempDoublePtr = STATICTOP; STATICTOP += 16;

function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much

  HEAP8[tempDoublePtr] = HEAP8[ptr];

  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];

  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];

  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];

}

function copyTempDouble(ptr) {

  HEAP8[tempDoublePtr] = HEAP8[ptr];

  HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];

  HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];

  HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];

  HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];

  HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];

  HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];

  HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];

}

// {{PRE_LIBRARY}}



  function _atexit(func, arg) {
      __ATEXIT__.unshift({ func: func, arg: arg });
    }function ___cxa_atexit() {
  return _atexit.apply(null, arguments)
  }


  var _tzname=STATICTOP; STATICTOP += 16;;

  var _daylight=STATICTOP; STATICTOP += 16;;

  var _timezone=STATICTOP; STATICTOP += 16;;function _tzset() {
      // TODO: Use (malleable) environment variables instead of system settings.
      if (_tzset.called) return;
      _tzset.called = true;

      HEAP32[((_timezone)>>2)]=-(new Date()).getTimezoneOffset() * 60;

      var winter = new Date(2000, 0, 1);
      var summer = new Date(2000, 6, 1);
      HEAP32[((_daylight)>>2)]=Number(winter.getTimezoneOffset() != summer.getTimezoneOffset());

      function extractZone(date) {
        var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
        return match ? match[1] : "GMT";
      };
      var winterName = extractZone(winter);
      var summerName = extractZone(summer);
      var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL);
      var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL);
      if (summer.getTimezoneOffset() < winter.getTimezoneOffset()) {
        // Northern hemisphere
        HEAP32[((_tzname)>>2)]=winterNamePtr;
        HEAP32[(((_tzname)+(4))>>2)]=summerNamePtr;
      } else {
        HEAP32[((_tzname)>>2)]=summerNamePtr;
        HEAP32[(((_tzname)+(4))>>2)]=winterNamePtr;
      }
    }





  function _sem_wait() {}

  function _sem_post() {}




  var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};

  var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};

  function ___setErrNo(value) {
      if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;
      return value;
    }

  var PATH={splitPath:function (filename) {
        var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
        return splitPathRe.exec(filename).slice(1);
      },normalizeArray:function (parts, allowAboveRoot) {
        // if the path tries to go above the root, `up` ends up > 0
        var up = 0;
        for (var i = parts.length - 1; i >= 0; i--) {
          var last = parts[i];
          if (last === '.') {
            parts.splice(i, 1);
          } else if (last === '..') {
            parts.splice(i, 1);
            up++;
          } else if (up) {
            parts.splice(i, 1);
            up--;
          }
        }
        // if the path is allowed to go above the root, restore leading ..s
        if (allowAboveRoot) {
          for (; up; up--) {
            parts.unshift('..');
          }
        }
        return parts;
      },normalize:function (path) {
        var isAbsolute = path.charAt(0) === '/',
            trailingSlash = path.substr(-1) === '/';
        // Normalize the path
        path = PATH.normalizeArray(path.split('/').filter(function(p) {
          return !!p;
        }), !isAbsolute).join('/');
        if (!path && !isAbsolute) {
          path = '.';
        }
        if (path && trailingSlash) {
          path += '/';
        }
        return (isAbsolute ? '/' : '') + path;
      },dirname:function (path) {
        var result = PATH.splitPath(path),
            root = result[0],
            dir = result[1];
        if (!root && !dir) {
          // No dirname whatsoever
          return '.';
        }
        if (dir) {
          // It has a dirname, strip trailing slash
          dir = dir.substr(0, dir.length - 1);
        }
        return root + dir;
      },basename:function (path) {
        // EMSCRIPTEN return '/'' for '/', not an empty string
        if (path === '/') return '/';
        var lastSlash = path.lastIndexOf('/');
        if (lastSlash === -1) return path;
        return path.substr(lastSlash+1);
      },extname:function (path) {
        return PATH.splitPath(path)[3];
      },join:function () {
        var paths = Array.prototype.slice.call(arguments, 0);
        return PATH.normalize(paths.join('/'));
      },join2:function (l, r) {
        return PATH.normalize(l + '/' + r);
      },resolve:function () {
        var resolvedPath = '',
          resolvedAbsolute = false;
        for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
          var path = (i >= 0) ? arguments[i] : FS.cwd();
          // Skip empty and invalid entries
          if (typeof path !== 'string') {
            throw new TypeError('Arguments to path.resolve must be strings');
          } else if (!path) {
            return ''; // an invalid portion invalidates the whole thing
          }
          resolvedPath = path + '/' + resolvedPath;
          resolvedAbsolute = path.charAt(0) === '/';
        }
        // At this point the path should be resolved to a full absolute path, but
        // handle relative paths to be safe (might happen when process.cwd() fails)
        resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
          return !!p;
        }), !resolvedAbsolute).join('/');
        return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
      },relative:function (from, to) {
        from = PATH.resolve(from).substr(1);
        to = PATH.resolve(to).substr(1);
        function trim(arr) {
          var start = 0;
          for (; start < arr.length; start++) {
            if (arr[start] !== '') break;
          }
          var end = arr.length - 1;
          for (; end >= 0; end--) {
            if (arr[end] !== '') break;
          }
          if (start > end) return [];
          return arr.slice(start, end - start + 1);
        }
        var fromParts = trim(from.split('/'));
        var toParts = trim(to.split('/'));
        var length = Math.min(fromParts.length, toParts.length);
        var samePartsLength = length;
        for (var i = 0; i < length; i++) {
          if (fromParts[i] !== toParts[i]) {
            samePartsLength = i;
            break;
          }
        }
        var outputParts = [];
        for (var i = samePartsLength; i < fromParts.length; i++) {
          outputParts.push('..');
        }
        outputParts = outputParts.concat(toParts.slice(samePartsLength));
        return outputParts.join('/');
      }};

  var TTY={ttys:[],init:function () {
        // https://github.com/kripken/emscripten/pull/1555
        // if (ENVIRONMENT_IS_NODE) {
        //   // currently, FS.init does not distinguish if process.stdin is a file or TTY
        //   // device, it always assumes it's a TTY device. because of this, we're forcing
        //   // process.stdin to UTF8 encoding to at least make stdin reading compatible
        //   // with text files until FS.init can be refactored.
        //   process['stdin']['setEncoding']('utf8');
        // }
      },shutdown:function () {
        // https://github.com/kripken/emscripten/pull/1555
        // if (ENVIRONMENT_IS_NODE) {
        //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
        //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
        //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
        //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
        //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
        //   process['stdin']['pause']();
        // }
      },register:function (dev, ops) {
        TTY.ttys[dev] = { input: [], output: [], ops: ops };
        FS.registerDevice(dev, TTY.stream_ops);
      },stream_ops:{open:function (stream) {
          var tty = TTY.ttys[stream.node.rdev];
          if (!tty) {
            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
          }
          stream.tty = tty;
          stream.seekable = false;
        },close:function (stream) {
          // flush any pending line data
          stream.tty.ops.flush(stream.tty);
        },flush:function (stream) {
          stream.tty.ops.flush(stream.tty);
        },read:function (stream, buffer, offset, length, pos /* ignored */) {
          if (!stream.tty || !stream.tty.ops.get_char) {
            throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
          }
          var bytesRead = 0;
          for (var i = 0; i < length; i++) {
            var result;
            try {
              result = stream.tty.ops.get_char(stream.tty);
            } catch (e) {
              throw new FS.ErrnoError(ERRNO_CODES.EIO);
            }
            if (result === undefined && bytesRead === 0) {
              throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
            }
            if (result === null || result === undefined) break;
            bytesRead++;
            buffer[offset+i] = result;
          }
          if (bytesRead) {
            stream.node.timestamp = Date.now();
          }
          return bytesRead;
        },write:function (stream, buffer, offset, length, pos) {
          if (!stream.tty || !stream.tty.ops.put_char) {
            throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
          }
          for (var i = 0; i < length; i++) {
            try {
              stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
            } catch (e) {
              throw new FS.ErrnoError(ERRNO_CODES.EIO);
            }
          }
          if (length) {
            stream.node.timestamp = Date.now();
          }
          return i;
        }},default_tty_ops:{get_char:function (tty) {
          if (!tty.input.length) {
            var result = null;
            if (ENVIRONMENT_IS_NODE) {
              // we will read data by chunks of BUFSIZE
              var BUFSIZE = 256;
              var buf = new Buffer(BUFSIZE);
              var bytesRead = 0;

              var isPosixPlatform = (process.platform != 'win32'); // Node doesn't offer a direct check, so test by exclusion

              var fd = process.stdin.fd;
              if (isPosixPlatform) {
                // Linux and Mac cannot use process.stdin.fd (which isn't set up as sync)
                var usingDevice = false;
                try {
                  fd = fs.openSync('/dev/stdin', 'r');
                  usingDevice = true;
                } catch (e) {}
              }

              try {
                bytesRead = fs.readSync(fd, buf, 0, BUFSIZE, null);
              } catch(e) {
                // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes,
                // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0.
                if (e.toString().indexOf('EOF') != -1) bytesRead = 0;
                else throw e;
              }

              if (usingDevice) { fs.closeSync(fd); }
              if (bytesRead > 0) {
                result = buf.slice(0, bytesRead).toString('utf-8');
              } else {
                result = null;
              }

            } else if (typeof window != 'undefined' &&
              typeof window.prompt == 'function') {
              // Browser.
              result = window.prompt('Input: ');  // returns null on cancel
              if (result !== null) {
                result += '\n';
              }
            } else if (typeof readline == 'function') {
              // Command line.
              result = readline();
              if (result !== null) {
                result += '\n';
              }
            }
            if (!result) {
              return null;
            }
            tty.input = intArrayFromString(result, true);
          }
          return tty.input.shift();
        },put_char:function (tty, val) {
          if (val === null || val === 10) {
            Module['print'](UTF8ArrayToString(tty.output, 0));
            tty.output = [];
          } else {
            if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.
          }
        },flush:function (tty) {
          if (tty.output && tty.output.length > 0) {
            Module['print'](UTF8ArrayToString(tty.output, 0));
            tty.output = [];
          }
        }},default_tty1_ops:{put_char:function (tty, val) {
          if (val === null || val === 10) {
            Module['printErr'](UTF8ArrayToString(tty.output, 0));
            tty.output = [];
          } else {
            if (val != 0) tty.output.push(val);
          }
        },flush:function (tty) {
          if (tty.output && tty.output.length > 0) {
            Module['printErr'](UTF8ArrayToString(tty.output, 0));
            tty.output = [];
          }
        }}};

  var MEMFS={ops_table:null,mount:function (mount) {
        return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
      },createNode:function (parent, name, mode, dev) {
        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
          // no supported
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        if (!MEMFS.ops_table) {
          MEMFS.ops_table = {
            dir: {
              node: {
                getattr: MEMFS.node_ops.getattr,
                setattr: MEMFS.node_ops.setattr,
                lookup: MEMFS.node_ops.lookup,
                mknod: MEMFS.node_ops.mknod,
                rename: MEMFS.node_ops.rename,
                unlink: MEMFS.node_ops.unlink,
                rmdir: MEMFS.node_ops.rmdir,
                readdir: MEMFS.node_ops.readdir,
                symlink: MEMFS.node_ops.symlink
              },
              stream: {
                llseek: MEMFS.stream_ops.llseek
              }
            },
            file: {
              node: {
                getattr: MEMFS.node_ops.getattr,
                setattr: MEMFS.node_ops.setattr
              },
              stream: {
                llseek: MEMFS.stream_ops.llseek,
                read: MEMFS.stream_ops.read,
                write: MEMFS.stream_ops.write,
                allocate: MEMFS.stream_ops.allocate,
                mmap: MEMFS.stream_ops.mmap,
                msync: MEMFS.stream_ops.msync
              }
            },
            link: {
              node: {
                getattr: MEMFS.node_ops.getattr,
                setattr: MEMFS.node_ops.setattr,
                readlink: MEMFS.node_ops.readlink
              },
              stream: {}
            },
            chrdev: {
              node: {
                getattr: MEMFS.node_ops.getattr,
                setattr: MEMFS.node_ops.setattr
              },
              stream: FS.chrdev_stream_ops
            }
          };
        }
        var node = FS.createNode(parent, name, mode, dev);
        if (FS.isDir(node.mode)) {
          node.node_ops = MEMFS.ops_table.dir.node;
          node.stream_ops = MEMFS.ops_table.dir.stream;
          node.contents = {};
        } else if (FS.isFile(node.mode)) {
          node.node_ops = MEMFS.ops_table.file.node;
          node.stream_ops = MEMFS.ops_table.file.stream;
          node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.
          // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred
          // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size
          // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.
          node.contents = null;
        } else if (FS.isLink(node.mode)) {
          node.node_ops = MEMFS.ops_table.link.node;
          node.stream_ops = MEMFS.ops_table.link.stream;
        } else if (FS.isChrdev(node.mode)) {
          node.node_ops = MEMFS.ops_table.chrdev.node;
          node.stream_ops = MEMFS.ops_table.chrdev.stream;
        }
        node.timestamp = Date.now();
        // add the new node to the parent
        if (parent) {
          parent.contents[name] = node;
        }
        return node;
      },getFileDataAsRegularArray:function (node) {
        if (node.contents && node.contents.subarray) {
          var arr = [];
          for (var i = 0; i < node.usedBytes; ++i) arr.push(node.contents[i]);
          return arr; // Returns a copy of the original data.
        }
        return node.contents; // No-op, the file contents are already in a JS array. Return as-is.
      },getFileDataAsTypedArray:function (node) {
        if (!node.contents) return new Uint8Array;
        if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.
        return new Uint8Array(node.contents);
      },expandFileStorage:function (node, newCapacity) {
        // If we are asked to expand the size of a file that already exists, revert to using a standard JS array to store the file
        // instead of a typed array. This makes resizing the array more flexible because we can just .push() elements at the back to
        // increase the size.
        if (node.contents && node.contents.subarray && newCapacity > node.contents.length) {
          node.contents = MEMFS.getFileDataAsRegularArray(node);
          node.usedBytes = node.contents.length; // We might be writing to a lazy-loaded file which had overridden this property, so force-reset it.
        }

        if (!node.contents || node.contents.subarray) { // Keep using a typed array if creating a new storage, or if old one was a typed array as well.
          var prevCapacity = node.contents ? node.contents.length : 0;
          if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.
          // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.
          // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to
          // avoid overshooting the allocation cap by a very large margin.
          var CAPACITY_DOUBLING_MAX = 1024 * 1024;
          newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) | 0);
          if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.
          var oldContents = node.contents;
          node.contents = new Uint8Array(newCapacity); // Allocate new storage.
          if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.
          return;
        }
        // Not using a typed array to back the file storage. Use a standard JS array instead.
        if (!node.contents && newCapacity > 0) node.contents = [];
        while (node.contents.length < newCapacity) node.contents.push(0);
      },resizeFileStorage:function (node, newSize) {
        if (node.usedBytes == newSize) return;
        if (newSize == 0) {
          node.contents = null; // Fully decommit when requesting a resize to zero.
          node.usedBytes = 0;
          return;
        }
        if (!node.contents || node.contents.subarray) { // Resize a typed array if that is being used as the backing store.
          var oldContents = node.contents;
          node.contents = new Uint8Array(new ArrayBuffer(newSize)); // Allocate new storage.
          if (oldContents) {
            node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.
          }
          node.usedBytes = newSize;
          return;
        }
        // Backing with a JS array.
        if (!node.contents) node.contents = [];
        if (node.contents.length > newSize) node.contents.length = newSize;
        else while (node.contents.length < newSize) node.contents.push(0);
        node.usedBytes = newSize;
      },node_ops:{getattr:function (node) {
          var attr = {};
          // device numbers reuse inode numbers.
          attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
          attr.ino = node.id;
          attr.mode = node.mode;
          attr.nlink = 1;
          attr.uid = 0;
          attr.gid = 0;
          attr.rdev = node.rdev;
          if (FS.isDir(node.mode)) {
            attr.size = 4096;
          } else if (FS.isFile(node.mode)) {
            attr.size = node.usedBytes;
          } else if (FS.isLink(node.mode)) {
            attr.size = node.link.length;
          } else {
            attr.size = 0;
          }
          attr.atime = new Date(node.timestamp);
          attr.mtime = new Date(node.timestamp);
          attr.ctime = new Date(node.timestamp);
          // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
          //       but this is not required by the standard.
          attr.blksize = 4096;
          attr.blocks = Math.ceil(attr.size / attr.blksize);
          return attr;
        },setattr:function (node, attr) {
          if (attr.mode !== undefined) {
            node.mode = attr.mode;
          }
          if (attr.timestamp !== undefined) {
            node.timestamp = attr.timestamp;
          }
          if (attr.size !== undefined) {
            MEMFS.resizeFileStorage(node, attr.size);
          }
        },lookup:function (parent, name) {
          throw FS.genericErrors[ERRNO_CODES.ENOENT];
        },mknod:function (parent, name, mode, dev) {
          return MEMFS.createNode(parent, name, mode, dev);
        },rename:function (old_node, new_dir, new_name) {
          // if we're overwriting a directory at new_name, make sure it's empty.
          if (FS.isDir(old_node.mode)) {
            var new_node;
            try {
              new_node = FS.lookupNode(new_dir, new_name);
            } catch (e) {
            }
            if (new_node) {
              for (var i in new_node.contents) {
                throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
              }
            }
          }
          // do the internal rewiring
          delete old_node.parent.contents[old_node.name];
          old_node.name = new_name;
          new_dir.contents[new_name] = old_node;
          old_node.parent = new_dir;
        },unlink:function (parent, name) {
          delete parent.contents[name];
        },rmdir:function (parent, name) {
          var node = FS.lookupNode(parent, name);
          for (var i in node.contents) {
            throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
          }
          delete parent.contents[name];
        },readdir:function (node) {
          var entries = ['.', '..']
          for (var key in node.contents) {
            if (!node.contents.hasOwnProperty(key)) {
              continue;
            }
            entries.push(key);
          }
          return entries;
        },symlink:function (parent, newname, oldpath) {
          var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
          node.link = oldpath;
          return node;
        },readlink:function (node) {
          if (!FS.isLink(node.mode)) {
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
          }
          return node.link;
        }},stream_ops:{read:function (stream, buffer, offset, length, position) {
          var contents = stream.node.contents;
          if (position >= stream.node.usedBytes) return 0;
          var size = Math.min(stream.node.usedBytes - position, length);
          assert(size >= 0);
          if (size > 8 && contents.subarray) { // non-trivial, and typed array
            buffer.set(contents.subarray(position, position + size), offset);
          } else {
            for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];
          }
          return size;
        },write:function (stream, buffer, offset, length, position, canOwn) {
          if (!length) return 0;
          var node = stream.node;
          node.timestamp = Date.now();

          if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array?
            if (canOwn) {
              node.contents = buffer.subarray(offset, offset + length);
              node.usedBytes = length;
              return length;
            } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.
              node.contents = new Uint8Array(buffer.subarray(offset, offset + length));
              node.usedBytes = length;
              return length;
            } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file?
              node.contents.set(buffer.subarray(offset, offset + length), position);
              return length;
            }
          }

          // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.
          MEMFS.expandFileStorage(node, position+length);
          if (node.contents.subarray && buffer.subarray) node.contents.set(buffer.subarray(offset, offset + length), position); // Use typed array write if available.
          else {
            for (var i = 0; i < length; i++) {
             node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.
            }
          }
          node.usedBytes = Math.max(node.usedBytes, position+length);
          return length;
        },llseek:function (stream, offset, whence) {
          var position = offset;
          if (whence === 1) {  // SEEK_CUR.
            position += stream.position;
          } else if (whence === 2) {  // SEEK_END.
            if (FS.isFile(stream.node.mode)) {
              position += stream.node.usedBytes;
            }
          }
          if (position < 0) {
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
          }
          return position;
        },allocate:function (stream, offset, length) {
          MEMFS.expandFileStorage(stream.node, offset + length);
          stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);
        },mmap:function (stream, buffer, offset, length, position, prot, flags) {
          if (!FS.isFile(stream.node.mode)) {
            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
          }
          var ptr;
          var allocated;
          var contents = stream.node.contents;
          // Only make a new copy when MAP_PRIVATE is specified.
          if ( !(flags & 2) &&
                (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
            // We can't emulate MAP_SHARED when the file is not backed by the buffer
            // we're mapping to (e.g. the HEAP buffer).
            allocated = false;
            ptr = contents.byteOffset;
          } else {
            // Try to avoid unnecessary slices.
            if (position > 0 || position + length < stream.node.usedBytes) {
              if (contents.subarray) {
                contents = contents.subarray(position, position + length);
              } else {
                contents = Array.prototype.slice.call(contents, position, position + length);
              }
            }
            allocated = true;
            ptr = _malloc(length);
            if (!ptr) {
              throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
            }
            buffer.set(contents, ptr);
          }
          return { ptr: ptr, allocated: allocated };
        },msync:function (stream, buffer, offset, length, mmapFlags) {
          if (!FS.isFile(stream.node.mode)) {
            throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
          }
          if (mmapFlags & 2) {
            // MAP_PRIVATE calls need not to be synced back to underlying fs
            return 0;
          }

          var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
          // should we check if bytesWritten and length are the same?
          return 0;
        }}};

  var IDBFS={dbs:{},indexedDB:function () {
        if (typeof indexedDB !== 'undefined') return indexedDB;
        var ret = null;
        if (typeof window === 'object') ret = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
        assert(ret, 'IDBFS used, but indexedDB not supported');
        return ret;
      },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
        // reuse all of the core MEMFS functionality
        return MEMFS.mount.apply(null, arguments);
      },syncfs:function (mount, populate, callback) {
        IDBFS.getLocalSet(mount, function(err, local) {
          if (err) return callback(err);

          IDBFS.getRemoteSet(mount, function(err, remote) {
            if (err) return callback(err);

            var src = populate ? remote : local;
            var dst = populate ? local : remote;

            IDBFS.reconcile(src, dst, callback);
          });
        });
      },getDB:function (name, callback) {
        // check the cache first
        var db = IDBFS.dbs[name];
        if (db) {
          return callback(null, db);
        }

        var req;
        try {
          req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
        } catch (e) {
          return callback(e);
        }
        if (!req) {
          return callback("Unable to connect to IndexedDB");
        }
        req.onupgradeneeded = function(e) {
          var db = e.target.result;
          var transaction = e.target.transaction;

          var fileStore;

          if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
            fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
          } else {
            fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
          }

          if (!fileStore.indexNames.contains('timestamp')) {
            fileStore.createIndex('timestamp', 'timestamp', { unique: false });
          }
        };
        req.onsuccess = function() {
          db = req.result;

          // add to the cache
          IDBFS.dbs[name] = db;
          callback(null, db);
        };
        req.onerror = function(e) {
          callback(this.error);
          e.preventDefault();
        };
      },getLocalSet:function (mount, callback) {
        var entries = {};

        function isRealDir(p) {
          return p !== '.' && p !== '..';
        };
        function toAbsolute(root) {
          return function(p) {
            return PATH.join2(root, p);
          }
        };

        var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));

        while (check.length) {
          var path = check.pop();
          var stat;

          try {
            stat = FS.stat(path);
          } catch (e) {
            return callback(e);
          }

          if (FS.isDir(stat.mode)) {
            check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
          }

          entries[path] = { timestamp: stat.mtime };
        }

        return callback(null, { type: 'local', entries: entries });
      },getRemoteSet:function (mount, callback) {
        var entries = {};

        IDBFS.getDB(mount.mountpoint, function(err, db) {
          if (err) return callback(err);

          var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
          transaction.onerror = function(e) {
            callback(this.error);
            e.preventDefault();
          };

          var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
          var index = store.index('timestamp');

          index.openKeyCursor().onsuccess = function(event) {
            var cursor = event.target.result;

            if (!cursor) {
              return callback(null, { type: 'remote', db: db, entries: entries });
            }

            entries[cursor.primaryKey] = { timestamp: cursor.key };

            cursor.continue();
          };
        });
      },loadLocalEntry:function (path, callback) {
        var stat, node;

        try {
          var lookup = FS.lookupPath(path);
          node = lookup.node;
          stat = FS.stat(path);
        } catch (e) {
          return callback(e);
        }

        if (FS.isDir(stat.mode)) {
          return callback(null, { timestamp: stat.mtime, mode: stat.mode });
        } else if (FS.isFile(stat.mode)) {
          // Performance consideration: storing a normal JavaScript array to a IndexedDB is much slower than storing a typed array.
          // Therefore always convert the file contents to a typed array first before writing the data to IndexedDB.
          node.contents = MEMFS.getFileDataAsTypedArray(node);
          return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
        } else {
          return callback(new Error('node type not supported'));
        }
      },storeLocalEntry:function (path, entry, callback) {
        try {
          if (FS.isDir(entry.mode)) {
            FS.mkdir(path, entry.mode);
          } else if (FS.isFile(entry.mode)) {
            FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
          } else {
            return callback(new Error('node type not supported'));
          }

          FS.chmod(path, entry.mode);
          FS.utime(path, entry.timestamp, entry.timestamp);
        } catch (e) {
          return callback(e);
        }

        callback(null);
      },removeLocalEntry:function (path, callback) {
        try {
          var lookup = FS.lookupPath(path);
          var stat = FS.stat(path);

          if (FS.isDir(stat.mode)) {
            FS.rmdir(path);
          } else if (FS.isFile(stat.mode)) {
            FS.unlink(path);
          }
        } catch (e) {
          return callback(e);
        }

        callback(null);
      },loadRemoteEntry:function (store, path, callback) {
        var req = store.get(path);
        req.onsuccess = function(event) { callback(null, event.target.result); };
        req.onerror = function(e) {
          callback(this.error);
          e.preventDefault();
        };
      },storeRemoteEntry:function (store, path, entry, callback) {
        var req = store.put(entry, path);
        req.onsuccess = function() { callback(null); };
        req.onerror = function(e) {
          callback(this.error);
          e.preventDefault();
        };
      },removeRemoteEntry:function (store, path, callback) {
        var req = store.delete(path);
        req.onsuccess = function() { callback(null); };
        req.onerror = function(e) {
          callback(this.error);
          e.preventDefault();
        };
      },reconcile:function (src, dst, callback) {
        var total = 0;

        var create = [];
        Object.keys(src.entries).forEach(function (key) {
          var e = src.entries[key];
          var e2 = dst.entries[key];
          if (!e2 || e.timestamp > e2.timestamp) {
            create.push(key);
            total++;
          }
        });

        var remove = [];
        Object.keys(dst.entries).forEach(function (key) {
          var e = dst.entries[key];
          var e2 = src.entries[key];
          if (!e2) {
            remove.push(key);
            total++;
          }
        });

        if (!total) {
          return callback(null);
        }

        var errored = false;
        var completed = 0;
        var db = src.type === 'remote' ? src.db : dst.db;
        var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
        var store = transaction.objectStore(IDBFS.DB_STORE_NAME);

        function done(err) {
          if (err) {
            if (!done.errored) {
              done.errored = true;
              return callback(err);
            }
            return;
          }
          if (++completed >= total) {
            return callback(null);
          }
        };

        transaction.onerror = function(e) {
          done(this.error);
          e.preventDefault();
        };

        // sort paths in ascending order so directory entries are created
        // before the files inside them
        create.sort().forEach(function (path) {
          if (dst.type === 'local') {
            IDBFS.loadRemoteEntry(store, path, function (err, entry) {
              if (err) return done(err);
              IDBFS.storeLocalEntry(path, entry, done);
            });
          } else {
            IDBFS.loadLocalEntry(path, function (err, entry) {
              if (err) return done(err);
              IDBFS.storeRemoteEntry(store, path, entry, done);
            });
          }
        });

        // sort paths in descending order so files are deleted before their
        // parent directories
        remove.sort().reverse().forEach(function(path) {
          if (dst.type === 'local') {
            IDBFS.removeLocalEntry(path, done);
          } else {
            IDBFS.removeRemoteEntry(store, path, done);
          }
        });
      }};

  var NODEFS={isWindows:false,staticInit:function () {
        NODEFS.isWindows = !!process.platform.match(/^win/);
      },mount:function (mount) {
        assert(ENVIRONMENT_IS_NODE);
        return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
      },createNode:function (parent, name, mode, dev) {
        if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        var node = FS.createNode(parent, name, mode);
        node.node_ops = NODEFS.node_ops;
        node.stream_ops = NODEFS.stream_ops;
        return node;
      },getMode:function (path) {
        var stat;
        try {
          stat = fs.lstatSync(path);
          if (NODEFS.isWindows) {
            // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
            // propagate write bits to execute bits.
            stat.mode = stat.mode | ((stat.mode & 146) >> 1);
          }
        } catch (e) {
          if (!e.code) throw e;
          throw new FS.ErrnoError(ERRNO_CODES[e.code]);
        }
        return stat.mode;
      },realPath:function (node) {
        var parts = [];
        while (node.parent !== node) {
          parts.push(node.name);
          node = node.parent;
        }
        parts.push(node.mount.opts.root);
        parts.reverse();
        return PATH.join.apply(null, parts);
      },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) {
        flags &= ~0x200000 /*O_PATH*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
        flags &= ~0x800 /*O_NONBLOCK*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
        flags &= ~0x8000 /*O_LARGEFILE*/; // Ignore this flag from musl, otherwise node.js fails to open the file.
        flags &= ~0x80000 /*O_CLOEXEC*/; // Some applications may pass it; it makes no sense for a single process.
        if (flags in NODEFS.flagsToPermissionStringMap) {
          return NODEFS.flagsToPermissionStringMap[flags];
        } else {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
      },node_ops:{getattr:function (node) {
          var path = NODEFS.realPath(node);
          var stat;
          try {
            stat = fs.lstatSync(path);
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
          // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
          // See http://support.microsoft.com/kb/140365
          if (NODEFS.isWindows && !stat.blksize) {
            stat.blksize = 4096;
          }
          if (NODEFS.isWindows && !stat.blocks) {
            stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
          }
          return {
            dev: stat.dev,
            ino: stat.ino,
            mode: stat.mode,
            nlink: stat.nlink,
            uid: stat.uid,
            gid: stat.gid,
            rdev: stat.rdev,
            size: stat.size,
            atime: stat.atime,
            mtime: stat.mtime,
            ctime: stat.ctime,
            blksize: stat.blksize,
            blocks: stat.blocks
          };
        },setattr:function (node, attr) {
          var path = NODEFS.realPath(node);
          try {
            if (attr.mode !== undefined) {
              fs.chmodSync(path, attr.mode);
              // update the common node structure mode as well
              node.mode = attr.mode;
            }
            if (attr.timestamp !== undefined) {
              var date = new Date(attr.timestamp);
              fs.utimesSync(path, date, date);
            }
            if (attr.size !== undefined) {
              fs.truncateSync(path, attr.size);
            }
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },lookup:function (parent, name) {
          var path = PATH.join2(NODEFS.realPath(parent), name);
          var mode = NODEFS.getMode(path);
          return NODEFS.createNode(parent, name, mode);
        },mknod:function (parent, name, mode, dev) {
          var node = NODEFS.createNode(parent, name, mode, dev);
          // create the backing node for this in the fs root as well
          var path = NODEFS.realPath(node);
          try {
            if (FS.isDir(node.mode)) {
              fs.mkdirSync(path, node.mode);
            } else {
              fs.writeFileSync(path, '', { mode: node.mode });
            }
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
          return node;
        },rename:function (oldNode, newDir, newName) {
          var oldPath = NODEFS.realPath(oldNode);
          var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
          try {
            fs.renameSync(oldPath, newPath);
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },unlink:function (parent, name) {
          var path = PATH.join2(NODEFS.realPath(parent), name);
          try {
            fs.unlinkSync(path);
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },rmdir:function (parent, name) {
          var path = PATH.join2(NODEFS.realPath(parent), name);
          try {
            fs.rmdirSync(path);
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },readdir:function (node) {
          var path = NODEFS.realPath(node);
          try {
            return fs.readdirSync(path);
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },symlink:function (parent, newName, oldPath) {
          var newPath = PATH.join2(NODEFS.realPath(parent), newName);
          try {
            fs.symlinkSync(oldPath, newPath);
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },readlink:function (node) {
          var path = NODEFS.realPath(node);
          try {
            path = fs.readlinkSync(path);
            path = NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root), path);
            return path;
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        }},stream_ops:{open:function (stream) {
          var path = NODEFS.realPath(stream.node);
          try {
            if (FS.isFile(stream.node.mode)) {
              stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
            }
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },close:function (stream) {
          try {
            if (FS.isFile(stream.node.mode) && stream.nfd) {
              fs.closeSync(stream.nfd);
            }
          } catch (e) {
            if (!e.code) throw e;
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
        },read:function (stream, buffer, offset, length, position) {
          if (length === 0) return 0; // node errors on 0 length reads
          // FIXME this is terrible.
          var nbuffer = new Buffer(length);
          var res;
          try {
            res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
          } catch (e) {
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
          if (res > 0) {
            for (var i = 0; i < res; i++) {
              buffer[offset + i] = nbuffer[i];
            }
          }
          return res;
        },write:function (stream, buffer, offset, length, position) {
          // FIXME this is terrible.
          var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
          var res;
          try {
            res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
          } catch (e) {
            throw new FS.ErrnoError(ERRNO_CODES[e.code]);
          }
          return res;
        },llseek:function (stream, offset, whence) {
          var position = offset;
          if (whence === 1) {  // SEEK_CUR.
            position += stream.position;
          } else if (whence === 2) {  // SEEK_END.
            if (FS.isFile(stream.node.mode)) {
              try {
                var stat = fs.fstatSync(stream.nfd);
                position += stat.size;
              } catch (e) {
                throw new FS.ErrnoError(ERRNO_CODES[e.code]);
              }
            }
          }

          if (position < 0) {
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
          }

          return position;
        }}};

  var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function (mount) {
        assert(ENVIRONMENT_IS_WORKER);
        if (!WORKERFS.reader) WORKERFS.reader = new FileReaderSync();
        var root = WORKERFS.createNode(null, '/', WORKERFS.DIR_MODE, 0);
        var createdParents = {};
        function ensureParent(path) {
          // return the parent node, creating subdirs as necessary
          var parts = path.split('/');
          var parent = root;
          for (var i = 0; i < parts.length-1; i++) {
            var curr = parts.slice(0, i+1).join('/');
            // Issue 4254: Using curr as a node name will prevent the node
            // from being found in FS.nameTable when FS.open is called on
            // a path which holds a child of this node,
            // given that all FS functions assume node names
            // are just their corresponding parts within their given path,
            // rather than incremental aggregates which include their parent's
            // directories.
            if (!createdParents[curr]) {
              createdParents[curr] = WORKERFS.createNode(parent, parts[i], WORKERFS.DIR_MODE, 0);
            }
            parent = createdParents[curr];
          }
          return parent;
        }
        function base(path) {
          var parts = path.split('/');
          return parts[parts.length-1];
        }
        // We also accept FileList here, by using Array.prototype
        Array.prototype.forEach.call(mount.opts["files"] || [], function(file) {
          WORKERFS.createNode(ensureParent(file.name), base(file.name), WORKERFS.FILE_MODE, 0, file, file.lastModifiedDate);
        });
        (mount.opts["blobs"] || []).forEach(function(obj) {
          WORKERFS.createNode(ensureParent(obj["name"]), base(obj["name"]), WORKERFS.FILE_MODE, 0, obj["data"]);
        });
        (mount.opts["packages"] || []).forEach(function(pack) {
          pack['metadata'].files.forEach(function(file) {
            var name = file.filename.substr(1); // remove initial slash
            WORKERFS.createNode(ensureParent(name), base(name), WORKERFS.FILE_MODE, 0, pack['blob'].slice(file.start, file.end));
          });
        });
        return root;
      },createNode:function (parent, name, mode, dev, contents, mtime) {
        var node = FS.createNode(parent, name, mode);
        node.mode = mode;
        node.node_ops = WORKERFS.node_ops;
        node.stream_ops = WORKERFS.stream_ops;
        node.timestamp = (mtime || new Date).getTime();
        assert(WORKERFS.FILE_MODE !== WORKERFS.DIR_MODE);
        if (mode === WORKERFS.FILE_MODE) {
          node.size = contents.size;
          node.contents = contents;
        } else {
          node.size = 4096;
          node.contents = {};
        }
        if (parent) {
          parent.contents[name] = node;
        }
        return node;
      },node_ops:{getattr:function (node) {
          return {
            dev: 1,
            ino: undefined,
            mode: node.mode,
            nlink: 1,
            uid: 0,
            gid: 0,
            rdev: undefined,
            size: node.size,
            atime: new Date(node.timestamp),
            mtime: new Date(node.timestamp),
            ctime: new Date(node.timestamp),
            blksize: 4096,
            blocks: Math.ceil(node.size / 4096),
          };
        },setattr:function (node, attr) {
          if (attr.mode !== undefined) {
            node.mode = attr.mode;
          }
          if (attr.timestamp !== undefined) {
            node.timestamp = attr.timestamp;
          }
        },lookup:function (parent, name) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        },mknod:function (parent, name, mode, dev) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        },rename:function (oldNode, newDir, newName) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        },unlink:function (parent, name) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        },rmdir:function (parent, name) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        },readdir:function (node) {
          var entries = ['.', '..'];
          for (var key in node.contents) {
            if (!node.contents.hasOwnProperty(key)) {
              continue;
            }
            entries.push(key);
          }
          return entries;
        },symlink:function (parent, newName, oldPath) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        },readlink:function (node) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }},stream_ops:{read:function (stream, buffer, offset, length, position) {
          if (position >= stream.node.size) return 0;
          var chunk = stream.node.contents.slice(position, position + length);
          var ab = WORKERFS.reader.readAsArrayBuffer(chunk);
          buffer.set(new Uint8Array(ab), offset);
          return chunk.size;
        },write:function (stream, buffer, offset, length, position) {
          throw new FS.ErrnoError(ERRNO_CODES.EIO);
        },llseek:function (stream, offset, whence) {
          var position = offset;
          if (whence === 1) {  // SEEK_CUR.
            position += stream.position;
          } else if (whence === 2) {  // SEEK_END.
            if (FS.isFile(stream.node.mode)) {
              position += stream.node.size;
            }
          }
          if (position < 0) {
            throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
          }
          return position;
        }}};

  var _stdin=STATICTOP; STATICTOP += 16;;

  var _stdout=STATICTOP; STATICTOP += 16;;

  var _stderr=STATICTOP; STATICTOP += 16;;var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:function (e) {
        if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
        return ___setErrNo(e.errno);
      },lookupPath:function (path, opts) {
        path = PATH.resolve(FS.cwd(), path);
        opts = opts || {};

        if (!path) return { path: '', node: null };

        var defaults = {
          follow_mount: true,
          recurse_count: 0
        };
        for (var key in defaults) {
          if (opts[key] === undefined) {
            opts[key] = defaults[key];
          }
        }

        if (opts.recurse_count > 8) {  // max recursive lookup of 8
          throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
        }

        // split the path
        var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
          return !!p;
        }), false);

        // start at the root
        var current = FS.root;
        var current_path = '/';

        for (var i = 0; i < parts.length; i++) {
          var islast = (i === parts.length-1);
          if (islast && opts.parent) {
            // stop resolving
            break;
          }

          current = FS.lookupNode(current, parts[i]);
          current_path = PATH.join2(current_path, parts[i]);

          // jump to the mount's root node if this is a mountpoint
          if (FS.isMountpoint(current)) {
            if (!islast || (islast && opts.follow_mount)) {
              current = current.mounted.root;
            }
          }

          // by default, lookupPath will not follow a symlink if it is the final path component.
          // setting opts.follow = true will override this behavior.
          if (!islast || opts.follow) {
            var count = 0;
            while (FS.isLink(current.mode)) {
              var link = FS.readlink(current_path);
              current_path = PATH.resolve(PATH.dirname(current_path), link);

              var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
              current = lookup.node;

              if (count++ > 40) {  // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
                throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
              }
            }
          }
        }

        return { path: current_path, node: current };
      },getPath:function (node) {
        var path;
        while (true) {
          if (FS.isRoot(node)) {
            var mount = node.mount.mountpoint;
            if (!path) return mount;
            return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
          }
          path = path ? node.name + '/' + path : node.name;
          node = node.parent;
        }
      },hashName:function (parentid, name) {
        var hash = 0;


        for (var i = 0; i < name.length; i++) {
          hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
        }
        return ((parentid + hash) >>> 0) % FS.nameTable.length;
      },hashAddNode:function (node) {
        var hash = FS.hashName(node.parent.id, node.name);
        node.name_next = FS.nameTable[hash];
        FS.nameTable[hash] = node;
      },hashRemoveNode:function (node) {
        var hash = FS.hashName(node.parent.id, node.name);
        if (FS.nameTable[hash] === node) {
          FS.nameTable[hash] = node.name_next;
        } else {
          var current = FS.nameTable[hash];
          while (current) {
            if (current.name_next === node) {
              current.name_next = node.name_next;
              break;
            }
            current = current.name_next;
          }
        }
      },lookupNode:function (parent, name) {
        var err = FS.mayLookup(parent);
        if (err) {
          throw new FS.ErrnoError(err, parent);
        }
        var hash = FS.hashName(parent.id, name);
        for (var node = FS.nameTable[hash]; node; node = node.name_next) {
          var nodeName = node.name;
          if (node.parent.id === parent.id && nodeName === name) {
            return node;
          }
        }
        // if we failed to find it in the cache, call into the VFS
        return FS.lookup(parent, name);
      },createNode:function (parent, name, mode, rdev) {
        if (!FS.FSNode) {
          FS.FSNode = function(parent, name, mode, rdev) {
            if (!parent) {
              parent = this;  // root node sets parent to itself
            }
            this.parent = parent;
            this.mount = parent.mount;
            this.mounted = null;
            this.id = FS.nextInode++;
            this.name = name;
            this.mode = mode;
            this.node_ops = {};
            this.stream_ops = {};
            this.rdev = rdev;
          };

          FS.FSNode.prototype = {};

          // compatibility
          var readMode = 292 | 73;
          var writeMode = 146;

          // NOTE we must use Object.defineProperties instead of individual calls to
          // Object.defineProperty in order to make closure compiler happy
          Object.defineProperties(FS.FSNode.prototype, {
            read: {
              get: function() { return (this.mode & readMode) === readMode; },
              set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
            },
            write: {
              get: function() { return (this.mode & writeMode) === writeMode; },
              set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
            },
            isFolder: {
              get: function() { return FS.isDir(this.mode); }
            },
            isDevice: {
              get: function() { return FS.isChrdev(this.mode); }
            }
          });
        }

        var node = new FS.FSNode(parent, name, mode, rdev);

        FS.hashAddNode(node);

        return node;
      },destroyNode:function (node) {
        FS.hashRemoveNode(node);
      },isRoot:function (node) {
        return node === node.parent;
      },isMountpoint:function (node) {
        return !!node.mounted;
      },isFile:function (mode) {
        return (mode & 61440) === 32768;
      },isDir:function (mode) {
        return (mode & 61440) === 16384;
      },isLink:function (mode) {
        return (mode & 61440) === 40960;
      },isChrdev:function (mode) {
        return (mode & 61440) === 8192;
      },isBlkdev:function (mode) {
        return (mode & 61440) === 24576;
      },isFIFO:function (mode) {
        return (mode & 61440) === 4096;
      },isSocket:function (mode) {
        return (mode & 49152) === 49152;
      },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) {
        var flags = FS.flagModes[str];
        if (typeof flags === 'undefined') {
          throw new Error('Unknown file open mode: ' + str);
        }
        return flags;
      },flagsToPermissionString:function (flag) {
        var perms = ['r', 'w', 'rw'][flag & 3];
        if ((flag & 512)) {
          perms += 'w';
        }
        return perms;
      },nodePermissions:function (node, perms) {
        if (FS.ignorePermissions) {
          return 0;
        }
        // return 0 if any user, group or owner bits are set.
        if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
          return ERRNO_CODES.EACCES;
        } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
          return ERRNO_CODES.EACCES;
        } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
          return ERRNO_CODES.EACCES;
        }
        return 0;
      },mayLookup:function (dir) {
        var err = FS.nodePermissions(dir, 'x');
        if (err) return err;
        if (!dir.node_ops.lookup) return ERRNO_CODES.EACCES;
        return 0;
      },mayCreate:function (dir, name) {
        try {
          var node = FS.lookupNode(dir, name);
          return ERRNO_CODES.EEXIST;
        } catch (e) {
        }
        return FS.nodePermissions(dir, 'wx');
      },mayDelete:function (dir, name, isdir) {
        var node;
        try {
          node = FS.lookupNode(dir, name);
        } catch (e) {
          return e.errno;
        }
        var err = FS.nodePermissions(dir, 'wx');
        if (err) {
          return err;
        }
        if (isdir) {
          if (!FS.isDir(node.mode)) {
            return ERRNO_CODES.ENOTDIR;
          }
          if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
            return ERRNO_CODES.EBUSY;
          }
        } else {
          if (FS.isDir(node.mode)) {
            return ERRNO_CODES.EISDIR;
          }
        }
        return 0;
      },mayOpen:function (node, flags) {
        if (!node) {
          return ERRNO_CODES.ENOENT;
        }
        if (FS.isLink(node.mode)) {
          return ERRNO_CODES.ELOOP;
        } else if (FS.isDir(node.mode)) {
          if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write
              (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only)
            return ERRNO_CODES.EISDIR;
          }
        }
        return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
      },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
        fd_start = fd_start || 0;
        fd_end = fd_end || FS.MAX_OPEN_FDS;
        for (var fd = fd_start; fd <= fd_end; fd++) {
          if (!FS.streams[fd]) {
            return fd;
          }
        }
        throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
      },getStream:function (fd) {
        return FS.streams[fd];
      },createStream:function (stream, fd_start, fd_end) {
        if (!FS.FSStream) {
          FS.FSStream = function(){};
          FS.FSStream.prototype = {};
          // compatibility
          Object.defineProperties(FS.FSStream.prototype, {
            object: {
              get: function() { return this.node; },
              set: function(val) { this.node = val; }
            },
            isRead: {
              get: function() { return (this.flags & 2097155) !== 1; }
            },
            isWrite: {
              get: function() { return (this.flags & 2097155) !== 0; }
            },
            isAppend: {
              get: function() { return (this.flags & 1024); }
            }
          });
        }
        // clone it, so we can return an instance of FSStream
        var newStream = new FS.FSStream();
        for (var p in stream) {
          newStream[p] = stream[p];
        }
        stream = newStream;
        var fd = FS.nextfd(fd_start, fd_end);
        stream.fd = fd;
        FS.streams[fd] = stream;
        return stream;
      },closeStream:function (fd) {
        FS.streams[fd] = null;
      },chrdev_stream_ops:{open:function (stream) {
          var device = FS.getDevice(stream.node.rdev);
          // override node's stream ops with the device's
          stream.stream_ops = device.stream_ops;
          // forward the open call
          if (stream.stream_ops.open) {
            stream.stream_ops.open(stream);
          }
        },llseek:function () {
          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        }},major:function (dev) {
        return ((dev) >> 8);
      },minor:function (dev) {
        return ((dev) & 0xff);
      },makedev:function (ma, mi) {
        return ((ma) << 8 | (mi));
      },registerDevice:function (dev, ops) {
        FS.devices[dev] = { stream_ops: ops };
      },getDevice:function (dev) {
        return FS.devices[dev];
      },getMounts:function (mount) {
        var mounts = [];
        var check = [mount];

        while (check.length) {
          var m = check.pop();

          mounts.push(m);

          check.push.apply(check, m.mounts);
        }

        return mounts;
      },syncfs:function (populate, callback) {
        if (typeof(populate) === 'function') {
          callback = populate;
          populate = false;
        }

        FS.syncFSRequests++;

        if (FS.syncFSRequests > 1) {
          console.log('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work');
        }

        var mounts = FS.getMounts(FS.root.mount);
        var completed = 0;

        function doCallback(err) {
          assert(FS.syncFSRequests > 0);
          FS.syncFSRequests--;
          return callback(err);
        }

        function done(err) {
          if (err) {
            if (!done.errored) {
              done.errored = true;
              return doCallback(err);
            }
            return;
          }
          if (++completed >= mounts.length) {
            doCallback(null);
          }
        };

        // sync all mounts
        mounts.forEach(function (mount) {
          if (!mount.type.syncfs) {
            return done(null);
          }
          mount.type.syncfs(mount, populate, done);
        });
      },mount:function (type, opts, mountpoint) {
        var root = mountpoint === '/';
        var pseudo = !mountpoint;
        var node;

        if (root && FS.root) {
          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        } else if (!root && !pseudo) {
          var lookup = FS.lookupPath(mountpoint, { follow_mount: false });

          mountpoint = lookup.path;  // use the absolute path
          node = lookup.node;

          if (FS.isMountpoint(node)) {
            throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
          }

          if (!FS.isDir(node.mode)) {
            throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
          }
        }

        var mount = {
          type: type,
          opts: opts,
          mountpoint: mountpoint,
          mounts: []
        };

        // create a root node for the fs
        var mountRoot = type.mount(mount);
        mountRoot.mount = mount;
        mount.root = mountRoot;

        if (root) {
          FS.root = mountRoot;
        } else if (node) {
          // set as a mountpoint
          node.mounted = mount;

          // add the new mount to the current mount's children
          if (node.mount) {
            node.mount.mounts.push(mount);
          }
        }

        return mountRoot;
      },unmount:function (mountpoint) {
        var lookup = FS.lookupPath(mountpoint, { follow_mount: false });

        if (!FS.isMountpoint(lookup.node)) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }

        // destroy the nodes for this mount, and all its child mounts
        var node = lookup.node;
        var mount = node.mounted;
        var mounts = FS.getMounts(mount);

        Object.keys(FS.nameTable).forEach(function (hash) {
          var current = FS.nameTable[hash];

          while (current) {
            var next = current.name_next;

            if (mounts.indexOf(current.mount) !== -1) {
              FS.destroyNode(current);
            }

            current = next;
          }
        });

        // no longer a mountpoint
        node.mounted = null;

        // remove this mount from the child mounts
        var idx = node.mount.mounts.indexOf(mount);
        assert(idx !== -1);
        node.mount.mounts.splice(idx, 1);
      },lookup:function (parent, name) {
        return parent.node_ops.lookup(parent, name);
      },mknod:function (path, mode, dev) {
        var lookup = FS.lookupPath(path, { parent: true });
        var parent = lookup.node;
        var name = PATH.basename(path);
        if (!name || name === '.' || name === '..') {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        var err = FS.mayCreate(parent, name);
        if (err) {
          throw new FS.ErrnoError(err);
        }
        if (!parent.node_ops.mknod) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        return parent.node_ops.mknod(parent, name, mode, dev);
      },create:function (path, mode) {
        mode = mode !== undefined ? mode : 438 /* 0666 */;
        mode &= 4095;
        mode |= 32768;
        return FS.mknod(path, mode, 0);
      },mkdir:function (path, mode) {
        mode = mode !== undefined ? mode : 511 /* 0777 */;
        mode &= 511 | 512;
        mode |= 16384;
        return FS.mknod(path, mode, 0);
      },mkdirTree:function (path, mode) {
        var dirs = path.split('/');
        var d = '';
        for (var i = 0; i < dirs.length; ++i) {
          if (!dirs[i]) continue;
          d += '/' + dirs[i];
          try {
            FS.mkdir(d, mode);
          } catch(e) {
            if (e.errno != ERRNO_CODES.EEXIST) throw e;
          }
        }
      },mkdev:function (path, mode, dev) {
        if (typeof(dev) === 'undefined') {
          dev = mode;
          mode = 438 /* 0666 */;
        }
        mode |= 8192;
        return FS.mknod(path, mode, dev);
      },symlink:function (oldpath, newpath) {
        if (!PATH.resolve(oldpath)) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        var lookup = FS.lookupPath(newpath, { parent: true });
        var parent = lookup.node;
        if (!parent) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        var newname = PATH.basename(newpath);
        var err = FS.mayCreate(parent, newname);
        if (err) {
          throw new FS.ErrnoError(err);
        }
        if (!parent.node_ops.symlink) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        return parent.node_ops.symlink(parent, newname, oldpath);
      },rename:function (old_path, new_path) {
        var old_dirname = PATH.dirname(old_path);
        var new_dirname = PATH.dirname(new_path);
        var old_name = PATH.basename(old_path);
        var new_name = PATH.basename(new_path);
        // parents must exist
        var lookup, old_dir, new_dir;
        try {
          lookup = FS.lookupPath(old_path, { parent: true });
          old_dir = lookup.node;
          lookup = FS.lookupPath(new_path, { parent: true });
          new_dir = lookup.node;
        } catch (e) {
          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        }
        if (!old_dir || !new_dir) throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        // need to be part of the same mount
        if (old_dir.mount !== new_dir.mount) {
          throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
        }
        // source must exist
        var old_node = FS.lookupNode(old_dir, old_name);
        // old path should not be an ancestor of the new path
        var relative = PATH.relative(old_path, new_dirname);
        if (relative.charAt(0) !== '.') {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        // new path should not be an ancestor of the old path
        relative = PATH.relative(new_path, old_dirname);
        if (relative.charAt(0) !== '.') {
          throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
        }
        // see if the new path already exists
        var new_node;
        try {
          new_node = FS.lookupNode(new_dir, new_name);
        } catch (e) {
          // not fatal
        }
        // early out if nothing needs to change
        if (old_node === new_node) {
          return;
        }
        // we'll need to delete the old entry
        var isdir = FS.isDir(old_node.mode);
        var err = FS.mayDelete(old_dir, old_name, isdir);
        if (err) {
          throw new FS.ErrnoError(err);
        }
        // need delete permissions if we'll be overwriting.
        // need create permissions if new doesn't already exist.
        err = new_node ?
          FS.mayDelete(new_dir, new_name, isdir) :
          FS.mayCreate(new_dir, new_name);
        if (err) {
          throw new FS.ErrnoError(err);
        }
        if (!old_dir.node_ops.rename) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        }
        // if we are going to change the parent, check write permissions
        if (new_dir !== old_dir) {
          err = FS.nodePermissions(old_dir, 'w');
          if (err) {
            throw new FS.ErrnoError(err);
          }
        }
        try {
          if (FS.trackingDelegate['willMovePath']) {
            FS.trackingDelegate['willMovePath'](old_path, new_path);
          }
        } catch(e) {
          console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
        }
        // remove the node from the lookup hash
        FS.hashRemoveNode(old_node);
        // do the underlying fs rename
        try {
          old_dir.node_ops.rename(old_node, new_dir, new_name);
        } catch (e) {
          throw e;
        } finally {
          // add the node back to the hash (in case node_ops.rename
          // changed its name)
          FS.hashAddNode(old_node);
        }
        try {
          if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path);
        } catch(e) {
          console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: " + e.message);
        }
      },rmdir:function (path) {
        var lookup = FS.lookupPath(path, { parent: true });
        var parent = lookup.node;
        var name = PATH.basename(path);
        var node = FS.lookupNode(parent, name);
        var err = FS.mayDelete(parent, name, true);
        if (err) {
          throw new FS.ErrnoError(err);
        }
        if (!parent.node_ops.rmdir) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        if (FS.isMountpoint(node)) {
          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        }
        try {
          if (FS.trackingDelegate['willDeletePath']) {
            FS.trackingDelegate['willDeletePath'](path);
          }
        } catch(e) {
          console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
        }
        parent.node_ops.rmdir(parent, name);
        FS.destroyNode(node);
        try {
          if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);
        } catch(e) {
          console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
        }
      },readdir:function (path) {
        var lookup = FS.lookupPath(path, { follow: true });
        var node = lookup.node;
        if (!node.node_ops.readdir) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
        }
        return node.node_ops.readdir(node);
      },unlink:function (path) {
        var lookup = FS.lookupPath(path, { parent: true });
        var parent = lookup.node;
        var name = PATH.basename(path);
        var node = FS.lookupNode(parent, name);
        var err = FS.mayDelete(parent, name, false);
        if (err) {
          // According to POSIX, we should map EISDIR to EPERM, but
          // we instead do what Linux does (and we must, as we use
          // the musl linux libc).
          throw new FS.ErrnoError(err);
        }
        if (!parent.node_ops.unlink) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        if (FS.isMountpoint(node)) {
          throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
        }
        try {
          if (FS.trackingDelegate['willDeletePath']) {
            FS.trackingDelegate['willDeletePath'](path);
          }
        } catch(e) {
          console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: " + e.message);
        }
        parent.node_ops.unlink(parent, name);
        FS.destroyNode(node);
        try {
          if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);
        } catch(e) {
          console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: " + e.message);
        }
      },readlink:function (path) {
        var lookup = FS.lookupPath(path);
        var link = lookup.node;
        if (!link) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        if (!link.node_ops.readlink) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        return PATH.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));
      },stat:function (path, dontFollow) {
        var lookup = FS.lookupPath(path, { follow: !dontFollow });
        var node = lookup.node;
        if (!node) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        if (!node.node_ops.getattr) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        return node.node_ops.getattr(node);
      },lstat:function (path) {
        return FS.stat(path, true);
      },chmod:function (path, mode, dontFollow) {
        var node;
        if (typeof path === 'string') {
          var lookup = FS.lookupPath(path, { follow: !dontFollow });
          node = lookup.node;
        } else {
          node = path;
        }
        if (!node.node_ops.setattr) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        node.node_ops.setattr(node, {
          mode: (mode & 4095) | (node.mode & ~4095),
          timestamp: Date.now()
        });
      },lchmod:function (path, mode) {
        FS.chmod(path, mode, true);
      },fchmod:function (fd, mode) {
        var stream = FS.getStream(fd);
        if (!stream) {
          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        }
        FS.chmod(stream.node, mode);
      },chown:function (path, uid, gid, dontFollow) {
        var node;
        if (typeof path === 'string') {
          var lookup = FS.lookupPath(path, { follow: !dontFollow });
          node = lookup.node;
        } else {
          node = path;
        }
        if (!node.node_ops.setattr) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        node.node_ops.setattr(node, {
          timestamp: Date.now()
          // we ignore the uid / gid for now
        });
      },lchown:function (path, uid, gid) {
        FS.chown(path, uid, gid, true);
      },fchown:function (fd, uid, gid) {
        var stream = FS.getStream(fd);
        if (!stream) {
          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        }
        FS.chown(stream.node, uid, gid);
      },truncate:function (path, len) {
        if (len < 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        var node;
        if (typeof path === 'string') {
          var lookup = FS.lookupPath(path, { follow: true });
          node = lookup.node;
        } else {
          node = path;
        }
        if (!node.node_ops.setattr) {
          throw new FS.ErrnoError(ERRNO_CODES.EPERM);
        }
        if (FS.isDir(node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
        }
        if (!FS.isFile(node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        var err = FS.nodePermissions(node, 'w');
        if (err) {
          throw new FS.ErrnoError(err);
        }
        node.node_ops.setattr(node, {
          size: len,
          timestamp: Date.now()
        });
      },ftruncate:function (fd, len) {
        var stream = FS.getStream(fd);
        if (!stream) {
          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        }
        if ((stream.flags & 2097155) === 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        FS.truncate(stream.node, len);
      },utime:function (path, atime, mtime) {
        var lookup = FS.lookupPath(path, { follow: true });
        var node = lookup.node;
        node.node_ops.setattr(node, {
          timestamp: Math.max(atime, mtime)
        });
      },open:function (path, flags, mode, fd_start, fd_end) {
        if (path === "") {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
        mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
        if ((flags & 64)) {
          mode = (mode & 4095) | 32768;
        } else {
          mode = 0;
        }
        var node;
        if (typeof path === 'object') {
          node = path;
        } else {
          path = PATH.normalize(path);
          try {
            var lookup = FS.lookupPath(path, {
              follow: !(flags & 131072)
            });
            node = lookup.node;
          } catch (e) {
            // ignore
          }
        }
        // perhaps we need to create the node
        var created = false;
        if ((flags & 64)) {
          if (node) {
            // if O_CREAT and O_EXCL are set, error out if the node already exists
            if ((flags & 128)) {
              throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
            }
          } else {
            // node doesn't exist, try to create it
            node = FS.mknod(path, mode, 0);
            created = true;
          }
        }
        if (!node) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        // can't truncate a device
        if (FS.isChrdev(node.mode)) {
          flags &= ~512;
        }
        // if asked only for a directory, then this must be one
        if ((flags & 65536) && !FS.isDir(node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
        }
        // check permissions, if this is not a file we just created now (it is ok to
        // create and write to a file with read-only permissions; it is read-only
        // for later use)
        if (!created) {
          var err = FS.mayOpen(node, flags);
          if (err) {
            throw new FS.ErrnoError(err);
          }
        }
        // do truncation if necessary
        if ((flags & 512)) {
          FS.truncate(node, 0);
        }
        // we've already handled these, don't pass down to the underlying vfs
        flags &= ~(128 | 512);

        // register the stream with the filesystem
        var stream = FS.createStream({
          node: node,
          path: FS.getPath(node),  // we want the absolute path to the node
          flags: flags,
          seekable: true,
          position: 0,
          stream_ops: node.stream_ops,
          // used by the file family libc calls (fopen, fwrite, ferror, etc.)
          ungotten: [],
          error: false
        }, fd_start, fd_end);
        // call the new stream's open function
        if (stream.stream_ops.open) {
          stream.stream_ops.open(stream);
        }
        if (Module['logReadFiles'] && !(flags & 1)) {
          if (!FS.readFiles) FS.readFiles = {};
          if (!(path in FS.readFiles)) {
            FS.readFiles[path] = 1;
            Module['printErr']('read file: ' + path);
          }
        }
        try {
          if (FS.trackingDelegate['onOpenFile']) {
            var trackingFlags = 0;
            if ((flags & 2097155) !== 1) {
              trackingFlags |= FS.tracking.openFlags.READ;
            }
            if ((flags & 2097155) !== 0) {
              trackingFlags |= FS.tracking.openFlags.WRITE;
            }
            FS.trackingDelegate['onOpenFile'](path, trackingFlags);
          }
        } catch(e) {
          console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: " + e.message);
        }
        return stream;
      },close:function (stream) {
        if (stream.getdents) stream.getdents = null; // free readdir state
        try {
          if (stream.stream_ops.close) {
            stream.stream_ops.close(stream);
          }
        } catch (e) {
          throw e;
        } finally {
          FS.closeStream(stream.fd);
        }
      },llseek:function (stream, offset, whence) {
        if (!stream.seekable || !stream.stream_ops.llseek) {
          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        }
        stream.position = stream.stream_ops.llseek(stream, offset, whence);
        stream.ungotten = [];
        return stream.position;
      },read:function (stream, buffer, offset, length, position) {
        if (length < 0 || position < 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        if ((stream.flags & 2097155) === 1) {
          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        }
        if (FS.isDir(stream.node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
        }
        if (!stream.stream_ops.read) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        var seeking = true;
        if (typeof position === 'undefined') {
          position = stream.position;
          seeking = false;
        } else if (!stream.seekable) {
          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        }
        var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
        if (!seeking) stream.position += bytesRead;
        return bytesRead;
      },write:function (stream, buffer, offset, length, position, canOwn) {
        if (length < 0 || position < 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        if ((stream.flags & 2097155) === 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        }
        if (FS.isDir(stream.node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
        }
        if (!stream.stream_ops.write) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        if (stream.flags & 1024) {
          // seek to the end before writing in append mode
          FS.llseek(stream, 0, 2);
        }
        var seeking = true;
        if (typeof position === 'undefined') {
          position = stream.position;
          seeking = false;
        } else if (!stream.seekable) {
          throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
        }
        var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
        if (!seeking) stream.position += bytesWritten;
        try {
          if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path);
        } catch(e) {
          console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: " + e.message);
        }
        return bytesWritten;
      },allocate:function (stream, offset, length) {
        if (offset < 0 || length <= 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
        }
        if ((stream.flags & 2097155) === 0) {
          throw new FS.ErrnoError(ERRNO_CODES.EBADF);
        }
        if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
        }
        if (!stream.stream_ops.allocate) {
          throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
        }
        stream.stream_ops.allocate(stream, offset, length);
      },mmap:function (stream, buffer, offset, length, position, prot, flags) {
        // TODO if PROT is PROT_WRITE, make sure we have write access
        if ((stream.flags & 2097155) === 1) {
          throw new FS.ErrnoError(ERRNO_CODES.EACCES);
        }
        if (!stream.stream_ops.mmap) {
          throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
        }
        return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
      },msync:function (stream, buffer, offset, length, mmapFlags) {
        if (!stream || !stream.stream_ops.msync) {
          return 0;
        }
        return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);
      },munmap:function (stream) {
        return 0;
      },ioctl:function (stream, cmd, arg) {
        if (!stream.stream_ops.ioctl) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
        }
        return stream.stream_ops.ioctl(stream, cmd, arg);
      },readFile:function (path, opts) {
        opts = opts || {};
        opts.flags = opts.flags || 'r';
        opts.encoding = opts.encoding || 'binary';
        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
          throw new Error('Invalid encoding type "' + opts.encoding + '"');
        }
        var ret;
        var stream = FS.open(path, opts.flags);
        var stat = FS.stat(path);
        var length = stat.size;
        var buf = new Uint8Array(length);
        FS.read(stream, buf, 0, length, 0);
        if (opts.encoding === 'utf8') {
          ret = UTF8ArrayToString(buf, 0);
        } else if (opts.encoding === 'binary') {
          ret = buf;
        }
        FS.close(stream);
        return ret;
      },writeFile:function (path, data, opts) {
        opts = opts || {};
        opts.flags = opts.flags || 'w';
        opts.encoding = opts.encoding || 'utf8';
        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
          throw new Error('Invalid encoding type "' + opts.encoding + '"');
        }
        var stream = FS.open(path, opts.flags, opts.mode);
        if (opts.encoding === 'utf8') {
          var buf = new Uint8Array(lengthBytesUTF8(data)+1);
          var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
          FS.write(stream, buf, 0, actualNumBytes, 0, opts.canOwn);
        } else if (opts.encoding === 'binary') {
          FS.write(stream, data, 0, data.length, 0, opts.canOwn);
        }
        FS.close(stream);
      },cwd:function () {
        return FS.currentPath;
      },chdir:function (path) {
        var lookup = FS.lookupPath(path, { follow: true });
        if (lookup.node === null) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
        }
        if (!FS.isDir(lookup.node.mode)) {
          throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
        }
        var err = FS.nodePermissions(lookup.node, 'x');
        if (err) {
          throw new FS.ErrnoError(err);
        }
        FS.currentPath = lookup.path;
      },createDefaultDirectories:function () {
        FS.mkdir('/tmp');
        FS.mkdir('/home');
        FS.mkdir('/home/electron');
        FS.mkdir('/macintosh.js')
      },createDefaultDevices:function () {
        // create /dev
        FS.mkdir('/dev');
        // setup /dev/null
        FS.registerDevice(FS.makedev(1, 3), {
          read: function() { return 0; },
          write: function(stream, buffer, offset, length, pos) { return length; }
        });
        FS.mkdev('/dev/null', FS.makedev(1, 3));
        // setup /dev/tty and /dev/tty1
        // stderr needs to print output using Module['printErr']
        // so we register a second tty just for it.
        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
        FS.mkdev('/dev/tty', FS.makedev(5, 0));
        FS.mkdev('/dev/tty1', FS.makedev(6, 0));
        // setup /dev/[u]random
        var random_device;
        if (typeof crypto !== 'undefined') {
          // for modern web browsers
          var randomBuffer = new Uint8Array(1);
          random_device = function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; };
        } else if (ENVIRONMENT_IS_NODE) {
          // for nodejs
          random_device = function() { return require('crypto').randomBytes(1)[0]; };
        } else {
          // default for ES5 platforms
          random_device = function() { return (Math.random()*256)|0; };
        }
        FS.createDevice('/dev', 'random', random_device);
        FS.createDevice('/dev', 'urandom', random_device);
        // we're not going to emulate the actual shm device,
        // just create the tmp dirs that reside in it commonly
        FS.mkdir('/dev/shm');
        FS.mkdir('/dev/shm/tmp');
      },createSpecialDirectories:function () {
        // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the name of the stream for fd 6 (see test_unistd_ttyname)
        FS.mkdir('/proc');
        FS.mkdir('/proc/self');
        FS.mkdir('/proc/self/fd');
        FS.mount({
          mount: function() {
            var node = FS.createNode('/proc/self', 'fd', 16384 | 511 /* 0777 */, 73);
            node.node_ops = {
              lookup: function(parent, name) {
                var fd = +name;
                var stream = FS.getStream(fd);
                if (!stream) throw new FS.ErrnoError(ERRNO_CODES.EBADF);
                var ret = {
                  parent: null,
                  mount: { mountpoint: 'fake' },
                  node_ops: { readlink: function() { return stream.path } }
                };
                ret.parent = ret; // make it look like a simple root node
                return ret;
              }
            };
            return node;
          }
        }, {}, '/proc/self/fd');
      },createStandardStreams:function () {
        // TODO deprecate the old functionality of a single
        // input / output callback and that utilizes FS.createDevice
        // and instead require a unique set of stream ops

        // by default, we symlink the standard streams to the
        // default tty devices. however, if the standard streams
        // have been overwritten we create a unique device for
        // them instead.
        if (Module['stdin']) {
          FS.createDevice('/dev', 'stdin', Module['stdin']);
        } else {
          FS.symlink('/dev/tty', '/dev/stdin');
        }
        if (Module['stdout']) {
          FS.createDevice('/dev', 'stdout', null, Module['stdout']);
        } else {
          FS.symlink('/dev/tty', '/dev/stdout');
        }
        if (Module['stderr']) {
          FS.createDevice('/dev', 'stderr', null, Module['stderr']);
        } else {
          FS.symlink('/dev/tty1', '/dev/stderr');
        }

        // open default streams for the stdin, stdout and stderr devices
        var stdin = FS.open('/dev/stdin', 'r');
        assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');

        var stdout = FS.open('/dev/stdout', 'w');
        assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');

        var stderr = FS.open('/dev/stderr', 'w');
        assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
      },ensureErrnoError:function () {
        if (FS.ErrnoError) return;
        FS.ErrnoError = function ErrnoError(errno, node) {
          //Module.printErr(stackTrace()); // useful for debugging
          this.node = node;
          this.setErrno = function(errno) {
            this.errno = errno;
            for (var key in ERRNO_CODES) {
              if (ERRNO_CODES[key] === errno) {
                this.code = key;
                break;
              }
            }
          };
          this.setErrno(errno);
          this.message = ERRNO_MESSAGES[errno];
        };
        FS.ErrnoError.prototype = new Error();
        FS.ErrnoError.prototype.constructor = FS.ErrnoError;
        // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
        [ERRNO_CODES.ENOENT].forEach(function(code) {
          FS.genericErrors[code] = new FS.ErrnoError(code);
          FS.genericErrors[code].stack = '<generic error, no stack>';
        });
      },staticInit:function () {
        FS.ensureErrnoError();

        FS.nameTable = new Array(4096);

        FS.mount(MEMFS, {}, '/');

        FS.createDefaultDirectories();
        FS.createDefaultDevices();
        FS.createSpecialDirectories();

        // Begin surgery
        //if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); var NODEJS_PATH = require("path"); NODEFS.staticInit(); };
        //FS.mount(NODEFS, { root: '.' }, '/home/electron');
        // onmessage(() => {
        //   console.log('Message received from main script');
        // });

        // End surgery

        FS.filesystems = {
          'MEMFS': MEMFS,
          'IDBFS': IDBFS,
          'NODEFS': NODEFS,
          'WORKERFS': WORKERFS,
        };
      },init:function (input, output, error) {
        assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
        FS.init.initialized = true;

        FS.ensureErrnoError();

        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
        Module['stdin'] = input || Module['stdin'];
        Module['stdout'] = output || Module['stdout'];
        Module['stderr'] = error || Module['stderr'];

        FS.createStandardStreams();
      },quit:function () {
        FS.init.initialized = false;
        // force-flush all streams, so we get musl std streams printed out
        var fflush = Module['_fflush'];
        if (fflush) fflush(0);
        // close all of our streams
        for (var i = 0; i < FS.streams.length; i++) {
          var stream = FS.streams[i];
          if (!stream) {
            continue;
          }
          FS.close(stream);
        }
      },getMode:function (canRead, canWrite) {
        var mode = 0;
        if (canRead) mode |= 292 | 73;
        if (canWrite) mode |= 146;
        return mode;
      },joinPath:function (parts, forceRelative) {
        var path = PATH.join.apply(null, parts);
        if (forceRelative && path[0] == '/') path = path.substr(1);
        return path;
      },absolutePath:function (relative, base) {
        return PATH.resolve(base, relative);
      },standardizePath:function (path) {
        return PATH.normalize(path);
      },findObject:function (path, dontResolveLastLink) {
        var ret = FS.analyzePath(path, dontResolveLastLink);
        if (ret.exists) {
          return ret.object;
        } else {
          ___setErrNo(ret.error);
          return null;
        }
      },analyzePath:function (path, dontResolveLastLink) {
        // operate from within the context of the symlink's target
        try {
          var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
          path = lookup.path;
        } catch (e) {
        }
        var ret = {
          isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
          parentExists: false, parentPath: null, parentObject: null
        };
        try {
          var lookup = FS.lookupPath(path, { parent: true });
          ret.parentExists = true;
          ret.parentPath = lookup.path;
          ret.parentObject = lookup.node;
          ret.name = PATH.basename(path);
          lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
          ret.exists = true;
          ret.path = lookup.path;
          ret.object = lookup.node;
          ret.name = lookup.node.name;
          ret.isRoot = lookup.path === '/';
        } catch (e) {
          ret.error = e.errno;
        };
        return ret;
      },createFolder:function (parent, name, canRead, canWrite) {
        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
        var mode = FS.getMode(canRead, canWrite);
        return FS.mkdir(path, mode);
      },createPath:function (parent, path, canRead, canWrite) {
        parent = typeof parent === 'string' ? parent : FS.getPath(parent);
        var parts = path.split('/').reverse();
        while (parts.length) {
          var part = parts.pop();
          if (!part) continue;
          var current = PATH.join2(parent, part);
          try {
            FS.mkdir(current);
          } catch (e) {
            // ignore EEXIST
          }
          parent = current;
        }
        return current;
      },createFile:function (parent, name, properties, canRead, canWrite) {
        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
        var mode = FS.getMode(canRead, canWrite);
        return FS.create(path, mode);
      },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
        var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
        var mode = FS.getMode(canRead, canWrite);
        var node = FS.create(path, mode);
        if (data) {
          if (typeof data === 'string') {
            var arr = new Array(data.length);
            for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
            data = arr;
          }
          // make sure we can write to the file
          FS.chmod(node, mode | 146);
          var stream = FS.open(node, 'w');
          FS.write(stream, data, 0, data.length, 0, canOwn);
          FS.close(stream);
          FS.chmod(node, mode);
        }
        return node;
      },createDevice:function (parent, name, input, output) {
        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
        var mode = FS.getMode(!!input, !!output);
        if (!FS.createDevice.major) FS.createDevice.major = 64;
        var dev = FS.makedev(FS.createDevice.major++, 0);
        // Create a fake device that a set of stream ops to emulate
        // the old behavior.
        FS.registerDevice(dev, {
          open: function(stream) {
            stream.seekable = false;
          },
          close: function(stream) {
            // flush any pending line data
            if (output && output.buffer && output.buffer.length) {
              output(10);
            }
          },
          read: function(stream, buffer, offset, length, pos /* ignored */) {
            var bytesRead = 0;
            for (var i = 0; i < length; i++) {
              var result;
              try {
                result = input();
              } catch (e) {
                throw new FS.ErrnoError(ERRNO_CODES.EIO);
              }
              if (result === undefined && bytesRead === 0) {
                throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
              }
              if (result === null || result === undefined) break;
              bytesRead++;
              buffer[offset+i] = result;
            }
            if (bytesRead) {
              stream.node.timestamp = Date.now();
            }
            return bytesRead;
          },
          write: function(stream, buffer, offset, length, pos) {
            for (var i = 0; i < length; i++) {
              try {
                output(buffer[offset+i]);
              } catch (e) {
                throw new FS.ErrnoError(ERRNO_CODES.EIO);
              }
            }
            if (length) {
              stream.node.timestamp = Date.now();
            }
            return i;
          }
        });
        return FS.mkdev(path, mode, dev);
      },createLink:function (parent, name, target, canRead, canWrite) {
        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
        return FS.symlink(target, path);
      },forceLoadFile:function (obj) {
        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
        var success = true;
        if (typeof XMLHttpRequest !== 'undefined') {
          throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
        } else if (Module['read']) {
          // Command-line.
          try {
            // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
            //          read() will try to parse UTF8.
            obj.contents = intArrayFromString(Module['read'](obj.url), true);
            obj.usedBytes = obj.contents.length;
          } catch (e) {
            success = false;
          }
        } else {
          throw new Error('Cannot load without read() or XMLHttpRequest.');
        }
        if (!success) ___setErrNo(ERRNO_CODES.EIO);
        return success;
      },createLazyFile:function (parent, name, url, canRead, canWrite) {
        // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
        function LazyUint8Array() {
          this.lengthKnown = false;
          this.chunks = []; // Loaded chunks. Index is the chunk number
        }
        LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
          if (idx > this.length-1 || idx < 0) {
            return undefined;
          }
          var chunkOffset = idx % this.chunkSize;
          var chunkNum = (idx / this.chunkSize)|0;
          return this.getter(chunkNum)[chunkOffset];
        }
        LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
          this.getter = getter;
        }
        LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
          // Find length
          var xhr = new XMLHttpRequest();
          xhr.open('HEAD', url, false);
          xhr.send(null);
          if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
          var datalength = Number(xhr.getResponseHeader("Content-length"));
          var header;
          var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
          var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip";

          var chunkSize = 1024*1024; // Chunk size in bytes

          if (!hasByteServing) chunkSize = datalength;

          // Function to get a range from the remote URL.
          var doXHR = (function(from, to) {
            if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
            if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");

            
Download .txt
gitextract_d6lh78vc/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── CREDITS.md
├── README.md
├── assets/
│   ├── entitlements.plist
│   └── icon.icns
├── forge.config.js
├── package.json
├── src/
│   ├── basilisk/
│   │   ├── BasiliskII-worker-boot.js
│   │   ├── BasiliskII.js
│   │   ├── BasiliskII.js.mem
│   │   ├── LICENSE.txt
│   │   ├── prefs_template
│   │   └── rom
│   ├── main/
│   │   ├── appfolder.js
│   │   ├── devmode.js
│   │   ├── index.js
│   │   ├── ipc.js
│   │   ├── squirrel.js
│   │   ├── update.js
│   │   └── windows.js
│   └── renderer/
│       ├── atomics.js
│       ├── audio.js
│       ├── controls.js
│       ├── credits.html
│       ├── credits.js
│       ├── dialogs.js
│       ├── emulator.js
│       ├── help.html
│       ├── help.js
│       ├── index.html
│       ├── input.js
│       ├── ipc.js
│       ├── iso.js
│       ├── powershell.js
│       ├── screen.js
│       ├── style/
│       │   ├── base.css
│       │   ├── credits.css
│       │   ├── help.css
│       │   ├── index.css
│       │   └── spinner.css
│       ├── video.js
│       └── worker.js
└── tools/
    ├── add-macos-cert.sh
    ├── check-links.js
    ├── download-disk.ps1
    └── download-disk.sh
Download .txt
Showing preview only (264K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3213 symbols across 24 files)

FILE: src/basilisk/BasiliskII-worker-boot.js
  function getUserDataDiskPath (line 11) | function getUserDataDiskPath() {
  function isFile (line 17) | function isFile(v = "") {
  function isHiddenFile (line 21) | function isHiddenFile(filename = '') {
  function isCDImage (line 25) | function isCDImage(filename = '') {
  function isDiskImage (line 29) | function isDiskImage(filename = '') {
  function cleanupCopyPath (line 33) | function cleanupCopyPath() {
  function getUserDataDiskImage (line 45) | function getUserDataDiskImage() {
  function preloadFilesAtPath (line 72) | function preloadFilesAtPath(module, initalSourcePath) {
  function createPreloadedFile (line 133) | function createPreloadedFile(module, options) {
  function addAutoloader (line 142) | function addAutoloader(module) {
  function addCustomAsyncInit (line 166) | function addCustomAsyncInit(module) {
  function writeSafely (line 179) | function writeSafely(filePath, fileData) {
  function writePrefs (line 199) | function writePrefs(userImages = []) {
  function getUserImages (line 228) | function getUserImages() {
  function getAutoLoadFiles (line 261) | function getAutoLoadFiles(userImages = []) {
  function saveFilesInPath (line 281) | async function saveFilesInPath(folderPath) {
  function startEmulator (line 380) | function startEmulator(parentConfig) {

FILE: src/basilisk/BasiliskII.js
  function globalEval (line 214) | function globalEval(x) {
  function assert (line 415) | function assert(condition, text) {
  function getCFunc (line 424) | function getCFunc(ident) {
  function parseJSFunc (line 496) | function parseJSFunc(jsfunc) {
  function ensureJSsource (line 504) | function ensureJSsource() {
  function setValue (line 568) | function setValue(ptr, value, type, noSafe) {
  function getValue (line 585) | function getValue(ptr, type, noSafe) {
  function allocate (line 627) | function allocate(slab, types, allocator, ptr) {
  function getMemory (line 700) | function getMemory(size) {
  function Pointer_stringify (line 708) | function Pointer_stringify(ptr, length) {
  function AsciiToString (line 744) | function AsciiToString(ptr) {
  function stringToAscii (line 757) | function stringToAscii(str, outPtr) {
  function UTF8ArrayToString (line 766) | function UTF8ArrayToString(u8Array, idx) {
  function UTF8ToString (line 816) | function UTF8ToString(ptr) {
  function stringToUTF8Array (line 833) | function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {
  function stringToUTF8 (line 891) | function stringToUTF8(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF8 (line 898) | function lengthBytesUTF8(str) {
  function UTF16ToString (line 927) | function UTF16ToString(ptr) {
  function stringToUTF16 (line 963) | function stringToUTF16(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF16 (line 986) | function lengthBytesUTF16(str) {
  function UTF32ToString (line 991) | function UTF32ToString(ptr) {
  function stringToUTF32 (line 1023) | function stringToUTF32(str, outPtr, maxBytesToWrite) {
  function lengthBytesUTF32 (line 1051) | function lengthBytesUTF32(str) {
  function demangle (line 1065) | function demangle(func) {
  function demangleAll (line 1094) | function demangleAll(text) {
  function jsStackTrace (line 1104) | function jsStackTrace() {
  function stackTrace (line 1121) | function stackTrace() {
  function alignUp (line 1135) | function alignUp(x, multiple) {
  function updateGlobalBuffer (line 1162) | function updateGlobalBuffer(buf) {
  function updateGlobalBufferViews (line 1166) | function updateGlobalBufferViews() {
  function abortOnCannotGrowMemory (line 1186) | function abortOnCannotGrowMemory() {
  function enlargeMemory (line 1191) | function enlargeMemory() {
  function getTotalMemory (line 1216) | function getTotalMemory() {
  function callRuntimeCallbacks (line 1236) | function callRuntimeCallbacks(callbacks) {
  function preRun (line 1266) | function preRun() {
  function ensureInitRuntime (line 1277) | function ensureInitRuntime() {
  function preMain (line 1283) | function preMain() {
  function exitRuntime (line 1287) | function exitRuntime() {
  function postRun (line 1292) | function postRun() {
  function addOnPreRun (line 1303) | function addOnPreRun(cb) {
  function addOnInit (line 1308) | function addOnInit(cb) {
  function addOnPreMain (line 1313) | function addOnPreMain(cb) {
  function addOnExit (line 1318) | function addOnExit(cb) {
  function addOnPostRun (line 1323) | function addOnPostRun(cb) {
  function intArrayFromString (line 1331) | function intArrayFromString(stringy, dontAddNull, length) {
  function intArrayToString (line 1340) | function intArrayToString(array) {
  function writeStringToMemory (line 1358) | function writeStringToMemory(string, buffer, dontAddNull) {
  function writeArrayToMemory (line 1374) | function writeArrayToMemory(array, buffer) {
  function writeAsciiToMemory (line 1379) | function writeAsciiToMemory(str, buffer, dontAddNull) {
  function unSign (line 1388) | function unSign(value, bits, ignore) {
  function reSign (line 1395) | function reSign(value, bits, ignore) {
  function getUniqueRunDependency (line 1466) | function getUniqueRunDependency(id) {
  function addRunDependency (line 1470) | function addRunDependency(id) {
  function removeRunDependency (line 1478) | function removeRunDependency(id) {
  function _emscripten_asm_const_iiiii (line 1525) | function _emscripten_asm_const_iiiii(code, a0, a1, a2, a3) {
  function _emscripten_asm_const_i (line 1529) | function _emscripten_asm_const_i(code) {
  function _emscripten_asm_const_ii (line 1533) | function _emscripten_asm_const_ii(code, a0) {
  function _emscripten_asm_const_iiii (line 1537) | function _emscripten_asm_const_iiii(code, a0, a1, a2) {
  function _emscripten_asm_const_iiiiii (line 1541) | function _emscripten_asm_const_iiiiii(code, a0, a1, a2, a3, a4) {
  function copyTempFloat (line 1562) | function copyTempFloat(ptr) { // functions, because inlining this code i...
  function copyTempDouble (line 1574) | function copyTempDouble(ptr) {
  function _atexit (line 1598) | function _atexit(func, arg) {
  function ___cxa_atexit (line 1600) | function ___cxa_atexit() {
  function _tzset (line 1609) | function _tzset() {
  function _sem_wait (line 1642) | function _sem_wait() {}
  function _sem_post (line 1644) | function _sem_post() {}
  function ___setErrNo (line 1653) | function ___setErrNo(value) {
  function trim (line 1746) | function trim(arr) {
  function isRealDir (line 2327) | function isRealDir(p) {
  function toAbsolute (line 2330) | function toAbsolute(root) {
  function done (line 2490) | function done(err) {
  function ensureParent (line 2774) | function ensureParent(path) {
  function base (line 2794) | function base(path) {
  function doCallback (line 3256) | function doCallback(err) {
  function done (line 3262) | function done(err) {
  function LazyUint8Array (line 4303) | function LazyUint8Array() {
  function processData (line 4465) | function processData(byteArray) {
  function finish (line 4518) | function finish() {
  function finish (line 4549) | function finish() {
  function ___syscall195 (line 4716) | function ___syscall195(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall194 (line 4727) | function ___syscall194(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall197 (line 4739) | function ___syscall197(which, varargs) {SYSCALLS.varargs = varargs;
  function onContextCreationError (line 4798) | function onContextCreationError(event) {
  function shouldEnableAutomatically (line 4905) | function shouldEnableAutomatically(extension) {
  function _emscripten_set_main_loop_timing (line 4973) | function _emscripten_set_main_loop_timing(mode, value) {
  function _emscripten_get_now (line 5021) | function _emscripten_get_now() { abort() }
  function _emscripten_set_main_loop (line 5023) | function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop, arg,...
  function finish (line 5245) | function finish(audio) {
  function fail (line 5251) | function fail() {
  function encode64 (line 5269) | function encode64(data) {
  function pointerLockChange (line 5309) | function pointerLockChange() {
  function fullscreenChange (line 5393) | function fullscreenChange() {
  function ___buildEnvironment (line 5748) | function ___buildEnvironment(env) {
  function _getenv (line 5799) | function _getenv(name) {
  function _putenv (line 5811) | function _putenv(string) {
  function _SDL_RWFromConstMem (line 5836) | function _SDL_RWFromConstMem(mem, size) {
  function _TTF_FontHeight (line 5840) | function _TTF_FontHeight(font) {
  function _TTF_SizeText (line 5843) | function _TTF_SizeText(font, text, w, h) {
  function _TTF_RenderText_Solid (line 5852) | function _TTF_RenderText_Solid(font, text, color) {
  function _Mix_HaltMusic (line 5872) | function _Mix_HaltMusic() {
  function _Mix_PlayMusic (line 5884) | function _Mix_PlayMusic(id, loops) {
  function _Mix_FreeChunk (line 5909) | function _Mix_FreeChunk(id) {
  function _Mix_LoadWAV_RW (line 5911) | function _Mix_LoadWAV_RW(rwopsID, freesrc) {
  function _Mix_PlayChannel (line 5993) | function _Mix_PlayChannel(channel, id, loops) {
  function _SDL_PauseAudio (line 6043) | function _SDL_PauseAudio(pauseOn) {
  function _SDL_CloseAudio (line 6059) | function _SDL_CloseAudio() {
  function _SDL_LockSurface (line 6066) | function _SDL_LockSurface(surf) {
  function _SDL_FreeRW (line 6133) | function _SDL_FreeRW(rwopsID) {
  function _IMG_Load_RW (line 6138) | function _IMG_Load_RW(rwopsID, freeSrc) {
  function _SDL_RWFromFile (line 6269) | function _SDL_RWFromFile(_name, mode) {
  function _IMG_Load (line 6274) | function _IMG_Load(filename){
  function _SDL_UpperBlitScaled (line 6278) | function _SDL_UpperBlitScaled(src, srcrect, dst, dstrect) {
  function _SDL_UpperBlit (line 6280) | function _SDL_UpperBlit(src, srcrect, dst, dstrect) {
  function _SDL_GetTicks (line 6282) | function _SDL_GetTicks() {
  function unpressAllPressedKeys (line 6504) | function unpressAllPressedKeys() {
  function _SDL_SetVideoMode (line 7207) | function _SDL_SetVideoMode(width, height, depth, flags) {
  function _usleep (line 7257) | function _usleep(useconds) {
  function _SDL_ShowCursor (line 7277) | function _SDL_ShowCursor(toggle) {
  function _SDL_UnlockSurface (line 7300) | function _SDL_UnlockSurface(surf) {
  function _SDL_GetVideoInfo (line 7405) | function _SDL_GetVideoInfo() {
  function _sem_init (line 7416) | function _sem_init() {}
  function ___syscall54 (line 7418) | function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;
  function _localtime_r (line 7463) | function _localtime_r(time, tmPtr) {
  function _localtime (line 7489) | function _localtime(time) {
  function ___syscall38 (line 7495) | function ___syscall38(which, varargs) {SYSCALLS.varargs = varargs;
  function _llvm_exp2_f32 (line 7508) | function _llvm_exp2_f32(x) {
  function _llvm_exp2_f64 (line 7510) | function _llvm_exp2_f64() {
  function ___syscall33 (line 7514) | function ___syscall33(which, varargs) {SYSCALLS.varargs = varargs;
  function _gettimeofday (line 7526) | function _gettimeofday(ptr) {
  function _SDL_PumpEvents (line 7533) | function _SDL_PumpEvents(){
  function _SDL_WM_SetCaption (line 7539) | function _SDL_WM_SetCaption(title, icon) {
  function _emscripten_memcpy_big (line 7547) | function _emscripten_memcpy_big(dest, src, num) {
  function _SDL_mutexV (line 7552) | function _SDL_mutexV() { return 0 }
  function _SDL_mutexP (line 7554) | function _SDL_mutexP() { return 0 }
  function ___syscall122 (line 7564) | function ___syscall122(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall40 (line 7588) | function ___syscall40(which, varargs) {SYSCALLS.varargs = varargs;
  function _SDL_QuitSubSystem (line 7600) | function _SDL_QuitSubSystem(flags) {
  function ___assert_fail (line 7604) | function ___assert_fail(condition, filename, line, func) {
  function _SDL_MapRGB (line 7609) | function _SDL_MapRGB(fmt, r, g, b) {
  function ___syscall39 (line 7617) | function ___syscall39(which, varargs) {SYSCALLS.varargs = varargs;
  function _abort (line 7630) | function _abort() {
  function ___lock (line 7636) | function ___lock() {}
  function ___unlock (line 7638) | function ___unlock() {}
  function _SDL_VideoModeOK (line 7640) | function _SDL_VideoModeOK(width, height, depth, flags) {
  function __exit (line 7649) | function __exit(status) {
  function _exit (line 7653) | function _exit(status) {
  function _SDL_UpdateRect (line 7657) | function _SDL_UpdateRect(surf, x, y, w, h) {
  function ___cxa_pure_virtual (line 7661) | function ___cxa_pure_virtual() {
  function _SDL_FreeSurface (line 7666) | function _SDL_FreeSurface(surf) {
  function _sem_destroy (line 7670) | function _sem_destroy() {}
  function _SDL_VideoDriverName (line 7672) | function _SDL_VideoDriverName(buf, max_size) {
  function ___syscall10 (line 7697) | function ___syscall10(which, varargs) {SYSCALLS.varargs = varargs;
  function __inet_pton4_raw (line 7711) | function __inet_pton4_raw(str) {
  function __inet_pton6_raw (line 7721) | function __inet_pton6_raw(str) {
  function _gethostbyname (line 7808) | function _gethostbyname(name) {
  function _SDL_WM_GrabInput (line 7830) | function _SDL_WM_GrabInput() {}
  function ___syscall3 (line 7832) | function ___syscall3(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall5 (line 7843) | function ___syscall5(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall4 (line 7855) | function ___syscall4(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall6 (line 7866) | function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;
  function handleMessage (line 8109) | function handleMessage(data) {
  function __inet_ntop4_raw (line 8479) | function __inet_ntop4_raw(addr) {
  function __inet_ntop6_raw (line 8483) | function __inet_ntop6_raw(ints) {
  function __read_sockaddr (line 8578) | function __read_sockaddr(sa, salen) {
  function __write_sockaddr (line 8611) | function __write_sockaddr(sa, family, addr, port) {
  function ___syscall102 (line 8635) | function ___syscall102(which, varargs) {SYSCALLS.varargs = varargs;
  function _time (line 8821) | function _time(ptr) {
  function ___syscall142 (line 8829) | function ___syscall142(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall140 (line 8917) | function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall145 (line 8933) | function ___syscall145(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall146 (line 8944) | function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall221 (line 8955) | function ___syscall221(which, varargs) {SYSCALLS.varargs = varargs;
  function ___syscall220 (line 9009) | function ___syscall220(which, varargs) {SYSCALLS.varargs = varargs;
  function invoke_iiii (line 9091) | function invoke_iiii(index,a1,a2,a3) {
  function invoke_viiiii (line 9100) | function invoke_viiiii(index,a1,a2,a3,a4,a5) {
  function invoke_vi (line 9109) | function invoke_vi(index,a1) {
  function invoke_vii (line 9118) | function invoke_vii(index,a1,a2) {
  function invoke_ii (line 9127) | function invoke_ii(index,a1) {
  function invoke_viii (line 9136) | function invoke_viii(index,a1,a2,a3) {
  function invoke_v (line 9145) | function invoke_v(index) {
  function invoke_iiiii (line 9154) | function invoke_iiiii(index,a1,a2,a3,a4) {
  function invoke_viiiiii (line 9163) | function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) {
  function invoke_iii (line 9172) | function invoke_iii(index,a1,a2) {
  function invoke_viiii (line 9181) | function invoke_viiii(index,a1,a2,a3,a4) {
  function __Z8ExtFSHFSjtjjs (line 9357) | function __Z8ExtFSHFSjtjjs($0, $1, $2, $3, $4) {
  function __Z16fpuop_arithmeticjj (line 11942) | function __Z16fpuop_arithmeticjj($0, $1) {
  function __Z8PatchROMv (line 14805) | function __Z8PatchROMv() {
  function _read_table68k (line 16944) | function _read_table68k() {
  function __Z14InstallSlotROMv (line 19130) | function __Z14InstallSlotROMv() {
  function _malloc (line 20521) | function _malloc($0) {
  function __Z12CDROMControljj (line 22007) | function __Z12CDROMControljj($0, $1) {
  function __Z13AudioDispatchjj (line 23007) | function __Z13AudioDispatchjj($0, $1) {
  function __Z6EmulOptP13M68kRegisters (line 23952) | function __Z6EmulOptP13M68kRegisters($0, $1) {
  function _vfscanf (line 24799) | function _vfscanf($0, $1, $2) {
  function __Z12InstallExtFSv (line 25657) | function __Z12InstallExtFSv() {
  function _decfloat (line 26092) | function _decfloat($0, $1, $2, $3, $4, $5) {
  function _fmt_fp (line 26803) | function _fmt_fp($0, $1, $2, $3, $4, $5) {
  function __ZN12monitor_desc13driver_statusEtj (line 27443) | function __ZN12monitor_desc13driver_statusEtj($0, $1, $2) {
  function _printf_core (line 27967) | function _printf_core($0, $1, $2, $3, $4) {
  function __ZN12monitor_desc14driver_controlEtjj (line 28694) | function __ZN12monitor_desc14driver_controlEtjj($0, $1, $2, $3) {
  function __Z9VideoInitb (line 29200) | function __Z9VideoInitb($0) {
  function __ZL21rpc_message_recv_argsP13rpc_message_tPi (line 29757) | function __ZL21rpc_message_recv_argsP13rpc_message_tPi($0, $1) {
  function _free (line 30358) | function _free($0) {
  function __Z12EtherControljj (line 30895) | function __Z12EtherControljj($0, $1) {
  function _dispose_chunk (line 31345) | function _dispose_chunk($0, $1) {
  function __ZL21rpc_message_send_argsP13rpc_message_tPi (line 31839) | function __ZL21rpc_message_send_argsP13rpc_message_tPi($0, $1) {
  function ___intscan (line 32274) | function ___intscan($0, $1, $2, $3, $4) {
  function __ZN8tinyxml211XMLDocument8IdentifyEPcPPNS_7XMLNodeE (line 32685) | function __ZN8tinyxml211XMLDocument8IdentifyEPcPPNS_7XMLNodeE($0, $1, $2) {
  function __Z11CDROMStatusjj (line 33044) | function __Z11CDROMStatusjj($0, $1) {
  function __Z9PrefsInitPKcRiRPPc (line 33428) | function __Z9PrefsInitPKcRiRPPc($0, $1, $2) {
  function _hexfloat (line 33806) | function _hexfloat($0, $1, $2, $3, $4) {
  function __ZL17get_item_and_pathjjRP6FSItemb (line 34177) | function __ZL17get_item_and_pathjjRP6FSItemb($0, $1, $2) {
  function __ZL27video_refresh_window_staticv (line 34481) | function __ZL27video_refresh_window_staticv() {
  function __Z9CheckLoadjsPhj (line 34801) | function __Z9CheckLoadjsPhj($0, $1, $2, $3) {
  function __ZNSt3__213__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5_ (line 35226) | function __ZNSt3__213__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5_($...
  function _main (line 35539) | function _main($0, $1) {
  function __Z9LoadPrefsPKc (line 35883) | function __Z9LoadPrefsPKc($0) {
  function __Z19m68k_do_specialtiesv (line 36142) | function __Z19m68k_do_specialtiesv() {
  function ___udivmoddi4 (line 36510) | function ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) {
  function __Z9Exceptionij (line 36703) | function __Z9Exceptionij($0, $1) {
  function __Z10DiskStatusjj (line 36891) | function __Z10DiskStatusjj($0, $1) {
  function __ZL7fs_openjjjb (line 37202) | function __ZL7fs_openjjjb($0, $1, $2, $3) {
  function _try_realloc_chunk (line 37541) | function _try_realloc_chunk($0, $1) {
  function ___floatscan (line 37813) | function ___floatscan($0, $1, $2) {
  function _do_merges (line 38108) | function _do_merges() {
  function __Z11SonyControljj (line 38331) | function __Z11SonyControljj($0, $1) {
  function _fmod (line 38554) | function _fmod($0, $1) {
  function __ZN8tinyxml27XMLNode9ParseDeepEPcPNS_7StrPairE (line 38761) | function __ZN8tinyxml27XMLNode9ParseDeepEPcPNS_7StrPairE($0, $1, $2) {
  function __Z12ADBInterruptv (line 38978) | function __Z12ADBInterruptv() {
  function __Z11DiskControljj (line 39116) | function __Z11DiskControljj($0, $1) {
  function __Z12VideoRefreshv (line 39305) | function __Z12VideoRefreshv() {
  function __ZN8tinyxml210XMLElement15ParseAttributesEPc (line 39676) | function __ZN8tinyxml210XMLElement15ParseAttributesEPc($0, $1) {
  function __ZN12monitor_descC2ERKNSt3__26vectorI10video_modeNS0_9allocatorIS2_EEEE11video_depthj (line 39882) | function __ZN12monitor_descC2ERKNSt3__26vectorI10video_modeNS0_9allocato...
  function __ZN12monitor_desc11switch_modeENSt3__211__wrap_iterIPK10video_modeEEjj (line 40085) | function __ZN12monitor_desc11switch_modeENSt3__211__wrap_iterIPK10video_...
  function __Z13fpuop_restorej (line 40181) | function __Z13fpuop_restorej($0) {
  function __ZN8tinyxml27StrPair6GetStrEv (line 40436) | function __ZN8tinyxml27StrPair6GetStrEv($0) {
  function __ZL10VModeParmsRK12monitor_desc11video_depth (line 40611) | function __ZL10VModeParmsRK12monitor_desc11video_depth($0, $1) {
  function __ZN8tinyxml211XMLDocumentD2Ev (line 40776) | function __ZN8tinyxml211XMLDocumentD2Ev($0) {
  function __Z12extfs_renamePKcS0_ (line 40963) | function __Z12extfs_renamePKcS0_($0, $1) {
  function __Z19LoadPrefsFromStreamP8_IO_FILE (line 41083) | function __Z19LoadPrefsFromStreamP8_IO_FILE($0) {
  function __Z25disk_sparsebundle_factoryPKcbPP12disk_generic (line 41287) | function __Z25disk_sparsebundle_factoryPKcbPP12disk_generic($0, $1, $2) {
  function __Z11memory_initv (line 41435) | function __Z11memory_initv() {
  function __ZN8tinyxml27XMLUtil15GetCharacterRefEPKcPcPi (line 41613) | function __ZN8tinyxml27XMLUtil15GetCharacterRefEPKcPcPi($0, $1, $2) {
  function __Z18cpu_do_check_ticksv (line 41797) | function __Z18cpu_do_check_ticksv() {
  function __ZN12monitor_desc15set_gamma_tableEj (line 41934) | function __ZN12monitor_desc15set_gamma_tableEj($0, $1) {
  function __Z9PrimeTimeji (line 42064) | function __Z9PrimeTimeji($0, $1) {
  function __ZN17driver_fullscreenC2ER16SDL_monitor_desc (line 42173) | function __ZN17driver_fullscreenC2ER16SDL_monitor_desc($0, $1) {
  function __Z25rpc_method_wait_for_replyP16rpc_connection_tz (line 42348) | function __Z25rpc_method_wait_for_replyP16rpc_connection_tz($0, $varargs) {
  function __ZNK8tinyxml210XMLElement12ShallowEqualEPKNS_7XMLNodeE (line 42513) | function __ZNK8tinyxml210XMLElement12ShallowEqualEPKNS_7XMLNodeE($0, $1) {
  function __Z10SonyStatusjj (line 42654) | function __Z10SonyStatusjj($0, $1) {
  function __Z14ether_udp_readjiP11sockaddr_in (line 42792) | function __Z14ether_udp_readjiP11sockaddr_in($0, $1, $2) {
  function __ZL13print_optionsPK10prefs_desc (line 42934) | function __ZL13print_optionsPK10prefs_desc($0) {
  function __ZN8tinyxml211XMLDocument8LoadFileEP8_IO_FILE (line 43081) | function __ZN8tinyxml211XMLDocument8LoadFileEP8_IO_FILE($0, $1) {
  function __ZNSt3__227__tree_balance_after_insertIPNS_16__tree_node_baseIPvEEEEvT_S5_ (line 43225) | function __ZNSt3__227__tree_balance_after_insertIPNS_16__tree_node_baseI...
  function __Z18audio_write_blocksi (line 43365) | function __Z18audio_write_blocksi($0) {
  function _scanexp (line 43477) | function _scanexp($0, $1) {
  function ___stpncpy (line 43619) | function ___stpncpy($0, $1, $2) {
  function __Z11m68k_move2ciPj (line 43762) | function __Z11m68k_move2ciPj($0, $1) {
  function __ZN13driver_windowC2ER16SDL_monitor_desc (line 43957) | function __ZN13driver_windowC2ER16SDL_monitor_desc($0, $1) {
  function __ZL8exec_tibj (line 44093) | function __ZL8exec_tibj($0) {
  function __Z8SonyOpenjj (line 44227) | function __Z8SonyOpenjj($0, $1) {
  function __ZL11write_prefsP8_IO_FILEPK10prefs_desc (line 44301) | function __ZL11write_prefsP8_IO_FILEPK10prefs_desc($0, $1) {
  function __Z8Sys_openPKcb (line 44438) | function __Z8Sys_openPKcb($0, $1) {
  function _expm1 (line 44549) | function _expm1($0) {
  function __Z5ADBOphPh (line 44680) | function __Z5ADBOphPh($trunc, $0) {
  function __Z10fpuop_savej (line 44859) | function __Z10fpuop_savej($0) {
  function __ZL15get_current_dirjjRjb (line 44946) | function __ZL15get_current_dirjjRjb($0, $1, $2, $3) {
  function __Z9EtherOpenjj (line 45062) | function __Z9EtherOpenjj($0, $1) {
  function __Z10SerialOpenjji (line 45124) | function __Z10SerialOpenjji($0, $1, $2) {
  function __Z9CDROMOpenjj (line 45203) | function __Z9CDROMOpenjj($0, $1) {
  function _pop_arg (line 45292) | function _pop_arg($0, $1, $2) {
  function __Z7InitAllPKc (line 45419) | function __Z7InitAllPKc($0) {
  function __Z12extfs_removePKc (line 45550) | function __Z12extfs_removePKc($0) {
  function __ZN8tinyxml210XMLElement21FindOrCreateAttributeEPKc (line 45639) | function __ZN8tinyxml210XMLElement21FindOrCreateAttributeEPKc($0, $1) {
  function __Z9SonyPrimejj (line 45748) | function __Z9SonyPrimejj($0, $1) {
  function __Z9DiskPrimejj (line 45828) | function __Z9DiskPrimejj($0, $1) {
  function __Z15rpc_init_clientPKc (line 45913) | function __Z15rpc_init_clientPKc($0) {
  function __Z11InstallSERDv (line 46033) | function __Z11InstallSERDv() {
  function __ZN8tinyxml212XMLAttribute9ParseDeepEPcb (line 46086) | function __ZN8tinyxml212XMLAttribute9ParseDeepEPcb($0, $1, $2) {
  function __Z8DiskOpenjj (line 46218) | function __Z8DiskOpenjj($0, $1) {
  function _memchr (line 46288) | function _memchr($0, $1, $2) {
  function _Execute68kTrap (line 46406) | function _Execute68kTrap($0, $1) {
  function _Execute68k (line 46478) | function _Execute68k($0, $1) {
  function __Z9init_m68kv (line 46550) | function __Z9init_m68kv() {
  function __ZL9get_fp_adjPj (line 46646) | function __ZL9get_fp_adjPj($0, $1) {
  function __Z10CDROMPrimejj (line 46753) | function __Z10CDROMPrimejj($0, $1) {
  function __ZN12monitor_desc17load_ramp_paletteEv (line 46834) | function __ZN12monitor_desc17load_ramp_paletteEv($0) {
  function __ZL8fpp_condi (line 46913) | function __ZL8fpp_condi($0) {
  function __ZL10open_audiov (line 47093) | function __ZL10open_audiov() {
  function __ZNK8tinyxml27XMLNode18NextSiblingElementEPKc (line 47169) | function __ZNK8tinyxml27XMLNode18NextSiblingElementEPKc($0, $1) {
  function __Z11op_cfc_0_ffj (line 47265) | function __Z11op_cfc_0_ffj($0) {
  function _mbrtowc (line 47327) | function _mbrtowc($0, $1, $2, $3) {
  function __ZN8tinyxml27XMLNodeD2Ev (line 47434) | function __ZN8tinyxml27XMLNodeD2Ev($0) {
  function __Z11m68k_movec2iPj (line 47526) | function __Z11m68k_movec2iPj($0, $1) {
  function __ZNK8tinyxml27XMLNode17FirstChildElementEPKc (line 47672) | function __ZNK8tinyxml27XMLNode17FirstChildElementEPKc($0, $1) {
  function __ZN8tinyxml27XMLText9ParseDeepEPcPNS_7StrPairE (line 47773) | function __ZN8tinyxml27XMLText9ParseDeepEPcPNS_7StrPairE($0, $1, $2) {
  function ___stdio_write (line 47870) | function ___stdio_write($0, $1, $2) {
  function __Z14InstallDriversj (line 47948) | function __Z14InstallDriversj($0) {
  function ___fdopen (line 47998) | function ___fdopen($0, $1) {
  function _fgets (line 48079) | function _fgets($0, $1, $2) {
  function __Z7RmvTimej (line 48183) | function __Z7RmvTimej($0) {
  function __Z9EtherInitv (line 48247) | function __Z9EtherInitv() {
  function __ZNK8tinyxml210XMLElement12ShallowCloneEPNS_11XMLDocumentE (line 48348) | function __ZNK8tinyxml210XMLElement12ShallowCloneEPNS_11XMLDocumentE($0,...
  function __ZN8tinyxml28MemPoolTILi36EE5AllocEv (line 48420) | function __ZN8tinyxml28MemPoolTILi36EE5AllocEv($0) {
  function __ZN8tinyxml28MemPoolTILi52EE5AllocEv (line 48493) | function __ZN8tinyxml28MemPoolTILi52EE5AllocEv($0) {
  function __ZN8tinyxml28MemPoolTILi48EE5AllocEv (line 48566) | function __ZN8tinyxml28MemPoolTILi48EE5AllocEv($0) {
  function __ZN8tinyxml28MemPoolTILi44EE5AllocEv (line 48639) | function __ZN8tinyxml28MemPoolTILi44EE5AllocEv($0) {
  function __Z9ExtFSInitv (line 48712) | function __Z9ExtFSInitv() {
  function __ZN8tinyxml27StrPair18CollapseWhitespaceEv (line 48807) | function __ZN8tinyxml27StrPair18CollapseWhitespaceEv($0) {
  function ___stpcpy (line 48900) | function ___stpcpy($0, $1) {
  function _memcpy (line 48988) | function _memcpy(dest, src, num) {
  function _log10 (line 49051) | function _log10($0) {
  function __Z23rpc_message_recv_stringP13rpc_message_tPPc (line 49116) | function __Z23rpc_message_recv_stringP13rpc_message_tPPc($0, $1) {
  function __Z11op_efc_0_ffj (line 49210) | function __Z11op_efc_0_ffj($0) {
  function __ZN8tinyxml211XMLDocumentC2EbNS_10WhitespaceE (line 49262) | function __ZN8tinyxml211XMLDocumentC2EbNS_10WhitespaceE($0, $1, $2) {
  function __Z9get_finfoPKcjjb (line 49329) | function __Z9get_finfoPKcjjb($0, $1, $2, $3) {
  function __Z9m68k_divljjtj (line 49400) | function __Z9m68k_divljjtj($0, $1, $2, $3) {
  function __Z11m68k_emulopj (line 49471) | function __Z11m68k_emulopj($0) {
  function __Z12op_edfb_0_ffj (line 49520) | function __Z12op_edfb_0_ffj($0) {
  function __Z16CDROMMountVolumePv (line 49584) | function __Z16CDROMMountVolumePv($0) {
  function __Z14TimerInterruptv (line 49659) | function __Z14TimerInterruptv() {
  function __Z12op_edf0_0_ffj (line 49710) | function __Z12op_edf0_0_ffj($0) {
  function _socket (line 49774) | function _socket($0, $1, $2) {
  function __Z12op_edfa_0_ffj (line 49844) | function __Z12op_edfa_0_ffj($0) {
  function __Z12op_4e73_0_ffj (line 49907) | function __Z12op_4e73_0_ffj($0) {
  function __Z15DiskMountVolumePv (line 50012) | function __Z15DiskMountVolumePv($0) {
  function __Z12op_edf9_0_ffj (line 50071) | function __Z12op_edf9_0_ffj($0) {
  function __Z12op_ede8_0_ffj (line 50134) | function __Z12op_ede8_0_ffj($0) {
  function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib (line 50197) | function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_1...
  function __Z12op_edf8_0_ffj (line 50266) | function __Z12op_edf8_0_ffj($0) {
  function __Z12op_edd0_0_ffj (line 50329) | function __Z12op_edd0_0_ffj($0) {
  function __ZN8tinyxml211XMLDocument8LoadFileEPKc (line 50392) | function __ZN8tinyxml211XMLDocument8LoadFileEPKc($0, $1) {
  function _vfprintf (line 50461) | function _vfprintf($0, $1, $2) {
  function __Z15get_disp_ea_020jj (line 50530) | function __Z15get_disp_ea_020jj($0, $1) {
  function ___mo_lookup (line 50601) | function ___mo_lookup($0, $1, $2) {
  function _log1p (line 50667) | function _log1p($0) {
  function __Z12op_eff9_0_ffj (line 50733) | function __Z12op_eff9_0_ffj($0) {
  function __Z12op_eff0_0_ffj (line 50780) | function __Z12op_eff0_0_ffj($0) {
  function __Z12op_eaf9_0_ffj (line 50828) | function __Z12op_eaf9_0_ffj($0) {
  function __Z12op_eaf0_0_ffj (line 50875) | function __Z12op_eaf0_0_ffj($0) {
  function __Z12op_eef9_0_ffj (line 50923) | function __Z12op_eef9_0_ffj($0) {
  function __Z12op_eef0_0_ffj (line 50970) | function __Z12op_eef0_0_ffj($0) {
  function __Z12op_efe8_0_ffj (line 51018) | function __Z12op_efe8_0_ffj($0) {
  function __ZNK8tinyxml214XMLDeclaration12ShallowEqualEPKNS_7XMLNodeE (line 51065) | function __ZNK8tinyxml214XMLDeclaration12ShallowEqualEPKNS_7XMLNodeE($0,...
  function __Z12op_eae8_0_ffj (line 51134) | function __Z12op_eae8_0_ffj($0) {
  function __ZNK8tinyxml210XMLUnknown12ShallowEqualEPKNS_7XMLNodeE (line 51181) | function __ZNK8tinyxml210XMLUnknown12ShallowEqualEPKNS_7XMLNodeE($0, $1) {
  function __ZNK8tinyxml210XMLComment12ShallowEqualEPKNS_7XMLNodeE (line 51250) | function __ZNK8tinyxml210XMLComment12ShallowEqualEPKNS_7XMLNodeE($0, $1) {
  function __Z12op_eee8_0_ffj (line 51319) | function __Z12op_eee8_0_ffj($0) {
  function __ZNK8tinyxml27XMLText12ShallowEqualEPKNS_7XMLNodeE (line 51366) | function __ZNK8tinyxml27XMLText12ShallowEqualEPKNS_7XMLNodeE($0, $1) {
  function __Z12op_eff8_0_ffj (line 51435) | function __Z12op_eff8_0_ffj($0) {
  function __Z12op_eaf8_0_ffj (line 51482) | function __Z12op_eaf8_0_ffj($0) {
  function __Z12op_eef8_0_ffj (line 51529) | function __Z12op_eef8_0_ffj($0) {
  function __Z12op_efd0_0_ffj (line 51576) | function __Z12op_efd0_0_ffj($0) {
  function __Z12op_ead0_0_ffj (line 51623) | function __Z12op_ead0_0_ffj($0) {
  function __Z12op_eed0_0_ffj (line 51670) | function __Z12op_eed0_0_ffj($0) {
  function __Z12op_ecf0_0_ffj (line 51717) | function __Z12op_ecf0_0_ffj($0) {
  function __Z9m68k_mulljjt (line 51763) | function __Z9m68k_mulljjt($0, $1, $2) {
  function __Z12op_ecf9_0_ffj (line 51820) | function __Z12op_ecf9_0_ffj($0) {
  function __Z12op_ece8_0_ffj (line 51865) | function __Z12op_ece8_0_ffj($0) {
  function ___dynamic_cast (line 51910) | function ___dynamic_cast($0, $1, $2, $3) {
  function __Z12op_ecf8_0_ffj (line 51976) | function __Z12op_ecf8_0_ffj($0) {
  function __ZL11open_helperPKcS0_i (line 52021) | function __ZL11open_helperPKcS0_i($0, $1, $2) {
  function __Z12op_48e0_0_ffj (line 52074) | function __Z12op_48e0_0_ffj($0) {
  function __Z12op_48a0_0_ffj (line 52130) | function __Z12op_48a0_0_ffj($0) {
  function __Z12op_ecd0_0_ffj (line 52186) | function __Z12op_ecd0_0_ffj($0) {
  function __Z17rpc_method_invokeP16rpc_connection_tiz (line 52231) | function __Z17rpc_method_invokeP16rpc_connection_tiz($0, $1, $varargs) {
  function ___shgetc (line 52291) | function ___shgetc($0) {
  function ___strchrnul (line 52355) | function ___strchrnul($0, $1) {
  function __ZN16SDL_monitor_desc10video_openEv (line 52424) | function __ZN16SDL_monitor_desc10video_openEv($0) {
  function __Z9ExtFSCommtjj (line 52482) | function __Z9ExtFSCommtjj($0, $1, $2) {
  function __ZN8tinyxml27StrPair9ParseNameEPc (line 52538) | function __ZN8tinyxml27StrPair9ParseNameEPc($0, $1) {
  function __Z12op_4c98_0_ffj (line 52626) | function __Z12op_4c98_0_ffj($0) {
  function __Z10MakeFromSRv (line 52682) | function __Z10MakeFromSRv() {
  function __Z12op_edc0_0_ffj (line 52734) | function __Z12op_edc0_0_ffj($0) {
  function __ZNK12monitor_desc17get_bytes_per_rowE11video_depthj (line 52793) | function __ZNK12monitor_desc17get_bytes_per_rowE11video_depthj($0, $1, $...
  function ___fwritex (line 52878) | function ___fwritex($0, $1, $2) {
  function _fread (line 52946) | function _fread($0, $1, $2, $3) {
  function __Z12op_4cd8_0_ffj (line 53015) | function __Z12op_4cd8_0_ffj($0) {
  function __ZN17disk_sparsebundle9open_bandEib (line 53071) | function __ZN17disk_sparsebundle9open_bandEib($0, $1, $2) {
  function __Z12op_f620_0_ffj (line 53130) | function __Z12op_f620_0_ffj($0) {
  function __Z10Delay_usecj (line 53169) | function __Z10Delay_usecj($0) {
  function __Z12op_48f9_0_ffj (line 53219) | function __Z12op_48f9_0_ffj($0) {
  function __Z12op_48b9_0_ffj (line 53269) | function __Z12op_48b9_0_ffj($0) {
  function __Z12op_48e8_0_ffj (line 53319) | function __Z12op_48e8_0_ffj($0) {
  function __Z12op_48a8_0_ffj (line 53369) | function __Z12op_48a8_0_ffj($0) {
  function __Z12op_8108_1_ffj (line 53419) | function __Z12op_8108_1_ffj($0) {
  function __Z12op_48f0_3_ffj (line 53453) | function __Z12op_48f0_3_ffj($0) {
  function __Z12op_48b0_3_ffj (line 53503) | function __Z12op_48b0_3_ffj($0) {
  function __Z12op_48f8_0_ffj (line 53553) | function __Z12op_48f8_0_ffj($0) {
  function __Z12op_48b8_0_ffj (line 53603) | function __Z12op_48b8_0_ffj($0) {
  function __ZNSt3__26vectorI15disk_drive_infoNS_9allocatorIS1_EEE21__push_back_slow_pathIKS1_EEvRT_ (line 53653) | function __ZNSt3__26vectorI15disk_drive_infoNS_9allocatorIS1_EEE21__push...
  function __Z12op_48f0_0_ffj (line 53702) | function __Z12op_48f0_0_ffj($0) {
  function __Z12op_48b0_0_ffj (line 53751) | function __Z12op_48b0_0_ffj($0) {
  function __Z12op_4cba_0_ffj (line 53800) | function __Z12op_4cba_0_ffj($0) {
  function __ZNSt3__26vectorI10video_modeNS_9allocatorIS1_EEE21__push_back_slow_pathIKS1_EEvRT_ (line 53850) | function __ZNSt3__26vectorI10video_modeNS_9allocatorIS1_EEE21__push_back...
  function __Z12op_4cb9_0_ffj (line 53899) | function __Z12op_4cb9_0_ffj($0) {
  function __Z12op_4ca8_0_ffj (line 53949) | function __Z12op_4ca8_0_ffj($0) {
  function __Z12op_4cbb_3_ffj (line 53999) | function __Z12op_4cbb_3_ffj($0) {
  function __Z12op_48d0_0_ffj (line 54049) | function __Z12op_48d0_0_ffj($0) {
  function __Z12op_4890_0_ffj (line 54099) | function __Z12op_4890_0_ffj($0) {
  function __Z12op_4cb0_3_ffj (line 54149) | function __Z12op_4cb0_3_ffj($0) {
  function __Z12op_4cf9_0_ffj (line 54199) | function __Z12op_4cf9_0_ffj($0) {
  function __Z12op_ebfb_0_ffj (line 54249) | function __Z12op_ebfb_0_ffj($0) {
  function __Z12op_4cbb_0_ffj (line 54288) | function __Z12op_4cbb_0_ffj($0) {
  function __Z12op_4ce8_0_ffj (line 54337) | function __Z12op_4ce8_0_ffj($0) {
  function __Z12op_4cb8_0_ffj (line 54387) | function __Z12op_4cb8_0_ffj($0) {
  function __Z12op_81f0_0_ffj (line 54437) | function __Z12op_81f0_0_ffj($0) {
  function __Z12op_4cfb_3_ffj (line 54480) | function __Z12op_4cfb_3_ffj($0) {
  function __Z12op_ebf0_0_ffj (line 54530) | function __Z12op_ebf0_0_ffj($0) {
  function __Z12op_4cb0_0_ffj (line 54569) | function __Z12op_4cb0_0_ffj($0) {
  function __ZN17disk_sparsebundle5writeEPvij (line 54618) | function __ZN17disk_sparsebundle5writeEPvij($0, $1, $2, $3) {
  function _vsnprintf (line 54664) | function _vsnprintf($0, $1, $2, $3) {
  function __Z18PrefsReplaceStringPKcS0_i (line 54719) | function __Z18PrefsReplaceStringPKcS0_i($0, $1, $2) {
  function __Z12op_8108_0_ffj (line 54785) | function __Z12op_8108_0_ffj($0) {
  function __ZN17disk_sparsebundle4readEPvij (line 54817) | function __ZN17disk_sparsebundle4readEPvij($0, $1, $2, $3) {
  function __Z12op_4cf0_3_ffj (line 54863) | function __Z12op_4cf0_3_ffj($0) {
  function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE21__grow_by_and_replaceEjjjjjjPKc (line 54913) | function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEE...
  function __Z8fpu_initb (line 54966) | function __Z8fpu_initb($0) {
  function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc (line 55014) | function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEE...
  function __Z12op_4c90_0_ffj (line 55068) | function __Z12op_4c90_0_ffj($0) {
  function __Z11op_ad8_0_ffj (line 55118) | function __Z11op_ad8_0_ffj($0) {
  function __Z12op_4cf8_0_ffj (line 55155) | function __Z12op_4cf8_0_ffj($0) {
  function __Z11op_ae0_0_ffj (line 55205) | function __Z11op_ae0_0_ffj($0) {
  function __Z12op_e9fb_0_ffj (line 55242) | function __Z12op_e9fb_0_ffj($0) {
  function __Z12op_4cf0_0_ffj (line 55280) | function __Z12op_4cf0_0_ffj($0) {
  function __Z12op_81fb_0_ffj (line 55329) | function __Z12op_81fb_0_ffj($0) {
  function __Z12op_e9f0_0_ffj (line 55371) | function __Z12op_e9f0_0_ffj($0) {
  function __Z12op_4cfa_0_ffj (line 55409) | function __Z12op_4cfa_0_ffj($0) {
  function __Z11op_cf9_0_ffj (line 55459) | function __Z11op_cf9_0_ffj($0) {
  function __Z8DiskInitv (line 55494) | function __Z8DiskInitv() {
  function __Z11op_af9_0_ffj (line 55542) | function __Z11op_af9_0_ffj($0) {
  function __Z12op_80f0_0_ffj (line 55577) | function __Z12op_80f0_0_ffj($0) {
  function __Z12op_c108_1_ffj (line 55619) | function __Z12op_c108_1_ffj($0) {
  function __Z12op_4cd0_0_ffj (line 55650) | function __Z12op_4cd0_0_ffj($0) {
  function __Z9fpu_resetv (line 55700) | function __Z9fpu_resetv() {
  function __Z12op_4cfb_0_ffj (line 55746) | function __Z12op_4cfb_0_ffj($0) {
  function __Z11op_cd8_0_ffj (line 55795) | function __Z11op_cd8_0_ffj($0) {
  function __Z11op_ce0_0_ffj (line 55831) | function __Z11op_ce0_0_ffj($0) {
  function __ZNSt3__26vectorI15sony_drive_infoNS_9allocatorIS1_EEE21__push_back_slow_pathIKS1_EEvRT_ (line 55867) | function __ZNSt3__26vectorI15sony_drive_infoNS_9allocatorIS1_EEE21__push...
  function __Z11op_ce8_0_ffj (line 55914) | function __Z11op_ce8_0_ffj($0) {
  function __ZN17disk_sparsebundle10band_writeEPcijj (line 55948) | function __ZN17disk_sparsebundle10band_writeEPcijj($0, $1, $2, $3, $4) {
  function __Z11op_ae8_0_ffj (line 55993) | function __Z11op_ae8_0_ffj($0) {
  function __Z12op_81f9_0_ffj (line 56027) | function __Z12op_81f9_0_ffj($0) {
  function __Z12op_81f0_3_ffj (line 56066) | function __Z12op_81f0_3_ffj($0) {
  function __Z12op_81e8_0_ffj (line 56105) | function __Z12op_81e8_0_ffj($0) {
  function __Z12op_80fb_0_ffj (line 56144) | function __Z12op_80fb_0_ffj($0) {
  function __ZNK8tinyxml27XMLText12ShallowCloneEPNS_11XMLDocumentE (line 56185) | function __ZNK8tinyxml27XMLText12ShallowCloneEPNS_11XMLDocumentE($0, $1) {
  function __Z12op_e8fb_0_ffj (line 56227) | function __Z12op_e8fb_0_ffj($0) {
  function __Z8SonyInitv (line 56263) | function __Z8SonyInitv() {
  function __Z11op_cf8_0_ffj (line 56311) | function __Z11op_cf8_0_ffj($0) {
  function __Z12op_e8f0_0_ffj (line 56345) | function __Z12op_e8f0_0_ffj($0) {
  function __Z12SerialStatusjji (line 56381) | function __Z12SerialStatusjji($0, $1, $2) {
  function _memset (line 56433) | function _memset(ptr, value, num) {
  function ___stdio_read (line 56478) | function ___stdio_read($0, $1, $2) {
  function __Z11op_cf0_0_ffj (line 56523) | function __Z11op_cf0_0_ffj($0) {
  function __Z11op_af8_0_ffj (line 56556) | function __Z11op_af8_0_ffj($0) {
  function __ZN8tinyxml210XMLElement9ParseDeepEPcPNS_7StrPairE (line 56590) | function __ZN8tinyxml210XMLElement9ParseDeepEPcPNS_7StrPairE($0, $1, $2) {
  function __Z12op_81d8_0_ffj (line 56649) | function __Z12op_81d8_0_ffj($0) {
  function __Z11op_af0_0_ffj (line 56689) | function __Z11op_af0_0_ffj($0) {
  function __Z12op_81e0_0_ffj (line 56722) | function __Z12op_81e0_0_ffj($0) {
  function __Z12op_81f8_0_ffj (line 56762) | function __Z12op_81f8_0_ffj($0) {
  function __Z12op_81fb_3_ffj (line 56801) | function __Z12op_81fb_3_ffj($0) {
  function __Z12op_ebfa_0_ffj (line 56839) | function __Z12op_ebfa_0_ffj($0) {
  function __Z11op_cd0_0_ffj (line 56872) | function __Z11op_cd0_0_ffj($0) {
  function __Z12op_81fa_0_ffj (line 56906) | function __Z12op_81fa_0_ffj($0) {
  function __Z12op_9108_0_ffj (line 56944) | function __Z12op_9108_0_ffj($0) {
  function __Z11op_ef9_0_ffj (line 56974) | function __Z11op_ef9_0_ffj($0) {
  function __Z12op_80f9_0_ffj (line 57008) | function __Z12op_80f9_0_ffj($0) {
  function __Z12op_80e8_0_ffj (line 57046) | function __Z12op_80e8_0_ffj($0) {
  function __Z12op_ebf9_0_ffj (line 57084) | function __Z12op_ebf9_0_ffj($0) {
  function __Z12op_ebe8_0_ffj (line 57117) | function __Z12op_ebe8_0_ffj($0) {
  function __Z9fpuop_sccjj (line 57150) | function __Z9fpuop_sccjj($0, $1) {
  function __Z11op_ad0_0_ffj (line 57190) | function __Z11op_ad0_0_ffj($0) {
  function __Z12op_80f0_3_ffj (line 57224) | function __Z12op_80f0_3_ffj($0) {
  function _strncmp (line 57262) | function _strncmp($0, $1, $2) {
  function __Z12op_d108_0_ffj (line 57314) | function __Z12op_d108_0_ffj($0) {
  function _fflush (line 57344) | function _fflush($0) {
  function __ZNK8tinyxml214XMLDeclaration12ShallowCloneEPNS_11XMLDocumentE (line 57402) | function __ZNK8tinyxml214XMLDeclaration12ShallowCloneEPNS_11XMLDocumentE...
  function __Z12op_c108_0_ffj (line 57442) | function __Z12op_c108_0_ffj($0) {
  function __Z11op_e70_0_ffj (line 57471) | function __Z11op_e70_0_ffj($0) {
  function __Z11op_e30_0_ffj (line 57509) | function __Z11op_e30_0_ffj($0) {
  function __Z11op_ed8_0_ffj (line 57547) | function __Z11op_ed8_0_ffj($0) {
  function __Z11op_2f0_0_ffj (line 57582) | function __Z11op_2f0_0_ffj($0) {
  function __Z10op_f0_0_ffj (line 57614) | function __Z10op_f0_0_ffj($0) {
  function __Z11op_ee0_0_ffj (line 57646) | function __Z11op_ee0_0_ffj($0) {
  function __Z11op_ee8_0_ffj (line 57681) | function __Z11op_ee8_0_ffj($0) {
  function __Z11op_2fb_0_ffj (line 57714) | function __Z11op_2fb_0_ffj($0) {
  function __Z12op_ebf8_0_ffj (line 57746) | function __Z12op_ebf8_0_ffj($0) {
  function __ZN12monitor_desc11driver_openEv (line 57779) | function __ZN12monitor_desc11driver_openEv($0) {
  function __Z12op_80d8_0_ffj (line 57817) | function __Z12op_80d8_0_ffj($0) {
  function __Z12op_e9fa_0_ffj (line 57856) | function __Z12op_e9fa_0_ffj($0) {
  function __Z12op_80f8_0_ffj (line 57888) | function __Z12op_80f8_0_ffj($0) {
  function __Z12op_e9f9_0_ffj (line 57926) | function __Z12op_e9f9_0_ffj($0) {
  function __Z12op_e9e8_0_ffj (line 57958) | function __Z12op_e9e8_0_ffj($0) {
  function __Z12op_80e0_0_ffj (line 57990) | function __Z12op_80e0_0_ffj($0) {
  function __Z10op_fb_0_ffj (line 58029) | function __Z10op_fb_0_ffj($0) {
  function __Z12op_80fb_3_ffj (line 58061) | function __Z12op_80fb_3_ffj($0) {
  function __Z12op_80fa_0_ffj (line 58098) | function __Z12op_80fa_0_ffj($0) {
  function __Z12op_81d0_0_ffj (line 58135) | function __Z12op_81d0_0_ffj($0) {
  function __ZNK8tinyxml210XMLUnknown12ShallowCloneEPNS_11XMLDocumentE (line 58173) | function __ZNK8tinyxml210XMLUnknown12ShallowCloneEPNS_11XMLDocumentE($0,...
  function __ZNK8tinyxml210XMLComment12ShallowCloneEPNS_11XMLDocumentE (line 58212) | function __ZNK8tinyxml210XMLComment12ShallowCloneEPNS_11XMLDocumentE($0,...
  function __ZNSt3__26vectorI16cdrom_drive_infoNS_9allocatorIS1_EEE21__push_back_slow_pathIKS1_EEvRT_ (line 58251) | function __ZNSt3__26vectorI16cdrom_drive_infoNS_9allocatorIS1_EEE21__pus...
  function __Z9GetStringi (line 58294) | function __Z9GetStringi($0) {
  function __Z12op_ebd0_0_ffj (line 58356) | function __Z12op_ebd0_0_ffj($0) {
  function __Z11op_ef8_0_ffj (line 58389) | function __Z11op_ef8_0_ffj($0) {
  function _atol (line 58422) | function _atol($0) {
  function _atoi (line 58482) | function _atoi($0) {
  function __Z7InsTimejt (line 58542) | function __Z7InsTimejt($0, $1) {
  function __Z11op_ef0_0_ffj (line 58597) | function __Z11op_ef0_0_ffj($0) {
  function __Z11op_2f9_0_ffj (line 58629) | function __Z11op_2f9_0_ffj($0) {
  function __Z12op_e9f8_0_ffj (line 58659) | function __Z12op_e9f8_0_ffj($0) {
  function __Z10op_f9_0_ffj (line 58691) | function __Z10op_f9_0_ffj($0) {
  function _wcrtomb (line 58721) | function _wcrtomb($0, $1, $2) {
  function __Z12op_9148_0_ffj (line 58775) | function __Z12op_9148_0_ffj($0) {
  function __ZNSt3__26vectorIP12monitor_descNS_9allocatorIS2_EEE21__push_back_slow_pathIKS2_EEvRT_ (line 58803) | function __ZNSt3__26vectorIP12monitor_descNS_9allocatorIS2_EEE21__push_b...
  function __Z12op_f608_0_ffj (line 58846) | function __Z12op_f608_0_ffj($0) {
  function __Z11op_ed0_0_ffj (line 58869) | function __Z11op_ed0_0_ffj($0) {
  function __Z17PrefsReplaceInt32PKci (line 58902) | function __Z17PrefsReplaceInt32PKci($0, $1) {
  function __Z12op_d148_0_ffj (line 58958) | function __Z12op_d148_0_ffj($0) {
  function __Z12op_f600_0_ffj (line 58986) | function __Z12op_f600_0_ffj($0) {
  function __Z12op_81fc_0_ffj (line 59009) | function __Z12op_81fc_0_ffj($0) {
  function __ZNSt3__26vectorIjNS_9allocatorIjEEE21__push_back_slow_pathIKjEEvRT_ (line 59047) | function __ZNSt3__26vectorIjNS_9allocatorIjEEE21__push_back_slow_pathIKj...
  function __Z12op_e9d0_0_ffj (line 59090) | function __Z12op_e9d0_0_ffj($0) {
  function __Z12op_80d0_0_ffj (line 59122) | function __Z12op_80d0_0_ffj($0) {
  function __Z12op_e8fa_0_ffj (line 59159) | function __Z12op_e8fa_0_ffj($0) {
  function __Z11op_2e8_0_ffj (line 59189) | function __Z11op_2e8_0_ffj($0) {
  function __Z10op_e8_0_ffj (line 59218) | function __Z10op_e8_0_ffj($0) {
  function __Z12op_e8f9_0_ffj (line 59247) | function __Z12op_e8f9_0_ffj($0) {
  function __Z12op_e8e8_0_ffj (line 59277) | function __Z12op_e8e8_0_ffj($0) {
  function __Z11op_eb0_0_ffj (line 59307) | function __Z11op_eb0_0_ffj($0) {
  function __Z15SerialInterruptv (line 59340) | function __Z15SerialInterruptv() {
  function _readdir (line 59389) | function _readdir($0) {
  function __Z11op_2fa_0_ffj (line 59438) | function __Z11op_2fa_0_ffj($0) {
  function __Z12op_9188_0_ffj (line 59467) | function __Z12op_9188_0_ffj($0) {
  function __Z18VideoDriverControljj (line 59494) | function __Z18VideoDriverControljj($0, $1) {
  function __Z10fpuop_dbccjj (line 59534) | function __Z10fpuop_dbccjj($0, $1) {
  function __Z10op_fa_0_ffj (line 59576) | function __Z10op_fa_0_ffj($0) {
  function __ZNSt3__26vectorItNS_9allocatorItEEE21__push_back_slow_pathIKtEEvRT_ (line 59605) | function __ZNSt3__26vectorItNS_9allocatorItEEE21__push_back_slow_pathIKt...
  function __Z9Sys_closePv (line 59647) | function __Z9Sys_closePv($0) {
  function __Z17VideoDriverStatusjj (line 59701) | function __Z17VideoDriverStatusjj($0, $1) {
  function __Z12op_d188_0_ffj (line 59741) | function __Z12op_d188_0_ffj($0) {
  function __Z11op_4f0_0_ffj (line 59768) | function __Z11op_4f0_0_ffj($0) {
  function __Z12op_e8f8_0_ffj (line 59798) | function __Z12op_e8f8_0_ffj($0) {
  function __Z11op_2f8_0_ffj (line 59828) | function __Z11op_2f8_0_ffj($0) {
  function _fmt_u (line 59857) | function _fmt_u($0, $1, $2) {
  function __Z10op_f8_0_ffj (line 59903) | function __Z10op_f8_0_ffj($0) {
  function __Z12op_e130_0_ffj (line 59932) | function __Z12op_e130_0_ffj($0) {
  function __Z12op_e030_0_ffj (line 59966) | function __Z12op_e030_0_ffj($0) {
  function __Z12op_81c0_0_ffj (line 60000) | function __Z12op_81c0_0_ffj($0) {
  function __Z23rpc_message_send_stringP13rpc_message_tPKc (line 60037) | function __Z23rpc_message_send_stringP13rpc_message_tPKc($0, $1) {
  function __Z12op_d07b_0_ffj (line 60079) | function __Z12op_d07b_0_ffj($0) {
  function __Z12op_f618_0_ffj (line 60106) | function __Z12op_f618_0_ffj($0) {
  function __Z11op_670_0_ffj (line 60127) | function __Z11op_670_0_ffj($0) {
  function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcj (line 60154) | function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEE...
  function __Z12op_d070_0_ffj (line 60195) | function __Z12op_d070_0_ffj($0) {
  function __Z12op_f610_0_ffj (line 60222) | function __Z12op_f610_0_ffj($0) {
  function __Z12op_d03b_0_ffj (line 60243) | function __Z12op_d03b_0_ffj($0) {
  function __ZN8tinyxml214XMLDeclaration9ParseDeepEPcPNS_7StrPairE (line 60270) | function __ZN8tinyxml214XMLDeclaration9ParseDeepEPcPNS_7StrPairE($0, $1,...
  function __ZL11find_fsitemPKcP6FSItem (line 60316) | function __ZL11find_fsitemPKcP6FSItem($0, $1) {
  function __Z16PrefsReplaceBoolPKcb (line 60358) | function __Z16PrefsReplaceBoolPKcb($0, $1) {
  function _fopen (line 60412) | function _fopen($0, $1) {
  function __ZN8tinyxml210XMLComment9ParseDeepEPcPNS_7StrPairE (line 60452) | function __ZN8tinyxml210XMLComment9ParseDeepEPcPNS_7StrPairE($0, $1, $2) {
  function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKcj (line 60498) | function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEE...
  function __Z11op_4fb_0_ffj (line 60543) | function __Z11op_4fb_0_ffj($0) {
  function __Z12op_d030_0_ffj (line 60573) | function __Z12op_d030_0_ffj($0) {
  function __Z12op_e8d0_0_ffj (line 60600) | function __Z12op_e8d0_0_ffj($0) {
  function __Z12op_e160_0_ffj (line 60630) | function __Z12op_e160_0_ffj($0) {
  function __Z11op_e18_0_ffj (line 60668) | function __Z11op_e18_0_ffj($0) {
  function __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i (line 60703) | function __ZNK10__cxxabiv117__class_type_info29process_static_type_above...
  function __Z9LoadXPRAMPKc (line 60749) | function __Z9LoadXPRAMPKc($0) {
  function __Z11op_4b0_0_ffj (line 60789) | function __Z11op_4b0_0_ffj($0) {
  function __Z12op_e120_0_ffj (line 60815) | function __Z12op_e120_0_ffj($0) {
  function __Z12op_907b_0_ffj (line 60853) | function __Z12op_907b_0_ffj($0) {
  function __Z12op_31bb_0_ffj (line 60879) | function __Z12op_31bb_0_ffj($0) {
  function __Z12op_11bb_0_ffj (line 60906) | function __Z12op_11bb_0_ffj($0) {
  function _strlen (line 60933) | function _strlen($0) {
  function __Z12op_d170_0_ffj (line 60989) | function __Z12op_d170_0_ffj($0) {
  function __Z12op_8100_1_ffj (line 61015) | function __Z12op_8100_1_ffj($0) {
  function __Z11op_470_0_ffj (line 61041) | function __Z11op_470_0_ffj($0) {
  function _fputc (line 61067) | function _fputc($0, $1) {
  function __Z12op_9070_0_ffj (line 61116) | function __Z12op_9070_0_ffj($0) {
  function __Z12op_903b_0_ffj (line 61142) | function __Z12op_903b_0_ffj($0) {
  function __Z12op_31b0_0_ffj (line 61168) | function __Z12op_31b0_0_ffj($0) {
  function __Z12op_11b0_0_ffj (line 61195) | function __Z12op_11b0_0_ffj($0) {
  function __ZN8tinyxml210XMLUnknown9ParseDeepEPcPNS_7StrPairE (line 61222) | function __ZN8tinyxml210XMLUnknown9ParseDeepEPcPNS_7StrPairE($0, $1, $2) {
  function __Z12op_d130_0_ffj (line 61266) | function __Z12op_d130_0_ffj($0) {
  function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv (line 61292) | function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_ty...
  function __Z12op_4070_0_ffj (line 61334) | function __Z12op_4070_0_ffj($0) {
  function __ZL13mode_from_strPKc (line 61360) | function __ZL13mode_from_strPKc($0) {
  function __Z12op_9030_0_ffj (line 61414) | function __Z12op_9030_0_ffj($0) {
  function __Z12op_4030_0_ffj (line 61440) | function __Z12op_4030_0_ffj($0) {
  function __Z12op_33fb_0_ffj (line 61466) | function __Z12op_33fb_0_ffj($0) {
  function __Z12op_13fb_0_ffj (line 61492) | function __Z12op_13fb_0_ffj($0) {
  function __Z11op_4f9_0_ffj (line 61518) | function __Z11op_4f9_0_ffj($0) {
  function __Z12op_efc0_0_ffj (line 61546) | function __Z12op_efc0_0_ffj($0) {
  function __Z12op_d07b_3_ffj (line 61578) | function __Z12op_d07b_3_ffj($0) {
  function __Z12op_b108_0_ffj (line 61602) | function __Z12op_b108_0_ffj($0) {
  function __Z11op_2d0_0_ffj (line 61625) | function __Z11op_2d0_0_ffj($0) {
  function __Z12op_5070_0_ffj (line 61653) | function __Z12op_5070_0_ffj($0) {
  function __Z11op_630_0_ffj (line 61679) | function __Z11op_630_0_ffj($0) {
  function __Z10op_d0_0_ffj (line 61705) | function __Z10op_d0_0_ffj($0) {
  function __Z12op_8188_0_ffj (line 61733) | function __Z12op_8188_0_ffj($0) {
  function __Z9CDROMInitv (line 61756) | function __Z9CDROMInitv() {
  function __Z12op_33f0_0_ffj (line 61799) | function __Z12op_33f0_0_ffj($0) {
  function __Z11op_e20_0_ffj (line 61825) | function __Z11op_e20_0_ffj($0) {
  function __Z12op_80c0_0_ffj (line 61860) | function __Z12op_80c0_0_ffj($0) {
  function __Z12op_13f0_0_ffj (line 61896) | function __Z12op_13f0_0_ffj($0) {
  function __Z12op_d07a_0_ffj (line 61922) | function __Z12op_d07a_0_ffj($0) {
  function __Z12op_80fc_0_ffj (line 61946) | function __Z12op_80fc_0_ffj($0) {
  function __Z12op_d03b_3_ffj (line 61982) | function __Z12op_d03b_3_ffj($0) {
  function __Z14CDROMInterruptv (line 62006) | function __Z14CDROMInterruptv() {
  function __Z12op_5030_0_ffj (line 62043) | function __Z12op_5030_0_ffj($0) {
  function __Z12op_4830_1_ffj (line 62069) | function __Z12op_4830_1_ffj($0) {
  function __ZN16SDL_monitor_desc11set_paletteEPhi (line 62094) | function __ZN16SDL_monitor_desc11set_paletteEPhi($0, $1, $2) {
  function __Z13DiskInterruptv (line 62131) | function __Z13DiskInterruptv() {
  function __Z12op_9170_0_ffj (line 62168) | function __Z12op_9170_0_ffj($0) {
  function __Z11op_6b0_0_ffj (line 62193) | function __Z11op_6b0_0_ffj($0) {
  function __Z12op_e140_0_ffj (line 62218) | function __Z12op_e140_0_ffj($0) {
  function __ZL18find_hfs_partitionR15disk_drive_info (line 62252) | function __ZL18find_hfs_partitionR15disk_drive_info($0) {
  function __Z12op_d03a_0_ffj (line 62291) | function __Z12op_d03a_0_ffj($0) {
  function __Z12op_eac0_0_ffj (line 62315) | function __Z12op_eac0_0_ffj($0) {
  function __Z12op_eec0_0_ffj (line 62347) | function __Z12op_eec0_0_ffj($0) {
  function __Z11op_e68_0_ffj (line 62379) | function __Z11op_e68_0_ffj($0) {
  function __Z12op_e068_0_ffj (line 62411) | function __Z12op_e068_0_ffj($0) {
  function __Z12op_9130_0_ffj (line 62449) | function __Z12op_9130_0_ffj($0) {
  function __Z12op_31ba_0_ffj (line 62474) | function __Z12op_31ba_0_ffj($0) {
  function __Z12op_317b_0_ffj (line 62499) | function __Z12op_317b_0_ffj($0) {
  function __Z12op_11ba_0_ffj (line 62524) | function __Z12op_11ba_0_ffj($0) {
  function __Z12op_117b_0_ffj (line 62549) | function __Z12op_117b_0_ffj($0) {
  function __Z12op_21bb_0_ffj (line 62574) | function __Z12op_21bb_0_ffj($0) {
  function __Z11op_e28_0_ffj (line 62600) | function __Z11op_e28_0_ffj($0) {
  function __Z12op_8148_0_ffj (line 62632) | function __Z12op_8148_0_ffj($0) {
  function __Z12op_e1a0_0_ffj (line 62654) | function __Z12op_e1a0_0_ffj($0) {
  function __Z12op_e100_0_ffj (line 62691) | function __Z12op_e100_0_ffj($0) {
  function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEjjjjjj (line 62725) | function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEE...
  function __Z11op_e79_0_ffj (line 62765) | function __Z11op_e79_0_ffj($0) {
  function _open (line 62796) | function _open($0, $1, $varargs) {
  function __Z12op_e028_0_ffj (line 62829) | function __Z12op_e028_0_ffj($0) {
  function __Z11op_679_0_ffj (line 62867) | function __Z11op_679_0_ffj($0) {
  function __ZN17disk_sparsebundle9band_readEPcijj (line 62891) | function __ZN17disk_sparsebundle9band_readEPcijj($0, $1, $2, $3, $4) {
  function __Z12op_907b_3_ffj (line 62939) | function __Z12op_907b_3_ffj($0) {
  function __Z12op_3170_0_ffj (line 62962) | function __Z12op_3170_0_ffj($0) {
  function __Z12op_1170_0_ffj (line 62987) | function __Z12op_1170_0_ffj($0) {
  function __Z11op_430_0_ffj (line 63012) | function __Z11op_430_0_ffj($0) {
  function __Z12op_5170_0_ffj (line 63037) | function __Z12op_5170_0_ffj($0) {
  function __Z11op_e39_0_ffj (line 63062) | function __Z11op_e39_0_ffj($0) {
  function __Z11op_4e8_0_ffj (line 63093) | function __Z11op_4e8_0_ffj($0) {
  function __Z12op_21b0_0_ffj (line 63120) | function __Z12op_21b0_0_ffj($0) {
  function __Z12op_4830_0_ffj (line 63146) | function __Z12op_4830_0_ffj($0) {
  function __Z11op_e58_0_ffj (line 63170) | function __Z11op_e58_0_ffj($0) {
  function __Z12op_907a_0_ffj (line 63204) | function __Z12op_907a_0_ffj($0) {
  function __Z12op_903b_3_ffj (line 63227) | function __Z12op_903b_3_ffj($0) {
  function __Z12op_5130_0_ffj (line 63250) | function __Z12op_5130_0_ffj($0) {
  function __Z11op_658_0_ffj (line 63275) | function __Z11op_658_0_ffj($0) {
  function __Z12op_d018_0_ffj (line 63300) | function __Z12op_d018_0_ffj($0) {
  function __Z6mmu_opjt (line 63325) | function __Z6mmu_opjt($0, $1) {
  function __Z12op_23fb_0_ffj (line 63381) | function __Z12op_23fb_0_ffj($0) {
  function __Z12op_d070_3_ffj (line 63406) | function __Z12op_d070_3_ffj($0) {
  function __Z12op_903a_0_ffj (line 63429) | function __Z12op_903a_0_ffj($0) {
  function __Z12op_1198_0_ffj (line 63452) | function __Z12op_1198_0_ffj($0) {
  function __Z11op_4b9_0_ffj (line 63478) | function __Z11op_4b9_0_ffj($0) {
  function __Z12op_d079_0_ffj (line 63501) | function __Z12op_d079_0_ffj($0) {
  function __Z11op_e60_0_ffj (line 63524) | function __Z11op_e60_0_ffj($0) {
  function __Z11op_660_0_ffj (line 63558) | function __Z11op_660_0_ffj($0) {
  function __Z12op_d068_0_ffj (line 63583) | function __Z12op_d068_0_ffj($0) {
  function __Z12op_113b_0_ffj (line 63606) | function __Z12op_113b_0_ffj($0) {
  function __Z11op_670_3_ffj (line 63632) | function __Z11op_670_3_ffj($0) {
  function __Z12op_d179_0_ffj (line 63655) | function __Z12op_d179_0_ffj($0) {
  function __Z12op_d020_0_ffj (line 63678) | function __Z12op_d020_0_ffj($0) {
  function __Z12op_23f0_0_ffj (line 63703) | function __Z12op_23f0_0_ffj($0) {
  function __Z12op_e170_0_ffj (line 63728) | function __Z12op_e170_0_ffj($0) {
  function __Z12op_e070_0_ffj (line 63760) | function __Z12op_e070_0_ffj($0) {
  function __Z11op_668_0_ffj (line 63792) | function __Z11op_668_0_ffj($0) {
  function __Z12op_10fb_0_ffj (line 63815) | function __Z12op_10fb_0_ffj($0) {
  function __Z12op_d030_3_ffj (line 63841) | function __Z12op_d030_3_ffj($0) {
  function __Z12op_11a0_0_ffj (line 63864) | function __Z12op_11a0_0_ffj($0) {
  function __Z12op_d039_0_ffj (line 63890) | function __Z12op_d039_0_ffj($0) {
  function __Z12op_1130_0_ffj (line 63913) | function __Z12op_1130_0_ffj($0) {
  function __Z12op_ecc0_0_ffj (line 63939) | function __Z12op_ecc0_0_ffj($0) {
  function __Z12op_d139_0_ffj (line 63970) | function __Z12op_d139_0_ffj($0) {
  function __Z11op_4fa_0_ffj (line 63993) | function __Z11op_4fa_0_ffj($0) {
  function __Z12op_d028_0_ffj (line 64020) | function __Z12op_d028_0_ffj($0) {
  function __Z11op_479_0_ffj (line 64043) | function __Z11op_479_0_ffj($0) {
  function ___overflow (line 64066) | function ___overflow($0, $1) {
  function __ZN5plist5valueEPKcS1_ (line 64111) | function __ZN5plist5valueEPKcS1_($0, $1, $2) {
  function __Z12op_4079_0_ffj (line 64154) | function __Z12op_4079_0_ffj($0) {
  function __Z11op_498_0_ffj (line 64177) | function __Z11op_498_0_ffj($0) {
  function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib (line 64201) | function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__...
  function __Z12op_31b9_0_ffj (line 64238) | function __Z12op_31b9_0_ffj($0) {
  function __Z12op_10f0_0_ffj (line 64262) | function __Z12op_10f0_0_ffj($0) {
  function __Z12op_4039_0_ffj (line 64288) | function __Z12op_4039_0_ffj($0) {
  function __Z12op_11b9_0_ffj (line 64311) | function __Z12op_11b9_0_ffj($0) {
  function __Z12op_91b0_0_ffj (line 64335) | function __Z12op_91b0_0_ffj($0) {
  function __Z12op_31a8_0_ffj (line 64360) | function __Z12op_31a8_0_ffj($0) {
  function __Z12op_31fb_0_ffj (line 64384) | function __Z12op_31fb_0_ffj($0) {
  function __Z12op_11a8_0_ffj (line 64409) | function __Z12op_11a8_0_ffj($0) {
  function __Z12op_5079_0_ffj (line 64433) | function __Z12op_5079_0_ffj($0) {
  function __Z12op_11fb_0_ffj (line 64456) | function __Z12op_11fb_0_ffj($0) {
  function __Z12op_4818_1_ffj (line 64481) | function __Z12op_4818_1_ffj($0) {
  function __Z12op_21ba_0_ffj (line 64505) | function __Z12op_21ba_0_ffj($0) {
  function __Z12op_217b_0_ffj (line 64529) | function __Z12op_217b_0_ffj($0) {
  function __Z11op_618_0_ffj (line 64553) | function __Z11op_618_0_ffj($0) {
  function __Z11op_639_0_ffj (line 64577) | function __Z11op_639_0_ffj($0) {
  function _fstat (line 64600) | function _fstat($0, $1) {
  function __Z11op_620_0_ffj (line 64633) | function __Z11op_620_0_ffj($0) {
  function __Z12op_9018_0_ffj (line 64657) | function __Z12op_9018_0_ffj($0) {
  function __Z11op_4f8_0_ffj (line 64681) | function __Z11op_4f8_0_ffj($0) {
  function __Z11op_4a0_0_ffj (line 64708) | function __Z11op_4a0_0_ffj($0) {
  function __Z11op_458_0_ffj (line 64732) | function __Z11op_458_0_ffj($0) {
  function __Z12op_d118_0_ffj (line 64756) | function __Z12op_d118_0_ffj($0) {
  function __Z11op_4b0_3_ffj (line 64780) | function __Z11op_4b0_3_ffj($0) {
  function __Z12op_31f0_0_ffj (line 64802) | function __Z12op_31f0_0_ffj($0) {
  function __Z12op_d120_0_ffj (line 64827) | function __Z12op_d120_0_ffj($0) {
  function __Z12op_5039_0_ffj (line 64851) | function __Z12op_5039_0_ffj($0) {
  function __Z12op_11f0_0_ffj (line 64874) | function __Z12op_11f0_0_ffj($0) {
  function __Z12op_d170_3_ffj (line 64899) | function __Z12op_d170_3_ffj($0) {
  function __Z12op_4820_1_ffj (line 64921) | function __Z12op_4820_1_ffj($0) {
  function __Z12op_e180_0_ffj (line 64945) | function __Z12op_e180_0_ffj($0) {
  function __Z12op_4839_1_ffj (line 64978) | function __Z12op_4839_1_ffj($0) {
  function __Z12op_2170_0_ffj (line 65000) | function __Z12op_2170_0_ffj($0) {
  function __Z11op_4a8_0_ffj (line 65024) | function __Z11op_4a8_0_ffj($0) {
  function __Z12op_5070_3_ffj (line 65046) | function __Z12op_5070_3_ffj($0) {
  function __Z12op_9070_3_ffj (line 65068) | function __Z12op_9070_3_ffj($0) {
  function __Z12op_e168_0_ffj (line 65090) | function __Z12op_e168_0_ffj($0) {
  function __Z12op_d168_0_ffj (line 65127) | function __Z12op_d168_0_ffj($0) {
  function __Z12op_d058_0_ffj (line 65149) | function __Z12op_d058_0_ffj($0) {
  function __Z12op_9079_0_ffj (line 65173) | function __Z12op_9079_0_ffj($0) {
  function __Z12op_4018_0_ffj (line 65195) | function __Z12op_4018_0_ffj($0) {
  function __Z12op_9020_0_ffj (line 65219) | function __Z12op_9020_0_ffj($0) {
  function __Z11op_460_0_ffj (line 65243) | function __Z11op_460_0_ffj($0) {
  function ___strerror_l (line 65267) | function ___strerror_l($0, $1) {
  function __Z12op_9068_0_ffj (line 65316) | function __Z12op_9068_0_ffj($0) {
  function __Z12op_51b0_0_ffj (line 65338) | function __Z12op_51b0_0_ffj($0) {
  function __Z11op_470_3_ffj (line 65363) | function __Z11op_470_3_ffj($0) {
  function __Z12op_9179_0_ffj (line 65385) | function __Z12op_9179_0_ffj($0) {
  function __Z12op_4068_0_ffj (line 65407) | function __Z12op_4068_0_ffj($0) {
  function __Z12op_d130_3_ffj (line 65429) | function __Z12op_d130_3_ffj($0) {
  function __Z12op_4070_3_ffj (line 65451) | function __Z12op_4070_3_ffj($0) {
  function __Z11op_468_0_ffj (line 65473) | function __Z11op_468_0_ffj($0) {
  function __Z12op_e128_0_ffj (line 65495) | function __Z12op_e128_0_ffj($0) {
  function __Z12op_9030_3_ffj (line 65532) | function __Z12op_9030_3_ffj($0) {
  function __Z12op_4028_0_ffj (line 65554) | function __Z12op_4028_0_ffj($0) {
  function __Z12op_4020_0_ffj (line 65576) | function __Z12op_4020_0_ffj($0) {
  function __Z11op_6b9_0_ffj (line 65600) | function __Z11op_6b9_0_ffj($0) {
  function __Z12op_d128_0_ffj (line 65622) | function __Z12op_d128_0_ffj($0) {
  function __Z12op_9039_0_ffj (line 65644) | function __Z12op_9039_0_ffj($0) {
  function __Z12op_5018_0_ffj (line 65666) | function __Z12op_5018_0_ffj($0) {
  function __Z12op_4030_3_ffj (line 65690) | function __Z12op_4030_3_ffj($0) {
  function __Z12op_d060_0_ffj (line 65712) | function __Z12op_d060_0_ffj($0) {
  function __Z12op_9139_0_ffj (line 65736) | function __Z12op_9139_0_ffj($0) {
  function __Z12op_d078_0_ffj (line 65758) | function __Z12op_d078_0_ffj($0) {
  function __Z12op_b148_0_ffj (line 65781) | function __Z12op_b148_0_ffj($0) {
  function __Z12op_9028_0_ffj (line 65802) | function __Z12op_9028_0_ffj($0) {
  function __Z12op_33fb_3_ffj (line 65824) | function __Z12op_33fb_3_ffj($0) {
  function __Z12op_5020_0_ffj (line 65846) | function __Z12op_5020_0_ffj($0) {
  function __Z12op_13fb_3_ffj (line 65870) | function __Z12op_13fb_3_ffj($0) {
  function __Z12op_4818_0_ffj (line 65892) | function __Z12op_4818_0_ffj($0) {
  function __Z12op_90bb_0_ffj (line 65915) | function __Z12op_90bb_0_ffj($0) {
  function __Z11op_630_3_ffj (line 65940) | function __Z11op_630_3_ffj($0) {
  function __Z12op_5068_0_ffj (line 65962) | function __Z12op_5068_0_ffj($0) {
  function __Z12op_3198_0_ffj (line 65984) | function __Z12op_3198_0_ffj($0) {
  function __Z11op_e78_0_ffj (line 66009) | function __Z11op_e78_0_ffj($0) {
  function __Z12op_5179_0_ffj (line 66040) | function __Z12op_5179_0_ffj($0) {
  function __Z11op_678_0_ffj (line 66062) | function __Z11op_678_0_ffj($0) {
  function __Z11op_628_0_ffj (line 66085) | function __Z11op_628_0_ffj($0) {
  function __Z12op_313b_0_ffj (line 66107) | function __Z12op_313b_0_ffj($0) {
  function __Z11op_e38_0_ffj (line 66132) | function __Z11op_e38_0_ffj($0) {
  function __Z11op_418_0_ffj (line 66163) | function __Z11op_418_0_ffj($0) {
  function __Z12op_5030_3_ffj (line 66186) | function __Z12op_5030_3_ffj($0) {
  function __Z12op_33fa_0_ffj (line 66208) | function __Z12op_33fa_0_ffj($0) {
  function __Z11op_439_0_ffj (line 66230) | function __Z11op_439_0_ffj($0) {
  function __Z12op_13fa_0_ffj (line 66252) | function __Z12op_13fa_0_ffj($0) {
  function __Z12op_d038_0_ffj (line 66274) | function __Z12op_d038_0_ffj($0) {
  function __Z12op_4830_3_ffj (line 66297) | function __Z12op_4830_3_ffj($0) {
  function __Z12op_4820_0_ffj (line 66318) | function __Z12op_4820_0_ffj($0) {
  function __Z11op_cbb_0_ffj (line 66341) | function __Z11op_cbb_0_ffj($0) {
  function __Z11op_420_0_ffj (line 66363) | function __Z11op_420_0_ffj($0) {
  function __Z12op_90b0_0_ffj (line 66386) | function __Z12op_90b0_0_ffj($0) {
  function __Z12op_9118_0_ffj (line 66411) | function __Z12op_9118_0_ffj($0) {
  function __Z12op_5028_0_ffj (line 66434) | function __Z12op_5028_0_ffj($0) {
  function __Z12op_4839_0_ffj (line 66456) | function __Z12op_4839_0_ffj($0) {
  function __Z11op_698_0_ffj (line 66477) | function __Z11op_698_0_ffj($0) {
  function __Z12op_30fb_0_ffj (line 66500) | function __Z12op_30fb_0_ffj($0) {
  function __Z12op_113b_3_ffj (line 66525) | function __Z12op_113b_3_ffj($0) {
  function __Z15ChecksumSlotROMv (line 66548) | function __Z15ChecksumSlotROMv() {
  function __Z12op_5139_0_ffj (line 66582) | function __Z12op_5139_0_ffj($0) {
  function __Z12op_4828_1_ffj (line 66604) | function __Z12op_4828_1_ffj($0) {
  function __Z12op_31a0_0_ffj (line 66625) | function __Z12op_31a0_0_ffj($0) {
  function __Z12op_d1b0_0_ffj (line 66650) | function __Z12op_d1b0_0_ffj($0) {
  function __Z12op_9120_0_ffj (line 66674) | function __Z12op_9120_0_ffj($0) {
  function __Z12op_31b8_0_ffj (line 66697) | function __Z12op_31b8_0_ffj($0) {
  function __Z12op_11b8_0_ffj (line 66721) | function __Z12op_11b8_0_ffj($0) {
  function __Z12op_3130_0_ffj (line 66745) | function __Z12op_3130_0_ffj($0) {
  function __Z12op_9170_3_ffj (line 66770) | function __Z12op_9170_3_ffj($0) {
  function __Z12op_40b0_0_ffj (line 66791) | function __Z12op_40b0_0_ffj($0) {
  function __Z12op_10fb_3_ffj (line 66815) | function __Z12op_10fb_3_ffj($0) {
  function __Z12op_5170_3_ffj (line 66838) | function __Z12op_5170_3_ffj($0) {
  function __Z11op_cb0_0_ffj (line 66859) | function __Z11op_cb0_0_ffj($0) {
  function __Z11op_c7b_0_ffj (line 66881) | function __Z11op_c7b_0_ffj($0) {
  function __Z12op_21b9_0_ffj (line 66903) | function __Z12op_21b9_0_ffj($0) {
  function __ZN8tinyxml28MemPoolTILi52EED0Ev (line 66926) | function __ZN8tinyxml28MemPoolTILi52EED0Ev($0) {
  function __ZN8tinyxml28MemPoolTILi48EED0Ev (line 66968) | function __ZN8tinyxml28MemPoolTILi48EED0Ev($0) {
  function __ZN8tinyxml28MemPoolTILi44EED0Ev (line 67010) | function __ZN8tinyxml28MemPoolTILi44EED0Ev($0) {
  function __ZN8tinyxml28MemPoolTILi36EED0Ev (line 67052) | function __ZN8tinyxml28MemPoolTILi36EED0Ev($0) {
  function __Z12op_9168_0_ffj (line 67094) | function __Z12op_9168_0_ffj($0) {
  function __Z19FindFreeDriveNumberi (line 67115) | function __Z19FindFreeDriveNumberi($0) {
  function __Z12op_9058_0_ffj (line 67155) | function __Z12op_9058_0_ffj($0) {
  function __Z12op_31bb_3_ffj (line 67178) | function __Z12op_31bb_3_ffj($0) {
  function __Z12op_30f0_0_ffj (line 67199) | function __Z12op_30f0_0_ffj($0) {
  function __Z12op_21a8_0_ffj (line 67224) | function __Z12op_21a8_0_ffj($0) {
  function __Z12op_113a_0_ffj (line 67247) | function __Z12op_113a_0_ffj($0) {
  function __Z11op_6a0_0_ffj (line 67270) | function __Z11op_6a0_0_ffj($0) {
  function __Z12op_e060_0_ffj (line 67293) | function __Z12op_e060_0_ffj($0) {
  function __Z12op_21fb_0_ffj (line 67327) | function __Z12op_21fb_0_ffj($0) {
  function __Z12op_11bb_3_ffj (line 67351) | function __Z12op_11bb_3_ffj($0) {
  function __Z11op_6b0_3_ffj (line 67372) | function __Z11op_6b0_3_ffj($0) {
  function ___remdi3 (line 67393) | function ___remdi3($a$0, $a$1, $b$0, $b$1) {
  function __Z12op_d158_0_ffj (line 67414) | function __Z12op_d158_0_ffj($0) {
  function __Z12op_9130_3_ffj (line 67437) | function __Z12op_9130_3_ffj($0) {
  function __ZN17driver_fullscreenD2Ev (line 67458) | function __ZN17driver_fullscreenD2Ev($0) {
  function __Z12op_5130_3_ffj (line 67495) | function __Z12op_5130_3_ffj($0) {
  function __Z12op_317b_3_ffj (line 67516) | function __Z12op_317b_3_ffj($0) {
  function __Z11op_c70_0_ffj (line 67537) | function __Z11op_c70_0_ffj($0) {
  function __Z12op_117b_3_ffj (line 67559) | function __Z12op_117b_3_ffj($0) {
  function __Z12op_10fa_0_ffj (line 67580) | function __Z12op_10fa_0_ffj($0) {
  function __Z11op_6a8_0_ffj (line 67603) | function __Z11op_6a8_0_ffj($0) {
  function __Z11op_4b8_0_ffj (line 67624) | function __Z11op_4b8_0_ffj($0) {
  function __Z12op_9128_0_ffj (line 67646) | function __Z12op_9128_0_ffj($0) {
  function __Z12op_5118_0_ffj (line 67667) | function __Z12op_5118_0_ffj($0) {
  function __Z11op_650_0_ffj (line 67690) | function __Z11op_650_0_ffj($0) {
  function __Z12op_d178_0_ffj (line 67713) | function __Z12op_d178_0_ffj($0) {
  function __Z12op_d160_0_ffj (line 67735) | function __Z12op_d160_0_ffj($0) {
  function __Z12op_5120_0_ffj (line 67758) | function __Z12op_5120_0_ffj($0) {
  function __Z12op_31ba_3_ffj (line 67781) | function __Z12op_31ba_3_ffj($0) {
  function __Z12op_9060_0_ffj (line 67802) | function __Z12op_9060_0_ffj($0) {
  function __Z12op_50b0_0_ffj (line 67825) | function __Z12op_50b0_0_ffj($0) {
  function __Z12op_21f0_0_ffj (line 67849) | function __Z12op_21f0_0_ffj($0) {
  function __Z12op_11ba_3_ffj (line 67873) | function __Z12op_11ba_3_ffj($0) {
  function __Z14EtherInterruptv (line 67894) | function __Z14EtherInterruptv() {
  function __Z12op_9078_0_ffj (line 67924) | function __Z12op_9078_0_ffj($0) {
  function __ZL15patch_idle_timePhji (line 67946) | function __ZL15patch_idle_timePhji($0, $1) {
  function __Z12op_e020_0_ffj (line 68003) | function __Z12op_e020_0_ffj($0) {
  function __Z12op_4078_0_ffj (line 68037) | function __Z12op_4078_0_ffj($0) {
  function __Z11op_430_3_ffj (line 68059) | function __Z11op_430_3_ffj($0) {
  function __Z12op_317a_0_ffj (line 68080) | function __Z12op_317a_0_ffj($0) {
  function __Z12op_5168_0_ffj (line 68101) | function __Z12op_5168_0_ffj($0) {
  function __Z12op_117a_0_ffj (line 68122) | function __Z12op_117a_0_ffj($0) {
  function __Z11op_a70_0_ffj (line 68143) | function __Z11op_a70_0_ffj($0) {
  function __Z12op_4058_0_ffj (line 68167) | function __Z12op_4058_0_ffj($0) {
  function __Z12op_4038_0_ffj (line 68190) | function __Z12op_4038_0_ffj($0) {
  function __Z12op_c07b_0_ffj (line 68212) | function __Z12op_c07b_0_ffj($0) {
  function __Z12op_807b_0_ffj (line 68237) | function __Z12op_807b_0_ffj($0) {
  function __Z12op_13d8_0_ffj (line 68262) | function __Z12op_13d8_0_ffj($0) {
  function __Z11op_428_0_ffj (line 68285) | function __Z11op_428_0_ffj($0) {
  function __Z12op_d138_0_ffj (line 68306) | function __Z12op_d138_0_ffj($0) {
  function __Z12op_e0a8_0_ffj (line 68328) | function __Z12op_e0a8_0_ffj($0) {
  function __Z12op_5058_0_ffj (line 68364) | function __Z12op_5058_0_ffj($0) {
  function __Z11op_478_0_ffj (line 68387) | function __Z11op_478_0_ffj($0) {
  function __Z9AudioInitv (line 68409) | function __Z9AudioInitv() {
  function __Z12op_9038_0_ffj (line 68443) | function __Z12op_9038_0_ffj($0) {
  function __Z12op_c03b_0_ffj (line 68465) | function __Z12op_c03b_0_ffj($0) {
  function __Z12op_b07b_0_ffj (line 68490) | function __Z12op_b07b_0_ffj($0) {
  function __Z12op_803b_0_ffj (line 68511) | function __Z12op_803b_0_ffj($0) {
  function __Z12op_4828_0_ffj (line 68536) | function __Z12op_4828_0_ffj($0) {
  function __Z11op_c3b_0_ffj (line 68556) | function __Z11op_c3b_0_ffj($0) {
  function __Z12op_e1a8_0_ffj (line 68578) | function __Z12op_e1a8_0_ffj($0) {
  function __Z12op_5128_0_ffj (line 68614) | function __Z12op_5128_0_ffj($0) {
  function __Z12op_e040_0_ffj (line 68635) | function __Z12op_e040_0_ffj($0) {
  function __Z12op_4060_0_ffj (line 68666) | function __Z12op_4060_0_ffj($0) {
  function __Z12op_d0bb_0_ffj (line 68689) | function __Z12op_d0bb_0_ffj($0) {
  function __Z12op_91b9_0_ffj (line 68713) | function __Z12op_91b9_0_ffj($0) {
  function __Z12op_5078_0_ffj (line 68735) | function __Z12op_5078_0_ffj($0) {
  function __Z12op_13e0_0_ffj (line 68757) | function __Z12op_13e0_0_ffj($0) {
  function _scalbn (line 68780) | function _scalbn($0, $1) {
  function __Z12op_5060_0_ffj (line 68810) | function __Z12op_5060_0_ffj($0) {
  function __Z11op_4d0_0_ffj (line 68833) | function __Z11op_4d0_0_ffj($0) {
  function __Z12op_c100_1_ffj (line 68859) | function __Z12op_c100_1_ffj($0) {
  function __Z12op_c070_0_ffj (line 68882) | function __Z12op_c070_0_ffj($0) {
  function __Z12op_8070_0_ffj (line 68907) | function __Z12op_8070_0_ffj($0) {
  function __Z12op_1118_0_ffj (line 68932) | function __Z12op_1118_0_ffj($0) {
  function __Z12op_e048_0_ffj (line 68956) | function __Z12op_e048_0_ffj($0) {
  function __Z12op_23fb_3_ffj (line 68987) | function __Z12op_23fb_3_ffj($0) {
  function __Z11op_638_0_ffj (line 69008) | function __Z11op_638_0_ffj($0) {
  function __Z12op_b03b_0_ffj (line 69030) | function __Z12op_b03b_0_ffj($0) {
  function __Z11op_ab0_0_ffj (line 69051) | function __Z11op_ab0_0_ffj($0) {
  function __Z12op_33f0_3_ffj (line 69074) | function __Z12op_33f0_3_ffj($0) {
  function __Z12op_c030_0_ffj (line 69095) | function __Z12op_c030_0_ffj($0) {
  function __Z12op_b070_0_ffj (line 69120) | function __Z12op_b070_0_ffj($0) {
  function __Z12op_8030_0_ffj (line 69141) | function __Z12op_8030_0_ffj($0) {
  function __Z12op_13f0_3_ffj (line 69166) | function __Z12op_13f0_3_ffj($0) {
  function __Z11op_c30_0_ffj (line 69187) | function __Z11op_c30_0_ffj($0) {
  function __Z12op_c170_0_ffj (line 69209) | function __Z12op_c170_0_ffj($0) {
  function __Z12op_b170_0_ffj (line 69233) | function __Z12op_b170_0_ffj($0) {
  function __Z12op_33f9_0_ffj (line 69257) | function __Z12op_33f9_0_ffj($0) {
  function __Z11op_490_0_ffj (line 69278) | function __Z11op_490_0_ffj($0) {
  function __Z10op_70_0_ffj (line 69300) | function __Z10op_70_0_ffj($0) {
  function __Z12op_c130_0_ffj (line 69324) | function __Z12op_c130_0_ffj($0) {
  function __Z12op_b130_0_ffj (line 69348) | function __Z12op_b130_0_ffj($0) {
  function __Z12op_13f9_0_ffj (line 69372) | function __Z12op_13f9_0_ffj($0) {
  function __Z12op_10d8_0_ffj (line 69393) | function __Z12op_10d8_0_ffj($0) {
  function __Z12op_e000_0_ffj (line 69417) | function __Z12op_e000_0_ffj($0) {
  function __Z12op_d0b0_0_ffj (line 69448) | function __Z12op_d0b0_0_ffj($0) {
  function __Z12op_8170_0_ffj (line 69472) | function __Z12op_8170_0_ffj($0) {
  function __Z12op_2198_0_ffj (line 69496) | function __Z12op_2198_0_ffj($0) {
  function __Z12op_8130_0_ffj (line 69520) | function __Z12op_8130_0_ffj($0) {
  function __Z12op_5038_0_ffj (line 69544) | function __Z12op_5038_0_ffj($0) {
  function __Z12op_33e8_0_ffj (line 69566) | function __Z12op_33e8_0_ffj($0) {
  function __Z11op_270_0_ffj (line 69587) | function __Z11op_270_0_ffj($0) {
  function __Z12op_13e8_0_ffj (line 69611) | function __Z12op_13e8_0_ffj($0) {
  function __Z12op_4838_1_ffj (line 69632) | function __Z12op_4838_1_ffj($0) {
  function __Z12op_e008_0_ffj (line 69653) | function __Z12op_e008_0_ffj($0) {
  function __Z12op_9158_0_ffj (line 69684) | function __Z12op_9158_0_ffj($0) {
  function __Z12op_213b_0_ffj (line 69706) | function __Z12op_213b_0_ffj($0) {
  function __Z12op_4470_0_ffj (line 69730) | function __Z12op_4470_0_ffj($0) {
  function __Z12op_23fa_0_ffj (line 69753) | function __Z12op_23fa_0_ffj($0) {
  function __Z12op_1198_3_ffj (line 69774) | function __Z12op_1198_3_ffj($0) {
  function __Z12op_b030_0_ffj (line 69796) | function __Z12op_b030_0_ffj($0) {
  function __Z12op_90bb_3_ffj (line 69817) | function __Z12op_90bb_3_ffj($0) {
  function __Z12op_8100_0_ffj (line 69839) | function __Z12op_8100_0_ffj($0) {
  function __Z12op_1120_0_ffj (line 69862) | function __Z12op_1120_0_ffj($0) {
  function __Z12op_b0fb_0_ffj (line 69886) | function __Z12op_b0fb_0_ffj($0) {
  function __Z12op_51b9_0_ffj (line 69908) | function __Z12op_51b9_0_ffj($0) {
  function __Z12op_1158_0_ffj (line 69930) | function __Z12op_1158_0_ffj($0) {
  function __Z11op_450_0_ffj (line 69952) | function __Z11op_450_0_ffj($0) {
  function __Z12op_4430_0_ffj (line 69974) | function __Z12op_4430_0_ffj($0) {
  function __Z12op_20fb_0_ffj (line 69997) | function __Z12op_20fb_0_ffj($0) {
  function __Z12op_9178_0_ffj (line 70021) | function __Z12op_9178_0_ffj($0) {
  function __Z12op_9160_0_ffj (line 70042) | function __Z12op_9160_0_ffj($0) {
  function __Z12op_313b_3_ffj (line 70064) | function __Z12op_313b_3_ffj($0) {
  function __Z12op_21a0_0_ffj (line 70086) | function __Z12op_21a0_0_ffj($0) {
  function __Z12op_10e0_0_ffj (line 70110) | function __Z12op_10e0_0_ffj($0) {
  function __Z12op_21b8_0_ffj (line 70134) | function __Z12op_21b8_0_ffj($0) {
  function __Z12op_1130_3_ffj (line 70157) | function __Z12op_1130_3_ffj($0) {
  function __Z11op_2b0_0_ffj (line 70179) | function __Z11op_2b0_0_ffj($0) {
  function __Z10op_b0_0_ffj (line 70202) | function __Z10op_b0_0_ffj($0) {
  function __Z12op_2130_0_ffj (line 70225) | function __Z12op_2130_0_ffj($0) {
  function __Z12op_d050_0_ffj (line 70249) | function __Z12op_d050_0_ffj($0) {
  function __Z12op_1139_0_ffj (line 70271) | function __Z12op_1139_0_ffj($0) {
  function __Z12op_b188_0_ffj (line 70293) | function __Z12op_b188_0_ffj($0) {
  function __Z12op_90ba_0_ffj (line 70314) | function __Z12op_90ba_0_ffj($0) {
  function __Z12op_b0f0_0_ffj (line 70336) | function __Z12op_b0f0_0_ffj($0) {
  function __Z12op_11a0_3_ffj (line 70358) | function __Z12op_11a0_3_ffj($0) {
  function __Z12op_1128_0_ffj (line 70380) | function __Z12op_1128_0_ffj($0) {
  function __Z12op_ebc0_0_ffj (line 70402) | function __Z12op_ebc0_0_ffj($0) {
  function __Z12op_30fb_3_ffj (line 70431) | function __Z12op_30fb_3_ffj($0) {
  function __Z12op_10f0_3_ffj (line 70453) | function __Z12op_10f0_3_ffj($0) {
  function __Z11op_6b8_0_ffj (line 70475) | function __Z11op_6b8_0_ffj($0) {
  function __Z12op_91b0_3_ffj (line 70496) | function __Z12op_91b0_3_ffj($0) {
  function __Z12op_9138_0_ffj (line 70517) | function __Z12op_9138_0_ffj($0) {
  function __Z12op_21bb_3_ffj (line 70538) | function __Z12op_21bb_3_ffj($0) {
  function __Z12op_20f0_0_ffj (line 70558) | function __Z12op_20f0_0_ffj($0) {
  function __Z12op_10f9_0_ffj (line 70582) | function __Z12op_10f9_0_ffj($0) {
  function _fclose (line 70604) | function _fclose($0) {
  function __Z12op_51b0_3_ffj (line 70645) | function __Z12op_51b0_3_ffj($0) {
  function __Z12op_5158_0_ffj (line 70666) | function __Z12op_5158_0_ffj($0) {
  function __Z12op_313a_0_ffj (line 70688) | function __Z12op_313a_0_ffj($0) {
  function __Z12op_1160_0_ffj (line 70710) | function __Z12op_1160_0_ffj($0) {
  function __Z12op_31fb_3_ffj (line 70732) | function __Z12op_31fb_3_ffj($0) {
  function __Z12op_31b0_3_ffj (line 70753) | function __Z12op_31b0_3_ffj($0) {
  function __Z12op_10e8_0_ffj (line 70773) | function __Z12op_10e8_0_ffj($0) {
  function __Z12op_11fb_3_ffj (line 70795) | function __Z12op_11fb_3_ffj($0) {
  function __Z12op_11b0_3_ffj (line 70816) | function __Z12op_11b0_3_ffj($0) {
  function __Z12op_91a8_0_ffj (line 70836) | function __Z12op_91a8_0_ffj($0) {
  function __Z12op_31b9_3_ffj (line 70857) | function __Z12op_31b9_3_ffj($0) {
  function __Z12op_217b_3_ffj (line 70877) | function __Z12op_217b_3_ffj($0) {
  function __Z12op_e1b0_0_ffj (line 70897) | function __Z12op_e1b0_0_ffj($0) {
  function __Z12op_e0b0_0_ffj (line 70927) | function __Z12op_e0b0_0_ffj($0) {
  function __Z12op_11b9_3_ffj (line 70957) | function __Z12op_11b9_3_ffj($0) {
  function __Z12op_d010_0_ffj (line 70977) | function __Z12op_d010_0_ffj($0) {
  function __Z12op_31a8_3_ffj (line 70999) | function __Z12op_31a8_3_ffj($0) {
  function __Z12op_3170_3_ffj (line 71019) | function __Z12op_3170_3_ffj($0) {
  function __Z12op_5178_0_ffj (line 71039) | function __Z12op_5178_0_ffj($0) {
  function __Z12op_30fa_0_ffj (line 71060) | function __Z12op_30fa_0_ffj($0) {
  function __Z12op_11a8_3_ffj (line 71082) | function __Z12op_11a8_3_ffj($0) {
  function __Z12op_1170_3_ffj (line 71102) | function __Z12op_1170_3_ffj($0) {
  function __Z12op_5160_0_ffj (line 71122) | function __Z12op_5160_0_ffj($0) {
  function __Z12op_3179_0_ffj (line 71144) | function __Z12op_3179_0_ffj($0) {
  function __Z12op_30bb_0_ffj (line 71164) | function __Z12op_30bb_0_ffj($0) {
  function __Z12op_21ba_3_ffj (line 71187) | function __Z12op_21ba_3_ffj($0) {
  function __Z12op_1179_0_ffj (line 71207) | function __Z12op_1179_0_ffj($0) {
  function __Z12op_10bb_0_ffj (line 71227) | function __Z12op_10bb_0_ffj($0) {
  function __Z11op_438_0_ffj (line 71250) | function __Z11op_438_0_ffj($0) {
  function ___fseeko_unlocked (line 71271) | function ___fseeko_unlocked($0, $1, $2) {
  function __Z12op_3168_0_ffj (line 71308) | function __Z12op_3168_0_ffj($0) {
  function __Z12op_e4f0_0_ffj (line 71328) | function __Z12op_e4f0_0_ffj($0) {
  function __Z12op_e1f0_0_ffj (line 71351) | function __Z12op_e1f0_0_ffj($0) {
  function __Z12op_31fa_0_ffj (line 71374) | function __Z12op_31fa_0_ffj($0) {
  function __Z12op_3190_0_ffj (line 71395) | function __Z12op_3190_0_ffj($0) {
  function __Z12op_1168_0_ffj (line 71418) | function __Z12op_1168_0_ffj($0) {
  function __Z12op_11fa_0_ffj (line 71438) | function __Z12op_11fa_0_ffj($0) {
  function __Z12op_1190_0_ffj (line 71459) | function __Z12op_1190_0_ffj($0) {
  function __Z12op_4838_0_ffj (line 71482) | function __Z12op_4838_0_ffj($0) {
  function __Z12op_217a_0_ffj (line 71502) | function __Z12op_217a_0_ffj($0) {
  function __Z12op_5138_0_ffj (line 71522) | function __Z12op_5138_0_ffj($0) {
  function __ZN8tinyxml28MemPoolTILi52EED2Ev (line 71543) | function __ZN8tinyxml28MemPoolTILi52EED2Ev($0) {
  function __ZN8tinyxml28MemPoolTILi48EED2Ev (line 71583) | function __ZN8tinyxml28MemPoolTILi48EED2Ev($0) {
  function __ZN8tinyxml28MemPoolTILi44EED2Ev (line 71623) | function __ZN8tinyxml28MemPoolTILi44EED2Ev($0) {
  function __ZN8tinyxml28MemPoolTILi36EED2Ev (line 71663) | function __ZN8tinyxml28MemPoolTILi36EED2Ev($0) {
  function __Z12op_d1b9_0_ffj (line 71703) | function __Z12op_d1b9_0_ffj($0) {
  function __Z12op_30b0_0_ffj (line 71724) | function __Z12op_30b0_0_ffj($0) {
  function __Z11op_a30_0_ffj (line 71747) | function __Z11op_a30_0_ffj($0) {
  function ___procfdname (line 71771) | function ___procfdname($0, $1) {
  function __Z12op_51a8_0_ffj (line 71812) | function __Z12op_51a8_0_ffj($0) {
  function __Z12op_40b9_0_ffj (line 71833) | function __Z12op_40b9_0_ffj($0) {
  function __Z12op_33d8_0_ffj (line 71854) | function __Z12op_33d8_0_ffj($0) {
  function __Z12op_10b0_0_ffj (line 71876) | function __Z12op_10b0_0_ffj($0) {
  function __Z11op_ea8_0_ffj (line 71899) | function __Z11op_ea8_0_ffj($0) {
  function __Z12op_4630_0_ffj (line 71922) | function __Z12op_4630_0_ffj($0) {
  function __Z12op_e0a0_0_ffj (line 71946) | function __Z12op_e0a0_0_ffj($0) {
  function __Z12op_c07b_3_ffj (line 71979) | function __Z12op_c07b_3_ffj($0) {
  function __Z12op_807b_3_ffj (line 72001) | function __Z12op_807b_3_ffj($0) {
  function __Z11op_690_0_ffj (line 72023) | function __Z11op_690_0_ffj($0) {
  function __Z12op_4670_0_ffj (line 72044) | function __Z12op_4670_0_ffj($0) {
  function __Z12op_33e0_0_ffj (line 72068) | function __Z12op_33e0_0_ffj($0) {
  function __Z12op_33f8_0_ffj (line 72090) | function __Z12op_33f8_0_ffj($0) {
  function __Z12op_9140_0_ffj (line 72111) | function __Z12op_9140_0_ffj($0) {
  function __Z12op_13f8_0_ffj (line 72134) | function __Z12op_13f8_0_ffj($0) {
  function __Z12op_c03b_3_ffj (line 72155) | function __Z12op_c03b_3_ffj($0) {
  function __Z12op_b07b_3_ffj (line 72177) | function __Z12op_b07b_3_ffj($0) {
  function __Z12op_803b_3_ffj (line 72195) | function __Z12op_803b_3_ffj($0) {
  function __Z12op_303b_0_ffj (line 72217) | function __Z12op_303b_0_ffj($0) {
  function __Z11op_eb9_0_ffj (line 72241) | function __Z11op_eb9_0_ffj($0) {
  function _gethostname (line 72263) | function _gethostname($0, $1) {
  function __Z12op_d07c_0_ffj (line 72306) | function __Z12op_d07c_0_ffj($0) {
  function __Z12op_9050_0_ffj (line 72329) | function __Z12op_9050_0_ffj($0) {
  function __Z12op_23f0_3_ffj (line 72350) | function __Z12op_23f0_3_ffj($0) {
  function __Z12op_d0bb_3_ffj (line 72370) | function __Z12op_d0bb_3_ffj($0) {
  function __Z12op_b07a_0_ffj (line 72391) | function __Z12op_b07a_0_ffj($0) {
  function __Z12op_d150_0_ffj (line 72409) | function __Z12op_d150_0_ffj($0) {
  function __Z12op_50b9_0_ffj (line 72430) | function __Z12op_50b9_0_ffj($0) {
  function __Z12op_23f9_0_ffj (line 72451) | function __Z12op_23f9_0_ffj($0) {
  function __Z12op_b1fb_0_ffj (line 72471) | function __Z12op_b1fb_0_ffj($0) {
  function __Z12op_b0bb_0_ffj (line 72492) | function __Z12op_b0bb_0_ffj($0) {
  function __Z12op_103b_0_ffj (line 72513) | function __Z12op_103b_0_ffj($0) {
  function __Z11op_a58_0_ffj (line 72537) | function __Z11op_a58_0_ffj($0) {
  function _frexp (line 72560) | function _frexp($0, $1) {
  function __Z12op_c07a_0_ffj (line 72598) | function __Z12op_c07a_0_ffj($0) {
  function __Z12op_9100_0_ffj (line 72620) | function __Z12op_9100_0_ffj($0) {
  function __Z12op_807a_0_ffj (line 72643) | function __Z12op_807a_0_ffj($0) {
  function __Z12op_23e8_0_ffj (line 72665) | function __Z12op_23e8_0_ffj($0) {
  function __Z12WarningAlertPKc (line 72685) | function __Z12WarningAlertPKc($0) {
  function __Z12op_d140_0_ffj (line 72713) | function __Z12op_d140_0_ffj($0) {
  function __Z12op_b03b_3_ffj (line 72736) | function __Z12op_b03b_3_ffj($0) {
  function __Z11op_640_0_ffj (line 72754) | function __Z11op_640_0_ffj($0) {
  function __Z11op_610_0_ffj (line 72777) | function __Z11op_610_0_ffj($0) {
  function __Z11op_230_0_ffj (line 72798) | function __Z11op_230_0_ffj($0) {
  function __Z10op_30_0_ffj (line 72822) | function __Z10op_30_0_ffj($0) {
  function __Z10ErrorAlertPKc (line 72846) | function __Z10ErrorAlertPKc($0) {
  function __Z12op_c03a_0_ffj (line 72874) | function __Z12op_c03a_0_ffj($0) {
  function __Z12op_803a_0_ffj (line 72896) | function __Z12op_803a_0_ffj($0) {
  function __Z12op_3030_0_ffj (line 72918) | function __Z12op_3030_0_ffj($0) {
  function __Z12op_b03a_0_ffj (line 72942) | function __Z12op_b03a_0_ffj($0) {
  function __Z12op_9010_0_ffj (line 72960) | function __Z12op_9010_0_ffj($0) {
  function __Z12op_3198_3_ffj (line 72981) | function __Z12op_3198_3_ffj($0) {
  function __Z12op_d0ba_0_ffj (line 73002) | function __Z12op_d0ba_0_ffj($0) {
  function __Z12op_90b0_3_ffj (line 73023) | function __Z12op_90b0_3_ffj($0) {
  function __Z12op_d110_0_ffj (line 73044) | function __Z12op_d110_0_ffj($0) {
  function __Z12op_9198_0_ffj (line 73065) | function __Z12op_9198_0_ffj($0) {
  function __Z12op_1138_0_ffj (line 73087) | function __Z12op_1138_0_ffj($0) {
  function __Z12op_d100_0_ffj (line 73109) | function __Z12op_d100_0_ffj($0) {
  function __Z12op_b1f0_0_ffj (line 73132) | function __Z12op_b1f0_0_ffj($0) {
  function __Z12op_b0b0_0_ffj (line 73153) | function __Z12op_b0b0_0_ffj($0) {
  function __Z12op_1030_0_ffj (line 73174) | function __Z12op_1030_0_ffj($0) {
  function __Z11op_cbb_3_ffj (line 73198) | function __Z11op_cbb_3_ffj($0) {
  function __Z12op_c118_0_ffj (line 73216) | function __Z12op_c118_0_ffj($0) {
  function __Z12op_b118_0_ffj (line 73239) | function __Z12op_b118_0_ffj($0) {
  function __Z12op_90b9_0_ffj (line 73262) | function __Z12op_90b9_0_ffj($0) {
  function __Z12op_8118_0_ffj (line 73283) | function __Z12op_8118_0_ffj($0) {
  function __Z12op_11d8_0_ffj (line 73306) | function __Z12op_11d8_0_ffj($0) {
  function __Z11op_a60_0_ffj (line 73328) | function __Z11op_a60_0_ffj($0) {
  function __Z12op_d1b0_3_ffj (line 73351) | function __Z12op_d1b0_3_ffj($0) {
  function __Z12op_3158_0_ffj (line 73371) | function __Z12op_3158_0_ffj($0) {
  function __Z12op_213b_3_ffj (line 73392) | function __Z12op_213b_3_ffj($0) {
  function __Z11op_c98_0_ffj (line 73413) | function __Z11op_c98_0_ffj($0) {
  function __Z12op_90a8_0_ffj (line 73433) | function __Z12op_90a8_0_ffj($0) {
  function __Z12op_c120_0_ffj (line 73454) | function __Z12op_c120_0_ffj($0) {
  function __Z12op_b120_0_ffj (line 73477) | function __Z12op_b120_0_ffj($0) {
  function __Z12op_8120_0_ffj (line 73500) | function __Z12op_8120_0_ffj($0) {
  function __Z12op_50b0_3_ffj (line 73523) | function __Z12op_50b0_3_ffj($0) {
  function __Z12op_3130_3_ffj (line 73543) | function __Z12op_3130_3_ffj($0) {
  function __Z12op_b0fb_3_ffj (line 73564) | function __Z12op_b0fb_3_ffj($0) {
  function __Z12op_40b0_3_ffj (line 73583) | function __Z12op_40b0_3_ffj($0) {
  function __Z12op_4050_0_ffj (line 73603) | function __Z12op_4050_0_ffj($0) {
  function __Z12op_10f8_0_ffj (line 73624) | function __Z12op_10f8_0_ffj($0) {
  function __Z9op_illg_1j (line 73646) | function __Z9op_illg_1j($0) {
  function __Z12op_5050_0_ffj (line 73692) | function __Z12op_5050_0_ffj($0) {
  function __Z11op_a98_0_ffj (line 73713) | function __Z11op_a98_0_ffj($0) {
  function __Z11op_a79_0_ffj (line 73735) | function __Z11op_a79_0_ffj($0) {
  function __ZL18find_hfs_partitionR16cdrom_drive_info (line 73756) | function __ZL18find_hfs_partitionR16cdrom_drive_info($0) {
  function __Z12op_e9c0_0_ffj (line 73792) | function __Z12op_e9c0_0_ffj($0) {
  function __Z12op_d1a8_0_ffj (line 73820) | function __Z12op_d1a8_0_ffj($0) {
  function __Z12op_91b8_0_ffj (line 73840) | function __Z12op_91b8_0_ffj($0) {
  function __Z12op_91a0_0_ffj (line 73861) | function __Z12op_91a0_0_ffj($0) {
  function __Z12op_3139_0_ffj (line 73883) | function __Z12op_3139_0_ffj($0) {
  function __Z15VideoDriverOpenjj (line 73904) | function __Z15VideoDriverOpenjj($0, $1) {
  function __Z12QuitEmulatorv (line 73940) | function __Z12QuitEmulatorv() {
  function __Z10op_58_0_ffj (line 73969) | function __Z10op_58_0_ffj($0) {
  function __Z12op_c1fb_0_ffj (line 73992) | function __Z12op_c1fb_0_ffj($0) {
  function __Z12op_4010_0_ffj (line 74015) | function __Z12op_4010_0_ffj($0) {
  function __Z12op_31a0_3_ffj (line 74036) | function __Z12op_31a0_3_ffj($0) {
  function __Z12op_3128_0_ffj (line 74057) | function __Z12op_3128_0_ffj($0) {
  function __Z12op_20fb_3_ffj (line 74078) | function __Z12op_20fb_3_ffj($0) {
  function __Z11op_c18_0_ffj (line 74099) | function __Z11op_c18_0_ffj($0) {
  function __Z12op_e6f0_0_ffj (line 74119) | function __Z12op_e6f0_0_ffj($0) {
  function __Z12op_e080_0_ffj (line 74141) | function __Z12op_e080_0_ffj($0) {
  function __Z12op_40a8_0_ffj (line 74171) | function __Z12op_40a8_0_ffj($0) {
  function __Z12op_31b8_3_ffj (line 74191) | function __Z12op_31b8_3_ffj($0) {
  function __Z12op_11e0_0_ffj (line 74211) | function __Z12op_11e0_0_ffj($0) {
  function __Z11op_c58_0_ffj (line 74233) | function __Z11op_c58_0_ffj($0) {
  function __Z12op_30f0_3_ffj (line 74253) | function __Z12op_30f0_3_ffj($0) {
  function __Z12op_11b8_3_ffj (line 74274) | function __Z12op_11b8_3_ffj($0) {
  function __Z11op_cba_0_ffj (line 74294) | function __Z11op_cba_0_ffj($0) {
  function __Z11op_258_0_ffj (line 74312) | function __Z11op_258_0_ffj($0) {
  function __Z12op_c1b0_0_ffj (line 74335) | function __Z12op_c1b0_0_ffj($0) {
  function __Z12op_b1b0_0_ffj (line 74358) | function __Z12op_b1b0_0_ffj($0) {
  function __Z12op_4af0_0_ffj (line 74381) | function __Z12op_4af0_0_ffj($0) {
  function __Z11op_c7b_3_ffj (line 74404) | function __Z11op_c7b_3_ffj($0) {
  function __Z12op_213a_0_ffj (line 74422) | function __Z12op_213a_0_ffj($0) {
  function __Z11op_e50_0_ffj (line 74443) | function __Z11op_e50_0_ffj($0) {
  function __Z12op_e5f0_0_ffj (line 74472) | function __Z12op_e5f0_0_ffj($0) {
  function __Z12op_e0f0_0_ffj (line 74494) | function __Z12op_e0f0_0_ffj($0) {
  function __Z12op_81b0_0_ffj (line 74517) | function __Z12op_81b0_0_ffj($0) {
  function __Z12op_3160_0_ffj (line 74540) | function __Z12op_3160_0_ffj($0) {
  function __Z12op_30f9_0_ffj (line 74561) | function __Z12op_30f9_0_ffj($0) {
  function __Z12op_21fb_3_ffj (line 74582) | function __Z12op_21fb_3_ffj($0) {
  function __Z12op_21b0_3_ffj (line 74602) | function __Z12op_21b0_3_ffj($0) {
  function __Z11op_ca0_0_ffj (line 74621) | function __Z11op_ca0_0_ffj($0) {
  function __Z12op_3178_0_ffj (line 74641) | function __Z12op_3178_0_ffj($0) {
  function __Z11op_cb0_3_ffj (line 74661) | function __Z11op_cb0_3_ffj($0) {
  function __Z11op_c7a_0_ffj (line 74679) | function __Z11op_c7a_0_ffj($0) {
  function __Z12op_c179_0_ffj (line 74697) | function __Z12op_c179_0_ffj($0) {
  function __Z12op_b179_0_ffj (line 74718) | function __Z12op_b179_0_ffj($0) {
  function __Z12op_b0fa_0_ffj (line 74739) | function __Z12op_b0fa_0_ffj($0) {
  function __Z12op_31f0_3_ffj (line 74758) | function __Z12op_31f0_3_ffj($0) {
  function __Z12op_30e8_0_ffj (line 74778) | function __Z12op_30e8_0_ffj($0) {
  function __Z12op_1178_0_ffj (line 74799) | function __Z12op_1178_0_ffj($0) {
  function __Z12op_c139_0_ffj (line 74819) | function __Z12op_c139_0_ffj($0) {
  function __Z12op_c0fb_0_ffj (line 74840) | function __Z12op_c0fb_0_ffj($0) {
  function __Z12op_b139_0_ffj (line 74863) | function __Z12op_b139_0_ffj($0) {
  function __Z12op_5010_0_ffj (line 74884) | function __Z12op_5010_0_ffj($0) {
  function __Z12op_21b9_3_ffj (line 74905) | function __Z12op_21b9_3_ffj($0) {
  function __Z12op_11f0_3_ffj (line 74924) | function __Z12op_11f0_3_ffj($0) {
  function __Z11op_e10_0_ffj (line 74944) | function __Z11op_e10_0_ffj($0) {
  function __Z11op_cb9_0_ffj (line 74973) | function __Z11op_cb9_0_ffj($0) {
  function __Z11op_c20_0_ffj (line 74991) | function __Z11op_c20_0_ffj($0) {
  function __Z7op_illgj (line 75011) | function __Z7op_illgj($0) {
  function __Z12op_8179_0_ffj (line 75057) | function __Z12op_8179_0_ffj($0) {
  function __Z12op_5198_0_ffj (line 75078) | function __Z12op_5198_0_ffj($0) {
  function __Z11op_aa0_0_ffj (line 75100) | function __Z11op_aa0_0_ffj($0) {
  function __Z12op_8139_0_ffj (line 75122) | function __Z12op_8139_0_ffj($0) {
  function __Z12op_4810_1_ffj (line 75143) | function __Z12op_4810_1_ffj($0) {
  function __Z12op_31f9_0_ffj (line 75163) | function __Z12op_31f9_0_ffj($0) {
  function __Z12op_21a8_3_ffj (line 75183) | function __Z12op_21a8_3_ffj($0) {
  function __Z12op_2170_3_ffj (line 75202) | function __Z12op_2170_3_ffj($0) {
  function __Z11op_ab9_0_ffj (line 75221) | function __Z11op_ab9_0_ffj($0) {
  function __Z12op_c1f0_0_ffj (line 75241) | function __Z12op_c1f0_0_ffj($0) {
  function __Z12op_20fa_0_ffj (line 75264) | function __Z12op_20fa_0_ffj($0) {
  function __Z12op_11f9_0_ffj (line 75285) | function __Z12op_11f9_0_ffj($0) {
  function __Z11op_ca8_0_ffj (line 75305) | function __Z11op_ca8_0_ffj($0) {
  function __Z11op_c68_0_ffj (line 75323) | function __Z11op_c68_0_ffj($0) {
  function __Z11op_148_0_ffj (line 75341) | function __Z11op_148_0_ffj($0) {
  function __Z10op_60_0_ffj (line 75356) | function __Z10op_60_0_ffj($0) {
  function __Z12op_31e8_0_ffj (line 75379) | function __Z12op_31e8_0_ffj($0) {
  function __Z15PrefsFindStringPKci (line 75399) | function __Z15PrefsFindStringPKci($0, $1) {
  function __Z12op_2179_0_ffj (line 75440) | function __Z12op_2179_0_ffj($0) {
  function __Z12op_20bb_0_ffj (line 75459) | function __Z12op_20bb_0_ffj($0) {
  function __Z12op_11e8_0_ffj (line 75481) | function __Z12op_11e8_0_ffj($0) {
  function __Z11op_c60_0_ffj (line 75501) | function __Z11op_c60_0_ffj($0) {
  function __Z12op_e148_0_ffj (line 75521) | function __Z12op_e148_0_ffj($0) {
  function __Z12op_4479_0_ffj (line 75550) | function __Z12op_4479_0_ffj($0) {
  function __Z12op_41bb_0_ffj (line 75570) | function __Z12op_41bb_0_ffj($0) {
  function __Z12op_41b0_0_ffj (line 75597) | function __Z12op_41b0_0_ffj($0) {
  function __Z11op_c70_3_ffj (line 75623) | function __Z11op_c70_3_ffj($0) {
  function __Z11op_298_0_ffj (line 75641) | function __Z11op_298_0_ffj($0) {
  function __Z11op_260_0_ffj (line 75663) | function __Z11op_260_0_ffj($0) {
  function __Z10op_79_0_ffj (line 75686) | function __Z10op_79_0_ffj($0) {
  function __Z12op_50a8_0_ffj (line 75707) | function __Z12op_50a8_0_ffj($0) {
  function __Z12op_2168_0_ffj (line 75727) | function __Z12op_2168_0_ffj($0) {
  function __Z10op_98_0_ffj (line 75746) | function __Z10op_98_0_ffj($0) {
  function __Z12op_51b8_0_ffj (line 75768) | function __Z12op_51b8_0_ffj($0) {
  function __Z12op_21fa_0_ffj (line 75789) | function __Z12op_21fa_0_ffj($0) {
  function __Z12op_2190_0_ffj (line 75809) | function __Z12op_2190_0_ffj($0) {
  function __Z12op_51a0_0_ffj (line 75831) | function __Z12op_51a0_0_ffj($0) {
  function __Z11op_279_0_ffj (line 75853) | function __Z11op_279_0_ffj($0) {
  function __Z12op_c018_0_ffj (line 75874) | function __Z12op_c018_0_ffj($0) {
  function __Z12op_907c_0_ffj (line 75897) | function __Z12op_907c_0_ffj($0) {
  function __Z12op_8018_0_ffj (line 75919) | function __Z12op_8018_0_ffj($0) {
  function __Z11op_a18_0_ffj (line 75942) | function __Z11op_a18_0_ffj($0) {
  function __Z12op_c0f0_0_ffj (line 75965) | function __Z12op_c0f0_0_ffj($0) {
  function __Z12op_9150_0_ffj (line 75988) | function __Z12op_9150_0_ffj($0) {
  function __Z12op_4439_0_ffj (line 76008) | function __Z12op_4439_0_ffj($0) {
  function __Z12op_30bb_3_ffj (line 76028) | function __Z12op_30bb_3_ffj($0) {
  function __Z11op_c79_0_ffj (line 76048) | function __Z11op_c79_0_ffj($0) {
  function __Z12op_21bc_0_ffj (line 76066) | function __Z12op_21bc_0_ffj($0) {
  function __Z12op_10bb_3_ffj (line 76088) | function __Z12op_10bb_3_ffj($0) {
  function __Z11op_c3b_3_ffj (line 76108) | function __Z11op_c3b_3_ffj($0) {
  function __Z11op_410_0_ffj (line 76126) | function __Z11op_410_0_ffj($0) {
  function __Z12op_e108_0_ffj (line 76146) | function __Z12op_e108_0_ffj($0) {
  function __Z12op_20b0_0_ffj (line 76175) | function __Z12op_20b0_0_ffj($0) {
  function __Z11op_e98_0_ffj (line 76197) | function __Z11op_e98_0_ffj($0) {
  function __Z11op_440_0_ffj (line 76221) | function __Z11op_440_0_ffj($0) {
  function __Z11op_2b9_0_ffj (line 76243) | function __Z11op_2b9_0_ffj($0) {
  function __Z12op_23d8_0_ffj (line 76263) | function __Z12op_23d8_0_ffj($0) {
  function __Z11op_c3a_0_ffj (line 76284) | function __Z11op_c3a_0_ffj($0) {
  function __Z11op_a70_3_ffj (line 76302) | function __Z11op_a70_3_ffj($0) {
  function __Z11op_2a0_0_ffj (line 76322) | function __Z11op_2a0_0_ffj($0) {
  function __Z10op_b9_0_ffj (line 76344) | function __Z10op_b9_0_ffj($0) {
  function __Z12op_b018_0_ffj (line 76364) | function __Z12op_b018_0_ffj($0) {
  function __Z11op_a20_0_ffj (line 76383) | function __Z11op_a20_0_ffj($0) {
  function __Z10op_a0_0_ffj (line 76406) | function __Z10op_a0_0_ffj($0) {
  function __Z10op_70_3_ffj (line 76428) | function __Z10op_70_3_ffj($0) {
  function __Z12op_9110_0_ffj (line 76448) | function __Z12op_9110_0_ffj($0) {
  function __Z11op_270_3_ffj (line 76468) | function __Z11op_270_3_ffj($0) {
  function __Z12op_c020_0_ffj (line 76488) | function __Z12op_c020_0_ffj($0) {
  function __Z12op_8020_0_ffj (line 76511) | function __Z12op_8020_0_ffj($0) {
  function __Z11op_a68_0_ffj (line 76534) | function __Z11op_a68_0_ffj($0) {
  function __Z12op_30ba_0_ffj (line 76554) | function __Z12op_30ba_0_ffj($0) {
  function __Z12op_c070_3_ffj (line 76574) | function __Z12op_c070_3_ffj($0) {
  function __Z12op_9098_0_ffj (line 76595) | function __Z12op_9098_0_ffj($0) {
  function __Z12op_8070_3_ffj (line 76617) | function __Z12op_8070_3_ffj($0) {
  function __Z12op_10ba_0_ffj (line 76638) | function __Z12op_10ba_0_ffj($0) {
  function __Z12op_23f8_0_ffj (line 76658) | function __Z12op_23f8_0_ffj($0) {
  function __Z12op_b068_0_ffj (line 76678) | function __Z12op_b068_0_ffj($0) {
  function __Z11op_c28_0_ffj (line 76695) | function __Z11op_c28_0_ffj($0) {
  function __Z12op_c079_0_ffj (line 76713) | function __Z12op_c079_0_ffj($0) {
  function __Z12op_8079_0_ffj (line 76734) | function __Z12op_8079_0_ffj($0) {
  function __Z12op_5150_0_ffj (line 76755) | function __Z12op_5150_0_ffj($0) {
  function __Z12op_44b0_0_ffj (line 76775) | function __Z12op_44b0_0_ffj($0) {
  function __Z10op_18_0_ffj (line 76797) | function __Z10op_18_0_ffj($0) {
  function __Z12op_c068_0_ffj (line 76820) | function __Z12op_c068_0_ffj($0) {
  function __Z12op_c030_3_ffj (line 76841) | function __Z12op_c030_3_ffj($0) {
  function __Z12op_b070_3_ffj (line 76862) | function __Z12op_b070_3_ffj($0) {
  function __Z12op_8068_0_ffj (line 76879) | function __Z12op_8068_0_ffj($0) {
  function __Z12op_8030_3_ffj (line 76900) | function __Z12op_8030_3_ffj($0) {
  function __Z12op_23e0_0_ffj (line 76921) | function __Z12op_23e0_0_ffj($0) {
  function __Z11op_c30_3_ffj (line 76942) | function __Z11op_c30_3_ffj($0) {
  function __Z11op_218_0_ffj (line 76960) | function __Z11op_218_0_ffj($0) {
  function __Z12op_c170_3_ffj (line 76983) | function __Z12op_c170_3_ffj($0) {
  function __Z12op_b170_3_ffj (line 77003) | function __Z12op_b170_3_ffj($0) {
  function __Z12op_3118_0_ffj (line 77023) | function __Z12op_3118_0_ffj($0) {
  function __Z12op_c130_3_ffj (line 77045) | function __Z12op_c130_3_ffj($0) {
  function __Z12op_b130_3_ffj (line 77065) | function __Z12op_b130_3_ffj($0) {
  function __Z12op_b020_0_ffj (line 77085) | function __Z12op_b020_0_ffj($0) {
  function __Z12op_413b_0_ffj (line 77104) | function __Z12op_413b_0_ffj($0) {
  function __Z12op_4130_0_ffj (line 77131) | function __Z12op_4130_0_ffj($0) {
  function __Z11op_ea0_0_ffj (line 77157) | function __Z11op_ea0_0_ffj($0) {
  function __Z12op_d0b0_3_ffj (line 77181) | function __Z12op_d0b0_3_ffj($0) {
  function __Z12op_c039_0_ffj (line 77201) | function __Z12op_c039_0_ffj($0) {
  function __Z12op_b079_0_ffj (line 77222) | function __Z12op_b079_0_ffj($0) {
  function __Z12op_8170_3_ffj (line 77239) | function __Z12op_8170_3_ffj($0) {
  function __Z12op_8039_0_ffj (line 77259) | function __Z12op_8039_0_ffj($0) {
  function __Z11op_c39_0_ffj (line 77280) | function __Z11op_c39_0_ffj($0) {
  function __Z12op_d198_0_ffj (line 77298) | function __Z12op_d198_0_ffj($0) {
  function __Z12op_8130_3_ffj (line 77319) | function __Z12op_8130_3_ffj($0) {
  function __Z12op_4418_0_ffj (line 77339) | function __Z12op_4418_0_ffj($0) {
  function __Z12op_c028_0_ffj (line 77360) | function __Z12op_c028_0_ffj($0) {
  function __Z12op_8028_0_ffj (line 77381) | function __Z12op_8028_0_ffj($0) {
  function __Z12op_31bc_0_ffj (line 77402) | function __Z12op_31bc_0_ffj($0) {
  function __Z11op_ab0_3_ffj (line 77425) | function __Z11op_ab0_3_ffj($0) {
  function __Z11op_2b0_3_ffj (line 77444) | function __Z11op_2b0_3_ffj($0) {
  function __Z12op_e4f9_0_ffj (line 77463) | function __Z12op_e4f9_0_ffj($0) {
  function __Z12op_e1f9_0_ffj (line 77483) | function __Z12op_e1f9_0_ffj($0) {
  function __Z12op_d0b9_0_ffj (line 77503) | function __Z12op_d0b9_0_ffj($0) {
  function __Z12op_c168_0_ffj (line 77523) | function __Z12op_c168_0_ffj($0) {
  function __Z12op_b168_0_ffj (line 77543) | function __Z12op_b168_0_ffj($0) {
  function __Z12op_b028_0_ffj (line 77563) | function __Z12op_b028_0_ffj($0) {
  function __Z12op_4618_0_ffj (line 77580) | function __Z12op_4618_0_ffj($0) {
  function __Z12op_303b_3_ffj (line 77603) | function __Z12op_303b_3_ffj($0) {
  function __Z10op_b0_3_ffj (line 77624) | function __Z10op_b0_3_ffj($0) {
  function __Z12op_c128_0_ffj (line 77643) | function __Z12op_c128_0_ffj($0) {
  function __Z12op_b128_0_ffj (line 77663) | function __Z12op_b128_0_ffj($0) {
  function __Z12op_90a0_0_ffj (line 77683) | function __Z12op_90a0_0_ffj($0) {
  function __Z12op_d0a8_0_ffj (line 77705) | function __Z12op_d0a8_0_ffj($0) {
  function __Z12op_90b8_0_ffj (line 77725) | function __Z12op_90b8_0_ffj($0) {
  function __Z12op_8168_0_ffj (line 77746) | function __Z12op_8168_0_ffj($0) {
  function __Z12op_5110_0_ffj (line 77766) | function __Z12op_5110_0_ffj($0) {
  function __Z12op_4810_0_ffj (line 77786) | function __Z12op_4810_0_ffj($0) {
  function __Z12op_46b0_0_ffj (line 77805) | function __Z12op_46b0_0_ffj($0) {
  function __Z12op_30d8_0_ffj (line 77828) | function __Z12op_30d8_0_ffj($0) {
  function __Z10op_20_0_ffj (line 77850) | function __Z10op_20_0_ffj($0) {
  function __Z12op_b030_3_ffj (line 77873) | function __Z12op_b030_3_ffj($0) {
  function __Z12op_8128_0_ffj (line 77890) | function __Z12op_8128_0_ffj($0) {
  function __Z11op_220_0_ffj (line 77910) | function __Z11op_220_0_ffj($0) {
  function __Z10op_68_0_ffj (line 77933) | function __Z10op_68_0_ffj($0) {
  function __Z12op_c0bb_0_ffj (line 77953) | function __Z12op_c0bb_0_ffj($0) {
  function __Z12op_80bb_0_ffj (line 77976) | function __Z12op_80bb_0_ffj($0) {
  function __Z11op_aa8_0_ffj (line 77999) | function __Z11op_aa8_0_ffj($0) {
  function __Z12op_b1fb_3_ffj (line 78018) | function __Z12op_b1fb_3_ffj($0) {
  function __Z12op_b0bb_3_ffj (line 78036) | function __Z12op_b0bb_3_ffj($0) {
  function __Z12op_4098_0_ffj (line 78054) | function __Z12op_4098_0_ffj($0) {
  function __Z12op_2198_3_ffj (line 78075) | function __Z12op_2198_3_ffj($0) {
  function __Z12op_103b_3_ffj (line 78095) | function __Z12op_103b_3_ffj($0) {
  function __Z12op_e188_0_ffj (line 78116) | function __Z12op_e188_0_ffj($0) {
  function __Z12op_d1b8_0_ffj (line 78145) | function __Z12op_d1b8_0_ffj($0) {
  function __Z12op_d1a0_0_ffj (line 78165) | function __Z12op_d1a0_0_ffj($0) {
  function __Z12op_b039_0_ffj (line 78186) | function __Z12op_b039_0_ffj($0) {
  function __Z12op_4420_0_ffj (line 78203) | function __Z12op_4420_0_ffj($0) {
  function __Z11op_268_0_ffj (line 78224) | function __Z11op_268_0_ffj($0) {
  function __Z12op_4468_0_ffj (line 78244) | function __Z12op_4468_0_ffj($0) {
  function __Z12op_3120_0_ffj (line 78263) | function __Z12op_3120_0_ffj($0) {
  function ___fflush_unlocked (line 78285) | function ___fflush_unlocked($0) {
  function __Z12op_3138_0_ffj (line 78317) | function __Z12op_3138_0_ffj($0) {
  function __Z11op_a39_0_ffj (line 78338) | function __Z11op_a39_0_ffj($0) {
  function __Z12op_40b8_0_ffj (line 78359) | function __Z12op_40b8_0_ffj($0) {
  function __Z12op_4620_0_ffj (line 78379) | function __Z12op_4620_0_ffj($0) {
  function __Z12op_2158_0_ffj (line 78402) | function __Z12op_2158_0_ffj($0) {
  function __Z12op_e088_0_ffj (line 78422) | function __Z12op_e088_0_ffj($0) {
  function __Z12op_c158_0_ffj (line 78451) | function __Z12op_c158_0_ffj($0) {
  function __Z12op_b158_0_ffj (line 78473) | function __Z12op_b158_0_ffj($0) {
  function __Z12op_8158_0_ffj (line 78495) | function __Z12op_8158_0_ffj($0) {
  function __Z12op_31d8_0_ffj (line 78517) | function __Z12op_31d8_0_ffj($0) {
  function __Z12op_303a_0_ffj (line 78538) | function __Z12op_303a_0_ffj($0) {
  function __Z12op_2130_3_ffj (line 78559) | function __Z12op_2130_3_ffj($0) {
  function __Z12op_4639_0_ffj (line 78579) | function __Z12op_4639_0_ffj($0) {
  function __Z12op_4428_0_ffj (line 78600) | function __Z12op_4428_0_ffj($0) {
  function __Z12op_e7f0_0_ffj (line 78619) | function __Z12op_e7f0_0_ffj($0) {
  function __Z12op_30e0_0_ffj (line 78640) | function __Z12op_30e0_0_ffj($0) {
  function __ZN13driver_windowD0Ev (line 78662) | function __ZN13driver_windowD0Ev($0) {
  function __Z12op_c0b0_0_ffj (line 78694) | function __Z12op_c0b0_0_ffj($0) {
  function __Z12op_b0f0_3_ffj (line 78717) | function __Z12op_b0f0_3_ffj($0) {
  function __Z12op_80b0_0_ffj (line 78735) | function __Z12op_80b0_0_ffj($0) {
  function __Z12op_30f8_0_ffj (line 78758) | function __Z12op_30f8_0_ffj($0) {
  function __Z12op_2139_0_ffj (line 78779) | function __Z12op_2139_0_ffj($0) {
  function __Z12op_b1fa_0_ffj (line 78799) | function __Z12op_b1fa_0_ffj($0) {
  function __Z12op_b0ba_0_ffj (line 78817) | function __Z12op_b0ba_0_ffj($0) {
  function __Z12op_5098_0_ffj (line 78835) | function __Z12op_5098_0_ffj($0) {
  function __Z12op_4679_0_ffj (line 78856) | function __Z12op_4679_0_ffj($0) {
  function __Z12op_4470_3_ffj (line 78877) | function __Z12op_4470_3_ffj($0) {
  function __Z12op_33d0_0_ffj (line 78896) | function __Z12op_33d0_0_ffj($0) {
  function __Z12op_103a_0_ffj (line 78916) | function __Z12op_103a_0_ffj($0) {
  function __Z11op_1c8_0_ffj (line 78937) | function __Z11op_1c8_0_ffj($0) {
  function __ZN11driver_baseD0Ev (line 78953) | function __ZN11driver_baseD0Ev($0) {
  function __Z12op_40a0_0_ffj (line 78985) | function __Z12op_40a0_0_ffj($0) {
  function __Z12op_21a0_3_ffj (line 79006) | function __Z12op_21a0_3_ffj($0) {
  function __Z12op_2128_0_ffj (line 79026) | function __Z12op_2128_0_ffj($0) {
  function __Z12op_13d0_0_ffj (line 79046) | function __Z12op_13d0_0_ffj($0) {
  function __Z12op_b0f9_0_ffj (line 79066) | function __Z12op_b0f9_0_ffj($0) {
  function __Z12op_5fc8_0_ffj (line 79084) | function __Z12op_5fc8_0_ffj($0) {
  function __Z12op_21b8_3_ffj (line 79112) | function __Z12op_21b8_3_ffj($0) {
  function __Z11op_2a8_0_ffj (line 79131) | function __Z11op_2a8_0_ffj($0) {
  function __Z12op_e2f0_0_ffj (line 79150) | function __Z12op_e2f0_0_ffj($0) {
  function __Z12op_c160_0_ffj (line 79172) | function __Z12op_c160_0_ffj($0) {
  function __Z12op_b160_0_ffj (line 79194) | function __Z12op_b160_0_ffj($0) {
  function __Z12op_8160_0_ffj (line 79216) | function __Z12op_8160_0_ffj($0) {
  function __Z12op_31e0_0_ffj (line 79238) | function __Z12op_31e0_0_ffj($0) {
  function __Z12op_20f0_3_ffj (line 79259) | function __Z12op_20f0_3_ffj($0) {
  function __Z11op_eb8_0_ffj (line 79279) | function __Z11op_eb8_0_ffj($0) {
  function __Z11op_cb8_0_ffj (line 79301) | function __Z11op_cb8_0_ffj($0) {
  function __Z10op_a8_0_ffj (line 79319) | function __Z10op_a8_0_ffj($0) {
  function __Z12op_b0e8_0_ffj (line 79338) | function __Z12op_b0e8_0_ffj($0) {
  function __Z12op_31f8_0_ffj (line 79356) | function __Z12op_31f8_0_ffj($0) {
  function _tanh (line 79376) | function _tanh($0) {
  function __Z12op_4ebb_0_ffj (line 79410) | function __Z12op_4ebb_0_ffj($0) {
  function __Z12op_11f8_0_ffj (line 79430) | function __Z12op_11f8_0_ffj($0) {
  function __Z12op_1098_0_ffj (line 79450) | function __Z12op_1098_0_ffj($0) {
  function __Z12op_4430_3_ffj (line 79471) | function __Z12op_4430_3_ffj($0) {
  function __Z12op_2160_0_ffj (line 79490) | function __Z12op_2160_0_ffj($0) {
  function __Z12op_20f9_0_ffj (line 79510) | function __Z12op_20f9_0_ffj($0) {
  function __Z12op_50b8_0_ffj (line 79530) | function __Z12op_50b8_0_ffj($0) {
  function __Z12op_2178_0_ffj (line 79550) | function __Z12op_2178_0_ffj($0) {
  function __Z11op_c78_0_ffj (line 79569) | function __Z11op_c78_0_ffj($0) {
  function __Z12op_50a0_0_ffj (line 79587) | function __Z12op_50a0_0_ffj($0) {
  function __Z12op_21f0_3_ffj (line 79608) | function __Z12op_21f0_3_ffj($0) {
  function __Z12op_20e8_0_ffj (line 79627) | function __Z12op_20e8_0_ffj($0) {
  function __Z12op_c1fb_3_ffj (line 79647) | function __Z12op_c1fb_3_ffj($0) {
  function __Z11op_239_0_ffj (line 79667) | function __Z11op_239_0_ffj($0) {
  function __Z12op_e3f0_0_ffj (line 79688) | function __Z12op_e3f0_0_ffj($0) {
  function __Z12op_21f9_0_ffj (line 79709) | function __Z12op_21f9_0_ffj($0) {
  function __Z10op_39_0_ffj (line 79728) | function __Z10op_39_0_ffj($0) {
  function __Z12op_21e8_0_ffj (line 79749) | function __Z12op_21e8_0_ffj($0) {
  function __Z12op_1110_0_ffj (line 79768) | function __Z12op_1110_0_ffj($0) {
  function __Z12op_e4f0_3_ffj (line 79789) | function __Z12op_e4f0_3_ffj($0) {
  function __Z12op_e1f0_3_ffj (line 79808) | function __Z12op_e1f0_3_ffj($0) {
  function __Z12op_4eb0_0_ffj (line 79827) | function __Z12op_4eb0_0_ffj($0) {
  function __Z12op_c0fb_3_ffj (line 79847) | function __Z12op_c0fb_3_ffj($0) {
  function __Z12op_c058_0_ffj (line 79867) | function __Z12op_c058_0_ffj($0) {
  function __Z12op_8058_0_ffj (line 79889) | function __Z12op_8058_0_ffj($0) {
  function __Z12op_d048_0_ffj (line 79911) | function __Z12op_d048_0_ffj($0) {
  function __Z12op_d040_0_ffj (line 79932) | function __Z12op_d040_0_ffj($0) {
  function __Z12op_d03c_0_ffj (line 79953) | function __Z12op_d03c_0_ffj($0) {
  function __Z12op_10a0_0_ffj (line 79974) | function __Z12op_10a0_0_ffj($0) {
  function __Z12op_10d0_0_ffj (line 79995) | function __Z12op_10d0_0_ffj($0) {
  function __Z12op_c1fa_0_ffj (line 80016) | function __Z12op_c1fa_0_ffj($0) {
  function __Z12op_e4e8_0_ffj (line 80036) | function __Z12op_e4e8_0_ffj($0) {
  function __Z12op_e1e8_0_ffj (line 80055) | function __Z12op_e1e8_0_ffj($0) {
  function __Z12op_b058_0_ffj (line 80074) | function __Z12op_b058_0_ffj($0) {
  function __Z12op_90bc_0_ffj (line 80092) | function __Z12op_90bc_0_ffj($0) {
  function __Z12op_20bb_3_ffj (line 80113) | function __Z12op_20bb_3_ffj($0) {
  function __Z12op_3190_3_ffj (line 80132) | function __Z12op_3190_3_ffj($0) {
  function __Z12op_30b0_3_ffj (line 80151) | function __Z12op_30b0_3_ffj($0) {
  function __Z11op_a30_3_ffj (line 80170) | function __Z11op_a30_3_ffj($0) {
  function __Z12op_d098_0_ffj (line 80190) | function __Z12op_d098_0_ffj($0) {
  function __Z12op_1190_3_ffj (line 80211) | function __Z12op_1190_3_ffj($0) {
  function __Z12op_10b0_3_ffj (line 80230) | function __Z12op_10b0_3_ffj($0) {
  function __Z11op_600_0_ffj (line 80249) | function __Z11op_600_0_ffj($0) {
  function __Z12op_9190_0_ffj (line 80270) | function __Z12op_9190_0_ffj($0) {
  function __Z12op_4628_0_ffj (line 80290) | function __Z12op_4628_0_ffj($0) {
  function __Z11op_a78_0_ffj (line 80310) | function __Z11op_a78_0_ffj($0) {
  function __Z11op_230_3_ffj (line 80330) | function __Z11op_230_3_ffj($0) {
  function __Z12op_b078_0_ffj (line 80350) | function __Z12op_b078_0_ffj($0) {
  function __Z12op_30b9_0_ffj (line 80367) | function __Z12op_30b9_0_ffj($0) {
  function __Z11op_c38_0_ffj (line 80386) | function __Z11op_c38_0_ffj($0) {
  function __Z10op_30_3_ffj (line 80404) | function __Z10op_30_3_ffj($0) {
  function __Z12op_c0fa_0_ffj (line 80424) | function __Z12op_c0fa_0_ffj($0) {
  function __Z12op_10b9_0_ffj (line 80444) | function __Z12op_10b9_0_ffj($0) {
  function __Z12op_c060_0_ffj (line 80463) | function __Z12op_c060_0_ffj($0) {
  function __Z12op_8060_0_ffj (line 80485) | function __Z12op_8060_0_ffj($0) {
  function __Z12op_4668_0_ffj (line 80507) | function __Z12op_4668_0_ffj($0) {
  function __Z12op_3150_0_ffj (line 80527) | function __Z12op_3150_0_ffj($0) {
  function __Z12op_30a8_0_ffj (line 80546) | function __Z12op_30a8_0_ffj($0) {
  function __Z11op_a28_0_ffj (line 80565) | function __Z11op_a28_0_ffj($0) {
  function __Z11op_480_0_ffj (line 80585) | function __Z11op_480_0_ffj($0) {
  function __Z12op_e6f9_0_ffj (line 80606) | function __Z12op_e6f9_0_ffj($0) {
  function __Z12op_c078_0_ffj (line 80625) | function __Z12op_c078_0_ffj($0) {
  function __Z12op_8078_0_ffj (line 80646) | function __Z12op_8078_0_ffj($0) {
  function __Z12op_1150_0_ffj (line 80667) | function __Z12op_1150_0_ffj($0) {
  function __Z12op_10a8_0_ffj (line 80686) | function __Z12op_10a8_0_ffj($0) {
  function __Z12op_d000_0_ffj (line 80705) | function __Z12op_d000_0_ffj($0) {
  function __Z12op_c1b9_0_ffj (line 80726) | function __Z12op_c1b9_0_ffj($0) {
  function __Z12op_b1b9_0_ffj (line 80746) | function __Z12op_b1b9_0_ffj($0) {
  function __Z12op_4af9_0_ffj (line 80766) | function __Z12op_4af9_0_ffj($0) {
  function __Z12op_1018_0_ffj (line 80786) | function __Z12op_1018_0_ffj($0) {
  function __Z12op_20ba_0_ffj (line 80808) | function __Z12op_20ba_0_ffj($0) {
  function __Z12op_e5f9_0_ffj (line 80827) | function __Z12op_e5f9_0_ffj($0) {
  function __Z12op_e0f9_0_ffj (line 80846) | function __Z12op_e0f9_0_ffj($0) {
  function __Z12op_b060_0_ffj (line 80866) | function __Z12op_b060_0_ffj($0) {
  function __Z12op_81b9_0_ffj (line 80884) | function __Z12op_81b9_0_ffj($0) {
  function __Z11op_c90_0_ffj (line 80904) | function __Z11op_c90_0_ffj($0) {
  function __Z12op_c038_0_ffj (line 80922) | function __Z12op_c038_0_ffj($0) {
  function __Z12op_8038_0_ffj (line 80943) | function __Z12op_8038_0_ffj($0) {
  function __Z12op_4800_1_ffj (line 80964) | function __Z12op_4800_1_ffj($0) {
  function __Z12op_3188_0_ffj (line 80985) | function __Z12op_3188_0_ffj($0) {
  function __Z12op_3180_0_ffj (line 81007) | function __Z12op_3180_0_ffj($0) {
  function __Z12op_c178_0_ffj (line 81029) | function __Z12op_c178_0_ffj($0) {
  function __Z12op_b178_0_ffj (line 81049) | function __Z12op_b178_0_ffj($0) {
  function __Z12op_b038_0_ffj (line 81069) | function __Z12op_b038_0_ffj($0) {
  function __Z12op_5040_0_ffj (line 81086) | function __Z12op_5040_0_ffj($0) {
  function __Z12op_1180_0_ffj (line 81107) | function __Z12op_1180_0_ffj($0) {
  function __Z12op_d0a0_0_ffj (line 81129) | function __Z12op_d0a0_0_ffj($0) {
  function __Z12op_c138_0_ffj (line 81150) | function __Z12op_c138_0_ffj($0) {
  function __Z12op_b138_0_ffj (line 81170) | function __Z12op_b138_0_ffj($0) {
  function __Z12op_d0b8_0_ffj (line 81190) | function __Z12op_d0b8_0_ffj($0) {
  function __Z12op_8178_0_ffj (line 81210) | function __Z12op_8178_0_ffj($0) {
  function __Z12op_8138_0_ffj (line 81230) | function __Z12op_8138_0_ffj($0) {
  function __Z12op_4040_0_ffj (line 81250) | function __Z12op_4040_0_ffj($0) {
  function _atanh (line 81271) | function _atanh($0) {
  function __Z12op_4458_0_ffj (line 81299) | function __Z12op_4458_0_ffj($0) {
  function __Z12op_2118_0_ffj (line 81319) | function __Z12op_2118_0_ffj($0) {
  function __Z12op_11bc_0_ffj (line 81340) | function __Z12op_11bc_0_ffj($0) {
  function __Z11op_ab8_0_ffj (line 81362) | function __Z11op_ab8_0_ffj($0) {
  function __Z11op_c50_0_ffj (line 81381) | function __Z11op_c50_0_ffj($0) {
  function __Z10op_78_0_ffj (line 81399) | function __Z10op_78_0_ffj($0) {
  function __Z12op_b0d8_0_ffj (line 81419) | function __Z12op_b0d8_0_ffj($0) {
  function __Z12op_5190_0_ffj (line 81438) | function __Z12op_5190_0_ffj($0) {
  function __Z12op_4478_0_ffj (line 81458) | function __Z12op_4478_0_ffj($0) {
  function __Z12op_4630_3_ffj (line 81477) | function __Z12op_4630_3_ffj($0) {
  function __Z12op_4000_0_ffj (line 81497) | function __Z12op_4000_0_ffj($0) {
  function __Z12op_1020_0_ffj (line 81518) | function __Z12op_1020_0_ffj($0) {
  function __Z11op_278_0_ffj (line 81540) | function __Z11op_278_0_ffj($0) {
  function __Z12op_9180_0_ffj (line 81560) | function __Z12op_9180_0_ffj($0) {
  function __Z11op_228_0_ffj (line 81581) | function __Z11op_228_0_ffj($0) {
  function __Z12op_4670_3_ffj (line 81601) | function __Z12op_4670_3_ffj($0) {
  function __Z12op_4460_0_ffj (line 81621) | function __Z12op_4460_0_ffj($0) {
  function __Z12op_3030_3_ffj (line 81641) | function __Z12op_3030_3_ffj($0) {
  function __Z12op_20d8_0_ffj (line 81661) | function __Z12op_20d8_0_ffj($0) {
  function __Z10op_28_0_ffj (line 81682) | function __Z10op_28_0_ffj($0) {
  function __Z12op_5000_0_ffj (line 81702) | function __Z12op_5000_0_ffj($0) {
  function __Z12op_4438_0_ffj (line 81723) | function __Z12op_4438_0_ffj($0) {
  function __Z12op_3039_0_ffj (line 81742) | function __Z12op_3039_0_ffj($0) {
  function __Z12op_4658_0_ffj (line 81762) | function __Z12op_4658_0_ffj($0) {
  function __Z12op_203b_0_ffj (line 81784) | function __Z12op_203b_0_ffj($0) {
  function __Z12op_e8c0_0_ffj (line 81806) | function __Z12op_e8c0_0_ffj($0) {
  function __Z12op_b1f0_3_ffj (line 81832) | function __Z12op_b1f0_3_ffj($0) {
  function __Z12op_b0b0_3_ffj (line 81849) | function __Z12op_b0b0_3_ffj($0) {
  function __Z12op_3028_0_ffj (line 81866) | function __Z12op_3028_0_ffj($0) {
  function __Z12op_2120_0_ffj (line 81886) | function __Z12op_2120_0_ffj($0) {
  function __Z12op_1030_3_ffj (line 81907) | function __Z12op_1030_3_ffj($0) {
  function __Z12op_4ad8_0_ffj (line 81927) | function __Z12op_4ad8_0_ffj($0) {
  function __Z12op_2138_0_ffj (line 81948) | function __Z12op_2138_0_ffj($0) {
  function __Z12op_903c_0_ffj (line 81968) | function __Z12op_903c_0_ffj($0) {
  function __Z11op_a50_0_ffj (line 81988) | function __Z11op_a50_0_ffj($0) {
  function __Z11op_2b8_0_ffj (line 82008) | function __Z11op_2b8_0_ffj($0) {
  function __Z11op_17b_0_ffj (line 82027) | function __Z11op_17b_0_ffj($0) {
  function __Z12op_b1f9_0_ffj (line 82046) | function __Z12op_b1f9_0_ffj($0) {
  function __Z12op_b0e0_0_ffj (line 82063) | function __Z12op_b0e0_0_ffj($0) {
  function __Z12op_b0b9_0_ffj (line 82082) | function __Z12op_b0b9_0_ffj($0) {
  function __Z12op_1039_0_ffj (line 82099) | function __Z12op_1039_0_ffj($0) {
  function __Z10op_b8_0_ffj (line 82119) | function __Z10op_b8_0_ffj($0) {
  function __Z12op_b0f8_0_ffj (line 82138) | function __Z12op_b0f8_0_ffj($0) {
  function __Z12op_9048_0_ffj (line 82156) | function __Z12op_9048_0_ffj($0) {
  function __Z12op_9040_0_ffj (line 82176) | function __Z12op_9040_0_ffj($0) {
  function __Z12op_c0bb_3_ffj (line 82196) | function __Z12op_c0bb_3_ffj($0) {
  function __Z12op_b1e8_0_ffj (line 82216) | function __Z12op_b1e8_0_ffj($0) {
  function __Z12op_b0a8_0_ffj (line 82233) | function __Z12op_b0a8_0_ffj($0) {
  function __Z12op_80bb_3_ffj (line 82250) | function __Z12op_80bb_3_ffj($0) {
  function __Z12op_21d8_0_ffj (line 82270) | function __Z12op_21d8_0_ffj($0) {
  function __Z12op_1028_0_ffj (line 82290) | function __Z12op_1028_0_ffj($0) {
  function __ZN11driver_baseD2Ev (line 82310) | function __ZN11driver_baseD2Ev($0) {
  function __Z12op_d180_0_ffj (line 82340) | function __Z12op_d180_0_ffj($0) {
  function __Z10EnqueueMacjj (line 82361) | function __Z10EnqueueMacjj($0, $1) {
  function ___toread (line 82380) | function ___toread($0) {
  function __Z12op_20e0_0_ffj (line 82406) | function __Z12op_20e0_0_ffj($0) {
  function __Z12SCSICompletejjj (line 82427) | function __Z12SCSICompletejjj($0, $1, $2) {
  function __Z12op_4660_0_ffj (line 82450) | function __Z12op_4660_0_ffj($0) {
  function __Z12op_20f8_0_ffj (line 82472) | function __Z12op_20f8_0_ffj($0) {
  function __Z12op_4ae8_0_ffj (line 82492) | function __Z12op_4ae8_0_ffj($0) {
  function __Z11op_400_0_ffj (line 82511) | function __Z11op_400_0_ffj($0) {
  function __Z12op_e6f0_3_ffj (line 82531) | function __Z12op_e6f0_3_ffj($0) {
  function __Z12op_4ae0_0_ffj (line 82549) | function __Z12op_4ae0_0_ffj($0) {
  function __Z12op_2030_0_ffj (line 82570) | function __Z12op_2030_0_ffj($0) {
  function __Z12op_23fc_0_ffj (line 82592) | function __Z12op_23fc_0_ffj($0) {
  function __Z12op_c1b0_3_ffj (line 82611) | function __Z12op_c1b0_3_ffj($0) {
  function __Z12op_b1b0_3_ffj (line 82630) | function __Z12op_b1b0_3_ffj($0) {
  function __Z12op_41b9_0_ffj (line 82649) | function __Z12op_41b9_0_ffj($0) {
  function __Z12op_21f8_0_ffj (line 82672) | function __Z12op_21f8_0_ffj($0) {
  function __Z12op_e5f0_3_ffj (line 82691) | function __Z12op_e5f0_3_ffj($0) {
  function __Z12op_e0f0_3_ffj (line 82709) | function __Z12op_e0f0_3_ffj($0) {
  function __Z12op_81b0_3_ffj (line 82728) | function __Z12op_81b0_3_ffj($0) {
  function __Z12op_44b9_0_ffj (line 82747) | function __Z12op_44b9_0_ffj($0) {
  function __Z12op_41a8_0_ffj (line 82766) | function __Z12op_41a8_0_ffj($0) {
  function __Z12op_e6e8_0_ffj (line 82789) | function __Z12op_e6e8_0_ffj($0) {
  function __Z12op_9000_0_ffj (line 82807) | function __Z12op_9000_0_ffj($0) {
  function __Z12op_c0ba_0_ffj (line 82827) | function __Z12op_c0ba_0_ffj($0) {
  function __Z12op_80ba_0_ffj (line 82847) | function __Z12op_80ba_0_ffj($0) {
  function __Z12op_3098_0_ffj (line 82867) | function __Z12op_3098_0_ffj($0) {
  function __Z12op_23d0_0_ffj (line 82887) | function __Z12op_23d0_0_ffj($0) {
  function __Z11op_87b_0_ffj (line 82906) | function __Z11op_87b_0_ffj($0) {
  function __Z11op_1bb_0_ffj (line 82925) | function __Z11op_1bb_0_ffj($0) {
  function __Z11op_170_0_ffj (line 82943) | function __Z11op_170_0_ffj($0) {
  function __Z12op_e4d8_0_ffj (line 82962) | function __Z12op_e4d8_0_ffj($0) {
  function __Z12op_c1a8_0_ffj (line 82982) | function __Z12op_c1a8_0_ffj($0) {
  function __Z12op_b1a8_0_ffj (line 83001) | function __Z12op_b1a8_0_ffj($0) {
  function __Z12op_9090_0_ffj (line 83020) | function __Z12op_9090_0_ffj($0) {
  function __Z12op_4e73_4_ffj (line 83040) | function __Z12op_4e73_4_ffj($0) {
  function __Z12op_41b0_3_ffj (line 83062) | function __Z12op_41b0_3_ffj($0) {
  function __Z12op_21e0_0_ffj (line 83085) | function __Z12op_21e0_0_ffj($0) {
  function __Z10op_50_0_ffj (line 83105) | function __Z10op_50_0_ffj($0) {
  function __Z10m68k_resetv (line 83125) | function __Z10m68k_resetv() {
  function __Z12op_e5e8_0_ffj (line 83151) | function __Z12op_e5e8_0_ffj($0) {
  function __Z12op_e1d8_0_ffj (line 83169) | function __Z12op_e1d8_0_ffj($0) {
  function __Z12op_e0e8_0_ffj (line 83189) | function __Z12op_e0e8_0_ffj($0) {
  function __Z12op_81a8_0_ffj (line 83208) | function __Z12op_81a8_0_ffj($0) {
  function __Z11op_a90_0_ffj (line 83227) | function __Z11op_a90_0_ffj($0) {
  function __Z12op_c1f0_3_ffj (line 83246) | function __Z12op_c1f0_3_ffj($0) {
  function __Z12op_c100_0_ffj (line 83265) | function __Z12op_c100_0_ffj($0) {
  function __Z12op_e4f8_0_ffj (line 83285) | function __Z12op_e4f8_0_ffj($0) {
  function __Z12op_e1f8_0_ffj (line 83304) | function __Z12op_e1f8_0_ffj($0) {
  function __Z12op_5140_0_ffj (line 83323) | function __Z12op_5140_0_ffj($0) {
  function __Z11op_250_0_ffj (line 83343) | function __Z11op_250_0_ffj($0) {
  function __Z12op_d0bc_0_ffj (line 83363) | function __Z12op_d0bc_0_ffj($0) {
  function __Z12op_e178_0_ffj (line 83383) | function __Z12op_e178_0_ffj($0) {
  function __Z12op_c1f9_0_ffj (line 83409) | function __Z12op_c1f9_0_ffj($0) {
  function __Z12op_46b9_0_ffj (line 83428) | function __Z12op_46b9_0_ffj($0) {
  function __Z12op_3110_0_ffj (line 83448) | function __Z12op_3110_0_ffj($0) {
  function _realloc (line 83468) | function _realloc($0, $1) {
  function __Z11op_1fb_0_ffj (line 83498) | function __Z11op_1fb_0_ffj($0) {
  function __Z12op_e4e0_0_ffj (line 83516) | function __Z12op_e4e0_0_ffj($0) {
  function __Z12op_e1e0_0_ffj (line 83536) | function __Z12op_e1e0_0_ffj($0) {
  function __Z12op_c1e8_0_ffj (line 83556) | function __Z12op_c1e8_0_ffj($0) {
  function __Z12op_e078_0_ffj (line 83575) | function __Z12op_e078_0_ffj($0) {
  function __Z12op_d190_0_ffj (line 83601) | function __Z12op_d190_0_ffj($0) {
  function __Z12op_4af0_3_ffj (line 83620) | function __Z12op_4af0_3_ffj($0) {
  function __Z13PrefsAddInt32PKci (line 83639) | function __Z13PrefsAddInt32PKci($0, $1) {
  function __Z11op_870_0_ffj (line 83674) | function __Z11op_870_0_ffj($0) {
  function __Z12op_c198_0_ffj (line 83693) | function __Z12op_c198_0_ffj($0) {
  function __Z12op_c0f0_3_ffj (line 83714) | function __Z12op_c0f0_3_ffj($0) {
  function __Z12op_b198_0_ffj (line 83733) | function __Z12op_b198_0_ffj($0) {
  function __Z12op_8198_0_ffj (line 83754) | function __Z12op_8198_0_ffj($0) {
  function __Z12op_30a0_0_ffj (line 83775) | function __Z12op_30a0_0_ffj($0) {
  function __Z12op_4678_0_ffj (line 83795) | function __Z12op_4678_0_ffj($0) {
  function __Z12op_30b8_0_ffj (line 83815) | function __Z12op_30b8_0_ffj($0) {
  function __Z11op_a38_0_ffj (line 83834) | function __Z11op_a38_0_ffj($0) {
  function __Z11op_680_0_ffj (line 83854) | function __Z11op_680_0_ffj($0) {
  function ___divdi3 (line 83874) | function ___divdi3($a$0, $a$1, $b$0, $b$1) {
  function __Z12op_4638_0_ffj (line 83890) | function __Z12op_4638_0_ffj($0) {
  function __Z12op_30d0_0_ffj (line 83910) | function __Z12op_30d0_0_ffj($0) {
  function __Z12op_10b8_0_ffj (line 83930) | function __Z12op_10b8_0_ffj($0) {
  function __Z11op_1b0_0_ffj (line 83949) | function __Z11op_1b0_0_ffj($0) {
  function __Z13SonyInterruptv (line 83967) | function __Z13SonyInterruptv() {
  function __Z12op_c0f9_0_ffj (line 83997) | function __Z12op_c0f9_0_ffj($0) {
  function __Z11op_8bb_0_ffj (line 84016) | function __Z11op_8bb_0_ffj($0) {
  function __Z12op_e138_0_ffj (line 84034) | function __Z12op_e138_0_ffj($0) {
  function __Z12op_5100_0_ffj (line 84060) | function __Z12op_5100_0_ffj($0) {
  function __Z12op_c0e8_0_ffj (line 84080) | function __Z12op_c0e8_0_ffj($0) {
  function __Z12op_4090_0_ffj (line 84099) | function __Z12op_4090_0_ffj($0) {
  function __Z12op_2190_3_ffj (line 84118) | function __Z12op_2190_3_ffj($0) {
  function __Z12op_20b0_3_ffj (line 84136) | function __Z12op_20b0_3_ffj($0) {
  function __Z11op_290_0_ffj (line 84154) | function __Z11op_290_0_ffj($0) {
  function __Z10op_90_0_ffj (line 84173) | function __Z10op_90_0_ffj($0) {
  function __Z12op_e7f9_0_ffj (line 84192) | function __Z12op_e7f9_0_ffj($0) {
  function __Z12op_2188_0_ffj (line 84210) | function __Z12op_2188_0_ffj($0) {
  function __Z12op_2180_0_ffj (line 84231) | function __Z12op_2180_0_ffj($0) {
  function __Z12op_e038_0_ffj (line 84252) | function __Z12op_e038_0_ffj($0) {
  function __Z12op_c1a0_0_ffj (line 84278) | function __Z12op_c1a0_0_ffj($0) {
  function __Z12op_b1a0_0_ffj (line 84299) | function __Z12op_b1a0_0_ffj($0) {
  function __Z12op_81a0_0_ffj (line 84320) | function __Z12op_81a0_0_ffj($0) {
  function __Z12op_20b9_0_ffj (line 84341) | function __Z12op_20b9_0_ffj($0) {
  function __Z12op_213c_0_ffj (line 84359) | function __Z12op_213c_0_ffj($0) {
  function __Z12op_4139_0_ffj (line 84379) | function __Z12op_4139_0_ffj($0) {
  function __Z12op_21bc_3_ffj (line 84402) | function __Z12op_21bc_3_ffj($0) {
  function __Z12op_2150_0_ffj (line 84420) | function __Z12op_2150_0_ffj($0) {
  function __Z12op_20a8_0_ffj (line 84438) | function __Z12op_20a8_0_ffj($0) {
  function __Z11op_1f0_0_ffj (line 84456) | function __Z11op_1f0_0_ffj($0) {
  function __Z12op_31d0_0_ffj (line 84474) | function __Z12op_31d0_0_ffj($0) {
  function __Z12op_3018_0_ffj (line 84493) | function __Z12op_3018_0_ffj($0) {
  function __Z11op_8fb_0_ffj (line 84514) | function __Z11op_8fb_0_ffj($0) {
  function __Z11SerialPrimejji (line 84532) | function __Z11SerialPrimejji($0, $1, $2) {
  function __Z12op_e2f9_0_ffj (line 84563) | function __Z12op_e2f9_0_ffj($0) {
  function __Z12op_11d0_0_ffj (line 84582) | function __Z12op_11d0_0_ffj($0) {
  function __Z12op_5090_0_ffj (line 84601) | function __Z12op_5090_0_ffj($0) {
  function __Z11op_8b0_0_ffj (line 84620) | function __Z11op_8b0_0_ffj($0) {
  function __Z12op_4130_3_ffj (line 84638) | function __Z12op_4130_3_ffj($0) {
  function __Z12op_217c_0_ffj (line 84661) | function __Z12op_217c_0_ffj($0) {
  function __Z12op_b1d8_0_ffj (line 84679) | function __Z12op_b1d8_0_ffj($0) {
  function __Z12op_b098_0_ffj (line 84697) | function __Z12op_b098_0_ffj($0) {
  function __Z12op_20fc_0_ffj (line 84715) | function __Z12op_20fc_0_ffj($0) {
  function __Z15EtherReadPacketRjS_S_S_ (line 84735) | function __Z15EtherReadPacketRjS_S_S_($0, $1, $2, $3) {
  function __Z11op_238_0_ffj (line 84754) | function __Z11op_238_0_ffj($0) {
  function __Z10op_38_0_ffj (line 84774) | function __Z10op_38_0_ffj($0) {
  function __Z12op_e3f9_0_ffj (line 84794) | function __Z12op_e3f9_0_ffj($0) {
  function __Z12op_41bb_3_ffj (line 84812) | function __Z12op_41bb_3_ffj($0) {
  function __Z12op_4128_0_ffj (line 84835) | function __Z12op_4128_0_ffj($0) {
  function __Z11op_c10_0_ffj (line 84858) | function __Z11op_c10_0_ffj($0) {
  function __Z11SerialClosejji (line 84875) | function __Z11SerialClosejji($0, $1, $2) {
  function __Z11op_8f0_0_ffj (line 84903) | function __Z11op_8f0_0_ffj($0) {
  function __Z12op_44a8_0_ffj (line 84921) | function __Z12op_44a8_0_ffj($0) {
  function __Z12op_41ba_0_ffj (line 84939) | function __Z12op_41ba_0_ffj($0) {
  function __Z12op_3020_0_ffj (line 84962) | function __Z12op_3020_0_ffj($0) {
  function __Z19Screen_blitter_initRK12VisualFormatbi (line 84983) | function __Z19Screen_blitter_initRK12VisualFormatbi($0, $1, $2) {
  function __Z12op_3038_0_ffj (line 85010) | function __Z12op_3038_0_ffj($0) {
  function _strncat (line 85030) | function _strncat($0, $1, $2) {
  function __Z12op_b1e0_0_ffj (line 85065) | function __Z12op_b1e0_0_ffj($0) {
  function __Z12op_b0a0_0_ffj (line 85083) | function __Z12op_b0a0_0_ffj($0) {
  function __Z12op_b1f8_0_ffj (line 85101) | function __Z12op_b1f8_0_ffj($0) {
  function __Z12op_b0b8_0_ffj (line 85118) | function __Z12op_b0b8_0_ffj($0) {
  function __Z12op_4ebb_3_ffj (line 85135) | function __Z12op_4ebb_3_ffj($0) {
  function __Z12op_1038_0_ffj (line 85151) | function __Z12op_1038_0_ffj($0) {
  function __Z12op_313c_0_ffj (line 85171) | function __Z12op_313c_0_ffj($0) {
  function __Z12op_44b0_3_ffj (line 85192) | function __Z12op_44b0_3_ffj($0) {
  function __Z12op_31bc_3_ffj (line 85210) | function __Z12op_31bc_3_ffj($0) {
  function __Z12op_46a8_0_ffj (line 85229) | function __Z12op_46a8_0_ffj($0) {
  function __Z11op_17b_3_ffj (line 85248) | function __Z11op_17b_3_ffj($0) {
  function __Z12op_c050_0_ffj (line 85264) | function __Z12op_c050_0_ffj($0) {
  function __Z12op_8050_0_ffj (line 85284) | function __Z12op_8050_0_ffj($0) {
  function __Z12op_e6d8_0_ffj (line 85304) | function __Z12op_e6d8_0_ffj($0) {
  function __Z12op_c1d8_0_ffj (line 85323) | function __Z12op_c1d8_0_ffj($0) {
  function __Z12op_4af8_0_ffj (line 85343) | function __Z12op_4af8_0_ffj($0) {
  function __Z12op_30fc_0_ffj (line 85362) | function __Z12op_30fc_0_ffj($0) {
  function __Z12op_c010_0_ffj (line 85383) | function __Z12op_c010_0_ffj($0) {
  function __Z12op_b050_0_ffj (line 85403) | function __Z12op_b050_0_ffj($0) {
  function __Z12op_8010_0_ffj (line 85419) | function __Z12op_8010_0_ffj($0) {
  function __Z12op_41b8_0_ffj (line 85439) | function __Z12op_41b8_0_ffj($0) {
  function __Z12op_33fc_0_ffj (line 85462) | function __Z12op_33fc_0_ffj($0) {
  function __Z12op_e7f0_3_ffj (line 85481) | function __Z12op_e7f0_3_ffj($0) {
  function __Z12op_e6f8_0_ffj (line 85498) | function __Z12op_e6f8_0_ffj($0) {
  function __Z12op_e5d8_0_ffj (line 85516) | function __Z12op_e5d8_0_ffj($0) {
  function __Z12op_e0d8_0_ffj (line 85535) | function __Z12op_e0d8_0_ffj($0) {
  function __Z12op_c0b0_3_ffj (line 85555) | function __Z12op_c0b0_3_ffj($0) {
  function __Z12op_80b0_3_ffj (line 85574) | function __Z12op_80b0_3_ffj($0) {
  function __Z12op_203b_3_ffj (line 85593) | function __Z12op_203b_3_ffj($0) {
  function __Z12op_d090_0_ffj (line 85612) | function __Z12op_d090_0_ffj($0) {
  function __Z12op_c1b8_0_ffj (line 85631) | function __Z12op_c1b8_0_ffj($0) {
  function __Z12op_b1b8_0_ffj (line 85650) | function __Z12op_b1b8_0_ffj($0) {
  function __Z12op_46b0_3_ffj (line 85669) | function __Z12op_46b0_3_ffj($0) {
  function __Z12op_e6e0_0_ffj (line 85688) | function __Z12op_e6e0_0_ffj($0) {
  function __Z12op_e5f8_0_ffj (line 85707) | function __Z12op_e5f8_0_ffj($0) {
  function __Z12op_e0f8_0_ffj (line 85725) | function __Z12op_e0f8_0_ffj($0) {
  function __Z12op_c0b9_0_ffj (line 85744) | function __Z12op_c0b9_0_ffj($0) {
  function __Z12op_81b8_0_ffj (line 85763) | function __Z12op_81b8_0_ffj($0) {
  function __Z12op_80b9_0_ffj (line 85782) | function __Z12op_80b9_0_ffj($0) {
  function __Z12op_e7e8_0_ffj (line 85801) | function __Z12op_e7e8_0_ffj($0) {
  function __Z12op_e2f0_3_ffj (line 85818) | function __Z12op_e2f0_3_ffj($0) {
  function __Z12op_c150_0_ffj (line 85836) | function __Z12op_c150_0_ffj($0) {
  function __Z12op_c0d8_0_ffj (line 85855) | function __Z12op_c0d8_0_ffj($0) {
  function __Z12op_b150_0_ffj (line 85875) | function __Z12op_b150_0_ffj($0) {
  function __Z12op_c110_0_ffj (line 85894) | function __Z12op_c110_0_ffj($0) {
  function __Z12op_c0a8_0_ffj (line 85913) | function __Z12op_c0a8_0_ffj($0) {
  function __Z12op_b110_0_ffj (line 85932) | function __Z12op_b110_0_ffj($0) {
  function __Z12op_80a8_0_ffj (line 85951) | function __Z12op_80a8_0_ffj($0) {
  function __Z12op_4a7b_0_ffj (line 85970) | function __Z12op_4a7b_0_ffj($0) {
  function __Z12op_8150_0_ffj (line 85990) | function __Z12op_8150_0_ffj($0) {
  function __Z12op_413b_3_ffj (line 86009) | function __Z12op_413b_3_ffj($0) {
  function __Z12op_e5e0_0_ffj (line 86032) | function __Z12op_e5e0_0_ffj($0) {
  function __Z12op_e0e0_0_ffj (line 86051) | function __Z12op_e0e0_0_ffj($0) {
  function __Z12op_b010_0_ffj (line 86071) | function __Z12op_b010_0_ffj($0) {
  function __Z12op_8110_0_ffj (line 86087) | function __Z12op_8110_0_ffj($0) {
  function __Z11op_1bb_3_ffj (line 86106) | function __Z11op_1bb_3_ffj($0) {
  function __Z12op_c1e0_0_ffj (line 86121) | function __Z12op_c1e0_0_ffj($0) {
  function __Z12op_4a3b_0_ffj (line 86141) | function __Z12op_4a3b_0_ffj($0) {
  function __Z12op_4800_0_ffj (line 86161) | function __Z12op_4800_0_ffj($0) {
  function _sinh (line 86180) | function _sinh($0) {
  function __Z12op_e2e8_0_ffj (line 86208) | function __Z12op_e2e8_0_ffj($0) {
  function __Z12op_c1f8_0_ffj (line 86226) | function __Z12op_c1f8_0_ffj($0) {
  function __Z12op_2098_0_ffj (line 86245) | function __Z12op_2098_0_ffj($0) {
  function __Z19timer_host2mac_time7timeval (line 86264) | function __Z19timer_host2mac_time7timeval($0) {
  function __Z12op_33c8_0_ffj (line 86287) | function __Z12op_33c8_0_ffj($0) {
  function __Z12op_33c0_0_ffj (line 86306) | function __Z12op_33c0_0_ffj($0) {
  function __Z12op_203a_0_ffj (line 86325) | function __Z12op_203a_0_ffj($0) {
  function __Z12op_13c0_0_ffj (line 86344) | function __Z12op_13c0_0_ffj($0) {
  function __Z12op_113c_0_ffj (line 86363) | function __Z12op_113c_0_ffj($0) {
  function __Z12op_e3f0_3_ffj (line 86383) | function __Z12op_e3f0_3_ffj($0) {
  function __Z11op_858_0_ffj (line 86400) | function __Z11op_858_0_ffj($0) {
  function __Z11op_17a_0_ffj (line 86418) | function __Z11op_17a_0_ffj($0) {
  function __Z12op_13fc_0_ffj (line 86434) | function __Z12op_13fc_0_ffj($0) {
  function __Z11op_1fb_3_ffj (line 86453) | function __Z11op_1fb_3_ffj($0) {
  function __Z12op_c0e0_0_ffj (line 86468) | function __Z12op_c0e0_0_ffj($0) {
  function __Z12op_4e77_0_ffj (line 86488) | function __Z12op_4e77_0_ffj($0) {
  function __Z12op_4a70_0_ffj (line 86506) | function __Z12op_4a70_0_ffj($0) {
  function __Z12op_4450_0_ffj (line 86526) | function __Z12op_4450_0_ffj($0) {
  function __Z12op_2110_0_ffj (line 86544) | function __Z12op_2110_0_ffj($0) {
  function __Z12op_e3e8_0_ffj (line 86563) | function __Z12op_e3e8_0_ffj($0) {
  function __Z12op_c0f8_0_ffj (line 86580) | function __Z12op_c0f8_0_ffj($0) {
  function __Z12op_413a_0_ffj (line 86599) | function __Z12op_413a_0_ffj($0) {
  function __Z12op_5ec8_0_ffj (line 86622) | function __Z12op_5ec8_0_ffj($0) {
  function __Z12op_b0d0_0_ffj (line 86645) | function __Z12op_b0d0_0_ffj($0) {
  function __Z12op_4a30_0_ffj (line 86662) | function __Z12op_4a30_0_ffj($0) {
  function __Z12op_4198_0_ffj (line 86682) | function __Z12op_4198_0_ffj($0) {
  function __Z12op_e1b8_0_ffj (line 86705) | function __Z12op_e1b8_0_ffj($0) {
  function __Z11op_158_0_ffj (line 86730) | function __Z11op_158_0_ffj($0) {
  function __Z12op_20a0_0_ffj (line 86748) | function __Z12op_20a0_0_ffj($0) {
  function __Z12op_4410_0_ffj (line 86767) | function __Z12op_4410_0_ffj($0) {
  function __Z12op_20b8_0_ffj (line 86785) | function __Z12op_20b8_0_ffj($0) {
  function __Z12op_10fc_0_ffj (line 86803) | function __Z12op_10fc_0_ffj($0) {
  function __Z12op_e0b8_0_ffj (line 86823) | function __Z12op_e0b8_0_ffj($0) {
  function __Z12op_20d0_0_ffj (line 86848) | function __Z12op_20d0_0_ffj($0) {
  function __Z11op_860_0_ffj (line 86867) | function __Z11op_860_0_ffj($0) {
  function __Z11op_160_0_ffj (line 86885) | function __Z11op_160_0_ffj($0) {
  function __Z12op_4c70_0_ffj (line 86903) | function __Z12op_4c70_0_ffj($0) {
  function __Z12op_1100_0_ffj (line 86920) | function __Z12op_1100_0_ffj($0) {
  function __Z11op_e90_0_ffj (line 86940) | function __Z11op_e90_0_ffj($0) {
  function __Z12op_4abb_0_ffj (line 86960) | function __Z12op_4abb_0_ffj($0) {
  function _strtox_742 (line 86980) | function _strtox_742($0, $1, $2, $3, $4) {
  function __Z11op_1ba_0_ffj (line 87005) | function __Z11op_1ba_0_ffj($0) {
  function __Z12op_317c_0_ffj (line 87020) | function __Z12op_317c_0_ffj($0) {
  function __Z11op_898_0_ffj (line 87038) | function __Z11op_898_0_ffj($0) {
  function __Z14PrefsAddStringPKcS0_ (line 87055) | function __Z14PrefsAddStringPKcS0_($0, $1) {
  function __Z12op_41a0_0_ffj (line 87088) | function __Z12op_41a0_0_ffj($0) {
  function __ZN8tinyxml212XMLAttributeD2Ev (line 87111) | function __ZN8tinyxml212XMLAttributeD2Ev($0) {
  function __Z11op_a10_0_ffj (line 87139) | function __Z11op_a10_0_ffj($0) {
  function __Z12op_4138_0_ffj (line 87158) | function __Z12op_4138_0_ffj($0) {
  function __Z12op_21fc_0_ffj (line 87181) | function __Z12op_21fc_0_ffj($0) {
  function __Z12op_4498_0_ffj (line 87199) | function __Z12op_4498_0_ffj($0) {
  function __Z11op_198_0_ffj (line 87218) | function __Z11op_198_0_ffj($0) {
  function __Z11op_179_0_ffj (line 87235) | function __Z11op_179_0_ffj($0) {
  function __Z12op_44b8_0_ffj (line 87251) | function __Z12op_44b8_0_ffj($0) {
  function __Z12op_3188_3_ffj (line 87269) | function __Z12op_3188_3_ffj($0) {
  function __Z12op_3180_3_ffj (line 87287) | function __Z12op_3180_3_ffj($0) {
  function __Z12op_10c0_0_ffj (line 87305) | function __Z12op_10c0_0_ffj($0) {
  function __Z11op_1fa_0_ffj (line 87325) | function __Z11op_1fa_0_ffj($0) {
  function __Z12op_21d0_0_ffj (line 87340) | function __Z12op_21d0_0_ffj($0) {
  function __Z12op_1180_3_ffj (line 87358) | function __Z12op_1180_3_ffj($0) {
  function __Z11op_8d8_0_ffj (line 87376) | function __Z11op_8d8_0_ffj($0) {
  function __Z11op_1a0_0_ffj (line 87393) | function __Z11op_1a0_0_ffj($0) {
  function __Z12op_4ab0_0_ffj (line 87410) | function __Z12op_4ab0_0_ffj($0) {
  function __Z11op_8a0_0_ffj (line 87430) | function __Z11op_8a0_0_ffj($0) {
  function __Z12op_4698_0_ffj (line 87447) | function __Z12op_4698_0_ffj($0) {
  function __Z12op_3148_0_ffj (line 87467) | function __Z12op_3148_0_ffj($0) {
  function __Z12op_3140_0_ffj (line 87485) | function __Z12op_3140_0_ffj($0) {
  function __Z12op_11bc_3_ffj (line 87503) | function __Z12op_11bc_3_ffj($0) {
  function __Z9fpuop_bccjjj (line 87521) | function __Z9fpuop_bccjjj($0, $1, $2) {
  function __Z12op_1140_0_ffj (line 87551) | function __Z12op_1140_0_ffj($0) {
  function __Z11op_1d8_0_ffj (line 87569) | function __Z11op_1d8_0_ffj($0) {
  function __ZN8tinyxml210XMLElementD0Ev (line 87586) | function __ZN8tinyxml210XMLElementD0Ev($0) {
  function __Z12op_b1fc_0_ffj (line 87610) | function __Z12op_b1fc_0_ffj($0) {
  function __Z12op_b0bc_0_ffj (line 87627) | function __Z12op_b0bc_0_ffj($0) {
  function _cosh (line 87644) | function _cosh($0) {
  function __Z12op_c098_0_ffj (line 87673) | function __Z12op_c098_0_ffj($0) {
  function __Z12op_8098_0_ffj (line 87693) | function __Z12op_8098_0_ffj($0) {
  function __Z12op_46b8_0_ffj (line 87713) | function __Z12op_46b8_0_ffj($0) {
  function __Z12op_3090_0_ffj (line 87732) | function __Z12op_3090_0_ffj($0) {
  function __Z12op_e4d0_0_ffj (line 87750) | function __Z12op_e4d0_0_ffj($0) {
  function __Z12op_4118_0_ffj (line 87768) | function __Z12op_4118_0_ffj($0) {
  function __Z12op_1090_0_ffj (line 87791) | function __Z12op_1090_0_ffj($0) {
  function __Z11op_1e0_0_ffj (line 87809) | function __Z11op_1e0_0_ffj($0) {
  function __Z12op_44a0_0_ffj (line 87826) | function __Z12op_44a0_0_ffj($0) {
  function __Z12op_117c_0_ffj (line 87845) | function __Z12op_117c_0_ffj($0) {
  function __Z11op_8e0_0_ffj (line 87863) | function __Z11op_8e0_0_ffj($0) {
  function __Z12op_e1d0_0_ffj (line 87880) | function __Z12op_e1d0_0_ffj($0) {
  function __Z11op_210_0_ffj (line 87898) | function __Z11op_210_0_ffj($0) {
  function __Z11op_879_0_ffj (line 87917) | function __Z11op_879_0_ffj($0) {
  function __Z11op_1b9_0_ffj (line 87933) | function __Z11op_1b9_0_ffj($0) {
  function __Z10op_10_0_ffj (line 87948) | function __Z10op_10_0_ffj($0) {
  function __Z12op_4eb9_0_ffj (line 87967) | function __Z12op_4eb9_0_ffj($0) {
  function __Z11op_c80_0_ffj (line 87983) | function __Z11op_c80_0_ffj($0) {
  function __Z12op_4eb0_3_ffj (line 88000) | function __Z12op_4eb0_3_ffj($0) {
  function _pad_684 (line 88015) | function _pad_684($0, $1, $2, $3, $4) {
  function __Z12op_e7d8_0_ffj (line 88044) | function __Z12op_e7d8_0_ffj($0) {
  function __Z12op_46a0_0_ffj (line 88062) | function __Z12op_46a0_0_ffj($0) {
  function __Z12op_4610_0_ffj (line 88082) | function __Z12op_4610_0_ffj($0) {
  function __Z11op_170_3_ffj (line 88101) | function __Z11op_170_3_ffj($0) {
  function __Z12op_e7f8_0_ffj (line 88116) | function __Z12op_e7f8_0_ffj($0) {
  function __Z12op_c0a0_0_ffj (line 88133) | function __Z12op_c0a0_0_ffj($0) {
  function __Z12op_80a0_0_ffj (line 88153) | function __Z12op_80a0_0_ffj($0) {
  function __Z12op_4c7b_0_ffj (line 88173) | function __Z12op_4c7b_0_ffj($0) {
  function __Z12op_4120_0_ffj (line 88190) | function __Z12op_4120_0_ffj($0) {
  function __Z11op_1f9_0_ffj (line 88213) | function __Z11op_1f9_0_ffj($0) {
  function __Z12op_e2d8_0_ffj (line 88228) | function __Z12op_e2d8_0_ffj($0) {
  function __Z12op_c0b8_0_ffj (line 88247) | function __Z12op_c0b8_0_ffj($0) {
  function __Z12op_80b8_0_ffj (line 88266) | function __Z12op_80b8_0_ffj($0) {
  function __Z12op_5dc8_0_ffj (line 88285) | function __Z12op_5dc8_0_ffj($0) {
  function __Z12op_4650_0_ffj (line 88306) | function __Z12op_4650_0_ffj($0) {
  function __Z12op_e150_0_ffj (line 88325) | function __Z12op_e150_0_ffj($0) {
  function __Z12op_e050_0_ffj (line 88345) | function __Z12op_e050_0_ffj($0) {
  function __Z12op_20bc_0_ffj (line 88365) | function __Z12op_20bc_0_ffj($0) {
  function ___stdio_seek (line 88383) | function ___stdio_seek($0, $1, $2) {
  function __Z12op_e7e0_0_ffj (line 88406) | function __Z12op_e7e0_0_ffj($0) {
  function __Z12op_e2f8_0_ffj (line 88424) | function __Z12op_e2f8_0_ffj($0) {
  function __Z12op_b07c_0_ffj (line 88442) | function __Z12op_b07c_0_ffj($0) {
  function __Z12op_23c8_0_ffj (line 88459) | function __Z12op_23c8_0_ffj($0) {
  function __Z12op_23c0_0_ffj (line 88477) | function __Z12op_23c0_0_ffj($0) {
  function __Z12op_2030_3_ffj (line 88495) | function __Z12op_2030_3_ffj($0) {
  function __Z11op_8b9_0_ffj (line 88513) | function __Z11op_8b9_0_ffj($0) {
  function __Z12op_e2e0_0_ffj (line 88528) | function __Z12op_e2e0_0_ffj($0) {
  function __Z11op_87b_3_ffj (line 88547) | function __Z11op_87b_3_ffj($0) {
  function __Z12op_e110_0_ffj (line 88562) | function __Z12op_e110_0_ffj($0) {
  function __Z12op_e010_0_ffj (line 88582) | function __Z12op_e010_0_ffj($0) {
  function __Z12op_2039_0_ffj (line 88602) | function __Z12op_2039_0_ffj($0) {
  function __Z12op_e3d8_0_ffj (line 88620) | function __Z12op_e3d8_0_ffj($0) {
  function __Z12op_3010_0_ffj (line 88638) | function __Z12op_3010_0_ffj($0) {
  function __Z12op_2028_0_ffj (line 88657) | function __Z12op_2028_0_ffj($0) {
  function __Z11op_c40_0_ffj (line 88675) | function __Z11op_c40_0_ffj($0) {
  function __Z12op_e3f8_0_ffj (line 88692) | function __Z12op_e3f8_0_ffj($0) {
  function __Z12op_5cc8_0_ffj (line 88709) | function __Z12op_5cc8_0_ffj($0) {
  function __Z11op_1b0_3_ffj (line 88730) | function __Z11op_1b0_3_ffj($0) {
  function __Z11op_168_0_ffj (line 88744) | function __Z11op_168_0_ffj($0) {
  function _recvfrom (line 88759) | function _recvfrom($0, $1, $2, $3, $4, $5) {
  function __Z11op_8f9_0_ffj (line 88783) | function __Z11op_8f9_0_ffj($0) {
  function __Z12op_b1d0_0_ffj (line 88798) | function __Z12op_b1d0_0_ffj($0) {
  function __Z12op_b090_0_ffj (line 88814) | function __Z12op_b090_0_ffj($0) {
  function __Z12op_1010_0_ffj (line 88830) | function __Z12op_1010_0_ffj($0) {
  function _strcmp (line 88849) | function _strcmp($0, $1) {
  function _sendto (line 88872) | function _sendto($0, $1, $2, $3, $4, $5) {
  function _puts (line 88896) | function _puts($0) {
  function __Z12op_e3e0_0_ffj (line 88927) | function __Z12op_e3e0_0_ffj($0) {
  function __Z12op_4eba_0_ffj (line 88945) | function __Z12op_4eba_0_ffj($0) {
  function __Z11op_87a_0_ffj (line 88961) | function __Z11op_87a_0_ffj($0) {
  function __Z11op_1f0_3_ffj (line 88976) | function __Z11op_1f0_3_ffj($0) {
  function __Z12op_53c8_0_ffj (line 88990) | function __Z12op_53c8_0_ffj($0) {
  function __Z12op_52c8_0_ffj (line 89011) | function __Z12op_52c8_0_ffj($0) {
  function __Z11op_8bb_3_ffj (line 89032) | function __Z11op_8bb_3_ffj($0) {
  function __Z11op_870_3_ffj (line 89046) | function __Z11op_870_3_ffj($0) {
  function __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi (line 89061) | function __ZNK10__cxxabiv117__class_type_info24process_found_base_classE...
  function __Z12op_9088_0_ffj (line 89090) | function __Z12op_9088_0_ffj($0) {
  function __Z12op_9080_0_ffj (line 89109) | function __Z12op_9080_0_ffj($0) {
  function _ioctl (line 89128) | function _ioctl($0, $1, $varargs) {
  function __Z12op_4ea8_0_ffj (line 89148) | function __Z12op_4ea8_0_ffj($0) {
  function __Z11op_1a8_0_ffj (line 89163) | function __Z11op_1a8_0_ffj($0) {
  function __Z12op_4a7a_0_ffj (line 89177) | function __Z12op_4a7a_0_ffj($0) {
  function __Z11op_868_0_ffj (line 89194) | function __Z11op_868_0_ffj($0) {
  function _memcmp (line 89209) | function _memcmp($0, $1, $2) {
  function __Z12op_4a7b_3_ffj (line 89241) | function __Z12op_4a7b_3_ffj($0) {
  function __Z12PrefsAddBoolPKcb (line 89258) | function __Z12PrefsAddBoolPKcb($0, $1) {
  function __Z12op_807c_0_ffj (line 89290) | function __Z12op_807c_0_ffj($0) {
  function __Z12op_31fc_0_ffj (line 89309) | function __Z12op_31fc_0_ffj($0) {
  function _setsockopt (line 89327) | function _setsockopt($0, $1, $2, $3, $4) {
  function __Z12op_4a3a_0_ffj (line 89350) | function __Z12op_4a3a_0_ffj($0) {
  function __Z12op_2188_3_ffj (line 89367) | function __Z12op_2188_3_ffj($0) {
  function __Z12op_2180_3_ffj (line 89384) | function __Z12op_2180_3_ffj($0) {
  function __Z11op_8fb_3_ffj (line 89401) | function __Z11op_8fb_3_ffj($0) {
  function __Z12op_c190_0_ffj (line 89415) | function __Z12op_c190_0_ffj($0) {
  function __Z12op_c07c_0_ffj (line 89433) | function __Z12op_c07c_0_ffj($0) {
  function __Z12op_b190_0_ffj (line 89452) | function __Z12op_b190_0_ffj($0) {
  function __Z12op_4a3b_3_ffj (line 89470) | function __Z12op_4a3b_3_ffj($0) {
  function __ZN14EthernetPacketC2Ev (line 89487) | function __ZN14EthernetPacketC2Ev($0) {
  function __Z14FileDiskLayoutiPhRiS0_ (line 89514) | function __Z14FileDiskLayoutiPhRiS0_($0, $1, $2, $3) {
  function __Z12op_e6d0_0_ffj (line 89556) | function __Z12op_e6d0_0_ffj($0) {
  function __Z12op_8190_0_ffj (line 89573) | function __Z12op_8190_0_ffj($0) {
  function __Z11op_8ba_0_ffj (line 89591) | function __Z11op_8ba_0_ffj($0) {
  function __Z13PrefsFindBoolPKc (line 89605) | function __Z13PrefsFindBoolPKc($0) {
  function __Z12op_c1d0_0_ffj (line 89636) | function __Z12op_c1d0_0_ffj($0) {
  function __Z12op_5ac8_0_ffj (line 89654) | function __Z12op_5ac8_0_ffj($0) {
  function __Z12op_58c8_0_ffj (line 89675) | function __Z12op_58c8_0_ffj($0) {
  function __Z12op_56c8_0_ffj (line 89696) | function __Z12op_56c8_0_ffj($0) {
  function __Z12op_54c8_0_ffj (line 89717) | function __Z12op_54c8_0_ffj($0) {
  function __Z11op_a40_0_ffj (line 89738) | function __Z11op_a40_0_ffj($0) {
  function __Z11op_1e8_0_ffj (line 89757) | function __Z11op_1e8_0_ffj($0) {
  function _getint (line 89771) | function _getint($0) {
  function __Z12op_4ad0_0_ffj (line 89797) | function __Z12op_4ad0_0_ffj($0) {
  function __Z12op_2148_0_ffj (line 89815) | function __Z12op_2148_0_ffj($0) {
  function __Z12op_2140_0_ffj (line 89832) | function __Z12op_2140_0_ffj($0) {
  function __Z12op_b03c_0_ffj (line 89849) | function __Z12op_b03c_0_ffj($0) {
  function __Z12op_5bc8_0_ffj (line 89866) | function __Z12op_5bc8_0_ffj($0) {
  function __Z12op_59c8_0_ffj (line 89887) | function __Z12op_59c8_0_ffj($0) {
  function __Z12op_57c8_0_ffj (line 89908) | function __Z12op_57c8_0_ffj($0) {
  function __Z12op_55c8_0_ffj (line 89929) | function __Z12op_55c8_0_ffj($0) {
  function __Z11op_8b0_3_ffj (line 89950) | function __Z11op_8b0_3_ffj($0) {
  function __Z12op_e5d0_0_ffj (line 89964) | function __Z12op_e5d0_0_ffj($0) {
  function __Z12op_e0d0_0_ffj (line 89981) | function __Z12op_e0d0_0_ffj($0) {
  function __Z12op_3108_0_ffj (line 89999) | function __Z12op_3108_0_ffj($0) {
  function __Z12op_3100_0_ffj (line 90018) | function __Z12op_3100_0_ffj($0) {
  function __Z14PrefsFindInt32PKc (line 90037) | function __Z14PrefsFindInt32PKc($0) {
  function __Z11op_108_0_ffj (line 90068) | function __Z11op_108_0_ffj($0) {
  function __Z12op_5180_0_ffj (line 90081) | function __Z12op_5180_0_ffj($0) {
  function __Z12op_31c8_0_ffj (line 90100) | function __Z12op_31c8_0_ffj($0) {
  function __Z12op_31c0_0_ffj (line 90118) | function __Z12op_31c0_0_ffj($0) {
  function __Z11op_8fa_0_ffj (line 90136) | function __Z11op_8fa_0_ffj($0) {
  function __ZN8tinyxml210XMLElementD2Ev (line 90150) | function __ZN8tinyxml210XMLElementD2Ev($0) {
  function __Z16AddPrefsDefaultsv (line 90172) | function __Z16AddPrefsDefaultsv() {
  function __Z12op_c0d0_0_ffj (line 90190) | function __Z12op_c0d0_0_ffj($0) {
  function __Z12op_11c0_0_ffj (line 90208) | function __Z12op_11c0_0_ffj($0) {
  function __Z11op_8a8_0_ffj (line 90226) | function __Z11op_8a8_0_ffj($0) {
  function __Z11op_c00_0_ffj (line 90240) | function __Z11op_c00_0_ffj($0) {
  function __Z12op_30c8_0_ffj (line 90257) | function __Z12op_30c8_0_ffj($0) {
  function __Z12op_30c0_0_ffj (line 90276) | function __Z12op_30c0_0_ffj($0) {
  function __Z11op_8f0_3_ffj (line 90295) | function __Z11op_8f0_3_ffj($0) {
  function __Z12op_42b0_0_ffj (line 90309) | function __Z12op_42b0_0_ffj($0) {
  function __Z12op_4270_0_ffj (line 90328) | function __Z12op_4270_0_ffj($0) {
  function __Z12op_4230_0_ffj (line 90347) | function __Z12op_4230_0_ffj($0) {
  function __Z12op_11fc_0_ffj (line 90366) | function __Z12op_11fc_0_ffj($0) {
  function _sbrk (line 90384) | function _sbrk(increment) {
  function __Z12op_b0fc_0_ffj (line 90405) | function __Z12op_b0fc_0_ffj($0) {
  function __Z12op_4c58_0_ffj (line 90422) | function __Z12op_4c58_0_ffj($0) {
  function __Z12op_2090_0_ffj (line 90438) | function __Z12op_2090_0_ffj($0) {
  function __Z12op_4aba_0_ffj (line 90455) | function __Z12op_4aba_0_ffj($0) {
  function __Z12op_2018_0_ffj (line 90472) | function __Z12op_2018_0_ffj($0) {
  function __ZNK12monitor_desc9has_depthE11video_depth (line 90491) | function __ZNK12monitor_desc9has_depthE11video_depth($0, $1) {
  function __Z12op_4abb_3_ffj (line 90521) | function __Z12op_4abb_3_ffj($0) {
  function __Z11op_8e8_0_ffj (line 90538) | function __Z11op_8e8_0_ffj($0) {
  function __Z10op_40_0_ffj (line 90552) | function __Z10op_40_0_ffj($0) {
  function __Z11op_240_0_ffj (line 90571) | function __Z11op_240_0_ffj($0) {
  function __Z12op_4440_0_ffj (line 90590) | function __Z12op_4440_0_ffj($0) {
  function __Z12op_30bc_0_ffj (line 90608) | function __Z12op_30bc_0_ffj($0) {
  function __Z12op_4190_0_ffj (line 90626) | function __Z12op_4190_0_ffj($0) {
  function __Z12op_4c60_0_ffj (line 90647) | function __Z12op_4c60_0_ffj($0) {
  function __Z12op_4400_0_ffj (line 90663) | function __Z12op_4400_0_ffj($0) {
  function __Z12op_2020_0_ffj (line 90681) | function __Z12op_2020_0_ffj($0) {
  function __Z12op_2038_0_ffj (line 90700) | function __Z12op_2038_0_ffj($0) {
  function __Z12op_4c79_0_ffj (line 90718) | function __Z12op_4c79_0_ffj($0) {
  function __Z11op_178_0_ffj (line 90732) | function __Z11op_178_0_ffj($0) {
  function _store_int (line 90747) | function _store_int($0, $1, $2, $3) {
  function __Z12op_4c68_0_ffj (line 90797) | function __Z12op_4c68_0_ffj($0) {
  function __Z12op_e190_0_ffj (line 90811) | function __Z12op_e190_0_ffj($0) {
  function __Z12op_e090_0_ffj (line 90830) | function __Z12op_e090_0_ffj($0) {
  function __Z12op_4a18_0_ffj (line 90849) | function __Z12op_4a18_0_ffj($0) {
  function _getsockname (line 90867) | function _getsockname($0, $1, $2) {
  function __Z14AudioInterruptv (line 90888) | function __Z14AudioInterruptv() {
  function __Z13TimeToMacTimel (line 90910) | function __Z13TimeToMacTimel($0) {
  function __Z10SerialInitv (line 90924) | function __Z10SerialInitv() {
  function _connect (line 90944) | function _connect($0, $1, $2) {
  function __Z12op_4490_0_ffj (line 90965) | function __Z12op_4490_0_ffj($0) {
  function _bind (line 90982) | function _bind($0, $1, $2) {
  function __Z12op_4a20_0_ffj (line 91003) | function __Z12op_4a20_0_ffj($0) {
  function __Z12op_d088_0_ffj (line 91021) | function __Z12op_d088_0_ffj($0) {
  function __Z12op_d080_0_ffj (line 91039) | function __Z12op_d080_0_ffj($0) {
  function __Z12op_303c_0_ffj (line 91057) | function __Z12op_303c_0_ffj($0) {
  function __Z12op_b048_0_ffj (line 91076) | function __Z12op_b048_0_ffj($0) {
  function __Z12op_b040_0_ffj (line 91091) | function __Z12op_b040_0_ffj($0) {
  function __Z12op_4eb8_0_ffj (line 91106) | function __Z12op_4eb8_0_ffj($0) {
  function __Z12op_4080_0_ffj (line 91121) | function __Z12op_4080_0_ffj($0) {
  function __Z11op_1b8_0_ffj (line 91139) | function __Z11op_1b8_0_ffj($0) {
  function __Z11op_878_0_ffj (line 91153) | function __Z11op_878_0_ffj($0) {
  function __Z12op_d0fb_0_ffj (line 91168) | function __Z12op_d0fb_0_ffj($0) {
  function __Z12op_90fb_0_ffj (line 91183) | function __Z12op_90fb_0_ffj($0) {
  function __Z12op_c090_0_ffj (line 91198) | function __Z12op_c090_0_ffj($0) {
  function __Z12op_8090_0_ffj (line 91216) | function __Z12op_8090_0_ffj($0) {
  function __Z12op_4a79_0_ffj (line 91234) | function __Z12op_4a79_0_ffj($0) {
  function __Z12op_4690_0_ffj (line 91250) | function __Z12op_4690_0_ffj($0) {
  function __Z12op_413c_0_ffj (line 91268) | function __Z12op_413c_0_ffj($0) {
  function __Z12op_4110_0_ffj (line 91289) | function __Z12op_4110_0_ffj($0) {
  function __Z12op_4a68_0_ffj (line 91310) | function __Z12op_4a68_0_ffj($0) {
  function __Z12op_44fb_0_ffj (line 91326) | function __Z12op_44fb_0_ffj($0) {
  function __ZN8tinyxml212XMLAttributeD0Ev (line 91342) | function __ZN8tinyxml212XMLAttributeD0Ev($0) {
  function __Z12op_4a39_0_ffj (line 91370) | function __Z12op_4a39_0_ffj($0) {
  function __Z12op_2108_0_ffj (line 91386) | function __Z12op_2108_0_ffj($0) {
  function __Z12op_2100_0_ffj (line 91404) | function __Z12op_2100_0_ffj($0) {
  function __Z11op_1f8_0_ffj (line 91422) | function __Z11op_1f8_0_ffj($0) {
  function __Z12op_b000_0_ffj (line 91436) | function __Z12op_b000_0_ffj($0) {
  function __Z12op_4a28_0_ffj (line 91451) | function __Z12op_4a28_0_ffj($0) {
  function __Z12op_4a70_3_ffj (line 91467) | function __Z12op_4a70_3_ffj($0) {
  function _fwrite (line 91483) | function _fwrite($0, $1, $2, $3) {
  function __Z12op_e7d0_0_ffj (line 91510) | function __Z12op_e7d0_0_ffj($0) {
  function __Z12op_d0f0_0_ffj (line 91526) | function __Z12op_d0f0_0_ffj($0) {
  function __Z12op_90f0_0_ffj (line 91541) | function __Z12op_90f0_0_ffj($0) {
  function __Z12op_5080_0_ffj (line 91556) | function __Z12op_5080_0_ffj($0) {
  function __Z12op_4a30_3_ffj (line 91574) | function __Z12op_4a30_3_ffj($0) {
  function __Z12op_21c8_0_ffj (line 91590) | function __Z12op_21c8_0_ffj($0) {
  function __Z12op_21c0_0_ffj (line 91607) | function __Z12op_21c0_0_ffj($0) {
  function __Z12op_20c8_0_ffj (line 91624) | function __Z12op_20c8_0_ffj($0) {
  function __Z12op_20c0_0_ffj (line 91642) | function __Z12op_20c0_0_ffj($0) {
  function __Z12op_5ff0_0_ffj (line 91660) | function __Z12op_5ff0_0_ffj($0) {
  function __Z11op_8b8_0_ffj (line 91678) | function __Z11op_8b8_0_ffj($0) {
  function __Z12op_e2d0_0_ffj (line 91692) | function __Z12op_e2d0_0_ffj($0) {
  function __Z12op_44f0_0_ffj (line 91709) | function __Z12op_44f0_0_ffj($0) {
  function __Z12op_c0bc_0_ffj (line 91725) | function __Z12op_c0bc_0_ffj($0) {
  function __Z12op_5ef0_0_ffj (line 91742) | function __Z12op_5ef0_0_ffj($0) {
  function _fmt_x (line 91760) | function _fmt_x($0, $1, $2, $3) {
  function __Z12op_80bc_0_ffj (line 91787) | function __Z12op_80bc_0_ffj($0) {
  function __Z12op_46fb_0_ffj (line 91804) | function __Z12op_46fb_0_ffj($0) {
  function __Z12op_203c_0_ffj (line 91823) | function __Z12op_203c_0_ffj($0) {
  function _opendir (line 91841) | function _opendir($0) {
  function __Z12op_b0c8_0_ffj (line 91868) | function __Z12op_b0c8_0_ffj($0) {
  function __Z12op_b0c0_0_ffj (line 91884) | function __Z12op_b0c0_0_ffj($0) {
  function __Z12op_4c7a_0_ffj (line 91900) | function __Z12op_4c7a_0_ffj($0) {
  function __Z11op_8f8_0_ffj (line 91914) | function __Z11op_8f8_0_ffj($0) {
  function __Z11op_a80_0_ffj (line 91928) | function __Z11op_a80_0_ffj($0) {
  function __Z12op_d1fb_0_ffj (line 91945) | function __Z12op_d1fb_0_ffj($0) {
  function __Z12op_91fb_0_ffj (line 91960) | function __Z12op_91fb_0_ffj($0) {
  function __Z12op_4ab9_0_ffj (line 91975) | function __Z12op_4ab9_0_ffj($0) {
  function __Z12op_e3d0_0_ffj (line 91991) | function __Z12op_e3d0_0_ffj($0) {
  function _lseek (line 92007) | function _lseek($0, $1, $2) {
  function __Z12op_4aa8_0_ffj (line 92025) | function __Z12op_4aa8_0_ffj($0) {
  function ___stdout_write (line 92041) | function ___stdout_write($0, $1, $2) {
  function __Z12op_10bc_0_ffj (line 92062) | function __Z12op_10bc_0_ffj($0) {
  function __Z12op_46f0_0_ffj (line 92079) | function __Z12op_46f0_0_ffj($0) {
  function __Z12op_c040_0_ffj (line 92098) | function __Z12op_c040_0_ffj($0) {
  function __Z12op_b140_0_ffj (line 92116) | function __Z12op_b140_0_ffj($0) {
  function __Z12op_8040_0_ffj (line 92134) | function __Z12op_8040_0_ffj($0) {
  function __Z12op_4ab0_3_ffj (line 92152) | function __Z12op_4ab0_3_ffj($0) {
  function __Z12op_40f0_0_ffj (line 92168) | function __Z12op_40f0_0_ffj($0) {
  function __Z11ether_writej (line 92187) | function __Z11ether_writej($0) {
  function __Z12op_4c3b_0_ffj (line 92201) | function __Z12op_4c3b_0_ffj($0) {
  function __Z12op_d1f0_0_ffj (line 92215) | function __Z12op_d1f0_0_ffj($0) {
  function __Z12op_c000_0_ffj (line 92230) | function __Z12op_c000_0_ffj($0) {
  function __Z12op_b100_0_ffj (line 92248) | function __Z12op_b100_0_ffj($0) {
  function __Z12op_91f0_0_ffj (line 92266) | function __Z12op_91f0_0_ffj($0) {
  function __Z12op_8000_0_ffj (line 92281) | function __Z12op_8000_0_ffj($0) {
  function __Z11op_280_0_ffj (line 92299) | function __Z11op_280_0_ffj($0) {
  function __Z11op_188_0_ffj (line 92316) | function __Z11op_188_0_ffj($0) {
  function __Z12op_4e74_0_ffj (line 92328) | function __Z12op_4e74_0_ffj($0) {
  function __Z12op_4c78_0_ffj (line 92343) | function __Z12op_4c78_0_ffj($0) {
  function ___towrite (line 92357) | function ___towrite($0) {
  function __Z11op_13b_0_ffj (line 92378) | function __Z11op_13b_0_ffj($0) {
  function __Z10op_80_0_ffj (line 92392) | function __Z10op_80_0_ffj($0) {
  function __Z7SCSICmdiPh (line 92409) | function __Z7SCSICmdiPh($0, $1) {
  function __Z12op_3088_0_ffj (line 92445) | function __Z12op_3088_0_ffj($0) {
  function __Z12op_3080_0_ffj (line 92462) | function __Z12op_3080_0_ffj($0) {
  function __Z12op_4efb_0_ffj (line 92479) | function __Z12op_4efb_0_ffj($0) {
  function __Z12op_1080_0_ffj (line 92495) | function __Z12op_1080_0_ffj($0) {
  function __Z12op_c1fc_0_ffj (line 92512) | function __Z12op_c1fc_0_ffj($0) {
  function __Z12op_4c30_0_ffj (line 92529) | function __Z12op_4c30_0_ffj($0) {
  function _remove (line 92543) | function _remove($0) {
  function __Z12op_4a58_0_ffj (line 92563) | function __Z12op_4a58_0_ffj($0) {
  function __Z11op_130_0_ffj (line 92580) | function __Z11op_130_0_ffj($0) {
  function __Z12op_4ef0_0_ffj (line 92594) | function __Z12op_4ef0_0_ffj($0) {
  function __Z13SerialControljji (line 92610) | function __Z13SerialControljji($0, $1, $2) {
  function __Z12op_803c_0_ffj (line 92629) | function __Z12op_803c_0_ffj($0) {
  function __Z12op_4a60_0_ffj (line 92647) | function __Z12op_4a60_0_ffj($0) {
  function __Z12op_42b9_0_ffj (line 92664) | function __Z12op_42b9_0_ffj($0) {
  function __Z12op_4279_0_ffj (line 92680) | function __Z12op_4279_0_ffj($0) {
  function __Z12op_4239_0_ffj (line 92696) | function __Z12op_4239_0_ffj($0) {
  function __Z12op_4a78_0_ffj (line 92712) | function __Z12op_4a78_0_ffj($0) {
  function __Z12op_c03c_0_ffj (line 92728) | function __Z12op_c03c_0_ffj($0) {
  function __Z12op_41bc_0_ffj (line 92746) | function __Z12op_41bc_0_ffj($0) {
  function __Z11op_83b_0_ffj (line 92767) | function __Z11op_83b_0_ffj($0) {
  function __Z9Sys_writePvS_ij (line 92781) | function __Z9Sys_writePvS_ij($0, $1, $2, $3) {
  function __Z14SoundInControljj (line 92804) | function __Z14SoundInControljj($0, $1) {
  function __Z9VideoExitv (line 92830) | function __Z9VideoExitv() {
  function __Z12op_4a38_0_ffj (line 92853) | function __Z12op_4a38_0_ffj($0) {
  function __Z12op_487b_0_ffj (line 92869) | function __Z12op_487b_0_ffj($0) {
  function __Z8Sys_readPvS_ij (line 92884) | function __Z8Sys_readPvS_ij($0, $1, $2, $3) {
  function __Z12op_e158_0_ffj (line 92907) | function __Z12op_e158_0_ffj($0) {
  function __Z12op_4808_0_ffj (line 92924) | function __Z12op_4808_0_ffj($0) {
  function __Z9CDROMExitv (line 92937) | function __Z9CDROMExitv() {
  function __Z12op_b1c8_0_ffj (line 92958) | function __Z12op_b1c8_0_ffj($0) {
  function __Z12op_b1c0_0_ffj (line 92973) | function __Z12op_b1c0_0_ffj($0) {
  function __Z12op_b088_0_ffj (line 92988) | function __Z12op_b088_0_ffj($0) {
  function __Z12op_b080_0_ffj (line 93003) | function __Z12op_b080_0_ffj($0) {
  function __ZNK8tinyxml210XMLElement6AcceptEPNS_10XMLVisitorE (line 93018) | function __ZNK8tinyxml210XMLElement6AcceptEPNS_10XMLVisitorE($0, $1) {
  function __Z12op_c0fc_0_ffj (line 93038) | function __Z12op_c0fc_0_ffj($0) {
  function __Z12op_3008_0_ffj (line 93055) | function __Z12op_3008_0_ffj($0) {
  function __Z12op_3000_0_ffj (line 93073) | function __Z12op_3000_0_ffj($0) {
  function __Z11op_a00_0_ffj (line 93091) | function __Z11op_a00_0_ffj($0) {
  function __Z12op_4e90_0_ffj (line 93109) | function __Z12op_4e90_0_ffj($0) {
  function __Z12op_2010_0_ffj (line 93123) | function __Z12op_2010_0_ffj($0) {
  function __Z8DiskExitv (line 93140) | function __Z8DiskExitv() {
  function __Z12op_103c_0_ffj (line 93161) | function __Z12op_103c_0_ffj($0) {
  function __ZN16SDL_monitor_desc22switch_to_current_modeEv (line 93179) | function __ZN16SDL_monitor_desc22switch_to_current_modeEv($0) {
  function __Z12op_4c50_0_ffj (line 93201) | function __Z12op_4c50_0_ffj($0) {
  function __Z11op_830_0_ffj (line 93215) | function __Z11op_830_0_ffj($0) {
  function ___string_read (line 93229) | function ___string_read($0, $1, $2) {
  function __Z12op_d0fb_3_ffj (line 93247) | function __Z12op_d0fb_3_ffj($0) {
  function __Z12op_90fb_3_ffj (line 93259) | function __Z12op_90fb_3_ffj($0) {
  function __Z12op_4a98_0_ffj (line 93271) | function __Z12op_4a98_0_ffj($0) {
  function __Z12op_1000_0_ffj (line 93288) | function __Z12op_1000_0_ffj($0) {
  function __Z11op_850_0_ffj (line 93306) | function __Z11op_850_0_ffj($0) {
  function __Z12op_4870_0_ffj (line 93320) | function __Z12op_4870_0_ffj($0) {
  function __Z11op_150_0_ffj (line 93335) | function __Z11op_150_0_ffj($0) {
  function _select (line 93349) | function _select($0, $1, $2, $3, $4) {
  function _fmt_o (line 93368) | function _fmt_o($0, $1, $2) {
  function __Z12op_e058_0_ffj (line 93394) | function __Z12op_e058_0_ffj($0) {
  function __ZN14EthernetPacketD2Ev (line 93411) | function __ZN14EthernetPacketD2Ev($0) {
  function __Z12op_4640_0_ffj (line 93435) | function __Z12op_4640_0_ffj($0) {
  function __Z12op_4ab8_0_ffj (line 93453) | function __Z12op_4ab8_0_ffj($0) {
  function __Z12op_4600_0_ffj (line 93469) | function __Z12op_4600_0_ffj($0) {
  function __Z12op_d0fa_0_ffj (line 93487) | function __Z12op_d0fa_0_ffj($0) {
  function __Z12op_90fa_0_ffj (line 93499) | function __Z12op_90fa_0_ffj($0) {
  function __Z12op_4220_0_ffj (line 93511) | function __Z12op_4220_0_ffj($0) {
  function __Z8SonyExitv (line 93528) | function __Z8SonyExitv() {
  function __Z12op_4aa0_0_ffj (line 93549) | function __Z12op_4aa0_0_ffj($0) {
  function __Z12op_44fb_3_ffj (line 93566) | function __Z12op_44fb_3_ffj($0) {
  function __Z12MicrosecondsRjS_ (line 93579) | function __Z12MicrosecondsRjS_($0, $1) {
  function __Z11op_200_0_ffj (line 93596) | function __Z11op_200_0_ffj($0) {
  function _vsscanf (line 93614) | function _vsscanf($0, $1, $2) {
  function __Z9op_0_0_ffj (line 93636) | function __Z9op_0_0_ffj($0) {
  function __Z12op_e018_0_ffj (line 93654) | function __Z12op_e018_0_ffj($0) {
  function __Z12op_44fa_0_ffj (line 93671) | function __Z12op_44fa_0_ffj($0) {
  function __Z11op_890_0_ffj (line 93684) | function __Z11op_890_0_ffj($0) {
  function __Z11op_190_0_ffj (line 93697) | function __Z11op_190_0_ffj($0) {
  function __Z12op_4218_0_ffj (line 93710) | function __Z12op_4218_0_ffj($0) {
  function __Z12op_4270_3_ffj (line 93727) | function __Z12op_4270_3_ffj($0) {
  function __Z12op_4230_3_ffj (line 93742) | function __Z12op_4230_3_ffj($0) {
  function __ZNK8tinyxml211XMLDocument6AcceptEPNS_10XMLVisitorE (line 93757) | function __ZNK8tinyxml211XMLDocument6AcceptEPNS_10XMLVisitorE($0, $1) {
  function __Z12op_42a8_0_ffj (line 93777) | function __Z12op_42a8_0_ffj($0) {
  function __Z12op_4268_0_ffj (line 93792) | function __Z12op_4268_0_ffj($0) {
  function __Z12op_4228_0_ffj (line 93807) | function __Z12op_4228_0_ffj($0) {
  function __Z12m68k_executev (line 93822) | function __Z12m68k_executev() {
  function __Z11op_8d0_0_ffj (line 93846) | function __Z11op_8d0_0_ffj($0) {
  function __Z12op_d1fb_3_ffj (line 93859) | function __Z12op_d1fb_3_ffj($0) {
  function __Z12op_91fb_3_ffj (line 93871) | function __Z12op_91fb_3_ffj($0) {
  function __Z12op_2088_0_ffj (line 93883) | function __Z12op_2088_0_ffj($0) {
  function __Z12op_2080_0_ffj (line 93899) | function __Z12op_2080_0_ffj($0) {
  function __Z11op_1d0_0_ffj (line 93915) | function __Z11op_1d0_0_ffj($0) {
  function __Z12op_61ff_0_ffj (line 93928) | function __Z12op_61ff_0_ffj($0) {
  function __Z12op_46fb_3_ffj (line 93940) | function __Z12op_46fb_3_ffj($0) {
  function __Z12op_42b0_3_ffj (line 93956) | function __Z12op_42b0_3_ffj($0) {
  function __ZNSt3__26__treeINS_12__value_typeItjEENS_19__map_value_compareItS2_NS_4lessItEELb1EEENS_9allocatorIS2_EEE7destroyEPNS_11__tree_nodeIS2_PvEE (line 93971) | function __ZNSt3__26__treeINS_12__value_typeItjEENS_19__map_value_compar...
  function __Z12op_307b_0_ffj (line 93983) | function __Z12op_307b_0_ffj($0) {
  function _perror (line 93996) | function _perror($0) {
  function __Z12op_46fa_0_ffj (line 94020) | function __Z12op_46fa_0_ffj($0) {
  function __Z11op_13b_3_ffj (line 94036) | function __Z11op_13b_3_ffj($0) {
  function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib (line 94047) | function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_1...
  function __Z12op_d1fa_0_ffj (line 94063) | function __Z12op_d1fa_0_ffj($0) {
  function __Z12op_91fa_0_ffj (line 94075) | function __Z12op_91fa_0_ffj($0) {
  function ___fmodeflags (line 94087) | function ___fmodeflags($0) {
  function __Z12op_e118_0_ffj (line 94101) | function __Z12op_e118_0_ffj($0) {
  function __Z12op_3070_0_ffj (line 94117) | function __Z12op_3070_0_ffj($0) {
  function __Z11op_818_0_ffj (line 94130) | function __Z11op_818_0_ffj($0) {
  function __Z11op_13a_0_ffj (line 94143) | function __Z11op_13a_0_ffj($0) {
  function __Z12op_5df0_0_ffj (line 94154) | function __Z12op_5df0_0_ffj($0) {
  function __Z12op_5cf0_0_ffj (line 94167) | function __Z12op_5cf0_0_ffj($0) {
  function __Z12op_4c7c_0_ffj (line 94180) | function __Z12op_4c7c_0_ffj($0) {
  function __Z11op_118_0_ffj (line 94193) | function __Z11op_118_0_ffj($0) {
  function __Z12op_c1c0_0_ffj (line 94206) | function __Z12op_c1c0_0_ffj($0) {
  function __Z12op_42f0_0_ffj (line 94222) | function __Z12op_42f0_0_ffj($0) {
  function __Z12op_207b_0_ffj (line 94236) | function __Z12op_207b_0_ffj($0) {
  function __ZNK8tinyxml210XMLElement7GetTextEv (line 94249) | function __ZNK8tinyxml210XMLElement7GetTextEv($0) {
  function __Z12op_4c18_0_ffj (line 94266) | function __Z12op_4c18_0_ffj($0) {
  function __Z11op_120_0_ffj (line 94279) | function __Z11op_120_0_ffj($0) {
  function __Z12op_5fe0_0_ffj (line 94292) | function __Z12op_5fe0_0_ffj($0) {
  function __Z12op_c0c0_0_ffj (line 94308) | function __Z12op_c0c0_0_ffj($0) {
  function __Z12op_52f0_0_ffj (line 94324) | function __Z12op_52f0_0_ffj($0) {
  function __Z12op_5ee0_0_ffj (line 94337) | function __Z12op_5ee0_0_ffj($0) {
  function __Z11op_820_0_ffj (line 94353) | function __Z11op_820_0_ffj($0) {
  function __Z12op_d0f0_3_ffj (line 94366) | function __Z12op_d0f0_3_ffj($0) {
  function __Z12op_90f0_3_ffj (line 94377) | function __Z12op_90f0_3_ffj($0) {
  function __Z12op_4e50_0_ffj (line 94388) | function __Z12op_4e50_0_ffj($0) {
  function __Z12op_4180_0_ffj (line 94401) | function __Z12op_4180_0_ffj($0) {
  function __Z12op_5fd8_0_ffj (line 94421) | function __Z12op_5fd8_0_ffj($0) {
  function __Z12op_4880_0_ffj (line 94437) | function __Z12op_4880_0_ffj($0) {
  function __Z12op_2070_0_ffj (line 94454) | function __Z12op_2070_0_ffj($0) {
  function __Z12op_d0f9_0_ffj (line 94467) | function __Z12op_d0f9_0_ffj($0) {
  function __Z12op_90f9_0_ffj (line 94478) | function __Z12op_90f9_0_ffj($0) {
  function __Z12op_5ff0_3_ffj (line 94489) | function __Z12op_5ff0_3_ffj($0) {
  function __Z12op_4c3a_0_ffj (line 94503) | function __Z12op_4c3a_0_ffj($0) {
  function __Z12op_487b_3_ffj (line 94514) | function __Z12op_487b_3_ffj($0) {
  function __Z12op_e098_0_ffj (line 94526) | function __Z12op_e098_0_ffj($0) {
  function __Z12op_5ed8_0_ffj (line 94542) | function __Z12op_5ed8_0_ffj($0) {
  function __Z12op_53f0_0_ffj (line 94558) | function __Z12op_53f0_0_ffj($0) {
  function __Z12op_d0e8_0_ffj (line 94571) | function __Z12op_d0e8_0_ffj($0) {
  function __Z12op_90e8_0_ffj (line 94582) | function __Z12op_90e8_0_ffj($0) {
  function __Z12op_5ef0_3_ffj (line 94593) | function __Z12op_5ef0_3_ffj($0) {
  function __Z12op_40f9_0_ffj (line 94607) | function __Z12op_40f9_0_ffj($0) {
  function __Z12op_5ff9_0_ffj (line 94623) | function __Z12op_5ff9_0_ffj($0) {
  function __Z12op_4c20_0_ffj (line 94637) | function __Z12op_4c20_0_ffj($0) {
  function __ZN13driver_window10grab_mouseEv (line 94650) | function __ZN13driver_window10grab_mouseEv($0) {
  function __Z12op_487a_0_ffj (line 94677) | function __Z12op_487a_0_ffj($0) {
  function __Z12op_46d8_0_ffj (line 94689) | function __Z12op_46d8_0_ffj($0) {
  function __Z12op_44f9_0_ffj (line 94706) | function __Z12op_44f9_0_ffj($0) {
  function __Z10SCSISelecti (line 94718) | function __Z10SCSISelecti($0) {
  function ___muldi3 (line 94745) | function ___muldi3($a$0, $a$1, $b$0, $b$1) {
  function __Z12op_6fff_0_ffj (line 94757) | function __Z12op_6fff_0_ffj($0) {
  function __Z12op_5fe8_0_ffj (line 94775) | function __Z12op_5fe8_0_ffj($0) {
  function __Z12op_5ef9_0_ffj (line 94789) | function __Z12op_5ef9_0_ffj($0) {
  function __Z12op_44e8_0_ffj (line 94803) | function __Z12op_44e8_0_ffj($0) {
  function __Z12op_5ee8_0_ffj (line 94815) | function __Z12op_5ee8_0_ffj($0) {
  function __Z12op_4c39_0_ffj (line 94829) | function __Z12op_4c39_0_ffj($0) {
  function __Z12op_4a50_0_ffj (line 94840) | function __Z12op_4a50_0_ffj($0) {
  function __Z12op_44f0_3_ffj (line 94855) | function __Z12op_44f0_3_ffj($0) {
  function __Z12op_42a0_0_ffj (line 94867) | function __Z12op_42a0_0_ffj($0) {
  function __Z12op_4260_0_ffj (line 94883) | function __Z12op_4260_0_ffj($0) {
  function __Z12op_4c28_0_ffj (line 94899) | function __Z12op_4c28_0_ffj($0) {
  function __Z12op_42b8_0_ffj (line 94910) | function __Z12op_42b8_0_ffj($0) {
  function __Z12op_4278_0_ffj (line 94925) | function __Z12op_4278_0_ffj($0) {
  function __Z12op_4238_0_ffj (line 94940) | function __Z12op_4238_0_ffj($0) {
  function __Z12op_5af0_0_ffj (line 94955) | function __Z12op_5af0_0_ffj($0) {
  function __Z12op_58f0_0_ffj (line 94968) | function __Z12op_58f0_0_ffj($0) {
  function __Z12op_56f0_0_ffj (line 94981) | function __Z12op_56f0_0_ffj($0) {
  function __Z12op_54f0_0_ffj (line 94994) | function __Z12op_54f0_0_ffj($0) {
  function __Z12op_4a10_0_ffj (line 95007) | function __Z12op_4a10_0_ffj($0) {
  function __Z12op_6100_0_ffj (line 95022) | function __Z12op_6100_0_ffj($0) {
  function __Z12op_4298_0_ffj (line 95034) | function __Z12op_4298_0_ffj($0) {
  function __Z12op_4258_0_ffj (line 95050) | function __Z12op_4258_0_ffj($0) {
  function __ZN13driver_window12ungrab_mouseEv (line 95066) | function __ZN13driver_window12ungrab_mouseEv($0) {
  function __Z12op_46e0_0_ffj (line 95091) | function __Z12op_46e0_0_ffj($0) {
  function __Z12op_5bf0_0_ffj (line 95108) | function __Z12op_5bf0_0_ffj($0) {
  function __Z12op_59f0_0_ffj (line 95121) | function __Z12op_59f0_0_ffj($0) {
  function __Z12op_57f0_0_ffj (line 95134) | function __Z12op_57f0_0_ffj($0) {
  function __Z12op_55f0_0_ffj (line 95147) | function __Z12op_55f0_0_ffj($0) {
  function __Z12op_4100_0_ffj (line 95160) | function __Z12op_4100_0_ffj($0) {
  function __Z9Init680x0v (line 95180) | function __Z9Init680x0v() {
  function __Z12op_4840_0_ffj (line 95213) | function __Z12op_4840_0_ffj($0) {
  function __ZL19get_path_for_fsitemP6FSItem (line 95230) | function __ZL19get_path_for_fsitemP6FSItem($0) {
  function __Z12op_d1f0_3_ffj (line 95255) | function __Z12op_d1f0_3_ffj($0) {
  function __Z12op_91f0_3_ffj (line 95266) | function __Z12op_91f0_3_ffj($0) {
  function _ftruncate (line 95277) | function _ftruncate($0, $1) {
  function _arg_n (line 95292) | function _arg_n($0, $1) {
  function __Z12op_40f0_3_ffj (line 95314) | function __Z12op_40f0_3_ffj($0) {
  function __Z12op_d1f9_0_ffj (line 95329) | function __Z12op_d1f9_0_ffj($0) {
  function __Z12op_91f9_0_ffj (line 95340) | function __Z12op_91f9_0_ffj($0) {
  function __Z12op_46e8_0_ffj (line 95351) | function __Z12op_46e8_0_ffj($0) {
  function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi (line 95366) | function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public...
  function __Z12op_46f0_3_ffj (line 95380) | function __Z12op_46f0_3_ffj($0) {
  function __Z12op_e198_0_ffj (line 95395) | function __Z12op_e198_0_ffj($0) {
  function __Z12op_d1e8_0_ffj (line 95410) | function __Z12op_d1e8_0_ffj($0) {
  function __Z12op_91e8_0_ffj (line 95421) | function __Z12op_91e8_0_ffj($0) {
  function __Z12op_48c0_0_ffj (line 95432) | function __Z12op_48c0_0_ffj($0) {
  function _memmove (line 95449) | function _memmove(dest, src, num) {
  function __Z12op_49c0_0_ffj (line 95470) | function __Z12op_49c0_0_ffj($0) {
  function __Z12op_40e8_0_ffj (line 95487) | function __Z12op_40e8_0_ffj($0) {
  function __Z12op_c080_0_ffj (line 95502) | function __Z12op_c080_0_ffj($0) {
  function __Z12op_b180_0_ffj (line 95518) | function __Z12op_b180_0_ffj($0) {
  function __Z12op_8080_0_ffj (line 95534) | function __Z12op_8080_0_ffj($0) {
  function __Z11op_130_3_ffj (line 95550) | function __Z11op_130_3_ffj($0) {
  function __Z12op_4a90_0_ffj (line 95560) | function __Z12op_4a90_0_ffj($0) {
  function ___ftello_unlocked (line 95575) | function ___ftello_unlocked($0) {
  function __Z12op_4efb_3_ffj (line 95591) | function __Z12op_4efb_3_ffj($0) {
  function __Z12op_4480_0_ffj (line 95603) | function __Z12op_4480_0_ffj($0) {
  function _calloc (line 95619) | function _calloc($0, $1) {
  function __Z12op_4abc_0_ffj (line 95643) | function __Z12op_4abc_0_ffj($0) {
  function __Z12op_307b_3_ffj (line 95658) | function __Z12op_307b_3_ffj($0) {
  function __Z12op_46f9_0_ffj (line 95668) | function __Z12op_46f9_0_ffj($0) {
  function __Z12op_6eff_3_ffj (line 95683) | function __Z12op_6eff_3_ffj($0) {
  function __Z12op_4680_0_ffj (line 95703) | function __Z12op_4680_0_ffj($0) {
  function __Z14SysGetFileSizePv (line 95720) | function __Z14SysGetFileSizePv($0) {
  function __Z11op_139_0_ffj (line 95741) | function __Z11op_139_0_ffj($0) {
  function __Z12op_6fff_3_ffj (line 95751) | function __Z12op_6fff_3_ffj($0) {
  function __Z11op_83b_3_ffj (line 95770) | function __Z11op_83b_3_ffj($0) {
  function __Z11op_128_0_ffj (line 95780) | function __Z11op_128_0_ffj($0) {
  function __Z13GetTicks_usecv (line 95790) | function __Z13GetTicks_usecv() {
  function __Z12op_d0d8_0_ffj (line 95803) | function __Z12op_d0d8_0_ffj($0) {
  function __Z12op_90d8_0_ffj (line 95815) | function __Z12op_90d8_0_ffj($0) {
  function __Z12op_50f0_0_ffj (line 95827) | function __Z12op_50f0_0_ffj($0) {
  function __Z12op_6f00_0_ffj (line 95840) | function __Z12op_6f00_0_ffj($0) {
  function __Z12op_4efa_0_ffj (line 95858) | function __Z12op_4efa_0_ffj($0) {
  function __Z12op_51f0_0_ffj (line 95870) | function __Z12op_51f0_0_ffj($0) {
  function __GLOBAL__sub_I_audio_cpp (line 95883) | function __GLOBAL__sub_I_audio_cpp() {
  function __Z12op_307a_0_ffj (line 95898) | function __Z12op_307a_0_ffj($0) {
  function __Z12op_44d8_0_ffj (line 95908) | function __Z12op_44d8_0_ffj($0) {
  function __Z11op_83a_0_ffj (line 95921) | function __Z11op_83a_0_ffj($0) {
  function __Z12op_6eff_0_ffj (line 95931) | function __Z12op_6eff_0_ffj($0) {
  function __Z12op_2008_0_ffj (line 95946) | function __Z12op_2008_0_ffj($0) {
  function __Z12op_2000_0_ffj (line 95962) | function __Z12op_2000_0_ffj($0) {
  function __Z12op_d0e0_0_ffj (line 95978) | function __Z12op_d0e0_0_ffj($0) {
  function __Z12op_90e0_0_ffj (line 95990) | function __Z12op_90e0_0_ffj($0) {
  function __ZL19Blit_Expand_8_To_32PhPKhj (line 96002) | function __ZL19Blit_Expand_8_To_32PhPKhj($0, $1, $2) {
  function __Z12op_d0f8_0_ffj (line 96025) | function __Z12op_d0f8_0_ffj($0) {
  function __Z12op_90f8_0_ffj (line 96036) | function __Z12op_90f8_0_ffj($0) {
  function __Z11op_830_3_ffj (line 96047) | function __Z11op_830_3_ffj($0) {
  function ___muldsi3 (line 96057) | function ___muldsi3($a, $b) {
  function __Z12op_5ff8_0_ffj (line 96070) | function __Z12op_5ff8_0_ffj($0) {
  function __Z12op_44e0_0_ffj (line 96084) | function __Z12op_44e0_0_ffj($0) {
  function __Z12op_207b_3_ffj (line 96097) | function __Z12op_207b_3_ffj($0) {
  function __Z11op_839_0_ffj (line 96107) | function __Z11op_839_0_ffj($0) {
  function __Z12op_44f8_0_ffj (line 96117) | function __Z12op_44f8_0_ffj($0) {
  function __Z12op_5ef8_0_ffj (line 96129) | function __Z12op_5ef8_0_ffj($0) {
  function __Z12op_4ac0_0_ffj (line 96143) | function __Z12op_4ac0_0_ffj($0) {
  function __Z12op_4879_0_ffj (line 96159) | function __Z12op_4879_0_ffj($0) {
  function __Z11op_828_0_ffj (line 96170) | function __Z11op_828_0_ffj($0) {
  function __Z9set_finfoPKcjjb (line 96180) | function __Z9set_finfoPKcjjb($0, $1, $2, $3) {
  function __Z9PrefsExitv (line 96197) | function __Z9PrefsExitv() {
  function __Z12op_4c38_0_ffj (line 96216) | function __Z12op_4c38_0_ffj($0) {
  function __Z12op_4868_0_ffj (line 96227) | function __Z12op_4868_0_ffj($0) {
  function __Z12op_4ef9_0_ffj (line 96238) | function __Z12op_4ef9_0_ffj($0) {
  function __Z12op_4870_3_ffj (line 96250) | function __Z12op_4870_3_ffj($0) {
  function __Z9AudioExitv (line 96261) | function __Z9AudioExitv() {
  function __Z12op_d1d8_0_ffj (line 96283) | function __Z12op_d1d8_0_ffj($0) {
  function __Z12op_91d8_0_ffj (line 96295) | function __Z12op_91d8_0_ffj($0) {
  function __Z12op_40e0_0_ffj (line 96307) | function __Z12op_40e0_0_ffj($0) {
  function __Z12op_207a_0_ffj (line 96323) | function __Z12op_207a_0_ffj($0) {
  function __Z12op_4c40_0_ffj (line 96333) | function __Z12op_4c40_0_ffj($0) {
  function ___unlist_locked_file (line 96346) | function ___unlist_locked_file($0) {
  function __Z14timer_add_timeR7timevalS_S_ (line 96365) | function __Z14timer_add_timeR7timevalS_S_($0, $1, $2) {
  function __Z12op_40d8_0_ffj (line 96382) | function __Z12op_40d8_0_ffj($0) {
  function __Z12op_42f9_0_ffj (line 96398) | function __Z12op_42f9_0_ffj($0) {
  function __Z12op_7000_0_ffj (line 96409) | function __Z12op_7000_0_ffj($0) {
  function __Z12op_46f8_0_ffj (line 96425) | function __Z12op_46f8_0_ffj($0) {
  function __Z12op_40f9_4_ffj (line 96440) | function __Z12op_40f9_4_ffj($0) {
  function __Z14timer_sub_timeR7timevalS_S_ (line 96451) | function __Z14timer_sub_timeR7timevalS_S_($0, $1, $2) {
  function __Z12op_d1e0_0_ffj (line 96468) | function __Z12op_d1e0_0_ffj($0) {
  function __Z12op_91e0_0_ffj (line 96480) | function __Z12op_91e0_0_ffj($0) {
  function __Z12op_d1f8_0_ffj (line 96492) | function __Z12op_d1f8_0_ffj($0) {
  function __Z12op_91f8_0_ffj (line 96503) | function __Z12op_91f8_0_ffj($0) {
  function __Z12op_6dff_3_ffj (line 96514) | function __Z12op_6dff_3_ffj($0) {
  function __Z12op_6cff_3_ffj (line 96531) | function __Z12op_6cff_3_ffj($0) {
  function _write (line 96548) | function _write($0, $1, $2) {
  function __Z12fpuop_trapccjj (line 96563) | function __Z12fpuop_trapccjj($0, $1) {
  function _read (line 96587) | function _read($0, $1, $2) {
  function __Z12op_40f8_0_ffj (line 96602) | function __Z12op_40f8_0_ffj($0) {
  function __Z12op_6e00_0_ffj (line 96617) | function __Z12op_6e00_0_ffj($0) {
  function _copysign (line 96632) | function _copysign($0, $1) {
  function __Z12op_62ff_3_ffj (line 96645) | function __Z12op_62ff_3_ffj($0) {
  function __Z12op_63ff_3_ffj (line 96662) | function __Z12op_63ff_3_ffj($0) {
  function __Z12op_f2c0_0_ffj (line 96679) | function __Z12op_f2c0_0_ffj($0) {
  function __Z11op_138_0_ffj (line 96691) | function __Z11op_138_0_ffj($0) {
  function __Z12op_4c10_0_ffj (line 96701) | function __Z12op_4c10_0_ffj($0) {
  function __Z12op_4290_0_ffj (line 96712) | function __Z12op_4290_0_ffj($0) {
  function __Z12op_4250_0_ffj (line 96726) | function __Z12op_4250_0_ffj($0) {
  function __Z12op_4210_0_ffj (line 96740) | function __Z12op_4210_0_ffj($0) {
  function __Z12op_4ef0_3_ffj (line 96754) | function __Z12op_4ef0_3_ffj($0) {
  function __Z12op_4e75_0_ffj (line 96765) | function __Z12op_4e75_0_ffj($0) {
  function __Z12op_3070_3_ffj (line 96777) | function __Z12op_3070_3_ffj($0) {
  function __Z9ExtFSExitv (line 96786) | function __Z9ExtFSExitv() {
  function __Z12op_5de0_0_ffj (line 96805) | function __Z12op_5de0_0_ffj($0) {
  function __Z12op_5ce0_0_ffj (line 96816) | function __Z12op_5ce0_0_ffj($0) {
  function __Z12op_4ee8_0_ffj (line 96827) | function __Z12op_4ee8_0_ffj($0) {
  function __Z14SysIsFixedDiskPv (line 96838) | function __Z14SysIsFixedDiskPv($0) {
  function __Z12op_3079_0_ffj (line 96861) | function __Z12op_3079_0_ffj($0) {
  function __Z12op_6bff_3_ffj (line 96870) | function __Z12op_6bff_3_ffj($0) {
  function __Z12op_69ff_3_ffj (line 96887) | function __Z12op_69ff_3_ffj($0) {
  function __Z12op_67ff_3_ffj (line 96904) | function __Z12op_67ff_3_ffj($0) {
  function __Z12op_65ff_3_ffj (line 96921) | function __Z12op_65ff_3_ffj($0) {
  function __Z12op_4a7c_0_ffj (line 96938) | function __Z12op_4a7c_0_ffj($0) {
  function __Z12op_4e72_0_ffj (line 96953) | function __Z12op_4e72_0_ffj($0) {
  function __Z12op_3068_0_ffj (line 96971) | function __Z12op_3068_0_ffj($0) {
  function __Z12op_6aff_3_ffj (line 96980) | function __Z12op_6aff_3_ffj($0) {
  function __Z12op_68ff_3_ffj (line 96997) | function __Z12op_68ff_3_ffj($0) {
  function __Z12op_66ff_3_ffj (line 97014) | function __Z12op_66ff_3_ffj($0) {
  function __Z12op_64ff_3_ffj (line 97031) | function __Z12op_64ff_3_ffj($0) {
  function __Z12op_5dd8_0_ffj (line 97048) | function __Z12op_5dd8_0_ffj($0) {
  function __Z12op_5cd8_0_ffj (line 97059) | function __Z12op_5cd8_0_ffj($0) {
  function __Z12op_5df0_3_ffj (line 97070) | function __Z12op_5df0_3_ffj($0) {
  function __Z12op_5cf0_3_ffj (line 97079) | function __Z12op_5cf0_3_ffj($0) {
  function __Z12op_52e0_0_ffj (line 97088) | function __Z12op_52e0_0_ffj($0) {
  function __Z12op_41fb_0_ffj (line 97099) | function __Z12op_41fb_0_ffj($0) {
  function _rand (line 97111) | function _rand() {
  function __Z12op_52f0_3_ffj (line 97123) | function __Z12op_52f0_3_ffj($0) {
  function __Z12op_3058_0_ffj (line 97132) | function __Z12op_3058_0_ffj($0) {
  function __Z12op_6e01_0_ffj (line 97143) | function __Z12op_6e01_0_ffj($0) {
  function __Z12op_5df9_0_ffj (line 97159) | function __Z12op_5df9_0_ffj($0) {
  function __Z12op_5cf9_0_ffj (line 97168) | function __Z12op_5cf9_0_ffj($0) {
  function __Z12op_40f0_4_ffj (line 97177) | function __Z12op_40f0_4_ffj($0) {
  function __Z12op_5de8_0_ffj (line 97187) | function __Z12op_5de8_0_ffj($0) {
  function __Z12op_5ce8_0_ffj (line 97196) | function __Z12op_5ce8_0_ffj($0) {
  function __Z12op_51c8_0_ffj (line 97205) | function __Z12op_51c8_0_ffj($0) {
  function __Z11op_838_0_ffj (line 97216) | function __Z11op_838_0_ffj($0) {
  function __Z12op_52d8_0_ffj (line 97226) | function __Z12op_52d8_0_ffj($0) {
  function __Z12op_42f0_3_ffj (line 97237) | function __Z12op_42f0_3_ffj($0) {
  function __Z12op_42e8_0_ffj (line 97247) | function __Z12op_42e8_0_ffj($0) {
  function __Z12op_53e0_0_ffj (line 97257) | function __Z12op_53e0_0_ffj($0) {
  function __Z12op_4878_0_ffj (line 97268) | function __Z12op_4878_0_ffj($0) {
  function __Z12op_40e8_4_ffj (line 97279) | function __Z12op_40e8_4_ffj($0) {
  function __ZN16SDL_monitor_descD0Ev (line 97289) | function __ZN16SDL_monitor_descD0Ev($0) {
  function __Z12op_53f0_3_ffj (line 97307) | function __Z12op_53f0_3_ffj($0) {
  function __Z12op_52f9_0_ffj (line 97316) | function __Z12op_52f9_0_ffj($0) {
  function __Z12op_52e8_0_ffj (line 97325) | function __Z12op_52e8_0_ffj($0) {
  function __Z12op_4a3c_0_ffj (line 97334) | function __Z12op_4a3c_0_ffj($0) {
  function __Z12op_41f0_0_ffj (line 97349) | function __Z12op_41f0_0_ffj($0) {
  function __ZN12monitor_descD0Ev (line 97361) | function __ZN12monitor_descD0Ev($0) {
  function __Z12op_53d8_0_ffj (line 97379) | function __Z12op_53d8_0_ffj($0) {
  function __Z12op_3060_0_ffj (line 97390) | function __Z12op_3060_0_ffj($0) {
  function __Z12op_2070_3_ffj (line 97401) | function __Z12op_2070_3_ffj($0) {
  function __Z12op_53f9_0_ffj (line 97410) | function __Z12op_53f9_0_ffj($0) {
  function __Z12op_5ae0_0_ffj (line 97419) | function __Z12op_5ae0_0_ffj($0) {
  function __Z12op_58e0_0_ffj (line 97430) | function __Z12op_58e0_0_ffj($0) {
  function __Z12op_56e0_0_ffj (line 97441) | function __Z12op_56e0_0_ffj($0) {
  function __Z12op_54e0_0_ffj (line 97452) | function __Z12op_54e0_0_ffj($0) {
  function __Z12op_5af0_3_ffj (line 97463) | function __Z12op_5af0_3_ffj($0) {
  function __Z12op_58f0_3_ffj (line 97472) | function __Z12op_58f0_3_ffj($0) {
  function __Z12op_56f0_3_ffj (line 97481) | function __Z12op_56f0_3_ffj($0) {
  function __Z12op_54f0_3_ffj (line 97490) | function __Z12op_54f0_3_ffj($0) {
  function __Z12op_53e8_0_ffj (line 97499) | function __Z12op_53e8_0_ffj($0) {
  function __Z12op_2079_0_ffj (line 97508) | function __Z12op_2079_0_ffj($0) {
  function ___fseeko (line 97517) | function ___fseeko($0, $1, $2) {
  function __Z12op_2068_0_ffj (line 97536) | function __Z12op_2068_0_ffj($0) {
  function __Z12op_60ff_3_ffj (line 97545) | function __Z12op_60ff_3_ffj($0) {
  function __Z12op_4240_0_ffj (line 97559) | function __Z12op_4240_0_ffj($0) {
  function __Z9SaveXPRAMv (line 97574) | function __Z9SaveXPRAMv() {
  function __Z12op_8180_0_ffj (line 97590) | function __Z12op_8180_0_ffj($0) {
  function __Z12op_5ad8_0_ffj (line 97600) | function __Z12op_5ad8_0_ffj($0) {
  function __Z12op_58d8_0_ffj (line 97611) | function __Z12op_58d8_0_ffj($0) {
  function __Z12op_56d8_0_ffj (line 97622) | function __Z12op_56d8_0_ffj($0) {
  function __Z12op_54d8_0_ffj (line 97633) | function __Z12op_54d8_0_ffj($0) {
  function __Z12op_5be0_0_ffj (line 97644) | function __Z12op_5be0_0_ffj($0) {
  function __Z12op_59e0_0_ffj (line 97655) | function __Z12op_59e0_0_ffj($0) {
  function __Z12op_57e0_0_ffj (line 97666) | function __Z12op_57e0_0_ffj($0) {
  function __Z12op_55e0_0_ffj (line 97677) | function __Z12op_55e0_0_ffj($0) {
  function __Z12op_4200_0_ffj (line 97688) | function __Z12op_4200_0_ffj($0) {
  function __Z12op_2058_0_ffj (line 97703) | function __Z12op_2058_0_ffj($0) {
  function __Z12op_5bf0_3_ffj (line 97714) | function __Z12op_5bf0_3_ffj($0) {
  function __Z12op_5af9_0_ffj (line 97723) | function __Z12op_5af9_0_ffj($0) {
  function __Z12op_59f0_3_ffj (line 97732) | function __Z12op_59f0_3_ffj($0) {
  function __Z12op_58f9_0_ffj (line 97741) | function __Z12op_58f9_0_ffj($0) {
  function __Z12op_57f0_3_ffj (line 97750) | function __Z12op_57f0_3_ffj($0) {
  function __Z12op_56f9_0_ffj (line 97759) | function __Z12op_56f9_0_ffj($0) {
  function __Z12op_55f0_3_ffj (line 97768) | function __Z12op_55f0_3_ffj($0) {
  function __Z12op_54f9_0_ffj (line 97777) | function __Z12op_54f9_0_ffj($0) {
  function ___uremdi3 (line 97786) | function ___uremdi3($a$0, $a$1, $b$0, $b$1) {
  function __Z12op_5ae8_0_ffj (line 97799) | function __Z12op_5ae8_0_ffj($0) {
  function __Z12op_58e8_0_ffj (line 97808) | function __Z12op_58e8_0_ffj($0) {
  function __Z12op_56e8_0_ffj (line 97817) | function __Z12op_56e8_0_ffj($0) {
  function __Z12op_54e8_0_ffj (line 97826) | function __Z12op_54e8_0_ffj($0) {
  function __Z12op_8140_0_ffj (line 97835) | function __Z12op_8140_0_ffj($0) {
  function _llvm_cttz_i32 (line 97845) | function _llvm_cttz_i32(x) {
  function __Z12op_5bd8_0_ffj (line 97856) | function __Z12op_5bd8_0_ffj($0) {
  function __Z12op_59d8_0_ffj (line 97867) | function __Z12op_59d8_0_ffj($0) {
  function __Z12op_57d8_0_ffj (line 97878) | function __Z12op_57d8_0_ffj($0) {
  function __Z12op_55d8_0_ffj (line 97889) | function __Z12op_55d8_0_ffj($0) {
  function __Z12op_4a48_0_ffj (line 97900) | function __Z12op_4a48_0_ffj($0) {
  function __Z12op_4a40_0_ffj (line 97914) | function __Z12op_4a40_0_ffj($0) {
  function __Z12op_d0d0_0_ffj (line 97928) | function __Z12op_d0d0_0_ffj($0) {
  function __Z12op_90d0_0_ffj (line 97938) | function __Z12op_90d0_0_ffj($0) {
  function __Z12op_5bf9_0_ffj (line 97948) | function __Z12op_5bf9_0_ffj($0) {
  function __Z12op_59f9_0_ffj (line 97957) | function __Z12op_59f9_0_ffj($0) {
  function __Z12op_57f9_0_ffj (line 97966) | function __Z12op_57f9_0_ffj($0) {
  function __Z12op_55f9_0_ffj (line 97975) | function __Z12op_55f9_0_ffj($0) {
  function ___uflow (line 97984) | function ___uflow($0) {
  function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_ (line 98002) | function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEE...
  function __Z12op_4a00_0_ffj (line 98013) | function __Z12op_4a00_0_ffj($0) {
  function __Z12op_5be8_0_ffj (line 98027) | function __Z12op_5be8_0_ffj($0) {
  function __Z12op_59e8_0_ffj (line 98036) | function __Z12op_59e8_0_ffj($0) {
  function __Z12op_57e8_0_ffj (line 98045) | function __Z12op_57e8_0_ffj($0) {
  function __Z12op_55e8_0_ffj (line 98054) | function __Z12op_55e8_0_ffj($0) {
  function __Z12op_5fd0_0_ffj (line 98063) | function __Z12op_5fd0_0_ffj($0) {
  function __Z12op_4e58_0_ffj (line 98076) | function __Z12op_4e58_0_ffj($0) {
  function __Z24AddPlatformPrefsDefaultsv (line 98088) | function __Z24AddPlatformPrefsDefaultsv() {
  function __Z12op_6101_0_ffj (line 98098) | function __Z12op_6101_0_ffj($0) {
  function __Z12op_2060_0_ffj (line 98108) | function __Z12op_2060_0_ffj($0) {
  function __Z12op_5ed0_0_ffj (line 98119) | function __Z12op_5ed0_0_ffj($0) {
  function __Z12op_4c3c_0_ffj (line 98132) | function __Z12op_4c3c_0_ffj($0) {
  function __Z12op_44d0_0_ffj (line 98142) | function __Z12op_44d0_0_ffj($0) {
  function __Z12op_f280_0_ffj (line 98153) | function __Z12op_f280_0_ffj($0) {
  function _stat (line 98165) | function _stat($0, $1) {
  function __Z12op_4a88_0_ffj (line 98178) | function __Z12op_4a88_0_ffj($0) {
  function __Z12op_4a80_0_ffj (line 98192) | function __Z12op_4a80_0_ffj($0) {
  function __Z12op_46d0_0_ffj (line 98206) | function __Z12op_46d0_0_ffj($0) {
  function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib (line 98220) | function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__...
  function __Z12op_4ef8_0_ffj (line 98232) | function __Z12op_4ef8_0_ffj($0) {
  function _close (line 98243) | function _close($0) {
  function __Z12op_40d0_0_ffj (line 98255) | function __Z12op_40d0_0_ffj($0) {
  function __Z19timer_mac2host_timeR7timevali (line 98269) | function __Z19timer_mac2ho
Condensed preview — 48 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,442K chars).
[
  {
    "path": ".gitattributes",
    "chars": 21,
    "preview": "text eol=lf\nrom -text"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 4459,
    "preview": "name: Build & Release\n\non:\n  push:\n    branches:\n      - master\n    tags:\n      - v*\n  pull_request:\n\njobs:\n  lint:\n    "
  },
  {
    "path": ".gitignore",
    "chars": 1303,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs."
  },
  {
    "path": "CREDITS.md",
    "chars": 1113,
    "preview": "# macintosh.js Credits\n\nThis app by <a href=\"https://www.felixrieseberg.com\">Felix Rieseberg</a>. The real work was done"
  },
  {
    "path": "README.md",
    "chars": 5539,
    "preview": "# macintosh.js\n\nThis is Mac OS 8, running in an [Electron](https://electronjs.org/) app pretending to be a 1991 Macintos"
  },
  {
    "path": "assets/entitlements.plist",
    "chars": 562,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "forge.config.js",
    "chars": 2900,
    "preview": "const path = require('path');\nconst fs = require('fs');\nconst package = require('./package.json');\n\nif (process.env['WIN"
  },
  {
    "path": "package.json",
    "chars": 1143,
    "preview": "{\n  \"name\": \"macintosh.js\",\n  \"productName\": \"macintosh.js\",\n  \"version\": \"1.2.0\",\n  \"description\": \"Macintosh's System "
  },
  {
    "path": "src/basilisk/BasiliskII-worker-boot.js",
    "chars": 15924,
    "preview": "const fs = require(\"fs\");\nconst path = require(\"path\");\n\nconst homeDir = require(\"os\").homedir();\nconst macDir = path.jo"
  },
  {
    "path": "src/basilisk/BasiliskII.js",
    "chars": 4234001,
    "preview": "// The Module object: Our interface to the outside world. We import\n// and export values on it, and do the work to get t"
  },
  {
    "path": "src/basilisk/LICENSE.txt",
    "chars": 18250,
    "preview": "--------------------------------------------------------------------------\n\n  Basilisk II\n  A 68k Macintosh emulator\n\n  "
  },
  {
    "path": "src/basilisk/prefs_template",
    "chars": 448,
    "preview": "disk disk\nextfs /\nscreen win/800/600\nseriala\nserialb\nudptunnel false\nudpport 6066\nrom rom\nbootdrive 0\nbootdriver 0\nramsi"
  },
  {
    "path": "src/main/appfolder.js",
    "chars": 1216,
    "preview": "const { app, dialog } = require(\"electron\");\nconst { getIsDevMode } = require(\"./devmode\");\n\n// If the app doesn't run f"
  },
  {
    "path": "src/main/devmode.js",
    "chars": 691,
    "preview": "const fs = require(\"fs\");\nconst path = require(\"path\");\nconst { app } = require(\"electron\");\n\nconst appDataPath = app.ge"
  },
  {
    "path": "src/main/index.js",
    "chars": 1402,
    "preview": "const { app, BrowserWindow } = require(\"electron\");\n\nconst { registerIpcHandlers } = require(\"./ipc\");\nconst { createWin"
  },
  {
    "path": "src/main/ipc.js",
    "chars": 1073,
    "preview": "const { ipcMain, app, BrowserWindow, dialog } = require(\"electron\");\nconst { setIsDevMode, getIsDevMode } = require(\"./d"
  },
  {
    "path": "src/main/squirrel.js",
    "chars": 110,
    "preview": "function shouldQuit() {\n  return require(\"electron-squirrel-startup\");\n}\n\nmodule.exports = {\n  shouldQuit,\n};\n"
  },
  {
    "path": "src/main/update.js",
    "chars": 285,
    "preview": "const { app } = require(\"electron\");\n\nfunction setupUpdates() {\n  if (app.isPackaged && process.platform !== \"linux\") {\n"
  },
  {
    "path": "src/main/windows.js",
    "chars": 2439,
    "preview": "const { BrowserWindow, shell } = require(\"electron\");\nconst path = require(\"path\");\n\nconst { getIsDevMode } = require(\"."
  },
  {
    "path": "src/renderer/atomics.js",
    "chars": 1068,
    "preview": "const LockStates = {\n  READY_FOR_UI_THREAD: 0,\n  UI_THREAD_LOCK: 1,\n  READY_FOR_EMUL_THREAD: 2,\n  EMUL_THREAD_LOCK: 3,\n}"
  },
  {
    "path": "src/renderer/audio.js",
    "chars": 8133,
    "preview": "const { LockStates } = require(\"./atomics\");\n\nvar audio = {\n  channels: 1,\n  bytesPerSample: 2,\n  samples: 4096,\n  freq:"
  },
  {
    "path": "src/renderer/controls.js",
    "chars": 750,
    "preview": "const { quit, devtools } = require(\"./ipc\");\nconst { getIsWorkerRunning, getIsWorkerSaving } = require(\"./worker\");\ncons"
  },
  {
    "path": "src/renderer/credits.html",
    "chars": 1509,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "src/renderer/credits.js",
    "chars": 480,
    "preview": "const { shell, ipcRenderer } = require(\"electron\");\nconst path = require(\"path\");\n\nconst { getAppVersion } = require(\"./"
  },
  {
    "path": "src/renderer/dialogs.js",
    "chars": 467,
    "preview": "const { quit } = require(\"./ipc\");\n\nfunction setupDialogs() {\n  // Still empty\n}\n\nfunction showCloseWarning() {\n  const "
  },
  {
    "path": "src/renderer/emulator.js",
    "chars": 454,
    "preview": "const { drawScreen } = require(\"./screen\");\nconst { openAudio } = require(\"./audio\");\nconst { tryToSendInput } = require"
  },
  {
    "path": "src/renderer/help.html",
    "chars": 2233,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, in"
  },
  {
    "path": "src/renderer/help.js",
    "chars": 1104,
    "preview": "const { shell, ipcRenderer } = require(\"electron\");\nconst path = require(\"path\");\nconst fs = require(\"fs\");\nconst homedi"
  },
  {
    "path": "src/renderer/index.html",
    "chars": 1989,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\">\n    <title>macintosh.js</title>\n    <link rel=\"stylesheet\" hr"
  },
  {
    "path": "src/renderer/input.js",
    "chars": 3082,
    "preview": "const { acquireLock, releaseLock } = require(\"./atomics\");\n\nconst INPUT_BUFFER_SIZE = 100;\nconst inputBuffer = new Share"
  },
  {
    "path": "src/renderer/ipc.js",
    "chars": 469,
    "preview": "const { ipcRenderer } = require(\"electron\");\n\nmodule.exports = {\n  quit() {\n    ipcRenderer.invoke(\"quit\");\n  },\n\n  devt"
  },
  {
    "path": "src/renderer/iso.js",
    "chars": 940,
    "preview": "const fs = require(\"fs\");\nconst path = require(\"path\");\nconst { runPowerShell } = require(\"./powershell\");\n\nasync functi"
  },
  {
    "path": "src/renderer/powershell.js",
    "chars": 885,
    "preview": "const { spawn } = require(\"child_process\");\n\nfunction runPowerShell(command) {\n  return new Promise((resolve) => {\n    l"
  },
  {
    "path": "src/renderer/screen.js",
    "chars": 2897,
    "preview": "const { videoModeBufferView } = require(\"./video\");\nconst BITS = 4;\nconst SCREEN_BUFFER_SIZE = 800 * 600 * BITS; // 32bp"
  },
  {
    "path": "src/renderer/style/base.css",
    "chars": 1592,
    "preview": "@font-face {\n  font-family: Garamond;\n  src: url(garamond.ttf);\n}\n\n@font-face {\n  font-family: Oswald;\n  src: url(oswald"
  },
  {
    "path": "src/renderer/style/credits.css",
    "chars": 86,
    "preview": "@import \"base.css\";\n\nbody {\n  font-size: 16px;\n  margin: 15px;\n  text-align: left;\n}\n\n"
  },
  {
    "path": "src/renderer/style/help.css",
    "chars": 84,
    "preview": "@import \"base.css\";\n\nbody {\n  font-size: 16px;\n  margin: 15px;\n  text-align: left;\n}"
  },
  {
    "path": "src/renderer/style/index.css",
    "chars": 1802,
    "preview": "@import \"base.css\";\n@import \"spinner.css\";\n\n:root {\n  --warning-height: 250px;\n  --warning-width: 600px;\n}\n\n.emulator_ru"
  },
  {
    "path": "src/renderer/style/spinner.css",
    "chars": 1555,
    "preview": ".lds-spinner {\n  color: official;\n  position: relative;\n  width: 80px;\n  height: 80px;\n  transform: scale(0.5);\n  margin"
  },
  {
    "path": "src/renderer/video.js",
    "chars": 363,
    "preview": "const { releaseTwoStateLock } = require(\"./atomics\");\n\nconst VIDEO_MODE_BUFFER_SIZE = 10;\nconst videoModeBuffer = new Sh"
  },
  {
    "path": "src/renderer/worker.js",
    "chars": 3301,
    "preview": "const { inputBuffer, INPUT_BUFFER_SIZE } = require(\"./input\");\nconst { videoModeBuffer, VIDEO_MODE_BUFFER_SIZE } = requi"
  },
  {
    "path": "tools/add-macos-cert.sh",
    "chars": 648,
    "preview": "#!/usr/bin/env sh\n\nKEY_CHAIN=build.keychain\nMACOS_CERT_P12_FILE=certificate.p12\n\n# Recreate the certificate from the sec"
  },
  {
    "path": "tools/check-links.js",
    "chars": 1058,
    "preview": "const fs = require('fs/promises')\nconst path = require('path')\nconst fetch = require('node-fetch')\n\nconst LINK_RGX = /(h"
  },
  {
    "path": "tools/download-disk.ps1",
    "chars": 193,
    "preview": "cd src/basilisk\n\n$wc = New-Object System.Net.WebClient\n$wc.DownloadFile($env:DISK_URL, \"$(Resolve-Path .)\\disk.zip\")\n\n7z"
  },
  {
    "path": "tools/download-disk.sh",
    "chars": 104,
    "preview": "#!/usr/bin/env sh\n\ncd src/basilisk\nwget -O disk.zip $DISK_URL\nunzip -o disk.zip\nrm disk.zip\nls -al\ncd -\n"
  }
]

// ... and 3 more files (download for full content)

About this extraction

This page contains the full source code of the felixrieseberg/macintosh.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 48 files (4.1 MB), approximately 1.1M tokens, and a symbol index with 3213 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!