export declare const LIBLLAMA_VERSION = "b8998-f86ad6b"; export declare const LLAMA_CPP_WORKER_CODE = "// Start the main llama.cpp\nlet wllamaMalloc;\nlet wllamaStart;\nlet wllamaAction;\nlet wllamaExit;\nlet wllamaDebug;\n\nlet Module = null;\n\n//////////////////////////////////////////////////////////////\n// UTILS\n//////////////////////////////////////////////////////////////\n\n// send message back to main thread\nconst msg = (data, transfer) => postMessage(data, transfer);\nconst toUintPtr = (ptr) => ptr >>> 0;\nconst isMemory64 = () => !!RUN_OPTIONS.pathConfig['wllama.memory64'];\nconst ptrToHeapOffset = (ptr) => (isMemory64() ? Number(ptr) : toUintPtr(ptr));\nconst sizeToWasm = (size) => (isMemory64() ? BigInt(size) : size);\n\n// Convert CPP log into JS log\nconst cppLogToJSLog = (line) => {\n const matched = line.match(/@@(DEBUG|INFO|WARN|ERROR)@@(.*)/);\n return !!matched\n ? {\n level: (matched[1] === 'INFO' ? 'debug' : matched[1]).toLowerCase(),\n text: matched[2],\n }\n : { level: 'log', text: line };\n};\n\n// Get module config that forwards stdout/err to main thread\nconst getWModuleConfig = (_argMainScriptBlob) => {\n var pathConfig = RUN_OPTIONS.pathConfig;\n var pthreadPoolSize = RUN_OPTIONS.nbThread;\n var argMainScriptBlob = _argMainScriptBlob;\n\n if (!pathConfig['wllama.wasm']) {\n throw new Error('\"wllama.wasm\" is missing in pathConfig');\n }\n return {\n noInitialRun: true,\n print: function (text) {\n if (arguments.length > 1)\n text = Array.prototype.slice.call(arguments).join(' ');\n msg({ verb: 'console.log', args: [text] });\n },\n printErr: function (text) {\n if (arguments.length > 1)\n text = Array.prototype.slice.call(arguments).join(' ');\n const logLine = cppLogToJSLog(text);\n msg({ verb: 'console.' + logLine.level, args: [logLine.text] });\n },\n locateFile: function (filename, basePath) {\n const p = pathConfig[filename];\n const truncate = (str) =>\n str.length > 128 ? `${str.substr(0, 128)}...` : str;\n if (filename.match(/wllama\\.worker\\.js/)) {\n msg({\n verb: 'console.error',\n args: [\n '\"wllama.worker.js\" is removed from v2.2.1. Hint: make sure to clear browser\\'s cache.',\n ],\n });\n } else {\n msg({\n verb: 'console.debug',\n args: [`Loading \"${filename}\" from \"${truncate(p)}\"`],\n });\n return p;\n }\n },\n mainScriptUrlOrBlob: argMainScriptBlob,\n pthreadPoolSize,\n wasmMemory: pthreadPoolSize > 1 ? getWasmMemory() : null,\n onAbort: function (text) {\n msg({ verb: 'signal.abort', args: [text] });\n },\n };\n};\n\n// Get the memory to be used by wasm. (Only used in multi-thread mode)\n// Because we have a weird OOM issue on iOS, we need to try some values\n// See: https://github.com/emscripten-core/emscripten/issues/19144\n// https://github.com/godotengine/godot/issues/70621\nconst getWasmMemory = () => {\n let minBytes = 128 * 1024 * 1024;\n let maxBytes = 4096 * 1024 * 1024;\n let stepBytes = 128 * 1024 * 1024;\n while (maxBytes > minBytes) {\n try {\n const wasmMemory = new WebAssembly.Memory({\n initial: minBytes / 65536,\n maximum: maxBytes / 65536,\n shared: true,\n });\n return wasmMemory;\n } catch (e) {\n maxBytes -= stepBytes;\n continue; // retry\n }\n }\n throw new Error('Cannot allocate WebAssembly.Memory');\n};\n\n//////////////////////////////////////////////////////////////\n// MEMFS PATCH\n//////////////////////////////////////////////////////////////\n\n/**\n * By default, emscripten uses memfs. The way it works is by\n * allocating new Uint8Array in javascript heap. This is not good\n * because it requires files to be copied to wasm heap each time\n * a file is read.\n *\n * HeapFS is an alternative, which resolves this problem by\n * allocating space for file directly inside wasm heap. This\n * allows us to mmap without doing any copy.\n *\n * For llama.cpp, this is great because we use MAP_SHARED\n *\n * Ref: https://github.com/ngxson/wllama/pull/39\n * Ref: https://github.com/emscripten-core/emscripten/blob/main/src/library_memfs.js\n *\n * Note 29/05/2024 @ngxson\n * Due to ftell() being limited to MAX_LONG, we cannot load files bigger than 2^31 bytes (or 2GB)\n * Ref: https://github.com/emscripten-core/emscripten/blob/main/system/lib/libc/musl/src/stdio/ftell.c\n *\n * For WebGPU, we want to extend this idea one level further to\n * avoid hitting memory limits, especially on mobile devices.\n * Download models directly to disk via OPFS, avoiding the WASM\n * heap to prevent growing the heap and having an extra copy of the model.\n * Then, stream it from disk directly to llama.cpp. We still need to\n * support async tensor uploads in llama.cpp WebGPU backend, which should\n * decrease memory usage even further.\n *\n * Note that the model cache manager is already backed by OPFS.\n */\n\nconst fsNameToFile = {}; // map Name => File\nconst fsIdToFile = {}; // map ID => File\nlet currFileId = 0;\nconst opfsHandles = {}; // map Name => { synchandle, size } for OPFS-backed files\n\n// Patch and redirect memfs calls to wllama\nconst patchMEMFS = () => {\n const m = Module;\n // save functions\n m.MEMFS.stream_ops._read = m.MEMFS.stream_ops.read;\n m.MEMFS.stream_ops._write = m.MEMFS.stream_ops.write;\n m.MEMFS.stream_ops._llseek = m.MEMFS.stream_ops.llseek;\n m.MEMFS.stream_ops._allocate = m.MEMFS.stream_ops.allocate;\n m.MEMFS.stream_ops._mmap = m.MEMFS.stream_ops.mmap;\n m.MEMFS.stream_ops._msync = m.MEMFS.stream_ops.msync;\n\n const patchStream = (stream) => {\n const name = stream.node.name;\n if (fsNameToFile[name]) {\n const f = fsNameToFile[name];\n const heapOffset = ptrToHeapOffset(f.ptr);\n stream.node.contents = m.HEAPU8.subarray(heapOffset, heapOffset + f.size);\n stream.node.usedBytes = f.size;\n }\n };\n\n // replace \"read\" functions\n m.MEMFS.stream_ops.read = function (\n stream,\n buffer,\n offset,\n length,\n position\n ) {\n const name = stream.node.name;\n // OPFS-backed path for WebGPU\n if (opfsHandles[name]) {\n const { syncHandle, size } = opfsHandles[name];\n const toRead = Math.min(length, size - position);\n if (toRead <= 0) return 0;\n const view = new Uint8Array(\n buffer.buffer,\n buffer.byteOffset + offset,\n toRead\n );\n return syncHandle.read(view, { at: position });\n }\n // WASM heap-backed path for WASM\n patchStream(stream);\n return m.MEMFS.stream_ops._read(stream, buffer, offset, length, position);\n };\n m.MEMFS.ops_table.file.stream.read = m.MEMFS.stream_ops.read;\n\n // replace \"llseek\" functions\n m.MEMFS.stream_ops.llseek = function (stream, offset, whence) {\n const name = stream.node.name;\n // OPFS-backed path for WebGPU\n if (opfsHandles[name]) {\n const { size } = opfsHandles[name];\n let newPos = offset;\n if (whence === 1) newPos += stream.position; // SEEK_CUR\n if (whence === 2) newPos += size; // SEEK_END\n if (newPos < 0) throw new Error('SEEK before start of file');\n stream.position = newPos;\n return newPos;\n }\n // WASM heap-backed path for WASM\n patchStream(stream);\n return m.MEMFS.stream_ops._llseek(stream, offset, whence);\n };\n m.MEMFS.ops_table.file.stream.llseek = m.MEMFS.stream_ops.llseek;\n\n // replace \"mmap\" functions\n m.MEMFS.stream_ops.mmap = function (stream, length, position, prot, flags) {\n const name = stream.node.name;\n if (opfsHandles[name]) {\n // OPFS-backed files must never be mmap'd \u2014 that would copy the entire model\n // onto the WASM heap, defeating the whole point of the OPFS path.\n // use_mmap=false is set in wllama.ts for WebGPU loads, so llama.cpp should\n // never reach this branch. If it does, throw immediately so the bug is visible.\n console.error(\n `[OPFS] mmap called on OPFS-backed file \"${name}\" (length=${length}, position=${position}). This should never happen when use_mmap=false is set. Please report this as a bug.`\n );\n throw new Error(\n `[wllama] mmap called on OPFS-backed file \"${name}\". ` +\n `This should never happen when use_mmap=false is set. ` +\n `Please report this as a bug.`\n );\n }\n\n patchStream(stream);\n\n if (fsNameToFile[name]) {\n const f = fsNameToFile[name];\n // Under MEMORY64 (jspi-single wasm), wasm pointers are i64 / BigInt.\n // f.ptr returned from mmapAlloc IS BigInt in the success path, but\n // emscripten's __mmap_js trampoline can pass `position` as Number\n // (the BigInt-from-i64 conversion is not consistent across all\n // call sites in 4.0.20). A bare `f.ptr + BigInt(position)` will\n // throw \"Cannot mix BigInt and other types\" in those cases. Coerce\n // both sides explicitly so single-file >300MB GGUFs load reliably.\n return {\n ptr: isMemory64() ? BigInt(f.ptr) + BigInt(position) : f.ptr + position,\n allocated: false,\n };\n } else {\n return m.MEMFS.stream_ops._mmap(stream, length, position, prot, flags);\n }\n };\n m.MEMFS.ops_table.file.stream.mmap = m.MEMFS.stream_ops.mmap;\n\n // mount FS\n m.FS.mkdir('/models');\n m.FS.mount(m.MEMFS, { root: '.' }, '/models');\n};\n\n// Allocate a new file in wllama heapfs, returns file ID\nconst heapfsAlloc = (name, size) => {\n if (size < 1) {\n throw new Error('File size must be bigger than 0');\n }\n const m = Module;\n // mmapAlloc(size) MUST receive Number, not BigInt \u2014 internally emscripten\n // does `alignMemory(size, 65536)` which is `Math.ceil(size / alignment)`,\n // and `BigInt / Number` throws \"Cannot mix BigInt and other types\" under\n // MEMORY64 (jspi-single build). Emscripten's own __mmap_js trampoline\n // converts incoming i64 length via bigintToI53Checked() before calling\n // mmapAlloc, so we mirror that contract here. The returned `ptr` is i64\n // under MEMORY64 \u2192 BigInt at the JS boundary; downstream readers\n // (ptrToHeapOffset / BigInt(f.ptr) in MEMFS.mmap) already handle both.\n const ptr = m.mmapAlloc(Number(size));\n const file = {\n ptr: ptr,\n size: size,\n id: currFileId++,\n };\n fsIdToFile[file.id] = file;\n fsNameToFile[name] = file;\n return file.id;\n};\n\n// Add new file to wllama heapfs, return number of written bytes\nconst heapfsWrite = (id, buffer, offset) => {\n const m = Module;\n if (fsIdToFile[id]) {\n const { ptr, size } = fsIdToFile[id];\n const heapOffset = ptrToHeapOffset(ptr);\n const afterWriteByte = offset + buffer.byteLength;\n if (afterWriteByte > size) {\n throw new Error(\n `File ID ${id} write out of bound, afterWriteByte = ${afterWriteByte} while size = ${size}`\n );\n }\n m.HEAPU8.set(buffer, heapOffset + offset);\n return buffer.byteLength;\n } else {\n throw new Error(`File ID ${id} not found in heapfs`);\n }\n};\n\nconst opfsAlloc = async (logicalName, opfsCacheFileName) => {\n const mb = (bytes) => (bytes / 1024 / 1024).toFixed(1) + ' MB';\n console.log(`[OPFS] opfsAlloc: logicalName=\"${logicalName}\" \n opfsCacheFileName=\"${opfsCacheFileName}\"`);\n\n const opfsRoot = await navigator.storage.getDirectory();\n const cacheDir = await opfsRoot.getDirectoryHandle('cache');\n const fileHandle = await cacheDir.getFileHandle(opfsCacheFileName);\n const syncHandle = await fileHandle.createSyncAccessHandle();\n const size = syncHandle.getSize();\n opfsHandles[logicalName] = { syncHandle, size };\n\n // Create a handle in MEMfs so Emscripten can refer to the file\n Module['FS_createDataFile'](\n '/models',\n logicalName,\n new Uint8Array(0),\n true,\n true,\n true\n );\n // Set usedBytes so fstat() returns the real file size.\n Module.FS.lookupPath('/models/' + logicalName).node.usedBytes = size;\n console.log(\n `[OPFS] opfsAlloc: created MEMFS placeholder at /models/${logicalName} with usedBytes=${size}`\n );\n\n return size;\n};\n\nconst opfsFreeAll = () => {\n const names = Object.keys(opfsHandles);\n for (const [name, { syncHandle }] of Object.entries(opfsHandles)) {\n try {\n syncHandle.close();\n Module.FS.unlink('/models/' + name);\n } catch (e) {\n console.warn('[OPFS] Error freeing ' + name + ': ' + e);\n }\n delete opfsHandles[name];\n }\n};\n\n//////////////////////////////////////////////////////////////\n// MAIN CODE\n//////////////////////////////////////////////////////////////\n\nconst callWrapper = (name, ret, args, isAsync) => {\n const fn = Module.cwrap(\n name,\n ret,\n args,\n isAsync ? { async: true } : undefined\n );\n return async (...callArgs) => {\n let result;\n try {\n result = isAsync ? await fn(...callArgs) : fn(...callArgs);\n } catch (ex) {\n console.error(ex);\n throw ex;\n }\n return result;\n };\n};\n\nonmessage = async (e) => {\n if (!e.data) return;\n const { verb, args, callbackId } = e.data;\n\n if (!callbackId) {\n msg({ verb: 'console.error', args: ['callbackId is required', e.data] });\n return;\n }\n\n if (verb === 'module.init') {\n const argMainScriptBlob = args[0];\n try {\n Module = getWModuleConfig(argMainScriptBlob);\n Module.onRuntimeInitialized = () => {\n // async call once module is ready\n // init FS\n patchMEMFS();\n // init cwrap\n const pointer = isMemory64() ? 'bigint' : 'number';\n const sizeArg = isMemory64() ? 'bigint' : 'number';\n // TODO: note sure why emscripten cannot bind if there is only 1 argument\n wllamaMalloc = callWrapper(\n 'wllama_malloc',\n pointer,\n [sizeArg, 'number'],\n false\n );\n wllamaStart = callWrapper('wllama_start', 'string', [], true);\n wllamaAction = callWrapper(\n 'wllama_action',\n pointer,\n ['string', pointer],\n true\n );\n wllamaExit = callWrapper('wllama_exit', 'string', [], false);\n wllamaDebug = callWrapper('wllama_debug', 'string', [], false);\n msg({ callbackId, result: null });\n };\n wModuleInit();\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'fs.alloc') {\n const argFilename = args[0];\n const argSize = args[1];\n try {\n // create blank file\n const emptyBuffer = new Uint8Array(0);\n Module['FS_createDataFile'](\n '/models',\n argFilename,\n emptyBuffer,\n true,\n true,\n true\n );\n // alloc data on heap\n const fileId = heapfsAlloc(argFilename, argSize);\n msg({ callbackId, result: { fileId } });\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'fs.opfs-alloc') {\n const argLogicalName = args[0];\n const argOpfsCacheFileName = args[1];\n try {\n const size = await opfsAlloc(argLogicalName, argOpfsCacheFileName);\n msg({ callbackId, result: { size } });\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'fs.write') {\n const argFileId = args[0];\n const argBuffer = args[1];\n const argOffset = args[2];\n try {\n const writtenBytes = heapfsWrite(argFileId, argBuffer, argOffset);\n msg({ callbackId, result: { writtenBytes } });\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'wllama.start') {\n try {\n const result = await wllamaStart();\n msg({ callbackId, result });\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'wllama.action') {\n const argAction = args[0];\n const argEncodedMsg = args[1];\n try {\n const inputPtr = await wllamaMalloc(\n sizeToWasm(argEncodedMsg.byteLength),\n 0\n );\n const inputHeapOffset = ptrToHeapOffset(inputPtr);\n // copy data to wasm heap\n const inputBuffer = new Uint8Array(\n Module.HEAPU8.buffer,\n inputHeapOffset,\n argEncodedMsg.byteLength\n );\n inputBuffer.set(argEncodedMsg, 0);\n const outputPtr = await wllamaAction(argAction, inputPtr);\n // wllama_action() returns nullptr on any uncaught C++ exception\n // (see cpp/wllama.cpp). Detect and surface a real error here, otherwise\n // the next two lines would read uninitialized HEAP bytes (specifically,\n // the request buffer's leading \"GLUE\" magic = 1163217991 LE) as\n // outputLen and crash with the very misleading\n // RangeError: Invalid typed array length: 1163217991\n // hiding the actual C++ error which was already printed via @@ERROR.\n if (!outputPtr) {\n throw new Error(\n `wllama_action(\"${argAction}\") failed in C++ (returned nullptr); ` +\n 'see preceding @@ERROR / @@WARN log lines from the worker for the real cause.'\n );\n }\n // length of output buffer is written at the first 4 bytes of input buffer\n const outputLen = new Uint32Array(\n Module.HEAPU8.buffer,\n inputHeapOffset,\n 1\n )[0];\n // copy the output buffer to JS heap\n const outputBuffer = new Uint8Array(outputLen);\n const outputHeapOffset = ptrToHeapOffset(outputPtr);\n const outputSrcView = new Uint8Array(\n Module.HEAPU8.buffer,\n outputHeapOffset,\n outputLen\n );\n outputBuffer.set(outputSrcView, 0); // copy it\n\n // After the model is loaded into WebGPU buffers, we can delete\n // the OPFS copy.\n const useWebGPU = RUN_OPTIONS.pathConfig['wllama.useWebGPU'];\n if ((argAction === 'load' || argAction === 'mtmd_load') && useWebGPU) {\n opfsFreeAll();\n }\n msg({ callbackId, result: outputBuffer }, [outputBuffer.buffer]);\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'wllama.exit') {\n try {\n const result = await wllamaExit();\n msg({ callbackId, result });\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n\n if (verb === 'wllama.debug') {\n try {\n const result = await wllamaDebug();\n msg({ callbackId, result });\n } catch (err) {\n msg({ callbackId, err });\n }\n return;\n }\n};\n"; export declare const OPFS_UTILS_WORKER_CODE = "let accessHandle;\nlet abortController = new AbortController();\n\nasync function openFile(filename) {\n const opfsRoot = await navigator.storage.getDirectory();\n const cacheDir = await opfsRoot.getDirectoryHandle('cache', { create: true });\n const fileHandler = await cacheDir.getFileHandle(filename, { create: true });\n accessHandle = await fileHandler.createSyncAccessHandle();\n accessHandle.truncate(0); // clear file content\n}\n\nasync function writeFile(buf) {\n accessHandle.write(buf);\n}\n\nasync function closeFile() {\n accessHandle.flush();\n accessHandle.close();\n}\n\nasync function writeTextFile(filename, str) {\n await openFile(filename);\n await writeFile(new TextEncoder().encode(str));\n await closeFile();\n}\n\nconst throttled = (func, delay) => {\n let lastRun = 0;\n return (...args) => {\n const now = Date.now();\n if (now - lastRun > delay) {\n lastRun = now;\n func.apply(null, args);\n }\n };\n};\n\nconst assertNonNull = (val) => {\n if (val === null || val === undefined) {\n throw new Error('OPFS Worker: Assertion failed');\n }\n};\n\n// respond to main thread\nconst resOK = () => postMessage({ ok: true });\nconst resProgress = (loaded, total) =>\n postMessage({ progress: { loaded, total } });\nconst resErr = (err) => postMessage({ err });\n\nonmessage = async (e) => {\n try {\n if (!e.data) return;\n\n /**\n * @param {Object} e.data\n *\n * Fine-control FS actions:\n * - { action: 'open', filename: 'string' }\n * - { action: 'write', buf: ArrayBuffer }\n * - { action: 'close' }\n *\n * Simple write API:\n * - { action: 'write-simple', filename: 'string', buf: ArrayBuffer }\n *\n * Download API:\n * - { action: 'download', url: 'string', filename: 'string', options: Object, metadataFileName: 'string' }\n * - { action: 'download-abort' }\n */\n const { action, filename, buf, url, options, metadataFileName } = e.data;\n\n if (action === 'open') {\n assertNonNull(filename);\n await openFile(filename);\n return resOK();\n } else if (action === 'write') {\n assertNonNull(buf);\n await writeFile(buf);\n return resOK();\n } else if (action === 'close') {\n await closeFile();\n return resOK();\n } else if (action === 'write-simple') {\n assertNonNull(filename);\n assertNonNull(buf);\n await openFile(filename);\n await writeFile(buf);\n await closeFile();\n return resOK();\n } else if (action === 'download') {\n assertNonNull(url);\n assertNonNull(filename);\n assertNonNull(metadataFileName);\n assertNonNull(options);\n assertNonNull(options.aborted);\n abortController = new AbortController();\n if (options.aborted) abortController.abort();\n const response = await fetch(url, {\n ...options,\n signal: abortController.signal,\n });\n const contentLength = response.headers.get('content-length');\n const etag = (response.headers.get('etag') || '').replace(\n /[^A-Za-z0-9]/g,\n ''\n );\n const total = parseInt(contentLength, 10);\n const reader = response.body.getReader();\n await openFile(filename);\n let loaded = 0;\n const throttledProgress = throttled(resProgress, 100);\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n loaded += value.byteLength;\n await writeFile(value);\n throttledProgress(loaded, total);\n }\n resProgress(total, total); // 100% done\n await closeFile();\n // make sure this is in-sync with CacheEntryMetadata\n await writeTextFile(\n metadataFileName,\n JSON.stringify({\n originalURL: url,\n originalSize: total,\n etag,\n })\n );\n return resOK();\n } else if (action === 'download-abort') {\n if (abortController) {\n abortController.abort();\n }\n return;\n }\n\n throw new Error('OPFS Worker: Invalid action', e.data);\n } catch (err) {\n return resErr(err);\n }\n};\n"; export declare const WLLAMA_JSPI_SINGLE_THREAD_CODE = "var Module = typeof Module != 'undefined' ? Module : {};\nvar ENVIRONMENT_IS_WEB = !!globalThis.window;\nvar ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;\nvar ENVIRONMENT_IS_NODE =\n globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\nvar _scriptName = globalThis.document?.currentScript?.src;\nif (typeof __filename != 'undefined') {\n _scriptName = __filename;\n} else if (ENVIRONMENT_IS_WORKER) {\n _scriptName = self.location.href;\n}\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\nvar readAsync, readBinary;\nif (ENVIRONMENT_IS_NODE) {\n var fs = require('fs');\n scriptDirectory = __dirname + '/';\n readBinary = (filename) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename);\n return ret;\n };\n readAsync = async (filename, binary = true) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');\n return ret;\n };\n if (process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/');\n }\n arguments_ = process.argv.slice(2);\n if (typeof module != 'undefined') {\n module['exports'] = Module;\n }\n quit_ = (status, toThrow) => {\n process.exitCode = status;\n throw toThrow;\n };\n} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n try {\n scriptDirectory = new URL('.', _scriptName).href;\n } catch {}\n {\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = async (url) => {\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n resolve(xhr.response);\n return;\n }\n reject(xhr.status);\n };\n xhr.onerror = reject;\n xhr.send(null);\n });\n }\n var response = await fetch(url, { credentials: 'same-origin' });\n if (response.ok) {\n return response.arrayBuffer();\n }\n throw new Error(response.status + ' : ' + response.url);\n };\n }\n} else {\n}\nvar out = console.log.bind(console);\nvar err = console.error.bind(console);\nvar wasmBinary;\nvar ABORT = false;\nvar EXITSTATUS;\nfunction assert(condition, text) {\n if (!condition) {\n abort(text);\n }\n}\nvar isFileURI = (filename) => filename.startsWith('file://');\nvar HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\nvar HEAP64, HEAPU64;\nvar runtimeInitialized = false;\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n HEAP8 = new Int8Array(b);\n HEAP16 = new Int16Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n HEAPU16 = new Uint16Array(b);\n HEAP32 = new Int32Array(b);\n HEAPU32 = new Uint32Array(b);\n HEAPF32 = new Float32Array(b);\n HEAPF64 = new Float64Array(b);\n HEAP64 = new BigInt64Array(b);\n HEAPU64 = new BigUint64Array(b);\n}\nfunction initMemory() {\n if (Module['wasmMemory']) {\n wasmMemory = Module['wasmMemory'];\n } else {\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728;\n wasmMemory = new WebAssembly.Memory({\n initial: BigInt(INITIAL_MEMORY / 65536),\n maximum: 65536n,\n address: 'i64',\n });\n }\n updateMemoryViews();\n}\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(onPreRuns);\n}\nfunction initRuntime() {\n runtimeInitialized = true;\n if (!Module['noFSInit'] && !FS.initialized) FS.init();\n TTY.init();\n wasmExports['__wasm_call_ctors']();\n FS.ignorePermissions = false;\n}\nfunction preMain() {}\nfunction postRun() {\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(onPostRuns);\n}\nfunction abort(what) {\n Module['onAbort']?.(what);\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n what += '. Build with -sASSERTIONS for more info.';\n if (runtimeInitialized) {\n ___trap();\n }\n var e = new WebAssembly.RuntimeError(what);\n throw e;\n}\nvar wasmBinaryFile;\nfunction findWasmBinary() {\n return locateFile('wllama.wasm');\n}\nfunction getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n}\nasync function getWasmBinary(binaryFile) {\n if (!wasmBinary) {\n try {\n var response = await readAsync(binaryFile);\n return new Uint8Array(response);\n } catch {}\n }\n return getBinarySync(binaryFile);\n}\nasync function instantiateArrayBuffer(binaryFile, imports) {\n try {\n var binary = await getWasmBinary(binaryFile);\n var instance = await WebAssembly.instantiate(binary, imports);\n return instance;\n } catch (reason) {\n err(`failed to asynchronously prepare wasm: ${reason}`);\n abort(reason);\n }\n}\nasync function instantiateAsync(binary, binaryFile, imports) {\n if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {\n try {\n var response = fetch(binaryFile, { credentials: 'same-origin' });\n var instantiationResult = await WebAssembly.instantiateStreaming(\n response,\n imports\n );\n return instantiationResult;\n } catch (reason) {\n err(`wasm streaming compile failed: ${reason}`);\n err('falling back to ArrayBuffer instantiation');\n }\n }\n return instantiateArrayBuffer(binaryFile, imports);\n}\nfunction getWasmImports() {\n Asyncify.instrumentWasmImports(wasmImports);\n var imports = { env: wasmImports, wasi_snapshot_preview1: wasmImports };\n return imports;\n}\nasync function createWasm() {\n function receiveInstance(instance, module) {\n wasmExports = instance.exports;\n wasmExports = Asyncify.instrumentWasmExports(wasmExports);\n wasmExports = applySignatureConversions(wasmExports);\n assignWasmExports(wasmExports);\n removeRunDependency('wasm-instantiate');\n return wasmExports;\n }\n addRunDependency('wasm-instantiate');\n function receiveInstantiationResult(result) {\n return receiveInstance(result['instance']);\n }\n var info = getWasmImports();\n if (Module['instantiateWasm']) {\n return new Promise((resolve, reject) => {\n Module['instantiateWasm'](info, (inst, mod) => {\n resolve(receiveInstance(inst, mod));\n });\n });\n }\n wasmBinaryFile ??= findWasmBinary();\n var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);\n var exports = receiveInstantiationResult(result);\n return exports;\n}\nclass ExitStatus {\n name = 'ExitStatus';\n constructor(status) {\n this.message = `Program terminated with exit(${status})`;\n this.status = status;\n }\n}\nvar callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n};\nvar onPostRuns = [];\nvar addOnPostRun = (cb) => onPostRuns.push(cb);\nvar onPreRuns = [];\nvar addOnPreRun = (cb) => onPreRuns.push(cb);\nvar runDependencies = 0;\nvar dependenciesFulfilled = null;\nvar removeRunDependency = (id) => {\n runDependencies--;\n Module['monitorRunDependencies']?.(runDependencies);\n if (runDependencies == 0) {\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n};\nvar addRunDependency = (id) => {\n runDependencies++;\n Module['monitorRunDependencies']?.(runDependencies);\n};\nvar noExitRuntime = true;\nvar wasmMemory;\nvar syscallGetVarargP = () => {\n var ret = Number(HEAPU64[SYSCALLS.varargs / 8]);\n SYSCALLS.varargs += 8;\n return ret;\n};\nvar syscallGetVarargI = () => {\n var ret = HEAP32[+SYSCALLS.varargs / 4];\n SYSCALLS.varargs += 4;\n return ret;\n};\nvar PATH = {\n isAbs: (path) => path.charAt(0) === '/',\n splitPath: (filename) => {\n var splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n return splitPathRe.exec(filename).slice(1);\n },\n normalizeArray: (parts, allowAboveRoot) => {\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n if (allowAboveRoot) {\n for (; up; up--) {\n parts.unshift('..');\n }\n }\n return parts;\n },\n normalize: (path) => {\n var isAbsolute = PATH.isAbs(path),\n trailingSlash = path.slice(-1) === '/';\n path = PATH.normalizeArray(\n path.split('/').filter((p) => !!p),\n !isAbsolute\n ).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n },\n dirname: (path) => {\n var result = PATH.splitPath(path),\n root = result[0],\n dir = result[1];\n if (!root && !dir) {\n return '.';\n }\n if (dir) {\n dir = dir.slice(0, -1);\n }\n return root + dir;\n },\n basename: (path) => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n join: (...paths) => PATH.normalize(paths.join('/')),\n join2: (l, r) => PATH.normalize(l + '/' + r),\n};\nvar initRandomFill = () => (view) => crypto.getRandomValues(view);\nvar randomFill = (view) => {\n (randomFill = initRandomFill())(view);\n};\nvar PATH_FS = {\n resolve: (...args) => {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? args[i] : FS.cwd();\n if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n return '';\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = PATH.isAbs(path);\n }\n resolvedPath = PATH.normalizeArray(\n resolvedPath.split('/').filter((p) => !!p),\n !resolvedAbsolute\n ).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n },\n relative: (from, to) => {\n from = PATH_FS.resolve(from).slice(1);\n to = PATH_FS.resolve(to).slice(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n },\n};\nvar UTF8Decoder = globalThis.TextDecoder && new TextDecoder();\nvar findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n var maxIdx = idx + maxBytesToRead;\n if (ignoreNul) return maxIdx;\n while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n return idx;\n};\nvar UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n};\nvar FS_stdin_getChar_buffer = [];\nvar lengthBytesUTF8 = (str) => {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n var c = str.charCodeAt(i);\n if (c <= 127) {\n len++;\n } else if (c <= 2047) {\n len += 2;\n } else if (c >= 55296 && c <= 57343) {\n len += 4;\n ++i;\n } else {\n len += 3;\n }\n }\n return len;\n};\nvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.codePointAt(i);\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++] = 192 | (u >> 6);\n heap[outIdx++] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++] = 224 | (u >> 12);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++] = 240 | (u >> 18);\n heap[outIdx++] = 128 | ((u >> 12) & 63);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n i++;\n }\n }\n heap[outIdx] = 0;\n return outIdx - startIdx;\n};\nvar intArrayFromString = (stringy, dontAddNull, length) => {\n var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n var u8array = new Array(len);\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n if (dontAddNull) u8array.length = numBytesWritten;\n return u8array;\n};\nvar FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n var result = null;\n if (ENVIRONMENT_IS_NODE) {\n var BUFSIZE = 256;\n var buf = Buffer.alloc(BUFSIZE);\n var bytesRead = 0;\n var fd = process.stdin.fd;\n try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n } catch (e) {\n if (e.toString().includes('EOF')) bytesRead = 0;\n else throw e;\n }\n if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8');\n }\n } else if (globalThis.window?.prompt) {\n result = window.prompt('Input: ');\n if (result !== null) {\n result += '\\n';\n }\n } else {\n }\n if (!result) {\n return null;\n }\n FS_stdin_getChar_buffer = intArrayFromString(result, true);\n }\n return FS_stdin_getChar_buffer.shift();\n};\nvar TTY = {\n ttys: [],\n init() {},\n shutdown() {},\n register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops };\n FS.registerDevice(dev, TTY.stream_ops);\n },\n stream_ops: {\n open(stream) {\n var tty = TTY.ttys[stream.node.rdev];\n if (!tty) {\n throw new FS.ErrnoError(43);\n }\n stream.tty = tty;\n stream.seekable = false;\n },\n close(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n fsync(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n read(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60);\n }\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = stream.tty.ops.get_char(stream.tty);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60);\n }\n try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n }\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n },\n default_tty_ops: {\n get_char(tty) {\n return FS_stdin_getChar();\n },\n put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n ioctl_tcgets(tty) {\n return {\n c_iflag: 25856,\n c_oflag: 5,\n c_cflag: 191,\n c_lflag: 35387,\n c_cc: [\n 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ],\n };\n },\n ioctl_tcsets(tty, optional_actions, data) {\n return 0;\n },\n ioctl_tiocgwinsz(tty) {\n return [24, 80];\n },\n },\n default_tty1_ops: {\n put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n },\n};\nvar zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size);\nvar alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;\nvar mmapAlloc = (size) => {\n size = alignMemory(size, 65536);\n var ptr = _emscripten_builtin_memalign(65536, size);\n if (ptr) zeroMemory(ptr, size);\n return ptr;\n};\nvar MEMFS = {\n ops_table: null,\n mount(mount) {\n return MEMFS.createNode(null, '/', 16895, 0);\n },\n createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n throw new FS.ErrnoError(63);\n }\n MEMFS.ops_table ||= {\n dir: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n lookup: MEMFS.node_ops.lookup,\n mknod: MEMFS.node_ops.mknod,\n rename: MEMFS.node_ops.rename,\n unlink: MEMFS.node_ops.unlink,\n rmdir: MEMFS.node_ops.rmdir,\n readdir: MEMFS.node_ops.readdir,\n symlink: MEMFS.node_ops.symlink,\n },\n stream: { llseek: MEMFS.stream_ops.llseek },\n },\n file: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek,\n read: MEMFS.stream_ops.read,\n write: MEMFS.stream_ops.write,\n mmap: MEMFS.stream_ops.mmap,\n msync: MEMFS.stream_ops.msync,\n },\n },\n link: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n readlink: MEMFS.node_ops.readlink,\n },\n stream: {},\n },\n chrdev: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: FS.chrdev_stream_ops,\n },\n };\n var node = FS.createNode(parent, name, mode, dev);\n if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node;\n node.stream_ops = MEMFS.ops_table.dir.stream;\n node.contents = {};\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node;\n node.stream_ops = MEMFS.ops_table.file.stream;\n node.usedBytes = 0;\n node.contents = null;\n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node;\n node.stream_ops = MEMFS.ops_table.link.stream;\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node;\n node.stream_ops = MEMFS.ops_table.chrdev.stream;\n }\n node.atime = node.mtime = node.ctime = Date.now();\n if (parent) {\n parent.contents[name] = node;\n parent.atime = parent.mtime = parent.ctime = node.atime;\n }\n return node;\n },\n getFileDataAsTypedArray(node) {\n if (!node.contents) return new Uint8Array(0);\n if (node.contents.subarray)\n return node.contents.subarray(0, node.usedBytes);\n return new Uint8Array(node.contents);\n },\n expandFileStorage(node, newCapacity) {\n var prevCapacity = node.contents ? node.contents.length : 0;\n if (prevCapacity >= newCapacity) return;\n var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n newCapacity = Math.max(\n newCapacity,\n (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>> 0\n );\n if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n var oldContents = node.contents;\n node.contents = new Uint8Array(newCapacity);\n if (node.usedBytes > 0)\n node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n },\n resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize) return;\n if (newSize == 0) {\n node.contents = null;\n node.usedBytes = 0;\n } else {\n var oldContents = node.contents;\n node.contents = new Uint8Array(newSize);\n if (oldContents) {\n node.contents.set(\n oldContents.subarray(0, Math.min(newSize, node.usedBytes))\n );\n }\n node.usedBytes = newSize;\n }\n },\n node_ops: {\n getattr(node) {\n var attr = {};\n attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n attr.ino = node.id;\n attr.mode = node.mode;\n attr.nlink = 1;\n attr.uid = 0;\n attr.gid = 0;\n attr.rdev = node.rdev;\n if (FS.isDir(node.mode)) {\n attr.size = 4096;\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes;\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length;\n } else {\n attr.size = 0;\n }\n attr.atime = new Date(node.atime);\n attr.mtime = new Date(node.mtime);\n attr.ctime = new Date(node.ctime);\n attr.blksize = 4096;\n attr.blocks = Math.ceil(attr.size / attr.blksize);\n return attr;\n },\n setattr(node, attr) {\n for (const key of ['mode', 'atime', 'mtime', 'ctime']) {\n if (attr[key] != null) {\n node[key] = attr[key];\n }\n }\n if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size);\n }\n },\n lookup(parent, name) {\n if (!MEMFS.doesNotExistError) {\n MEMFS.doesNotExistError = new FS.ErrnoError(44);\n MEMFS.doesNotExistError.stack = '';\n }\n throw MEMFS.doesNotExistError;\n },\n mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev);\n },\n rename(old_node, new_dir, new_name) {\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (new_node) {\n if (FS.isDir(old_node.mode)) {\n for (var i in new_node.contents) {\n throw new FS.ErrnoError(55);\n }\n }\n FS.hashRemoveNode(new_node);\n }\n delete old_node.parent.contents[old_node.name];\n new_dir.contents[new_name] = old_node;\n old_node.name = new_name;\n new_dir.ctime =\n new_dir.mtime =\n old_node.parent.ctime =\n old_node.parent.mtime =\n Date.now();\n },\n unlink(parent, name) {\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n rmdir(parent, name) {\n var node = FS.lookupNode(parent, name);\n for (var i in node.contents) {\n throw new FS.ErrnoError(55);\n }\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n readdir(node) {\n return ['.', '..', ...Object.keys(node.contents)];\n },\n symlink(parent, newname, oldpath) {\n var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);\n node.link = oldpath;\n return node;\n },\n readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n return node.link;\n },\n },\n stream_ops: {\n read(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= stream.node.usedBytes) return 0;\n var size = Math.min(stream.node.usedBytes - position, length);\n if (size > 8 && contents.subarray) {\n buffer.set(contents.subarray(position, position + size), offset);\n } else {\n for (var i = 0; i < size; i++)\n buffer[offset + i] = contents[position + i];\n }\n return size;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (buffer.buffer === HEAP8.buffer) {\n canOwn = false;\n }\n if (!length) return 0;\n var node = stream.node;\n node.mtime = node.ctime = Date.now();\n if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (node.usedBytes === 0 && position === 0) {\n node.contents = buffer.slice(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (position + length <= node.usedBytes) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n return length;\n }\n }\n MEMFS.expandFileStorage(node, position + length);\n if (node.contents.subarray && buffer.subarray) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n } else {\n for (var i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i];\n }\n }\n node.usedBytes = Math.max(node.usedBytes, position + length);\n return length;\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes;\n }\n }\n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n return position;\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n var ptr;\n var allocated;\n var contents = stream.node.contents;\n if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n allocated = false;\n ptr = contents.byteOffset;\n } else {\n allocated = true;\n ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n if (contents) {\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length);\n } else {\n contents = Array.prototype.slice.call(\n contents,\n position,\n position + length\n );\n }\n }\n HEAP8.set(contents, ptr);\n }\n }\n return { ptr, allocated };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n return 0;\n },\n },\n};\nvar FS_modeStringToFlags = (str) => {\n var flagModes = {\n r: 0,\n 'r+': 2,\n w: 512 | 64 | 1,\n 'w+': 512 | 64 | 2,\n a: 1024 | 64 | 1,\n 'a+': 1024 | 64 | 2,\n };\n var flags = flagModes[str];\n if (typeof flags == 'undefined') {\n throw new Error(`Unknown file open mode: ${str}`);\n }\n return flags;\n};\nvar FS_getMode = (canRead, canWrite) => {\n var mode = 0;\n if (canRead) mode |= 292 | 73;\n if (canWrite) mode |= 146;\n return mode;\n};\nvar asyncLoad = async (url) => {\n var arrayBuffer = await readAsync(url);\n return new Uint8Array(arrayBuffer);\n};\nvar FS_createDataFile = (...args) => FS.createDataFile(...args);\nvar getUniqueRunDependency = (id) => id;\nvar preloadPlugins = [];\nvar FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n if (typeof Browser != 'undefined') Browser.init();\n for (var plugin of preloadPlugins) {\n if (plugin['canHandle'](fullname)) {\n return plugin['handle'](byteArray, fullname);\n }\n }\n return byteArray;\n};\nvar FS_preloadFile = async (\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n var dep = getUniqueRunDependency(`cp ${fullname}`);\n addRunDependency(dep);\n try {\n var byteArray = url;\n if (typeof url == 'string') {\n byteArray = await asyncLoad(url);\n }\n byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n preFinish?.();\n if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n }\n } finally {\n removeRunDependency(dep);\n }\n};\nvar FS_createPreloadedFile = (\n parent,\n name,\n url,\n canRead,\n canWrite,\n onload,\n onerror,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n FS_preloadFile(\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n )\n .then(onload)\n .catch(onerror);\n};\nvar FS = {\n root: null,\n mounts: [],\n devices: {},\n streams: [],\n nextInode: 1,\n nameTable: null,\n currentPath: '/',\n initialized: false,\n ignorePermissions: true,\n filesystems: null,\n syncFSRequests: 0,\n readFiles: {},\n ErrnoError: class {\n name = 'ErrnoError';\n constructor(errno) {\n this.errno = errno;\n }\n },\n FSStream: class {\n shared = {};\n get object() {\n return this.node;\n }\n set object(val) {\n this.node = val;\n }\n get isRead() {\n return (this.flags & 2097155) !== 1;\n }\n get isWrite() {\n return (this.flags & 2097155) !== 0;\n }\n get isAppend() {\n return this.flags & 1024;\n }\n get flags() {\n return this.shared.flags;\n }\n set flags(val) {\n this.shared.flags = val;\n }\n get position() {\n return this.shared.position;\n }\n set position(val) {\n this.shared.position = val;\n }\n },\n FSNode: class {\n node_ops = {};\n stream_ops = {};\n readMode = 292 | 73;\n writeMode = 146;\n mounted = null;\n constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this;\n }\n this.parent = parent;\n this.mount = parent.mount;\n this.id = FS.nextInode++;\n this.name = name;\n this.mode = mode;\n this.rdev = rdev;\n this.atime = this.mtime = this.ctime = Date.now();\n }\n get read() {\n return (this.mode & this.readMode) === this.readMode;\n }\n set read(val) {\n val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n }\n get write() {\n return (this.mode & this.writeMode) === this.writeMode;\n }\n set write(val) {\n val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n }\n get isFolder() {\n return FS.isDir(this.mode);\n }\n get isDevice() {\n return FS.isChrdev(this.mode);\n }\n },\n lookupPath(path, opts = {}) {\n if (!path) {\n throw new FS.ErrnoError(44);\n }\n opts.follow_mount ??= true;\n if (!PATH.isAbs(path)) {\n path = FS.cwd() + '/' + path;\n }\n linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n var parts = path.split('/').filter((p) => !!p);\n var current = FS.root;\n var current_path = '/';\n for (var i = 0; i < parts.length; i++) {\n var islast = i === parts.length - 1;\n if (islast && opts.parent) {\n break;\n }\n if (parts[i] === '.') {\n continue;\n }\n if (parts[i] === '..') {\n current_path = PATH.dirname(current_path);\n if (FS.isRoot(current)) {\n path = current_path + '/' + parts.slice(i + 1).join('/');\n nlinks--;\n continue linkloop;\n } else {\n current = current.parent;\n }\n continue;\n }\n current_path = PATH.join2(current_path, parts[i]);\n try {\n current = FS.lookupNode(current, parts[i]);\n } catch (e) {\n if (e?.errno === 44 && islast && opts.noent_okay) {\n return { path: current_path };\n }\n throw e;\n }\n if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {\n current = current.mounted.root;\n }\n if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n if (!current.node_ops.readlink) {\n throw new FS.ErrnoError(52);\n }\n var link = current.node_ops.readlink(current);\n if (!PATH.isAbs(link)) {\n link = PATH.dirname(current_path) + '/' + link;\n }\n path = link + '/' + parts.slice(i + 1).join('/');\n continue linkloop;\n }\n }\n return { path: current_path, node: current };\n }\n throw new FS.ErrnoError(32);\n },\n getPath(node) {\n var path;\n while (true) {\n if (FS.isRoot(node)) {\n var mount = node.mount.mountpoint;\n if (!path) return mount;\n return mount[mount.length - 1] !== '/'\n ? `${mount}/${path}`\n : mount + path;\n }\n path = path ? `${node.name}/${path}` : node.name;\n node = node.parent;\n }\n },\n hashName(parentid, name) {\n var hash = 0;\n for (var i = 0; i < name.length; i++) {\n hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n }\n return ((parentid + hash) >>> 0) % FS.nameTable.length;\n },\n hashAddNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n node.name_next = FS.nameTable[hash];\n FS.nameTable[hash] = node;\n },\n hashRemoveNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next;\n } else {\n var current = FS.nameTable[hash];\n while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next;\n break;\n }\n current = current.name_next;\n }\n }\n },\n lookupNode(parent, name) {\n var errCode = FS.mayLookup(parent);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n var hash = FS.hashName(parent.id, name);\n for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n var nodeName = node.name;\n if (node.parent.id === parent.id && nodeName === name) {\n return node;\n }\n }\n return FS.lookup(parent, name);\n },\n createNode(parent, name, mode, rdev) {\n var node = new FS.FSNode(parent, name, mode, rdev);\n FS.hashAddNode(node);\n return node;\n },\n destroyNode(node) {\n FS.hashRemoveNode(node);\n },\n isRoot(node) {\n return node === node.parent;\n },\n isMountpoint(node) {\n return !!node.mounted;\n },\n isFile(mode) {\n return (mode & 61440) === 32768;\n },\n isDir(mode) {\n return (mode & 61440) === 16384;\n },\n isLink(mode) {\n return (mode & 61440) === 40960;\n },\n isChrdev(mode) {\n return (mode & 61440) === 8192;\n },\n isBlkdev(mode) {\n return (mode & 61440) === 24576;\n },\n isFIFO(mode) {\n return (mode & 61440) === 4096;\n },\n isSocket(mode) {\n return (mode & 49152) === 49152;\n },\n flagsToPermissionString(flag) {\n var perms = ['r', 'w', 'rw'][flag & 3];\n if (flag & 512) {\n perms += 'w';\n }\n return perms;\n },\n nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0;\n }\n if (perms.includes('r') && !(node.mode & 292)) {\n return 2;\n } else if (perms.includes('w') && !(node.mode & 146)) {\n return 2;\n } else if (perms.includes('x') && !(node.mode & 73)) {\n return 2;\n }\n return 0;\n },\n mayLookup(dir) {\n if (!FS.isDir(dir.mode)) return 54;\n var errCode = FS.nodePermissions(dir, 'x');\n if (errCode) return errCode;\n if (!dir.node_ops.lookup) return 2;\n return 0;\n },\n mayCreate(dir, name) {\n if (!FS.isDir(dir.mode)) {\n return 54;\n }\n try {\n var node = FS.lookupNode(dir, name);\n return 20;\n } catch (e) {}\n return FS.nodePermissions(dir, 'wx');\n },\n mayDelete(dir, name, isdir) {\n var node;\n try {\n node = FS.lookupNode(dir, name);\n } catch (e) {\n return e.errno;\n }\n var errCode = FS.nodePermissions(dir, 'wx');\n if (errCode) {\n return errCode;\n }\n if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54;\n }\n if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10;\n }\n } else {\n if (FS.isDir(node.mode)) {\n return 31;\n }\n }\n return 0;\n },\n mayOpen(node, flags) {\n if (!node) {\n return 44;\n }\n if (FS.isLink(node.mode)) {\n return 32;\n } else if (FS.isDir(node.mode)) {\n if (FS.flagsToPermissionString(flags) !== 'r' || flags & (512 | 64)) {\n return 31;\n }\n }\n return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n },\n checkOpExists(op, err) {\n if (!op) {\n throw new FS.ErrnoError(err);\n }\n return op;\n },\n MAX_OPEN_FDS: 4096,\n nextfd() {\n for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd;\n }\n }\n throw new FS.ErrnoError(33);\n },\n getStreamChecked(fd) {\n var stream = FS.getStream(fd);\n if (!stream) {\n throw new FS.ErrnoError(8);\n }\n return stream;\n },\n getStream: (fd) => FS.streams[fd],\n createStream(stream, fd = -1) {\n stream = Object.assign(new FS.FSStream(), stream);\n if (fd == -1) {\n fd = FS.nextfd();\n }\n stream.fd = fd;\n FS.streams[fd] = stream;\n return stream;\n },\n closeStream(fd) {\n FS.streams[fd] = null;\n },\n dupStream(origStream, fd = -1) {\n var stream = FS.createStream(origStream, fd);\n stream.stream_ops?.dup?.(stream);\n return stream;\n },\n doSetAttr(stream, node, attr) {\n var setattr = stream?.stream_ops.setattr;\n var arg = setattr ? stream : node;\n setattr ??= node.node_ops.setattr;\n FS.checkOpExists(setattr, 63);\n setattr(arg, attr);\n },\n chrdev_stream_ops: {\n open(stream) {\n var device = FS.getDevice(stream.node.rdev);\n stream.stream_ops = device.stream_ops;\n stream.stream_ops.open?.(stream);\n },\n llseek() {\n throw new FS.ErrnoError(70);\n },\n },\n major: (dev) => dev >> 8,\n minor: (dev) => dev & 255,\n makedev: (ma, mi) => (ma << 8) | mi,\n registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops };\n },\n getDevice: (dev) => FS.devices[dev],\n getMounts(mount) {\n var mounts = [];\n var check = [mount];\n while (check.length) {\n var m = check.pop();\n mounts.push(m);\n check.push(...m.mounts);\n }\n return mounts;\n },\n syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate;\n populate = false;\n }\n FS.syncFSRequests++;\n if (FS.syncFSRequests > 1) {\n err(\n `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`\n );\n }\n var mounts = FS.getMounts(FS.root.mount);\n var completed = 0;\n function doCallback(errCode) {\n FS.syncFSRequests--;\n return callback(errCode);\n }\n function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true;\n return doCallback(errCode);\n }\n return;\n }\n if (++completed >= mounts.length) {\n doCallback(null);\n }\n }\n for (var mount of mounts) {\n if (mount.type.syncfs) {\n mount.type.syncfs(mount, populate, done);\n } else {\n done(null);\n }\n }\n },\n mount(type, opts, mountpoint) {\n var root = mountpoint === '/';\n var pseudo = !mountpoint;\n var node;\n if (root && FS.root) {\n throw new FS.ErrnoError(10);\n } else if (!root && !pseudo) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n mountpoint = lookup.path;\n node = lookup.node;\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n }\n var mount = { type, opts, mountpoint, mounts: [] };\n var mountRoot = type.mount(mount);\n mountRoot.mount = mount;\n mount.root = mountRoot;\n if (root) {\n FS.root = mountRoot;\n } else if (node) {\n node.mounted = mount;\n if (node.mount) {\n node.mount.mounts.push(mount);\n }\n }\n return mountRoot;\n },\n unmount(mountpoint) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28);\n }\n var node = lookup.node;\n var mount = node.mounted;\n var mounts = FS.getMounts(mount);\n for (var [hash, current] of Object.entries(FS.nameTable)) {\n while (current) {\n var next = current.name_next;\n if (mounts.includes(current.mount)) {\n FS.destroyNode(current);\n }\n current = next;\n }\n }\n node.mounted = null;\n var idx = node.mount.mounts.indexOf(mount);\n node.mount.mounts.splice(idx, 1);\n },\n lookup(parent, name) {\n return parent.node_ops.lookup(parent, name);\n },\n mknod(path, mode, dev) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n if (!name) {\n throw new FS.ErrnoError(28);\n }\n if (name === '.' || name === '..') {\n throw new FS.ErrnoError(20);\n }\n var errCode = FS.mayCreate(parent, name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.mknod(parent, name, mode, dev);\n },\n statfs(path) {\n return FS.statfsNode(FS.lookupPath(path, { follow: true }).node);\n },\n statfsStream(stream) {\n return FS.statfsNode(stream.node);\n },\n statfsNode(node) {\n var rtn = {\n bsize: 4096,\n frsize: 4096,\n blocks: 1e6,\n bfree: 5e5,\n bavail: 5e5,\n files: FS.nextInode,\n ffree: FS.nextInode - 1,\n fsid: 42,\n flags: 2,\n namelen: 255,\n };\n if (node.node_ops.statfs) {\n Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n }\n return rtn;\n },\n create(path, mode = 438) {\n mode &= 4095;\n mode |= 32768;\n return FS.mknod(path, mode, 0);\n },\n mkdir(path, mode = 511) {\n mode &= 511 | 512;\n mode |= 16384;\n return FS.mknod(path, mode, 0);\n },\n mkdirTree(path, mode) {\n var dirs = path.split('/');\n var d = '';\n for (var dir of dirs) {\n if (!dir) continue;\n if (d || PATH.isAbs(path)) d += '/';\n d += dir;\n try {\n FS.mkdir(d, mode);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n }\n },\n mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode;\n mode = 438;\n }\n mode |= 8192;\n return FS.mknod(path, mode, dev);\n },\n symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44);\n }\n var lookup = FS.lookupPath(newpath, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var newname = PATH.basename(newpath);\n var errCode = FS.mayCreate(parent, newname);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.symlink(parent, newname, oldpath);\n },\n rename(old_path, new_path) {\n var old_dirname = PATH.dirname(old_path);\n var new_dirname = PATH.dirname(new_path);\n var old_name = PATH.basename(old_path);\n var new_name = PATH.basename(new_path);\n var lookup, old_dir, new_dir;\n lookup = FS.lookupPath(old_path, { parent: true });\n old_dir = lookup.node;\n lookup = FS.lookupPath(new_path, { parent: true });\n new_dir = lookup.node;\n if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75);\n }\n var old_node = FS.lookupNode(old_dir, old_name);\n var relative = PATH_FS.relative(old_path, new_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28);\n }\n relative = PATH_FS.relative(new_path, old_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55);\n }\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (old_node === new_node) {\n return;\n }\n var isdir = FS.isDir(old_node.mode);\n var errCode = FS.mayDelete(old_dir, old_name, isdir);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n errCode = new_node\n ? FS.mayDelete(new_dir, new_name, isdir)\n : FS.mayCreate(new_dir, new_name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n throw new FS.ErrnoError(10);\n }\n if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n FS.hashRemoveNode(old_node);\n try {\n old_dir.node_ops.rename(old_node, new_dir, new_name);\n old_node.parent = new_dir;\n } catch (e) {\n throw e;\n } finally {\n FS.hashAddNode(old_node);\n }\n },\n rmdir(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, true);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.rmdir(parent, name);\n FS.destroyNode(node);\n },\n readdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var readdir = FS.checkOpExists(node.node_ops.readdir, 54);\n return readdir(node);\n },\n unlink(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, false);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.unlink(parent, name);\n FS.destroyNode(node);\n },\n readlink(path) {\n var lookup = FS.lookupPath(path);\n var link = lookup.node;\n if (!link) {\n throw new FS.ErrnoError(44);\n }\n if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28);\n }\n return link.node_ops.readlink(link);\n },\n stat(path, dontFollow) {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n var node = lookup.node;\n var getattr = FS.checkOpExists(node.node_ops.getattr, 63);\n return getattr(node);\n },\n fstat(fd) {\n var stream = FS.getStreamChecked(fd);\n var node = stream.node;\n var getattr = stream.stream_ops.getattr;\n var arg = getattr ? stream : node;\n getattr ??= node.node_ops.getattr;\n FS.checkOpExists(getattr, 63);\n return getattr(arg);\n },\n lstat(path) {\n return FS.stat(path, true);\n },\n doChmod(stream, node, mode, dontFollow) {\n FS.doSetAttr(stream, node, {\n mode: (mode & 4095) | (node.mode & ~4095),\n ctime: Date.now(),\n dontFollow,\n });\n },\n chmod(path, mode, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChmod(null, node, mode, dontFollow);\n },\n lchmod(path, mode) {\n FS.chmod(path, mode, true);\n },\n fchmod(fd, mode) {\n var stream = FS.getStreamChecked(fd);\n FS.doChmod(stream, stream.node, mode, false);\n },\n doChown(stream, node, dontFollow) {\n FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow });\n },\n chown(path, uid, gid, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChown(null, node, dontFollow);\n },\n lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true);\n },\n fchown(fd, uid, gid) {\n var stream = FS.getStreamChecked(fd);\n FS.doChown(stream, stream.node, false);\n },\n doTruncate(stream, node, len) {\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.nodePermissions(node, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() });\n },\n truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28);\n }\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: true });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doTruncate(null, node, len);\n },\n ftruncate(fd, len) {\n var stream = FS.getStreamChecked(fd);\n if (len < 0 || (stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28);\n }\n FS.doTruncate(stream, stream.node, len);\n },\n utime(path, atime, mtime) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var setattr = FS.checkOpExists(node.node_ops.setattr, 63);\n setattr(node, { atime, mtime });\n },\n open(path, flags, mode = 438) {\n if (path === '') {\n throw new FS.ErrnoError(44);\n }\n flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n if (flags & 64) {\n mode = (mode & 4095) | 32768;\n } else {\n mode = 0;\n }\n var node;\n var isDirPath;\n if (typeof path == 'object') {\n node = path;\n } else {\n isDirPath = path.endsWith('/');\n var lookup = FS.lookupPath(path, {\n follow: !(flags & 131072),\n noent_okay: true,\n });\n node = lookup.node;\n path = lookup.path;\n }\n var created = false;\n if (flags & 64) {\n if (node) {\n if (flags & 128) {\n throw new FS.ErrnoError(20);\n }\n } else if (isDirPath) {\n throw new FS.ErrnoError(31);\n } else {\n node = FS.mknod(path, mode | 511, 0);\n created = true;\n }\n }\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n if (FS.isChrdev(node.mode)) {\n flags &= ~512;\n }\n if (flags & 65536 && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n if (!created) {\n var errCode = FS.mayOpen(node, flags);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n if (flags & 512 && !created) {\n FS.truncate(node, 0);\n }\n flags &= ~(128 | 512 | 131072);\n var stream = FS.createStream({\n node,\n path: FS.getPath(node),\n flags,\n seekable: true,\n position: 0,\n stream_ops: node.stream_ops,\n ungotten: [],\n error: false,\n });\n if (stream.stream_ops.open) {\n stream.stream_ops.open(stream);\n }\n if (created) {\n FS.chmod(node, mode & 511);\n }\n if (Module['logReadFiles'] && !(flags & 1)) {\n if (!(path in FS.readFiles)) {\n FS.readFiles[path] = 1;\n }\n }\n return stream;\n },\n close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (stream.getdents) stream.getdents = null;\n try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream);\n }\n } catch (e) {\n throw e;\n } finally {\n FS.closeStream(stream.fd);\n }\n stream.fd = null;\n },\n isClosed(stream) {\n return stream.fd === null;\n },\n llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70);\n }\n if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28);\n }\n stream.position = stream.stream_ops.llseek(stream, offset, whence);\n stream.ungotten = [];\n return stream.position;\n },\n read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesRead = stream.stream_ops.read(\n stream,\n buffer,\n offset,\n length,\n position\n );\n if (!seeking) stream.position += bytesRead;\n return bytesRead;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28);\n }\n if (stream.seekable && stream.flags & 1024) {\n FS.llseek(stream, 0, 2);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesWritten = stream.stream_ops.write(\n stream,\n buffer,\n offset,\n length,\n position,\n canOwn\n );\n if (!seeking) stream.position += bytesWritten;\n return bytesWritten;\n },\n mmap(stream, length, position, prot, flags) {\n if (\n (prot & 2) !== 0 &&\n (flags & 2) === 0 &&\n (stream.flags & 2097155) !== 2\n ) {\n throw new FS.ErrnoError(2);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2);\n }\n if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43);\n }\n if (!length) {\n throw new FS.ErrnoError(28);\n }\n return stream.stream_ops.mmap(stream, length, position, prot, flags);\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0;\n }\n return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n },\n ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59);\n }\n return stream.stream_ops.ioctl(stream, cmd, arg);\n },\n readFile(path, opts = {}) {\n opts.flags = opts.flags || 0;\n opts.encoding = opts.encoding || 'binary';\n if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n abort(`Invalid encoding type \"${opts.encoding}\"`);\n }\n var stream = FS.open(path, opts.flags);\n var stat = FS.stat(path);\n var length = stat.size;\n var buf = new Uint8Array(length);\n FS.read(stream, buf, 0, length, 0);\n if (opts.encoding === 'utf8') {\n buf = UTF8ArrayToString(buf);\n }\n FS.close(stream);\n return buf;\n },\n writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577;\n var stream = FS.open(path, opts.flags, opts.mode);\n if (typeof data == 'string') {\n data = new Uint8Array(intArrayFromString(data, true));\n }\n if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n } else {\n abort('Unsupported data type');\n }\n FS.close(stream);\n },\n cwd: () => FS.currentPath,\n chdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n if (lookup.node === null) {\n throw new FS.ErrnoError(44);\n }\n if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54);\n }\n var errCode = FS.nodePermissions(lookup.node, 'x');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.currentPath = lookup.path;\n },\n createDefaultDirectories() {\n FS.mkdir('/tmp');\n FS.mkdir('/home');\n FS.mkdir('/home/web_user');\n },\n createDefaultDevices() {\n FS.mkdir('/dev');\n FS.registerDevice(FS.makedev(1, 3), {\n read: () => 0,\n write: (stream, buffer, offset, length, pos) => length,\n llseek: () => 0,\n });\n FS.mkdev('/dev/null', FS.makedev(1, 3));\n TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n FS.mkdev('/dev/tty', FS.makedev(5, 0));\n FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n var randomBuffer = new Uint8Array(1024),\n randomLeft = 0;\n var randomByte = () => {\n if (randomLeft === 0) {\n randomFill(randomBuffer);\n randomLeft = randomBuffer.byteLength;\n }\n return randomBuffer[--randomLeft];\n };\n FS.createDevice('/dev', 'random', randomByte);\n FS.createDevice('/dev', 'urandom', randomByte);\n FS.mkdir('/dev/shm');\n FS.mkdir('/dev/shm/tmp');\n },\n createSpecialDirectories() {\n FS.mkdir('/proc');\n var proc_self = FS.mkdir('/proc/self');\n FS.mkdir('/proc/self/fd');\n FS.mount(\n {\n mount() {\n var node = FS.createNode(proc_self, 'fd', 16895, 73);\n node.stream_ops = { llseek: MEMFS.stream_ops.llseek };\n node.node_ops = {\n lookup(parent, name) {\n var fd = +name;\n var stream = FS.getStreamChecked(fd);\n var ret = {\n parent: null,\n mount: { mountpoint: 'fake' },\n node_ops: { readlink: () => stream.path },\n id: fd + 1,\n };\n ret.parent = ret;\n return ret;\n },\n readdir() {\n return Array.from(FS.streams.entries())\n .filter(([k, v]) => v)\n .map(([k, v]) => k.toString());\n },\n };\n return node;\n },\n },\n {},\n '/proc/self/fd'\n );\n },\n createStandardStreams(input, output, error) {\n if (input) {\n FS.createDevice('/dev', 'stdin', input);\n } else {\n FS.symlink('/dev/tty', '/dev/stdin');\n }\n if (output) {\n FS.createDevice('/dev', 'stdout', null, output);\n } else {\n FS.symlink('/dev/tty', '/dev/stdout');\n }\n if (error) {\n FS.createDevice('/dev', 'stderr', null, error);\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr');\n }\n var stdin = FS.open('/dev/stdin', 0);\n var stdout = FS.open('/dev/stdout', 1);\n var stderr = FS.open('/dev/stderr', 1);\n },\n staticInit() {\n FS.nameTable = new Array(4096);\n FS.mount(MEMFS, {}, '/');\n FS.createDefaultDirectories();\n FS.createDefaultDevices();\n FS.createSpecialDirectories();\n FS.filesystems = { MEMFS };\n },\n init(input, output, error) {\n FS.initialized = true;\n input ??= Module['stdin'];\n output ??= Module['stdout'];\n error ??= Module['stderr'];\n FS.createStandardStreams(input, output, error);\n },\n quit() {\n FS.initialized = false;\n for (var stream of FS.streams) {\n if (stream) {\n FS.close(stream);\n }\n }\n },\n findObject(path, dontResolveLastLink) {\n var ret = FS.analyzePath(path, dontResolveLastLink);\n if (!ret.exists) {\n return null;\n }\n return ret.object;\n },\n analyzePath(path, dontResolveLastLink) {\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n path = lookup.path;\n } catch (e) {}\n var ret = {\n isRoot: false,\n exists: false,\n error: 0,\n name: null,\n path: null,\n object: null,\n parentExists: false,\n parentPath: null,\n parentObject: null,\n };\n try {\n var lookup = FS.lookupPath(path, { parent: true });\n ret.parentExists = true;\n ret.parentPath = lookup.path;\n ret.parentObject = lookup.node;\n ret.name = PATH.basename(path);\n lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n ret.exists = true;\n ret.path = lookup.path;\n ret.object = lookup.node;\n ret.name = lookup.node.name;\n ret.isRoot = lookup.path === '/';\n } catch (e) {\n ret.error = e.errno;\n }\n return ret;\n },\n createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n var parts = path.split('/').reverse();\n while (parts.length) {\n var part = parts.pop();\n if (!part) continue;\n var current = PATH.join2(parent, part);\n try {\n FS.mkdir(current);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n parent = current;\n }\n return current;\n },\n createFile(parent, name, properties, canRead, canWrite) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(canRead, canWrite);\n return FS.create(path, mode);\n },\n createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n var path = name;\n if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n path = name ? PATH.join2(parent, name) : parent;\n }\n var mode = FS_getMode(canRead, canWrite);\n var node = FS.create(path, mode);\n if (data) {\n if (typeof data == 'string') {\n var arr = new Array(data.length);\n for (var i = 0, len = data.length; i < len; ++i)\n arr[i] = data.charCodeAt(i);\n data = arr;\n }\n FS.chmod(node, mode | 146);\n var stream = FS.open(node, 577);\n FS.write(stream, data, 0, data.length, 0, canOwn);\n FS.close(stream);\n FS.chmod(node, mode);\n }\n },\n createDevice(parent, name, input, output) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(!!input, !!output);\n FS.createDevice.major ??= 64;\n var dev = FS.makedev(FS.createDevice.major++, 0);\n FS.registerDevice(dev, {\n open(stream) {\n stream.seekable = false;\n },\n close(stream) {\n if (output?.buffer?.length) {\n output(10);\n }\n },\n read(stream, buffer, offset, length, pos) {\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = input();\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset + i]);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n });\n return FS.mkdev(path, mode, dev);\n },\n forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n if (globalThis.XMLHttpRequest) {\n abort(\n '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.'\n );\n } else {\n try {\n obj.contents = readBinary(obj.url);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n },\n createLazyFile(parent, name, url, canRead, canWrite) {\n class LazyUint8Array {\n lengthKnown = false;\n chunks = [];\n get(idx) {\n if (idx > this.length - 1 || idx < 0) {\n return undefined;\n }\n var chunkOffset = idx % this.chunkSize;\n var chunkNum = (idx / this.chunkSize) | 0;\n return this.getter(chunkNum)[chunkOffset];\n }\n setDataGetter(getter) {\n this.getter = getter;\n }\n cacheLength() {\n var xhr = new XMLHttpRequest();\n xhr.open('HEAD', url, false);\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n var datalength = Number(xhr.getResponseHeader('Content-length'));\n var header;\n var hasByteServing =\n (header = xhr.getResponseHeader('Accept-Ranges')) &&\n header === 'bytes';\n var usesGzip =\n (header = xhr.getResponseHeader('Content-Encoding')) &&\n header === 'gzip';\n var chunkSize = 1024 * 1024;\n if (!hasByteServing) chunkSize = datalength;\n var doXHR = (from, to) => {\n if (from > to)\n abort(\n 'invalid range (' + from + ', ' + to + ') or no bytes requested!'\n );\n if (to > datalength - 1)\n abort('only ' + datalength + ' bytes available! programmer error!');\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n if (datalength !== chunkSize)\n xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n xhr.responseType = 'arraybuffer';\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n }\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n if (xhr.response !== undefined) {\n return new Uint8Array(xhr.response || []);\n }\n return intArrayFromString(xhr.responseText || '', true);\n };\n var lazyArray = this;\n lazyArray.setDataGetter((chunkNum) => {\n var start = chunkNum * chunkSize;\n var end = (chunkNum + 1) * chunkSize - 1;\n end = Math.min(end, datalength - 1);\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end);\n }\n if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n abort('doXHR failed!');\n return lazyArray.chunks[chunkNum];\n });\n if (usesGzip || !datalength) {\n chunkSize = datalength = 1;\n datalength = this.getter(0).length;\n chunkSize = datalength;\n out(\n 'LazyFiles on gzip forces download of the whole file when length is accessed'\n );\n }\n this._length = datalength;\n this._chunkSize = chunkSize;\n this.lengthKnown = true;\n }\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._length;\n }\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._chunkSize;\n }\n }\n if (globalThis.XMLHttpRequest) {\n if (!ENVIRONMENT_IS_WORKER)\n abort(\n 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'\n );\n var lazyArray = new LazyUint8Array();\n var properties = { isDevice: false, contents: lazyArray };\n } else {\n var properties = { isDevice: false, url };\n }\n var node = FS.createFile(parent, name, properties, canRead, canWrite);\n if (properties.contents) {\n node.contents = properties.contents;\n } else if (properties.url) {\n node.contents = null;\n node.url = properties.url;\n }\n Object.defineProperties(node, {\n usedBytes: {\n get: function () {\n return this.contents.length;\n },\n },\n });\n var stream_ops = {};\n for (const [key, fn] of Object.entries(node.stream_ops)) {\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node);\n return fn(...args);\n };\n }\n function writeChunks(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= contents.length) return 0;\n var size = Math.min(contents.length - position, length);\n if (contents.slice) {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i];\n }\n } else {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents.get(position + i);\n }\n }\n return size;\n }\n stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node);\n return writeChunks(stream, buffer, offset, length, position);\n };\n stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node);\n var ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n writeChunks(stream, HEAP8, ptr, length, position);\n return { ptr, allocated: true };\n };\n node.stream_ops = stream_ops;\n return node;\n },\n};\nvar UTF8ToString = (ptr, maxBytesToRead, ignoreNul) =>\n ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : '';\nvar SYSCALLS = {\n DEFAULT_POLLMASK: 5,\n calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path;\n }\n var dir;\n if (dirfd === -100) {\n dir = FS.cwd();\n } else {\n var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n dir = dirstream.path;\n }\n if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44);\n }\n return dir;\n }\n return dir + '/' + path;\n },\n writeStat(buf, stat) {\n HEAPU32[buf / 4] = stat.dev;\n HEAPU32[(buf + 4) / 4] = stat.mode;\n HEAPU64[(buf + 8) / 8] = BigInt(stat.nlink);\n HEAPU32[(buf + 16) / 4] = stat.uid;\n HEAPU32[(buf + 20) / 4] = stat.gid;\n HEAPU32[(buf + 24) / 4] = stat.rdev;\n HEAP64[(buf + 32) / 8] = BigInt(stat.size);\n HEAP32[(buf + 40) / 4] = 4096;\n HEAP32[(buf + 44) / 4] = stat.blocks;\n var atime = stat.atime.getTime();\n var mtime = stat.mtime.getTime();\n var ctime = stat.ctime.getTime();\n HEAP64[(buf + 48) / 8] = BigInt(Math.floor(atime / 1e3));\n HEAPU64[(buf + 56) / 8] = BigInt((atime % 1e3) * 1e3 * 1e3);\n HEAP64[(buf + 64) / 8] = BigInt(Math.floor(mtime / 1e3));\n HEAPU64[(buf + 72) / 8] = BigInt((mtime % 1e3) * 1e3 * 1e3);\n HEAP64[(buf + 80) / 8] = BigInt(Math.floor(ctime / 1e3));\n HEAPU64[(buf + 88) / 8] = BigInt((ctime % 1e3) * 1e3 * 1e3);\n HEAP64[(buf + 96) / 8] = BigInt(stat.ino);\n return 0;\n },\n writeStatFs(buf, stats) {\n HEAPU32[(buf + 8) / 4] = stats.bsize;\n HEAPU32[(buf + 72) / 4] = stats.bsize;\n HEAP64[(buf + 16) / 8] = BigInt(stats.blocks);\n HEAP64[(buf + 24) / 8] = BigInt(stats.bfree);\n HEAP64[(buf + 32) / 8] = BigInt(stats.bavail);\n HEAP64[(buf + 40) / 8] = BigInt(stats.files);\n HEAP64[(buf + 48) / 8] = BigInt(stats.ffree);\n HEAPU32[(buf + 56) / 4] = stats.fsid;\n HEAPU32[(buf + 80) / 4] = stats.flags;\n HEAPU32[(buf + 64) / 4] = stats.namelen;\n },\n doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (flags & 2) {\n return 0;\n }\n var buffer = HEAPU8.slice(addr, addr + len);\n FS.msync(stream, buffer, offset, len, flags);\n },\n getStreamFromFD(fd) {\n var stream = FS.getStreamChecked(fd);\n return stream;\n },\n varargs: undefined,\n getStr(ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n};\nvar INT53_MAX = 9007199254740992;\nvar INT53_MIN = -9007199254740992;\nvar bigintToI53Checked = (num) =>\n num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\nfunction ___syscall_fcntl64(fd, cmd, varargs) {\n varargs = bigintToI53Checked(varargs);\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (cmd) {\n case 0: {\n var arg = syscallGetVarargI();\n if (arg < 0) {\n return -28;\n }\n while (FS.streams[arg]) {\n arg++;\n }\n var newStream;\n newStream = FS.dupStream(stream, arg);\n return newStream.fd;\n }\n case 1:\n case 2:\n return 0;\n case 3:\n return stream.flags;\n case 4: {\n var arg = syscallGetVarargI();\n stream.flags |= arg;\n return 0;\n }\n case 5: {\n var arg = syscallGetVarargP();\n var offset = 0;\n HEAP16[(arg + offset) / 2] = 2;\n return 0;\n }\n case 6:\n case 7:\n return 0;\n }\n return -28;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_ioctl(fd, op, varargs) {\n varargs = bigintToI53Checked(varargs);\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (op) {\n case 21509: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21505: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcgets) {\n var termios = stream.tty.ops.ioctl_tcgets(stream);\n var argp = syscallGetVarargP();\n HEAP32[argp / 4] = termios.c_iflag || 0;\n HEAP32[(argp + 4) / 4] = termios.c_oflag || 0;\n HEAP32[(argp + 8) / 4] = termios.c_cflag || 0;\n HEAP32[(argp + 12) / 4] = termios.c_lflag || 0;\n for (var i = 0; i < 32; i++) {\n HEAP8[argp + i + 17] = termios.c_cc[i] || 0;\n }\n return 0;\n }\n return 0;\n }\n case 21510:\n case 21511:\n case 21512: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21506:\n case 21507:\n case 21508: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP();\n var c_iflag = HEAP32[argp / 4];\n var c_oflag = HEAP32[(argp + 4) / 4];\n var c_cflag = HEAP32[(argp + 8) / 4];\n var c_lflag = HEAP32[(argp + 12) / 4];\n var c_cc = [];\n for (var i = 0; i < 32; i++) {\n c_cc.push(HEAP8[argp + i + 17]);\n }\n return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n c_iflag,\n c_oflag,\n c_cflag,\n c_lflag,\n c_cc,\n });\n }\n return 0;\n }\n case 21519: {\n if (!stream.tty) return -59;\n var argp = syscallGetVarargP();\n HEAP32[argp / 4] = 0;\n return 0;\n }\n case 21520: {\n if (!stream.tty) return -59;\n return -28;\n }\n case 21537:\n case 21531: {\n var argp = syscallGetVarargP();\n return FS.ioctl(stream, op, argp);\n }\n case 21523: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tiocgwinsz) {\n var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n var argp = syscallGetVarargP();\n HEAP16[argp / 2] = winsize[0];\n HEAP16[(argp + 2) / 2] = winsize[1];\n }\n return 0;\n }\n case 21524: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21515: {\n if (!stream.tty) return -59;\n return 0;\n }\n default:\n return -28;\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_openat(dirfd, path, flags, varargs) {\n path = bigintToI53Checked(path);\n varargs = bigintToI53Checked(varargs);\n SYSCALLS.varargs = varargs;\n try {\n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n var mode = varargs ? syscallGetVarargI() : 0;\n return FS.open(path, flags, mode).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar __abort_js = () => abort('');\nfunction __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n len = bigintToI53Checked(len);\n offset = bigintToI53Checked(offset);\n allocated = bigintToI53Checked(allocated);\n addr = bigintToI53Checked(addr);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var res = FS.mmap(stream, len, offset, prot, flags);\n var ptr = res.ptr;\n HEAP32[allocated / 4] = res.allocated;\n HEAPU64[addr / 8] = BigInt(ptr);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction __munmap_js(addr, len, prot, flags, fd, offset) {\n addr = bigintToI53Checked(addr);\n len = bigintToI53Checked(len);\n offset = bigintToI53Checked(offset);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset);\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar stringToUTF8 = (str, outPtr, maxBytesToWrite) =>\n stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\nvar __tzset_js = function (timezone, daylight, std_name, dst_name) {\n timezone = bigintToI53Checked(timezone);\n daylight = bigintToI53Checked(daylight);\n std_name = bigintToI53Checked(std_name);\n dst_name = bigintToI53Checked(dst_name);\n var currentYear = new Date().getFullYear();\n var winter = new Date(currentYear, 0, 1);\n var summer = new Date(currentYear, 6, 1);\n var winterOffset = winter.getTimezoneOffset();\n var summerOffset = summer.getTimezoneOffset();\n var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n HEAPU64[timezone / 8] = BigInt(stdTimezoneOffset * 60);\n HEAP32[daylight / 4] = Number(winterOffset != summerOffset);\n var extractZone = (timezoneOffset) => {\n var sign = timezoneOffset >= 0 ? '-' : '+';\n var absOffset = Math.abs(timezoneOffset);\n var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n var minutes = String(absOffset % 60).padStart(2, '0');\n return `UTC${sign}${hours}${minutes}`;\n };\n var winterName = extractZone(winterOffset);\n var summerName = extractZone(summerOffset);\n if (summerOffset < winterOffset) {\n stringToUTF8(winterName, std_name, 17);\n stringToUTF8(summerName, dst_name, 17);\n } else {\n stringToUTF8(winterName, dst_name, 17);\n stringToUTF8(summerName, std_name, 17);\n }\n};\nvar _emscripten_get_now = () => performance.now();\nvar _emscripten_date_now = () => Date.now();\nvar nowIsMonotonic = 1;\nvar checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;\nfunction _clock_time_get(clk_id, ignored_precision, ptime) {\n ignored_precision = bigintToI53Checked(ignored_precision);\n ptime = bigintToI53Checked(ptime);\n if (!checkWasiClock(clk_id)) {\n return 28;\n }\n var now;\n if (clk_id === 0) {\n now = _emscripten_date_now();\n } else if (nowIsMonotonic) {\n now = _emscripten_get_now();\n } else {\n return 52;\n }\n var nsec = Math.round(now * 1e3 * 1e3);\n HEAP64[ptime / 8] = BigInt(nsec);\n return 0;\n}\nvar getHeapMax = () => 4294967296;\nvar _emscripten_get_heap_max = () => BigInt(getHeapMax());\nvar _emscripten_has_asyncify = () => 2;\nvar growMemory = (size) => {\n var oldHeapSize = wasmMemory.buffer.byteLength;\n var pages = ((size - oldHeapSize + 65535) / 65536) | 0;\n try {\n wasmMemory.grow(BigInt(pages));\n updateMemoryViews();\n return 1;\n } catch (e) {}\n};\nfunction _emscripten_resize_heap(requestedSize) {\n requestedSize = bigintToI53Checked(requestedSize);\n var oldSize = HEAPU8.length;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n var newSize = Math.min(\n maxHeapSize,\n alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)\n );\n var replacement = growMemory(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n}\nvar stackSave = () => _emscripten_stack_get_current();\nvar stackRestore = (val) => __emscripten_stack_restore(val);\nvar stackAlloc = (sz) => __emscripten_stack_alloc(sz);\nvar stringToUTF8OnStack = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n};\nvar writeI53ToI64 = (ptr, num) => {\n HEAPU32[ptr / 4] = num;\n var lower = HEAPU32[ptr / 4];\n HEAPU32[(ptr + 4) / 4] = (num - lower) / 4294967296;\n};\nvar stringToNewUTF8 = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = _malloc(size);\n if (ret) stringToUTF8(str, ret, size);\n return ret;\n};\nvar readI53FromI64 = (ptr) =>\n HEAPU32[ptr / 4] + HEAP32[(ptr + 4) / 4] * 4294967296;\nvar wasmTableMirror = [];\nvar getWasmTableEntry = (funcPtr) => {\n funcPtr = Number(funcPtr);\n var func = wasmTableMirror[funcPtr];\n if (!func) {\n wasmTableMirror[funcPtr] = func = wasmTable.get(BigInt(funcPtr));\n if (Asyncify.isAsyncExport(func)) {\n wasmTableMirror[funcPtr] = func = Asyncify.makeAsyncFunction(func);\n }\n }\n return func;\n};\nvar WebGPU = {\n Internals: {\n jsObjects: [],\n jsObjectInsert: (ptr, jsObject) => {\n WebGPU.Internals.jsObjects[ptr] = jsObject;\n },\n bufferOnUnmaps: [],\n futures: [],\n futureInsert: (futureId, promise) => {\n WebGPU.Internals.futures[futureId] = new Promise((resolve) =>\n promise.finally(() => resolve(futureId))\n );\n },\n },\n getJsObject: (ptr) => {\n if (!ptr) return undefined;\n return WebGPU.Internals.jsObjects[ptr];\n },\n importJsAdapter: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateAdapter(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroup: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroup(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroupLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroupLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBuffer: (buffer, parentPtr = 0) => {\n assert(buffer.mapState === 'unmapped');\n var bufferPtr = _emwgpuCreateBuffer(parentPtr);\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n return bufferPtr;\n },\n importJsCommandBuffer: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandBuffer(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsCommandEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsDevice: (device, parentPtr = 0) => {\n var queuePtr = _emwgpuCreateQueue(parentPtr);\n var devicePtr = _emwgpuCreateDevice(parentPtr, queuePtr);\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n return devicePtr;\n },\n importJsExternalTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateExternalTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsPipelineLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreatePipelineLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQuerySet: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQuerySet(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQueue: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQueue(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundle: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundle(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundleEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundleEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSampler: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSampler(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsShaderModule: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateShaderModule(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSurface: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSurface(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTextureView: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTextureView(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n errorCallback: (callback, type, message, userdata) => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(message);\n ((a1, a2, a3) =>\n getWasmTableEntry(callback).call(null, a1, BigInt(a2), BigInt(a3)))(\n type,\n BigInt(messagePtr),\n userdata\n );\n stackRestore(sp);\n },\n iterateExtensions: (root, handlers) => {\n for (\n var ptr = Number(HEAPU64[root / 8]);\n ptr;\n ptr = Number(HEAPU64[ptr / 8])\n ) {\n var sType = HEAP32[(ptr + 8) / 4];\n var handler = handlers[sType](ptr);\n }\n },\n setStringView: (ptr, data, length) => {\n HEAPU64[ptr / 8] = BigInt(data);\n HEAPU64[(ptr + 8) / 8] = BigInt(length);\n },\n makeStringFromStringView: (stringViewPtr) => {\n var ptr = Number(HEAPU64[stringViewPtr / 8]);\n var length = Number(HEAPU64[(stringViewPtr + 8) / 8]);\n return UTF8ToString(ptr, length);\n },\n makeStringFromOptionalStringView: (stringViewPtr) => {\n var ptr = Number(HEAPU64[stringViewPtr / 8]);\n var length = Number(HEAPU64[(stringViewPtr + 8) / 8]);\n if (!ptr) {\n if (length === 0) {\n return '';\n }\n return undefined;\n }\n return UTF8ToString(ptr, length);\n },\n makeColor: (ptr) => ({\n r: HEAPF64[ptr / 8],\n g: HEAPF64[(ptr + 8) / 8],\n b: HEAPF64[(ptr + 16) / 8],\n a: HEAPF64[(ptr + 24) / 8],\n }),\n makeExtent3D: (ptr) => ({\n width: HEAPU32[ptr / 4],\n height: HEAPU32[(ptr + 4) / 4],\n depthOrArrayLayers: HEAPU32[(ptr + 8) / 4],\n }),\n makeOrigin3D: (ptr) => ({\n x: HEAPU32[ptr / 4],\n y: HEAPU32[(ptr + 4) / 4],\n z: HEAPU32[(ptr + 8) / 4],\n }),\n makeTexelCopyTextureInfo: (ptr) => ({\n texture: WebGPU.getJsObject(Number(HEAPU64[ptr / 8])),\n mipLevel: HEAPU32[(ptr + 8) / 4],\n origin: WebGPU.makeOrigin3D(ptr + 12),\n aspect: WebGPU.TextureAspect[HEAP32[(ptr + 24) / 4]],\n }),\n makeTexelCopyBufferLayout: (ptr) => {\n var bytesPerRow = HEAPU32[(ptr + 8) / 4];\n var rowsPerImage = HEAPU32[(ptr + 12) / 4];\n return {\n offset: readI53FromI64(ptr),\n bytesPerRow: bytesPerRow === 4294967295 ? undefined : bytesPerRow,\n rowsPerImage: rowsPerImage === 4294967295 ? undefined : rowsPerImage,\n };\n },\n makeTexelCopyBufferInfo: (ptr) => {\n var layoutPtr = ptr + 0;\n var bufferCopyView = WebGPU.makeTexelCopyBufferLayout(layoutPtr);\n bufferCopyView['buffer'] = WebGPU.getJsObject(\n Number(HEAPU64[(ptr + 16) / 8])\n );\n return bufferCopyView;\n },\n makePassTimestampWrites: (ptr) => {\n if (ptr === 0) return undefined;\n return {\n querySet: WebGPU.getJsObject(Number(HEAPU64[(ptr + 8) / 8])),\n beginningOfPassWriteIndex: HEAPU32[(ptr + 16) / 4],\n endOfPassWriteIndex: HEAPU32[(ptr + 20) / 4],\n };\n },\n makePipelineConstants: (constantCount, constantsPtr) => {\n if (!constantCount) return;\n var constants = {};\n for (var i = 0; i < constantCount; ++i) {\n var entryPtr = constantsPtr + 32 * i;\n var key = WebGPU.makeStringFromStringView(entryPtr + 8);\n constants[key] = HEAPF64[(entryPtr + 24) / 8];\n }\n return constants;\n },\n makePipelineLayout: (layoutPtr) => {\n if (!layoutPtr) return 'auto';\n return WebGPU.getJsObject(layoutPtr);\n },\n makeComputeState: (ptr) => {\n if (!ptr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(Number(HEAPU64[(ptr + 8) / 8])),\n constants: WebGPU.makePipelineConstants(\n Number(HEAPU64[(ptr + 32) / 8]),\n Number(HEAPU64[(ptr + 40) / 8])\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(ptr + 16),\n };\n return desc;\n },\n makeComputePipelineDesc: (descriptor) => {\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n layout: WebGPU.makePipelineLayout(Number(HEAPU64[(descriptor + 24) / 8])),\n compute: WebGPU.makeComputeState(descriptor + 32),\n };\n return desc;\n },\n makeRenderPipelineDesc: (descriptor) => {\n function makePrimitiveState(psPtr) {\n if (!psPtr) return undefined;\n return {\n topology: WebGPU.PrimitiveTopology[HEAP32[(psPtr + 8) / 4]],\n stripIndexFormat: WebGPU.IndexFormat[HEAP32[(psPtr + 12) / 4]],\n frontFace: WebGPU.FrontFace[HEAP32[(psPtr + 16) / 4]],\n cullMode: WebGPU.CullMode[HEAP32[(psPtr + 20) / 4]],\n unclippedDepth: !!HEAPU32[(psPtr + 24) / 4],\n };\n }\n function makeBlendComponent(bdPtr) {\n if (!bdPtr) return undefined;\n return {\n operation: WebGPU.BlendOperation[HEAP32[bdPtr / 4]],\n srcFactor: WebGPU.BlendFactor[HEAP32[(bdPtr + 4) / 4]],\n dstFactor: WebGPU.BlendFactor[HEAP32[(bdPtr + 8) / 4]],\n };\n }\n function makeBlendState(bsPtr) {\n if (!bsPtr) return undefined;\n return {\n alpha: makeBlendComponent(bsPtr + 12),\n color: makeBlendComponent(bsPtr + 0),\n };\n }\n function makeColorState(csPtr) {\n var format = WebGPU.TextureFormat[HEAP32[(csPtr + 8) / 4]];\n return format\n ? {\n format,\n blend: makeBlendState(Number(HEAPU64[(csPtr + 16) / 8])),\n writeMask: HEAPU32[(csPtr + 24) / 4],\n }\n : undefined;\n }\n function makeColorStates(count, csArrayPtr) {\n var states = [];\n for (var i = 0; i < count; ++i) {\n states.push(makeColorState(csArrayPtr + 32 * i));\n }\n return states;\n }\n function makeStencilStateFace(ssfPtr) {\n return {\n compare: WebGPU.CompareFunction[HEAP32[ssfPtr / 4]],\n failOp: WebGPU.StencilOperation[HEAP32[(ssfPtr + 4) / 4]],\n depthFailOp: WebGPU.StencilOperation[HEAP32[(ssfPtr + 8) / 4]],\n passOp: WebGPU.StencilOperation[HEAP32[(ssfPtr + 12) / 4]],\n };\n }\n function makeDepthStencilState(dssPtr) {\n if (!dssPtr) return undefined;\n return {\n format: WebGPU.TextureFormat[HEAP32[(dssPtr + 8) / 4]],\n depthWriteEnabled: !!HEAPU32[(dssPtr + 12) / 4],\n depthCompare: WebGPU.CompareFunction[HEAP32[(dssPtr + 16) / 4]],\n stencilFront: makeStencilStateFace(dssPtr + 20),\n stencilBack: makeStencilStateFace(dssPtr + 36),\n stencilReadMask: HEAPU32[(dssPtr + 52) / 4],\n stencilWriteMask: HEAPU32[(dssPtr + 56) / 4],\n depthBias: HEAP32[(dssPtr + 60) / 4],\n depthBiasSlopeScale: HEAPF32[(dssPtr + 64) / 4],\n depthBiasClamp: HEAPF32[(dssPtr + 68) / 4],\n };\n }\n function makeVertexAttribute(vaPtr) {\n return {\n format: WebGPU.VertexFormat[HEAP32[(vaPtr + 8) / 4]],\n offset: readI53FromI64(vaPtr + 16),\n shaderLocation: HEAPU32[(vaPtr + 24) / 4],\n };\n }\n function makeVertexAttributes(count, vaArrayPtr) {\n var vas = [];\n for (var i = 0; i < count; ++i) {\n vas.push(makeVertexAttribute(vaArrayPtr + i * 32));\n }\n return vas;\n }\n function makeVertexBuffer(vbPtr) {\n if (!vbPtr) return undefined;\n var stepMode = WebGPU.VertexStepMode[HEAP32[(vbPtr + 8) / 4]];\n var attributeCount = Number(HEAPU64[(vbPtr + 24) / 8]);\n if (!stepMode && !attributeCount) {\n return null;\n }\n return {\n arrayStride: readI53FromI64(vbPtr + 16),\n stepMode,\n attributes: makeVertexAttributes(\n attributeCount,\n Number(HEAPU64[(vbPtr + 32) / 8])\n ),\n };\n }\n function makeVertexBuffers(count, vbArrayPtr) {\n if (!count) return undefined;\n var vbs = [];\n for (var i = 0; i < count; ++i) {\n vbs.push(makeVertexBuffer(vbArrayPtr + i * 40));\n }\n return vbs;\n }\n function makeVertexState(viPtr) {\n if (!viPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(Number(HEAPU64[(viPtr + 8) / 8])),\n constants: WebGPU.makePipelineConstants(\n Number(HEAPU64[(viPtr + 32) / 8]),\n Number(HEAPU64[(viPtr + 40) / 8])\n ),\n buffers: makeVertexBuffers(\n Number(HEAPU64[(viPtr + 48) / 8]),\n Number(HEAPU64[(viPtr + 56) / 8])\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(viPtr + 16),\n };\n return desc;\n }\n function makeMultisampleState(msPtr) {\n if (!msPtr) return undefined;\n return {\n count: HEAPU32[(msPtr + 8) / 4],\n mask: HEAPU32[(msPtr + 12) / 4],\n alphaToCoverageEnabled: !!HEAPU32[(msPtr + 16) / 4],\n };\n }\n function makeFragmentState(fsPtr) {\n if (!fsPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(Number(HEAPU64[(fsPtr + 8) / 8])),\n constants: WebGPU.makePipelineConstants(\n Number(HEAPU64[(fsPtr + 32) / 8]),\n Number(HEAPU64[(fsPtr + 40) / 8])\n ),\n targets: makeColorStates(\n Number(HEAPU64[(fsPtr + 48) / 8]),\n Number(HEAPU64[(fsPtr + 56) / 8])\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(fsPtr + 16),\n };\n return desc;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n layout: WebGPU.makePipelineLayout(Number(HEAPU64[(descriptor + 24) / 8])),\n vertex: makeVertexState(descriptor + 32),\n primitive: makePrimitiveState(descriptor + 96),\n depthStencil: makeDepthStencilState(\n Number(HEAPU64[(descriptor + 128) / 8])\n ),\n multisample: makeMultisampleState(descriptor + 136),\n fragment: makeFragmentState(Number(HEAPU64[(descriptor + 160) / 8])),\n };\n return desc;\n },\n fillLimitStruct: (limits, limitsOutPtr) => {\n var nextInChainPtr = Number(HEAPU64[limitsOutPtr / 8]);\n function setLimitValueU32(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n HEAPU32[(basePtr + limitOffset) / 4] = limitValue;\n }\n function setLimitValueU64(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n writeI53ToI64(basePtr + limitOffset, limitValue);\n }\n setLimitValueU32('maxTextureDimension1D', limitsOutPtr, 8);\n setLimitValueU32('maxTextureDimension2D', limitsOutPtr, 12);\n setLimitValueU32('maxTextureDimension3D', limitsOutPtr, 16);\n setLimitValueU32('maxTextureArrayLayers', limitsOutPtr, 20);\n setLimitValueU32('maxBindGroups', limitsOutPtr, 24);\n setLimitValueU32('maxBindGroupsPlusVertexBuffers', limitsOutPtr, 28);\n setLimitValueU32('maxBindingsPerBindGroup', limitsOutPtr, 32);\n setLimitValueU32(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsOutPtr,\n 36\n );\n setLimitValueU32(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsOutPtr,\n 40\n );\n setLimitValueU32('maxSampledTexturesPerShaderStage', limitsOutPtr, 44);\n setLimitValueU32('maxSamplersPerShaderStage', limitsOutPtr, 48);\n setLimitValueU32('maxStorageBuffersPerShaderStage', limitsOutPtr, 52);\n setLimitValueU32('maxStorageTexturesPerShaderStage', limitsOutPtr, 56);\n setLimitValueU32('maxUniformBuffersPerShaderStage', limitsOutPtr, 60);\n setLimitValueU32('minUniformBufferOffsetAlignment', limitsOutPtr, 80);\n setLimitValueU32('minStorageBufferOffsetAlignment', limitsOutPtr, 84);\n setLimitValueU64('maxUniformBufferBindingSize', limitsOutPtr, 64);\n setLimitValueU64('maxStorageBufferBindingSize', limitsOutPtr, 72);\n setLimitValueU32('maxVertexBuffers', limitsOutPtr, 88);\n setLimitValueU64('maxBufferSize', limitsOutPtr, 96);\n setLimitValueU32('maxVertexAttributes', limitsOutPtr, 104);\n setLimitValueU32('maxVertexBufferArrayStride', limitsOutPtr, 108);\n setLimitValueU32('maxInterStageShaderVariables', limitsOutPtr, 112);\n setLimitValueU32('maxColorAttachments', limitsOutPtr, 116);\n setLimitValueU32('maxColorAttachmentBytesPerSample', limitsOutPtr, 120);\n setLimitValueU32('maxComputeWorkgroupStorageSize', limitsOutPtr, 124);\n setLimitValueU32('maxComputeInvocationsPerWorkgroup', limitsOutPtr, 128);\n setLimitValueU32('maxComputeWorkgroupSizeX', limitsOutPtr, 132);\n setLimitValueU32('maxComputeWorkgroupSizeY', limitsOutPtr, 136);\n setLimitValueU32('maxComputeWorkgroupSizeZ', limitsOutPtr, 140);\n setLimitValueU32('maxComputeWorkgroupsPerDimension', limitsOutPtr, 144);\n setLimitValueU32('maxImmediateSize', limitsOutPtr, 148);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n setLimitValueU32(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 16,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 24,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 20,\n limits.maxStorageTexturesPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 28,\n limits.maxStorageTexturesPerShaderStage\n );\n }\n },\n fillAdapterInfoStruct: (info, infoStruct) => {\n HEAPU32[(infoStruct + 88) / 4] = info.subgroupMinSize;\n HEAPU32[(infoStruct + 92) / 4] = info.subgroupMaxSize;\n var strs = info.vendor + info.architecture + info.device + info.description;\n var strPtr = stringToNewUTF8(strs);\n var vendorLen = lengthBytesUTF8(info.vendor);\n WebGPU.setStringView(infoStruct + 8, strPtr, vendorLen);\n strPtr += vendorLen;\n var architectureLen = lengthBytesUTF8(info.architecture);\n WebGPU.setStringView(infoStruct + 24, strPtr, architectureLen);\n strPtr += architectureLen;\n var deviceLen = lengthBytesUTF8(info.device);\n WebGPU.setStringView(infoStruct + 40, strPtr, deviceLen);\n strPtr += deviceLen;\n var descriptionLen = lengthBytesUTF8(info.description);\n WebGPU.setStringView(infoStruct + 56, strPtr, descriptionLen);\n strPtr += descriptionLen;\n HEAP32[(infoStruct + 72) / 4] = 2;\n var adapterType = info.isFallbackAdapter ? 3 : 4;\n HEAP32[(infoStruct + 76) / 4] = adapterType;\n HEAPU32[(infoStruct + 80) / 4] = 0;\n HEAPU32[(infoStruct + 84) / 4] = 0;\n },\n AddressMode: [, 'clamp-to-edge', 'repeat', 'mirror-repeat'],\n BlendFactor: [\n ,\n 'zero',\n 'one',\n 'src',\n 'one-minus-src',\n 'src-alpha',\n 'one-minus-src-alpha',\n 'dst',\n 'one-minus-dst',\n 'dst-alpha',\n 'one-minus-dst-alpha',\n 'src-alpha-saturated',\n 'constant',\n 'one-minus-constant',\n 'src1',\n 'one-minus-src1',\n 'src1-alpha',\n 'one-minus-src1-alpha',\n ],\n BlendOperation: [, 'add', 'subtract', 'reverse-subtract', 'min', 'max'],\n BufferBindingType: [, , 'uniform', 'storage', 'read-only-storage'],\n BufferMapState: [, 'unmapped', 'pending', 'mapped'],\n CompareFunction: [\n ,\n 'never',\n 'less',\n 'equal',\n 'less-equal',\n 'greater',\n 'not-equal',\n 'greater-equal',\n 'always',\n ],\n CompilationInfoRequestStatus: [, 'success', 'callback-cancelled'],\n ComponentSwizzle: [, '0', '1', 'r', 'g', 'b', 'a'],\n CompositeAlphaMode: [\n ,\n 'opaque',\n 'premultiplied',\n 'unpremultiplied',\n 'inherit',\n ],\n CullMode: [, 'none', 'front', 'back'],\n ErrorFilter: [, 'validation', 'out-of-memory', 'internal'],\n FeatureLevel: [, 'compatibility', 'core'],\n FeatureName: {\n 1: 'core-features-and-limits',\n 2: 'depth-clip-control',\n 3: 'depth32float-stencil8',\n 4: 'texture-compression-bc',\n 5: 'texture-compression-bc-sliced-3d',\n 6: 'texture-compression-etc2',\n 7: 'texture-compression-astc',\n 8: 'texture-compression-astc-sliced-3d',\n 9: 'timestamp-query',\n 10: 'indirect-first-instance',\n 11: 'shader-f16',\n 12: 'rg11b10ufloat-renderable',\n 13: 'bgra8unorm-storage',\n 14: 'float32-filterable',\n 15: 'float32-blendable',\n 16: 'clip-distances',\n 17: 'dual-source-blending',\n 18: 'subgroups',\n 19: 'texture-formats-tier1',\n 20: 'texture-formats-tier2',\n 21: 'primitive-index',\n 22: 'texture-component-swizzle',\n 327692: 'chromium-experimental-unorm16-texture-formats',\n 327729: 'chromium-experimental-multi-draw-indirect',\n },\n FilterMode: [, 'nearest', 'linear'],\n FrontFace: [, 'ccw', 'cw'],\n IndexFormat: [, 'uint16', 'uint32'],\n InstanceFeatureName: [\n ,\n 'timed-wait-any',\n 'shader-source-spirv',\n 'multiple-devices-per-adapter',\n ],\n LoadOp: [, 'load', 'clear'],\n MipmapFilterMode: [, 'nearest', 'linear'],\n OptionalBool: ['false', 'true'],\n PowerPreference: [, 'low-power', 'high-performance'],\n PredefinedColorSpace: [, 'srgb', 'display-p3'],\n PrimitiveTopology: [\n ,\n 'point-list',\n 'line-list',\n 'line-strip',\n 'triangle-list',\n 'triangle-strip',\n ],\n QueryType: [, 'occlusion', 'timestamp'],\n SamplerBindingType: [, , 'filtering', 'non-filtering', 'comparison'],\n Status: [, 'success', 'error'],\n StencilOperation: [\n ,\n 'keep',\n 'zero',\n 'replace',\n 'invert',\n 'increment-clamp',\n 'decrement-clamp',\n 'increment-wrap',\n 'decrement-wrap',\n ],\n StorageTextureAccess: [, , 'write-only', 'read-only', 'read-write'],\n StoreOp: [, 'store', 'discard'],\n SurfaceGetCurrentTextureStatus: [\n ,\n 'success-optimal',\n 'success-suboptimal',\n 'timeout',\n 'outdated',\n 'lost',\n 'error',\n ],\n TextureAspect: [, 'all', 'stencil-only', 'depth-only'],\n TextureDimension: [, '1d', '2d', '3d'],\n TextureFormat: [\n ,\n 'r8unorm',\n 'r8snorm',\n 'r8uint',\n 'r8sint',\n 'r16unorm',\n 'r16snorm',\n 'r16uint',\n 'r16sint',\n 'r16float',\n 'rg8unorm',\n 'rg8snorm',\n 'rg8uint',\n 'rg8sint',\n 'r32float',\n 'r32uint',\n 'r32sint',\n 'rg16unorm',\n 'rg16snorm',\n 'rg16uint',\n 'rg16sint',\n 'rg16float',\n 'rgba8unorm',\n 'rgba8unorm-srgb',\n 'rgba8snorm',\n 'rgba8uint',\n 'rgba8sint',\n 'bgra8unorm',\n 'bgra8unorm-srgb',\n 'rgb10a2uint',\n 'rgb10a2unorm',\n 'rg11b10ufloat',\n 'rgb9e5ufloat',\n 'rg32float',\n 'rg32uint',\n 'rg32sint',\n 'rgba16unorm',\n 'rgba16snorm',\n 'rgba16uint',\n 'rgba16sint',\n 'rgba16float',\n 'rgba32float',\n 'rgba32uint',\n 'rgba32sint',\n 'stencil8',\n 'depth16unorm',\n 'depth24plus',\n 'depth24plus-stencil8',\n 'depth32float',\n 'depth32float-stencil8',\n 'bc1-rgba-unorm',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm',\n 'bc3-rgba-unorm-srgb',\n 'bc4-r-unorm',\n 'bc4-r-snorm',\n 'bc5-rg-unorm',\n 'bc5-rg-snorm',\n 'bc6h-rgb-ufloat',\n 'bc6h-rgb-float',\n 'bc7-rgba-unorm',\n 'bc7-rgba-unorm-srgb',\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm',\n 'astc-4x4-unorm',\n 'astc-4x4-unorm-srgb',\n 'astc-5x4-unorm',\n 'astc-5x4-unorm-srgb',\n 'astc-5x5-unorm',\n 'astc-5x5-unorm-srgb',\n 'astc-6x5-unorm',\n 'astc-6x5-unorm-srgb',\n 'astc-6x6-unorm',\n 'astc-6x6-unorm-srgb',\n 'astc-8x5-unorm',\n 'astc-8x5-unorm-srgb',\n 'astc-8x6-unorm',\n 'astc-8x6-unorm-srgb',\n 'astc-8x8-unorm',\n 'astc-8x8-unorm-srgb',\n 'astc-10x5-unorm',\n 'astc-10x5-unorm-srgb',\n 'astc-10x6-unorm',\n 'astc-10x6-unorm-srgb',\n 'astc-10x8-unorm',\n 'astc-10x8-unorm-srgb',\n 'astc-10x10-unorm',\n 'astc-10x10-unorm-srgb',\n 'astc-12x10-unorm',\n 'astc-12x10-unorm-srgb',\n 'astc-12x12-unorm',\n 'astc-12x12-unorm-srgb',\n ],\n TextureSampleType: [\n ,\n ,\n 'float',\n 'unfilterable-float',\n 'depth',\n 'sint',\n 'uint',\n ],\n TextureViewDimension: [, '1d', '2d', '2d-array', 'cube', 'cube-array', '3d'],\n ToneMappingMode: [, 'standard', 'extended'],\n VertexFormat: [\n ,\n 'uint8',\n 'uint8x2',\n 'uint8x4',\n 'sint8',\n 'sint8x2',\n 'sint8x4',\n 'unorm8',\n 'unorm8x2',\n 'unorm8x4',\n 'snorm8',\n 'snorm8x2',\n 'snorm8x4',\n 'uint16',\n 'uint16x2',\n 'uint16x4',\n 'sint16',\n 'sint16x2',\n 'sint16x4',\n 'unorm16',\n 'unorm16x2',\n 'unorm16x4',\n 'snorm16',\n 'snorm16x2',\n 'snorm16x4',\n 'float16',\n 'float16x2',\n 'float16x4',\n 'float32',\n 'float32x2',\n 'float32x3',\n 'float32x4',\n 'uint32',\n 'uint32x2',\n 'uint32x3',\n 'uint32x4',\n 'sint32',\n 'sint32x2',\n 'sint32x3',\n 'sint32x4',\n 'unorm10-10-10-2',\n 'unorm8x4-bgra',\n ],\n VertexStepMode: [, 'vertex', 'instance'],\n WGSLLanguageFeatureName: [\n ,\n 'readonly_and_readwrite_storage_textures',\n 'packed_4x8_integer_dot_product',\n 'unrestricted_pointer_parameters',\n 'pointer_composite_access',\n 'uniform_buffer_standard_layout',\n 'subgroup_id',\n 'texture_and_sampler_let',\n 'subgroup_uniformity',\n 'texture_formats_tier1',\n ],\n};\nvar emwgpuStringToInt_DeviceLostReason = {\n undefined: 1,\n unknown: 1,\n destroyed: 2,\n};\nvar handleException = (e) => {\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS;\n }\n quit_(1, e);\n};\nvar runtimeKeepaliveCounter = 0;\nvar keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;\nvar _proc_exit = (code) => {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n Module['onExit']?.(code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n};\nvar exitJS = (status, implicit) => {\n EXITSTATUS = status;\n _proc_exit(status);\n};\nvar _exit = exitJS;\nvar maybeExit = () => {\n if (!keepRuntimeAlive()) {\n try {\n _exit(EXITSTATUS);\n } catch (e) {\n handleException(e);\n }\n }\n};\nvar callUserCallback = (func) => {\n if (ABORT) {\n return;\n }\n try {\n func();\n maybeExit();\n } catch (e) {\n handleException(e);\n }\n};\nfunction _emwgpuAdapterRequestDevice(\n adapterPtr,\n futureId,\n deviceLostFutureId,\n devicePtr,\n queuePtr,\n descriptor\n) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n futureId = bigintToI53Checked(futureId);\n deviceLostFutureId = bigintToI53Checked(deviceLostFutureId);\n devicePtr = bigintToI53Checked(devicePtr);\n queuePtr = bigintToI53Checked(queuePtr);\n descriptor = bigintToI53Checked(descriptor);\n var adapter = WebGPU.getJsObject(adapterPtr);\n var desc = {};\n if (descriptor) {\n var requiredFeatureCount = Number(HEAPU64[(descriptor + 24) / 8]);\n if (requiredFeatureCount) {\n var requiredFeaturesPtr = Number(HEAPU64[(descriptor + 32) / 8]);\n desc['requiredFeatures'] = Array.from(\n HEAPU32.subarray(\n requiredFeaturesPtr / 4,\n (requiredFeaturesPtr + requiredFeatureCount * 4) / 4\n ),\n (feature) => WebGPU.FeatureName[feature]\n );\n }\n var limitsPtr = Number(HEAPU64[(descriptor + 40) / 8]);\n if (limitsPtr) {\n var nextInChainPtr = Number(HEAPU64[limitsPtr / 8]);\n var requiredLimits = {};\n function setLimitU32IfDefined(\n name,\n basePtr,\n limitOffset,\n ignoreIfZero = false\n ) {\n var ptr = basePtr + limitOffset;\n var value = HEAPU32[ptr / 4];\n if (value != 4294967295 && (!ignoreIfZero || value != 0)) {\n requiredLimits[name] = value;\n }\n }\n function setLimitU64IfDefined(name, basePtr, limitOffset) {\n var ptr = basePtr + limitOffset;\n var limitPart1 = HEAPU32[ptr / 4];\n var limitPart2 = HEAPU32[(ptr + 4) / 4];\n if (limitPart1 != 4294967295 || limitPart2 != 4294967295) {\n requiredLimits[name] = readI53FromI64(ptr);\n }\n }\n setLimitU32IfDefined('maxTextureDimension1D', limitsPtr, 8);\n setLimitU32IfDefined('maxTextureDimension2D', limitsPtr, 12);\n setLimitU32IfDefined('maxTextureDimension3D', limitsPtr, 16);\n setLimitU32IfDefined('maxTextureArrayLayers', limitsPtr, 20);\n setLimitU32IfDefined('maxBindGroups', limitsPtr, 24);\n setLimitU32IfDefined('maxBindGroupsPlusVertexBuffers', limitsPtr, 28);\n setLimitU32IfDefined('maxBindingsPerBindGroup', limitsPtr, 32);\n setLimitU32IfDefined(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsPtr,\n 36\n );\n setLimitU32IfDefined(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsPtr,\n 40\n );\n setLimitU32IfDefined('maxSampledTexturesPerShaderStage', limitsPtr, 44);\n setLimitU32IfDefined('maxSamplersPerShaderStage', limitsPtr, 48);\n setLimitU32IfDefined('maxStorageBuffersPerShaderStage', limitsPtr, 52);\n setLimitU32IfDefined('maxStorageTexturesPerShaderStage', limitsPtr, 56);\n setLimitU32IfDefined('maxUniformBuffersPerShaderStage', limitsPtr, 60);\n setLimitU32IfDefined('minUniformBufferOffsetAlignment', limitsPtr, 80);\n setLimitU32IfDefined('minStorageBufferOffsetAlignment', limitsPtr, 84);\n setLimitU64IfDefined('maxUniformBufferBindingSize', limitsPtr, 64);\n setLimitU64IfDefined('maxStorageBufferBindingSize', limitsPtr, 72);\n setLimitU32IfDefined('maxVertexBuffers', limitsPtr, 88);\n setLimitU64IfDefined('maxBufferSize', limitsPtr, 96);\n setLimitU32IfDefined('maxVertexAttributes', limitsPtr, 104);\n setLimitU32IfDefined('maxVertexBufferArrayStride', limitsPtr, 108);\n setLimitU32IfDefined('maxInterStageShaderVariables', limitsPtr, 112);\n setLimitU32IfDefined('maxColorAttachments', limitsPtr, 116);\n setLimitU32IfDefined('maxColorAttachmentBytesPerSample', limitsPtr, 120);\n setLimitU32IfDefined('maxComputeWorkgroupStorageSize', limitsPtr, 124);\n setLimitU32IfDefined('maxComputeInvocationsPerWorkgroup', limitsPtr, 128);\n setLimitU32IfDefined('maxComputeWorkgroupSizeX', limitsPtr, 132);\n setLimitU32IfDefined('maxComputeWorkgroupSizeY', limitsPtr, 136);\n setLimitU32IfDefined('maxComputeWorkgroupSizeZ', limitsPtr, 140);\n setLimitU32IfDefined('maxComputeWorkgroupsPerDimension', limitsPtr, 144);\n setLimitU32IfDefined('maxImmediateSize', limitsPtr, 148, true);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n if ('maxStorageBuffersInVertexStage' in GPUSupportedLimits.prototype) {\n setLimitU32IfDefined(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 16\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 20\n );\n setLimitU32IfDefined(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 24\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 28\n );\n }\n }\n desc['requiredLimits'] = requiredLimits;\n }\n var defaultQueuePtr = Number(HEAPU64[(descriptor + 48) / 8]);\n if (defaultQueuePtr) {\n var defaultQueueDesc = {\n label: WebGPU.makeStringFromOptionalStringView(defaultQueuePtr + 8),\n };\n desc['defaultQueue'] = defaultQueueDesc;\n }\n desc['label'] = WebGPU.makeStringFromOptionalStringView(descriptor + 8);\n }\n WebGPU.Internals.futureInsert(\n futureId,\n adapter.requestDevice(desc).then(\n (device) => {\n callUserCallback(() => {\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n devicePtr = BigInt(devicePtr);\n WebGPU.Internals.futureInsert(\n deviceLostFutureId,\n device.lost.then((info) => {\n callUserCallback(() => {\n device.onuncapturederror = (ev) => {};\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(info.message);\n _emwgpuOnDeviceLostCompleted(\n deviceLostFutureId,\n emwgpuStringToInt_DeviceLostReason[info.reason],\n BigInt(messagePtr)\n );\n stackRestore(sp);\n });\n })\n );\n device.onuncapturederror = (ev) => {\n var type = 5;\n if (ev.error instanceof GPUValidationError) type = 2;\n else if (ev.error instanceof GPUOutOfMemoryError) type = 3;\n else if (ev.error instanceof GPUInternalError) type = 4;\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ev.error.message);\n _emwgpuOnUncapturedError(\n BigInt(devicePtr),\n type,\n BigInt(messagePtr)\n );\n stackRestore(sp);\n };\n _emwgpuOnRequestDeviceCompleted(futureId, 1, BigInt(devicePtr), 0n);\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestDeviceCompleted(\n futureId,\n 3,\n BigInt(devicePtr),\n BigInt(messagePtr)\n );\n if (deviceLostFutureId) {\n _emwgpuOnDeviceLostCompleted(\n deviceLostFutureId,\n 4,\n BigInt(messagePtr)\n );\n }\n stackRestore(sp);\n });\n }\n )\n );\n}\nfunction _emwgpuBufferDestroy(bufferPtr) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (onUnmap) {\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n }\n buffer.destroy();\n}\nvar warnOnce = (text) => {\n warnOnce.shown ||= {};\n if (!warnOnce.shown[text]) {\n warnOnce.shown[text] = 1;\n if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;\n err(text);\n }\n};\nvar _emwgpuBufferGetConstMappedRange = function (bufferPtr, offset, size) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n offset = bigintToI53Checked(offset);\n size = bigintToI53Checked(size);\n var ret = (() => {\n var buffer = WebGPU.getJsObject(bufferPtr);\n if (size == -1) size = undefined;\n var mapped;\n try {\n mapped = buffer.getMappedRange(offset, size);\n } catch (ex) {\n return 0n;\n }\n var data = _memalign(16, mapped.byteLength);\n HEAPU8.set(new Uint8Array(mapped), data);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(() => _free(data));\n return data;\n })();\n return BigInt(ret);\n};\nvar _emwgpuBufferMapAsync = function (bufferPtr, futureId, mode, offset, size) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n futureId = bigintToI53Checked(futureId);\n mode = bigintToI53Checked(mode);\n offset = bigintToI53Checked(offset);\n size = bigintToI53Checked(size);\n var buffer = WebGPU.getJsObject(bufferPtr);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n if (size == -1) size = undefined;\n WebGPU.Internals.futureInsert(\n futureId,\n buffer.mapAsync(mode, offset, size).then(\n () => {\n callUserCallback(() => {\n _emwgpuOnMapAsyncCompleted(futureId, 1, 0n);\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n var status =\n ex.name === 'AbortError' ? 4 : ex.name === 'OperationError' ? 3 : 0;\n _emwgpuOnMapAsyncCompleted(futureId, status, BigInt(messagePtr));\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n });\n }\n )\n );\n};\nfunction _emwgpuBufferUnmap(bufferPtr) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (!onUnmap) {\n return;\n }\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n buffer.unmap();\n}\nfunction _emwgpuDelete(ptr) {\n ptr = bigintToI53Checked(ptr);\n delete WebGPU.Internals.jsObjects[ptr];\n}\nfunction _emwgpuDeviceCreateBuffer(devicePtr, descriptor, bufferPtr) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n bufferPtr = bigintToI53Checked(bufferPtr);\n var mappedAtCreation = !!HEAPU32[(descriptor + 40) / 4];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n usage: HEAPU32[(descriptor + 24) / 4],\n size: readI53FromI64(descriptor + 32),\n mappedAtCreation,\n };\n var device = WebGPU.getJsObject(devicePtr);\n var buffer;\n try {\n buffer = device.createBuffer(desc);\n } catch (ex) {\n return false;\n }\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n if (mappedAtCreation) {\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n }\n return true;\n}\nfunction _emwgpuDeviceCreateShaderModule(\n devicePtr,\n descriptor,\n shaderModulePtr\n) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n shaderModulePtr = bigintToI53Checked(shaderModulePtr);\n var nextInChainPtr = Number(HEAPU64[descriptor / 8]);\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n code: '',\n };\n switch (sType) {\n case 2: {\n desc['code'] = WebGPU.makeStringFromStringView(nextInChainPtr + 16);\n break;\n }\n }\n var device = WebGPU.getJsObject(devicePtr);\n WebGPU.Internals.jsObjectInsert(\n shaderModulePtr,\n device.createShaderModule(desc)\n );\n}\nvar _emwgpuDeviceDestroy = (devicePtr) => {\n const device = WebGPU.getJsObject(devicePtr);\n device.onuncapturederror = null;\n device.destroy();\n};\nfunction _emwgpuInstanceRequestAdapter(\n instancePtr,\n futureId,\n options,\n adapterPtr\n) {\n instancePtr = bigintToI53Checked(instancePtr);\n futureId = bigintToI53Checked(futureId);\n options = bigintToI53Checked(options);\n adapterPtr = bigintToI53Checked(adapterPtr);\n var opts;\n if (options) {\n opts = {\n featureLevel: WebGPU.FeatureLevel[HEAP32[(options + 8) / 4]],\n powerPreference: WebGPU.PowerPreference[HEAP32[(options + 12) / 4]],\n forceFallbackAdapter: !!HEAPU32[(options + 16) / 4],\n };\n var nextInChainPtr = Number(HEAPU64[options / 8]);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var webxrOptions = nextInChainPtr;\n opts.xrCompatible = !!HEAPU32[(webxrOptions + 16) / 4];\n }\n }\n if (!('gpu' in navigator)) {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (navigator.gpu is not available)'\n );\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 3,\n BigInt(adapterPtr),\n BigInt(messagePtr)\n );\n stackRestore(sp);\n return;\n }\n WebGPU.Internals.futureInsert(\n futureId,\n navigator.gpu.requestAdapter(opts).then(\n (adapter) => {\n callUserCallback(() => {\n if (adapter) {\n WebGPU.Internals.jsObjectInsert(adapterPtr, adapter);\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 1,\n BigInt(adapterPtr),\n 0n\n );\n } else {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (requestAdapter returned null)'\n );\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 3,\n BigInt(adapterPtr),\n BigInt(messagePtr)\n );\n stackRestore(sp);\n }\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 4,\n BigInt(adapterPtr),\n BigInt(messagePtr)\n );\n stackRestore(sp);\n });\n }\n )\n );\n}\nvar _emwgpuQueueOnSubmittedWorkDone = function (queuePtr, futureId) {\n queuePtr = bigintToI53Checked(queuePtr);\n futureId = bigintToI53Checked(futureId);\n var queue = WebGPU.getJsObject(queuePtr);\n WebGPU.Internals.futureInsert(\n futureId,\n queue.onSubmittedWorkDone().then(() => {\n callUserCallback(() => {\n _emwgpuOnWorkDoneCompleted(futureId, 1);\n });\n })\n );\n};\nvar _emwgpuWaitAny = function (futurePtr, futureCount, timeoutMSPtr) {\n futurePtr = bigintToI53Checked(futurePtr);\n futureCount = bigintToI53Checked(futureCount);\n timeoutMSPtr = bigintToI53Checked(timeoutMSPtr);\n return Asyncify.handleAsync(async () => {\n var promises = [];\n if (timeoutMSPtr) {\n var timeoutMS = HEAP32[timeoutMSPtr / 4];\n promises.length = futureCount + 1;\n promises[futureCount] = new Promise((resolve) =>\n setTimeout(resolve, timeoutMS, 0)\n );\n } else {\n promises.length = futureCount;\n }\n for (var i = 0; i < futureCount; ++i) {\n var futureId = readI53FromI64(futurePtr + i * 8);\n if (!(futureId in WebGPU.Internals.futures)) {\n return futureId;\n }\n promises[i] = WebGPU.Internals.futures[futureId];\n }\n const firstResolvedFuture = await Promise.race(promises);\n delete WebGPU.Internals.futures[firstResolvedFuture];\n return firstResolvedFuture;\n });\n};\n_emwgpuWaitAny.isAsync = true;\nvar ENV = {};\nvar getExecutableName = () => thisProgram || './this.program';\nvar getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n var lang =\n ((typeof navigator == 'object' && navigator.language) || 'C').replace(\n '-',\n '_'\n ) + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(`${x}=${env[x]}`);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n};\nfunction _environ_get(__environ, environ_buf) {\n __environ = bigintToI53Checked(__environ);\n environ_buf = bigintToI53Checked(environ_buf);\n var bufSize = 0;\n var envp = 0;\n for (var string of getEnvStrings()) {\n var ptr = environ_buf + bufSize;\n HEAPU64[(__environ + envp) / 8] = BigInt(ptr);\n bufSize += stringToUTF8(string, ptr, Infinity) + 1;\n envp += 8;\n }\n return 0;\n}\nfunction _environ_sizes_get(penviron_count, penviron_buf_size) {\n penviron_count = bigintToI53Checked(penviron_count);\n penviron_buf_size = bigintToI53Checked(penviron_buf_size);\n var strings = getEnvStrings();\n HEAPU64[penviron_count / 8] = BigInt(strings.length);\n var bufSize = 0;\n for (var string of strings) {\n bufSize += lengthBytesUTF8(string) + 1;\n }\n HEAPU64[penviron_buf_size / 8] = BigInt(bufSize);\n return 0;\n}\nfunction _fd_close(fd) {\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.close(stream);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doReadv = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = Number(HEAPU64[iov / 8]);\n var len = Number(HEAPU64[(iov + 8) / 8]);\n iov += 16;\n var curr = FS.read(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) break;\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_read(fd, iov, iovcnt, pnum) {\n iov = bigintToI53Checked(iov);\n iovcnt = bigintToI53Checked(iovcnt);\n pnum = bigintToI53Checked(pnum);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doReadv(stream, iov, iovcnt);\n HEAPU64[pnum / 8] = BigInt(num);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _fd_seek(fd, offset, whence, newOffset) {\n offset = bigintToI53Checked(offset);\n newOffset = bigintToI53Checked(newOffset);\n try {\n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.llseek(stream, offset, whence);\n HEAP64[newOffset / 8] = BigInt(stream.position);\n if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doWritev = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = Number(HEAPU64[iov / 8]);\n var len = Number(HEAPU64[(iov + 8) / 8]);\n iov += 16;\n var curr = FS.write(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) {\n break;\n }\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_write(fd, iov, iovcnt, pnum) {\n iov = bigintToI53Checked(iov);\n iovcnt = bigintToI53Checked(iovcnt);\n pnum = bigintToI53Checked(pnum);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doWritev(stream, iov, iovcnt);\n HEAPU64[pnum / 8] = BigInt(num);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _random_get(buffer, size) {\n buffer = bigintToI53Checked(buffer);\n size = bigintToI53Checked(size);\n try {\n randomFill(HEAPU8.subarray(buffer, buffer + size));\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar emwgpuStringToInt_FeatureName = {\n 'core-features-and-limits': 1,\n 'depth-clip-control': 2,\n 'depth32float-stencil8': 3,\n 'texture-compression-bc': 4,\n 'texture-compression-bc-sliced-3d': 5,\n 'texture-compression-etc2': 6,\n 'texture-compression-astc': 7,\n 'texture-compression-astc-sliced-3d': 8,\n 'timestamp-query': 9,\n 'indirect-first-instance': 10,\n 'shader-f16': 11,\n 'rg11b10ufloat-renderable': 12,\n 'bgra8unorm-storage': 13,\n 'float32-filterable': 14,\n 'float32-blendable': 15,\n 'clip-distances': 16,\n 'dual-source-blending': 17,\n subgroups: 18,\n 'texture-formats-tier1': 19,\n 'texture-formats-tier2': 20,\n 'primitive-index': 21,\n 'texture-component-swizzle': 22,\n 'chromium-experimental-unorm16-texture-formats': 327692,\n 'chromium-experimental-multi-draw-indirect': 327729,\n};\nfunction _wgpuAdapterGetFeatures(adapterPtr, supportedFeatures) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n supportedFeatures = bigintToI53Checked(supportedFeatures);\n var adapter = WebGPU.getJsObject(adapterPtr);\n var featuresPtr = _malloc(adapter.features.size * 4);\n var offset = 0;\n var numFeatures = 0;\n for (const feature of adapter.features) {\n var featureEnumValue = emwgpuStringToInt_FeatureName[feature];\n if (featureEnumValue >= 0) {\n HEAP32[(featuresPtr + offset) / 4] = featureEnumValue;\n offset += 4;\n numFeatures++;\n }\n }\n HEAPU64[(supportedFeatures + 8) / 8] = BigInt(featuresPtr);\n HEAPU64[supportedFeatures / 8] = BigInt(numFeatures);\n}\nfunction _wgpuAdapterGetInfo(adapterPtr, info) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n info = bigintToI53Checked(info);\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillAdapterInfoStruct(adapter.info, info);\n return 1;\n}\nfunction _wgpuAdapterGetLimits(adapterPtr, limitsOutPtr) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n limitsOutPtr = bigintToI53Checked(limitsOutPtr);\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillLimitStruct(adapter.limits, limitsOutPtr);\n return 1;\n}\nfunction _wgpuAdapterHasFeature(adapterPtr, featureEnumValue) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n var adapter = WebGPU.getJsObject(adapterPtr);\n return adapter.features.has(WebGPU.FeatureName[featureEnumValue]);\n}\nvar _wgpuBufferGetSize = function (bufferPtr) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n var ret = (() => {\n var buffer = WebGPU.getJsObject(bufferPtr);\n return buffer.size;\n })();\n return BigInt(ret);\n};\nvar _wgpuCommandEncoderBeginComputePass = function (encoderPtr, descriptor) {\n encoderPtr = bigintToI53Checked(encoderPtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var desc;\n if (descriptor) {\n desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n timestampWrites: WebGPU.makePassTimestampWrites(\n Number(HEAPU64[(descriptor + 24) / 8])\n ),\n };\n }\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateComputePassEncoder(0n);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.beginComputePass(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nfunction _wgpuCommandEncoderCopyBufferToBuffer(\n encoderPtr,\n srcPtr,\n srcOffset,\n dstPtr,\n dstOffset,\n size\n) {\n encoderPtr = bigintToI53Checked(encoderPtr);\n srcPtr = bigintToI53Checked(srcPtr);\n srcOffset = bigintToI53Checked(srcOffset);\n dstPtr = bigintToI53Checked(dstPtr);\n dstOffset = bigintToI53Checked(dstOffset);\n size = bigintToI53Checked(size);\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var src = WebGPU.getJsObject(srcPtr);\n var dst = WebGPU.getJsObject(dstPtr);\n commandEncoder.copyBufferToBuffer(src, srcOffset, dst, dstOffset, size);\n}\nvar _wgpuCommandEncoderFinish = function (encoderPtr, descriptor) {\n encoderPtr = bigintToI53Checked(encoderPtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateCommandBuffer(0n);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.finish());\n return ptr;\n })();\n return BigInt(ret);\n};\nfunction _wgpuComputePassEncoderDispatchWorkgroups(passPtr, x, y, z) {\n passPtr = bigintToI53Checked(passPtr);\n var pass = WebGPU.getJsObject(passPtr);\n pass.dispatchWorkgroups(x, y, z);\n}\nfunction _wgpuComputePassEncoderEnd(passPtr) {\n passPtr = bigintToI53Checked(passPtr);\n var pass = WebGPU.getJsObject(passPtr);\n pass.end();\n}\nfunction _wgpuComputePassEncoderSetBindGroup(\n passPtr,\n groupIndex,\n groupPtr,\n dynamicOffsetCount,\n dynamicOffsetsPtr\n) {\n passPtr = bigintToI53Checked(passPtr);\n groupPtr = bigintToI53Checked(groupPtr);\n dynamicOffsetCount = bigintToI53Checked(dynamicOffsetCount);\n dynamicOffsetsPtr = bigintToI53Checked(dynamicOffsetsPtr);\n var pass = WebGPU.getJsObject(passPtr);\n var group = WebGPU.getJsObject(groupPtr);\n if (dynamicOffsetCount == 0) {\n pass.setBindGroup(groupIndex, group);\n } else {\n pass.setBindGroup(\n groupIndex,\n group,\n HEAPU32,\n dynamicOffsetsPtr / 4,\n dynamicOffsetCount\n );\n }\n}\nfunction _wgpuComputePassEncoderSetPipeline(passPtr, pipelinePtr) {\n passPtr = bigintToI53Checked(passPtr);\n pipelinePtr = bigintToI53Checked(pipelinePtr);\n var pass = WebGPU.getJsObject(passPtr);\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n pass.setPipeline(pipeline);\n}\nvar _wgpuComputePipelineGetBindGroupLayout = function (\n pipelinePtr,\n groupIndex\n) {\n pipelinePtr = bigintToI53Checked(pipelinePtr);\n var ret = (() => {\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n var ptr = _emwgpuCreateBindGroupLayout(0n);\n WebGPU.Internals.jsObjectInsert(\n ptr,\n pipeline.getBindGroupLayout(groupIndex)\n );\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuDeviceCreateBindGroup = function (devicePtr, descriptor) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n function makeEntry(entryPtr) {\n var bufferPtr = Number(HEAPU64[(entryPtr + 16) / 8]);\n var samplerPtr = Number(HEAPU64[(entryPtr + 40) / 8]);\n var textureViewPtr = Number(HEAPU64[(entryPtr + 48) / 8]);\n var externalTexturePtr = 0;\n WebGPU.iterateExtensions(entryPtr, {\n 327681: (ptr) => {\n externalTexturePtr = Number(HEAPU64[(ptr + 16) / 8]);\n },\n });\n var resource;\n if (bufferPtr) {\n var size = readI53FromI64(entryPtr + 32);\n if (size == -1) size = undefined;\n resource = {\n buffer: WebGPU.getJsObject(bufferPtr),\n offset: readI53FromI64(entryPtr + 24),\n size,\n };\n } else {\n resource = WebGPU.getJsObject(\n samplerPtr || textureViewPtr || externalTexturePtr\n );\n }\n return { binding: HEAPU32[(entryPtr + 8) / 4], resource };\n }\n function makeEntries(count, entriesPtrs) {\n var entries = [];\n for (var i = 0; i < count; ++i) {\n entries.push(makeEntry(entriesPtrs + 56 * i));\n }\n return entries;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n layout: WebGPU.getJsObject(Number(HEAPU64[(descriptor + 24) / 8])),\n entries: makeEntries(\n Number(HEAPU64[(descriptor + 32) / 8]),\n Number(HEAPU64[(descriptor + 40) / 8])\n ),\n };\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateBindGroup(0n);\n WebGPU.Internals.jsObjectInsert(ptr, device.createBindGroup(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuDeviceCreateCommandEncoder = function (devicePtr, descriptor) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var desc;\n if (descriptor) {\n desc = { label: WebGPU.makeStringFromOptionalStringView(descriptor + 8) };\n }\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateCommandEncoder(0n);\n WebGPU.Internals.jsObjectInsert(ptr, device.createCommandEncoder(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuDeviceCreateComputePipeline = function (devicePtr, descriptor) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var desc = WebGPU.makeComputePipelineDesc(descriptor);\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateComputePipeline(0n);\n WebGPU.Internals.jsObjectInsert(ptr, device.createComputePipeline(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuQueueSubmit = function (queuePtr, commandCount, commands) {\n queuePtr = bigintToI53Checked(queuePtr);\n commandCount = bigintToI53Checked(commandCount);\n commands = bigintToI53Checked(commands);\n var queue = WebGPU.getJsObject(queuePtr);\n var cmds = Array.from(\n HEAP64.subarray(commands / 8, (commands + commandCount * 8) / 8),\n (id) => WebGPU.getJsObject(id)\n );\n queue.submit(cmds);\n};\nfunction _wgpuQueueWriteBuffer(queuePtr, bufferPtr, bufferOffset, data, size) {\n queuePtr = bigintToI53Checked(queuePtr);\n bufferPtr = bigintToI53Checked(bufferPtr);\n bufferOffset = bigintToI53Checked(bufferOffset);\n data = bigintToI53Checked(data);\n size = bigintToI53Checked(size);\n var queue = WebGPU.getJsObject(queuePtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var subarray = HEAPU8.subarray(data, data + size);\n queue.writeBuffer(buffer, bufferOffset, subarray, 0, size);\n}\nvar Asyncify = {\n instrumentWasmImports(imports) {\n var importPattern = /^(invoke_.*|__asyncjs__.*)$/;\n for (let [x, original] of Object.entries(imports)) {\n if (typeof original == 'function') {\n let isAsyncifyImport = original.isAsync || importPattern.test(x);\n if (isAsyncifyImport) {\n imports[x] = original = new WebAssembly.Suspending(original);\n }\n }\n }\n },\n instrumentFunction(original) {\n var wrapper = (...args) => original(...args);\n return wrapper;\n },\n instrumentWasmExports(exports) {\n var exportPattern = /^(wllama_start|wllama_action|main|__main_argc_argv)$/;\n Asyncify.asyncExports = new Set();\n var ret = {};\n for (let [x, original] of Object.entries(exports)) {\n if (typeof original == 'function') {\n let isAsyncifyExport = exportPattern.test(x);\n if (isAsyncifyExport) {\n Asyncify.asyncExports.add(original);\n original = Asyncify.makeAsyncFunction(original);\n }\n var wrapper = Asyncify.instrumentFunction(original);\n ret[x] = wrapper;\n } else {\n ret[x] = original;\n }\n }\n return ret;\n },\n asyncExports: null,\n isAsyncExport(func) {\n return Asyncify.asyncExports?.has(func);\n },\n handleAsync: async (startAsync) => {\n try {\n return await startAsync();\n } finally {\n }\n },\n handleSleep: (startAsync) =>\n Asyncify.handleAsync(() => new Promise(startAsync)),\n makeAsyncFunction(original) {\n return WebAssembly.promising(original);\n },\n};\nvar getCFunc = (ident) => {\n var func = Module['_' + ident];\n return func;\n};\nvar writeArrayToMemory = (array, buffer) => {\n HEAP8.set(array, buffer);\n};\nvar ccall = (ident, returnType, argTypes, args, opts) => {\n var toC = {\n pointer: (p) => BigInt(p),\n string: (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str);\n }\n return BigInt(ret);\n },\n array: (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return BigInt(ret);\n },\n };\n function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(Number(ret));\n }\n if (returnType === 'pointer') return Number(ret);\n if (returnType === 'boolean') return Boolean(ret);\n return ret;\n }\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var ret = func(...cArgs);\n function onDone(ret) {\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n var asyncMode = opts?.async;\n if (asyncMode) return ret.then(onDone);\n ret = onDone(ret);\n return ret;\n};\nvar cwrap = (ident, returnType, argTypes, opts) => {\n var numericArgs =\n !argTypes ||\n argTypes.every((type) => type === 'number' || type === 'boolean');\n var numericRet = returnType !== 'string';\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return (...args) => ccall(ident, returnType, argTypes, args, opts);\n};\nvar FS_createPath = (...args) => FS.createPath(...args);\nvar FS_unlink = (...args) => FS.unlink(...args);\nvar FS_createLazyFile = (...args) => FS.createLazyFile(...args);\nvar FS_createDevice = (...args) => FS.createDevice(...args);\nFS.createPreloadedFile = FS_createPreloadedFile;\nFS.preloadFile = FS_preloadFile;\nFS.staticInit();\n{\n initMemory();\n if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];\n if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins'];\n if (Module['print']) out = Module['print'];\n if (Module['printErr']) err = Module['printErr'];\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].shift()();\n }\n }\n}\nModule['mmapAlloc'] = mmapAlloc;\nModule['addRunDependency'] = addRunDependency;\nModule['removeRunDependency'] = removeRunDependency;\nModule['ccall'] = ccall;\nModule['cwrap'] = cwrap;\nModule['FS_preloadFile'] = FS_preloadFile;\nModule['FS_unlink'] = FS_unlink;\nModule['FS_createPath'] = FS_createPath;\nModule['FS_createDevice'] = FS_createDevice;\nModule['FS'] = FS;\nModule['FS_createDataFile'] = FS_createDataFile;\nModule['FS_createLazyFile'] = FS_createLazyFile;\nModule['MEMFS'] = MEMFS;\nvar _wllama_malloc,\n _wllama_start,\n _wllama_action,\n _wllama_exit,\n _wllama_debug,\n _main,\n _malloc,\n _free,\n _emwgpuCreateBindGroup,\n _emwgpuCreateBindGroupLayout,\n _emwgpuCreateCommandBuffer,\n _emwgpuCreateCommandEncoder,\n _emwgpuCreateComputePassEncoder,\n _emwgpuCreateComputePipeline,\n _emwgpuCreateExternalTexture,\n _emwgpuCreatePipelineLayout,\n _emwgpuCreateQuerySet,\n _emwgpuCreateRenderBundle,\n _emwgpuCreateRenderBundleEncoder,\n _emwgpuCreateRenderPassEncoder,\n _emwgpuCreateRenderPipeline,\n _emwgpuCreateSampler,\n _emwgpuCreateSurface,\n _emwgpuCreateTexture,\n _emwgpuCreateTextureView,\n _emwgpuCreateAdapter,\n _emwgpuCreateBuffer,\n _emwgpuCreateDevice,\n _emwgpuCreateQueue,\n _emwgpuCreateShaderModule,\n _emwgpuOnDeviceLostCompleted,\n _emwgpuOnMapAsyncCompleted,\n _emwgpuOnRequestAdapterCompleted,\n _emwgpuOnRequestDeviceCompleted,\n _emwgpuOnWorkDoneCompleted,\n _emwgpuOnUncapturedError,\n _emscripten_builtin_memalign,\n _memalign,\n ___trap,\n __emscripten_stack_restore,\n __emscripten_stack_alloc,\n _emscripten_stack_get_current,\n __indirect_function_table,\n wasmTable;\nfunction assignWasmExports(wasmExports) {\n _wllama_malloc = Module['_wllama_malloc'] = wasmExports['wllama_malloc'];\n _wllama_start = Module['_wllama_start'] = wasmExports['wllama_start'];\n _wllama_action = Module['_wllama_action'] = wasmExports['wllama_action'];\n _wllama_exit = Module['_wllama_exit'] = wasmExports['wllama_exit'];\n _wllama_debug = Module['_wllama_debug'] = wasmExports['wllama_debug'];\n _main = Module['_main'] = wasmExports['main'];\n _malloc = wasmExports['malloc'];\n _free = wasmExports['free'];\n _emwgpuCreateBindGroup = wasmExports['emwgpuCreateBindGroup'];\n _emwgpuCreateBindGroupLayout = wasmExports['emwgpuCreateBindGroupLayout'];\n _emwgpuCreateCommandBuffer = wasmExports['emwgpuCreateCommandBuffer'];\n _emwgpuCreateCommandEncoder = wasmExports['emwgpuCreateCommandEncoder'];\n _emwgpuCreateComputePassEncoder =\n wasmExports['emwgpuCreateComputePassEncoder'];\n _emwgpuCreateComputePipeline = wasmExports['emwgpuCreateComputePipeline'];\n _emwgpuCreateExternalTexture = wasmExports['emwgpuCreateExternalTexture'];\n _emwgpuCreatePipelineLayout = wasmExports['emwgpuCreatePipelineLayout'];\n _emwgpuCreateQuerySet = wasmExports['emwgpuCreateQuerySet'];\n _emwgpuCreateRenderBundle = wasmExports['emwgpuCreateRenderBundle'];\n _emwgpuCreateRenderBundleEncoder =\n wasmExports['emwgpuCreateRenderBundleEncoder'];\n _emwgpuCreateRenderPassEncoder = wasmExports['emwgpuCreateRenderPassEncoder'];\n _emwgpuCreateRenderPipeline = wasmExports['emwgpuCreateRenderPipeline'];\n _emwgpuCreateSampler = wasmExports['emwgpuCreateSampler'];\n _emwgpuCreateSurface = wasmExports['emwgpuCreateSurface'];\n _emwgpuCreateTexture = wasmExports['emwgpuCreateTexture'];\n _emwgpuCreateTextureView = wasmExports['emwgpuCreateTextureView'];\n _emwgpuCreateAdapter = wasmExports['emwgpuCreateAdapter'];\n _emwgpuCreateBuffer = wasmExports['emwgpuCreateBuffer'];\n _emwgpuCreateDevice = wasmExports['emwgpuCreateDevice'];\n _emwgpuCreateQueue = wasmExports['emwgpuCreateQueue'];\n _emwgpuCreateShaderModule = wasmExports['emwgpuCreateShaderModule'];\n _emwgpuOnDeviceLostCompleted = wasmExports['emwgpuOnDeviceLostCompleted'];\n _emwgpuOnMapAsyncCompleted = wasmExports['emwgpuOnMapAsyncCompleted'];\n _emwgpuOnRequestAdapterCompleted =\n wasmExports['emwgpuOnRequestAdapterCompleted'];\n _emwgpuOnRequestDeviceCompleted =\n wasmExports['emwgpuOnRequestDeviceCompleted'];\n _emwgpuOnWorkDoneCompleted = wasmExports['emwgpuOnWorkDoneCompleted'];\n _emwgpuOnUncapturedError = wasmExports['emwgpuOnUncapturedError'];\n _emscripten_builtin_memalign = wasmExports['emscripten_builtin_memalign'];\n _memalign = wasmExports['memalign'];\n ___trap = wasmExports['__trap'];\n __emscripten_stack_restore = wasmExports['_emscripten_stack_restore'];\n __emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'];\n _emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'];\n __indirect_function_table = wasmTable =\n wasmExports['__indirect_function_table'];\n}\nvar wasmImports = {\n __syscall_fcntl64: ___syscall_fcntl64,\n __syscall_ioctl: ___syscall_ioctl,\n __syscall_openat: ___syscall_openat,\n _abort_js: __abort_js,\n _mmap_js: __mmap_js,\n _munmap_js: __munmap_js,\n _tzset_js: __tzset_js,\n clock_time_get: _clock_time_get,\n emscripten_date_now: _emscripten_date_now,\n emscripten_get_heap_max: _emscripten_get_heap_max,\n emscripten_has_asyncify: _emscripten_has_asyncify,\n emscripten_resize_heap: _emscripten_resize_heap,\n emwgpuAdapterRequestDevice: _emwgpuAdapterRequestDevice,\n emwgpuBufferDestroy: _emwgpuBufferDestroy,\n emwgpuBufferGetConstMappedRange: _emwgpuBufferGetConstMappedRange,\n emwgpuBufferMapAsync: _emwgpuBufferMapAsync,\n emwgpuBufferUnmap: _emwgpuBufferUnmap,\n emwgpuDelete: _emwgpuDelete,\n emwgpuDeviceCreateBuffer: _emwgpuDeviceCreateBuffer,\n emwgpuDeviceCreateShaderModule: _emwgpuDeviceCreateShaderModule,\n emwgpuDeviceDestroy: _emwgpuDeviceDestroy,\n emwgpuInstanceRequestAdapter: _emwgpuInstanceRequestAdapter,\n emwgpuQueueOnSubmittedWorkDone: _emwgpuQueueOnSubmittedWorkDone,\n emwgpuWaitAny: _emwgpuWaitAny,\n environ_get: _environ_get,\n environ_sizes_get: _environ_sizes_get,\n fd_close: _fd_close,\n fd_read: _fd_read,\n fd_seek: _fd_seek,\n fd_write: _fd_write,\n memory: wasmMemory,\n random_get: _random_get,\n wgpuAdapterGetFeatures: _wgpuAdapterGetFeatures,\n wgpuAdapterGetInfo: _wgpuAdapterGetInfo,\n wgpuAdapterGetLimits: _wgpuAdapterGetLimits,\n wgpuAdapterHasFeature: _wgpuAdapterHasFeature,\n wgpuBufferGetSize: _wgpuBufferGetSize,\n wgpuCommandEncoderBeginComputePass: _wgpuCommandEncoderBeginComputePass,\n wgpuCommandEncoderCopyBufferToBuffer: _wgpuCommandEncoderCopyBufferToBuffer,\n wgpuCommandEncoderFinish: _wgpuCommandEncoderFinish,\n wgpuComputePassEncoderDispatchWorkgroups:\n _wgpuComputePassEncoderDispatchWorkgroups,\n wgpuComputePassEncoderEnd: _wgpuComputePassEncoderEnd,\n wgpuComputePassEncoderSetBindGroup: _wgpuComputePassEncoderSetBindGroup,\n wgpuComputePassEncoderSetPipeline: _wgpuComputePassEncoderSetPipeline,\n wgpuComputePipelineGetBindGroupLayout: _wgpuComputePipelineGetBindGroupLayout,\n wgpuDeviceCreateBindGroup: _wgpuDeviceCreateBindGroup,\n wgpuDeviceCreateCommandEncoder: _wgpuDeviceCreateCommandEncoder,\n wgpuDeviceCreateComputePipeline: _wgpuDeviceCreateComputePipeline,\n wgpuQueueSubmit: _wgpuQueueSubmit,\n wgpuQueueWriteBuffer: _wgpuQueueWriteBuffer,\n};\nfunction applySignatureConversions(wasmExports) {\n wasmExports = Object.assign({}, wasmExports);\n var makeWrapper___PP = (f) => (a0, a1, a2) =>\n f(a0, BigInt(a1 ? a1 : 0), BigInt(a2 ? a2 : 0));\n var makeWrapper_pp = (f) => (a0) => Number(f(BigInt(a0)));\n var makeWrapper__p = (f) => (a0) => f(BigInt(a0));\n var makeWrapper_ppp = (f) => (a0, a1) => Number(f(BigInt(a0), BigInt(a1)));\n var makeWrapper_p = (f) => () => Number(f());\n wasmExports['main'] = makeWrapper___PP(wasmExports['main']);\n wasmExports['malloc'] = makeWrapper_pp(wasmExports['malloc']);\n wasmExports['free'] = makeWrapper__p(wasmExports['free']);\n wasmExports['emscripten_builtin_memalign'] = makeWrapper_ppp(\n wasmExports['emscripten_builtin_memalign']\n );\n wasmExports['memalign'] = makeWrapper_ppp(wasmExports['memalign']);\n wasmExports['_emscripten_stack_restore'] = makeWrapper__p(\n wasmExports['_emscripten_stack_restore']\n );\n wasmExports['_emscripten_stack_alloc'] = makeWrapper_pp(\n wasmExports['_emscripten_stack_alloc']\n );\n wasmExports['emscripten_stack_get_current'] = makeWrapper_p(\n wasmExports['emscripten_stack_get_current']\n );\n return wasmExports;\n}\nasync function callMain() {\n var entryFunction = _main;\n var argc = 0;\n var argv = 0;\n try {\n var ret = entryFunction(argc, BigInt(argv));\n ret = await ret;\n exitJS(ret, true);\n return ret;\n } catch (e) {\n return handleException(e);\n }\n}\nfunction run() {\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n preRun();\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n async function doRun() {\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n preMain();\n Module['onRuntimeInitialized']?.();\n var noInitialRun = Module['noInitialRun'] || false;\n if (!noInitialRun) await callMain();\n postRun();\n }\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(() => {\n setTimeout(() => Module['setStatus'](''), 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n}\nvar wasmExports;\ncreateWasm();\nrun();\n"; export declare const WLLAMA_ASYNCIFY_SINGLE_THREAD_CODE = "var Module = typeof Module != 'undefined' ? Module : {};\nvar ENVIRONMENT_IS_WEB = !!globalThis.window;\nvar ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;\nvar ENVIRONMENT_IS_NODE =\n globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\nvar _scriptName = globalThis.document?.currentScript?.src;\nif (typeof __filename != 'undefined') {\n _scriptName = __filename;\n} else if (ENVIRONMENT_IS_WORKER) {\n _scriptName = self.location.href;\n}\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\nvar readAsync, readBinary;\nif (ENVIRONMENT_IS_NODE) {\n var fs = require('fs');\n scriptDirectory = __dirname + '/';\n readBinary = (filename) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename);\n return ret;\n };\n readAsync = async (filename, binary = true) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');\n return ret;\n };\n if (process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/');\n }\n arguments_ = process.argv.slice(2);\n if (typeof module != 'undefined') {\n module['exports'] = Module;\n }\n quit_ = (status, toThrow) => {\n process.exitCode = status;\n throw toThrow;\n };\n} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n try {\n scriptDirectory = new URL('.', _scriptName).href;\n } catch {}\n {\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = async (url) => {\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n resolve(xhr.response);\n return;\n }\n reject(xhr.status);\n };\n xhr.onerror = reject;\n xhr.send(null);\n });\n }\n var response = await fetch(url, { credentials: 'same-origin' });\n if (response.ok) {\n return response.arrayBuffer();\n }\n throw new Error(response.status + ' : ' + response.url);\n };\n }\n} else {\n}\nvar out = console.log.bind(console);\nvar err = console.error.bind(console);\nvar wasmBinary;\nvar ABORT = false;\nvar EXITSTATUS;\nvar isFileURI = (filename) => filename.startsWith('file://');\nvar HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\nvar HEAP64, HEAPU64;\nvar runtimeInitialized = false;\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n HEAP8 = new Int8Array(b);\n HEAP16 = new Int16Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n HEAPU16 = new Uint16Array(b);\n HEAP32 = new Int32Array(b);\n HEAPU32 = new Uint32Array(b);\n HEAPF32 = new Float32Array(b);\n HEAPF64 = new Float64Array(b);\n HEAP64 = new BigInt64Array(b);\n HEAPU64 = new BigUint64Array(b);\n}\nfunction initMemory() {\n if (Module['wasmMemory']) {\n wasmMemory = Module['wasmMemory'];\n } else {\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728;\n wasmMemory = new WebAssembly.Memory({\n initial: INITIAL_MEMORY / 65536,\n maximum: 65536,\n });\n }\n updateMemoryViews();\n}\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(onPreRuns);\n}\nfunction initRuntime() {\n runtimeInitialized = true;\n if (!Module['noFSInit'] && !FS.initialized) FS.init();\n TTY.init();\n wasmExports['s']();\n FS.ignorePermissions = false;\n}\nfunction preMain() {}\nfunction postRun() {\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(onPostRuns);\n}\nfunction abort(what) {\n Module['onAbort']?.(what);\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n what += '. Build with -sASSERTIONS for more info.';\n if (runtimeInitialized) {\n ___trap();\n }\n var e = new WebAssembly.RuntimeError(what);\n throw e;\n}\nvar wasmBinaryFile;\nfunction findWasmBinary() {\n return locateFile('wllama.wasm');\n}\nfunction getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n}\nasync function getWasmBinary(binaryFile) {\n if (!wasmBinary) {\n try {\n var response = await readAsync(binaryFile);\n return new Uint8Array(response);\n } catch {}\n }\n return getBinarySync(binaryFile);\n}\nasync function instantiateArrayBuffer(binaryFile, imports) {\n try {\n var binary = await getWasmBinary(binaryFile);\n var instance = await WebAssembly.instantiate(binary, imports);\n return instance;\n } catch (reason) {\n err(`failed to asynchronously prepare wasm: ${reason}`);\n abort(reason);\n }\n}\nasync function instantiateAsync(binary, binaryFile, imports) {\n if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {\n try {\n var response = fetch(binaryFile, { credentials: 'same-origin' });\n var instantiationResult = await WebAssembly.instantiateStreaming(\n response,\n imports\n );\n return instantiationResult;\n } catch (reason) {\n err(`wasm streaming compile failed: ${reason}`);\n err('falling back to ArrayBuffer instantiation');\n }\n }\n return instantiateArrayBuffer(binaryFile, imports);\n}\nfunction getWasmImports() {\n var imports = { a: wasmImports };\n return imports;\n}\nasync function createWasm() {\n function receiveInstance(instance, module) {\n wasmExports = instance.exports;\n wasmExports = applySignatureConversions(wasmExports);\n assignWasmExports(wasmExports);\n removeRunDependency('wasm-instantiate');\n return wasmExports;\n }\n addRunDependency('wasm-instantiate');\n function receiveInstantiationResult(result) {\n return receiveInstance(result['instance']);\n }\n var info = getWasmImports();\n if (Module['instantiateWasm']) {\n return new Promise((resolve, reject) => {\n Module['instantiateWasm'](info, (inst, mod) => {\n resolve(receiveInstance(inst, mod));\n });\n });\n }\n wasmBinaryFile ??= findWasmBinary();\n var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);\n var exports = receiveInstantiationResult(result);\n return exports;\n}\nclass ExitStatus {\n name = 'ExitStatus';\n constructor(status) {\n this.message = `Program terminated with exit(${status})`;\n this.status = status;\n }\n}\nvar callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n};\nvar onPostRuns = [];\nvar addOnPostRun = (cb) => onPostRuns.push(cb);\nvar onPreRuns = [];\nvar addOnPreRun = (cb) => onPreRuns.push(cb);\nvar runDependencies = 0;\nvar dependenciesFulfilled = null;\nvar removeRunDependency = (id) => {\n runDependencies--;\n Module['monitorRunDependencies']?.(runDependencies);\n if (runDependencies == 0) {\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n};\nvar addRunDependency = (id) => {\n runDependencies++;\n Module['monitorRunDependencies']?.(runDependencies);\n};\nvar noExitRuntime = true;\nvar wasmMemory;\nvar syscallGetVarargI = () => {\n var ret = HEAP32[(+SYSCALLS.varargs >>> 2) >>> 0];\n SYSCALLS.varargs += 4;\n return ret;\n};\nvar syscallGetVarargP = syscallGetVarargI;\nvar PATH = {\n isAbs: (path) => path.charAt(0) === '/',\n splitPath: (filename) => {\n var splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n return splitPathRe.exec(filename).slice(1);\n },\n normalizeArray: (parts, allowAboveRoot) => {\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n if (allowAboveRoot) {\n for (; up; up--) {\n parts.unshift('..');\n }\n }\n return parts;\n },\n normalize: (path) => {\n var isAbsolute = PATH.isAbs(path),\n trailingSlash = path.slice(-1) === '/';\n path = PATH.normalizeArray(\n path.split('/').filter((p) => !!p),\n !isAbsolute\n ).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n },\n dirname: (path) => {\n var result = PATH.splitPath(path),\n root = result[0],\n dir = result[1];\n if (!root && !dir) {\n return '.';\n }\n if (dir) {\n dir = dir.slice(0, -1);\n }\n return root + dir;\n },\n basename: (path) => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n join: (...paths) => PATH.normalize(paths.join('/')),\n join2: (l, r) => PATH.normalize(l + '/' + r),\n};\nvar initRandomFill = () => {\n if (ENVIRONMENT_IS_NODE) {\n var nodeCrypto = require('crypto');\n return (view) => nodeCrypto.randomFillSync(view);\n }\n return (view) => crypto.getRandomValues(view);\n};\nvar randomFill = (view) => {\n (randomFill = initRandomFill())(view);\n};\nvar PATH_FS = {\n resolve: (...args) => {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? args[i] : FS.cwd();\n if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n return '';\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = PATH.isAbs(path);\n }\n resolvedPath = PATH.normalizeArray(\n resolvedPath.split('/').filter((p) => !!p),\n !resolvedAbsolute\n ).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n },\n relative: (from, to) => {\n from = PATH_FS.resolve(from).slice(1);\n to = PATH_FS.resolve(to).slice(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n },\n};\nvar UTF8Decoder = globalThis.TextDecoder && new TextDecoder();\nvar findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n var maxIdx = idx + maxBytesToRead;\n if (ignoreNul) return maxIdx;\n while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n return idx;\n};\nvar UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n idx >>>= 0;\n var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n};\nvar FS_stdin_getChar_buffer = [];\nvar lengthBytesUTF8 = (str) => {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n var c = str.charCodeAt(i);\n if (c <= 127) {\n len++;\n } else if (c <= 2047) {\n len += 2;\n } else if (c >= 55296 && c <= 57343) {\n len += 4;\n ++i;\n } else {\n len += 3;\n }\n }\n return len;\n};\nvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n outIdx >>>= 0;\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.codePointAt(i);\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++ >>> 0] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++ >>> 0] = 192 | (u >> 6);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++ >>> 0] = 224 | (u >> 12);\n heap[outIdx++ >>> 0] = 128 | ((u >> 6) & 63);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++ >>> 0] = 240 | (u >> 18);\n heap[outIdx++ >>> 0] = 128 | ((u >> 12) & 63);\n heap[outIdx++ >>> 0] = 128 | ((u >> 6) & 63);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n i++;\n }\n }\n heap[outIdx >>> 0] = 0;\n return outIdx - startIdx;\n};\nvar intArrayFromString = (stringy, dontAddNull, length) => {\n var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n var u8array = new Array(len);\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n if (dontAddNull) u8array.length = numBytesWritten;\n return u8array;\n};\nvar FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n var result = null;\n if (ENVIRONMENT_IS_NODE) {\n var BUFSIZE = 256;\n var buf = Buffer.alloc(BUFSIZE);\n var bytesRead = 0;\n var fd = process.stdin.fd;\n try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n } catch (e) {\n if (e.toString().includes('EOF')) bytesRead = 0;\n else throw e;\n }\n if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8');\n }\n } else if (globalThis.window?.prompt) {\n result = window.prompt('Input: ');\n if (result !== null) {\n result += '\\n';\n }\n } else {\n }\n if (!result) {\n return null;\n }\n FS_stdin_getChar_buffer = intArrayFromString(result, true);\n }\n return FS_stdin_getChar_buffer.shift();\n};\nvar TTY = {\n ttys: [],\n init() {},\n shutdown() {},\n register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops };\n FS.registerDevice(dev, TTY.stream_ops);\n },\n stream_ops: {\n open(stream) {\n var tty = TTY.ttys[stream.node.rdev];\n if (!tty) {\n throw new FS.ErrnoError(43);\n }\n stream.tty = tty;\n stream.seekable = false;\n },\n close(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n fsync(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n read(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60);\n }\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = stream.tty.ops.get_char(stream.tty);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60);\n }\n try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n }\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n },\n default_tty_ops: {\n get_char(tty) {\n return FS_stdin_getChar();\n },\n put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n ioctl_tcgets(tty) {\n return {\n c_iflag: 25856,\n c_oflag: 5,\n c_cflag: 191,\n c_lflag: 35387,\n c_cc: [\n 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ],\n };\n },\n ioctl_tcsets(tty, optional_actions, data) {\n return 0;\n },\n ioctl_tiocgwinsz(tty) {\n return [24, 80];\n },\n },\n default_tty1_ops: {\n put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n },\n};\nvar zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size);\nvar alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;\nvar mmapAlloc = (size) => {\n size = alignMemory(size, 65536);\n var ptr = _emscripten_builtin_memalign(65536, size);\n if (ptr) zeroMemory(ptr, size);\n return ptr;\n};\nvar MEMFS = {\n ops_table: null,\n mount(mount) {\n return MEMFS.createNode(null, '/', 16895, 0);\n },\n createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n throw new FS.ErrnoError(63);\n }\n MEMFS.ops_table ||= {\n dir: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n lookup: MEMFS.node_ops.lookup,\n mknod: MEMFS.node_ops.mknod,\n rename: MEMFS.node_ops.rename,\n unlink: MEMFS.node_ops.unlink,\n rmdir: MEMFS.node_ops.rmdir,\n readdir: MEMFS.node_ops.readdir,\n symlink: MEMFS.node_ops.symlink,\n },\n stream: { llseek: MEMFS.stream_ops.llseek },\n },\n file: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek,\n read: MEMFS.stream_ops.read,\n write: MEMFS.stream_ops.write,\n mmap: MEMFS.stream_ops.mmap,\n msync: MEMFS.stream_ops.msync,\n },\n },\n link: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n readlink: MEMFS.node_ops.readlink,\n },\n stream: {},\n },\n chrdev: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: FS.chrdev_stream_ops,\n },\n };\n var node = FS.createNode(parent, name, mode, dev);\n if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node;\n node.stream_ops = MEMFS.ops_table.dir.stream;\n node.contents = {};\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node;\n node.stream_ops = MEMFS.ops_table.file.stream;\n node.usedBytes = 0;\n node.contents = null;\n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node;\n node.stream_ops = MEMFS.ops_table.link.stream;\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node;\n node.stream_ops = MEMFS.ops_table.chrdev.stream;\n }\n node.atime = node.mtime = node.ctime = Date.now();\n if (parent) {\n parent.contents[name] = node;\n parent.atime = parent.mtime = parent.ctime = node.atime;\n }\n return node;\n },\n getFileDataAsTypedArray(node) {\n if (!node.contents) return new Uint8Array(0);\n if (node.contents.subarray)\n return node.contents.subarray(0, node.usedBytes);\n return new Uint8Array(node.contents);\n },\n expandFileStorage(node, newCapacity) {\n var prevCapacity = node.contents ? node.contents.length : 0;\n if (prevCapacity >= newCapacity) return;\n var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n newCapacity = Math.max(\n newCapacity,\n (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>> 0\n );\n if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n var oldContents = node.contents;\n node.contents = new Uint8Array(newCapacity);\n if (node.usedBytes > 0)\n node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n },\n resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize) return;\n if (newSize == 0) {\n node.contents = null;\n node.usedBytes = 0;\n } else {\n var oldContents = node.contents;\n node.contents = new Uint8Array(newSize);\n if (oldContents) {\n node.contents.set(\n oldContents.subarray(0, Math.min(newSize, node.usedBytes))\n );\n }\n node.usedBytes = newSize;\n }\n },\n node_ops: {\n getattr(node) {\n var attr = {};\n attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n attr.ino = node.id;\n attr.mode = node.mode;\n attr.nlink = 1;\n attr.uid = 0;\n attr.gid = 0;\n attr.rdev = node.rdev;\n if (FS.isDir(node.mode)) {\n attr.size = 4096;\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes;\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length;\n } else {\n attr.size = 0;\n }\n attr.atime = new Date(node.atime);\n attr.mtime = new Date(node.mtime);\n attr.ctime = new Date(node.ctime);\n attr.blksize = 4096;\n attr.blocks = Math.ceil(attr.size / attr.blksize);\n return attr;\n },\n setattr(node, attr) {\n for (const key of ['mode', 'atime', 'mtime', 'ctime']) {\n if (attr[key] != null) {\n node[key] = attr[key];\n }\n }\n if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size);\n }\n },\n lookup(parent, name) {\n if (!MEMFS.doesNotExistError) {\n MEMFS.doesNotExistError = new FS.ErrnoError(44);\n MEMFS.doesNotExistError.stack = '';\n }\n throw MEMFS.doesNotExistError;\n },\n mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev);\n },\n rename(old_node, new_dir, new_name) {\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (new_node) {\n if (FS.isDir(old_node.mode)) {\n for (var i in new_node.contents) {\n throw new FS.ErrnoError(55);\n }\n }\n FS.hashRemoveNode(new_node);\n }\n delete old_node.parent.contents[old_node.name];\n new_dir.contents[new_name] = old_node;\n old_node.name = new_name;\n new_dir.ctime =\n new_dir.mtime =\n old_node.parent.ctime =\n old_node.parent.mtime =\n Date.now();\n },\n unlink(parent, name) {\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n rmdir(parent, name) {\n var node = FS.lookupNode(parent, name);\n for (var i in node.contents) {\n throw new FS.ErrnoError(55);\n }\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n readdir(node) {\n return ['.', '..', ...Object.keys(node.contents)];\n },\n symlink(parent, newname, oldpath) {\n var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);\n node.link = oldpath;\n return node;\n },\n readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n return node.link;\n },\n },\n stream_ops: {\n read(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= stream.node.usedBytes) return 0;\n var size = Math.min(stream.node.usedBytes - position, length);\n if (size > 8 && contents.subarray) {\n buffer.set(contents.subarray(position, position + size), offset);\n } else {\n for (var i = 0; i < size; i++)\n buffer[offset + i] = contents[position + i];\n }\n return size;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (buffer.buffer === HEAP8.buffer) {\n canOwn = false;\n }\n if (!length) return 0;\n var node = stream.node;\n node.mtime = node.ctime = Date.now();\n if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (node.usedBytes === 0 && position === 0) {\n node.contents = buffer.slice(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (position + length <= node.usedBytes) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n return length;\n }\n }\n MEMFS.expandFileStorage(node, position + length);\n if (node.contents.subarray && buffer.subarray) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n } else {\n for (var i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i];\n }\n }\n node.usedBytes = Math.max(node.usedBytes, position + length);\n return length;\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes;\n }\n }\n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n return position;\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n var ptr;\n var allocated;\n var contents = stream.node.contents;\n if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n allocated = false;\n ptr = contents.byteOffset;\n } else {\n allocated = true;\n ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n if (contents) {\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length);\n } else {\n contents = Array.prototype.slice.call(\n contents,\n position,\n position + length\n );\n }\n }\n HEAP8.set(contents, ptr >>> 0);\n }\n }\n return { ptr, allocated };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n return 0;\n },\n },\n};\nvar FS_modeStringToFlags = (str) => {\n var flagModes = {\n r: 0,\n 'r+': 2,\n w: 512 | 64 | 1,\n 'w+': 512 | 64 | 2,\n a: 1024 | 64 | 1,\n 'a+': 1024 | 64 | 2,\n };\n var flags = flagModes[str];\n if (typeof flags == 'undefined') {\n throw new Error(`Unknown file open mode: ${str}`);\n }\n return flags;\n};\nvar FS_getMode = (canRead, canWrite) => {\n var mode = 0;\n if (canRead) mode |= 292 | 73;\n if (canWrite) mode |= 146;\n return mode;\n};\nvar asyncLoad = async (url) => {\n var arrayBuffer = await readAsync(url);\n return new Uint8Array(arrayBuffer);\n};\nvar FS_createDataFile = (...args) => FS.createDataFile(...args);\nvar getUniqueRunDependency = (id) => id;\nvar preloadPlugins = [];\nvar FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n if (typeof Browser != 'undefined') Browser.init();\n for (var plugin of preloadPlugins) {\n if (plugin['canHandle'](fullname)) {\n return plugin['handle'](byteArray, fullname);\n }\n }\n return byteArray;\n};\nvar FS_preloadFile = async (\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n var dep = getUniqueRunDependency(`cp ${fullname}`);\n addRunDependency(dep);\n try {\n var byteArray = url;\n if (typeof url == 'string') {\n byteArray = await asyncLoad(url);\n }\n byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n preFinish?.();\n if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n }\n } finally {\n removeRunDependency(dep);\n }\n};\nvar FS_createPreloadedFile = (\n parent,\n name,\n url,\n canRead,\n canWrite,\n onload,\n onerror,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n FS_preloadFile(\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n )\n .then(onload)\n .catch(onerror);\n};\nvar FS = {\n root: null,\n mounts: [],\n devices: {},\n streams: [],\n nextInode: 1,\n nameTable: null,\n currentPath: '/',\n initialized: false,\n ignorePermissions: true,\n filesystems: null,\n syncFSRequests: 0,\n readFiles: {},\n ErrnoError: class {\n name = 'ErrnoError';\n constructor(errno) {\n this.errno = errno;\n }\n },\n FSStream: class {\n shared = {};\n get object() {\n return this.node;\n }\n set object(val) {\n this.node = val;\n }\n get isRead() {\n return (this.flags & 2097155) !== 1;\n }\n get isWrite() {\n return (this.flags & 2097155) !== 0;\n }\n get isAppend() {\n return this.flags & 1024;\n }\n get flags() {\n return this.shared.flags;\n }\n set flags(val) {\n this.shared.flags = val;\n }\n get position() {\n return this.shared.position;\n }\n set position(val) {\n this.shared.position = val;\n }\n },\n FSNode: class {\n node_ops = {};\n stream_ops = {};\n readMode = 292 | 73;\n writeMode = 146;\n mounted = null;\n constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this;\n }\n this.parent = parent;\n this.mount = parent.mount;\n this.id = FS.nextInode++;\n this.name = name;\n this.mode = mode;\n this.rdev = rdev;\n this.atime = this.mtime = this.ctime = Date.now();\n }\n get read() {\n return (this.mode & this.readMode) === this.readMode;\n }\n set read(val) {\n val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n }\n get write() {\n return (this.mode & this.writeMode) === this.writeMode;\n }\n set write(val) {\n val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n }\n get isFolder() {\n return FS.isDir(this.mode);\n }\n get isDevice() {\n return FS.isChrdev(this.mode);\n }\n },\n lookupPath(path, opts = {}) {\n if (!path) {\n throw new FS.ErrnoError(44);\n }\n opts.follow_mount ??= true;\n if (!PATH.isAbs(path)) {\n path = FS.cwd() + '/' + path;\n }\n linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n var parts = path.split('/').filter((p) => !!p);\n var current = FS.root;\n var current_path = '/';\n for (var i = 0; i < parts.length; i++) {\n var islast = i === parts.length - 1;\n if (islast && opts.parent) {\n break;\n }\n if (parts[i] === '.') {\n continue;\n }\n if (parts[i] === '..') {\n current_path = PATH.dirname(current_path);\n if (FS.isRoot(current)) {\n path = current_path + '/' + parts.slice(i + 1).join('/');\n nlinks--;\n continue linkloop;\n } else {\n current = current.parent;\n }\n continue;\n }\n current_path = PATH.join2(current_path, parts[i]);\n try {\n current = FS.lookupNode(current, parts[i]);\n } catch (e) {\n if (e?.errno === 44 && islast && opts.noent_okay) {\n return { path: current_path };\n }\n throw e;\n }\n if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {\n current = current.mounted.root;\n }\n if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n if (!current.node_ops.readlink) {\n throw new FS.ErrnoError(52);\n }\n var link = current.node_ops.readlink(current);\n if (!PATH.isAbs(link)) {\n link = PATH.dirname(current_path) + '/' + link;\n }\n path = link + '/' + parts.slice(i + 1).join('/');\n continue linkloop;\n }\n }\n return { path: current_path, node: current };\n }\n throw new FS.ErrnoError(32);\n },\n getPath(node) {\n var path;\n while (true) {\n if (FS.isRoot(node)) {\n var mount = node.mount.mountpoint;\n if (!path) return mount;\n return mount[mount.length - 1] !== '/'\n ? `${mount}/${path}`\n : mount + path;\n }\n path = path ? `${node.name}/${path}` : node.name;\n node = node.parent;\n }\n },\n hashName(parentid, name) {\n var hash = 0;\n for (var i = 0; i < name.length; i++) {\n hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n }\n return ((parentid + hash) >>> 0) % FS.nameTable.length;\n },\n hashAddNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n node.name_next = FS.nameTable[hash];\n FS.nameTable[hash] = node;\n },\n hashRemoveNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next;\n } else {\n var current = FS.nameTable[hash];\n while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next;\n break;\n }\n current = current.name_next;\n }\n }\n },\n lookupNode(parent, name) {\n var errCode = FS.mayLookup(parent);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n var hash = FS.hashName(parent.id, name);\n for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n var nodeName = node.name;\n if (node.parent.id === parent.id && nodeName === name) {\n return node;\n }\n }\n return FS.lookup(parent, name);\n },\n createNode(parent, name, mode, rdev) {\n var node = new FS.FSNode(parent, name, mode, rdev);\n FS.hashAddNode(node);\n return node;\n },\n destroyNode(node) {\n FS.hashRemoveNode(node);\n },\n isRoot(node) {\n return node === node.parent;\n },\n isMountpoint(node) {\n return !!node.mounted;\n },\n isFile(mode) {\n return (mode & 61440) === 32768;\n },\n isDir(mode) {\n return (mode & 61440) === 16384;\n },\n isLink(mode) {\n return (mode & 61440) === 40960;\n },\n isChrdev(mode) {\n return (mode & 61440) === 8192;\n },\n isBlkdev(mode) {\n return (mode & 61440) === 24576;\n },\n isFIFO(mode) {\n return (mode & 61440) === 4096;\n },\n isSocket(mode) {\n return (mode & 49152) === 49152;\n },\n flagsToPermissionString(flag) {\n var perms = ['r', 'w', 'rw'][flag & 3];\n if (flag & 512) {\n perms += 'w';\n }\n return perms;\n },\n nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0;\n }\n if (perms.includes('r') && !(node.mode & 292)) {\n return 2;\n } else if (perms.includes('w') && !(node.mode & 146)) {\n return 2;\n } else if (perms.includes('x') && !(node.mode & 73)) {\n return 2;\n }\n return 0;\n },\n mayLookup(dir) {\n if (!FS.isDir(dir.mode)) return 54;\n var errCode = FS.nodePermissions(dir, 'x');\n if (errCode) return errCode;\n if (!dir.node_ops.lookup) return 2;\n return 0;\n },\n mayCreate(dir, name) {\n if (!FS.isDir(dir.mode)) {\n return 54;\n }\n try {\n var node = FS.lookupNode(dir, name);\n return 20;\n } catch (e) {}\n return FS.nodePermissions(dir, 'wx');\n },\n mayDelete(dir, name, isdir) {\n var node;\n try {\n node = FS.lookupNode(dir, name);\n } catch (e) {\n return e.errno;\n }\n var errCode = FS.nodePermissions(dir, 'wx');\n if (errCode) {\n return errCode;\n }\n if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54;\n }\n if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10;\n }\n } else {\n if (FS.isDir(node.mode)) {\n return 31;\n }\n }\n return 0;\n },\n mayOpen(node, flags) {\n if (!node) {\n return 44;\n }\n if (FS.isLink(node.mode)) {\n return 32;\n } else if (FS.isDir(node.mode)) {\n if (FS.flagsToPermissionString(flags) !== 'r' || flags & (512 | 64)) {\n return 31;\n }\n }\n return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n },\n checkOpExists(op, err) {\n if (!op) {\n throw new FS.ErrnoError(err);\n }\n return op;\n },\n MAX_OPEN_FDS: 4096,\n nextfd() {\n for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd;\n }\n }\n throw new FS.ErrnoError(33);\n },\n getStreamChecked(fd) {\n var stream = FS.getStream(fd);\n if (!stream) {\n throw new FS.ErrnoError(8);\n }\n return stream;\n },\n getStream: (fd) => FS.streams[fd],\n createStream(stream, fd = -1) {\n stream = Object.assign(new FS.FSStream(), stream);\n if (fd == -1) {\n fd = FS.nextfd();\n }\n stream.fd = fd;\n FS.streams[fd] = stream;\n return stream;\n },\n closeStream(fd) {\n FS.streams[fd] = null;\n },\n dupStream(origStream, fd = -1) {\n var stream = FS.createStream(origStream, fd);\n stream.stream_ops?.dup?.(stream);\n return stream;\n },\n doSetAttr(stream, node, attr) {\n var setattr = stream?.stream_ops.setattr;\n var arg = setattr ? stream : node;\n setattr ??= node.node_ops.setattr;\n FS.checkOpExists(setattr, 63);\n setattr(arg, attr);\n },\n chrdev_stream_ops: {\n open(stream) {\n var device = FS.getDevice(stream.node.rdev);\n stream.stream_ops = device.stream_ops;\n stream.stream_ops.open?.(stream);\n },\n llseek() {\n throw new FS.ErrnoError(70);\n },\n },\n major: (dev) => dev >> 8,\n minor: (dev) => dev & 255,\n makedev: (ma, mi) => (ma << 8) | mi,\n registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops };\n },\n getDevice: (dev) => FS.devices[dev],\n getMounts(mount) {\n var mounts = [];\n var check = [mount];\n while (check.length) {\n var m = check.pop();\n mounts.push(m);\n check.push(...m.mounts);\n }\n return mounts;\n },\n syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate;\n populate = false;\n }\n FS.syncFSRequests++;\n if (FS.syncFSRequests > 1) {\n err(\n `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`\n );\n }\n var mounts = FS.getMounts(FS.root.mount);\n var completed = 0;\n function doCallback(errCode) {\n FS.syncFSRequests--;\n return callback(errCode);\n }\n function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true;\n return doCallback(errCode);\n }\n return;\n }\n if (++completed >= mounts.length) {\n doCallback(null);\n }\n }\n for (var mount of mounts) {\n if (mount.type.syncfs) {\n mount.type.syncfs(mount, populate, done);\n } else {\n done(null);\n }\n }\n },\n mount(type, opts, mountpoint) {\n var root = mountpoint === '/';\n var pseudo = !mountpoint;\n var node;\n if (root && FS.root) {\n throw new FS.ErrnoError(10);\n } else if (!root && !pseudo) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n mountpoint = lookup.path;\n node = lookup.node;\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n }\n var mount = { type, opts, mountpoint, mounts: [] };\n var mountRoot = type.mount(mount);\n mountRoot.mount = mount;\n mount.root = mountRoot;\n if (root) {\n FS.root = mountRoot;\n } else if (node) {\n node.mounted = mount;\n if (node.mount) {\n node.mount.mounts.push(mount);\n }\n }\n return mountRoot;\n },\n unmount(mountpoint) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28);\n }\n var node = lookup.node;\n var mount = node.mounted;\n var mounts = FS.getMounts(mount);\n for (var [hash, current] of Object.entries(FS.nameTable)) {\n while (current) {\n var next = current.name_next;\n if (mounts.includes(current.mount)) {\n FS.destroyNode(current);\n }\n current = next;\n }\n }\n node.mounted = null;\n var idx = node.mount.mounts.indexOf(mount);\n node.mount.mounts.splice(idx, 1);\n },\n lookup(parent, name) {\n return parent.node_ops.lookup(parent, name);\n },\n mknod(path, mode, dev) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n if (!name) {\n throw new FS.ErrnoError(28);\n }\n if (name === '.' || name === '..') {\n throw new FS.ErrnoError(20);\n }\n var errCode = FS.mayCreate(parent, name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.mknod(parent, name, mode, dev);\n },\n statfs(path) {\n return FS.statfsNode(FS.lookupPath(path, { follow: true }).node);\n },\n statfsStream(stream) {\n return FS.statfsNode(stream.node);\n },\n statfsNode(node) {\n var rtn = {\n bsize: 4096,\n frsize: 4096,\n blocks: 1e6,\n bfree: 5e5,\n bavail: 5e5,\n files: FS.nextInode,\n ffree: FS.nextInode - 1,\n fsid: 42,\n flags: 2,\n namelen: 255,\n };\n if (node.node_ops.statfs) {\n Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n }\n return rtn;\n },\n create(path, mode = 438) {\n mode &= 4095;\n mode |= 32768;\n return FS.mknod(path, mode, 0);\n },\n mkdir(path, mode = 511) {\n mode &= 511 | 512;\n mode |= 16384;\n return FS.mknod(path, mode, 0);\n },\n mkdirTree(path, mode) {\n var dirs = path.split('/');\n var d = '';\n for (var dir of dirs) {\n if (!dir) continue;\n if (d || PATH.isAbs(path)) d += '/';\n d += dir;\n try {\n FS.mkdir(d, mode);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n }\n },\n mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode;\n mode = 438;\n }\n mode |= 8192;\n return FS.mknod(path, mode, dev);\n },\n symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44);\n }\n var lookup = FS.lookupPath(newpath, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var newname = PATH.basename(newpath);\n var errCode = FS.mayCreate(parent, newname);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.symlink(parent, newname, oldpath);\n },\n rename(old_path, new_path) {\n var old_dirname = PATH.dirname(old_path);\n var new_dirname = PATH.dirname(new_path);\n var old_name = PATH.basename(old_path);\n var new_name = PATH.basename(new_path);\n var lookup, old_dir, new_dir;\n lookup = FS.lookupPath(old_path, { parent: true });\n old_dir = lookup.node;\n lookup = FS.lookupPath(new_path, { parent: true });\n new_dir = lookup.node;\n if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75);\n }\n var old_node = FS.lookupNode(old_dir, old_name);\n var relative = PATH_FS.relative(old_path, new_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28);\n }\n relative = PATH_FS.relative(new_path, old_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55);\n }\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (old_node === new_node) {\n return;\n }\n var isdir = FS.isDir(old_node.mode);\n var errCode = FS.mayDelete(old_dir, old_name, isdir);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n errCode = new_node\n ? FS.mayDelete(new_dir, new_name, isdir)\n : FS.mayCreate(new_dir, new_name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n throw new FS.ErrnoError(10);\n }\n if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n FS.hashRemoveNode(old_node);\n try {\n old_dir.node_ops.rename(old_node, new_dir, new_name);\n old_node.parent = new_dir;\n } catch (e) {\n throw e;\n } finally {\n FS.hashAddNode(old_node);\n }\n },\n rmdir(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, true);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.rmdir(parent, name);\n FS.destroyNode(node);\n },\n readdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var readdir = FS.checkOpExists(node.node_ops.readdir, 54);\n return readdir(node);\n },\n unlink(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, false);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.unlink(parent, name);\n FS.destroyNode(node);\n },\n readlink(path) {\n var lookup = FS.lookupPath(path);\n var link = lookup.node;\n if (!link) {\n throw new FS.ErrnoError(44);\n }\n if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28);\n }\n return link.node_ops.readlink(link);\n },\n stat(path, dontFollow) {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n var node = lookup.node;\n var getattr = FS.checkOpExists(node.node_ops.getattr, 63);\n return getattr(node);\n },\n fstat(fd) {\n var stream = FS.getStreamChecked(fd);\n var node = stream.node;\n var getattr = stream.stream_ops.getattr;\n var arg = getattr ? stream : node;\n getattr ??= node.node_ops.getattr;\n FS.checkOpExists(getattr, 63);\n return getattr(arg);\n },\n lstat(path) {\n return FS.stat(path, true);\n },\n doChmod(stream, node, mode, dontFollow) {\n FS.doSetAttr(stream, node, {\n mode: (mode & 4095) | (node.mode & ~4095),\n ctime: Date.now(),\n dontFollow,\n });\n },\n chmod(path, mode, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChmod(null, node, mode, dontFollow);\n },\n lchmod(path, mode) {\n FS.chmod(path, mode, true);\n },\n fchmod(fd, mode) {\n var stream = FS.getStreamChecked(fd);\n FS.doChmod(stream, stream.node, mode, false);\n },\n doChown(stream, node, dontFollow) {\n FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow });\n },\n chown(path, uid, gid, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChown(null, node, dontFollow);\n },\n lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true);\n },\n fchown(fd, uid, gid) {\n var stream = FS.getStreamChecked(fd);\n FS.doChown(stream, stream.node, false);\n },\n doTruncate(stream, node, len) {\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.nodePermissions(node, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() });\n },\n truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28);\n }\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: true });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doTruncate(null, node, len);\n },\n ftruncate(fd, len) {\n var stream = FS.getStreamChecked(fd);\n if (len < 0 || (stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28);\n }\n FS.doTruncate(stream, stream.node, len);\n },\n utime(path, atime, mtime) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var setattr = FS.checkOpExists(node.node_ops.setattr, 63);\n setattr(node, { atime, mtime });\n },\n open(path, flags, mode = 438) {\n if (path === '') {\n throw new FS.ErrnoError(44);\n }\n flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n if (flags & 64) {\n mode = (mode & 4095) | 32768;\n } else {\n mode = 0;\n }\n var node;\n var isDirPath;\n if (typeof path == 'object') {\n node = path;\n } else {\n isDirPath = path.endsWith('/');\n var lookup = FS.lookupPath(path, {\n follow: !(flags & 131072),\n noent_okay: true,\n });\n node = lookup.node;\n path = lookup.path;\n }\n var created = false;\n if (flags & 64) {\n if (node) {\n if (flags & 128) {\n throw new FS.ErrnoError(20);\n }\n } else if (isDirPath) {\n throw new FS.ErrnoError(31);\n } else {\n node = FS.mknod(path, mode | 511, 0);\n created = true;\n }\n }\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n if (FS.isChrdev(node.mode)) {\n flags &= ~512;\n }\n if (flags & 65536 && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n if (!created) {\n var errCode = FS.mayOpen(node, flags);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n if (flags & 512 && !created) {\n FS.truncate(node, 0);\n }\n flags &= ~(128 | 512 | 131072);\n var stream = FS.createStream({\n node,\n path: FS.getPath(node),\n flags,\n seekable: true,\n position: 0,\n stream_ops: node.stream_ops,\n ungotten: [],\n error: false,\n });\n if (stream.stream_ops.open) {\n stream.stream_ops.open(stream);\n }\n if (created) {\n FS.chmod(node, mode & 511);\n }\n if (Module['logReadFiles'] && !(flags & 1)) {\n if (!(path in FS.readFiles)) {\n FS.readFiles[path] = 1;\n }\n }\n return stream;\n },\n close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (stream.getdents) stream.getdents = null;\n try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream);\n }\n } catch (e) {\n throw e;\n } finally {\n FS.closeStream(stream.fd);\n }\n stream.fd = null;\n },\n isClosed(stream) {\n return stream.fd === null;\n },\n llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70);\n }\n if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28);\n }\n stream.position = stream.stream_ops.llseek(stream, offset, whence);\n stream.ungotten = [];\n return stream.position;\n },\n read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesRead = stream.stream_ops.read(\n stream,\n buffer,\n offset,\n length,\n position\n );\n if (!seeking) stream.position += bytesRead;\n return bytesRead;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28);\n }\n if (stream.seekable && stream.flags & 1024) {\n FS.llseek(stream, 0, 2);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesWritten = stream.stream_ops.write(\n stream,\n buffer,\n offset,\n length,\n position,\n canOwn\n );\n if (!seeking) stream.position += bytesWritten;\n return bytesWritten;\n },\n mmap(stream, length, position, prot, flags) {\n if (\n (prot & 2) !== 0 &&\n (flags & 2) === 0 &&\n (stream.flags & 2097155) !== 2\n ) {\n throw new FS.ErrnoError(2);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2);\n }\n if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43);\n }\n if (!length) {\n throw new FS.ErrnoError(28);\n }\n return stream.stream_ops.mmap(stream, length, position, prot, flags);\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0;\n }\n return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n },\n ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59);\n }\n return stream.stream_ops.ioctl(stream, cmd, arg);\n },\n readFile(path, opts = {}) {\n opts.flags = opts.flags || 0;\n opts.encoding = opts.encoding || 'binary';\n if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n abort(`Invalid encoding type \"${opts.encoding}\"`);\n }\n var stream = FS.open(path, opts.flags);\n var stat = FS.stat(path);\n var length = stat.size;\n var buf = new Uint8Array(length);\n FS.read(stream, buf, 0, length, 0);\n if (opts.encoding === 'utf8') {\n buf = UTF8ArrayToString(buf);\n }\n FS.close(stream);\n return buf;\n },\n writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577;\n var stream = FS.open(path, opts.flags, opts.mode);\n if (typeof data == 'string') {\n data = new Uint8Array(intArrayFromString(data, true));\n }\n if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n } else {\n abort('Unsupported data type');\n }\n FS.close(stream);\n },\n cwd: () => FS.currentPath,\n chdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n if (lookup.node === null) {\n throw new FS.ErrnoError(44);\n }\n if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54);\n }\n var errCode = FS.nodePermissions(lookup.node, 'x');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.currentPath = lookup.path;\n },\n createDefaultDirectories() {\n FS.mkdir('/tmp');\n FS.mkdir('/home');\n FS.mkdir('/home/web_user');\n },\n createDefaultDevices() {\n FS.mkdir('/dev');\n FS.registerDevice(FS.makedev(1, 3), {\n read: () => 0,\n write: (stream, buffer, offset, length, pos) => length,\n llseek: () => 0,\n });\n FS.mkdev('/dev/null', FS.makedev(1, 3));\n TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n FS.mkdev('/dev/tty', FS.makedev(5, 0));\n FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n var randomBuffer = new Uint8Array(1024),\n randomLeft = 0;\n var randomByte = () => {\n if (randomLeft === 0) {\n randomFill(randomBuffer);\n randomLeft = randomBuffer.byteLength;\n }\n return randomBuffer[--randomLeft];\n };\n FS.createDevice('/dev', 'random', randomByte);\n FS.createDevice('/dev', 'urandom', randomByte);\n FS.mkdir('/dev/shm');\n FS.mkdir('/dev/shm/tmp');\n },\n createSpecialDirectories() {\n FS.mkdir('/proc');\n var proc_self = FS.mkdir('/proc/self');\n FS.mkdir('/proc/self/fd');\n FS.mount(\n {\n mount() {\n var node = FS.createNode(proc_self, 'fd', 16895, 73);\n node.stream_ops = { llseek: MEMFS.stream_ops.llseek };\n node.node_ops = {\n lookup(parent, name) {\n var fd = +name;\n var stream = FS.getStreamChecked(fd);\n var ret = {\n parent: null,\n mount: { mountpoint: 'fake' },\n node_ops: { readlink: () => stream.path },\n id: fd + 1,\n };\n ret.parent = ret;\n return ret;\n },\n readdir() {\n return Array.from(FS.streams.entries())\n .filter(([k, v]) => v)\n .map(([k, v]) => k.toString());\n },\n };\n return node;\n },\n },\n {},\n '/proc/self/fd'\n );\n },\n createStandardStreams(input, output, error) {\n if (input) {\n FS.createDevice('/dev', 'stdin', input);\n } else {\n FS.symlink('/dev/tty', '/dev/stdin');\n }\n if (output) {\n FS.createDevice('/dev', 'stdout', null, output);\n } else {\n FS.symlink('/dev/tty', '/dev/stdout');\n }\n if (error) {\n FS.createDevice('/dev', 'stderr', null, error);\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr');\n }\n var stdin = FS.open('/dev/stdin', 0);\n var stdout = FS.open('/dev/stdout', 1);\n var stderr = FS.open('/dev/stderr', 1);\n },\n staticInit() {\n FS.nameTable = new Array(4096);\n FS.mount(MEMFS, {}, '/');\n FS.createDefaultDirectories();\n FS.createDefaultDevices();\n FS.createSpecialDirectories();\n FS.filesystems = { MEMFS };\n },\n init(input, output, error) {\n FS.initialized = true;\n input ??= Module['stdin'];\n output ??= Module['stdout'];\n error ??= Module['stderr'];\n FS.createStandardStreams(input, output, error);\n },\n quit() {\n FS.initialized = false;\n for (var stream of FS.streams) {\n if (stream) {\n FS.close(stream);\n }\n }\n },\n findObject(path, dontResolveLastLink) {\n var ret = FS.analyzePath(path, dontResolveLastLink);\n if (!ret.exists) {\n return null;\n }\n return ret.object;\n },\n analyzePath(path, dontResolveLastLink) {\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n path = lookup.path;\n } catch (e) {}\n var ret = {\n isRoot: false,\n exists: false,\n error: 0,\n name: null,\n path: null,\n object: null,\n parentExists: false,\n parentPath: null,\n parentObject: null,\n };\n try {\n var lookup = FS.lookupPath(path, { parent: true });\n ret.parentExists = true;\n ret.parentPath = lookup.path;\n ret.parentObject = lookup.node;\n ret.name = PATH.basename(path);\n lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n ret.exists = true;\n ret.path = lookup.path;\n ret.object = lookup.node;\n ret.name = lookup.node.name;\n ret.isRoot = lookup.path === '/';\n } catch (e) {\n ret.error = e.errno;\n }\n return ret;\n },\n createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n var parts = path.split('/').reverse();\n while (parts.length) {\n var part = parts.pop();\n if (!part) continue;\n var current = PATH.join2(parent, part);\n try {\n FS.mkdir(current);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n parent = current;\n }\n return current;\n },\n createFile(parent, name, properties, canRead, canWrite) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(canRead, canWrite);\n return FS.create(path, mode);\n },\n createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n var path = name;\n if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n path = name ? PATH.join2(parent, name) : parent;\n }\n var mode = FS_getMode(canRead, canWrite);\n var node = FS.create(path, mode);\n if (data) {\n if (typeof data == 'string') {\n var arr = new Array(data.length);\n for (var i = 0, len = data.length; i < len; ++i)\n arr[i] = data.charCodeAt(i);\n data = arr;\n }\n FS.chmod(node, mode | 146);\n var stream = FS.open(node, 577);\n FS.write(stream, data, 0, data.length, 0, canOwn);\n FS.close(stream);\n FS.chmod(node, mode);\n }\n },\n createDevice(parent, name, input, output) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(!!input, !!output);\n FS.createDevice.major ??= 64;\n var dev = FS.makedev(FS.createDevice.major++, 0);\n FS.registerDevice(dev, {\n open(stream) {\n stream.seekable = false;\n },\n close(stream) {\n if (output?.buffer?.length) {\n output(10);\n }\n },\n read(stream, buffer, offset, length, pos) {\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = input();\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset + i]);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n });\n return FS.mkdev(path, mode, dev);\n },\n forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n if (globalThis.XMLHttpRequest) {\n abort(\n '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.'\n );\n } else {\n try {\n obj.contents = readBinary(obj.url);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n },\n createLazyFile(parent, name, url, canRead, canWrite) {\n class LazyUint8Array {\n lengthKnown = false;\n chunks = [];\n get(idx) {\n if (idx > this.length - 1 || idx < 0) {\n return undefined;\n }\n var chunkOffset = idx % this.chunkSize;\n var chunkNum = (idx / this.chunkSize) | 0;\n return this.getter(chunkNum)[chunkOffset];\n }\n setDataGetter(getter) {\n this.getter = getter;\n }\n cacheLength() {\n var xhr = new XMLHttpRequest();\n xhr.open('HEAD', url, false);\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n var datalength = Number(xhr.getResponseHeader('Content-length'));\n var header;\n var hasByteServing =\n (header = xhr.getResponseHeader('Accept-Ranges')) &&\n header === 'bytes';\n var usesGzip =\n (header = xhr.getResponseHeader('Content-Encoding')) &&\n header === 'gzip';\n var chunkSize = 1024 * 1024;\n if (!hasByteServing) chunkSize = datalength;\n var doXHR = (from, to) => {\n if (from > to)\n abort(\n 'invalid range (' + from + ', ' + to + ') or no bytes requested!'\n );\n if (to > datalength - 1)\n abort('only ' + datalength + ' bytes available! programmer error!');\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n if (datalength !== chunkSize)\n xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n xhr.responseType = 'arraybuffer';\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n }\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n if (xhr.response !== undefined) {\n return new Uint8Array(xhr.response || []);\n }\n return intArrayFromString(xhr.responseText || '', true);\n };\n var lazyArray = this;\n lazyArray.setDataGetter((chunkNum) => {\n var start = chunkNum * chunkSize;\n var end = (chunkNum + 1) * chunkSize - 1;\n end = Math.min(end, datalength - 1);\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end);\n }\n if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n abort('doXHR failed!');\n return lazyArray.chunks[chunkNum];\n });\n if (usesGzip || !datalength) {\n chunkSize = datalength = 1;\n datalength = this.getter(0).length;\n chunkSize = datalength;\n out(\n 'LazyFiles on gzip forces download of the whole file when length is accessed'\n );\n }\n this._length = datalength;\n this._chunkSize = chunkSize;\n this.lengthKnown = true;\n }\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._length;\n }\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._chunkSize;\n }\n }\n if (globalThis.XMLHttpRequest) {\n if (!ENVIRONMENT_IS_WORKER)\n abort(\n 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'\n );\n var lazyArray = new LazyUint8Array();\n var properties = { isDevice: false, contents: lazyArray };\n } else {\n var properties = { isDevice: false, url };\n }\n var node = FS.createFile(parent, name, properties, canRead, canWrite);\n if (properties.contents) {\n node.contents = properties.contents;\n } else if (properties.url) {\n node.contents = null;\n node.url = properties.url;\n }\n Object.defineProperties(node, {\n usedBytes: {\n get: function () {\n return this.contents.length;\n },\n },\n });\n var stream_ops = {};\n for (const [key, fn] of Object.entries(node.stream_ops)) {\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node);\n return fn(...args);\n };\n }\n function writeChunks(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= contents.length) return 0;\n var size = Math.min(contents.length - position, length);\n if (contents.slice) {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i];\n }\n } else {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents.get(position + i);\n }\n }\n return size;\n }\n stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node);\n return writeChunks(stream, buffer, offset, length, position);\n };\n stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node);\n var ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n writeChunks(stream, HEAP8, ptr, length, position);\n return { ptr, allocated: true };\n };\n node.stream_ops = stream_ops;\n return node;\n },\n};\nvar UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {\n ptr >>>= 0;\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : '';\n};\nvar SYSCALLS = {\n DEFAULT_POLLMASK: 5,\n calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path;\n }\n var dir;\n if (dirfd === -100) {\n dir = FS.cwd();\n } else {\n var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n dir = dirstream.path;\n }\n if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44);\n }\n return dir;\n }\n return dir + '/' + path;\n },\n writeStat(buf, stat) {\n HEAPU32[(buf >>> 2) >>> 0] = stat.dev;\n HEAPU32[((buf + 4) >>> 2) >>> 0] = stat.mode;\n HEAPU32[((buf + 8) >>> 2) >>> 0] = stat.nlink;\n HEAPU32[((buf + 12) >>> 2) >>> 0] = stat.uid;\n HEAPU32[((buf + 16) >>> 2) >>> 0] = stat.gid;\n HEAPU32[((buf + 20) >>> 2) >>> 0] = stat.rdev;\n HEAP64[((buf + 24) >>> 3) >>> 0] = BigInt(stat.size);\n HEAP32[((buf + 32) >>> 2) >>> 0] = 4096;\n HEAP32[((buf + 36) >>> 2) >>> 0] = stat.blocks;\n var atime = stat.atime.getTime();\n var mtime = stat.mtime.getTime();\n var ctime = stat.ctime.getTime();\n HEAP64[((buf + 40) >>> 3) >>> 0] = BigInt(Math.floor(atime / 1e3));\n HEAPU32[((buf + 48) >>> 2) >>> 0] = (atime % 1e3) * 1e3 * 1e3;\n HEAP64[((buf + 56) >>> 3) >>> 0] = BigInt(Math.floor(mtime / 1e3));\n HEAPU32[((buf + 64) >>> 2) >>> 0] = (mtime % 1e3) * 1e3 * 1e3;\n HEAP64[((buf + 72) >>> 3) >>> 0] = BigInt(Math.floor(ctime / 1e3));\n HEAPU32[((buf + 80) >>> 2) >>> 0] = (ctime % 1e3) * 1e3 * 1e3;\n HEAP64[((buf + 88) >>> 3) >>> 0] = BigInt(stat.ino);\n return 0;\n },\n writeStatFs(buf, stats) {\n HEAPU32[((buf + 4) >>> 2) >>> 0] = stats.bsize;\n HEAPU32[((buf + 60) >>> 2) >>> 0] = stats.bsize;\n HEAP64[((buf + 8) >>> 3) >>> 0] = BigInt(stats.blocks);\n HEAP64[((buf + 16) >>> 3) >>> 0] = BigInt(stats.bfree);\n HEAP64[((buf + 24) >>> 3) >>> 0] = BigInt(stats.bavail);\n HEAP64[((buf + 32) >>> 3) >>> 0] = BigInt(stats.files);\n HEAP64[((buf + 40) >>> 3) >>> 0] = BigInt(stats.ffree);\n HEAPU32[((buf + 48) >>> 2) >>> 0] = stats.fsid;\n HEAPU32[((buf + 64) >>> 2) >>> 0] = stats.flags;\n HEAPU32[((buf + 56) >>> 2) >>> 0] = stats.namelen;\n },\n doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (flags & 2) {\n return 0;\n }\n var buffer = HEAPU8.slice(addr, addr + len);\n FS.msync(stream, buffer, offset, len, flags);\n },\n getStreamFromFD(fd) {\n var stream = FS.getStreamChecked(fd);\n return stream;\n },\n varargs: undefined,\n getStr(ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n};\nvar INT53_MAX = 9007199254740992;\nvar INT53_MIN = -9007199254740992;\nvar bigintToI53Checked = (num) =>\n num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\nfunction ___syscall_fcntl64(fd, cmd, varargs) {\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (cmd) {\n case 0: {\n var arg = syscallGetVarargI();\n if (arg < 0) {\n return -28;\n }\n while (FS.streams[arg]) {\n arg++;\n }\n var newStream;\n newStream = FS.dupStream(stream, arg);\n return newStream.fd;\n }\n case 1:\n case 2:\n return 0;\n case 3:\n return stream.flags;\n case 4: {\n var arg = syscallGetVarargI();\n stream.flags |= arg;\n return 0;\n }\n case 12: {\n var arg = syscallGetVarargP();\n var offset = 0;\n HEAP16[((arg + offset) >>> 1) >>> 0] = 2;\n return 0;\n }\n case 13:\n case 14:\n return 0;\n }\n return -28;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_ioctl(fd, op, varargs) {\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (op) {\n case 21509: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21505: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcgets) {\n var termios = stream.tty.ops.ioctl_tcgets(stream);\n var argp = syscallGetVarargP();\n HEAP32[(argp >>> 2) >>> 0] = termios.c_iflag || 0;\n HEAP32[((argp + 4) >>> 2) >>> 0] = termios.c_oflag || 0;\n HEAP32[((argp + 8) >>> 2) >>> 0] = termios.c_cflag || 0;\n HEAP32[((argp + 12) >>> 2) >>> 0] = termios.c_lflag || 0;\n for (var i = 0; i < 32; i++) {\n HEAP8[(argp + i + 17) >>> 0] = termios.c_cc[i] || 0;\n }\n return 0;\n }\n return 0;\n }\n case 21510:\n case 21511:\n case 21512: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21506:\n case 21507:\n case 21508: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP();\n var c_iflag = HEAP32[(argp >>> 2) >>> 0];\n var c_oflag = HEAP32[((argp + 4) >>> 2) >>> 0];\n var c_cflag = HEAP32[((argp + 8) >>> 2) >>> 0];\n var c_lflag = HEAP32[((argp + 12) >>> 2) >>> 0];\n var c_cc = [];\n for (var i = 0; i < 32; i++) {\n c_cc.push(HEAP8[(argp + i + 17) >>> 0]);\n }\n return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n c_iflag,\n c_oflag,\n c_cflag,\n c_lflag,\n c_cc,\n });\n }\n return 0;\n }\n case 21519: {\n if (!stream.tty) return -59;\n var argp = syscallGetVarargP();\n HEAP32[(argp >>> 2) >>> 0] = 0;\n return 0;\n }\n case 21520: {\n if (!stream.tty) return -59;\n return -28;\n }\n case 21537:\n case 21531: {\n var argp = syscallGetVarargP();\n return FS.ioctl(stream, op, argp);\n }\n case 21523: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tiocgwinsz) {\n var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n var argp = syscallGetVarargP();\n HEAP16[(argp >>> 1) >>> 0] = winsize[0];\n HEAP16[((argp + 2) >>> 1) >>> 0] = winsize[1];\n }\n return 0;\n }\n case 21524: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21515: {\n if (!stream.tty) return -59;\n return 0;\n }\n default:\n return -28;\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_openat(dirfd, path, flags, varargs) {\n path >>>= 0;\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n var mode = varargs ? syscallGetVarargI() : 0;\n return FS.open(path, flags, mode).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar __abort_js = () => abort('');\nfunction __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n len >>>= 0;\n offset = bigintToI53Checked(offset);\n allocated >>>= 0;\n addr >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var res = FS.mmap(stream, len, offset, prot, flags);\n var ptr = res.ptr;\n HEAP32[(allocated >>> 2) >>> 0] = res.allocated;\n HEAPU32[(addr >>> 2) >>> 0] = ptr;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction __munmap_js(addr, len, prot, flags, fd, offset) {\n addr >>>= 0;\n len >>>= 0;\n offset = bigintToI53Checked(offset);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset);\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar stringToUTF8 = (str, outPtr, maxBytesToWrite) =>\n stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\nvar _emscripten_get_now = () => performance.now();\nvar _emscripten_date_now = () => Date.now();\nvar nowIsMonotonic = 1;\nvar checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;\nfunction _clock_time_get(clk_id, ignored_precision, ptime) {\n ignored_precision = bigintToI53Checked(ignored_precision);\n ptime >>>= 0;\n if (!checkWasiClock(clk_id)) {\n return 28;\n }\n var now;\n if (clk_id === 0) {\n now = _emscripten_date_now();\n } else if (nowIsMonotonic) {\n now = _emscripten_get_now();\n } else {\n return 52;\n }\n var nsec = Math.round(now * 1e3 * 1e3);\n HEAP64[(ptime >>> 3) >>> 0] = BigInt(nsec);\n return 0;\n}\nvar getHeapMax = () => 4294901760;\nfunction _emscripten_get_heap_max() {\n return getHeapMax();\n}\nvar growMemory = (size) => {\n var oldHeapSize = wasmMemory.buffer.byteLength;\n var pages = ((size - oldHeapSize + 65535) / 65536) | 0;\n try {\n wasmMemory.grow(pages);\n updateMemoryViews();\n return 1;\n } catch (e) {}\n};\nfunction _emscripten_resize_heap(requestedSize) {\n requestedSize >>>= 0;\n var oldSize = HEAPU8.length;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n var newSize = Math.min(\n maxHeapSize,\n alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)\n );\n var replacement = growMemory(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n}\nvar ENV = {};\nvar getExecutableName = () => thisProgram || './this.program';\nvar getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n var lang =\n ((typeof navigator == 'object' && navigator.language) || 'C').replace(\n '-',\n '_'\n ) + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(`${x}=${env[x]}`);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n};\nfunction _environ_get(__environ, environ_buf) {\n __environ >>>= 0;\n environ_buf >>>= 0;\n var bufSize = 0;\n var envp = 0;\n for (var string of getEnvStrings()) {\n var ptr = environ_buf + bufSize;\n HEAPU32[((__environ + envp) >>> 2) >>> 0] = ptr;\n bufSize += stringToUTF8(string, ptr, Infinity) + 1;\n envp += 4;\n }\n return 0;\n}\nfunction _environ_sizes_get(penviron_count, penviron_buf_size) {\n penviron_count >>>= 0;\n penviron_buf_size >>>= 0;\n var strings = getEnvStrings();\n HEAPU32[(penviron_count >>> 2) >>> 0] = strings.length;\n var bufSize = 0;\n for (var string of strings) {\n bufSize += lengthBytesUTF8(string) + 1;\n }\n HEAPU32[(penviron_buf_size >>> 2) >>> 0] = bufSize;\n return 0;\n}\nfunction _fd_close(fd) {\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.close(stream);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doReadv = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[(iov >>> 2) >>> 0];\n var len = HEAPU32[((iov + 4) >>> 2) >>> 0];\n iov += 8;\n var curr = FS.read(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) break;\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_read(fd, iov, iovcnt, pnum) {\n iov >>>= 0;\n iovcnt >>>= 0;\n pnum >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doReadv(stream, iov, iovcnt);\n HEAPU32[(pnum >>> 2) >>> 0] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _fd_seek(fd, offset, whence, newOffset) {\n offset = bigintToI53Checked(offset);\n newOffset >>>= 0;\n try {\n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.llseek(stream, offset, whence);\n HEAP64[(newOffset >>> 3) >>> 0] = BigInt(stream.position);\n if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doWritev = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[(iov >>> 2) >>> 0];\n var len = HEAPU32[((iov + 4) >>> 2) >>> 0];\n iov += 8;\n var curr = FS.write(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) {\n break;\n }\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_write(fd, iov, iovcnt, pnum) {\n iov >>>= 0;\n iovcnt >>>= 0;\n pnum >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doWritev(stream, iov, iovcnt);\n HEAPU32[(pnum >>> 2) >>> 0] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _random_get(buffer, size) {\n buffer >>>= 0;\n size >>>= 0;\n try {\n randomFill(HEAPU8.subarray(buffer >>> 0, (buffer + size) >>> 0));\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar runtimeKeepaliveCounter = 0;\nvar keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;\nvar _proc_exit = (code) => {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n Module['onExit']?.(code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n};\nvar exitJS = (status, implicit) => {\n EXITSTATUS = status;\n _proc_exit(status);\n};\nvar handleException = (e) => {\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS;\n }\n quit_(1, e);\n};\nvar getCFunc = (ident) => {\n var func = Module['_' + ident];\n return func;\n};\nvar writeArrayToMemory = (array, buffer) => {\n HEAP8.set(array, buffer >>> 0);\n};\nvar stackAlloc = (sz) => __emscripten_stack_alloc(sz);\nvar stringToUTF8OnStack = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n};\nvar stackSave = () => _emscripten_stack_get_current();\nvar stackRestore = (val) => __emscripten_stack_restore(val);\nvar ccall = (ident, returnType, argTypes, args, opts) => {\n var toC = {\n string: (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str);\n }\n return ret;\n },\n array: (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return ret;\n },\n };\n function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(ret);\n }\n if (returnType === 'pointer') return ret >>> 0;\n if (returnType === 'boolean') return Boolean(ret);\n return ret;\n }\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var ret = func(...cArgs);\n function onDone(ret) {\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n ret = onDone(ret);\n return ret;\n};\nvar cwrap = (ident, returnType, argTypes, opts) => {\n var numericArgs =\n !argTypes ||\n argTypes.every((type) => type === 'number' || type === 'boolean');\n var numericRet = returnType !== 'string';\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return (...args) => ccall(ident, returnType, argTypes, args, opts);\n};\nvar FS_createPath = (...args) => FS.createPath(...args);\nvar FS_unlink = (...args) => FS.unlink(...args);\nvar FS_createLazyFile = (...args) => FS.createLazyFile(...args);\nvar FS_createDevice = (...args) => FS.createDevice(...args);\nFS.createPreloadedFile = FS_createPreloadedFile;\nFS.preloadFile = FS_preloadFile;\nFS.staticInit();\n{\n initMemory();\n if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];\n if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins'];\n if (Module['print']) out = Module['print'];\n if (Module['printErr']) err = Module['printErr'];\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].shift()();\n }\n }\n}\nModule['mmapAlloc'] = mmapAlloc;\nModule['addRunDependency'] = addRunDependency;\nModule['removeRunDependency'] = removeRunDependency;\nModule['ccall'] = ccall;\nModule['cwrap'] = cwrap;\nModule['FS_preloadFile'] = FS_preloadFile;\nModule['FS_unlink'] = FS_unlink;\nModule['FS_createPath'] = FS_createPath;\nModule['FS_createDevice'] = FS_createDevice;\nModule['FS'] = FS;\nModule['FS_createDataFile'] = FS_createDataFile;\nModule['FS_createLazyFile'] = FS_createLazyFile;\nModule['MEMFS'] = MEMFS;\nvar _wllama_malloc,\n _wllama_start,\n _wllama_action,\n _wllama_exit,\n _wllama_debug,\n _main,\n _emscripten_builtin_memalign,\n ___trap,\n __emscripten_stack_restore,\n __emscripten_stack_alloc,\n _emscripten_stack_get_current,\n __indirect_function_table;\nfunction assignWasmExports(wasmExports) {\n _wllama_malloc = Module['_wllama_malloc'] = wasmExports['t'];\n _wllama_start = Module['_wllama_start'] = wasmExports['u'];\n _wllama_action = Module['_wllama_action'] = wasmExports['v'];\n _wllama_exit = Module['_wllama_exit'] = wasmExports['w'];\n _wllama_debug = Module['_wllama_debug'] = wasmExports['x'];\n _main = Module['_main'] = wasmExports['y'];\n _emscripten_builtin_memalign = wasmExports['z'];\n ___trap = wasmExports['A'];\n __emscripten_stack_restore = wasmExports['B'];\n __emscripten_stack_alloc = wasmExports['C'];\n _emscripten_stack_get_current = wasmExports['D'];\n __indirect_function_table = wasmExports['__indirect_function_table'];\n}\nvar wasmImports = {\n e: ___syscall_fcntl64,\n g: ___syscall_ioctl,\n h: ___syscall_openat,\n r: __abort_js,\n m: __mmap_js,\n n: __munmap_js,\n q: _clock_time_get,\n i: _emscripten_date_now,\n l: _emscripten_get_heap_max,\n k: _emscripten_resize_heap,\n p: _environ_get,\n f: _environ_sizes_get,\n b: _fd_close,\n c: _fd_read,\n o: _fd_seek,\n d: _fd_write,\n a: wasmMemory,\n j: _random_get,\n};\nfunction applySignatureConversions(wasmExports) {\n wasmExports = Object.assign({}, wasmExports);\n var makeWrapper_ppp = (f) => (a0, a1) => f(a0, a1) >>> 0;\n var makeWrapper_pp = (f) => (a0) => f(a0) >>> 0;\n var makeWrapper_p = (f) => () => f() >>> 0;\n wasmExports['z'] = makeWrapper_ppp(wasmExports['z']);\n wasmExports['C'] = makeWrapper_pp(wasmExports['C']);\n wasmExports['D'] = makeWrapper_p(wasmExports['D']);\n return wasmExports;\n}\nfunction callMain() {\n var entryFunction = _main;\n var argc = 0;\n var argv = 0;\n try {\n var ret = entryFunction(argc, argv);\n exitJS(ret, true);\n return ret;\n } catch (e) {\n return handleException(e);\n }\n}\nfunction run() {\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n preRun();\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n function doRun() {\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n preMain();\n Module['onRuntimeInitialized']?.();\n var noInitialRun = Module['noInitialRun'] || false;\n if (!noInitialRun) callMain();\n postRun();\n }\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(() => {\n setTimeout(() => Module['setStatus'](''), 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n}\nvar wasmExports;\ncreateWasm();\nrun();\n"; export declare const WLLAMA_ASYNCIFY_MULTI_THREAD_CODE = "var Module = typeof Module != 'undefined' ? Module : {};\nvar ENVIRONMENT_IS_WEB = !!globalThis.window;\nvar ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;\nvar ENVIRONMENT_IS_NODE =\n globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';\nvar ENVIRONMENT_IS_PTHREAD =\n ENVIRONMENT_IS_WORKER && self.name?.startsWith('em-pthread');\nif (ENVIRONMENT_IS_NODE) {\n var worker_threads = require('worker_threads');\n global.Worker = worker_threads.Worker;\n ENVIRONMENT_IS_WORKER = !worker_threads.isMainThread;\n ENVIRONMENT_IS_PTHREAD =\n ENVIRONMENT_IS_WORKER && worker_threads['workerData'] == 'em-pthread';\n}\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\nvar _scriptName = globalThis.document?.currentScript?.src;\nif (typeof __filename != 'undefined') {\n _scriptName = __filename;\n} else if (ENVIRONMENT_IS_WORKER) {\n _scriptName = self.location.href;\n}\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\nvar readAsync, readBinary;\nif (ENVIRONMENT_IS_NODE) {\n var fs = require('fs');\n scriptDirectory = __dirname + '/';\n readBinary = (filename) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename);\n return ret;\n };\n readAsync = async (filename, binary = true) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');\n return ret;\n };\n if (process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/');\n }\n arguments_ = process.argv.slice(2);\n if (typeof module != 'undefined') {\n module['exports'] = Module;\n }\n quit_ = (status, toThrow) => {\n process.exitCode = status;\n throw toThrow;\n };\n} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n try {\n scriptDirectory = new URL('.', _scriptName).href;\n } catch {}\n if (!ENVIRONMENT_IS_NODE) {\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = async (url) => {\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n resolve(xhr.response);\n return;\n }\n reject(xhr.status);\n };\n xhr.onerror = reject;\n xhr.send(null);\n });\n }\n var response = await fetch(url, { credentials: 'same-origin' });\n if (response.ok) {\n return response.arrayBuffer();\n }\n throw new Error(response.status + ' : ' + response.url);\n };\n }\n} else {\n}\nvar defaultPrint = console.log.bind(console);\nvar defaultPrintErr = console.error.bind(console);\nif (ENVIRONMENT_IS_NODE) {\n var utils = require('util');\n var stringify = (a) => (typeof a == 'object' ? utils.inspect(a) : a);\n defaultPrint = (...args) =>\n fs.writeSync(1, args.map(stringify).join(' ') + '\\n');\n defaultPrintErr = (...args) =>\n fs.writeSync(2, args.map(stringify).join(' ') + '\\n');\n}\nvar out = defaultPrint;\nvar err = defaultPrintErr;\nvar wasmBinary;\nvar wasmModule;\nvar ABORT = false;\nvar EXITSTATUS;\nfunction assert(condition, text) {\n if (!condition) {\n abort(text);\n }\n}\nvar isFileURI = (filename) => filename.startsWith('file://');\nfunction growMemViews() {\n if (wasmMemory.buffer != HEAP8.buffer) {\n updateMemoryViews();\n }\n}\nif (ENVIRONMENT_IS_NODE && ENVIRONMENT_IS_PTHREAD) {\n var parentPort = worker_threads['parentPort'];\n parentPort.on('message', (msg) => global.onmessage?.({ data: msg }));\n Object.assign(globalThis, {\n self: global,\n postMessage: (msg) => parentPort['postMessage'](msg),\n });\n process.on('uncaughtException', (err) => {\n postMessage({ cmd: 'uncaughtException', error: err });\n process.exit(1);\n });\n}\nvar startWorker;\nif (ENVIRONMENT_IS_PTHREAD) {\n var initializedJS = false;\n self.onunhandledrejection = (e) => {\n throw e.reason || e;\n };\n function handleMessage(e) {\n try {\n var msgData = e['data'];\n var cmd = msgData.cmd;\n if (cmd === 'load') {\n let messageQueue = [];\n self.onmessage = (e) => messageQueue.push(e);\n startWorker = () => {\n postMessage({ cmd: 'loaded' });\n for (let msg of messageQueue) {\n handleMessage(msg);\n }\n self.onmessage = handleMessage;\n };\n for (const handler of msgData.handlers) {\n if (!Module[handler] || Module[handler].proxy) {\n Module[handler] = (...args) => {\n postMessage({ cmd: 'callHandler', handler, args });\n };\n if (handler == 'print') out = Module[handler];\n if (handler == 'printErr') err = Module[handler];\n }\n }\n wasmMemory = msgData.wasmMemory;\n updateMemoryViews();\n wasmModule = msgData.wasmModule;\n createWasm();\n run();\n } else if (cmd === 'run') {\n establishStackSpace(msgData.pthread_ptr);\n __emscripten_thread_init(msgData.pthread_ptr, 0, 0, 1, 0, 0);\n PThread.threadInitTLS();\n __emscripten_thread_mailbox_await(msgData.pthread_ptr);\n if (!initializedJS) {\n initializedJS = true;\n }\n try {\n invokeEntryPoint(msgData.start_routine, msgData.arg);\n } catch (ex) {\n if (ex != 'unwind') {\n throw ex;\n }\n }\n } else if (msgData.target === 'setimmediate') {\n } else if (cmd === 'checkMailbox') {\n if (initializedJS) {\n checkMailbox();\n }\n } else if (cmd) {\n err(`worker: received unknown command ${cmd}`);\n err(msgData);\n }\n } catch (ex) {\n __emscripten_thread_crashed();\n throw ex;\n }\n }\n self.onmessage = handleMessage;\n}\nvar HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\nvar HEAP64, HEAPU64;\nvar runtimeInitialized = false;\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n HEAP8 = new Int8Array(b);\n HEAP16 = new Int16Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n HEAPU16 = new Uint16Array(b);\n HEAP32 = new Int32Array(b);\n HEAPU32 = new Uint32Array(b);\n HEAPF32 = new Float32Array(b);\n HEAPF64 = new Float64Array(b);\n HEAP64 = new BigInt64Array(b);\n HEAPU64 = new BigUint64Array(b);\n}\nfunction initMemory() {\n if (ENVIRONMENT_IS_PTHREAD) {\n return;\n }\n if (Module['wasmMemory']) {\n wasmMemory = Module['wasmMemory'];\n } else {\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728;\n wasmMemory = new WebAssembly.Memory({\n initial: INITIAL_MEMORY / 65536,\n maximum: 65536,\n shared: true,\n });\n }\n updateMemoryViews();\n}\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(onPreRuns);\n}\nfunction initRuntime() {\n runtimeInitialized = true;\n if (ENVIRONMENT_IS_PTHREAD) return startWorker();\n if (!Module['noFSInit'] && !FS.initialized) FS.init();\n TTY.init();\n wasmExports['Yb']();\n FS.ignorePermissions = false;\n}\nfunction preMain() {}\nfunction postRun() {\n if (ENVIRONMENT_IS_PTHREAD) {\n return;\n }\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(onPostRuns);\n}\nfunction abort(what) {\n Module['onAbort']?.(what);\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n what += '. Build with -sASSERTIONS for more info.';\n var e = new WebAssembly.RuntimeError(what);\n throw e;\n}\nvar wasmBinaryFile;\nfunction findWasmBinary() {\n return locateFile('wllama.wasm');\n}\nfunction getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n}\nasync function getWasmBinary(binaryFile) {\n if (!wasmBinary) {\n try {\n var response = await readAsync(binaryFile);\n return new Uint8Array(response);\n } catch {}\n }\n return getBinarySync(binaryFile);\n}\nasync function instantiateArrayBuffer(binaryFile, imports) {\n try {\n var binary = await getWasmBinary(binaryFile);\n var instance = await WebAssembly.instantiate(binary, imports);\n return instance;\n } catch (reason) {\n err(`failed to asynchronously prepare wasm: ${reason}`);\n abort(reason);\n }\n}\nasync function instantiateAsync(binary, binaryFile, imports) {\n if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {\n try {\n var response = fetch(binaryFile, { credentials: 'same-origin' });\n var instantiationResult = await WebAssembly.instantiateStreaming(\n response,\n imports\n );\n return instantiationResult;\n } catch (reason) {\n err(`wasm streaming compile failed: ${reason}`);\n err('falling back to ArrayBuffer instantiation');\n }\n }\n return instantiateArrayBuffer(binaryFile, imports);\n}\nfunction getWasmImports() {\n assignWasmImports();\n var imports = { a: wasmImports };\n return imports;\n}\nasync function createWasm() {\n function receiveInstance(instance, module) {\n wasmExports = instance.exports;\n wasmExports = Asyncify.instrumentWasmExports(wasmExports);\n wasmExports = applySignatureConversions(wasmExports);\n registerTLSInit(wasmExports['Ic']);\n assignWasmExports(wasmExports);\n wasmModule = module;\n removeRunDependency('wasm-instantiate');\n return wasmExports;\n }\n addRunDependency('wasm-instantiate');\n function receiveInstantiationResult(result) {\n return receiveInstance(result['instance'], result['module']);\n }\n var info = getWasmImports();\n if (Module['instantiateWasm']) {\n return new Promise((resolve, reject) => {\n Module['instantiateWasm'](info, (inst, mod) => {\n resolve(receiveInstance(inst, mod));\n });\n });\n }\n if (ENVIRONMENT_IS_PTHREAD) {\n var instance = new WebAssembly.Instance(wasmModule, getWasmImports());\n return receiveInstance(instance, wasmModule);\n }\n wasmBinaryFile ??= findWasmBinary();\n var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);\n var exports = receiveInstantiationResult(result);\n return exports;\n}\nclass ExitStatus {\n name = 'ExitStatus';\n constructor(status) {\n this.message = `Program terminated with exit(${status})`;\n this.status = status;\n }\n}\nvar terminateWorker = (worker) => {\n worker.terminate();\n worker.onmessage = (e) => {};\n};\nvar cleanupThread = (pthread_ptr) => {\n var worker = PThread.pthreads[pthread_ptr];\n PThread.returnWorkerToPool(worker);\n};\nvar callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n};\nvar onPreRuns = [];\nvar addOnPreRun = (cb) => onPreRuns.push(cb);\nvar runDependencies = 0;\nvar dependenciesFulfilled = null;\nvar removeRunDependency = (id) => {\n runDependencies--;\n Module['monitorRunDependencies']?.(runDependencies);\n if (runDependencies == 0) {\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n};\nvar addRunDependency = (id) => {\n runDependencies++;\n Module['monitorRunDependencies']?.(runDependencies);\n};\nvar spawnThread = (threadParams) => {\n var worker = PThread.getNewWorker();\n if (!worker) {\n return 6;\n }\n PThread.runningWorkers.push(worker);\n PThread.pthreads[threadParams.pthread_ptr] = worker;\n worker.pthread_ptr = threadParams.pthread_ptr;\n var msg = {\n cmd: 'run',\n start_routine: threadParams.startRoutine,\n arg: threadParams.arg,\n pthread_ptr: threadParams.pthread_ptr,\n };\n if (ENVIRONMENT_IS_NODE) {\n worker.unref();\n }\n worker.postMessage(msg, threadParams.transferList);\n return 0;\n};\nvar runtimeKeepaliveCounter = 0;\nvar keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;\nvar stackSave = () => _emscripten_stack_get_current();\nvar stackRestore = (val) => __emscripten_stack_restore(val);\nvar stackAlloc = (sz) => __emscripten_stack_alloc(sz);\nvar proxyToMainThread = (funcIndex, emAsmAddr, sync, ...callArgs) => {\n var serializedNumCallArgs = callArgs.length * 2;\n var sp = stackSave();\n var args = stackAlloc(serializedNumCallArgs * 8);\n var b = args >>> 3;\n for (var i = 0; i < callArgs.length; i++) {\n var arg = callArgs[i];\n if (typeof arg == 'bigint') {\n (growMemViews(), HEAP64)[(b + 2 * i) >>> 0] = 1n;\n (growMemViews(), HEAP64)[(b + 2 * i + 1) >>> 0] = arg;\n } else {\n (growMemViews(), HEAP64)[(b + 2 * i) >>> 0] = 0n;\n (growMemViews(), HEAPF64)[(b + 2 * i + 1) >>> 0] = arg;\n }\n }\n var rtn = __emscripten_run_js_on_main_thread(\n funcIndex,\n emAsmAddr,\n serializedNumCallArgs,\n args,\n sync\n );\n stackRestore(sp);\n return rtn;\n};\nfunction _proc_exit(code) {\n if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(0, 0, 1, code);\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n PThread.terminateAllThreads();\n Module['onExit']?.(code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n}\nfunction exitOnMainThread(returnCode) {\n if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(1, 0, 0, returnCode);\n _exit(returnCode);\n}\nvar exitJS = (status, implicit) => {\n EXITSTATUS = status;\n if (ENVIRONMENT_IS_PTHREAD) {\n exitOnMainThread(status);\n throw 'unwind';\n }\n _proc_exit(status);\n};\nvar _exit = exitJS;\nvar PThread = {\n unusedWorkers: [],\n runningWorkers: [],\n tlsInitFunctions: [],\n pthreads: {},\n init() {\n if (!ENVIRONMENT_IS_PTHREAD) {\n PThread.initMainThread();\n }\n },\n initMainThread() {\n var pthreadPoolSize = Module['pthreadPoolSize'];\n while (pthreadPoolSize--) {\n PThread.allocateUnusedWorker();\n }\n addOnPreRun(async () => {\n var pthreadPoolReady = PThread.loadWasmModuleToAllWorkers();\n addRunDependency('loading-workers');\n await pthreadPoolReady;\n removeRunDependency('loading-workers');\n });\n },\n terminateAllThreads: () => {\n for (var worker of PThread.runningWorkers) {\n terminateWorker(worker);\n }\n for (var worker of PThread.unusedWorkers) {\n terminateWorker(worker);\n }\n PThread.unusedWorkers = [];\n PThread.runningWorkers = [];\n PThread.pthreads = {};\n },\n returnWorkerToPool: (worker) => {\n var pthread_ptr = worker.pthread_ptr;\n delete PThread.pthreads[pthread_ptr];\n PThread.unusedWorkers.push(worker);\n PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker), 1);\n worker.pthread_ptr = 0;\n __emscripten_thread_free_data(pthread_ptr);\n },\n threadInitTLS() {\n PThread.tlsInitFunctions.forEach((f) => f());\n },\n loadWasmModuleToWorker: (worker) =>\n new Promise((onFinishedLoading) => {\n worker.onmessage = (e) => {\n var d = e['data'];\n var cmd = d.cmd;\n if (d.targetThread && d.targetThread != _pthread_self()) {\n var targetWorker = PThread.pthreads[d.targetThread];\n if (targetWorker) {\n targetWorker.postMessage(d, d.transferList);\n } else {\n err(\n `Internal error! Worker sent a message \"${cmd}\" to target pthread ${d.targetThread}, but that thread no longer exists!`\n );\n }\n return;\n }\n if (cmd === 'checkMailbox') {\n checkMailbox();\n } else if (cmd === 'spawnThread') {\n spawnThread(d);\n } else if (cmd === 'cleanupThread') {\n callUserCallback(() => cleanupThread(d.thread));\n } else if (cmd === 'loaded') {\n worker.loaded = true;\n if (ENVIRONMENT_IS_NODE && !worker.pthread_ptr) {\n worker.unref();\n }\n onFinishedLoading(worker);\n } else if (d.target === 'setimmediate') {\n worker.postMessage(d);\n } else if (cmd === 'uncaughtException') {\n worker.onerror(d.error);\n } else if (cmd === 'callHandler') {\n Module[d.handler](...d.args);\n } else if (cmd) {\n err(`worker sent an unknown command ${cmd}`);\n }\n };\n worker.onerror = (e) => {\n var message = 'worker sent an error!';\n err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);\n throw e;\n };\n if (ENVIRONMENT_IS_NODE) {\n worker.on('message', (data) => worker.onmessage({ data }));\n worker.on('error', (e) => worker.onerror(e));\n }\n var handlers = [];\n var knownHandlers = ['onExit', 'onAbort', 'print', 'printErr'];\n for (var handler of knownHandlers) {\n if (Module.propertyIsEnumerable(handler)) {\n handlers.push(handler);\n }\n }\n worker.postMessage({ cmd: 'load', handlers, wasmMemory, wasmModule });\n }),\n async loadWasmModuleToAllWorkers() {\n if (ENVIRONMENT_IS_PTHREAD) {\n return;\n }\n let pthreadPoolReady = Promise.all(\n PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker)\n );\n return pthreadPoolReady;\n },\n allocateUnusedWorker() {\n var worker;\n var pthreadMainJs = _scriptName;\n if (Module['mainScriptUrlOrBlob']) {\n pthreadMainJs = Module['mainScriptUrlOrBlob'];\n if (typeof pthreadMainJs != 'string') {\n pthreadMainJs = URL.createObjectURL(pthreadMainJs);\n }\n }\n worker = new Worker(pthreadMainJs, {\n workerData: 'em-pthread',\n name: 'em-pthread',\n });\n PThread.unusedWorkers.push(worker);\n },\n getNewWorker() {\n if (PThread.unusedWorkers.length == 0) {\n PThread.allocateUnusedWorker();\n PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0]);\n }\n return PThread.unusedWorkers.pop();\n },\n};\nvar onPostRuns = [];\nvar addOnPostRun = (cb) => onPostRuns.push(cb);\nvar dynCalls = {};\nfunction establishStackSpace(pthread_ptr) {\n var stackHigh = (growMemViews(), HEAPU32)[((pthread_ptr + 52) >>> 2) >>> 0];\n var stackSize = (growMemViews(), HEAPU32)[((pthread_ptr + 56) >>> 2) >>> 0];\n var stackLow = stackHigh - stackSize;\n _emscripten_stack_set_limits(stackHigh, stackLow);\n stackRestore(stackHigh);\n}\nvar invokeEntryPoint = (ptr, arg) => {\n runtimeKeepaliveCounter = 0;\n noExitRuntime = 0;\n var result = ((a1) => dynCall_ii(ptr, a1))(arg);\n function finish(result) {\n if (keepRuntimeAlive()) {\n EXITSTATUS = result;\n return;\n }\n __emscripten_thread_exit(result);\n }\n finish(result);\n};\ninvokeEntryPoint.isAsync = true;\nvar noExitRuntime = true;\nvar registerTLSInit = (tlsInitFunc) =>\n PThread.tlsInitFunctions.push(tlsInitFunc);\nvar wasmMemory;\nvar exceptionCaught = [];\nvar uncaughtExceptionCount = 0;\nvar INT53_MAX = 9007199254740992;\nvar INT53_MIN = -9007199254740992;\nvar bigintToI53Checked = (num) =>\n num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\nfunction ___cxa_begin_catch(ptr) {\n ptr >>>= 0;\n var info = new ExceptionInfo(ptr);\n if (!info.get_caught()) {\n info.set_caught(true);\n uncaughtExceptionCount--;\n }\n info.set_rethrown(false);\n exceptionCaught.push(info);\n ___cxa_increment_exception_refcount(ptr);\n return ___cxa_get_exception_ptr(ptr);\n}\nfunction ___cxa_current_primary_exception() {\n if (!exceptionCaught.length) {\n return 0;\n }\n var info = exceptionCaught[exceptionCaught.length - 1];\n ___cxa_increment_exception_refcount(info.excPtr);\n return info.excPtr;\n}\nvar exceptionLast = 0;\nvar ___cxa_end_catch = () => {\n _setThrew(0, 0);\n var info = exceptionCaught.pop();\n ___cxa_decrement_exception_refcount(info.excPtr);\n exceptionLast = 0;\n};\nclass ExceptionInfo {\n constructor(excPtr) {\n this.excPtr = excPtr;\n this.ptr = excPtr - 24;\n }\n set_type(type) {\n (growMemViews(), HEAPU32)[((this.ptr + 4) >>> 2) >>> 0] = type;\n }\n get_type() {\n return (growMemViews(), HEAPU32)[((this.ptr + 4) >>> 2) >>> 0];\n }\n set_destructor(destructor) {\n (growMemViews(), HEAPU32)[((this.ptr + 8) >>> 2) >>> 0] = destructor;\n }\n get_destructor() {\n return (growMemViews(), HEAPU32)[((this.ptr + 8) >>> 2) >>> 0];\n }\n set_caught(caught) {\n caught = caught ? 1 : 0;\n (growMemViews(), HEAP8)[(this.ptr + 12) >>> 0] = caught;\n }\n get_caught() {\n return (growMemViews(), HEAP8)[(this.ptr + 12) >>> 0] != 0;\n }\n set_rethrown(rethrown) {\n rethrown = rethrown ? 1 : 0;\n (growMemViews(), HEAP8)[(this.ptr + 13) >>> 0] = rethrown;\n }\n get_rethrown() {\n return (growMemViews(), HEAP8)[(this.ptr + 13) >>> 0] != 0;\n }\n init(type, destructor) {\n this.set_adjusted_ptr(0);\n this.set_type(type);\n this.set_destructor(destructor);\n }\n set_adjusted_ptr(adjustedPtr) {\n (growMemViews(), HEAPU32)[((this.ptr + 16) >>> 2) >>> 0] = adjustedPtr;\n }\n get_adjusted_ptr() {\n return (growMemViews(), HEAPU32)[((this.ptr + 16) >>> 2) >>> 0];\n }\n}\nvar setTempRet0 = (val) => __emscripten_tempret_set(val);\nvar findMatchingCatch = (args) => {\n var thrown = exceptionLast;\n if (!thrown) {\n setTempRet0(0);\n return 0;\n }\n var info = new ExceptionInfo(thrown);\n info.set_adjusted_ptr(thrown);\n var thrownType = info.get_type();\n if (!thrownType) {\n setTempRet0(0);\n return thrown;\n }\n for (var caughtType of args) {\n if (caughtType === 0 || caughtType === thrownType) {\n break;\n }\n var adjusted_ptr_addr = info.ptr + 16;\n if (___cxa_can_catch(caughtType, thrownType, adjusted_ptr_addr)) {\n setTempRet0(caughtType);\n return thrown;\n }\n }\n setTempRet0(thrownType);\n return thrown;\n};\nfunction ___cxa_find_matching_catch_2() {\n return findMatchingCatch([]);\n}\nfunction ___cxa_find_matching_catch_3(arg0) {\n arg0 >>>= 0;\n return findMatchingCatch([arg0]);\n}\nfunction ___cxa_find_matching_catch_4(arg0, arg1) {\n arg0 >>>= 0;\n arg1 >>>= 0;\n return findMatchingCatch([arg0, arg1]);\n}\nvar ___cxa_rethrow = () => {\n var info = exceptionCaught.pop();\n if (!info) {\n abort('no exception to throw');\n }\n var ptr = info.excPtr;\n if (!info.get_rethrown()) {\n exceptionCaught.push(info);\n info.set_rethrown(true);\n info.set_caught(false);\n uncaughtExceptionCount++;\n }\n exceptionLast = ptr;\n throw exceptionLast;\n};\nfunction ___cxa_rethrow_primary_exception(ptr) {\n ptr >>>= 0;\n if (!ptr) return;\n var info = new ExceptionInfo(ptr);\n exceptionCaught.push(info);\n info.set_rethrown(true);\n ___cxa_rethrow();\n}\nfunction ___cxa_throw(ptr, type, destructor) {\n ptr >>>= 0;\n type >>>= 0;\n destructor >>>= 0;\n var info = new ExceptionInfo(ptr);\n info.init(type, destructor);\n exceptionLast = ptr;\n uncaughtExceptionCount++;\n throw exceptionLast;\n}\nvar ___cxa_uncaught_exceptions = () => uncaughtExceptionCount;\nfunction pthreadCreateProxied(pthread_ptr, attr, startRoutine, arg) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(2, 0, 1, pthread_ptr, attr, startRoutine, arg);\n return ___pthread_create_js(pthread_ptr, attr, startRoutine, arg);\n}\nvar _emscripten_has_threading_support = () => !!globalThis.SharedArrayBuffer;\nfunction ___pthread_create_js(pthread_ptr, attr, startRoutine, arg) {\n pthread_ptr >>>= 0;\n attr >>>= 0;\n startRoutine >>>= 0;\n arg >>>= 0;\n if (!_emscripten_has_threading_support()) {\n return 6;\n }\n var transferList = [];\n var error = 0;\n if (ENVIRONMENT_IS_PTHREAD && (transferList.length === 0 || error)) {\n return pthreadCreateProxied(pthread_ptr, attr, startRoutine, arg);\n }\n if (error) return error;\n var threadParams = { startRoutine, pthread_ptr, arg, transferList };\n if (ENVIRONMENT_IS_PTHREAD) {\n threadParams.cmd = 'spawnThread';\n postMessage(threadParams, transferList);\n return 0;\n }\n return spawnThread(threadParams);\n}\nfunction ___resumeException(ptr) {\n ptr >>>= 0;\n if (!exceptionLast) {\n exceptionLast = ptr;\n }\n throw exceptionLast;\n}\nvar syscallGetVarargI = () => {\n var ret = (growMemViews(), HEAP32)[(+SYSCALLS.varargs >>> 2) >>> 0];\n SYSCALLS.varargs += 4;\n return ret;\n};\nvar syscallGetVarargP = syscallGetVarargI;\nvar PATH = {\n isAbs: (path) => path.charAt(0) === '/',\n splitPath: (filename) => {\n var splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n return splitPathRe.exec(filename).slice(1);\n },\n normalizeArray: (parts, allowAboveRoot) => {\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n if (allowAboveRoot) {\n for (; up; up--) {\n parts.unshift('..');\n }\n }\n return parts;\n },\n normalize: (path) => {\n var isAbsolute = PATH.isAbs(path),\n trailingSlash = path.slice(-1) === '/';\n path = PATH.normalizeArray(\n path.split('/').filter((p) => !!p),\n !isAbsolute\n ).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n },\n dirname: (path) => {\n var result = PATH.splitPath(path),\n root = result[0],\n dir = result[1];\n if (!root && !dir) {\n return '.';\n }\n if (dir) {\n dir = dir.slice(0, -1);\n }\n return root + dir;\n },\n basename: (path) => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n join: (...paths) => PATH.normalize(paths.join('/')),\n join2: (l, r) => PATH.normalize(l + '/' + r),\n};\nvar initRandomFill = () => {\n if (ENVIRONMENT_IS_NODE) {\n var nodeCrypto = require('crypto');\n return (view) => nodeCrypto.randomFillSync(view);\n }\n return (view) =>\n view.set(crypto.getRandomValues(new Uint8Array(view.byteLength)));\n};\nvar randomFill = (view) => {\n (randomFill = initRandomFill())(view);\n};\nvar PATH_FS = {\n resolve: (...args) => {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? args[i] : FS.cwd();\n if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n return '';\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = PATH.isAbs(path);\n }\n resolvedPath = PATH.normalizeArray(\n resolvedPath.split('/').filter((p) => !!p),\n !resolvedAbsolute\n ).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n },\n relative: (from, to) => {\n from = PATH_FS.resolve(from).slice(1);\n to = PATH_FS.resolve(to).slice(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n },\n};\nvar UTF8Decoder = globalThis.TextDecoder && new TextDecoder();\nvar findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n var maxIdx = idx + maxBytesToRead;\n if (ignoreNul) return maxIdx;\n while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n return idx;\n};\nvar UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n idx >>>= 0;\n var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(\n heapOrArray.buffer instanceof ArrayBuffer\n ? heapOrArray.subarray(idx, endPtr)\n : heapOrArray.slice(idx, endPtr)\n );\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n};\nvar FS_stdin_getChar_buffer = [];\nvar lengthBytesUTF8 = (str) => {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n var c = str.charCodeAt(i);\n if (c <= 127) {\n len++;\n } else if (c <= 2047) {\n len += 2;\n } else if (c >= 55296 && c <= 57343) {\n len += 4;\n ++i;\n } else {\n len += 3;\n }\n }\n return len;\n};\nvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n outIdx >>>= 0;\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.codePointAt(i);\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++ >>> 0] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++ >>> 0] = 192 | (u >> 6);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++ >>> 0] = 224 | (u >> 12);\n heap[outIdx++ >>> 0] = 128 | ((u >> 6) & 63);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++ >>> 0] = 240 | (u >> 18);\n heap[outIdx++ >>> 0] = 128 | ((u >> 12) & 63);\n heap[outIdx++ >>> 0] = 128 | ((u >> 6) & 63);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n i++;\n }\n }\n heap[outIdx >>> 0] = 0;\n return outIdx - startIdx;\n};\nvar intArrayFromString = (stringy, dontAddNull, length) => {\n var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n var u8array = new Array(len);\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n if (dontAddNull) u8array.length = numBytesWritten;\n return u8array;\n};\nvar FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n var result = null;\n if (ENVIRONMENT_IS_NODE) {\n var BUFSIZE = 256;\n var buf = Buffer.alloc(BUFSIZE);\n var bytesRead = 0;\n var fd = process.stdin.fd;\n try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n } catch (e) {\n if (e.toString().includes('EOF')) bytesRead = 0;\n else throw e;\n }\n if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8');\n }\n } else if (globalThis.window?.prompt) {\n result = window.prompt('Input: ');\n if (result !== null) {\n result += '\\n';\n }\n } else {\n }\n if (!result) {\n return null;\n }\n FS_stdin_getChar_buffer = intArrayFromString(result, true);\n }\n return FS_stdin_getChar_buffer.shift();\n};\nvar TTY = {\n ttys: [],\n init() {},\n shutdown() {},\n register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops };\n FS.registerDevice(dev, TTY.stream_ops);\n },\n stream_ops: {\n open(stream) {\n var tty = TTY.ttys[stream.node.rdev];\n if (!tty) {\n throw new FS.ErrnoError(43);\n }\n stream.tty = tty;\n stream.seekable = false;\n },\n close(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n fsync(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n read(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60);\n }\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = stream.tty.ops.get_char(stream.tty);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60);\n }\n try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n }\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n },\n default_tty_ops: {\n get_char(tty) {\n return FS_stdin_getChar();\n },\n put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n ioctl_tcgets(tty) {\n return {\n c_iflag: 25856,\n c_oflag: 5,\n c_cflag: 191,\n c_lflag: 35387,\n c_cc: [\n 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ],\n };\n },\n ioctl_tcsets(tty, optional_actions, data) {\n return 0;\n },\n ioctl_tiocgwinsz(tty) {\n return [24, 80];\n },\n },\n default_tty1_ops: {\n put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n },\n};\nvar zeroMemory = (ptr, size) =>\n (growMemViews(), HEAPU8).fill(0, ptr, ptr + size);\nvar alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;\nvar mmapAlloc = (size) => {\n size = alignMemory(size, 65536);\n var ptr = _emscripten_builtin_memalign(65536, size);\n if (ptr) zeroMemory(ptr, size);\n return ptr;\n};\nvar MEMFS = {\n ops_table: null,\n mount(mount) {\n return MEMFS.createNode(null, '/', 16895, 0);\n },\n createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n throw new FS.ErrnoError(63);\n }\n MEMFS.ops_table ||= {\n dir: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n lookup: MEMFS.node_ops.lookup,\n mknod: MEMFS.node_ops.mknod,\n rename: MEMFS.node_ops.rename,\n unlink: MEMFS.node_ops.unlink,\n rmdir: MEMFS.node_ops.rmdir,\n readdir: MEMFS.node_ops.readdir,\n symlink: MEMFS.node_ops.symlink,\n },\n stream: { llseek: MEMFS.stream_ops.llseek },\n },\n file: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek,\n read: MEMFS.stream_ops.read,\n write: MEMFS.stream_ops.write,\n mmap: MEMFS.stream_ops.mmap,\n msync: MEMFS.stream_ops.msync,\n },\n },\n link: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n readlink: MEMFS.node_ops.readlink,\n },\n stream: {},\n },\n chrdev: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: FS.chrdev_stream_ops,\n },\n };\n var node = FS.createNode(parent, name, mode, dev);\n if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node;\n node.stream_ops = MEMFS.ops_table.dir.stream;\n node.contents = {};\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node;\n node.stream_ops = MEMFS.ops_table.file.stream;\n node.usedBytes = 0;\n node.contents = null;\n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node;\n node.stream_ops = MEMFS.ops_table.link.stream;\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node;\n node.stream_ops = MEMFS.ops_table.chrdev.stream;\n }\n node.atime = node.mtime = node.ctime = Date.now();\n if (parent) {\n parent.contents[name] = node;\n parent.atime = parent.mtime = parent.ctime = node.atime;\n }\n return node;\n },\n getFileDataAsTypedArray(node) {\n if (!node.contents) return new Uint8Array(0);\n if (node.contents.subarray)\n return node.contents.subarray(0, node.usedBytes);\n return new Uint8Array(node.contents);\n },\n expandFileStorage(node, newCapacity) {\n var prevCapacity = node.contents ? node.contents.length : 0;\n if (prevCapacity >= newCapacity) return;\n var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n newCapacity = Math.max(\n newCapacity,\n (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>> 0\n );\n if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n var oldContents = node.contents;\n node.contents = new Uint8Array(newCapacity);\n if (node.usedBytes > 0)\n node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n },\n resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize) return;\n if (newSize == 0) {\n node.contents = null;\n node.usedBytes = 0;\n } else {\n var oldContents = node.contents;\n node.contents = new Uint8Array(newSize);\n if (oldContents) {\n node.contents.set(\n oldContents.subarray(0, Math.min(newSize, node.usedBytes))\n );\n }\n node.usedBytes = newSize;\n }\n },\n node_ops: {\n getattr(node) {\n var attr = {};\n attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n attr.ino = node.id;\n attr.mode = node.mode;\n attr.nlink = 1;\n attr.uid = 0;\n attr.gid = 0;\n attr.rdev = node.rdev;\n if (FS.isDir(node.mode)) {\n attr.size = 4096;\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes;\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length;\n } else {\n attr.size = 0;\n }\n attr.atime = new Date(node.atime);\n attr.mtime = new Date(node.mtime);\n attr.ctime = new Date(node.ctime);\n attr.blksize = 4096;\n attr.blocks = Math.ceil(attr.size / attr.blksize);\n return attr;\n },\n setattr(node, attr) {\n for (const key of ['mode', 'atime', 'mtime', 'ctime']) {\n if (attr[key] != null) {\n node[key] = attr[key];\n }\n }\n if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size);\n }\n },\n lookup(parent, name) {\n if (!MEMFS.doesNotExistError) {\n MEMFS.doesNotExistError = new FS.ErrnoError(44);\n MEMFS.doesNotExistError.stack = '';\n }\n throw MEMFS.doesNotExistError;\n },\n mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev);\n },\n rename(old_node, new_dir, new_name) {\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (new_node) {\n if (FS.isDir(old_node.mode)) {\n for (var i in new_node.contents) {\n throw new FS.ErrnoError(55);\n }\n }\n FS.hashRemoveNode(new_node);\n }\n delete old_node.parent.contents[old_node.name];\n new_dir.contents[new_name] = old_node;\n old_node.name = new_name;\n new_dir.ctime =\n new_dir.mtime =\n old_node.parent.ctime =\n old_node.parent.mtime =\n Date.now();\n },\n unlink(parent, name) {\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n rmdir(parent, name) {\n var node = FS.lookupNode(parent, name);\n for (var i in node.contents) {\n throw new FS.ErrnoError(55);\n }\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n readdir(node) {\n return ['.', '..', ...Object.keys(node.contents)];\n },\n symlink(parent, newname, oldpath) {\n var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);\n node.link = oldpath;\n return node;\n },\n readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n return node.link;\n },\n },\n stream_ops: {\n read(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= stream.node.usedBytes) return 0;\n var size = Math.min(stream.node.usedBytes - position, length);\n if (size > 8 && contents.subarray) {\n buffer.set(contents.subarray(position, position + size), offset);\n } else {\n for (var i = 0; i < size; i++)\n buffer[offset + i] = contents[position + i];\n }\n return size;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (buffer.buffer === (growMemViews(), HEAP8).buffer) {\n canOwn = false;\n }\n if (!length) return 0;\n var node = stream.node;\n node.mtime = node.ctime = Date.now();\n if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (node.usedBytes === 0 && position === 0) {\n node.contents = buffer.slice(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (position + length <= node.usedBytes) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n return length;\n }\n }\n MEMFS.expandFileStorage(node, position + length);\n if (node.contents.subarray && buffer.subarray) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n } else {\n for (var i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i];\n }\n }\n node.usedBytes = Math.max(node.usedBytes, position + length);\n return length;\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes;\n }\n }\n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n return position;\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n var ptr;\n var allocated;\n var contents = stream.node.contents;\n if (\n !(flags & 2) &&\n contents &&\n contents.buffer === (growMemViews(), HEAP8).buffer\n ) {\n allocated = false;\n ptr = contents.byteOffset;\n } else {\n allocated = true;\n ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n if (contents) {\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length);\n } else {\n contents = Array.prototype.slice.call(\n contents,\n position,\n position + length\n );\n }\n }\n (growMemViews(), HEAP8).set(contents, ptr >>> 0);\n }\n }\n return { ptr, allocated };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n return 0;\n },\n },\n};\nvar FS_modeStringToFlags = (str) => {\n var flagModes = {\n r: 0,\n 'r+': 2,\n w: 512 | 64 | 1,\n 'w+': 512 | 64 | 2,\n a: 1024 | 64 | 1,\n 'a+': 1024 | 64 | 2,\n };\n var flags = flagModes[str];\n if (typeof flags == 'undefined') {\n throw new Error(`Unknown file open mode: ${str}`);\n }\n return flags;\n};\nvar FS_getMode = (canRead, canWrite) => {\n var mode = 0;\n if (canRead) mode |= 292 | 73;\n if (canWrite) mode |= 146;\n return mode;\n};\nvar asyncLoad = async (url) => {\n var arrayBuffer = await readAsync(url);\n return new Uint8Array(arrayBuffer);\n};\nvar FS_createDataFile = (...args) => FS.createDataFile(...args);\nvar getUniqueRunDependency = (id) => id;\nvar preloadPlugins = [];\nvar FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n if (typeof Browser != 'undefined') Browser.init();\n for (var plugin of preloadPlugins) {\n if (plugin['canHandle'](fullname)) {\n return plugin['handle'](byteArray, fullname);\n }\n }\n return byteArray;\n};\nvar FS_preloadFile = async (\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n var dep = getUniqueRunDependency(`cp ${fullname}`);\n addRunDependency(dep);\n try {\n var byteArray = url;\n if (typeof url == 'string') {\n byteArray = await asyncLoad(url);\n }\n byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n preFinish?.();\n if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n }\n } finally {\n removeRunDependency(dep);\n }\n};\nvar FS_createPreloadedFile = (\n parent,\n name,\n url,\n canRead,\n canWrite,\n onload,\n onerror,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n FS_preloadFile(\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n )\n .then(onload)\n .catch(onerror);\n};\nvar FS = {\n root: null,\n mounts: [],\n devices: {},\n streams: [],\n nextInode: 1,\n nameTable: null,\n currentPath: '/',\n initialized: false,\n ignorePermissions: true,\n filesystems: null,\n syncFSRequests: 0,\n readFiles: {},\n ErrnoError: class {\n name = 'ErrnoError';\n constructor(errno) {\n this.errno = errno;\n }\n },\n FSStream: class {\n shared = {};\n get object() {\n return this.node;\n }\n set object(val) {\n this.node = val;\n }\n get isRead() {\n return (this.flags & 2097155) !== 1;\n }\n get isWrite() {\n return (this.flags & 2097155) !== 0;\n }\n get isAppend() {\n return this.flags & 1024;\n }\n get flags() {\n return this.shared.flags;\n }\n set flags(val) {\n this.shared.flags = val;\n }\n get position() {\n return this.shared.position;\n }\n set position(val) {\n this.shared.position = val;\n }\n },\n FSNode: class {\n node_ops = {};\n stream_ops = {};\n readMode = 292 | 73;\n writeMode = 146;\n mounted = null;\n constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this;\n }\n this.parent = parent;\n this.mount = parent.mount;\n this.id = FS.nextInode++;\n this.name = name;\n this.mode = mode;\n this.rdev = rdev;\n this.atime = this.mtime = this.ctime = Date.now();\n }\n get read() {\n return (this.mode & this.readMode) === this.readMode;\n }\n set read(val) {\n val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n }\n get write() {\n return (this.mode & this.writeMode) === this.writeMode;\n }\n set write(val) {\n val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n }\n get isFolder() {\n return FS.isDir(this.mode);\n }\n get isDevice() {\n return FS.isChrdev(this.mode);\n }\n },\n lookupPath(path, opts = {}) {\n if (!path) {\n throw new FS.ErrnoError(44);\n }\n opts.follow_mount ??= true;\n if (!PATH.isAbs(path)) {\n path = FS.cwd() + '/' + path;\n }\n linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n var parts = path.split('/').filter((p) => !!p);\n var current = FS.root;\n var current_path = '/';\n for (var i = 0; i < parts.length; i++) {\n var islast = i === parts.length - 1;\n if (islast && opts.parent) {\n break;\n }\n if (parts[i] === '.') {\n continue;\n }\n if (parts[i] === '..') {\n current_path = PATH.dirname(current_path);\n if (FS.isRoot(current)) {\n path = current_path + '/' + parts.slice(i + 1).join('/');\n nlinks--;\n continue linkloop;\n } else {\n current = current.parent;\n }\n continue;\n }\n current_path = PATH.join2(current_path, parts[i]);\n try {\n current = FS.lookupNode(current, parts[i]);\n } catch (e) {\n if (e?.errno === 44 && islast && opts.noent_okay) {\n return { path: current_path };\n }\n throw e;\n }\n if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {\n current = current.mounted.root;\n }\n if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n if (!current.node_ops.readlink) {\n throw new FS.ErrnoError(52);\n }\n var link = current.node_ops.readlink(current);\n if (!PATH.isAbs(link)) {\n link = PATH.dirname(current_path) + '/' + link;\n }\n path = link + '/' + parts.slice(i + 1).join('/');\n continue linkloop;\n }\n }\n return { path: current_path, node: current };\n }\n throw new FS.ErrnoError(32);\n },\n getPath(node) {\n var path;\n while (true) {\n if (FS.isRoot(node)) {\n var mount = node.mount.mountpoint;\n if (!path) return mount;\n return mount[mount.length - 1] !== '/'\n ? `${mount}/${path}`\n : mount + path;\n }\n path = path ? `${node.name}/${path}` : node.name;\n node = node.parent;\n }\n },\n hashName(parentid, name) {\n var hash = 0;\n for (var i = 0; i < name.length; i++) {\n hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n }\n return ((parentid + hash) >>> 0) % FS.nameTable.length;\n },\n hashAddNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n node.name_next = FS.nameTable[hash];\n FS.nameTable[hash] = node;\n },\n hashRemoveNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next;\n } else {\n var current = FS.nameTable[hash];\n while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next;\n break;\n }\n current = current.name_next;\n }\n }\n },\n lookupNode(parent, name) {\n var errCode = FS.mayLookup(parent);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n var hash = FS.hashName(parent.id, name);\n for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n var nodeName = node.name;\n if (node.parent.id === parent.id && nodeName === name) {\n return node;\n }\n }\n return FS.lookup(parent, name);\n },\n createNode(parent, name, mode, rdev) {\n var node = new FS.FSNode(parent, name, mode, rdev);\n FS.hashAddNode(node);\n return node;\n },\n destroyNode(node) {\n FS.hashRemoveNode(node);\n },\n isRoot(node) {\n return node === node.parent;\n },\n isMountpoint(node) {\n return !!node.mounted;\n },\n isFile(mode) {\n return (mode & 61440) === 32768;\n },\n isDir(mode) {\n return (mode & 61440) === 16384;\n },\n isLink(mode) {\n return (mode & 61440) === 40960;\n },\n isChrdev(mode) {\n return (mode & 61440) === 8192;\n },\n isBlkdev(mode) {\n return (mode & 61440) === 24576;\n },\n isFIFO(mode) {\n return (mode & 61440) === 4096;\n },\n isSocket(mode) {\n return (mode & 49152) === 49152;\n },\n flagsToPermissionString(flag) {\n var perms = ['r', 'w', 'rw'][flag & 3];\n if (flag & 512) {\n perms += 'w';\n }\n return perms;\n },\n nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0;\n }\n if (perms.includes('r') && !(node.mode & 292)) {\n return 2;\n } else if (perms.includes('w') && !(node.mode & 146)) {\n return 2;\n } else if (perms.includes('x') && !(node.mode & 73)) {\n return 2;\n }\n return 0;\n },\n mayLookup(dir) {\n if (!FS.isDir(dir.mode)) return 54;\n var errCode = FS.nodePermissions(dir, 'x');\n if (errCode) return errCode;\n if (!dir.node_ops.lookup) return 2;\n return 0;\n },\n mayCreate(dir, name) {\n if (!FS.isDir(dir.mode)) {\n return 54;\n }\n try {\n var node = FS.lookupNode(dir, name);\n return 20;\n } catch (e) {}\n return FS.nodePermissions(dir, 'wx');\n },\n mayDelete(dir, name, isdir) {\n var node;\n try {\n node = FS.lookupNode(dir, name);\n } catch (e) {\n return e.errno;\n }\n var errCode = FS.nodePermissions(dir, 'wx');\n if (errCode) {\n return errCode;\n }\n if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54;\n }\n if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10;\n }\n } else {\n if (FS.isDir(node.mode)) {\n return 31;\n }\n }\n return 0;\n },\n mayOpen(node, flags) {\n if (!node) {\n return 44;\n }\n if (FS.isLink(node.mode)) {\n return 32;\n } else if (FS.isDir(node.mode)) {\n if (FS.flagsToPermissionString(flags) !== 'r' || flags & (512 | 64)) {\n return 31;\n }\n }\n return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n },\n checkOpExists(op, err) {\n if (!op) {\n throw new FS.ErrnoError(err);\n }\n return op;\n },\n MAX_OPEN_FDS: 4096,\n nextfd() {\n for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd;\n }\n }\n throw new FS.ErrnoError(33);\n },\n getStreamChecked(fd) {\n var stream = FS.getStream(fd);\n if (!stream) {\n throw new FS.ErrnoError(8);\n }\n return stream;\n },\n getStream: (fd) => FS.streams[fd],\n createStream(stream, fd = -1) {\n stream = Object.assign(new FS.FSStream(), stream);\n if (fd == -1) {\n fd = FS.nextfd();\n }\n stream.fd = fd;\n FS.streams[fd] = stream;\n return stream;\n },\n closeStream(fd) {\n FS.streams[fd] = null;\n },\n dupStream(origStream, fd = -1) {\n var stream = FS.createStream(origStream, fd);\n stream.stream_ops?.dup?.(stream);\n return stream;\n },\n doSetAttr(stream, node, attr) {\n var setattr = stream?.stream_ops.setattr;\n var arg = setattr ? stream : node;\n setattr ??= node.node_ops.setattr;\n FS.checkOpExists(setattr, 63);\n setattr(arg, attr);\n },\n chrdev_stream_ops: {\n open(stream) {\n var device = FS.getDevice(stream.node.rdev);\n stream.stream_ops = device.stream_ops;\n stream.stream_ops.open?.(stream);\n },\n llseek() {\n throw new FS.ErrnoError(70);\n },\n },\n major: (dev) => dev >> 8,\n minor: (dev) => dev & 255,\n makedev: (ma, mi) => (ma << 8) | mi,\n registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops };\n },\n getDevice: (dev) => FS.devices[dev],\n getMounts(mount) {\n var mounts = [];\n var check = [mount];\n while (check.length) {\n var m = check.pop();\n mounts.push(m);\n check.push(...m.mounts);\n }\n return mounts;\n },\n syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate;\n populate = false;\n }\n FS.syncFSRequests++;\n if (FS.syncFSRequests > 1) {\n err(\n `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`\n );\n }\n var mounts = FS.getMounts(FS.root.mount);\n var completed = 0;\n function doCallback(errCode) {\n FS.syncFSRequests--;\n return callback(errCode);\n }\n function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true;\n return doCallback(errCode);\n }\n return;\n }\n if (++completed >= mounts.length) {\n doCallback(null);\n }\n }\n for (var mount of mounts) {\n if (mount.type.syncfs) {\n mount.type.syncfs(mount, populate, done);\n } else {\n done(null);\n }\n }\n },\n mount(type, opts, mountpoint) {\n var root = mountpoint === '/';\n var pseudo = !mountpoint;\n var node;\n if (root && FS.root) {\n throw new FS.ErrnoError(10);\n } else if (!root && !pseudo) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n mountpoint = lookup.path;\n node = lookup.node;\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n }\n var mount = { type, opts, mountpoint, mounts: [] };\n var mountRoot = type.mount(mount);\n mountRoot.mount = mount;\n mount.root = mountRoot;\n if (root) {\n FS.root = mountRoot;\n } else if (node) {\n node.mounted = mount;\n if (node.mount) {\n node.mount.mounts.push(mount);\n }\n }\n return mountRoot;\n },\n unmount(mountpoint) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28);\n }\n var node = lookup.node;\n var mount = node.mounted;\n var mounts = FS.getMounts(mount);\n for (var [hash, current] of Object.entries(FS.nameTable)) {\n while (current) {\n var next = current.name_next;\n if (mounts.includes(current.mount)) {\n FS.destroyNode(current);\n }\n current = next;\n }\n }\n node.mounted = null;\n var idx = node.mount.mounts.indexOf(mount);\n node.mount.mounts.splice(idx, 1);\n },\n lookup(parent, name) {\n return parent.node_ops.lookup(parent, name);\n },\n mknod(path, mode, dev) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n if (!name) {\n throw new FS.ErrnoError(28);\n }\n if (name === '.' || name === '..') {\n throw new FS.ErrnoError(20);\n }\n var errCode = FS.mayCreate(parent, name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.mknod(parent, name, mode, dev);\n },\n statfs(path) {\n return FS.statfsNode(FS.lookupPath(path, { follow: true }).node);\n },\n statfsStream(stream) {\n return FS.statfsNode(stream.node);\n },\n statfsNode(node) {\n var rtn = {\n bsize: 4096,\n frsize: 4096,\n blocks: 1e6,\n bfree: 5e5,\n bavail: 5e5,\n files: FS.nextInode,\n ffree: FS.nextInode - 1,\n fsid: 42,\n flags: 2,\n namelen: 255,\n };\n if (node.node_ops.statfs) {\n Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n }\n return rtn;\n },\n create(path, mode = 438) {\n mode &= 4095;\n mode |= 32768;\n return FS.mknod(path, mode, 0);\n },\n mkdir(path, mode = 511) {\n mode &= 511 | 512;\n mode |= 16384;\n return FS.mknod(path, mode, 0);\n },\n mkdirTree(path, mode) {\n var dirs = path.split('/');\n var d = '';\n for (var dir of dirs) {\n if (!dir) continue;\n if (d || PATH.isAbs(path)) d += '/';\n d += dir;\n try {\n FS.mkdir(d, mode);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n }\n },\n mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode;\n mode = 438;\n }\n mode |= 8192;\n return FS.mknod(path, mode, dev);\n },\n symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44);\n }\n var lookup = FS.lookupPath(newpath, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var newname = PATH.basename(newpath);\n var errCode = FS.mayCreate(parent, newname);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.symlink(parent, newname, oldpath);\n },\n rename(old_path, new_path) {\n var old_dirname = PATH.dirname(old_path);\n var new_dirname = PATH.dirname(new_path);\n var old_name = PATH.basename(old_path);\n var new_name = PATH.basename(new_path);\n var lookup, old_dir, new_dir;\n lookup = FS.lookupPath(old_path, { parent: true });\n old_dir = lookup.node;\n lookup = FS.lookupPath(new_path, { parent: true });\n new_dir = lookup.node;\n if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75);\n }\n var old_node = FS.lookupNode(old_dir, old_name);\n var relative = PATH_FS.relative(old_path, new_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28);\n }\n relative = PATH_FS.relative(new_path, old_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55);\n }\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (old_node === new_node) {\n return;\n }\n var isdir = FS.isDir(old_node.mode);\n var errCode = FS.mayDelete(old_dir, old_name, isdir);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n errCode = new_node\n ? FS.mayDelete(new_dir, new_name, isdir)\n : FS.mayCreate(new_dir, new_name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n throw new FS.ErrnoError(10);\n }\n if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n FS.hashRemoveNode(old_node);\n try {\n old_dir.node_ops.rename(old_node, new_dir, new_name);\n old_node.parent = new_dir;\n } catch (e) {\n throw e;\n } finally {\n FS.hashAddNode(old_node);\n }\n },\n rmdir(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, true);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.rmdir(parent, name);\n FS.destroyNode(node);\n },\n readdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var readdir = FS.checkOpExists(node.node_ops.readdir, 54);\n return readdir(node);\n },\n unlink(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, false);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.unlink(parent, name);\n FS.destroyNode(node);\n },\n readlink(path) {\n var lookup = FS.lookupPath(path);\n var link = lookup.node;\n if (!link) {\n throw new FS.ErrnoError(44);\n }\n if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28);\n }\n return link.node_ops.readlink(link);\n },\n stat(path, dontFollow) {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n var node = lookup.node;\n var getattr = FS.checkOpExists(node.node_ops.getattr, 63);\n return getattr(node);\n },\n fstat(fd) {\n var stream = FS.getStreamChecked(fd);\n var node = stream.node;\n var getattr = stream.stream_ops.getattr;\n var arg = getattr ? stream : node;\n getattr ??= node.node_ops.getattr;\n FS.checkOpExists(getattr, 63);\n return getattr(arg);\n },\n lstat(path) {\n return FS.stat(path, true);\n },\n doChmod(stream, node, mode, dontFollow) {\n FS.doSetAttr(stream, node, {\n mode: (mode & 4095) | (node.mode & ~4095),\n ctime: Date.now(),\n dontFollow,\n });\n },\n chmod(path, mode, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChmod(null, node, mode, dontFollow);\n },\n lchmod(path, mode) {\n FS.chmod(path, mode, true);\n },\n fchmod(fd, mode) {\n var stream = FS.getStreamChecked(fd);\n FS.doChmod(stream, stream.node, mode, false);\n },\n doChown(stream, node, dontFollow) {\n FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow });\n },\n chown(path, uid, gid, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChown(null, node, dontFollow);\n },\n lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true);\n },\n fchown(fd, uid, gid) {\n var stream = FS.getStreamChecked(fd);\n FS.doChown(stream, stream.node, false);\n },\n doTruncate(stream, node, len) {\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.nodePermissions(node, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() });\n },\n truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28);\n }\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: true });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doTruncate(null, node, len);\n },\n ftruncate(fd, len) {\n var stream = FS.getStreamChecked(fd);\n if (len < 0 || (stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28);\n }\n FS.doTruncate(stream, stream.node, len);\n },\n utime(path, atime, mtime) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var setattr = FS.checkOpExists(node.node_ops.setattr, 63);\n setattr(node, { atime, mtime });\n },\n open(path, flags, mode = 438) {\n if (path === '') {\n throw new FS.ErrnoError(44);\n }\n flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n if (flags & 64) {\n mode = (mode & 4095) | 32768;\n } else {\n mode = 0;\n }\n var node;\n var isDirPath;\n if (typeof path == 'object') {\n node = path;\n } else {\n isDirPath = path.endsWith('/');\n var lookup = FS.lookupPath(path, {\n follow: !(flags & 131072),\n noent_okay: true,\n });\n node = lookup.node;\n path = lookup.path;\n }\n var created = false;\n if (flags & 64) {\n if (node) {\n if (flags & 128) {\n throw new FS.ErrnoError(20);\n }\n } else if (isDirPath) {\n throw new FS.ErrnoError(31);\n } else {\n node = FS.mknod(path, mode | 511, 0);\n created = true;\n }\n }\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n if (FS.isChrdev(node.mode)) {\n flags &= ~512;\n }\n if (flags & 65536 && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n if (!created) {\n var errCode = FS.mayOpen(node, flags);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n if (flags & 512 && !created) {\n FS.truncate(node, 0);\n }\n flags &= ~(128 | 512 | 131072);\n var stream = FS.createStream({\n node,\n path: FS.getPath(node),\n flags,\n seekable: true,\n position: 0,\n stream_ops: node.stream_ops,\n ungotten: [],\n error: false,\n });\n if (stream.stream_ops.open) {\n stream.stream_ops.open(stream);\n }\n if (created) {\n FS.chmod(node, mode & 511);\n }\n if (Module['logReadFiles'] && !(flags & 1)) {\n if (!(path in FS.readFiles)) {\n FS.readFiles[path] = 1;\n }\n }\n return stream;\n },\n close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (stream.getdents) stream.getdents = null;\n try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream);\n }\n } catch (e) {\n throw e;\n } finally {\n FS.closeStream(stream.fd);\n }\n stream.fd = null;\n },\n isClosed(stream) {\n return stream.fd === null;\n },\n llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70);\n }\n if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28);\n }\n stream.position = stream.stream_ops.llseek(stream, offset, whence);\n stream.ungotten = [];\n return stream.position;\n },\n read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesRead = stream.stream_ops.read(\n stream,\n buffer,\n offset,\n length,\n position\n );\n if (!seeking) stream.position += bytesRead;\n return bytesRead;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28);\n }\n if (stream.seekable && stream.flags & 1024) {\n FS.llseek(stream, 0, 2);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesWritten = stream.stream_ops.write(\n stream,\n buffer,\n offset,\n length,\n position,\n canOwn\n );\n if (!seeking) stream.position += bytesWritten;\n return bytesWritten;\n },\n mmap(stream, length, position, prot, flags) {\n if (\n (prot & 2) !== 0 &&\n (flags & 2) === 0 &&\n (stream.flags & 2097155) !== 2\n ) {\n throw new FS.ErrnoError(2);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2);\n }\n if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43);\n }\n if (!length) {\n throw new FS.ErrnoError(28);\n }\n return stream.stream_ops.mmap(stream, length, position, prot, flags);\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0;\n }\n return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n },\n ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59);\n }\n return stream.stream_ops.ioctl(stream, cmd, arg);\n },\n readFile(path, opts = {}) {\n opts.flags = opts.flags || 0;\n opts.encoding = opts.encoding || 'binary';\n if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n abort(`Invalid encoding type \"${opts.encoding}\"`);\n }\n var stream = FS.open(path, opts.flags);\n var stat = FS.stat(path);\n var length = stat.size;\n var buf = new Uint8Array(length);\n FS.read(stream, buf, 0, length, 0);\n if (opts.encoding === 'utf8') {\n buf = UTF8ArrayToString(buf);\n }\n FS.close(stream);\n return buf;\n },\n writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577;\n var stream = FS.open(path, opts.flags, opts.mode);\n if (typeof data == 'string') {\n data = new Uint8Array(intArrayFromString(data, true));\n }\n if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n } else {\n abort('Unsupported data type');\n }\n FS.close(stream);\n },\n cwd: () => FS.currentPath,\n chdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n if (lookup.node === null) {\n throw new FS.ErrnoError(44);\n }\n if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54);\n }\n var errCode = FS.nodePermissions(lookup.node, 'x');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.currentPath = lookup.path;\n },\n createDefaultDirectories() {\n FS.mkdir('/tmp');\n FS.mkdir('/home');\n FS.mkdir('/home/web_user');\n },\n createDefaultDevices() {\n FS.mkdir('/dev');\n FS.registerDevice(FS.makedev(1, 3), {\n read: () => 0,\n write: (stream, buffer, offset, length, pos) => length,\n llseek: () => 0,\n });\n FS.mkdev('/dev/null', FS.makedev(1, 3));\n TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n FS.mkdev('/dev/tty', FS.makedev(5, 0));\n FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n var randomBuffer = new Uint8Array(1024),\n randomLeft = 0;\n var randomByte = () => {\n if (randomLeft === 0) {\n randomFill(randomBuffer);\n randomLeft = randomBuffer.byteLength;\n }\n return randomBuffer[--randomLeft];\n };\n FS.createDevice('/dev', 'random', randomByte);\n FS.createDevice('/dev', 'urandom', randomByte);\n FS.mkdir('/dev/shm');\n FS.mkdir('/dev/shm/tmp');\n },\n createSpecialDirectories() {\n FS.mkdir('/proc');\n var proc_self = FS.mkdir('/proc/self');\n FS.mkdir('/proc/self/fd');\n FS.mount(\n {\n mount() {\n var node = FS.createNode(proc_self, 'fd', 16895, 73);\n node.stream_ops = { llseek: MEMFS.stream_ops.llseek };\n node.node_ops = {\n lookup(parent, name) {\n var fd = +name;\n var stream = FS.getStreamChecked(fd);\n var ret = {\n parent: null,\n mount: { mountpoint: 'fake' },\n node_ops: { readlink: () => stream.path },\n id: fd + 1,\n };\n ret.parent = ret;\n return ret;\n },\n readdir() {\n return Array.from(FS.streams.entries())\n .filter(([k, v]) => v)\n .map(([k, v]) => k.toString());\n },\n };\n return node;\n },\n },\n {},\n '/proc/self/fd'\n );\n },\n createStandardStreams(input, output, error) {\n if (input) {\n FS.createDevice('/dev', 'stdin', input);\n } else {\n FS.symlink('/dev/tty', '/dev/stdin');\n }\n if (output) {\n FS.createDevice('/dev', 'stdout', null, output);\n } else {\n FS.symlink('/dev/tty', '/dev/stdout');\n }\n if (error) {\n FS.createDevice('/dev', 'stderr', null, error);\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr');\n }\n var stdin = FS.open('/dev/stdin', 0);\n var stdout = FS.open('/dev/stdout', 1);\n var stderr = FS.open('/dev/stderr', 1);\n },\n staticInit() {\n FS.nameTable = new Array(4096);\n FS.mount(MEMFS, {}, '/');\n FS.createDefaultDirectories();\n FS.createDefaultDevices();\n FS.createSpecialDirectories();\n FS.filesystems = { MEMFS };\n },\n init(input, output, error) {\n FS.initialized = true;\n input ??= Module['stdin'];\n output ??= Module['stdout'];\n error ??= Module['stderr'];\n FS.createStandardStreams(input, output, error);\n },\n quit() {\n FS.initialized = false;\n for (var stream of FS.streams) {\n if (stream) {\n FS.close(stream);\n }\n }\n },\n findObject(path, dontResolveLastLink) {\n var ret = FS.analyzePath(path, dontResolveLastLink);\n if (!ret.exists) {\n return null;\n }\n return ret.object;\n },\n analyzePath(path, dontResolveLastLink) {\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n path = lookup.path;\n } catch (e) {}\n var ret = {\n isRoot: false,\n exists: false,\n error: 0,\n name: null,\n path: null,\n object: null,\n parentExists: false,\n parentPath: null,\n parentObject: null,\n };\n try {\n var lookup = FS.lookupPath(path, { parent: true });\n ret.parentExists = true;\n ret.parentPath = lookup.path;\n ret.parentObject = lookup.node;\n ret.name = PATH.basename(path);\n lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n ret.exists = true;\n ret.path = lookup.path;\n ret.object = lookup.node;\n ret.name = lookup.node.name;\n ret.isRoot = lookup.path === '/';\n } catch (e) {\n ret.error = e.errno;\n }\n return ret;\n },\n createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n var parts = path.split('/').reverse();\n while (parts.length) {\n var part = parts.pop();\n if (!part) continue;\n var current = PATH.join2(parent, part);\n try {\n FS.mkdir(current);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n parent = current;\n }\n return current;\n },\n createFile(parent, name, properties, canRead, canWrite) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(canRead, canWrite);\n return FS.create(path, mode);\n },\n createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n var path = name;\n if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n path = name ? PATH.join2(parent, name) : parent;\n }\n var mode = FS_getMode(canRead, canWrite);\n var node = FS.create(path, mode);\n if (data) {\n if (typeof data == 'string') {\n var arr = new Array(data.length);\n for (var i = 0, len = data.length; i < len; ++i)\n arr[i] = data.charCodeAt(i);\n data = arr;\n }\n FS.chmod(node, mode | 146);\n var stream = FS.open(node, 577);\n FS.write(stream, data, 0, data.length, 0, canOwn);\n FS.close(stream);\n FS.chmod(node, mode);\n }\n },\n createDevice(parent, name, input, output) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(!!input, !!output);\n FS.createDevice.major ??= 64;\n var dev = FS.makedev(FS.createDevice.major++, 0);\n FS.registerDevice(dev, {\n open(stream) {\n stream.seekable = false;\n },\n close(stream) {\n if (output?.buffer?.length) {\n output(10);\n }\n },\n read(stream, buffer, offset, length, pos) {\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = input();\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset + i]);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n });\n return FS.mkdev(path, mode, dev);\n },\n forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n if (globalThis.XMLHttpRequest) {\n abort(\n '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.'\n );\n } else {\n try {\n obj.contents = readBinary(obj.url);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n },\n createLazyFile(parent, name, url, canRead, canWrite) {\n class LazyUint8Array {\n lengthKnown = false;\n chunks = [];\n get(idx) {\n if (idx > this.length - 1 || idx < 0) {\n return undefined;\n }\n var chunkOffset = idx % this.chunkSize;\n var chunkNum = (idx / this.chunkSize) | 0;\n return this.getter(chunkNum)[chunkOffset];\n }\n setDataGetter(getter) {\n this.getter = getter;\n }\n cacheLength() {\n var xhr = new XMLHttpRequest();\n xhr.open('HEAD', url, false);\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n var datalength = Number(xhr.getResponseHeader('Content-length'));\n var header;\n var hasByteServing =\n (header = xhr.getResponseHeader('Accept-Ranges')) &&\n header === 'bytes';\n var usesGzip =\n (header = xhr.getResponseHeader('Content-Encoding')) &&\n header === 'gzip';\n var chunkSize = 1024 * 1024;\n if (!hasByteServing) chunkSize = datalength;\n var doXHR = (from, to) => {\n if (from > to)\n abort(\n 'invalid range (' + from + ', ' + to + ') or no bytes requested!'\n );\n if (to > datalength - 1)\n abort('only ' + datalength + ' bytes available! programmer error!');\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n if (datalength !== chunkSize)\n xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n xhr.responseType = 'arraybuffer';\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n }\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n if (xhr.response !== undefined) {\n return new Uint8Array(xhr.response || []);\n }\n return intArrayFromString(xhr.responseText || '', true);\n };\n var lazyArray = this;\n lazyArray.setDataGetter((chunkNum) => {\n var start = chunkNum * chunkSize;\n var end = (chunkNum + 1) * chunkSize - 1;\n end = Math.min(end, datalength - 1);\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end);\n }\n if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n abort('doXHR failed!');\n return lazyArray.chunks[chunkNum];\n });\n if (usesGzip || !datalength) {\n chunkSize = datalength = 1;\n datalength = this.getter(0).length;\n chunkSize = datalength;\n out(\n 'LazyFiles on gzip forces download of the whole file when length is accessed'\n );\n }\n this._length = datalength;\n this._chunkSize = chunkSize;\n this.lengthKnown = true;\n }\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._length;\n }\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._chunkSize;\n }\n }\n if (globalThis.XMLHttpRequest) {\n if (!ENVIRONMENT_IS_WORKER)\n abort(\n 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'\n );\n var lazyArray = new LazyUint8Array();\n var properties = { isDevice: false, contents: lazyArray };\n } else {\n var properties = { isDevice: false, url };\n }\n var node = FS.createFile(parent, name, properties, canRead, canWrite);\n if (properties.contents) {\n node.contents = properties.contents;\n } else if (properties.url) {\n node.contents = null;\n node.url = properties.url;\n }\n Object.defineProperties(node, {\n usedBytes: {\n get: function () {\n return this.contents.length;\n },\n },\n });\n var stream_ops = {};\n for (const [key, fn] of Object.entries(node.stream_ops)) {\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node);\n return fn(...args);\n };\n }\n function writeChunks(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= contents.length) return 0;\n var size = Math.min(contents.length - position, length);\n if (contents.slice) {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i];\n }\n } else {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents.get(position + i);\n }\n }\n return size;\n }\n stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node);\n return writeChunks(stream, buffer, offset, length, position);\n };\n stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node);\n var ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n writeChunks(stream, (growMemViews(), HEAP8), ptr, length, position);\n return { ptr, allocated: true };\n };\n node.stream_ops = stream_ops;\n return node;\n },\n};\nvar UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {\n ptr >>>= 0;\n return ptr\n ? UTF8ArrayToString(\n (growMemViews(), HEAPU8),\n ptr,\n maxBytesToRead,\n ignoreNul\n )\n : '';\n};\nvar SYSCALLS = {\n DEFAULT_POLLMASK: 5,\n calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path;\n }\n var dir;\n if (dirfd === -100) {\n dir = FS.cwd();\n } else {\n var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n dir = dirstream.path;\n }\n if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44);\n }\n return dir;\n }\n return dir + '/' + path;\n },\n writeStat(buf, stat) {\n (growMemViews(), HEAPU32)[(buf >>> 2) >>> 0] = stat.dev;\n (growMemViews(), HEAPU32)[((buf + 4) >>> 2) >>> 0] = stat.mode;\n (growMemViews(), HEAPU32)[((buf + 8) >>> 2) >>> 0] = stat.nlink;\n (growMemViews(), HEAPU32)[((buf + 12) >>> 2) >>> 0] = stat.uid;\n (growMemViews(), HEAPU32)[((buf + 16) >>> 2) >>> 0] = stat.gid;\n (growMemViews(), HEAPU32)[((buf + 20) >>> 2) >>> 0] = stat.rdev;\n (growMemViews(), HEAP64)[((buf + 24) >>> 3) >>> 0] = BigInt(stat.size);\n (growMemViews(), HEAP32)[((buf + 32) >>> 2) >>> 0] = 4096;\n (growMemViews(), HEAP32)[((buf + 36) >>> 2) >>> 0] = stat.blocks;\n var atime = stat.atime.getTime();\n var mtime = stat.mtime.getTime();\n var ctime = stat.ctime.getTime();\n (growMemViews(), HEAP64)[((buf + 40) >>> 3) >>> 0] = BigInt(\n Math.floor(atime / 1e3)\n );\n (growMemViews(), HEAPU32)[((buf + 48) >>> 2) >>> 0] =\n (atime % 1e3) * 1e3 * 1e3;\n (growMemViews(), HEAP64)[((buf + 56) >>> 3) >>> 0] = BigInt(\n Math.floor(mtime / 1e3)\n );\n (growMemViews(), HEAPU32)[((buf + 64) >>> 2) >>> 0] =\n (mtime % 1e3) * 1e3 * 1e3;\n (growMemViews(), HEAP64)[((buf + 72) >>> 3) >>> 0] = BigInt(\n Math.floor(ctime / 1e3)\n );\n (growMemViews(), HEAPU32)[((buf + 80) >>> 2) >>> 0] =\n (ctime % 1e3) * 1e3 * 1e3;\n (growMemViews(), HEAP64)[((buf + 88) >>> 3) >>> 0] = BigInt(stat.ino);\n return 0;\n },\n writeStatFs(buf, stats) {\n (growMemViews(), HEAPU32)[((buf + 4) >>> 2) >>> 0] = stats.bsize;\n (growMemViews(), HEAPU32)[((buf + 60) >>> 2) >>> 0] = stats.bsize;\n (growMemViews(), HEAP64)[((buf + 8) >>> 3) >>> 0] = BigInt(stats.blocks);\n (growMemViews(), HEAP64)[((buf + 16) >>> 3) >>> 0] = BigInt(stats.bfree);\n (growMemViews(), HEAP64)[((buf + 24) >>> 3) >>> 0] = BigInt(stats.bavail);\n (growMemViews(), HEAP64)[((buf + 32) >>> 3) >>> 0] = BigInt(stats.files);\n (growMemViews(), HEAP64)[((buf + 40) >>> 3) >>> 0] = BigInt(stats.ffree);\n (growMemViews(), HEAPU32)[((buf + 48) >>> 2) >>> 0] = stats.fsid;\n (growMemViews(), HEAPU32)[((buf + 64) >>> 2) >>> 0] = stats.flags;\n (growMemViews(), HEAPU32)[((buf + 56) >>> 2) >>> 0] = stats.namelen;\n },\n doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (flags & 2) {\n return 0;\n }\n var buffer = (growMemViews(), HEAPU8).slice(addr, addr + len);\n FS.msync(stream, buffer, offset, len, flags);\n },\n getStreamFromFD(fd) {\n var stream = FS.getStreamChecked(fd);\n return stream;\n },\n varargs: undefined,\n getStr(ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n};\nfunction ___syscall_fcntl64(fd, cmd, varargs) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(3, 0, 1, fd, cmd, varargs);\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (cmd) {\n case 0: {\n var arg = syscallGetVarargI();\n if (arg < 0) {\n return -28;\n }\n while (FS.streams[arg]) {\n arg++;\n }\n var newStream;\n newStream = FS.dupStream(stream, arg);\n return newStream.fd;\n }\n case 1:\n case 2:\n return 0;\n case 3:\n return stream.flags;\n case 4: {\n var arg = syscallGetVarargI();\n stream.flags |= arg;\n return 0;\n }\n case 12: {\n var arg = syscallGetVarargP();\n var offset = 0;\n (growMemViews(), HEAP16)[((arg + offset) >>> 1) >>> 0] = 2;\n return 0;\n }\n case 13:\n case 14:\n return 0;\n }\n return -28;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_ioctl(fd, op, varargs) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(4, 0, 1, fd, op, varargs);\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (op) {\n case 21509: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21505: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcgets) {\n var termios = stream.tty.ops.ioctl_tcgets(stream);\n var argp = syscallGetVarargP();\n (growMemViews(), HEAP32)[(argp >>> 2) >>> 0] = termios.c_iflag || 0;\n (growMemViews(), HEAP32)[((argp + 4) >>> 2) >>> 0] =\n termios.c_oflag || 0;\n (growMemViews(), HEAP32)[((argp + 8) >>> 2) >>> 0] =\n termios.c_cflag || 0;\n (growMemViews(), HEAP32)[((argp + 12) >>> 2) >>> 0] =\n termios.c_lflag || 0;\n for (var i = 0; i < 32; i++) {\n (growMemViews(), HEAP8)[(argp + i + 17) >>> 0] =\n termios.c_cc[i] || 0;\n }\n return 0;\n }\n return 0;\n }\n case 21510:\n case 21511:\n case 21512: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21506:\n case 21507:\n case 21508: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP();\n var c_iflag = (growMemViews(), HEAP32)[(argp >>> 2) >>> 0];\n var c_oflag = (growMemViews(), HEAP32)[((argp + 4) >>> 2) >>> 0];\n var c_cflag = (growMemViews(), HEAP32)[((argp + 8) >>> 2) >>> 0];\n var c_lflag = (growMemViews(), HEAP32)[((argp + 12) >>> 2) >>> 0];\n var c_cc = [];\n for (var i = 0; i < 32; i++) {\n c_cc.push((growMemViews(), HEAP8)[(argp + i + 17) >>> 0]);\n }\n return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n c_iflag,\n c_oflag,\n c_cflag,\n c_lflag,\n c_cc,\n });\n }\n return 0;\n }\n case 21519: {\n if (!stream.tty) return -59;\n var argp = syscallGetVarargP();\n (growMemViews(), HEAP32)[(argp >>> 2) >>> 0] = 0;\n return 0;\n }\n case 21520: {\n if (!stream.tty) return -59;\n return -28;\n }\n case 21537:\n case 21531: {\n var argp = syscallGetVarargP();\n return FS.ioctl(stream, op, argp);\n }\n case 21523: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tiocgwinsz) {\n var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n var argp = syscallGetVarargP();\n (growMemViews(), HEAP16)[(argp >>> 1) >>> 0] = winsize[0];\n (growMemViews(), HEAP16)[((argp + 2) >>> 1) >>> 0] = winsize[1];\n }\n return 0;\n }\n case 21524: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21515: {\n if (!stream.tty) return -59;\n return 0;\n }\n default:\n return -28;\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_openat(dirfd, path, flags, varargs) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(5, 0, 1, dirfd, path, flags, varargs);\n path >>>= 0;\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n var mode = varargs ? syscallGetVarargI() : 0;\n return FS.open(path, flags, mode).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar __abort_js = () => abort('');\nfunction __emscripten_init_main_thread_js(tb) {\n tb >>>= 0;\n __emscripten_thread_init(\n tb,\n !ENVIRONMENT_IS_WORKER,\n 1,\n !ENVIRONMENT_IS_WEB,\n 65536,\n false\n );\n PThread.threadInitTLS();\n}\nvar handleException = (e) => {\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS;\n }\n quit_(1, e);\n};\nvar maybeExit = () => {\n if (!keepRuntimeAlive()) {\n try {\n if (ENVIRONMENT_IS_PTHREAD) {\n if (_pthread_self()) __emscripten_thread_exit(EXITSTATUS);\n return;\n }\n _exit(EXITSTATUS);\n } catch (e) {\n handleException(e);\n }\n }\n};\nvar callUserCallback = (func) => {\n if (ABORT) {\n return;\n }\n try {\n func();\n maybeExit();\n } catch (e) {\n handleException(e);\n }\n};\nfunction __emscripten_thread_mailbox_await(pthread_ptr) {\n pthread_ptr >>>= 0;\n if (Atomics.waitAsync) {\n var wait = Atomics.waitAsync(\n (growMemViews(), HEAP32),\n pthread_ptr >>> 2,\n pthread_ptr\n );\n wait.value.then(checkMailbox);\n var waitingAsync = pthread_ptr + 128;\n Atomics.store((growMemViews(), HEAP32), waitingAsync >>> 2, 1);\n }\n}\nvar checkMailbox = () =>\n callUserCallback(() => {\n var pthread_ptr = _pthread_self();\n if (pthread_ptr) {\n __emscripten_thread_mailbox_await(pthread_ptr);\n __emscripten_check_mailbox();\n }\n });\nfunction __emscripten_notify_mailbox_postmessage(targetThread, currThreadId) {\n targetThread >>>= 0;\n currThreadId >>>= 0;\n if (targetThread == currThreadId) {\n setTimeout(checkMailbox);\n } else if (ENVIRONMENT_IS_PTHREAD) {\n postMessage({ targetThread, cmd: 'checkMailbox' });\n } else {\n var worker = PThread.pthreads[targetThread];\n if (!worker) {\n return;\n }\n worker.postMessage({ cmd: 'checkMailbox' });\n }\n}\nvar proxiedJSCallArgs = [];\nfunction __emscripten_receive_on_main_thread_js(\n funcIndex,\n emAsmAddr,\n callingThread,\n numCallArgs,\n args\n) {\n emAsmAddr >>>= 0;\n callingThread >>>= 0;\n args >>>= 0;\n numCallArgs /= 2;\n proxiedJSCallArgs.length = numCallArgs;\n var b = args >>> 3;\n for (var i = 0; i < numCallArgs; i++) {\n if ((growMemViews(), HEAP64)[(b + 2 * i) >>> 0]) {\n proxiedJSCallArgs[i] = (growMemViews(), HEAP64)[(b + 2 * i + 1) >>> 0];\n } else {\n proxiedJSCallArgs[i] = (growMemViews(), HEAPF64)[(b + 2 * i + 1) >>> 0];\n }\n }\n var func = proxiedFunctionTable[funcIndex];\n PThread.currentProxiedOperationCallerThread = callingThread;\n var rtn = func(...proxiedJSCallArgs);\n PThread.currentProxiedOperationCallerThread = 0;\n return rtn;\n}\nfunction __emscripten_thread_cleanup(thread) {\n thread >>>= 0;\n if (!ENVIRONMENT_IS_PTHREAD) cleanupThread(thread);\n else postMessage({ cmd: 'cleanupThread', thread });\n}\nfunction __emscripten_thread_set_strongref(thread) {\n thread >>>= 0;\n if (ENVIRONMENT_IS_NODE) {\n PThread.pthreads[thread].ref();\n }\n}\nfunction __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(\n 6,\n 0,\n 1,\n len,\n prot,\n flags,\n fd,\n offset,\n allocated,\n addr\n );\n len >>>= 0;\n offset = bigintToI53Checked(offset);\n allocated >>>= 0;\n addr >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var res = FS.mmap(stream, len, offset, prot, flags);\n var ptr = res.ptr;\n (growMemViews(), HEAP32)[(allocated >>> 2) >>> 0] = res.allocated;\n (growMemViews(), HEAPU32)[(addr >>> 2) >>> 0] = ptr;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction __munmap_js(addr, len, prot, flags, fd, offset) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(7, 0, 1, addr, len, prot, flags, fd, offset);\n addr >>>= 0;\n len >>>= 0;\n offset = bigintToI53Checked(offset);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset);\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar stringToUTF8 = (str, outPtr, maxBytesToWrite) =>\n stringToUTF8Array(str, (growMemViews(), HEAPU8), outPtr, maxBytesToWrite);\nvar __tzset_js = function (timezone, daylight, std_name, dst_name) {\n timezone >>>= 0;\n daylight >>>= 0;\n std_name >>>= 0;\n dst_name >>>= 0;\n var currentYear = new Date().getFullYear();\n var winter = new Date(currentYear, 0, 1);\n var summer = new Date(currentYear, 6, 1);\n var winterOffset = winter.getTimezoneOffset();\n var summerOffset = summer.getTimezoneOffset();\n var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n (growMemViews(), HEAPU32)[(timezone >>> 2) >>> 0] = stdTimezoneOffset * 60;\n (growMemViews(), HEAP32)[(daylight >>> 2) >>> 0] = Number(\n winterOffset != summerOffset\n );\n var extractZone = (timezoneOffset) => {\n var sign = timezoneOffset >= 0 ? '-' : '+';\n var absOffset = Math.abs(timezoneOffset);\n var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n var minutes = String(absOffset % 60).padStart(2, '0');\n return `UTC${sign}${hours}${minutes}`;\n };\n var winterName = extractZone(winterOffset);\n var summerName = extractZone(summerOffset);\n if (summerOffset < winterOffset) {\n stringToUTF8(winterName, std_name, 17);\n stringToUTF8(summerName, dst_name, 17);\n } else {\n stringToUTF8(winterName, dst_name, 17);\n stringToUTF8(summerName, std_name, 17);\n }\n};\nvar _emscripten_get_now = () => performance.timeOrigin + performance.now();\nvar _emscripten_date_now = () => Date.now();\nvar nowIsMonotonic = 1;\nvar checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;\nfunction _clock_time_get(clk_id, ignored_precision, ptime) {\n ignored_precision = bigintToI53Checked(ignored_precision);\n ptime >>>= 0;\n if (!checkWasiClock(clk_id)) {\n return 28;\n }\n var now;\n if (clk_id === 0) {\n now = _emscripten_date_now();\n } else if (nowIsMonotonic) {\n now = _emscripten_get_now();\n } else {\n return 52;\n }\n var nsec = Math.round(now * 1e3 * 1e3);\n (growMemViews(), HEAP64)[(ptime >>> 3) >>> 0] = BigInt(nsec);\n return 0;\n}\nvar _emscripten_check_blocking_allowed = () => {};\nvar runtimeKeepalivePush = () => {\n runtimeKeepaliveCounter += 1;\n};\nvar _emscripten_exit_with_live_runtime = () => {\n runtimeKeepalivePush();\n throw 'unwind';\n};\nvar getHeapMax = () => 4294901760;\nfunction _emscripten_get_heap_max() {\n return getHeapMax();\n}\nvar _emscripten_has_asyncify = () => 1;\nvar _emscripten_num_logical_cores = () =>\n ENVIRONMENT_IS_NODE\n ? require('os').cpus().length\n : navigator['hardwareConcurrency'];\nvar growMemory = (size) => {\n var oldHeapSize = wasmMemory.buffer.byteLength;\n var pages = ((size - oldHeapSize + 65535) / 65536) | 0;\n try {\n wasmMemory.grow(pages);\n updateMemoryViews();\n return 1;\n } catch (e) {}\n};\nfunction _emscripten_resize_heap(requestedSize) {\n requestedSize >>>= 0;\n var oldSize = (growMemViews(), HEAPU8).length;\n if (requestedSize <= oldSize) {\n return false;\n }\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n var newSize = Math.min(\n maxHeapSize,\n alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)\n );\n var replacement = growMemory(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n}\nvar stringToUTF8OnStack = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n};\nvar writeI53ToI64 = (ptr, num) => {\n (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0] = num;\n var lower = (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0];\n (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0] =\n (num - lower) / 4294967296;\n};\nvar stringToNewUTF8 = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = _malloc(size);\n if (ret) stringToUTF8(str, ret, size);\n return ret;\n};\nvar readI53FromI64 = (ptr) =>\n (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0] +\n (growMemViews(), HEAP32)[((ptr + 4) >>> 2) >>> 0] * 4294967296;\nvar WebGPU = {\n Internals: {\n jsObjects: [],\n jsObjectInsert: (ptr, jsObject) => {\n ptr >>>= 0;\n WebGPU.Internals.jsObjects[ptr] = jsObject;\n },\n bufferOnUnmaps: [],\n futures: [],\n futureInsert: (futureId, promise) => {\n WebGPU.Internals.futures[futureId] = new Promise((resolve) =>\n promise.finally(() => resolve(futureId))\n );\n },\n },\n getJsObject: (ptr) => {\n if (!ptr) return undefined;\n ptr >>>= 0;\n return WebGPU.Internals.jsObjects[ptr];\n },\n importJsAdapter: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateAdapter(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroup: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroup(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroupLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroupLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBuffer: (buffer, parentPtr = 0) => {\n assert(buffer.mapState === 'unmapped');\n var bufferPtr = _emwgpuCreateBuffer(parentPtr);\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n return bufferPtr;\n },\n importJsCommandBuffer: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandBuffer(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsCommandEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsDevice: (device, parentPtr = 0) => {\n var queuePtr = _emwgpuCreateQueue(parentPtr);\n var devicePtr = _emwgpuCreateDevice(parentPtr, queuePtr);\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n return devicePtr;\n },\n importJsExternalTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateExternalTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsPipelineLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreatePipelineLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQuerySet: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQuerySet(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQueue: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQueue(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundle: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundle(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundleEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundleEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSampler: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSampler(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsShaderModule: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateShaderModule(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSurface: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSurface(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTextureView: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTextureView(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n errorCallback: (callback, type, message, userdata) => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(message);\n ((a1, a2, a3) => dynCall_viii(callback, a1, a2, a3))(\n type,\n messagePtr,\n userdata\n );\n stackRestore(sp);\n },\n iterateExtensions: (root, handlers) => {\n for (\n var ptr = (growMemViews(), HEAPU32)[(root >>> 2) >>> 0];\n ptr;\n ptr = (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0]\n ) {\n var sType = (growMemViews(), HEAP32)[((ptr + 4) >>> 2) >>> 0];\n var handler = handlers[sType](ptr);\n }\n },\n setStringView: (ptr, data, length) => {\n (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0] = data;\n (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0] = length;\n },\n makeStringFromStringView: (stringViewPtr) => {\n var ptr = (growMemViews(), HEAPU32)[(stringViewPtr >>> 2) >>> 0];\n var length = (growMemViews(), HEAPU32)[((stringViewPtr + 4) >>> 2) >>> 0];\n return UTF8ToString(ptr, length);\n },\n makeStringFromOptionalStringView: (stringViewPtr) => {\n var ptr = (growMemViews(), HEAPU32)[(stringViewPtr >>> 2) >>> 0];\n var length = (growMemViews(), HEAPU32)[((stringViewPtr + 4) >>> 2) >>> 0];\n if (!ptr) {\n if (length === 0) {\n return '';\n }\n return undefined;\n }\n return UTF8ToString(ptr, length);\n },\n makeColor: (ptr) => ({\n r: (growMemViews(), HEAPF64)[(ptr >>> 3) >>> 0],\n g: (growMemViews(), HEAPF64)[((ptr + 8) >>> 3) >>> 0],\n b: (growMemViews(), HEAPF64)[((ptr + 16) >>> 3) >>> 0],\n a: (growMemViews(), HEAPF64)[((ptr + 24) >>> 3) >>> 0],\n }),\n makeExtent3D: (ptr) => ({\n width: (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0],\n height: (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0],\n depthOrArrayLayers: (growMemViews(), HEAPU32)[((ptr + 8) >>> 2) >>> 0],\n }),\n makeOrigin3D: (ptr) => ({\n x: (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0],\n y: (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0],\n z: (growMemViews(), HEAPU32)[((ptr + 8) >>> 2) >>> 0],\n }),\n makeTexelCopyTextureInfo: (ptr) => ({\n texture: WebGPU.getJsObject((growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0]),\n mipLevel: (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0],\n origin: WebGPU.makeOrigin3D(ptr + 8),\n aspect:\n WebGPU.TextureAspect[(growMemViews(), HEAP32)[((ptr + 20) >>> 2) >>> 0]],\n }),\n makeTexelCopyBufferLayout: (ptr) => {\n var bytesPerRow = (growMemViews(), HEAPU32)[((ptr + 8) >>> 2) >>> 0];\n var rowsPerImage = (growMemViews(), HEAPU32)[((ptr + 12) >>> 2) >>> 0];\n return {\n offset: readI53FromI64(ptr),\n bytesPerRow: bytesPerRow === 4294967295 ? undefined : bytesPerRow,\n rowsPerImage: rowsPerImage === 4294967295 ? undefined : rowsPerImage,\n };\n },\n makeTexelCopyBufferInfo: (ptr) => {\n var layoutPtr = ptr + 0;\n var bufferCopyView = WebGPU.makeTexelCopyBufferLayout(layoutPtr);\n bufferCopyView['buffer'] = WebGPU.getJsObject(\n (growMemViews(), HEAPU32)[((ptr + 16) >>> 2) >>> 0]\n );\n return bufferCopyView;\n },\n makePassTimestampWrites: (ptr) => {\n if (ptr === 0) return undefined;\n return {\n querySet: WebGPU.getJsObject(\n (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0]\n ),\n beginningOfPassWriteIndex: (growMemViews(), HEAPU32)[\n ((ptr + 8) >>> 2) >>> 0\n ],\n endOfPassWriteIndex: (growMemViews(), HEAPU32)[((ptr + 12) >>> 2) >>> 0],\n };\n },\n makePipelineConstants: (constantCount, constantsPtr) => {\n if (!constantCount) return;\n var constants = {};\n for (var i = 0; i < constantCount; ++i) {\n var entryPtr = constantsPtr + 24 * i;\n var key = WebGPU.makeStringFromStringView(entryPtr + 4);\n constants[key] = (growMemViews(), HEAPF64)[((entryPtr + 16) >>> 3) >>> 0];\n }\n return constants;\n },\n makePipelineLayout: (layoutPtr) => {\n if (!layoutPtr) return 'auto';\n return WebGPU.getJsObject(layoutPtr);\n },\n makeComputeState: (ptr) => {\n if (!ptr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(\n (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0]\n ),\n constants: WebGPU.makePipelineConstants(\n (growMemViews(), HEAPU32)[((ptr + 16) >>> 2) >>> 0],\n (growMemViews(), HEAPU32)[((ptr + 20) >>> 2) >>> 0]\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(ptr + 8),\n };\n return desc;\n },\n makeComputePipelineDesc: (descriptor) => {\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n layout: WebGPU.makePipelineLayout(\n (growMemViews(), HEAPU32)[((descriptor + 12) >>> 2) >>> 0]\n ),\n compute: WebGPU.makeComputeState(descriptor + 16),\n };\n return desc;\n },\n makeRenderPipelineDesc: (descriptor) => {\n function makePrimitiveState(psPtr) {\n if (!psPtr) return undefined;\n return {\n topology:\n WebGPU.PrimitiveTopology[\n (growMemViews(), HEAP32)[((psPtr + 4) >>> 2) >>> 0]\n ],\n stripIndexFormat:\n WebGPU.IndexFormat[\n (growMemViews(), HEAP32)[((psPtr + 8) >>> 2) >>> 0]\n ],\n frontFace:\n WebGPU.FrontFace[\n (growMemViews(), HEAP32)[((psPtr + 12) >>> 2) >>> 0]\n ],\n cullMode:\n WebGPU.CullMode[(growMemViews(), HEAP32)[((psPtr + 16) >>> 2) >>> 0]],\n unclippedDepth: !!(growMemViews(), HEAPU32)[((psPtr + 20) >>> 2) >>> 0],\n };\n }\n function makeBlendComponent(bdPtr) {\n if (!bdPtr) return undefined;\n return {\n operation:\n WebGPU.BlendOperation[(growMemViews(), HEAP32)[(bdPtr >>> 2) >>> 0]],\n srcFactor:\n WebGPU.BlendFactor[\n (growMemViews(), HEAP32)[((bdPtr + 4) >>> 2) >>> 0]\n ],\n dstFactor:\n WebGPU.BlendFactor[\n (growMemViews(), HEAP32)[((bdPtr + 8) >>> 2) >>> 0]\n ],\n };\n }\n function makeBlendState(bsPtr) {\n if (!bsPtr) return undefined;\n return {\n alpha: makeBlendComponent(bsPtr + 12),\n color: makeBlendComponent(bsPtr + 0),\n };\n }\n function makeColorState(csPtr) {\n var format =\n WebGPU.TextureFormat[\n (growMemViews(), HEAP32)[((csPtr + 4) >>> 2) >>> 0]\n ];\n return format\n ? {\n format,\n blend: makeBlendState(\n (growMemViews(), HEAPU32)[((csPtr + 8) >>> 2) >>> 0]\n ),\n writeMask: (growMemViews(), HEAPU32)[((csPtr + 16) >>> 2) >>> 0],\n }\n : undefined;\n }\n function makeColorStates(count, csArrayPtr) {\n var states = [];\n for (var i = 0; i < count; ++i) {\n states.push(makeColorState(csArrayPtr + 24 * i));\n }\n return states;\n }\n function makeStencilStateFace(ssfPtr) {\n return {\n compare:\n WebGPU.CompareFunction[\n (growMemViews(), HEAP32)[(ssfPtr >>> 2) >>> 0]\n ],\n failOp:\n WebGPU.StencilOperation[\n (growMemViews(), HEAP32)[((ssfPtr + 4) >>> 2) >>> 0]\n ],\n depthFailOp:\n WebGPU.StencilOperation[\n (growMemViews(), HEAP32)[((ssfPtr + 8) >>> 2) >>> 0]\n ],\n passOp:\n WebGPU.StencilOperation[\n (growMemViews(), HEAP32)[((ssfPtr + 12) >>> 2) >>> 0]\n ],\n };\n }\n function makeDepthStencilState(dssPtr) {\n if (!dssPtr) return undefined;\n return {\n format:\n WebGPU.TextureFormat[\n (growMemViews(), HEAP32)[((dssPtr + 4) >>> 2) >>> 0]\n ],\n depthWriteEnabled: !!(growMemViews(), HEAPU32)[\n ((dssPtr + 8) >>> 2) >>> 0\n ],\n depthCompare:\n WebGPU.CompareFunction[\n (growMemViews(), HEAP32)[((dssPtr + 12) >>> 2) >>> 0]\n ],\n stencilFront: makeStencilStateFace(dssPtr + 16),\n stencilBack: makeStencilStateFace(dssPtr + 32),\n stencilReadMask: (growMemViews(), HEAPU32)[((dssPtr + 48) >>> 2) >>> 0],\n stencilWriteMask: (growMemViews(), HEAPU32)[\n ((dssPtr + 52) >>> 2) >>> 0\n ],\n depthBias: (growMemViews(), HEAP32)[((dssPtr + 56) >>> 2) >>> 0],\n depthBiasSlopeScale: (growMemViews(), HEAPF32)[\n ((dssPtr + 60) >>> 2) >>> 0\n ],\n depthBiasClamp: (growMemViews(), HEAPF32)[((dssPtr + 64) >>> 2) >>> 0],\n };\n }\n function makeVertexAttribute(vaPtr) {\n return {\n format:\n WebGPU.VertexFormat[\n (growMemViews(), HEAP32)[((vaPtr + 4) >>> 2) >>> 0]\n ],\n offset: readI53FromI64(vaPtr + 8),\n shaderLocation: (growMemViews(), HEAPU32)[((vaPtr + 16) >>> 2) >>> 0],\n };\n }\n function makeVertexAttributes(count, vaArrayPtr) {\n var vas = [];\n for (var i = 0; i < count; ++i) {\n vas.push(makeVertexAttribute(vaArrayPtr + i * 24));\n }\n return vas;\n }\n function makeVertexBuffer(vbPtr) {\n if (!vbPtr) return undefined;\n var stepMode =\n WebGPU.VertexStepMode[\n (growMemViews(), HEAP32)[((vbPtr + 4) >>> 2) >>> 0]\n ];\n var attributeCount = (growMemViews(), HEAPU32)[\n ((vbPtr + 16) >>> 2) >>> 0\n ];\n if (!stepMode && !attributeCount) {\n return null;\n }\n return {\n arrayStride: readI53FromI64(vbPtr + 8),\n stepMode,\n attributes: makeVertexAttributes(\n attributeCount,\n (growMemViews(), HEAPU32)[((vbPtr + 20) >>> 2) >>> 0]\n ),\n };\n }\n function makeVertexBuffers(count, vbArrayPtr) {\n if (!count) return undefined;\n var vbs = [];\n for (var i = 0; i < count; ++i) {\n vbs.push(makeVertexBuffer(vbArrayPtr + i * 24));\n }\n return vbs;\n }\n function makeVertexState(viPtr) {\n if (!viPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(\n (growMemViews(), HEAPU32)[((viPtr + 4) >>> 2) >>> 0]\n ),\n constants: WebGPU.makePipelineConstants(\n (growMemViews(), HEAPU32)[((viPtr + 16) >>> 2) >>> 0],\n (growMemViews(), HEAPU32)[((viPtr + 20) >>> 2) >>> 0]\n ),\n buffers: makeVertexBuffers(\n (growMemViews(), HEAPU32)[((viPtr + 24) >>> 2) >>> 0],\n (growMemViews(), HEAPU32)[((viPtr + 28) >>> 2) >>> 0]\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(viPtr + 8),\n };\n return desc;\n }\n function makeMultisampleState(msPtr) {\n if (!msPtr) return undefined;\n return {\n count: (growMemViews(), HEAPU32)[((msPtr + 4) >>> 2) >>> 0],\n mask: (growMemViews(), HEAPU32)[((msPtr + 8) >>> 2) >>> 0],\n alphaToCoverageEnabled: !!(growMemViews(), HEAPU32)[\n ((msPtr + 12) >>> 2) >>> 0\n ],\n };\n }\n function makeFragmentState(fsPtr) {\n if (!fsPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(\n (growMemViews(), HEAPU32)[((fsPtr + 4) >>> 2) >>> 0]\n ),\n constants: WebGPU.makePipelineConstants(\n (growMemViews(), HEAPU32)[((fsPtr + 16) >>> 2) >>> 0],\n (growMemViews(), HEAPU32)[((fsPtr + 20) >>> 2) >>> 0]\n ),\n targets: makeColorStates(\n (growMemViews(), HEAPU32)[((fsPtr + 24) >>> 2) >>> 0],\n (growMemViews(), HEAPU32)[((fsPtr + 28) >>> 2) >>> 0]\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(fsPtr + 8),\n };\n return desc;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n layout: WebGPU.makePipelineLayout(\n (growMemViews(), HEAPU32)[((descriptor + 12) >>> 2) >>> 0]\n ),\n vertex: makeVertexState(descriptor + 16),\n primitive: makePrimitiveState(descriptor + 48),\n depthStencil: makeDepthStencilState(\n (growMemViews(), HEAPU32)[((descriptor + 72) >>> 2) >>> 0]\n ),\n multisample: makeMultisampleState(descriptor + 76),\n fragment: makeFragmentState(\n (growMemViews(), HEAPU32)[((descriptor + 92) >>> 2) >>> 0]\n ),\n };\n return desc;\n },\n fillLimitStruct: (limits, limitsOutPtr) => {\n var nextInChainPtr = (growMemViews(), HEAPU32)[(limitsOutPtr >>> 2) >>> 0];\n function setLimitValueU32(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n (growMemViews(), HEAPU32)[((basePtr + limitOffset) >>> 2) >>> 0] =\n limitValue;\n }\n function setLimitValueU64(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n writeI53ToI64(basePtr + limitOffset, limitValue);\n }\n setLimitValueU32('maxTextureDimension1D', limitsOutPtr, 4);\n setLimitValueU32('maxTextureDimension2D', limitsOutPtr, 8);\n setLimitValueU32('maxTextureDimension3D', limitsOutPtr, 12);\n setLimitValueU32('maxTextureArrayLayers', limitsOutPtr, 16);\n setLimitValueU32('maxBindGroups', limitsOutPtr, 20);\n setLimitValueU32('maxBindGroupsPlusVertexBuffers', limitsOutPtr, 24);\n setLimitValueU32('maxBindingsPerBindGroup', limitsOutPtr, 28);\n setLimitValueU32(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsOutPtr,\n 32\n );\n setLimitValueU32(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsOutPtr,\n 36\n );\n setLimitValueU32('maxSampledTexturesPerShaderStage', limitsOutPtr, 40);\n setLimitValueU32('maxSamplersPerShaderStage', limitsOutPtr, 44);\n setLimitValueU32('maxStorageBuffersPerShaderStage', limitsOutPtr, 48);\n setLimitValueU32('maxStorageTexturesPerShaderStage', limitsOutPtr, 52);\n setLimitValueU32('maxUniformBuffersPerShaderStage', limitsOutPtr, 56);\n setLimitValueU32('minUniformBufferOffsetAlignment', limitsOutPtr, 80);\n setLimitValueU32('minStorageBufferOffsetAlignment', limitsOutPtr, 84);\n setLimitValueU64('maxUniformBufferBindingSize', limitsOutPtr, 64);\n setLimitValueU64('maxStorageBufferBindingSize', limitsOutPtr, 72);\n setLimitValueU32('maxVertexBuffers', limitsOutPtr, 88);\n setLimitValueU64('maxBufferSize', limitsOutPtr, 96);\n setLimitValueU32('maxVertexAttributes', limitsOutPtr, 104);\n setLimitValueU32('maxVertexBufferArrayStride', limitsOutPtr, 108);\n setLimitValueU32('maxInterStageShaderVariables', limitsOutPtr, 112);\n setLimitValueU32('maxColorAttachments', limitsOutPtr, 116);\n setLimitValueU32('maxColorAttachmentBytesPerSample', limitsOutPtr, 120);\n setLimitValueU32('maxComputeWorkgroupStorageSize', limitsOutPtr, 124);\n setLimitValueU32('maxComputeInvocationsPerWorkgroup', limitsOutPtr, 128);\n setLimitValueU32('maxComputeWorkgroupSizeX', limitsOutPtr, 132);\n setLimitValueU32('maxComputeWorkgroupSizeY', limitsOutPtr, 136);\n setLimitValueU32('maxComputeWorkgroupSizeZ', limitsOutPtr, 140);\n setLimitValueU32('maxComputeWorkgroupsPerDimension', limitsOutPtr, 144);\n setLimitValueU32('maxImmediateSize', limitsOutPtr, 148);\n if (nextInChainPtr !== 0) {\n var sType = (growMemViews(), HEAP32)[((nextInChainPtr + 4) >>> 2) >>> 0];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n setLimitValueU32(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 8,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 16,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 12,\n limits.maxStorageTexturesPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 20,\n limits.maxStorageTexturesPerShaderStage\n );\n }\n },\n fillAdapterInfoStruct: (info, infoStruct) => {\n (growMemViews(), HEAPU32)[((infoStruct + 52) >>> 2) >>> 0] =\n info.subgroupMinSize;\n (growMemViews(), HEAPU32)[((infoStruct + 56) >>> 2) >>> 0] =\n info.subgroupMaxSize;\n var strs = info.vendor + info.architecture + info.device + info.description;\n var strPtr = stringToNewUTF8(strs);\n var vendorLen = lengthBytesUTF8(info.vendor);\n WebGPU.setStringView(infoStruct + 4, strPtr, vendorLen);\n strPtr += vendorLen;\n var architectureLen = lengthBytesUTF8(info.architecture);\n WebGPU.setStringView(infoStruct + 12, strPtr, architectureLen);\n strPtr += architectureLen;\n var deviceLen = lengthBytesUTF8(info.device);\n WebGPU.setStringView(infoStruct + 20, strPtr, deviceLen);\n strPtr += deviceLen;\n var descriptionLen = lengthBytesUTF8(info.description);\n WebGPU.setStringView(infoStruct + 28, strPtr, descriptionLen);\n strPtr += descriptionLen;\n (growMemViews(), HEAP32)[((infoStruct + 36) >>> 2) >>> 0] = 2;\n var adapterType = info.isFallbackAdapter ? 3 : 4;\n (growMemViews(), HEAP32)[((infoStruct + 40) >>> 2) >>> 0] = adapterType;\n (growMemViews(), HEAPU32)[((infoStruct + 44) >>> 2) >>> 0] = 0;\n (growMemViews(), HEAPU32)[((infoStruct + 48) >>> 2) >>> 0] = 0;\n },\n AddressMode: [, 'clamp-to-edge', 'repeat', 'mirror-repeat'],\n BlendFactor: [\n ,\n 'zero',\n 'one',\n 'src',\n 'one-minus-src',\n 'src-alpha',\n 'one-minus-src-alpha',\n 'dst',\n 'one-minus-dst',\n 'dst-alpha',\n 'one-minus-dst-alpha',\n 'src-alpha-saturated',\n 'constant',\n 'one-minus-constant',\n 'src1',\n 'one-minus-src1',\n 'src1-alpha',\n 'one-minus-src1-alpha',\n ],\n BlendOperation: [, 'add', 'subtract', 'reverse-subtract', 'min', 'max'],\n BufferBindingType: [, , 'uniform', 'storage', 'read-only-storage'],\n BufferMapState: [, 'unmapped', 'pending', 'mapped'],\n CompareFunction: [\n ,\n 'never',\n 'less',\n 'equal',\n 'less-equal',\n 'greater',\n 'not-equal',\n 'greater-equal',\n 'always',\n ],\n CompilationInfoRequestStatus: [, 'success', 'callback-cancelled'],\n ComponentSwizzle: [, '0', '1', 'r', 'g', 'b', 'a'],\n CompositeAlphaMode: [\n ,\n 'opaque',\n 'premultiplied',\n 'unpremultiplied',\n 'inherit',\n ],\n CullMode: [, 'none', 'front', 'back'],\n ErrorFilter: [, 'validation', 'out-of-memory', 'internal'],\n FeatureLevel: [, 'compatibility', 'core'],\n FeatureName: {\n 1: 'core-features-and-limits',\n 2: 'depth-clip-control',\n 3: 'depth32float-stencil8',\n 4: 'texture-compression-bc',\n 5: 'texture-compression-bc-sliced-3d',\n 6: 'texture-compression-etc2',\n 7: 'texture-compression-astc',\n 8: 'texture-compression-astc-sliced-3d',\n 9: 'timestamp-query',\n 10: 'indirect-first-instance',\n 11: 'shader-f16',\n 12: 'rg11b10ufloat-renderable',\n 13: 'bgra8unorm-storage',\n 14: 'float32-filterable',\n 15: 'float32-blendable',\n 16: 'clip-distances',\n 17: 'dual-source-blending',\n 18: 'subgroups',\n 19: 'texture-formats-tier1',\n 20: 'texture-formats-tier2',\n 21: 'primitive-index',\n 22: 'texture-component-swizzle',\n 327692: 'chromium-experimental-unorm16-texture-formats',\n 327729: 'chromium-experimental-multi-draw-indirect',\n },\n FilterMode: [, 'nearest', 'linear'],\n FrontFace: [, 'ccw', 'cw'],\n IndexFormat: [, 'uint16', 'uint32'],\n InstanceFeatureName: [\n ,\n 'timed-wait-any',\n 'shader-source-spirv',\n 'multiple-devices-per-adapter',\n ],\n LoadOp: [, 'load', 'clear'],\n MipmapFilterMode: [, 'nearest', 'linear'],\n OptionalBool: ['false', 'true'],\n PowerPreference: [, 'low-power', 'high-performance'],\n PredefinedColorSpace: [, 'srgb', 'display-p3'],\n PrimitiveTopology: [\n ,\n 'point-list',\n 'line-list',\n 'line-strip',\n 'triangle-list',\n 'triangle-strip',\n ],\n QueryType: [, 'occlusion', 'timestamp'],\n SamplerBindingType: [, , 'filtering', 'non-filtering', 'comparison'],\n Status: [, 'success', 'error'],\n StencilOperation: [\n ,\n 'keep',\n 'zero',\n 'replace',\n 'invert',\n 'increment-clamp',\n 'decrement-clamp',\n 'increment-wrap',\n 'decrement-wrap',\n ],\n StorageTextureAccess: [, , 'write-only', 'read-only', 'read-write'],\n StoreOp: [, 'store', 'discard'],\n SurfaceGetCurrentTextureStatus: [\n ,\n 'success-optimal',\n 'success-suboptimal',\n 'timeout',\n 'outdated',\n 'lost',\n 'error',\n ],\n TextureAspect: [, 'all', 'stencil-only', 'depth-only'],\n TextureDimension: [, '1d', '2d', '3d'],\n TextureFormat: [\n ,\n 'r8unorm',\n 'r8snorm',\n 'r8uint',\n 'r8sint',\n 'r16unorm',\n 'r16snorm',\n 'r16uint',\n 'r16sint',\n 'r16float',\n 'rg8unorm',\n 'rg8snorm',\n 'rg8uint',\n 'rg8sint',\n 'r32float',\n 'r32uint',\n 'r32sint',\n 'rg16unorm',\n 'rg16snorm',\n 'rg16uint',\n 'rg16sint',\n 'rg16float',\n 'rgba8unorm',\n 'rgba8unorm-srgb',\n 'rgba8snorm',\n 'rgba8uint',\n 'rgba8sint',\n 'bgra8unorm',\n 'bgra8unorm-srgb',\n 'rgb10a2uint',\n 'rgb10a2unorm',\n 'rg11b10ufloat',\n 'rgb9e5ufloat',\n 'rg32float',\n 'rg32uint',\n 'rg32sint',\n 'rgba16unorm',\n 'rgba16snorm',\n 'rgba16uint',\n 'rgba16sint',\n 'rgba16float',\n 'rgba32float',\n 'rgba32uint',\n 'rgba32sint',\n 'stencil8',\n 'depth16unorm',\n 'depth24plus',\n 'depth24plus-stencil8',\n 'depth32float',\n 'depth32float-stencil8',\n 'bc1-rgba-unorm',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm',\n 'bc3-rgba-unorm-srgb',\n 'bc4-r-unorm',\n 'bc4-r-snorm',\n 'bc5-rg-unorm',\n 'bc5-rg-snorm',\n 'bc6h-rgb-ufloat',\n 'bc6h-rgb-float',\n 'bc7-rgba-unorm',\n 'bc7-rgba-unorm-srgb',\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm',\n 'astc-4x4-unorm',\n 'astc-4x4-unorm-srgb',\n 'astc-5x4-unorm',\n 'astc-5x4-unorm-srgb',\n 'astc-5x5-unorm',\n 'astc-5x5-unorm-srgb',\n 'astc-6x5-unorm',\n 'astc-6x5-unorm-srgb',\n 'astc-6x6-unorm',\n 'astc-6x6-unorm-srgb',\n 'astc-8x5-unorm',\n 'astc-8x5-unorm-srgb',\n 'astc-8x6-unorm',\n 'astc-8x6-unorm-srgb',\n 'astc-8x8-unorm',\n 'astc-8x8-unorm-srgb',\n 'astc-10x5-unorm',\n 'astc-10x5-unorm-srgb',\n 'astc-10x6-unorm',\n 'astc-10x6-unorm-srgb',\n 'astc-10x8-unorm',\n 'astc-10x8-unorm-srgb',\n 'astc-10x10-unorm',\n 'astc-10x10-unorm-srgb',\n 'astc-12x10-unorm',\n 'astc-12x10-unorm-srgb',\n 'astc-12x12-unorm',\n 'astc-12x12-unorm-srgb',\n ],\n TextureSampleType: [\n ,\n ,\n 'float',\n 'unfilterable-float',\n 'depth',\n 'sint',\n 'uint',\n ],\n TextureViewDimension: [, '1d', '2d', '2d-array', 'cube', 'cube-array', '3d'],\n ToneMappingMode: [, 'standard', 'extended'],\n VertexFormat: [\n ,\n 'uint8',\n 'uint8x2',\n 'uint8x4',\n 'sint8',\n 'sint8x2',\n 'sint8x4',\n 'unorm8',\n 'unorm8x2',\n 'unorm8x4',\n 'snorm8',\n 'snorm8x2',\n 'snorm8x4',\n 'uint16',\n 'uint16x2',\n 'uint16x4',\n 'sint16',\n 'sint16x2',\n 'sint16x4',\n 'unorm16',\n 'unorm16x2',\n 'unorm16x4',\n 'snorm16',\n 'snorm16x2',\n 'snorm16x4',\n 'float16',\n 'float16x2',\n 'float16x4',\n 'float32',\n 'float32x2',\n 'float32x3',\n 'float32x4',\n 'uint32',\n 'uint32x2',\n 'uint32x3',\n 'uint32x4',\n 'sint32',\n 'sint32x2',\n 'sint32x3',\n 'sint32x4',\n 'unorm10-10-10-2',\n 'unorm8x4-bgra',\n ],\n VertexStepMode: [, 'vertex', 'instance'],\n WGSLLanguageFeatureName: [\n ,\n 'readonly_and_readwrite_storage_textures',\n 'packed_4x8_integer_dot_product',\n 'unrestricted_pointer_parameters',\n 'pointer_composite_access',\n 'uniform_buffer_standard_layout',\n 'subgroup_id',\n 'texture_and_sampler_let',\n 'subgroup_uniformity',\n 'texture_formats_tier1',\n ],\n};\nvar emwgpuStringToInt_DeviceLostReason = {\n undefined: 1,\n unknown: 1,\n destroyed: 2,\n};\nvar runtimeKeepalivePop = () => {\n runtimeKeepaliveCounter -= 1;\n};\nfunction _emwgpuAdapterRequestDevice(\n adapterPtr,\n futureId,\n deviceLostFutureId,\n devicePtr,\n queuePtr,\n descriptor\n) {\n adapterPtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n deviceLostFutureId = bigintToI53Checked(deviceLostFutureId);\n devicePtr >>>= 0;\n queuePtr >>>= 0;\n descriptor >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n var desc = {};\n if (descriptor) {\n var requiredFeatureCount = (growMemViews(), HEAPU32)[\n ((descriptor + 12) >>> 2) >>> 0\n ];\n if (requiredFeatureCount) {\n var requiredFeaturesPtr = (growMemViews(), HEAPU32)[\n ((descriptor + 16) >>> 2) >>> 0\n ];\n desc['requiredFeatures'] = Array.from(\n (growMemViews(), HEAPU32).subarray(\n (requiredFeaturesPtr >>> 2) >>> 0,\n ((requiredFeaturesPtr + requiredFeatureCount * 4) >>> 2) >>> 0\n ),\n (feature) => WebGPU.FeatureName[feature]\n );\n }\n var limitsPtr = (growMemViews(), HEAPU32)[((descriptor + 20) >>> 2) >>> 0];\n if (limitsPtr) {\n var nextInChainPtr = (growMemViews(), HEAPU32)[(limitsPtr >>> 2) >>> 0];\n var requiredLimits = {};\n function setLimitU32IfDefined(\n name,\n basePtr,\n limitOffset,\n ignoreIfZero = false\n ) {\n var ptr = basePtr + limitOffset;\n var value = (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0];\n if (value != 4294967295 && (!ignoreIfZero || value != 0)) {\n requiredLimits[name] = value;\n }\n }\n function setLimitU64IfDefined(name, basePtr, limitOffset) {\n var ptr = basePtr + limitOffset;\n var limitPart1 = (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0];\n var limitPart2 = (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0];\n if (limitPart1 != 4294967295 || limitPart2 != 4294967295) {\n requiredLimits[name] = readI53FromI64(ptr);\n }\n }\n setLimitU32IfDefined('maxTextureDimension1D', limitsPtr, 4);\n setLimitU32IfDefined('maxTextureDimension2D', limitsPtr, 8);\n setLimitU32IfDefined('maxTextureDimension3D', limitsPtr, 12);\n setLimitU32IfDefined('maxTextureArrayLayers', limitsPtr, 16);\n setLimitU32IfDefined('maxBindGroups', limitsPtr, 20);\n setLimitU32IfDefined('maxBindGroupsPlusVertexBuffers', limitsPtr, 24);\n setLimitU32IfDefined('maxBindingsPerBindGroup', limitsPtr, 28);\n setLimitU32IfDefined(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsPtr,\n 32\n );\n setLimitU32IfDefined(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsPtr,\n 36\n );\n setLimitU32IfDefined('maxSampledTexturesPerShaderStage', limitsPtr, 40);\n setLimitU32IfDefined('maxSamplersPerShaderStage', limitsPtr, 44);\n setLimitU32IfDefined('maxStorageBuffersPerShaderStage', limitsPtr, 48);\n setLimitU32IfDefined('maxStorageTexturesPerShaderStage', limitsPtr, 52);\n setLimitU32IfDefined('maxUniformBuffersPerShaderStage', limitsPtr, 56);\n setLimitU32IfDefined('minUniformBufferOffsetAlignment', limitsPtr, 80);\n setLimitU32IfDefined('minStorageBufferOffsetAlignment', limitsPtr, 84);\n setLimitU64IfDefined('maxUniformBufferBindingSize', limitsPtr, 64);\n setLimitU64IfDefined('maxStorageBufferBindingSize', limitsPtr, 72);\n setLimitU32IfDefined('maxVertexBuffers', limitsPtr, 88);\n setLimitU64IfDefined('maxBufferSize', limitsPtr, 96);\n setLimitU32IfDefined('maxVertexAttributes', limitsPtr, 104);\n setLimitU32IfDefined('maxVertexBufferArrayStride', limitsPtr, 108);\n setLimitU32IfDefined('maxInterStageShaderVariables', limitsPtr, 112);\n setLimitU32IfDefined('maxColorAttachments', limitsPtr, 116);\n setLimitU32IfDefined('maxColorAttachmentBytesPerSample', limitsPtr, 120);\n setLimitU32IfDefined('maxComputeWorkgroupStorageSize', limitsPtr, 124);\n setLimitU32IfDefined('maxComputeInvocationsPerWorkgroup', limitsPtr, 128);\n setLimitU32IfDefined('maxComputeWorkgroupSizeX', limitsPtr, 132);\n setLimitU32IfDefined('maxComputeWorkgroupSizeY', limitsPtr, 136);\n setLimitU32IfDefined('maxComputeWorkgroupSizeZ', limitsPtr, 140);\n setLimitU32IfDefined('maxComputeWorkgroupsPerDimension', limitsPtr, 144);\n setLimitU32IfDefined('maxImmediateSize', limitsPtr, 148, true);\n if (nextInChainPtr !== 0) {\n var sType = (growMemViews(), HEAP32)[\n ((nextInChainPtr + 4) >>> 2) >>> 0\n ];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n if ('maxStorageBuffersInVertexStage' in GPUSupportedLimits.prototype) {\n setLimitU32IfDefined(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 8\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 12\n );\n setLimitU32IfDefined(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 16\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 20\n );\n }\n }\n desc['requiredLimits'] = requiredLimits;\n }\n var defaultQueuePtr = (growMemViews(), HEAPU32)[\n ((descriptor + 24) >>> 2) >>> 0\n ];\n if (defaultQueuePtr) {\n var defaultQueueDesc = {\n label: WebGPU.makeStringFromOptionalStringView(defaultQueuePtr + 4),\n };\n desc['defaultQueue'] = defaultQueueDesc;\n }\n desc['label'] = WebGPU.makeStringFromOptionalStringView(descriptor + 4);\n }\n runtimeKeepalivePush();\n WebGPU.Internals.futureInsert(\n futureId,\n adapter.requestDevice(desc).then(\n (device) => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n WebGPU.Internals.futureInsert(\n deviceLostFutureId,\n device.lost.then((info) => {\n callUserCallback(() => {\n device.onuncapturederror = (ev) => {};\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(info.message);\n _emwgpuOnDeviceLostCompleted(\n deviceLostFutureId,\n emwgpuStringToInt_DeviceLostReason[info.reason],\n messagePtr\n );\n stackRestore(sp);\n });\n })\n );\n device.onuncapturederror = (ev) => {\n var type = 5;\n if (ev.error instanceof GPUValidationError) type = 2;\n else if (ev.error instanceof GPUOutOfMemoryError) type = 3;\n else if (ev.error instanceof GPUInternalError) type = 4;\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ev.error.message);\n _emwgpuOnUncapturedError(devicePtr, type, messagePtr);\n stackRestore(sp);\n };\n _emwgpuOnRequestDeviceCompleted(futureId, 1, devicePtr, 0);\n });\n },\n (ex) => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestDeviceCompleted(futureId, 3, devicePtr, messagePtr);\n if (deviceLostFutureId) {\n _emwgpuOnDeviceLostCompleted(deviceLostFutureId, 4, messagePtr);\n }\n stackRestore(sp);\n });\n }\n )\n );\n}\nfunction _emwgpuBufferDestroy(bufferPtr) {\n bufferPtr >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (onUnmap) {\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n }\n buffer.destroy();\n}\nvar warnOnce = (text) => {\n warnOnce.shown ||= {};\n if (!warnOnce.shown[text]) {\n warnOnce.shown[text] = 1;\n if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;\n err(text);\n }\n};\nfunction _emwgpuBufferGetConstMappedRange(bufferPtr, offset, size) {\n bufferPtr >>>= 0;\n offset >>>= 0;\n size >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n if (size == 4294967295) size = undefined;\n var mapped;\n try {\n mapped = buffer.getMappedRange(offset, size);\n } catch (ex) {\n return 0;\n }\n var data = _memalign(16, mapped.byteLength);\n (growMemViews(), HEAPU8).set(new Uint8Array(mapped), data >>> 0);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(() => _free(data));\n return data;\n}\nvar _emwgpuBufferMapAsync = function (bufferPtr, futureId, mode, offset, size) {\n bufferPtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n mode = bigintToI53Checked(mode);\n offset >>>= 0;\n size >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n if (size == 4294967295) size = undefined;\n runtimeKeepalivePush();\n WebGPU.Internals.futureInsert(\n futureId,\n buffer.mapAsync(mode, offset, size).then(\n () => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n _emwgpuOnMapAsyncCompleted(futureId, 1, 0);\n });\n },\n (ex) => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n var status =\n ex.name === 'AbortError' ? 4 : ex.name === 'OperationError' ? 3 : 0;\n _emwgpuOnMapAsyncCompleted(futureId, status, messagePtr);\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n });\n }\n )\n );\n};\nfunction _emwgpuBufferUnmap(bufferPtr) {\n bufferPtr >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (!onUnmap) {\n return;\n }\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n buffer.unmap();\n}\nfunction _emwgpuDelete(ptr) {\n ptr >>>= 0;\n delete WebGPU.Internals.jsObjects[ptr];\n}\nfunction _emwgpuDeviceCreateBuffer(devicePtr, descriptor, bufferPtr) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n bufferPtr >>>= 0;\n var mappedAtCreation = !!(growMemViews(), HEAPU32)[\n ((descriptor + 32) >>> 2) >>> 0\n ];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n usage: (growMemViews(), HEAPU32)[((descriptor + 16) >>> 2) >>> 0],\n size: readI53FromI64(descriptor + 24),\n mappedAtCreation,\n };\n var device = WebGPU.getJsObject(devicePtr);\n var buffer;\n try {\n buffer = device.createBuffer(desc);\n } catch (ex) {\n return false;\n }\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n if (mappedAtCreation) {\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n }\n return true;\n}\nfunction _emwgpuDeviceCreateShaderModule(\n devicePtr,\n descriptor,\n shaderModulePtr\n) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n shaderModulePtr >>>= 0;\n var nextInChainPtr = (growMemViews(), HEAPU32)[(descriptor >>> 2) >>> 0];\n var sType = (growMemViews(), HEAP32)[((nextInChainPtr + 4) >>> 2) >>> 0];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n code: '',\n };\n switch (sType) {\n case 2: {\n desc['code'] = WebGPU.makeStringFromStringView(nextInChainPtr + 8);\n break;\n }\n }\n var device = WebGPU.getJsObject(devicePtr);\n WebGPU.Internals.jsObjectInsert(\n shaderModulePtr,\n device.createShaderModule(desc)\n );\n}\nvar _emwgpuDeviceDestroy = (devicePtr) => {\n const device = WebGPU.getJsObject(devicePtr);\n device.onuncapturederror = null;\n device.destroy();\n};\nfunction _emwgpuInstanceRequestAdapter(\n instancePtr,\n futureId,\n options,\n adapterPtr\n) {\n instancePtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n options >>>= 0;\n adapterPtr >>>= 0;\n var opts;\n if (options) {\n opts = {\n featureLevel:\n WebGPU.FeatureLevel[\n (growMemViews(), HEAP32)[((options + 4) >>> 2) >>> 0]\n ],\n powerPreference:\n WebGPU.PowerPreference[\n (growMemViews(), HEAP32)[((options + 8) >>> 2) >>> 0]\n ],\n forceFallbackAdapter: !!(growMemViews(), HEAPU32)[\n ((options + 12) >>> 2) >>> 0\n ],\n };\n var nextInChainPtr = (growMemViews(), HEAPU32)[(options >>> 2) >>> 0];\n if (nextInChainPtr !== 0) {\n var sType = (growMemViews(), HEAP32)[((nextInChainPtr + 4) >>> 2) >>> 0];\n var webxrOptions = nextInChainPtr;\n opts.xrCompatible = !!(growMemViews(), HEAPU32)[\n ((webxrOptions + 8) >>> 2) >>> 0\n ];\n }\n }\n if (!('gpu' in navigator)) {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (navigator.gpu is not available)'\n );\n _emwgpuOnRequestAdapterCompleted(futureId, 3, adapterPtr, messagePtr);\n stackRestore(sp);\n return;\n }\n runtimeKeepalivePush();\n WebGPU.Internals.futureInsert(\n futureId,\n navigator.gpu.requestAdapter(opts).then(\n (adapter) => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n if (adapter) {\n WebGPU.Internals.jsObjectInsert(adapterPtr, adapter);\n _emwgpuOnRequestAdapterCompleted(futureId, 1, adapterPtr, 0);\n } else {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (requestAdapter returned null)'\n );\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 3,\n adapterPtr,\n messagePtr\n );\n stackRestore(sp);\n }\n });\n },\n (ex) => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestAdapterCompleted(futureId, 4, adapterPtr, messagePtr);\n stackRestore(sp);\n });\n }\n )\n );\n}\nvar _emwgpuQueueOnSubmittedWorkDone = function (queuePtr, futureId) {\n queuePtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n var queue = WebGPU.getJsObject(queuePtr);\n runtimeKeepalivePush();\n WebGPU.Internals.futureInsert(\n futureId,\n queue.onSubmittedWorkDone().then(() => {\n runtimeKeepalivePop();\n callUserCallback(() => {\n _emwgpuOnWorkDoneCompleted(futureId, 1);\n });\n })\n );\n};\nvar _emwgpuWaitAny = function (futurePtr, futureCount, timeoutMSPtr) {\n futurePtr >>>= 0;\n futureCount >>>= 0;\n timeoutMSPtr >>>= 0;\n return Asyncify.handleAsync(async () => {\n var promises = [];\n if (timeoutMSPtr) {\n var timeoutMS = (growMemViews(), HEAP32)[(timeoutMSPtr >>> 2) >>> 0];\n promises.length = futureCount + 1;\n promises[futureCount] = new Promise((resolve) =>\n setTimeout(resolve, timeoutMS, 0)\n );\n } else {\n promises.length = futureCount;\n }\n for (var i = 0; i < futureCount; ++i) {\n var futureId = readI53FromI64(futurePtr + i * 8);\n if (!(futureId in WebGPU.Internals.futures)) {\n return futureId;\n }\n promises[i] = WebGPU.Internals.futures[futureId];\n }\n const firstResolvedFuture = await Promise.race(promises);\n delete WebGPU.Internals.futures[firstResolvedFuture];\n return firstResolvedFuture;\n });\n};\n_emwgpuWaitAny.isAsync = true;\nvar ENV = {};\nvar getExecutableName = () => thisProgram || './this.program';\nvar getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n var lang =\n ((typeof navigator == 'object' && navigator.language) || 'C').replace(\n '-',\n '_'\n ) + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(`${x}=${env[x]}`);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n};\nfunction _environ_get(__environ, environ_buf) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(8, 0, 1, __environ, environ_buf);\n __environ >>>= 0;\n environ_buf >>>= 0;\n var bufSize = 0;\n var envp = 0;\n for (var string of getEnvStrings()) {\n var ptr = environ_buf + bufSize;\n (growMemViews(), HEAPU32)[((__environ + envp) >>> 2) >>> 0] = ptr;\n bufSize += stringToUTF8(string, ptr, Infinity) + 1;\n envp += 4;\n }\n return 0;\n}\nfunction _environ_sizes_get(penviron_count, penviron_buf_size) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(9, 0, 1, penviron_count, penviron_buf_size);\n penviron_count >>>= 0;\n penviron_buf_size >>>= 0;\n var strings = getEnvStrings();\n (growMemViews(), HEAPU32)[(penviron_count >>> 2) >>> 0] = strings.length;\n var bufSize = 0;\n for (var string of strings) {\n bufSize += lengthBytesUTF8(string) + 1;\n }\n (growMemViews(), HEAPU32)[(penviron_buf_size >>> 2) >>> 0] = bufSize;\n return 0;\n}\nfunction _fd_close(fd) {\n if (ENVIRONMENT_IS_PTHREAD) return proxyToMainThread(10, 0, 1, fd);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.close(stream);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doReadv = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = (growMemViews(), HEAPU32)[(iov >>> 2) >>> 0];\n var len = (growMemViews(), HEAPU32)[((iov + 4) >>> 2) >>> 0];\n iov += 8;\n var curr = FS.read(stream, (growMemViews(), HEAP8), ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) break;\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_read(fd, iov, iovcnt, pnum) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(11, 0, 1, fd, iov, iovcnt, pnum);\n iov >>>= 0;\n iovcnt >>>= 0;\n pnum >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doReadv(stream, iov, iovcnt);\n (growMemViews(), HEAPU32)[(pnum >>> 2) >>> 0] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _fd_seek(fd, offset, whence, newOffset) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(12, 0, 1, fd, offset, whence, newOffset);\n offset = bigintToI53Checked(offset);\n newOffset >>>= 0;\n try {\n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.llseek(stream, offset, whence);\n (growMemViews(), HEAP64)[(newOffset >>> 3) >>> 0] = BigInt(stream.position);\n if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doWritev = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = (growMemViews(), HEAPU32)[(iov >>> 2) >>> 0];\n var len = (growMemViews(), HEAPU32)[((iov + 4) >>> 2) >>> 0];\n iov += 8;\n var curr = FS.write(stream, (growMemViews(), HEAP8), ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) {\n break;\n }\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_write(fd, iov, iovcnt, pnum) {\n if (ENVIRONMENT_IS_PTHREAD)\n return proxyToMainThread(13, 0, 1, fd, iov, iovcnt, pnum);\n iov >>>= 0;\n iovcnt >>>= 0;\n pnum >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doWritev(stream, iov, iovcnt);\n (growMemViews(), HEAPU32)[(pnum >>> 2) >>> 0] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _llvm_eh_typeid_for(type) {\n type >>>= 0;\n return type;\n}\nfunction _random_get(buffer, size) {\n buffer >>>= 0;\n size >>>= 0;\n try {\n randomFill(\n (growMemViews(), HEAPU8).subarray(buffer >>> 0, (buffer + size) >>> 0)\n );\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar emwgpuStringToInt_FeatureName = {\n 'core-features-and-limits': 1,\n 'depth-clip-control': 2,\n 'depth32float-stencil8': 3,\n 'texture-compression-bc': 4,\n 'texture-compression-bc-sliced-3d': 5,\n 'texture-compression-etc2': 6,\n 'texture-compression-astc': 7,\n 'texture-compression-astc-sliced-3d': 8,\n 'timestamp-query': 9,\n 'indirect-first-instance': 10,\n 'shader-f16': 11,\n 'rg11b10ufloat-renderable': 12,\n 'bgra8unorm-storage': 13,\n 'float32-filterable': 14,\n 'float32-blendable': 15,\n 'clip-distances': 16,\n 'dual-source-blending': 17,\n subgroups: 18,\n 'texture-formats-tier1': 19,\n 'texture-formats-tier2': 20,\n 'primitive-index': 21,\n 'texture-component-swizzle': 22,\n 'chromium-experimental-unorm16-texture-formats': 327692,\n 'chromium-experimental-multi-draw-indirect': 327729,\n};\nfunction _wgpuAdapterGetFeatures(adapterPtr, supportedFeatures) {\n adapterPtr >>>= 0;\n supportedFeatures >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n var featuresPtr = _malloc(adapter.features.size * 4);\n var offset = 0;\n var numFeatures = 0;\n for (const feature of adapter.features) {\n var featureEnumValue = emwgpuStringToInt_FeatureName[feature];\n if (featureEnumValue >= 0) {\n (growMemViews(), HEAP32)[((featuresPtr + offset) >>> 2) >>> 0] =\n featureEnumValue;\n offset += 4;\n numFeatures++;\n }\n }\n (growMemViews(), HEAPU32)[((supportedFeatures + 4) >>> 2) >>> 0] =\n featuresPtr;\n (growMemViews(), HEAPU32)[(supportedFeatures >>> 2) >>> 0] = numFeatures;\n}\nfunction _wgpuAdapterGetInfo(adapterPtr, info) {\n adapterPtr >>>= 0;\n info >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillAdapterInfoStruct(adapter.info, info);\n return 1;\n}\nfunction _wgpuAdapterGetLimits(adapterPtr, limitsOutPtr) {\n adapterPtr >>>= 0;\n limitsOutPtr >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillLimitStruct(adapter.limits, limitsOutPtr);\n return 1;\n}\nfunction _wgpuAdapterHasFeature(adapterPtr, featureEnumValue) {\n adapterPtr >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n return adapter.features.has(WebGPU.FeatureName[featureEnumValue]);\n}\nvar _wgpuBufferGetSize = function (bufferPtr) {\n bufferPtr >>>= 0;\n var ret = (() => {\n var buffer = WebGPU.getJsObject(bufferPtr);\n return buffer.size;\n })();\n return BigInt(ret);\n};\nfunction _wgpuCommandEncoderBeginComputePass(encoderPtr, descriptor) {\n encoderPtr >>>= 0;\n descriptor >>>= 0;\n var desc;\n if (descriptor) {\n desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n timestampWrites: WebGPU.makePassTimestampWrites(\n (growMemViews(), HEAPU32)[((descriptor + 12) >>> 2) >>> 0]\n ),\n };\n }\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateComputePassEncoder(0);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.beginComputePass(desc));\n return ptr;\n}\nfunction _wgpuCommandEncoderCopyBufferToBuffer(\n encoderPtr,\n srcPtr,\n srcOffset,\n dstPtr,\n dstOffset,\n size\n) {\n encoderPtr >>>= 0;\n srcPtr >>>= 0;\n srcOffset = bigintToI53Checked(srcOffset);\n dstPtr >>>= 0;\n dstOffset = bigintToI53Checked(dstOffset);\n size = bigintToI53Checked(size);\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var src = WebGPU.getJsObject(srcPtr);\n var dst = WebGPU.getJsObject(dstPtr);\n commandEncoder.copyBufferToBuffer(src, srcOffset, dst, dstOffset, size);\n}\nfunction _wgpuCommandEncoderFinish(encoderPtr, descriptor) {\n encoderPtr >>>= 0;\n descriptor >>>= 0;\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateCommandBuffer(0);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.finish());\n return ptr;\n}\nfunction _wgpuComputePassEncoderDispatchWorkgroups(passPtr, x, y, z) {\n passPtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n pass.dispatchWorkgroups(x, y, z);\n}\nfunction _wgpuComputePassEncoderEnd(passPtr) {\n passPtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n pass.end();\n}\nfunction _wgpuComputePassEncoderSetBindGroup(\n passPtr,\n groupIndex,\n groupPtr,\n dynamicOffsetCount,\n dynamicOffsetsPtr\n) {\n passPtr >>>= 0;\n groupPtr >>>= 0;\n dynamicOffsetCount >>>= 0;\n dynamicOffsetsPtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n var group = WebGPU.getJsObject(groupPtr);\n if (dynamicOffsetCount == 0) {\n pass.setBindGroup(groupIndex, group);\n } else {\n pass.setBindGroup(\n groupIndex,\n group,\n (growMemViews(), HEAPU32),\n dynamicOffsetsPtr >>> 2,\n dynamicOffsetCount\n );\n }\n}\nfunction _wgpuComputePassEncoderSetPipeline(passPtr, pipelinePtr) {\n passPtr >>>= 0;\n pipelinePtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n pass.setPipeline(pipeline);\n}\nfunction _wgpuComputePipelineGetBindGroupLayout(pipelinePtr, groupIndex) {\n pipelinePtr >>>= 0;\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n var ptr = _emwgpuCreateBindGroupLayout(0);\n WebGPU.Internals.jsObjectInsert(ptr, pipeline.getBindGroupLayout(groupIndex));\n return ptr;\n}\nvar _wgpuDeviceCreateBindGroup = function (devicePtr, descriptor) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n function makeEntry(entryPtr) {\n var bufferPtr = (growMemViews(), HEAPU32)[((entryPtr + 8) >>> 2) >>> 0];\n var samplerPtr = (growMemViews(), HEAPU32)[((entryPtr + 32) >>> 2) >>> 0];\n var textureViewPtr = (growMemViews(), HEAPU32)[\n ((entryPtr + 36) >>> 2) >>> 0\n ];\n var externalTexturePtr = 0;\n WebGPU.iterateExtensions(entryPtr, {\n 327681: (ptr) => {\n externalTexturePtr = (growMemViews(), HEAPU32)[((ptr + 8) >>> 2) >>> 0];\n },\n });\n var resource;\n if (bufferPtr) {\n var size = readI53FromI64(entryPtr + 24);\n if (size == -1) size = undefined;\n resource = {\n buffer: WebGPU.getJsObject(bufferPtr),\n offset: readI53FromI64(entryPtr + 16),\n size,\n };\n } else {\n resource = WebGPU.getJsObject(\n samplerPtr || textureViewPtr || externalTexturePtr\n );\n }\n return {\n binding: (growMemViews(), HEAPU32)[((entryPtr + 4) >>> 2) >>> 0],\n resource,\n };\n }\n function makeEntries(count, entriesPtrs) {\n var entries = [];\n for (var i = 0; i < count; ++i) {\n entries.push(makeEntry(entriesPtrs + 40 * i));\n }\n return entries;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n layout: WebGPU.getJsObject(\n (growMemViews(), HEAPU32)[((descriptor + 12) >>> 2) >>> 0]\n ),\n entries: makeEntries(\n (growMemViews(), HEAPU32)[((descriptor + 16) >>> 2) >>> 0],\n (growMemViews(), HEAPU32)[((descriptor + 20) >>> 2) >>> 0]\n ),\n };\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateBindGroup(0);\n WebGPU.Internals.jsObjectInsert(ptr, device.createBindGroup(desc));\n return ptr;\n};\nfunction _wgpuDeviceCreateCommandEncoder(devicePtr, descriptor) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n var desc;\n if (descriptor) {\n desc = { label: WebGPU.makeStringFromOptionalStringView(descriptor + 4) };\n }\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateCommandEncoder(0);\n WebGPU.Internals.jsObjectInsert(ptr, device.createCommandEncoder(desc));\n return ptr;\n}\nfunction _wgpuDeviceCreateComputePipeline(devicePtr, descriptor) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n var desc = WebGPU.makeComputePipelineDesc(descriptor);\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateComputePipeline(0);\n WebGPU.Internals.jsObjectInsert(ptr, device.createComputePipeline(desc));\n return ptr;\n}\nvar _wgpuQueueSubmit = function (queuePtr, commandCount, commands) {\n queuePtr >>>= 0;\n commandCount >>>= 0;\n commands >>>= 0;\n var queue = WebGPU.getJsObject(queuePtr);\n var cmds = Array.from(\n (growMemViews(), HEAP32).subarray(\n (commands >>> 2) >>> 0,\n ((commands + commandCount * 4) >>> 2) >>> 0\n ),\n (id) => WebGPU.getJsObject(id)\n );\n queue.submit(cmds);\n};\nfunction _wgpuQueueWriteBuffer(queuePtr, bufferPtr, bufferOffset, data, size) {\n queuePtr >>>= 0;\n bufferPtr >>>= 0;\n bufferOffset = bigintToI53Checked(bufferOffset);\n data >>>= 0;\n size >>>= 0;\n var queue = WebGPU.getJsObject(queuePtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var subarray = (growMemViews(), HEAPU8).subarray(\n data >>> 0,\n (data + size) >>> 0\n );\n queue.writeBuffer(buffer, bufferOffset, subarray, 0, size);\n}\nvar runAndAbortIfError = (func) => {\n try {\n return func();\n } catch (e) {\n abort(e);\n }\n};\nvar Asyncify = {\n instrumentWasmImports(imports) {\n var importPattern = /^(invoke_.*|__asyncjs__.*)$/;\n for (let [x, original] of Object.entries(imports)) {\n if (typeof original == 'function') {\n let isAsyncifyImport = original.isAsync || importPattern.test(x);\n }\n }\n },\n instrumentFunction(original) {\n var wrapper = (...args) => {\n Asyncify.exportCallStack.push(original);\n try {\n return original(...args);\n } finally {\n if (!ABORT) {\n var top = Asyncify.exportCallStack.pop();\n Asyncify.maybeStopUnwind();\n }\n }\n };\n Asyncify.funcWrappers.set(original, wrapper);\n return wrapper;\n },\n instrumentWasmExports(exports) {\n var ret = {};\n for (let [x, original] of Object.entries(exports)) {\n if (typeof original == 'function') {\n var wrapper = Asyncify.instrumentFunction(original);\n ret[x] = wrapper;\n } else {\n ret[x] = original;\n }\n }\n return ret;\n },\n State: { Normal: 0, Unwinding: 1, Rewinding: 2, Disabled: 3 },\n state: 0,\n StackSize: 4096,\n currData: null,\n handleSleepReturnValue: 0,\n exportCallStack: [],\n callstackFuncToId: new Map(),\n callStackIdToFunc: new Map(),\n funcWrappers: new Map(),\n callStackId: 0,\n asyncPromiseHandlers: null,\n sleepCallbacks: [],\n getCallStackId(func) {\n if (!Asyncify.callstackFuncToId.has(func)) {\n var id = Asyncify.callStackId++;\n Asyncify.callstackFuncToId.set(func, id);\n Asyncify.callStackIdToFunc.set(id, func);\n }\n return Asyncify.callstackFuncToId.get(func);\n },\n maybeStopUnwind() {\n if (\n Asyncify.currData &&\n Asyncify.state === Asyncify.State.Unwinding &&\n Asyncify.exportCallStack.length === 0\n ) {\n Asyncify.state = Asyncify.State.Normal;\n runtimeKeepalivePush();\n runAndAbortIfError(_asyncify_stop_unwind);\n if (typeof Fibers != 'undefined') {\n Fibers.trampoline();\n }\n }\n },\n whenDone() {\n return new Promise((resolve, reject) => {\n Asyncify.asyncPromiseHandlers = { resolve, reject };\n });\n },\n allocateData() {\n var ptr = _malloc(12 + Asyncify.StackSize);\n Asyncify.setDataHeader(ptr, ptr + 12, Asyncify.StackSize);\n Asyncify.setDataRewindFunc(ptr);\n return ptr;\n },\n setDataHeader(ptr, stack, stackSize) {\n (growMemViews(), HEAPU32)[(ptr >>> 2) >>> 0] = stack;\n (growMemViews(), HEAPU32)[((ptr + 4) >>> 2) >>> 0] = stack + stackSize;\n },\n setDataRewindFunc(ptr) {\n var bottomOfCallStack = Asyncify.exportCallStack[0];\n var rewindId = Asyncify.getCallStackId(bottomOfCallStack);\n (growMemViews(), HEAP32)[((ptr + 8) >>> 2) >>> 0] = rewindId;\n },\n getDataRewindFunc(ptr) {\n var id = (growMemViews(), HEAP32)[((ptr + 8) >>> 2) >>> 0];\n var func = Asyncify.callStackIdToFunc.get(id);\n return func;\n },\n doRewind(ptr) {\n var original = Asyncify.getDataRewindFunc(ptr);\n var func = Asyncify.funcWrappers.get(original);\n runtimeKeepalivePop();\n return func();\n },\n handleSleep(startAsync) {\n if (ABORT) return;\n if (Asyncify.state === Asyncify.State.Normal) {\n var reachedCallback = false;\n var reachedAfterCallback = false;\n startAsync((handleSleepReturnValue = 0) => {\n if (ABORT) return;\n Asyncify.handleSleepReturnValue = handleSleepReturnValue;\n reachedCallback = true;\n if (!reachedAfterCallback) {\n return;\n }\n Asyncify.state = Asyncify.State.Rewinding;\n runAndAbortIfError(() => _asyncify_start_rewind(Asyncify.currData));\n if (typeof MainLoop != 'undefined' && MainLoop.func) {\n MainLoop.resume();\n }\n var asyncWasmReturnValue,\n isError = false;\n try {\n asyncWasmReturnValue = Asyncify.doRewind(Asyncify.currData);\n } catch (err) {\n asyncWasmReturnValue = err;\n isError = true;\n }\n var handled = false;\n if (!Asyncify.currData) {\n var asyncPromiseHandlers = Asyncify.asyncPromiseHandlers;\n if (asyncPromiseHandlers) {\n Asyncify.asyncPromiseHandlers = null;\n (isError\n ? asyncPromiseHandlers.reject\n : asyncPromiseHandlers.resolve)(asyncWasmReturnValue);\n handled = true;\n }\n }\n if (isError && !handled) {\n throw asyncWasmReturnValue;\n }\n });\n reachedAfterCallback = true;\n if (!reachedCallback) {\n Asyncify.state = Asyncify.State.Unwinding;\n Asyncify.currData = Asyncify.allocateData();\n if (typeof MainLoop != 'undefined' && MainLoop.func) {\n MainLoop.pause();\n }\n runAndAbortIfError(() => _asyncify_start_unwind(Asyncify.currData));\n }\n } else if (Asyncify.state === Asyncify.State.Rewinding) {\n Asyncify.state = Asyncify.State.Normal;\n runAndAbortIfError(_asyncify_stop_rewind);\n _free(Asyncify.currData);\n Asyncify.currData = null;\n Asyncify.sleepCallbacks.forEach(callUserCallback);\n } else {\n abort(`invalid state: ${Asyncify.state}`);\n }\n return Asyncify.handleSleepReturnValue;\n },\n handleAsync: (startAsync) =>\n Asyncify.handleSleep((wakeUp) => {\n startAsync().then(wakeUp);\n }),\n};\nvar getCFunc = (ident) => {\n var func = Module['_' + ident];\n return func;\n};\nvar writeArrayToMemory = (array, buffer) => {\n (growMemViews(), HEAP8).set(array, buffer >>> 0);\n};\nvar ccall = (ident, returnType, argTypes, args, opts) => {\n var toC = {\n string: (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str);\n }\n return ret;\n },\n array: (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return ret;\n },\n };\n function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(ret);\n }\n if (returnType === 'pointer') return ret >>> 0;\n if (returnType === 'boolean') return Boolean(ret);\n return ret;\n }\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var previousAsync = Asyncify.currData;\n var ret = func(...cArgs);\n function onDone(ret) {\n runtimeKeepalivePop();\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n var asyncMode = opts?.async;\n runtimeKeepalivePush();\n if (Asyncify.currData != previousAsync) {\n return Asyncify.whenDone().then(onDone);\n }\n ret = onDone(ret);\n if (asyncMode) return Promise.resolve(ret);\n return ret;\n};\nvar cwrap = (ident, returnType, argTypes, opts) => {\n var numericArgs =\n !argTypes ||\n argTypes.every((type) => type === 'number' || type === 'boolean');\n var numericRet = returnType !== 'string';\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return (...args) => ccall(ident, returnType, argTypes, args, opts);\n};\nvar FS_createPath = (...args) => FS.createPath(...args);\nvar FS_unlink = (...args) => FS.unlink(...args);\nvar FS_createLazyFile = (...args) => FS.createLazyFile(...args);\nvar FS_createDevice = (...args) => FS.createDevice(...args);\nPThread.init();\nFS.createPreloadedFile = FS_createPreloadedFile;\nFS.preloadFile = FS_preloadFile;\nFS.staticInit();\n{\n initMemory();\n if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];\n if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins'];\n if (Module['print']) out = Module['print'];\n if (Module['printErr']) err = Module['printErr'];\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].shift()();\n }\n }\n}\nModule['mmapAlloc'] = mmapAlloc;\nModule['addRunDependency'] = addRunDependency;\nModule['removeRunDependency'] = removeRunDependency;\nModule['ccall'] = ccall;\nModule['cwrap'] = cwrap;\nModule['FS_preloadFile'] = FS_preloadFile;\nModule['FS_unlink'] = FS_unlink;\nModule['FS_createPath'] = FS_createPath;\nModule['FS_createDevice'] = FS_createDevice;\nModule['FS'] = FS;\nModule['FS_createDataFile'] = FS_createDataFile;\nModule['FS_createLazyFile'] = FS_createLazyFile;\nModule['MEMFS'] = MEMFS;\nvar proxiedFunctionTable = [\n _proc_exit,\n exitOnMainThread,\n pthreadCreateProxied,\n ___syscall_fcntl64,\n ___syscall_ioctl,\n ___syscall_openat,\n __mmap_js,\n __munmap_js,\n _environ_get,\n _environ_sizes_get,\n _fd_close,\n _fd_read,\n _fd_seek,\n _fd_write,\n];\nvar _wllama_malloc,\n _wllama_start,\n _wllama_action,\n _wllama_exit,\n _wllama_debug,\n _main,\n _malloc,\n _free,\n _emwgpuCreateBindGroup,\n _emwgpuCreateBindGroupLayout,\n _emwgpuCreateCommandBuffer,\n _emwgpuCreateCommandEncoder,\n _emwgpuCreateComputePassEncoder,\n _emwgpuCreateComputePipeline,\n _emwgpuCreateExternalTexture,\n _emwgpuCreatePipelineLayout,\n _emwgpuCreateQuerySet,\n _emwgpuCreateRenderBundle,\n _emwgpuCreateRenderBundleEncoder,\n _emwgpuCreateRenderPassEncoder,\n _emwgpuCreateRenderPipeline,\n _emwgpuCreateSampler,\n _emwgpuCreateSurface,\n _emwgpuCreateTexture,\n _emwgpuCreateTextureView,\n _emwgpuCreateAdapter,\n _emwgpuCreateBuffer,\n _emwgpuCreateDevice,\n _emwgpuCreateQueue,\n _emwgpuCreateShaderModule,\n _emwgpuOnDeviceLostCompleted,\n _emwgpuOnMapAsyncCompleted,\n _emwgpuOnRequestAdapterCompleted,\n _emwgpuOnRequestDeviceCompleted,\n _emwgpuOnWorkDoneCompleted,\n _emwgpuOnUncapturedError,\n __emscripten_tls_init,\n _pthread_self,\n _emscripten_builtin_memalign,\n __emscripten_thread_init,\n __emscripten_thread_crashed,\n __emscripten_run_js_on_main_thread,\n __emscripten_thread_free_data,\n __emscripten_thread_exit,\n __emscripten_check_mailbox,\n _memalign,\n _setThrew,\n __emscripten_tempret_set,\n _emscripten_stack_set_limits,\n __emscripten_stack_restore,\n __emscripten_stack_alloc,\n _emscripten_stack_get_current,\n ___cxa_decrement_exception_refcount,\n ___cxa_increment_exception_refcount,\n ___cxa_can_catch,\n ___cxa_get_exception_ptr,\n dynCall_v,\n dynCall_ii,\n dynCall_iii,\n dynCall_viii,\n dynCall_vii,\n dynCall_iiiiii,\n dynCall_iiiii,\n dynCall_vi,\n dynCall_iiii,\n dynCall_viiii,\n dynCall_iiiiiii,\n dynCall_ji,\n dynCall_viiiii,\n dynCall_i,\n dynCall_iiiiiiiii,\n dynCall_j,\n dynCall_iiiiiiii,\n dynCall_ifi,\n dynCall_iffii,\n dynCall_ifff,\n dynCall_iifff,\n dynCall_iiiffiiii,\n dynCall_if,\n dynCall_iiff,\n dynCall_iiiffi,\n dynCall_iiiiiiiiiiiiii,\n dynCall_viiiiii,\n dynCall_iij,\n dynCall_jii,\n dynCall_iiij,\n dynCall_iiijj,\n dynCall_iiif,\n dynCall_iiijjii,\n dynCall_iiijjj,\n dynCall_iiijjjj,\n dynCall_iiiji,\n dynCall_iiiiiiiiiiii,\n dynCall_iiji,\n dynCall_iiiijjji,\n dynCall_fiii,\n dynCall_iiijjjiii,\n dynCall_iiiiiiiiffi,\n dynCall_iiiiiiiiiiiiiii,\n dynCall_iiiiiij,\n dynCall_iiiiiiiiffffff,\n dynCall_jiii,\n dynCall_iiiiiiiiii,\n dynCall_viiiijjjji,\n dynCall_viiiijjj,\n dynCall_iiiiiiiiiiiiiiiiii,\n dynCall_viiiijjji,\n dynCall_iiiiiiiiiiiifi,\n dynCall_iiiiiiiijjiifiiiiiii,\n dynCall_iiiiiiiiiiiiiiii,\n dynCall_iiiffff,\n dynCall_iiiff,\n dynCall_iiiiiiiiiffffff,\n dynCall_iiiiiiji,\n dynCall_iiiiijiiijjjjjjj,\n dynCall_viiiiiiiii,\n dynCall_iiiiiji,\n dynCall_iiiiiiiiiiiijjiifiiiiiiii,\n dynCall_iiiiff,\n dynCall_iiiiiiiiiiiii,\n dynCall_viiiiiiiiii,\n dynCall_dii,\n dynCall_viiiif,\n dynCall_viiiiiii,\n dynCall_iiijiiii,\n dynCall_iiiiiifi,\n dynCall_iiiiiiiifi,\n dynCall_iiiiiiiiiii,\n dynCall_iiiiiiiiff,\n dynCall_viij,\n dynCall_viiiiiiii,\n dynCall_iiiij,\n dynCall_viijii,\n dynCall_viijijj,\n dynCall_jijiii,\n dynCall_viifffi,\n dynCall_vij,\n dynCall_iiid,\n dynCall_viji,\n dynCall_jiji,\n dynCall_iidiiii,\n dynCall_jiiii,\n dynCall_diii,\n dynCall_viiiiiiiiiiiiiii,\n dynCall_iiiiij,\n dynCall_iiiiid,\n dynCall_iiiiijj,\n dynCall_iiiiiijj,\n dynCall_viif,\n dynCall_viid,\n _asyncify_start_unwind,\n _asyncify_stop_unwind,\n _asyncify_start_rewind,\n _asyncify_stop_rewind,\n __indirect_function_table,\n wasmTable;\nfunction assignWasmExports(wasmExports) {\n _wllama_malloc = Module['_wllama_malloc'] = wasmExports['_b'];\n _wllama_start = Module['_wllama_start'] = wasmExports['$b'];\n _wllama_action = Module['_wllama_action'] = wasmExports['ac'];\n _wllama_exit = Module['_wllama_exit'] = wasmExports['bc'];\n _wllama_debug = Module['_wllama_debug'] = wasmExports['cc'];\n _main = Module['_main'] = wasmExports['dc'];\n _malloc = wasmExports['ec'];\n _free = wasmExports['fc'];\n _emwgpuCreateBindGroup = wasmExports['gc'];\n _emwgpuCreateBindGroupLayout = wasmExports['hc'];\n _emwgpuCreateCommandBuffer = wasmExports['ic'];\n _emwgpuCreateCommandEncoder = wasmExports['jc'];\n _emwgpuCreateComputePassEncoder = wasmExports['kc'];\n _emwgpuCreateComputePipeline = wasmExports['lc'];\n _emwgpuCreateExternalTexture = wasmExports['mc'];\n _emwgpuCreatePipelineLayout = wasmExports['nc'];\n _emwgpuCreateQuerySet = wasmExports['oc'];\n _emwgpuCreateRenderBundle = wasmExports['pc'];\n _emwgpuCreateRenderBundleEncoder = wasmExports['qc'];\n _emwgpuCreateRenderPassEncoder = wasmExports['rc'];\n _emwgpuCreateRenderPipeline = wasmExports['sc'];\n _emwgpuCreateSampler = wasmExports['tc'];\n _emwgpuCreateSurface = wasmExports['uc'];\n _emwgpuCreateTexture = wasmExports['vc'];\n _emwgpuCreateTextureView = wasmExports['wc'];\n _emwgpuCreateAdapter = wasmExports['xc'];\n _emwgpuCreateBuffer = wasmExports['yc'];\n _emwgpuCreateDevice = wasmExports['zc'];\n _emwgpuCreateQueue = wasmExports['Ac'];\n _emwgpuCreateShaderModule = wasmExports['Bc'];\n _emwgpuOnDeviceLostCompleted = wasmExports['Cc'];\n _emwgpuOnMapAsyncCompleted = wasmExports['Dc'];\n _emwgpuOnRequestAdapterCompleted = wasmExports['Ec'];\n _emwgpuOnRequestDeviceCompleted = wasmExports['Fc'];\n _emwgpuOnWorkDoneCompleted = wasmExports['Gc'];\n _emwgpuOnUncapturedError = wasmExports['Hc'];\n __emscripten_tls_init = wasmExports['Ic'];\n _pthread_self = wasmExports['Jc'];\n _emscripten_builtin_memalign = wasmExports['Kc'];\n __emscripten_thread_init = wasmExports['Lc'];\n __emscripten_thread_crashed = wasmExports['Mc'];\n __emscripten_run_js_on_main_thread = wasmExports['Nc'];\n __emscripten_thread_free_data = wasmExports['Oc'];\n __emscripten_thread_exit = wasmExports['Pc'];\n __emscripten_check_mailbox = wasmExports['Qc'];\n _memalign = wasmExports['Rc'];\n _setThrew = wasmExports['Sc'];\n __emscripten_tempret_set = wasmExports['Tc'];\n _emscripten_stack_set_limits = wasmExports['Uc'];\n __emscripten_stack_restore = wasmExports['Vc'];\n __emscripten_stack_alloc = wasmExports['Wc'];\n _emscripten_stack_get_current = wasmExports['Xc'];\n ___cxa_decrement_exception_refcount = wasmExports['Yc'];\n ___cxa_increment_exception_refcount = wasmExports['Zc'];\n ___cxa_can_catch = wasmExports['_c'];\n ___cxa_get_exception_ptr = wasmExports['$c'];\n dynCall_v = dynCalls['v'] = wasmExports['ad'];\n dynCall_ii = dynCalls['ii'] = wasmExports['bd'];\n dynCall_iii = dynCalls['iii'] = wasmExports['cd'];\n dynCall_viii = dynCalls['viii'] = wasmExports['dd'];\n dynCall_vii = dynCalls['vii'] = wasmExports['ed'];\n dynCall_iiiiii = dynCalls['iiiiii'] = wasmExports['fd'];\n dynCall_iiiii = dynCalls['iiiii'] = wasmExports['gd'];\n dynCall_vi = dynCalls['vi'] = wasmExports['hd'];\n dynCall_iiii = dynCalls['iiii'] = wasmExports['id'];\n dynCall_viiii = dynCalls['viiii'] = wasmExports['jd'];\n dynCall_iiiiiii = dynCalls['iiiiiii'] = wasmExports['kd'];\n dynCall_ji = dynCalls['ji'] = wasmExports['ld'];\n dynCall_viiiii = dynCalls['viiiii'] = wasmExports['md'];\n dynCall_i = dynCalls['i'] = wasmExports['nd'];\n dynCall_iiiiiiiii = dynCalls['iiiiiiiii'] = wasmExports['od'];\n dynCall_j = dynCalls['j'] = wasmExports['pd'];\n dynCall_iiiiiiii = dynCalls['iiiiiiii'] = wasmExports['qd'];\n dynCall_ifi = dynCalls['ifi'] = wasmExports['rd'];\n dynCall_iffii = dynCalls['iffii'] = wasmExports['sd'];\n dynCall_ifff = dynCalls['ifff'] = wasmExports['td'];\n dynCall_iifff = dynCalls['iifff'] = wasmExports['ud'];\n dynCall_iiiffiiii = dynCalls['iiiffiiii'] = wasmExports['vd'];\n dynCall_if = dynCalls['if'] = wasmExports['wd'];\n dynCall_iiff = dynCalls['iiff'] = wasmExports['xd'];\n dynCall_iiiffi = dynCalls['iiiffi'] = wasmExports['yd'];\n dynCall_iiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiii'] = wasmExports['zd'];\n dynCall_viiiiii = dynCalls['viiiiii'] = wasmExports['Ad'];\n dynCall_iij = dynCalls['iij'] = wasmExports['Bd'];\n dynCall_jii = dynCalls['jii'] = wasmExports['Cd'];\n dynCall_iiij = dynCalls['iiij'] = wasmExports['Dd'];\n dynCall_iiijj = dynCalls['iiijj'] = wasmExports['Ed'];\n dynCall_iiif = dynCalls['iiif'] = wasmExports['Fd'];\n dynCall_iiijjii = dynCalls['iiijjii'] = wasmExports['Gd'];\n dynCall_iiijjj = dynCalls['iiijjj'] = wasmExports['Hd'];\n dynCall_iiijjjj = dynCalls['iiijjjj'] = wasmExports['Id'];\n dynCall_iiiji = dynCalls['iiiji'] = wasmExports['Jd'];\n dynCall_iiiiiiiiiiii = dynCalls['iiiiiiiiiiii'] = wasmExports['Kd'];\n dynCall_iiji = dynCalls['iiji'] = wasmExports['Ld'];\n dynCall_iiiijjji = dynCalls['iiiijjji'] = wasmExports['Md'];\n dynCall_fiii = dynCalls['fiii'] = wasmExports['Nd'];\n dynCall_iiijjjiii = dynCalls['iiijjjiii'] = wasmExports['Od'];\n dynCall_iiiiiiiiffi = dynCalls['iiiiiiiiffi'] = wasmExports['Pd'];\n dynCall_iiiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiiii'] = wasmExports['Qd'];\n dynCall_iiiiiij = dynCalls['iiiiiij'] = wasmExports['Rd'];\n dynCall_iiiiiiiiffffff = dynCalls['iiiiiiiiffffff'] = wasmExports['Sd'];\n dynCall_jiii = dynCalls['jiii'] = wasmExports['Td'];\n dynCall_iiiiiiiiii = dynCalls['iiiiiiiiii'] = wasmExports['Ud'];\n dynCall_viiiijjjji = dynCalls['viiiijjjji'] = wasmExports['Vd'];\n dynCall_viiiijjj = dynCalls['viiiijjj'] = wasmExports['Wd'];\n dynCall_iiiiiiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiiiiiii'] =\n wasmExports['Xd'];\n dynCall_viiiijjji = dynCalls['viiiijjji'] = wasmExports['Yd'];\n dynCall_iiiiiiiiiiiifi = dynCalls['iiiiiiiiiiiifi'] = wasmExports['Zd'];\n dynCall_iiiiiiiijjiifiiiiiii = dynCalls['iiiiiiiijjiifiiiiiii'] =\n wasmExports['_d'];\n dynCall_iiiiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiiiii'] = wasmExports['$d'];\n dynCall_iiiffff = dynCalls['iiiffff'] = wasmExports['ae'];\n dynCall_iiiff = dynCalls['iiiff'] = wasmExports['be'];\n dynCall_iiiiiiiiiffffff = dynCalls['iiiiiiiiiffffff'] = wasmExports['ce'];\n dynCall_iiiiiiji = dynCalls['iiiiiiji'] = wasmExports['de'];\n dynCall_iiiiijiiijjjjjjj = dynCalls['iiiiijiiijjjjjjj'] = wasmExports['ee'];\n dynCall_viiiiiiiii = dynCalls['viiiiiiiii'] = wasmExports['fe'];\n dynCall_iiiiiji = dynCalls['iiiiiji'] = wasmExports['ge'];\n dynCall_iiiiiiiiiiiijjiifiiiiiiii = dynCalls['iiiiiiiiiiiijjiifiiiiiiii'] =\n wasmExports['he'];\n dynCall_iiiiff = dynCalls['iiiiff'] = wasmExports['ie'];\n dynCall_iiiiiiiiiiiii = dynCalls['iiiiiiiiiiiii'] = wasmExports['je'];\n dynCall_viiiiiiiiii = dynCalls['viiiiiiiiii'] = wasmExports['ke'];\n dynCall_dii = dynCalls['dii'] = wasmExports['le'];\n dynCall_viiiif = dynCalls['viiiif'] = wasmExports['me'];\n dynCall_viiiiiii = dynCalls['viiiiiii'] = wasmExports['ne'];\n dynCall_iiijiiii = dynCalls['iiijiiii'] = wasmExports['oe'];\n dynCall_iiiiiifi = dynCalls['iiiiiifi'] = wasmExports['pe'];\n dynCall_iiiiiiiifi = dynCalls['iiiiiiiifi'] = wasmExports['qe'];\n dynCall_iiiiiiiiiii = dynCalls['iiiiiiiiiii'] = wasmExports['re'];\n dynCall_iiiiiiiiff = dynCalls['iiiiiiiiff'] = wasmExports['se'];\n dynCall_viij = dynCalls['viij'] = wasmExports['te'];\n dynCall_viiiiiiii = dynCalls['viiiiiiii'] = wasmExports['ue'];\n dynCall_iiiij = dynCalls['iiiij'] = wasmExports['ve'];\n dynCall_viijii = dynCalls['viijii'] = wasmExports['we'];\n dynCall_viijijj = dynCalls['viijijj'] = wasmExports['xe'];\n dynCall_jijiii = dynCalls['jijiii'] = wasmExports['ye'];\n dynCall_viifffi = dynCalls['viifffi'] = wasmExports['ze'];\n dynCall_vij = dynCalls['vij'] = wasmExports['Ae'];\n dynCall_iiid = dynCalls['iiid'] = wasmExports['Be'];\n dynCall_viji = dynCalls['viji'] = wasmExports['Ce'];\n dynCall_jiji = dynCalls['jiji'] = wasmExports['De'];\n dynCall_iidiiii = dynCalls['iidiiii'] = wasmExports['Ee'];\n dynCall_jiiii = dynCalls['jiiii'] = wasmExports['Fe'];\n dynCall_diii = dynCalls['diii'] = wasmExports['Ge'];\n dynCall_viiiiiiiiiiiiiii = dynCalls['viiiiiiiiiiiiiii'] = wasmExports['He'];\n dynCall_iiiiij = dynCalls['iiiiij'] = wasmExports['Ie'];\n dynCall_iiiiid = dynCalls['iiiiid'] = wasmExports['Je'];\n dynCall_iiiiijj = dynCalls['iiiiijj'] = wasmExports['Ke'];\n dynCall_iiiiiijj = dynCalls['iiiiiijj'] = wasmExports['Le'];\n dynCall_viif = dynCalls['viif'] = wasmExports['Me'];\n dynCall_viid = dynCalls['viid'] = wasmExports['Ne'];\n _asyncify_start_unwind = wasmExports['Oe'];\n _asyncify_stop_unwind = wasmExports['Pe'];\n _asyncify_start_rewind = wasmExports['Qe'];\n _asyncify_stop_rewind = wasmExports['Re'];\n __indirect_function_table = wasmTable = wasmExports['Zb'];\n}\nvar wasmImports;\nfunction assignWasmImports() {\n wasmImports = {\n y: ___cxa_begin_catch,\n lb: ___cxa_current_primary_exception,\n K: ___cxa_end_catch,\n b: ___cxa_find_matching_catch_2,\n p: ___cxa_find_matching_catch_3,\n R: ___cxa_find_matching_catch_4,\n na: ___cxa_rethrow,\n kb: ___cxa_rethrow_primary_exception,\n E: ___cxa_throw,\n ta: ___cxa_uncaught_exceptions,\n rb: ___pthread_create_js,\n j: ___resumeException,\n ya: ___syscall_fcntl64,\n Bb: ___syscall_ioctl,\n Cb: ___syscall_openat,\n Hb: __abort_js,\n yb: __emscripten_init_main_thread_js,\n nb: __emscripten_notify_mailbox_postmessage,\n sb: __emscripten_receive_on_main_thread_js,\n ua: __emscripten_thread_cleanup,\n xb: __emscripten_thread_mailbox_await,\n Eb: __emscripten_thread_set_strongref,\n tb: __mmap_js,\n ub: __munmap_js,\n vb: __tzset_js,\n Gb: _clock_time_get,\n va: _emscripten_check_blocking_allowed,\n Fb: _emscripten_date_now,\n Db: _emscripten_exit_with_live_runtime,\n ob: _emscripten_get_heap_max,\n ba: _emscripten_get_now,\n Nb: _emscripten_has_asyncify,\n pb: _emscripten_num_logical_cores,\n mb: _emscripten_resize_heap,\n Mb: _emwgpuAdapterRequestDevice,\n Tb: _emwgpuBufferDestroy,\n Sb: _emwgpuBufferGetConstMappedRange,\n Rb: _emwgpuBufferMapAsync,\n Qb: _emwgpuBufferUnmap,\n I: _emwgpuDelete,\n Lb: _emwgpuDeviceCreateBuffer,\n Kb: _emwgpuDeviceCreateShaderModule,\n Pb: _emwgpuDeviceDestroy,\n Jb: _emwgpuInstanceRequestAdapter,\n Ib: _emwgpuQueueOnSubmittedWorkDone,\n Ob: _emwgpuWaitAny,\n zb: _environ_get,\n Ab: _environ_sizes_get,\n qb: _exit,\n oa: _fd_close,\n wa: _fd_read,\n wb: _fd_seek,\n xa: _fd_write,\n ka: invoke_dii,\n sa: invoke_diii,\n G: invoke_fiii,\n B: invoke_i,\n qa: invoke_if,\n gb: invoke_ifff,\n hb: invoke_iffii,\n $: invoke_ifi,\n d: invoke_ii,\n eb: invoke_iiff,\n fb: invoke_iifff,\n g: invoke_iii,\n za: invoke_iiid,\n w: invoke_iiif,\n Ya: invoke_iiiff,\n Za: invoke_iiiffff,\n db: invoke_iiiffi,\n ra: invoke_iiiffiiii,\n f: invoke_iiii,\n Ua: invoke_iiiiff,\n k: invoke_iiiii,\n o: invoke_iiiiii,\n ja: invoke_iiiiiifi,\n n: invoke_iiiiiii,\n M: invoke_iiiiiiii,\n ca: invoke_iiiiiiiiff,\n q: invoke_iiiiiiiiffffff,\n ab: invoke_iiiiiiiiffi,\n Ra: invoke_iiiiiiiifi,\n V: invoke_iiiiiiiii,\n Q: invoke_iiiiiiiiiffffff,\n i: invoke_iiiiiiiiii,\n Qa: invoke_iiiiiiiiiii,\n Z: invoke_iiiiiiiiiiii,\n u: invoke_iiiiiiiiiiiifi,\n Ta: invoke_iiiiiiiiiiiii,\n cb: invoke_iiiiiiiiiiiiii,\n Y: invoke_iiiiiiiiiiiiiii,\n t: invoke_iiiiiiiiiiiiiiii,\n pa: invoke_iiiiiiiiiiiiiiiiii,\n Va: invoke_iiiiiiiiiiiijjiifiiiiiiii,\n F: invoke_iiiiiiiijjiifiiiiiii,\n $a: invoke_iiiiiij,\n ma: invoke_iiiiiiji,\n Wa: invoke_iiiiiji,\n la: invoke_iiiiijiiijjjjjjj,\n _: invoke_iiiij,\n bb: invoke_iiiijjji,\n N: invoke_iiij,\n X: invoke_iiiji,\n P: invoke_iiijiiii,\n H: invoke_iiijj,\n O: invoke_iiijjii,\n x: invoke_iiijjj,\n C: invoke_iiijjjiii,\n J: invoke_iiijjjj,\n A: invoke_iij,\n S: invoke_iiji,\n T: invoke_j,\n ga: invoke_ji,\n ea: invoke_jii,\n W: invoke_jiii,\n aa: invoke_jiiii,\n Ea: invoke_jijiii,\n c: invoke_v,\n m: invoke_vi,\n l: invoke_vii,\n ib: invoke_viid,\n _a: invoke_viif,\n h: invoke_viii,\n e: invoke_viiii,\n Sa: invoke_viiiif,\n s: invoke_viiiii,\n r: invoke_viiiiii,\n L: invoke_viiiiiii,\n Xa: invoke_viiiiiiiii,\n U: invoke_viiiiiiiiii,\n fa: invoke_viiiiiiiiiiiiiii,\n da: invoke_viiiijjj,\n v: invoke_viiiijjji,\n z: invoke_viiiijjjji,\n ha: invoke_viijii,\n Ha: invoke_viijijj,\n Aa: invoke_vij,\n D: _llvm_eh_typeid_for,\n a: wasmMemory,\n jb: _random_get,\n Na: _wgpuAdapterGetFeatures,\n Oa: _wgpuAdapterGetInfo,\n Pa: _wgpuAdapterGetLimits,\n Ma: _wgpuAdapterHasFeature,\n Ka: _wgpuBufferGetSize,\n Ba: _wgpuCommandEncoderBeginComputePass,\n Ia: _wgpuCommandEncoderCopyBufferToBuffer,\n Ga: _wgpuCommandEncoderFinish,\n Vb: _wgpuComputePassEncoderDispatchWorkgroups,\n Ub: _wgpuComputePassEncoderEnd,\n Wb: _wgpuComputePassEncoderSetBindGroup,\n Xb: _wgpuComputePassEncoderSetPipeline,\n Da: _wgpuComputePipelineGetBindGroupLayout,\n Ca: _wgpuDeviceCreateBindGroup,\n Ja: _wgpuDeviceCreateCommandEncoder,\n La: _wgpuDeviceCreateComputePipeline,\n Fa: _wgpuQueueSubmit,\n ia: _wgpuQueueWriteBuffer,\n };\n}\nfunction invoke_v(index) {\n var sp = stackSave();\n try {\n dynCall_v(index);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_viii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iii(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_iii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ii(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ii(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vii(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiiiii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vi(index, a1) {\n var sp = stackSave();\n try {\n dynCall_vi(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_viiii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ji(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ji(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_viiiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_viiiii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_i(index) {\n var sp = stackSave();\n try {\n return dynCall_i(index);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_j(index) {\n var sp = stackSave();\n try {\n return dynCall_j(index);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_iiiiiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiii(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiii(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ifi(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_ifi(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iffii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iffii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ifff(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_ifff(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iifff(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iifff(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiffiiii(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_iiiffiiii(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_if(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_if(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiff(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiff(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiffi(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiiffi(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_viiiiii(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iij(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_iij(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jii(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_jii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_iiij(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiij(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiijjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_viiiijjj(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiijj(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiif(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiif(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiijjii(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiijjj(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiijjjj(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiji(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiji(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiji(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiijjji(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiijjji(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_fiii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_fiii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjjiii(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_iiijjjiii(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiffi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiffi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiij(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiij(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viif(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_viif(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiijjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n dynCall_viiiijjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jiii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jiii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_viiiijjji(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n dynCall_viiiijjji(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiifi(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiifi(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiijjiifiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiijjiifiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiffff(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiffff(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiff(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiff(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiji(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiji(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiijiiijjjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiijiiijjjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n dynCall_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiji(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiji(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiijjiifiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiijjiifiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiff(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiiiff(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_dii(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_dii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n dynCall_viiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiif(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_viiiif(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_viiiiiii(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijiiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiijiiii(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiifi(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiifi(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiifi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiifi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiff(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiff(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiij(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiij(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viijijj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_viijijj(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jijiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jijiii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_viijii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_viijii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vij(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vij(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiid(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiid(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jiiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jiiii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_diii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_diii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n dynCall_viiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viid(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_viid(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction applySignatureConversions(wasmExports) {\n wasmExports = Object.assign({}, wasmExports);\n var makeWrapper_pp = (f) => (a0) => f(a0) >>> 0;\n var makeWrapper_p = (f) => () => f() >>> 0;\n var makeWrapper_ppp = (f) => (a0, a1) => f(a0, a1) >>> 0;\n wasmExports['ec'] = makeWrapper_pp(wasmExports['ec']);\n wasmExports['Jc'] = makeWrapper_p(wasmExports['Jc']);\n wasmExports['Kc'] = makeWrapper_ppp(wasmExports['Kc']);\n wasmExports['Rc'] = makeWrapper_ppp(wasmExports['Rc']);\n wasmExports['Wc'] = makeWrapper_pp(wasmExports['Wc']);\n wasmExports['Xc'] = makeWrapper_p(wasmExports['Xc']);\n wasmExports['$c'] = makeWrapper_pp(wasmExports['$c']);\n return wasmExports;\n}\nfunction callMain() {\n var entryFunction = _main;\n var argc = 0;\n var argv = 0;\n try {\n var ret = entryFunction(argc, argv);\n exitJS(ret, true);\n return ret;\n } catch (e) {\n return handleException(e);\n }\n}\nfunction run() {\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n if (ENVIRONMENT_IS_PTHREAD) {\n initRuntime();\n return;\n }\n preRun();\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n function doRun() {\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n preMain();\n Module['onRuntimeInitialized']?.();\n var noInitialRun = Module['noInitialRun'] || false;\n if (!noInitialRun) callMain();\n postRun();\n }\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(() => {\n setTimeout(() => Module['setStatus'](''), 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n}\nvar wasmExports;\nif (!ENVIRONMENT_IS_PTHREAD) {\n createWasm();\n run();\n}\n"; export declare const WLLAMA_ASYNCIFY_WEBGPU_SINGLE_THREAD_CODE = "var Module = typeof Module != 'undefined' ? Module : {};\nvar ENVIRONMENT_IS_WEB = !!globalThis.window;\nvar ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;\nvar ENVIRONMENT_IS_NODE =\n globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\nvar _scriptName = globalThis.document?.currentScript?.src;\nif (typeof __filename != 'undefined') {\n _scriptName = __filename;\n} else if (ENVIRONMENT_IS_WORKER) {\n _scriptName = self.location.href;\n}\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\nvar readAsync, readBinary;\nif (ENVIRONMENT_IS_NODE) {\n var fs = require('fs');\n scriptDirectory = __dirname + '/';\n readBinary = (filename) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename);\n return ret;\n };\n readAsync = async (filename, binary = true) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');\n return ret;\n };\n if (process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/');\n }\n arguments_ = process.argv.slice(2);\n if (typeof module != 'undefined') {\n module['exports'] = Module;\n }\n quit_ = (status, toThrow) => {\n process.exitCode = status;\n throw toThrow;\n };\n} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n try {\n scriptDirectory = new URL('.', _scriptName).href;\n } catch {}\n {\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = async (url) => {\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n resolve(xhr.response);\n return;\n }\n reject(xhr.status);\n };\n xhr.onerror = reject;\n xhr.send(null);\n });\n }\n var response = await fetch(url, { credentials: 'same-origin' });\n if (response.ok) {\n return response.arrayBuffer();\n }\n throw new Error(response.status + ' : ' + response.url);\n };\n }\n} else {\n}\nvar out = console.log.bind(console);\nvar err = console.error.bind(console);\nvar wasmBinary;\nvar ABORT = false;\nvar EXITSTATUS;\nfunction assert(condition, text) {\n if (!condition) {\n abort(text);\n }\n}\nvar isFileURI = (filename) => filename.startsWith('file://');\nvar HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\nvar HEAP64, HEAPU64;\nvar runtimeInitialized = false;\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n HEAP8 = new Int8Array(b);\n HEAP16 = new Int16Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n HEAPU16 = new Uint16Array(b);\n HEAP32 = new Int32Array(b);\n HEAPU32 = new Uint32Array(b);\n HEAPF32 = new Float32Array(b);\n HEAPF64 = new Float64Array(b);\n HEAP64 = new BigInt64Array(b);\n HEAPU64 = new BigUint64Array(b);\n}\nfunction initMemory() {\n if (Module['wasmMemory']) {\n wasmMemory = Module['wasmMemory'];\n } else {\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728;\n wasmMemory = new WebAssembly.Memory({\n initial: BigInt(INITIAL_MEMORY / 65536),\n maximum: 65536n,\n address: 'i64',\n });\n }\n updateMemoryViews();\n}\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(onPreRuns);\n}\nfunction initRuntime() {\n runtimeInitialized = true;\n if (!Module['noFSInit'] && !FS.initialized) FS.init();\n TTY.init();\n wasmExports['ed']();\n FS.ignorePermissions = false;\n}\nfunction preMain() {}\nfunction postRun() {\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(onPostRuns);\n}\nfunction abort(what) {\n Module['onAbort']?.(what);\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n what += '. Build with -sASSERTIONS for more info.';\n var e = new WebAssembly.RuntimeError(what);\n throw e;\n}\nvar wasmBinaryFile;\nfunction findWasmBinary() {\n return locateFile('wllama.wasm');\n}\nfunction getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n}\nasync function getWasmBinary(binaryFile) {\n if (!wasmBinary) {\n try {\n var response = await readAsync(binaryFile);\n return new Uint8Array(response);\n } catch {}\n }\n return getBinarySync(binaryFile);\n}\nasync function instantiateArrayBuffer(binaryFile, imports) {\n try {\n var binary = await getWasmBinary(binaryFile);\n var instance = await WebAssembly.instantiate(binary, imports);\n return instance;\n } catch (reason) {\n err(`failed to asynchronously prepare wasm: ${reason}`);\n abort(reason);\n }\n}\nasync function instantiateAsync(binary, binaryFile, imports) {\n if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {\n try {\n var response = fetch(binaryFile, { credentials: 'same-origin' });\n var instantiationResult = await WebAssembly.instantiateStreaming(\n response,\n imports\n );\n return instantiationResult;\n } catch (reason) {\n err(`wasm streaming compile failed: ${reason}`);\n err('falling back to ArrayBuffer instantiation');\n }\n }\n return instantiateArrayBuffer(binaryFile, imports);\n}\nfunction getWasmImports() {\n var imports = { a: wasmImports };\n return imports;\n}\nasync function createWasm() {\n function receiveInstance(instance, module) {\n wasmExports = instance.exports;\n wasmExports = Asyncify.instrumentWasmExports(wasmExports);\n wasmExports = applySignatureConversions(wasmExports);\n assignWasmExports(wasmExports);\n removeRunDependency('wasm-instantiate');\n return wasmExports;\n }\n addRunDependency('wasm-instantiate');\n function receiveInstantiationResult(result) {\n return receiveInstance(result['instance']);\n }\n var info = getWasmImports();\n if (Module['instantiateWasm']) {\n return new Promise((resolve, reject) => {\n Module['instantiateWasm'](info, (inst, mod) => {\n resolve(receiveInstance(inst, mod));\n });\n });\n }\n wasmBinaryFile ??= findWasmBinary();\n var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);\n var exports = receiveInstantiationResult(result);\n return exports;\n}\nclass ExitStatus {\n name = 'ExitStatus';\n constructor(status) {\n this.message = `Program terminated with exit(${status})`;\n this.status = status;\n }\n}\nvar callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n};\nvar onPostRuns = [];\nvar addOnPostRun = (cb) => onPostRuns.push(cb);\nvar onPreRuns = [];\nvar addOnPreRun = (cb) => onPreRuns.push(cb);\nvar runDependencies = 0;\nvar dependenciesFulfilled = null;\nvar removeRunDependency = (id) => {\n runDependencies--;\n Module['monitorRunDependencies']?.(runDependencies);\n if (runDependencies == 0) {\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n};\nvar addRunDependency = (id) => {\n runDependencies++;\n Module['monitorRunDependencies']?.(runDependencies);\n};\nvar dynCalls = {};\nvar noExitRuntime = true;\nvar stackRestore = (val) => __emscripten_stack_restore(val);\nvar stackSave = () => _emscripten_stack_get_current();\nvar wasmMemory;\nvar exceptionCaught = [];\nvar uncaughtExceptionCount = 0;\nvar INT53_MAX = 9007199254740992;\nvar INT53_MIN = -9007199254740992;\nvar bigintToI53Checked = (num) =>\n num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\nvar ___cxa_begin_catch = function (ptr) {\n ptr = bigintToI53Checked(ptr);\n var ret = (() => {\n var info = new ExceptionInfo(ptr);\n if (!info.get_caught()) {\n info.set_caught(true);\n uncaughtExceptionCount--;\n }\n info.set_rethrown(false);\n exceptionCaught.push(info);\n ___cxa_increment_exception_refcount(ptr);\n return ___cxa_get_exception_ptr(ptr);\n })();\n return BigInt(ret);\n};\nvar ___cxa_current_primary_exception = function () {\n var ret = (() => {\n if (!exceptionCaught.length) {\n return 0;\n }\n var info = exceptionCaught[exceptionCaught.length - 1];\n ___cxa_increment_exception_refcount(info.excPtr);\n return info.excPtr;\n })();\n return BigInt(ret);\n};\nvar exceptionLast = 0;\nvar ___cxa_end_catch = () => {\n _setThrew(0, 0);\n var info = exceptionCaught.pop();\n ___cxa_decrement_exception_refcount(info.excPtr);\n exceptionLast = 0;\n};\nclass ExceptionInfo {\n constructor(excPtr) {\n this.excPtr = excPtr;\n this.ptr = excPtr - 48;\n }\n set_type(type) {\n HEAPU64[(this.ptr + 8) / 8] = BigInt(type);\n }\n get_type() {\n return Number(HEAPU64[(this.ptr + 8) / 8]);\n }\n set_destructor(destructor) {\n HEAPU64[(this.ptr + 16) / 8] = BigInt(destructor);\n }\n get_destructor() {\n return Number(HEAPU64[(this.ptr + 16) / 8]);\n }\n set_caught(caught) {\n caught = caught ? 1 : 0;\n HEAP8[this.ptr + 24] = caught;\n }\n get_caught() {\n return HEAP8[this.ptr + 24] != 0;\n }\n set_rethrown(rethrown) {\n rethrown = rethrown ? 1 : 0;\n HEAP8[this.ptr + 25] = rethrown;\n }\n get_rethrown() {\n return HEAP8[this.ptr + 25] != 0;\n }\n init(type, destructor) {\n this.set_adjusted_ptr(0);\n this.set_type(type);\n this.set_destructor(destructor);\n }\n set_adjusted_ptr(adjustedPtr) {\n HEAPU64[(this.ptr + 32) / 8] = BigInt(adjustedPtr);\n }\n get_adjusted_ptr() {\n return Number(HEAPU64[(this.ptr + 32) / 8]);\n }\n}\nvar setTempRet0 = (val) => __emscripten_tempret_set(val);\nvar findMatchingCatch = (args) => {\n var thrown = exceptionLast;\n if (!thrown) {\n setTempRet0(0);\n return 0;\n }\n var info = new ExceptionInfo(thrown);\n info.set_adjusted_ptr(thrown);\n var thrownType = info.get_type();\n if (!thrownType) {\n setTempRet0(0);\n return thrown;\n }\n for (var caughtType of args) {\n if (caughtType === 0 || caughtType === thrownType) {\n break;\n }\n var adjusted_ptr_addr = info.ptr + 32;\n if (___cxa_can_catch(caughtType, thrownType, adjusted_ptr_addr)) {\n setTempRet0(caughtType);\n return thrown;\n }\n }\n setTempRet0(thrownType);\n return thrown;\n};\nvar ___cxa_find_matching_catch_2 = () => BigInt(findMatchingCatch([]));\nvar ___cxa_find_matching_catch_3 = (arg0) => {\n arg0 = bigintToI53Checked(arg0);\n return BigInt(findMatchingCatch([arg0]));\n};\nvar ___cxa_find_matching_catch_4 = (arg0, arg1) => {\n arg0 = bigintToI53Checked(arg0);\n arg1 = bigintToI53Checked(arg1);\n return BigInt(findMatchingCatch([arg0, arg1]));\n};\nvar ___cxa_rethrow = () => {\n var info = exceptionCaught.pop();\n if (!info) {\n abort('no exception to throw');\n }\n var ptr = info.excPtr;\n if (!info.get_rethrown()) {\n exceptionCaught.push(info);\n info.set_rethrown(true);\n info.set_caught(false);\n uncaughtExceptionCount++;\n }\n exceptionLast = ptr;\n throw exceptionLast;\n};\nfunction ___cxa_rethrow_primary_exception(ptr) {\n ptr = bigintToI53Checked(ptr);\n if (!ptr) return;\n var info = new ExceptionInfo(ptr);\n exceptionCaught.push(info);\n info.set_rethrown(true);\n ___cxa_rethrow();\n}\nfunction ___cxa_throw(ptr, type, destructor) {\n ptr = bigintToI53Checked(ptr);\n type = bigintToI53Checked(type);\n destructor = bigintToI53Checked(destructor);\n var info = new ExceptionInfo(ptr);\n info.init(type, destructor);\n exceptionLast = ptr;\n uncaughtExceptionCount++;\n throw exceptionLast;\n}\nvar ___cxa_uncaught_exceptions = () => uncaughtExceptionCount;\nfunction ___resumeException(ptr) {\n ptr = bigintToI53Checked(ptr);\n if (!exceptionLast) {\n exceptionLast = ptr;\n }\n throw exceptionLast;\n}\nvar syscallGetVarargP = () => {\n var ret = Number(HEAPU64[SYSCALLS.varargs / 8]);\n SYSCALLS.varargs += 8;\n return ret;\n};\nvar syscallGetVarargI = () => {\n var ret = HEAP32[+SYSCALLS.varargs / 4];\n SYSCALLS.varargs += 4;\n return ret;\n};\nvar PATH = {\n isAbs: (path) => path.charAt(0) === '/',\n splitPath: (filename) => {\n var splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n return splitPathRe.exec(filename).slice(1);\n },\n normalizeArray: (parts, allowAboveRoot) => {\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n if (allowAboveRoot) {\n for (; up; up--) {\n parts.unshift('..');\n }\n }\n return parts;\n },\n normalize: (path) => {\n var isAbsolute = PATH.isAbs(path),\n trailingSlash = path.slice(-1) === '/';\n path = PATH.normalizeArray(\n path.split('/').filter((p) => !!p),\n !isAbsolute\n ).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n },\n dirname: (path) => {\n var result = PATH.splitPath(path),\n root = result[0],\n dir = result[1];\n if (!root && !dir) {\n return '.';\n }\n if (dir) {\n dir = dir.slice(0, -1);\n }\n return root + dir;\n },\n basename: (path) => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n join: (...paths) => PATH.normalize(paths.join('/')),\n join2: (l, r) => PATH.normalize(l + '/' + r),\n};\nvar initRandomFill = () => (view) => crypto.getRandomValues(view);\nvar randomFill = (view) => {\n (randomFill = initRandomFill())(view);\n};\nvar PATH_FS = {\n resolve: (...args) => {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? args[i] : FS.cwd();\n if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n return '';\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = PATH.isAbs(path);\n }\n resolvedPath = PATH.normalizeArray(\n resolvedPath.split('/').filter((p) => !!p),\n !resolvedAbsolute\n ).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n },\n relative: (from, to) => {\n from = PATH_FS.resolve(from).slice(1);\n to = PATH_FS.resolve(to).slice(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n },\n};\nvar UTF8Decoder = globalThis.TextDecoder && new TextDecoder();\nvar findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n var maxIdx = idx + maxBytesToRead;\n if (ignoreNul) return maxIdx;\n while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n return idx;\n};\nvar UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n};\nvar FS_stdin_getChar_buffer = [];\nvar lengthBytesUTF8 = (str) => {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n var c = str.charCodeAt(i);\n if (c <= 127) {\n len++;\n } else if (c <= 2047) {\n len += 2;\n } else if (c >= 55296 && c <= 57343) {\n len += 4;\n ++i;\n } else {\n len += 3;\n }\n }\n return len;\n};\nvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.codePointAt(i);\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++] = 192 | (u >> 6);\n heap[outIdx++] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++] = 224 | (u >> 12);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++] = 240 | (u >> 18);\n heap[outIdx++] = 128 | ((u >> 12) & 63);\n heap[outIdx++] = 128 | ((u >> 6) & 63);\n heap[outIdx++] = 128 | (u & 63);\n i++;\n }\n }\n heap[outIdx] = 0;\n return outIdx - startIdx;\n};\nvar intArrayFromString = (stringy, dontAddNull, length) => {\n var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n var u8array = new Array(len);\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n if (dontAddNull) u8array.length = numBytesWritten;\n return u8array;\n};\nvar FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n var result = null;\n if (ENVIRONMENT_IS_NODE) {\n var BUFSIZE = 256;\n var buf = Buffer.alloc(BUFSIZE);\n var bytesRead = 0;\n var fd = process.stdin.fd;\n try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n } catch (e) {\n if (e.toString().includes('EOF')) bytesRead = 0;\n else throw e;\n }\n if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8');\n }\n } else if (globalThis.window?.prompt) {\n result = window.prompt('Input: ');\n if (result !== null) {\n result += '\\n';\n }\n } else {\n }\n if (!result) {\n return null;\n }\n FS_stdin_getChar_buffer = intArrayFromString(result, true);\n }\n return FS_stdin_getChar_buffer.shift();\n};\nvar TTY = {\n ttys: [],\n init() {},\n shutdown() {},\n register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops };\n FS.registerDevice(dev, TTY.stream_ops);\n },\n stream_ops: {\n open(stream) {\n var tty = TTY.ttys[stream.node.rdev];\n if (!tty) {\n throw new FS.ErrnoError(43);\n }\n stream.tty = tty;\n stream.seekable = false;\n },\n close(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n fsync(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n read(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60);\n }\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = stream.tty.ops.get_char(stream.tty);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60);\n }\n try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n }\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n },\n default_tty_ops: {\n get_char(tty) {\n return FS_stdin_getChar();\n },\n put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n ioctl_tcgets(tty) {\n return {\n c_iflag: 25856,\n c_oflag: 5,\n c_cflag: 191,\n c_lflag: 35387,\n c_cc: [\n 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ],\n };\n },\n ioctl_tcsets(tty, optional_actions, data) {\n return 0;\n },\n ioctl_tiocgwinsz(tty) {\n return [24, 80];\n },\n },\n default_tty1_ops: {\n put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n },\n};\nvar zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size);\nvar alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;\nvar mmapAlloc = (size) => {\n size = alignMemory(size, 65536);\n var ptr = _emscripten_builtin_memalign(65536, size);\n if (ptr) zeroMemory(ptr, size);\n return ptr;\n};\nvar MEMFS = {\n ops_table: null,\n mount(mount) {\n return MEMFS.createNode(null, '/', 16895, 0);\n },\n createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n throw new FS.ErrnoError(63);\n }\n MEMFS.ops_table ||= {\n dir: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n lookup: MEMFS.node_ops.lookup,\n mknod: MEMFS.node_ops.mknod,\n rename: MEMFS.node_ops.rename,\n unlink: MEMFS.node_ops.unlink,\n rmdir: MEMFS.node_ops.rmdir,\n readdir: MEMFS.node_ops.readdir,\n symlink: MEMFS.node_ops.symlink,\n },\n stream: { llseek: MEMFS.stream_ops.llseek },\n },\n file: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek,\n read: MEMFS.stream_ops.read,\n write: MEMFS.stream_ops.write,\n mmap: MEMFS.stream_ops.mmap,\n msync: MEMFS.stream_ops.msync,\n },\n },\n link: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n readlink: MEMFS.node_ops.readlink,\n },\n stream: {},\n },\n chrdev: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: FS.chrdev_stream_ops,\n },\n };\n var node = FS.createNode(parent, name, mode, dev);\n if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node;\n node.stream_ops = MEMFS.ops_table.dir.stream;\n node.contents = {};\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node;\n node.stream_ops = MEMFS.ops_table.file.stream;\n node.usedBytes = 0;\n node.contents = null;\n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node;\n node.stream_ops = MEMFS.ops_table.link.stream;\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node;\n node.stream_ops = MEMFS.ops_table.chrdev.stream;\n }\n node.atime = node.mtime = node.ctime = Date.now();\n if (parent) {\n parent.contents[name] = node;\n parent.atime = parent.mtime = parent.ctime = node.atime;\n }\n return node;\n },\n getFileDataAsTypedArray(node) {\n if (!node.contents) return new Uint8Array(0);\n if (node.contents.subarray)\n return node.contents.subarray(0, node.usedBytes);\n return new Uint8Array(node.contents);\n },\n expandFileStorage(node, newCapacity) {\n var prevCapacity = node.contents ? node.contents.length : 0;\n if (prevCapacity >= newCapacity) return;\n var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n newCapacity = Math.max(\n newCapacity,\n (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>> 0\n );\n if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n var oldContents = node.contents;\n node.contents = new Uint8Array(newCapacity);\n if (node.usedBytes > 0)\n node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n },\n resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize) return;\n if (newSize == 0) {\n node.contents = null;\n node.usedBytes = 0;\n } else {\n var oldContents = node.contents;\n node.contents = new Uint8Array(newSize);\n if (oldContents) {\n node.contents.set(\n oldContents.subarray(0, Math.min(newSize, node.usedBytes))\n );\n }\n node.usedBytes = newSize;\n }\n },\n node_ops: {\n getattr(node) {\n var attr = {};\n attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n attr.ino = node.id;\n attr.mode = node.mode;\n attr.nlink = 1;\n attr.uid = 0;\n attr.gid = 0;\n attr.rdev = node.rdev;\n if (FS.isDir(node.mode)) {\n attr.size = 4096;\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes;\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length;\n } else {\n attr.size = 0;\n }\n attr.atime = new Date(node.atime);\n attr.mtime = new Date(node.mtime);\n attr.ctime = new Date(node.ctime);\n attr.blksize = 4096;\n attr.blocks = Math.ceil(attr.size / attr.blksize);\n return attr;\n },\n setattr(node, attr) {\n for (const key of ['mode', 'atime', 'mtime', 'ctime']) {\n if (attr[key] != null) {\n node[key] = attr[key];\n }\n }\n if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size);\n }\n },\n lookup(parent, name) {\n if (!MEMFS.doesNotExistError) {\n MEMFS.doesNotExistError = new FS.ErrnoError(44);\n MEMFS.doesNotExistError.stack = '';\n }\n throw MEMFS.doesNotExistError;\n },\n mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev);\n },\n rename(old_node, new_dir, new_name) {\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (new_node) {\n if (FS.isDir(old_node.mode)) {\n for (var i in new_node.contents) {\n throw new FS.ErrnoError(55);\n }\n }\n FS.hashRemoveNode(new_node);\n }\n delete old_node.parent.contents[old_node.name];\n new_dir.contents[new_name] = old_node;\n old_node.name = new_name;\n new_dir.ctime =\n new_dir.mtime =\n old_node.parent.ctime =\n old_node.parent.mtime =\n Date.now();\n },\n unlink(parent, name) {\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n rmdir(parent, name) {\n var node = FS.lookupNode(parent, name);\n for (var i in node.contents) {\n throw new FS.ErrnoError(55);\n }\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n readdir(node) {\n return ['.', '..', ...Object.keys(node.contents)];\n },\n symlink(parent, newname, oldpath) {\n var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);\n node.link = oldpath;\n return node;\n },\n readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n return node.link;\n },\n },\n stream_ops: {\n read(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= stream.node.usedBytes) return 0;\n var size = Math.min(stream.node.usedBytes - position, length);\n if (size > 8 && contents.subarray) {\n buffer.set(contents.subarray(position, position + size), offset);\n } else {\n for (var i = 0; i < size; i++)\n buffer[offset + i] = contents[position + i];\n }\n return size;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (buffer.buffer === HEAP8.buffer) {\n canOwn = false;\n }\n if (!length) return 0;\n var node = stream.node;\n node.mtime = node.ctime = Date.now();\n if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (node.usedBytes === 0 && position === 0) {\n node.contents = buffer.slice(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (position + length <= node.usedBytes) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n return length;\n }\n }\n MEMFS.expandFileStorage(node, position + length);\n if (node.contents.subarray && buffer.subarray) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n } else {\n for (var i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i];\n }\n }\n node.usedBytes = Math.max(node.usedBytes, position + length);\n return length;\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes;\n }\n }\n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n return position;\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n var ptr;\n var allocated;\n var contents = stream.node.contents;\n if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n allocated = false;\n ptr = contents.byteOffset;\n } else {\n allocated = true;\n ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n if (contents) {\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length);\n } else {\n contents = Array.prototype.slice.call(\n contents,\n position,\n position + length\n );\n }\n }\n HEAP8.set(contents, ptr);\n }\n }\n return { ptr, allocated };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n return 0;\n },\n },\n};\nvar FS_modeStringToFlags = (str) => {\n var flagModes = {\n r: 0,\n 'r+': 2,\n w: 512 | 64 | 1,\n 'w+': 512 | 64 | 2,\n a: 1024 | 64 | 1,\n 'a+': 1024 | 64 | 2,\n };\n var flags = flagModes[str];\n if (typeof flags == 'undefined') {\n throw new Error(`Unknown file open mode: ${str}`);\n }\n return flags;\n};\nvar FS_getMode = (canRead, canWrite) => {\n var mode = 0;\n if (canRead) mode |= 292 | 73;\n if (canWrite) mode |= 146;\n return mode;\n};\nvar asyncLoad = async (url) => {\n var arrayBuffer = await readAsync(url);\n return new Uint8Array(arrayBuffer);\n};\nvar FS_createDataFile = (...args) => FS.createDataFile(...args);\nvar getUniqueRunDependency = (id) => id;\nvar preloadPlugins = [];\nvar FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n if (typeof Browser != 'undefined') Browser.init();\n for (var plugin of preloadPlugins) {\n if (plugin['canHandle'](fullname)) {\n return plugin['handle'](byteArray, fullname);\n }\n }\n return byteArray;\n};\nvar FS_preloadFile = async (\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n var dep = getUniqueRunDependency(`cp ${fullname}`);\n addRunDependency(dep);\n try {\n var byteArray = url;\n if (typeof url == 'string') {\n byteArray = await asyncLoad(url);\n }\n byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n preFinish?.();\n if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n }\n } finally {\n removeRunDependency(dep);\n }\n};\nvar FS_createPreloadedFile = (\n parent,\n name,\n url,\n canRead,\n canWrite,\n onload,\n onerror,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n FS_preloadFile(\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n )\n .then(onload)\n .catch(onerror);\n};\nvar FS = {\n root: null,\n mounts: [],\n devices: {},\n streams: [],\n nextInode: 1,\n nameTable: null,\n currentPath: '/',\n initialized: false,\n ignorePermissions: true,\n filesystems: null,\n syncFSRequests: 0,\n readFiles: {},\n ErrnoError: class {\n name = 'ErrnoError';\n constructor(errno) {\n this.errno = errno;\n }\n },\n FSStream: class {\n shared = {};\n get object() {\n return this.node;\n }\n set object(val) {\n this.node = val;\n }\n get isRead() {\n return (this.flags & 2097155) !== 1;\n }\n get isWrite() {\n return (this.flags & 2097155) !== 0;\n }\n get isAppend() {\n return this.flags & 1024;\n }\n get flags() {\n return this.shared.flags;\n }\n set flags(val) {\n this.shared.flags = val;\n }\n get position() {\n return this.shared.position;\n }\n set position(val) {\n this.shared.position = val;\n }\n },\n FSNode: class {\n node_ops = {};\n stream_ops = {};\n readMode = 292 | 73;\n writeMode = 146;\n mounted = null;\n constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this;\n }\n this.parent = parent;\n this.mount = parent.mount;\n this.id = FS.nextInode++;\n this.name = name;\n this.mode = mode;\n this.rdev = rdev;\n this.atime = this.mtime = this.ctime = Date.now();\n }\n get read() {\n return (this.mode & this.readMode) === this.readMode;\n }\n set read(val) {\n val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n }\n get write() {\n return (this.mode & this.writeMode) === this.writeMode;\n }\n set write(val) {\n val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n }\n get isFolder() {\n return FS.isDir(this.mode);\n }\n get isDevice() {\n return FS.isChrdev(this.mode);\n }\n },\n lookupPath(path, opts = {}) {\n if (!path) {\n throw new FS.ErrnoError(44);\n }\n opts.follow_mount ??= true;\n if (!PATH.isAbs(path)) {\n path = FS.cwd() + '/' + path;\n }\n linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n var parts = path.split('/').filter((p) => !!p);\n var current = FS.root;\n var current_path = '/';\n for (var i = 0; i < parts.length; i++) {\n var islast = i === parts.length - 1;\n if (islast && opts.parent) {\n break;\n }\n if (parts[i] === '.') {\n continue;\n }\n if (parts[i] === '..') {\n current_path = PATH.dirname(current_path);\n if (FS.isRoot(current)) {\n path = current_path + '/' + parts.slice(i + 1).join('/');\n nlinks--;\n continue linkloop;\n } else {\n current = current.parent;\n }\n continue;\n }\n current_path = PATH.join2(current_path, parts[i]);\n try {\n current = FS.lookupNode(current, parts[i]);\n } catch (e) {\n if (e?.errno === 44 && islast && opts.noent_okay) {\n return { path: current_path };\n }\n throw e;\n }\n if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {\n current = current.mounted.root;\n }\n if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n if (!current.node_ops.readlink) {\n throw new FS.ErrnoError(52);\n }\n var link = current.node_ops.readlink(current);\n if (!PATH.isAbs(link)) {\n link = PATH.dirname(current_path) + '/' + link;\n }\n path = link + '/' + parts.slice(i + 1).join('/');\n continue linkloop;\n }\n }\n return { path: current_path, node: current };\n }\n throw new FS.ErrnoError(32);\n },\n getPath(node) {\n var path;\n while (true) {\n if (FS.isRoot(node)) {\n var mount = node.mount.mountpoint;\n if (!path) return mount;\n return mount[mount.length - 1] !== '/'\n ? `${mount}/${path}`\n : mount + path;\n }\n path = path ? `${node.name}/${path}` : node.name;\n node = node.parent;\n }\n },\n hashName(parentid, name) {\n var hash = 0;\n for (var i = 0; i < name.length; i++) {\n hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n }\n return ((parentid + hash) >>> 0) % FS.nameTable.length;\n },\n hashAddNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n node.name_next = FS.nameTable[hash];\n FS.nameTable[hash] = node;\n },\n hashRemoveNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next;\n } else {\n var current = FS.nameTable[hash];\n while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next;\n break;\n }\n current = current.name_next;\n }\n }\n },\n lookupNode(parent, name) {\n var errCode = FS.mayLookup(parent);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n var hash = FS.hashName(parent.id, name);\n for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n var nodeName = node.name;\n if (node.parent.id === parent.id && nodeName === name) {\n return node;\n }\n }\n return FS.lookup(parent, name);\n },\n createNode(parent, name, mode, rdev) {\n var node = new FS.FSNode(parent, name, mode, rdev);\n FS.hashAddNode(node);\n return node;\n },\n destroyNode(node) {\n FS.hashRemoveNode(node);\n },\n isRoot(node) {\n return node === node.parent;\n },\n isMountpoint(node) {\n return !!node.mounted;\n },\n isFile(mode) {\n return (mode & 61440) === 32768;\n },\n isDir(mode) {\n return (mode & 61440) === 16384;\n },\n isLink(mode) {\n return (mode & 61440) === 40960;\n },\n isChrdev(mode) {\n return (mode & 61440) === 8192;\n },\n isBlkdev(mode) {\n return (mode & 61440) === 24576;\n },\n isFIFO(mode) {\n return (mode & 61440) === 4096;\n },\n isSocket(mode) {\n return (mode & 49152) === 49152;\n },\n flagsToPermissionString(flag) {\n var perms = ['r', 'w', 'rw'][flag & 3];\n if (flag & 512) {\n perms += 'w';\n }\n return perms;\n },\n nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0;\n }\n if (perms.includes('r') && !(node.mode & 292)) {\n return 2;\n } else if (perms.includes('w') && !(node.mode & 146)) {\n return 2;\n } else if (perms.includes('x') && !(node.mode & 73)) {\n return 2;\n }\n return 0;\n },\n mayLookup(dir) {\n if (!FS.isDir(dir.mode)) return 54;\n var errCode = FS.nodePermissions(dir, 'x');\n if (errCode) return errCode;\n if (!dir.node_ops.lookup) return 2;\n return 0;\n },\n mayCreate(dir, name) {\n if (!FS.isDir(dir.mode)) {\n return 54;\n }\n try {\n var node = FS.lookupNode(dir, name);\n return 20;\n } catch (e) {}\n return FS.nodePermissions(dir, 'wx');\n },\n mayDelete(dir, name, isdir) {\n var node;\n try {\n node = FS.lookupNode(dir, name);\n } catch (e) {\n return e.errno;\n }\n var errCode = FS.nodePermissions(dir, 'wx');\n if (errCode) {\n return errCode;\n }\n if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54;\n }\n if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10;\n }\n } else {\n if (FS.isDir(node.mode)) {\n return 31;\n }\n }\n return 0;\n },\n mayOpen(node, flags) {\n if (!node) {\n return 44;\n }\n if (FS.isLink(node.mode)) {\n return 32;\n } else if (FS.isDir(node.mode)) {\n if (FS.flagsToPermissionString(flags) !== 'r' || flags & (512 | 64)) {\n return 31;\n }\n }\n return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n },\n checkOpExists(op, err) {\n if (!op) {\n throw new FS.ErrnoError(err);\n }\n return op;\n },\n MAX_OPEN_FDS: 4096,\n nextfd() {\n for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd;\n }\n }\n throw new FS.ErrnoError(33);\n },\n getStreamChecked(fd) {\n var stream = FS.getStream(fd);\n if (!stream) {\n throw new FS.ErrnoError(8);\n }\n return stream;\n },\n getStream: (fd) => FS.streams[fd],\n createStream(stream, fd = -1) {\n stream = Object.assign(new FS.FSStream(), stream);\n if (fd == -1) {\n fd = FS.nextfd();\n }\n stream.fd = fd;\n FS.streams[fd] = stream;\n return stream;\n },\n closeStream(fd) {\n FS.streams[fd] = null;\n },\n dupStream(origStream, fd = -1) {\n var stream = FS.createStream(origStream, fd);\n stream.stream_ops?.dup?.(stream);\n return stream;\n },\n doSetAttr(stream, node, attr) {\n var setattr = stream?.stream_ops.setattr;\n var arg = setattr ? stream : node;\n setattr ??= node.node_ops.setattr;\n FS.checkOpExists(setattr, 63);\n setattr(arg, attr);\n },\n chrdev_stream_ops: {\n open(stream) {\n var device = FS.getDevice(stream.node.rdev);\n stream.stream_ops = device.stream_ops;\n stream.stream_ops.open?.(stream);\n },\n llseek() {\n throw new FS.ErrnoError(70);\n },\n },\n major: (dev) => dev >> 8,\n minor: (dev) => dev & 255,\n makedev: (ma, mi) => (ma << 8) | mi,\n registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops };\n },\n getDevice: (dev) => FS.devices[dev],\n getMounts(mount) {\n var mounts = [];\n var check = [mount];\n while (check.length) {\n var m = check.pop();\n mounts.push(m);\n check.push(...m.mounts);\n }\n return mounts;\n },\n syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate;\n populate = false;\n }\n FS.syncFSRequests++;\n if (FS.syncFSRequests > 1) {\n err(\n `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`\n );\n }\n var mounts = FS.getMounts(FS.root.mount);\n var completed = 0;\n function doCallback(errCode) {\n FS.syncFSRequests--;\n return callback(errCode);\n }\n function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true;\n return doCallback(errCode);\n }\n return;\n }\n if (++completed >= mounts.length) {\n doCallback(null);\n }\n }\n for (var mount of mounts) {\n if (mount.type.syncfs) {\n mount.type.syncfs(mount, populate, done);\n } else {\n done(null);\n }\n }\n },\n mount(type, opts, mountpoint) {\n var root = mountpoint === '/';\n var pseudo = !mountpoint;\n var node;\n if (root && FS.root) {\n throw new FS.ErrnoError(10);\n } else if (!root && !pseudo) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n mountpoint = lookup.path;\n node = lookup.node;\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n }\n var mount = { type, opts, mountpoint, mounts: [] };\n var mountRoot = type.mount(mount);\n mountRoot.mount = mount;\n mount.root = mountRoot;\n if (root) {\n FS.root = mountRoot;\n } else if (node) {\n node.mounted = mount;\n if (node.mount) {\n node.mount.mounts.push(mount);\n }\n }\n return mountRoot;\n },\n unmount(mountpoint) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28);\n }\n var node = lookup.node;\n var mount = node.mounted;\n var mounts = FS.getMounts(mount);\n for (var [hash, current] of Object.entries(FS.nameTable)) {\n while (current) {\n var next = current.name_next;\n if (mounts.includes(current.mount)) {\n FS.destroyNode(current);\n }\n current = next;\n }\n }\n node.mounted = null;\n var idx = node.mount.mounts.indexOf(mount);\n node.mount.mounts.splice(idx, 1);\n },\n lookup(parent, name) {\n return parent.node_ops.lookup(parent, name);\n },\n mknod(path, mode, dev) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n if (!name) {\n throw new FS.ErrnoError(28);\n }\n if (name === '.' || name === '..') {\n throw new FS.ErrnoError(20);\n }\n var errCode = FS.mayCreate(parent, name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.mknod(parent, name, mode, dev);\n },\n statfs(path) {\n return FS.statfsNode(FS.lookupPath(path, { follow: true }).node);\n },\n statfsStream(stream) {\n return FS.statfsNode(stream.node);\n },\n statfsNode(node) {\n var rtn = {\n bsize: 4096,\n frsize: 4096,\n blocks: 1e6,\n bfree: 5e5,\n bavail: 5e5,\n files: FS.nextInode,\n ffree: FS.nextInode - 1,\n fsid: 42,\n flags: 2,\n namelen: 255,\n };\n if (node.node_ops.statfs) {\n Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n }\n return rtn;\n },\n create(path, mode = 438) {\n mode &= 4095;\n mode |= 32768;\n return FS.mknod(path, mode, 0);\n },\n mkdir(path, mode = 511) {\n mode &= 511 | 512;\n mode |= 16384;\n return FS.mknod(path, mode, 0);\n },\n mkdirTree(path, mode) {\n var dirs = path.split('/');\n var d = '';\n for (var dir of dirs) {\n if (!dir) continue;\n if (d || PATH.isAbs(path)) d += '/';\n d += dir;\n try {\n FS.mkdir(d, mode);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n }\n },\n mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode;\n mode = 438;\n }\n mode |= 8192;\n return FS.mknod(path, mode, dev);\n },\n symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44);\n }\n var lookup = FS.lookupPath(newpath, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var newname = PATH.basename(newpath);\n var errCode = FS.mayCreate(parent, newname);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.symlink(parent, newname, oldpath);\n },\n rename(old_path, new_path) {\n var old_dirname = PATH.dirname(old_path);\n var new_dirname = PATH.dirname(new_path);\n var old_name = PATH.basename(old_path);\n var new_name = PATH.basename(new_path);\n var lookup, old_dir, new_dir;\n lookup = FS.lookupPath(old_path, { parent: true });\n old_dir = lookup.node;\n lookup = FS.lookupPath(new_path, { parent: true });\n new_dir = lookup.node;\n if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75);\n }\n var old_node = FS.lookupNode(old_dir, old_name);\n var relative = PATH_FS.relative(old_path, new_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28);\n }\n relative = PATH_FS.relative(new_path, old_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55);\n }\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (old_node === new_node) {\n return;\n }\n var isdir = FS.isDir(old_node.mode);\n var errCode = FS.mayDelete(old_dir, old_name, isdir);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n errCode = new_node\n ? FS.mayDelete(new_dir, new_name, isdir)\n : FS.mayCreate(new_dir, new_name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n throw new FS.ErrnoError(10);\n }\n if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n FS.hashRemoveNode(old_node);\n try {\n old_dir.node_ops.rename(old_node, new_dir, new_name);\n old_node.parent = new_dir;\n } catch (e) {\n throw e;\n } finally {\n FS.hashAddNode(old_node);\n }\n },\n rmdir(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, true);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.rmdir(parent, name);\n FS.destroyNode(node);\n },\n readdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var readdir = FS.checkOpExists(node.node_ops.readdir, 54);\n return readdir(node);\n },\n unlink(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, false);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.unlink(parent, name);\n FS.destroyNode(node);\n },\n readlink(path) {\n var lookup = FS.lookupPath(path);\n var link = lookup.node;\n if (!link) {\n throw new FS.ErrnoError(44);\n }\n if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28);\n }\n return link.node_ops.readlink(link);\n },\n stat(path, dontFollow) {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n var node = lookup.node;\n var getattr = FS.checkOpExists(node.node_ops.getattr, 63);\n return getattr(node);\n },\n fstat(fd) {\n var stream = FS.getStreamChecked(fd);\n var node = stream.node;\n var getattr = stream.stream_ops.getattr;\n var arg = getattr ? stream : node;\n getattr ??= node.node_ops.getattr;\n FS.checkOpExists(getattr, 63);\n return getattr(arg);\n },\n lstat(path) {\n return FS.stat(path, true);\n },\n doChmod(stream, node, mode, dontFollow) {\n FS.doSetAttr(stream, node, {\n mode: (mode & 4095) | (node.mode & ~4095),\n ctime: Date.now(),\n dontFollow,\n });\n },\n chmod(path, mode, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChmod(null, node, mode, dontFollow);\n },\n lchmod(path, mode) {\n FS.chmod(path, mode, true);\n },\n fchmod(fd, mode) {\n var stream = FS.getStreamChecked(fd);\n FS.doChmod(stream, stream.node, mode, false);\n },\n doChown(stream, node, dontFollow) {\n FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow });\n },\n chown(path, uid, gid, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChown(null, node, dontFollow);\n },\n lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true);\n },\n fchown(fd, uid, gid) {\n var stream = FS.getStreamChecked(fd);\n FS.doChown(stream, stream.node, false);\n },\n doTruncate(stream, node, len) {\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.nodePermissions(node, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() });\n },\n truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28);\n }\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: true });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doTruncate(null, node, len);\n },\n ftruncate(fd, len) {\n var stream = FS.getStreamChecked(fd);\n if (len < 0 || (stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28);\n }\n FS.doTruncate(stream, stream.node, len);\n },\n utime(path, atime, mtime) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var setattr = FS.checkOpExists(node.node_ops.setattr, 63);\n setattr(node, { atime, mtime });\n },\n open(path, flags, mode = 438) {\n if (path === '') {\n throw new FS.ErrnoError(44);\n }\n flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n if (flags & 64) {\n mode = (mode & 4095) | 32768;\n } else {\n mode = 0;\n }\n var node;\n var isDirPath;\n if (typeof path == 'object') {\n node = path;\n } else {\n isDirPath = path.endsWith('/');\n var lookup = FS.lookupPath(path, {\n follow: !(flags & 131072),\n noent_okay: true,\n });\n node = lookup.node;\n path = lookup.path;\n }\n var created = false;\n if (flags & 64) {\n if (node) {\n if (flags & 128) {\n throw new FS.ErrnoError(20);\n }\n } else if (isDirPath) {\n throw new FS.ErrnoError(31);\n } else {\n node = FS.mknod(path, mode | 511, 0);\n created = true;\n }\n }\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n if (FS.isChrdev(node.mode)) {\n flags &= ~512;\n }\n if (flags & 65536 && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n if (!created) {\n var errCode = FS.mayOpen(node, flags);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n if (flags & 512 && !created) {\n FS.truncate(node, 0);\n }\n flags &= ~(128 | 512 | 131072);\n var stream = FS.createStream({\n node,\n path: FS.getPath(node),\n flags,\n seekable: true,\n position: 0,\n stream_ops: node.stream_ops,\n ungotten: [],\n error: false,\n });\n if (stream.stream_ops.open) {\n stream.stream_ops.open(stream);\n }\n if (created) {\n FS.chmod(node, mode & 511);\n }\n if (Module['logReadFiles'] && !(flags & 1)) {\n if (!(path in FS.readFiles)) {\n FS.readFiles[path] = 1;\n }\n }\n return stream;\n },\n close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (stream.getdents) stream.getdents = null;\n try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream);\n }\n } catch (e) {\n throw e;\n } finally {\n FS.closeStream(stream.fd);\n }\n stream.fd = null;\n },\n isClosed(stream) {\n return stream.fd === null;\n },\n llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70);\n }\n if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28);\n }\n stream.position = stream.stream_ops.llseek(stream, offset, whence);\n stream.ungotten = [];\n return stream.position;\n },\n read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesRead = stream.stream_ops.read(\n stream,\n buffer,\n offset,\n length,\n position\n );\n if (!seeking) stream.position += bytesRead;\n return bytesRead;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28);\n }\n if (stream.seekable && stream.flags & 1024) {\n FS.llseek(stream, 0, 2);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesWritten = stream.stream_ops.write(\n stream,\n buffer,\n offset,\n length,\n position,\n canOwn\n );\n if (!seeking) stream.position += bytesWritten;\n return bytesWritten;\n },\n mmap(stream, length, position, prot, flags) {\n if (\n (prot & 2) !== 0 &&\n (flags & 2) === 0 &&\n (stream.flags & 2097155) !== 2\n ) {\n throw new FS.ErrnoError(2);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2);\n }\n if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43);\n }\n if (!length) {\n throw new FS.ErrnoError(28);\n }\n return stream.stream_ops.mmap(stream, length, position, prot, flags);\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0;\n }\n return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n },\n ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59);\n }\n return stream.stream_ops.ioctl(stream, cmd, arg);\n },\n readFile(path, opts = {}) {\n opts.flags = opts.flags || 0;\n opts.encoding = opts.encoding || 'binary';\n if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n abort(`Invalid encoding type \"${opts.encoding}\"`);\n }\n var stream = FS.open(path, opts.flags);\n var stat = FS.stat(path);\n var length = stat.size;\n var buf = new Uint8Array(length);\n FS.read(stream, buf, 0, length, 0);\n if (opts.encoding === 'utf8') {\n buf = UTF8ArrayToString(buf);\n }\n FS.close(stream);\n return buf;\n },\n writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577;\n var stream = FS.open(path, opts.flags, opts.mode);\n if (typeof data == 'string') {\n data = new Uint8Array(intArrayFromString(data, true));\n }\n if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n } else {\n abort('Unsupported data type');\n }\n FS.close(stream);\n },\n cwd: () => FS.currentPath,\n chdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n if (lookup.node === null) {\n throw new FS.ErrnoError(44);\n }\n if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54);\n }\n var errCode = FS.nodePermissions(lookup.node, 'x');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.currentPath = lookup.path;\n },\n createDefaultDirectories() {\n FS.mkdir('/tmp');\n FS.mkdir('/home');\n FS.mkdir('/home/web_user');\n },\n createDefaultDevices() {\n FS.mkdir('/dev');\n FS.registerDevice(FS.makedev(1, 3), {\n read: () => 0,\n write: (stream, buffer, offset, length, pos) => length,\n llseek: () => 0,\n });\n FS.mkdev('/dev/null', FS.makedev(1, 3));\n TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n FS.mkdev('/dev/tty', FS.makedev(5, 0));\n FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n var randomBuffer = new Uint8Array(1024),\n randomLeft = 0;\n var randomByte = () => {\n if (randomLeft === 0) {\n randomFill(randomBuffer);\n randomLeft = randomBuffer.byteLength;\n }\n return randomBuffer[--randomLeft];\n };\n FS.createDevice('/dev', 'random', randomByte);\n FS.createDevice('/dev', 'urandom', randomByte);\n FS.mkdir('/dev/shm');\n FS.mkdir('/dev/shm/tmp');\n },\n createSpecialDirectories() {\n FS.mkdir('/proc');\n var proc_self = FS.mkdir('/proc/self');\n FS.mkdir('/proc/self/fd');\n FS.mount(\n {\n mount() {\n var node = FS.createNode(proc_self, 'fd', 16895, 73);\n node.stream_ops = { llseek: MEMFS.stream_ops.llseek };\n node.node_ops = {\n lookup(parent, name) {\n var fd = +name;\n var stream = FS.getStreamChecked(fd);\n var ret = {\n parent: null,\n mount: { mountpoint: 'fake' },\n node_ops: { readlink: () => stream.path },\n id: fd + 1,\n };\n ret.parent = ret;\n return ret;\n },\n readdir() {\n return Array.from(FS.streams.entries())\n .filter(([k, v]) => v)\n .map(([k, v]) => k.toString());\n },\n };\n return node;\n },\n },\n {},\n '/proc/self/fd'\n );\n },\n createStandardStreams(input, output, error) {\n if (input) {\n FS.createDevice('/dev', 'stdin', input);\n } else {\n FS.symlink('/dev/tty', '/dev/stdin');\n }\n if (output) {\n FS.createDevice('/dev', 'stdout', null, output);\n } else {\n FS.symlink('/dev/tty', '/dev/stdout');\n }\n if (error) {\n FS.createDevice('/dev', 'stderr', null, error);\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr');\n }\n var stdin = FS.open('/dev/stdin', 0);\n var stdout = FS.open('/dev/stdout', 1);\n var stderr = FS.open('/dev/stderr', 1);\n },\n staticInit() {\n FS.nameTable = new Array(4096);\n FS.mount(MEMFS, {}, '/');\n FS.createDefaultDirectories();\n FS.createDefaultDevices();\n FS.createSpecialDirectories();\n FS.filesystems = { MEMFS };\n },\n init(input, output, error) {\n FS.initialized = true;\n input ??= Module['stdin'];\n output ??= Module['stdout'];\n error ??= Module['stderr'];\n FS.createStandardStreams(input, output, error);\n },\n quit() {\n FS.initialized = false;\n for (var stream of FS.streams) {\n if (stream) {\n FS.close(stream);\n }\n }\n },\n findObject(path, dontResolveLastLink) {\n var ret = FS.analyzePath(path, dontResolveLastLink);\n if (!ret.exists) {\n return null;\n }\n return ret.object;\n },\n analyzePath(path, dontResolveLastLink) {\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n path = lookup.path;\n } catch (e) {}\n var ret = {\n isRoot: false,\n exists: false,\n error: 0,\n name: null,\n path: null,\n object: null,\n parentExists: false,\n parentPath: null,\n parentObject: null,\n };\n try {\n var lookup = FS.lookupPath(path, { parent: true });\n ret.parentExists = true;\n ret.parentPath = lookup.path;\n ret.parentObject = lookup.node;\n ret.name = PATH.basename(path);\n lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n ret.exists = true;\n ret.path = lookup.path;\n ret.object = lookup.node;\n ret.name = lookup.node.name;\n ret.isRoot = lookup.path === '/';\n } catch (e) {\n ret.error = e.errno;\n }\n return ret;\n },\n createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n var parts = path.split('/').reverse();\n while (parts.length) {\n var part = parts.pop();\n if (!part) continue;\n var current = PATH.join2(parent, part);\n try {\n FS.mkdir(current);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n parent = current;\n }\n return current;\n },\n createFile(parent, name, properties, canRead, canWrite) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(canRead, canWrite);\n return FS.create(path, mode);\n },\n createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n var path = name;\n if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n path = name ? PATH.join2(parent, name) : parent;\n }\n var mode = FS_getMode(canRead, canWrite);\n var node = FS.create(path, mode);\n if (data) {\n if (typeof data == 'string') {\n var arr = new Array(data.length);\n for (var i = 0, len = data.length; i < len; ++i)\n arr[i] = data.charCodeAt(i);\n data = arr;\n }\n FS.chmod(node, mode | 146);\n var stream = FS.open(node, 577);\n FS.write(stream, data, 0, data.length, 0, canOwn);\n FS.close(stream);\n FS.chmod(node, mode);\n }\n },\n createDevice(parent, name, input, output) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(!!input, !!output);\n FS.createDevice.major ??= 64;\n var dev = FS.makedev(FS.createDevice.major++, 0);\n FS.registerDevice(dev, {\n open(stream) {\n stream.seekable = false;\n },\n close(stream) {\n if (output?.buffer?.length) {\n output(10);\n }\n },\n read(stream, buffer, offset, length, pos) {\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = input();\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset + i]);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n });\n return FS.mkdev(path, mode, dev);\n },\n forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n if (globalThis.XMLHttpRequest) {\n abort(\n '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.'\n );\n } else {\n try {\n obj.contents = readBinary(obj.url);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n },\n createLazyFile(parent, name, url, canRead, canWrite) {\n class LazyUint8Array {\n lengthKnown = false;\n chunks = [];\n get(idx) {\n if (idx > this.length - 1 || idx < 0) {\n return undefined;\n }\n var chunkOffset = idx % this.chunkSize;\n var chunkNum = (idx / this.chunkSize) | 0;\n return this.getter(chunkNum)[chunkOffset];\n }\n setDataGetter(getter) {\n this.getter = getter;\n }\n cacheLength() {\n var xhr = new XMLHttpRequest();\n xhr.open('HEAD', url, false);\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n var datalength = Number(xhr.getResponseHeader('Content-length'));\n var header;\n var hasByteServing =\n (header = xhr.getResponseHeader('Accept-Ranges')) &&\n header === 'bytes';\n var usesGzip =\n (header = xhr.getResponseHeader('Content-Encoding')) &&\n header === 'gzip';\n var chunkSize = 1024 * 1024;\n if (!hasByteServing) chunkSize = datalength;\n var doXHR = (from, to) => {\n if (from > to)\n abort(\n 'invalid range (' + from + ', ' + to + ') or no bytes requested!'\n );\n if (to > datalength - 1)\n abort('only ' + datalength + ' bytes available! programmer error!');\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n if (datalength !== chunkSize)\n xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n xhr.responseType = 'arraybuffer';\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n }\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n if (xhr.response !== undefined) {\n return new Uint8Array(xhr.response || []);\n }\n return intArrayFromString(xhr.responseText || '', true);\n };\n var lazyArray = this;\n lazyArray.setDataGetter((chunkNum) => {\n var start = chunkNum * chunkSize;\n var end = (chunkNum + 1) * chunkSize - 1;\n end = Math.min(end, datalength - 1);\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end);\n }\n if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n abort('doXHR failed!');\n return lazyArray.chunks[chunkNum];\n });\n if (usesGzip || !datalength) {\n chunkSize = datalength = 1;\n datalength = this.getter(0).length;\n chunkSize = datalength;\n out(\n 'LazyFiles on gzip forces download of the whole file when length is accessed'\n );\n }\n this._length = datalength;\n this._chunkSize = chunkSize;\n this.lengthKnown = true;\n }\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._length;\n }\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._chunkSize;\n }\n }\n if (globalThis.XMLHttpRequest) {\n if (!ENVIRONMENT_IS_WORKER)\n abort(\n 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'\n );\n var lazyArray = new LazyUint8Array();\n var properties = { isDevice: false, contents: lazyArray };\n } else {\n var properties = { isDevice: false, url };\n }\n var node = FS.createFile(parent, name, properties, canRead, canWrite);\n if (properties.contents) {\n node.contents = properties.contents;\n } else if (properties.url) {\n node.contents = null;\n node.url = properties.url;\n }\n Object.defineProperties(node, {\n usedBytes: {\n get: function () {\n return this.contents.length;\n },\n },\n });\n var stream_ops = {};\n for (const [key, fn] of Object.entries(node.stream_ops)) {\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node);\n return fn(...args);\n };\n }\n function writeChunks(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= contents.length) return 0;\n var size = Math.min(contents.length - position, length);\n if (contents.slice) {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i];\n }\n } else {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents.get(position + i);\n }\n }\n return size;\n }\n stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node);\n return writeChunks(stream, buffer, offset, length, position);\n };\n stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node);\n var ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n writeChunks(stream, HEAP8, ptr, length, position);\n return { ptr, allocated: true };\n };\n node.stream_ops = stream_ops;\n return node;\n },\n};\nvar UTF8ToString = (ptr, maxBytesToRead, ignoreNul) =>\n ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : '';\nvar SYSCALLS = {\n DEFAULT_POLLMASK: 5,\n calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path;\n }\n var dir;\n if (dirfd === -100) {\n dir = FS.cwd();\n } else {\n var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n dir = dirstream.path;\n }\n if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44);\n }\n return dir;\n }\n return dir + '/' + path;\n },\n writeStat(buf, stat) {\n HEAPU32[buf / 4] = stat.dev;\n HEAPU32[(buf + 4) / 4] = stat.mode;\n HEAPU64[(buf + 8) / 8] = BigInt(stat.nlink);\n HEAPU32[(buf + 16) / 4] = stat.uid;\n HEAPU32[(buf + 20) / 4] = stat.gid;\n HEAPU32[(buf + 24) / 4] = stat.rdev;\n HEAP64[(buf + 32) / 8] = BigInt(stat.size);\n HEAP32[(buf + 40) / 4] = 4096;\n HEAP32[(buf + 44) / 4] = stat.blocks;\n var atime = stat.atime.getTime();\n var mtime = stat.mtime.getTime();\n var ctime = stat.ctime.getTime();\n HEAP64[(buf + 48) / 8] = BigInt(Math.floor(atime / 1e3));\n HEAPU64[(buf + 56) / 8] = BigInt((atime % 1e3) * 1e3 * 1e3);\n HEAP64[(buf + 64) / 8] = BigInt(Math.floor(mtime / 1e3));\n HEAPU64[(buf + 72) / 8] = BigInt((mtime % 1e3) * 1e3 * 1e3);\n HEAP64[(buf + 80) / 8] = BigInt(Math.floor(ctime / 1e3));\n HEAPU64[(buf + 88) / 8] = BigInt((ctime % 1e3) * 1e3 * 1e3);\n HEAP64[(buf + 96) / 8] = BigInt(stat.ino);\n return 0;\n },\n writeStatFs(buf, stats) {\n HEAPU32[(buf + 8) / 4] = stats.bsize;\n HEAPU32[(buf + 72) / 4] = stats.bsize;\n HEAP64[(buf + 16) / 8] = BigInt(stats.blocks);\n HEAP64[(buf + 24) / 8] = BigInt(stats.bfree);\n HEAP64[(buf + 32) / 8] = BigInt(stats.bavail);\n HEAP64[(buf + 40) / 8] = BigInt(stats.files);\n HEAP64[(buf + 48) / 8] = BigInt(stats.ffree);\n HEAPU32[(buf + 56) / 4] = stats.fsid;\n HEAPU32[(buf + 80) / 4] = stats.flags;\n HEAPU32[(buf + 64) / 4] = stats.namelen;\n },\n doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (flags & 2) {\n return 0;\n }\n var buffer = HEAPU8.slice(addr, addr + len);\n FS.msync(stream, buffer, offset, len, flags);\n },\n getStreamFromFD(fd) {\n var stream = FS.getStreamChecked(fd);\n return stream;\n },\n varargs: undefined,\n getStr(ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n};\nfunction ___syscall_fcntl64(fd, cmd, varargs) {\n varargs = bigintToI53Checked(varargs);\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (cmd) {\n case 0: {\n var arg = syscallGetVarargI();\n if (arg < 0) {\n return -28;\n }\n while (FS.streams[arg]) {\n arg++;\n }\n var newStream;\n newStream = FS.dupStream(stream, arg);\n return newStream.fd;\n }\n case 1:\n case 2:\n return 0;\n case 3:\n return stream.flags;\n case 4: {\n var arg = syscallGetVarargI();\n stream.flags |= arg;\n return 0;\n }\n case 5: {\n var arg = syscallGetVarargP();\n var offset = 0;\n HEAP16[(arg + offset) / 2] = 2;\n return 0;\n }\n case 6:\n case 7:\n return 0;\n }\n return -28;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_ioctl(fd, op, varargs) {\n varargs = bigintToI53Checked(varargs);\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (op) {\n case 21509: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21505: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcgets) {\n var termios = stream.tty.ops.ioctl_tcgets(stream);\n var argp = syscallGetVarargP();\n HEAP32[argp / 4] = termios.c_iflag || 0;\n HEAP32[(argp + 4) / 4] = termios.c_oflag || 0;\n HEAP32[(argp + 8) / 4] = termios.c_cflag || 0;\n HEAP32[(argp + 12) / 4] = termios.c_lflag || 0;\n for (var i = 0; i < 32; i++) {\n HEAP8[argp + i + 17] = termios.c_cc[i] || 0;\n }\n return 0;\n }\n return 0;\n }\n case 21510:\n case 21511:\n case 21512: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21506:\n case 21507:\n case 21508: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP();\n var c_iflag = HEAP32[argp / 4];\n var c_oflag = HEAP32[(argp + 4) / 4];\n var c_cflag = HEAP32[(argp + 8) / 4];\n var c_lflag = HEAP32[(argp + 12) / 4];\n var c_cc = [];\n for (var i = 0; i < 32; i++) {\n c_cc.push(HEAP8[argp + i + 17]);\n }\n return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n c_iflag,\n c_oflag,\n c_cflag,\n c_lflag,\n c_cc,\n });\n }\n return 0;\n }\n case 21519: {\n if (!stream.tty) return -59;\n var argp = syscallGetVarargP();\n HEAP32[argp / 4] = 0;\n return 0;\n }\n case 21520: {\n if (!stream.tty) return -59;\n return -28;\n }\n case 21537:\n case 21531: {\n var argp = syscallGetVarargP();\n return FS.ioctl(stream, op, argp);\n }\n case 21523: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tiocgwinsz) {\n var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n var argp = syscallGetVarargP();\n HEAP16[argp / 2] = winsize[0];\n HEAP16[(argp + 2) / 2] = winsize[1];\n }\n return 0;\n }\n case 21524: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21515: {\n if (!stream.tty) return -59;\n return 0;\n }\n default:\n return -28;\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_openat(dirfd, path, flags, varargs) {\n path = bigintToI53Checked(path);\n varargs = bigintToI53Checked(varargs);\n SYSCALLS.varargs = varargs;\n try {\n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n var mode = varargs ? syscallGetVarargI() : 0;\n return FS.open(path, flags, mode).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar __abort_js = () => abort('');\nfunction __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n len = bigintToI53Checked(len);\n offset = bigintToI53Checked(offset);\n allocated = bigintToI53Checked(allocated);\n addr = bigintToI53Checked(addr);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var res = FS.mmap(stream, len, offset, prot, flags);\n var ptr = res.ptr;\n HEAP32[allocated / 4] = res.allocated;\n HEAPU64[addr / 8] = BigInt(ptr);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction __munmap_js(addr, len, prot, flags, fd, offset) {\n addr = bigintToI53Checked(addr);\n len = bigintToI53Checked(len);\n offset = bigintToI53Checked(offset);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset);\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar stringToUTF8 = (str, outPtr, maxBytesToWrite) =>\n stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\nvar __tzset_js = function (timezone, daylight, std_name, dst_name) {\n timezone = bigintToI53Checked(timezone);\n daylight = bigintToI53Checked(daylight);\n std_name = bigintToI53Checked(std_name);\n dst_name = bigintToI53Checked(dst_name);\n var currentYear = new Date().getFullYear();\n var winter = new Date(currentYear, 0, 1);\n var summer = new Date(currentYear, 6, 1);\n var winterOffset = winter.getTimezoneOffset();\n var summerOffset = summer.getTimezoneOffset();\n var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n HEAPU64[timezone / 8] = BigInt(stdTimezoneOffset * 60);\n HEAP32[daylight / 4] = Number(winterOffset != summerOffset);\n var extractZone = (timezoneOffset) => {\n var sign = timezoneOffset >= 0 ? '-' : '+';\n var absOffset = Math.abs(timezoneOffset);\n var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n var minutes = String(absOffset % 60).padStart(2, '0');\n return `UTC${sign}${hours}${minutes}`;\n };\n var winterName = extractZone(winterOffset);\n var summerName = extractZone(summerOffset);\n if (summerOffset < winterOffset) {\n stringToUTF8(winterName, std_name, 17);\n stringToUTF8(summerName, dst_name, 17);\n } else {\n stringToUTF8(winterName, dst_name, 17);\n stringToUTF8(summerName, std_name, 17);\n }\n};\nvar _emscripten_get_now = () => performance.now();\nvar _emscripten_date_now = () => Date.now();\nvar nowIsMonotonic = 1;\nvar checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;\nfunction _clock_time_get(clk_id, ignored_precision, ptime) {\n ignored_precision = bigintToI53Checked(ignored_precision);\n ptime = bigintToI53Checked(ptime);\n if (!checkWasiClock(clk_id)) {\n return 28;\n }\n var now;\n if (clk_id === 0) {\n now = _emscripten_date_now();\n } else if (nowIsMonotonic) {\n now = _emscripten_get_now();\n } else {\n return 52;\n }\n var nsec = Math.round(now * 1e3 * 1e3);\n HEAP64[ptime / 8] = BigInt(nsec);\n return 0;\n}\nvar getHeapMax = () => 4294967296;\nvar _emscripten_get_heap_max = () => BigInt(getHeapMax());\nvar _emscripten_has_asyncify = () => 1;\nvar growMemory = (size) => {\n var oldHeapSize = wasmMemory.buffer.byteLength;\n var pages = ((size - oldHeapSize + 65535) / 65536) | 0;\n try {\n wasmMemory.grow(BigInt(pages));\n updateMemoryViews();\n return 1;\n } catch (e) {}\n};\nfunction _emscripten_resize_heap(requestedSize) {\n requestedSize = bigintToI53Checked(requestedSize);\n var oldSize = HEAPU8.length;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n var newSize = Math.min(\n maxHeapSize,\n alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)\n );\n var replacement = growMemory(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n}\nvar stackAlloc = (sz) => __emscripten_stack_alloc(sz);\nvar stringToUTF8OnStack = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n};\nvar writeI53ToI64 = (ptr, num) => {\n HEAPU32[ptr / 4] = num;\n var lower = HEAPU32[ptr / 4];\n HEAPU32[(ptr + 4) / 4] = (num - lower) / 4294967296;\n};\nvar stringToNewUTF8 = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = _malloc(size);\n if (ret) stringToUTF8(str, ret, size);\n return ret;\n};\nvar readI53FromI64 = (ptr) =>\n HEAPU32[ptr / 4] + HEAP32[(ptr + 4) / 4] * 4294967296;\nvar WebGPU = {\n Internals: {\n jsObjects: [],\n jsObjectInsert: (ptr, jsObject) => {\n WebGPU.Internals.jsObjects[ptr] = jsObject;\n },\n bufferOnUnmaps: [],\n futures: [],\n futureInsert: (futureId, promise) => {\n WebGPU.Internals.futures[futureId] = new Promise((resolve) =>\n promise.finally(() => resolve(futureId))\n );\n },\n },\n getJsObject: (ptr) => {\n if (!ptr) return undefined;\n return WebGPU.Internals.jsObjects[ptr];\n },\n importJsAdapter: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateAdapter(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroup: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroup(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroupLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroupLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBuffer: (buffer, parentPtr = 0) => {\n assert(buffer.mapState === 'unmapped');\n var bufferPtr = _emwgpuCreateBuffer(parentPtr);\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n return bufferPtr;\n },\n importJsCommandBuffer: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandBuffer(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsCommandEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsDevice: (device, parentPtr = 0) => {\n var queuePtr = _emwgpuCreateQueue(parentPtr);\n var devicePtr = _emwgpuCreateDevice(parentPtr, queuePtr);\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n return devicePtr;\n },\n importJsExternalTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateExternalTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsPipelineLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreatePipelineLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQuerySet: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQuerySet(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQueue: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQueue(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundle: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundle(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundleEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundleEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSampler: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSampler(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsShaderModule: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateShaderModule(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSurface: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSurface(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTextureView: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTextureView(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n errorCallback: (callback, type, message, userdata) => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(message);\n ((a1, a2, a3) => dynCall_vijj(callback, a1, BigInt(a2), BigInt(a3)))(\n type,\n BigInt(messagePtr),\n userdata\n );\n stackRestore(sp);\n },\n iterateExtensions: (root, handlers) => {\n for (\n var ptr = Number(HEAPU64[root / 8]);\n ptr;\n ptr = Number(HEAPU64[ptr / 8])\n ) {\n var sType = HEAP32[(ptr + 8) / 4];\n var handler = handlers[sType](ptr);\n }\n },\n setStringView: (ptr, data, length) => {\n HEAPU64[ptr / 8] = BigInt(data);\n HEAPU64[(ptr + 8) / 8] = BigInt(length);\n },\n makeStringFromStringView: (stringViewPtr) => {\n var ptr = Number(HEAPU64[stringViewPtr / 8]);\n var length = Number(HEAPU64[(stringViewPtr + 8) / 8]);\n return UTF8ToString(ptr, length);\n },\n makeStringFromOptionalStringView: (stringViewPtr) => {\n var ptr = Number(HEAPU64[stringViewPtr / 8]);\n var length = Number(HEAPU64[(stringViewPtr + 8) / 8]);\n if (!ptr) {\n if (length === 0) {\n return '';\n }\n return undefined;\n }\n return UTF8ToString(ptr, length);\n },\n makeColor: (ptr) => ({\n r: HEAPF64[ptr / 8],\n g: HEAPF64[(ptr + 8) / 8],\n b: HEAPF64[(ptr + 16) / 8],\n a: HEAPF64[(ptr + 24) / 8],\n }),\n makeExtent3D: (ptr) => ({\n width: HEAPU32[ptr / 4],\n height: HEAPU32[(ptr + 4) / 4],\n depthOrArrayLayers: HEAPU32[(ptr + 8) / 4],\n }),\n makeOrigin3D: (ptr) => ({\n x: HEAPU32[ptr / 4],\n y: HEAPU32[(ptr + 4) / 4],\n z: HEAPU32[(ptr + 8) / 4],\n }),\n makeTexelCopyTextureInfo: (ptr) => ({\n texture: WebGPU.getJsObject(Number(HEAPU64[ptr / 8])),\n mipLevel: HEAPU32[(ptr + 8) / 4],\n origin: WebGPU.makeOrigin3D(ptr + 12),\n aspect: WebGPU.TextureAspect[HEAP32[(ptr + 24) / 4]],\n }),\n makeTexelCopyBufferLayout: (ptr) => {\n var bytesPerRow = HEAPU32[(ptr + 8) / 4];\n var rowsPerImage = HEAPU32[(ptr + 12) / 4];\n return {\n offset: readI53FromI64(ptr),\n bytesPerRow: bytesPerRow === 4294967295 ? undefined : bytesPerRow,\n rowsPerImage: rowsPerImage === 4294967295 ? undefined : rowsPerImage,\n };\n },\n makeTexelCopyBufferInfo: (ptr) => {\n var layoutPtr = ptr + 0;\n var bufferCopyView = WebGPU.makeTexelCopyBufferLayout(layoutPtr);\n bufferCopyView['buffer'] = WebGPU.getJsObject(\n Number(HEAPU64[(ptr + 16) / 8])\n );\n return bufferCopyView;\n },\n makePassTimestampWrites: (ptr) => {\n if (ptr === 0) return undefined;\n return {\n querySet: WebGPU.getJsObject(Number(HEAPU64[(ptr + 8) / 8])),\n beginningOfPassWriteIndex: HEAPU32[(ptr + 16) / 4],\n endOfPassWriteIndex: HEAPU32[(ptr + 20) / 4],\n };\n },\n makePipelineConstants: (constantCount, constantsPtr) => {\n if (!constantCount) return;\n var constants = {};\n for (var i = 0; i < constantCount; ++i) {\n var entryPtr = constantsPtr + 32 * i;\n var key = WebGPU.makeStringFromStringView(entryPtr + 8);\n constants[key] = HEAPF64[(entryPtr + 24) / 8];\n }\n return constants;\n },\n makePipelineLayout: (layoutPtr) => {\n if (!layoutPtr) return 'auto';\n return WebGPU.getJsObject(layoutPtr);\n },\n makeComputeState: (ptr) => {\n if (!ptr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(Number(HEAPU64[(ptr + 8) / 8])),\n constants: WebGPU.makePipelineConstants(\n Number(HEAPU64[(ptr + 32) / 8]),\n Number(HEAPU64[(ptr + 40) / 8])\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(ptr + 16),\n };\n return desc;\n },\n makeComputePipelineDesc: (descriptor) => {\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n layout: WebGPU.makePipelineLayout(Number(HEAPU64[(descriptor + 24) / 8])),\n compute: WebGPU.makeComputeState(descriptor + 32),\n };\n return desc;\n },\n makeRenderPipelineDesc: (descriptor) => {\n function makePrimitiveState(psPtr) {\n if (!psPtr) return undefined;\n return {\n topology: WebGPU.PrimitiveTopology[HEAP32[(psPtr + 8) / 4]],\n stripIndexFormat: WebGPU.IndexFormat[HEAP32[(psPtr + 12) / 4]],\n frontFace: WebGPU.FrontFace[HEAP32[(psPtr + 16) / 4]],\n cullMode: WebGPU.CullMode[HEAP32[(psPtr + 20) / 4]],\n unclippedDepth: !!HEAPU32[(psPtr + 24) / 4],\n };\n }\n function makeBlendComponent(bdPtr) {\n if (!bdPtr) return undefined;\n return {\n operation: WebGPU.BlendOperation[HEAP32[bdPtr / 4]],\n srcFactor: WebGPU.BlendFactor[HEAP32[(bdPtr + 4) / 4]],\n dstFactor: WebGPU.BlendFactor[HEAP32[(bdPtr + 8) / 4]],\n };\n }\n function makeBlendState(bsPtr) {\n if (!bsPtr) return undefined;\n return {\n alpha: makeBlendComponent(bsPtr + 12),\n color: makeBlendComponent(bsPtr + 0),\n };\n }\n function makeColorState(csPtr) {\n var format = WebGPU.TextureFormat[HEAP32[(csPtr + 8) / 4]];\n return format\n ? {\n format,\n blend: makeBlendState(Number(HEAPU64[(csPtr + 16) / 8])),\n writeMask: HEAPU32[(csPtr + 24) / 4],\n }\n : undefined;\n }\n function makeColorStates(count, csArrayPtr) {\n var states = [];\n for (var i = 0; i < count; ++i) {\n states.push(makeColorState(csArrayPtr + 32 * i));\n }\n return states;\n }\n function makeStencilStateFace(ssfPtr) {\n return {\n compare: WebGPU.CompareFunction[HEAP32[ssfPtr / 4]],\n failOp: WebGPU.StencilOperation[HEAP32[(ssfPtr + 4) / 4]],\n depthFailOp: WebGPU.StencilOperation[HEAP32[(ssfPtr + 8) / 4]],\n passOp: WebGPU.StencilOperation[HEAP32[(ssfPtr + 12) / 4]],\n };\n }\n function makeDepthStencilState(dssPtr) {\n if (!dssPtr) return undefined;\n return {\n format: WebGPU.TextureFormat[HEAP32[(dssPtr + 8) / 4]],\n depthWriteEnabled: !!HEAPU32[(dssPtr + 12) / 4],\n depthCompare: WebGPU.CompareFunction[HEAP32[(dssPtr + 16) / 4]],\n stencilFront: makeStencilStateFace(dssPtr + 20),\n stencilBack: makeStencilStateFace(dssPtr + 36),\n stencilReadMask: HEAPU32[(dssPtr + 52) / 4],\n stencilWriteMask: HEAPU32[(dssPtr + 56) / 4],\n depthBias: HEAP32[(dssPtr + 60) / 4],\n depthBiasSlopeScale: HEAPF32[(dssPtr + 64) / 4],\n depthBiasClamp: HEAPF32[(dssPtr + 68) / 4],\n };\n }\n function makeVertexAttribute(vaPtr) {\n return {\n format: WebGPU.VertexFormat[HEAP32[(vaPtr + 8) / 4]],\n offset: readI53FromI64(vaPtr + 16),\n shaderLocation: HEAPU32[(vaPtr + 24) / 4],\n };\n }\n function makeVertexAttributes(count, vaArrayPtr) {\n var vas = [];\n for (var i = 0; i < count; ++i) {\n vas.push(makeVertexAttribute(vaArrayPtr + i * 32));\n }\n return vas;\n }\n function makeVertexBuffer(vbPtr) {\n if (!vbPtr) return undefined;\n var stepMode = WebGPU.VertexStepMode[HEAP32[(vbPtr + 8) / 4]];\n var attributeCount = Number(HEAPU64[(vbPtr + 24) / 8]);\n if (!stepMode && !attributeCount) {\n return null;\n }\n return {\n arrayStride: readI53FromI64(vbPtr + 16),\n stepMode,\n attributes: makeVertexAttributes(\n attributeCount,\n Number(HEAPU64[(vbPtr + 32) / 8])\n ),\n };\n }\n function makeVertexBuffers(count, vbArrayPtr) {\n if (!count) return undefined;\n var vbs = [];\n for (var i = 0; i < count; ++i) {\n vbs.push(makeVertexBuffer(vbArrayPtr + i * 40));\n }\n return vbs;\n }\n function makeVertexState(viPtr) {\n if (!viPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(Number(HEAPU64[(viPtr + 8) / 8])),\n constants: WebGPU.makePipelineConstants(\n Number(HEAPU64[(viPtr + 32) / 8]),\n Number(HEAPU64[(viPtr + 40) / 8])\n ),\n buffers: makeVertexBuffers(\n Number(HEAPU64[(viPtr + 48) / 8]),\n Number(HEAPU64[(viPtr + 56) / 8])\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(viPtr + 16),\n };\n return desc;\n }\n function makeMultisampleState(msPtr) {\n if (!msPtr) return undefined;\n return {\n count: HEAPU32[(msPtr + 8) / 4],\n mask: HEAPU32[(msPtr + 12) / 4],\n alphaToCoverageEnabled: !!HEAPU32[(msPtr + 16) / 4],\n };\n }\n function makeFragmentState(fsPtr) {\n if (!fsPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(Number(HEAPU64[(fsPtr + 8) / 8])),\n constants: WebGPU.makePipelineConstants(\n Number(HEAPU64[(fsPtr + 32) / 8]),\n Number(HEAPU64[(fsPtr + 40) / 8])\n ),\n targets: makeColorStates(\n Number(HEAPU64[(fsPtr + 48) / 8]),\n Number(HEAPU64[(fsPtr + 56) / 8])\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(fsPtr + 16),\n };\n return desc;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n layout: WebGPU.makePipelineLayout(Number(HEAPU64[(descriptor + 24) / 8])),\n vertex: makeVertexState(descriptor + 32),\n primitive: makePrimitiveState(descriptor + 96),\n depthStencil: makeDepthStencilState(\n Number(HEAPU64[(descriptor + 128) / 8])\n ),\n multisample: makeMultisampleState(descriptor + 136),\n fragment: makeFragmentState(Number(HEAPU64[(descriptor + 160) / 8])),\n };\n return desc;\n },\n fillLimitStruct: (limits, limitsOutPtr) => {\n var nextInChainPtr = Number(HEAPU64[limitsOutPtr / 8]);\n function setLimitValueU32(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n HEAPU32[(basePtr + limitOffset) / 4] = limitValue;\n }\n function setLimitValueU64(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n writeI53ToI64(basePtr + limitOffset, limitValue);\n }\n setLimitValueU32('maxTextureDimension1D', limitsOutPtr, 8);\n setLimitValueU32('maxTextureDimension2D', limitsOutPtr, 12);\n setLimitValueU32('maxTextureDimension3D', limitsOutPtr, 16);\n setLimitValueU32('maxTextureArrayLayers', limitsOutPtr, 20);\n setLimitValueU32('maxBindGroups', limitsOutPtr, 24);\n setLimitValueU32('maxBindGroupsPlusVertexBuffers', limitsOutPtr, 28);\n setLimitValueU32('maxBindingsPerBindGroup', limitsOutPtr, 32);\n setLimitValueU32(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsOutPtr,\n 36\n );\n setLimitValueU32(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsOutPtr,\n 40\n );\n setLimitValueU32('maxSampledTexturesPerShaderStage', limitsOutPtr, 44);\n setLimitValueU32('maxSamplersPerShaderStage', limitsOutPtr, 48);\n setLimitValueU32('maxStorageBuffersPerShaderStage', limitsOutPtr, 52);\n setLimitValueU32('maxStorageTexturesPerShaderStage', limitsOutPtr, 56);\n setLimitValueU32('maxUniformBuffersPerShaderStage', limitsOutPtr, 60);\n setLimitValueU32('minUniformBufferOffsetAlignment', limitsOutPtr, 80);\n setLimitValueU32('minStorageBufferOffsetAlignment', limitsOutPtr, 84);\n setLimitValueU64('maxUniformBufferBindingSize', limitsOutPtr, 64);\n setLimitValueU64('maxStorageBufferBindingSize', limitsOutPtr, 72);\n setLimitValueU32('maxVertexBuffers', limitsOutPtr, 88);\n setLimitValueU64('maxBufferSize', limitsOutPtr, 96);\n setLimitValueU32('maxVertexAttributes', limitsOutPtr, 104);\n setLimitValueU32('maxVertexBufferArrayStride', limitsOutPtr, 108);\n setLimitValueU32('maxInterStageShaderVariables', limitsOutPtr, 112);\n setLimitValueU32('maxColorAttachments', limitsOutPtr, 116);\n setLimitValueU32('maxColorAttachmentBytesPerSample', limitsOutPtr, 120);\n setLimitValueU32('maxComputeWorkgroupStorageSize', limitsOutPtr, 124);\n setLimitValueU32('maxComputeInvocationsPerWorkgroup', limitsOutPtr, 128);\n setLimitValueU32('maxComputeWorkgroupSizeX', limitsOutPtr, 132);\n setLimitValueU32('maxComputeWorkgroupSizeY', limitsOutPtr, 136);\n setLimitValueU32('maxComputeWorkgroupSizeZ', limitsOutPtr, 140);\n setLimitValueU32('maxComputeWorkgroupsPerDimension', limitsOutPtr, 144);\n setLimitValueU32('maxImmediateSize', limitsOutPtr, 148);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n setLimitValueU32(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 16,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 24,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 20,\n limits.maxStorageTexturesPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 28,\n limits.maxStorageTexturesPerShaderStage\n );\n }\n },\n fillAdapterInfoStruct: (info, infoStruct) => {\n HEAPU32[(infoStruct + 88) / 4] = info.subgroupMinSize;\n HEAPU32[(infoStruct + 92) / 4] = info.subgroupMaxSize;\n var strs = info.vendor + info.architecture + info.device + info.description;\n var strPtr = stringToNewUTF8(strs);\n var vendorLen = lengthBytesUTF8(info.vendor);\n WebGPU.setStringView(infoStruct + 8, strPtr, vendorLen);\n strPtr += vendorLen;\n var architectureLen = lengthBytesUTF8(info.architecture);\n WebGPU.setStringView(infoStruct + 24, strPtr, architectureLen);\n strPtr += architectureLen;\n var deviceLen = lengthBytesUTF8(info.device);\n WebGPU.setStringView(infoStruct + 40, strPtr, deviceLen);\n strPtr += deviceLen;\n var descriptionLen = lengthBytesUTF8(info.description);\n WebGPU.setStringView(infoStruct + 56, strPtr, descriptionLen);\n strPtr += descriptionLen;\n HEAP32[(infoStruct + 72) / 4] = 2;\n var adapterType = info.isFallbackAdapter ? 3 : 4;\n HEAP32[(infoStruct + 76) / 4] = adapterType;\n HEAPU32[(infoStruct + 80) / 4] = 0;\n HEAPU32[(infoStruct + 84) / 4] = 0;\n },\n AddressMode: [, 'clamp-to-edge', 'repeat', 'mirror-repeat'],\n BlendFactor: [\n ,\n 'zero',\n 'one',\n 'src',\n 'one-minus-src',\n 'src-alpha',\n 'one-minus-src-alpha',\n 'dst',\n 'one-minus-dst',\n 'dst-alpha',\n 'one-minus-dst-alpha',\n 'src-alpha-saturated',\n 'constant',\n 'one-minus-constant',\n 'src1',\n 'one-minus-src1',\n 'src1-alpha',\n 'one-minus-src1-alpha',\n ],\n BlendOperation: [, 'add', 'subtract', 'reverse-subtract', 'min', 'max'],\n BufferBindingType: [, , 'uniform', 'storage', 'read-only-storage'],\n BufferMapState: [, 'unmapped', 'pending', 'mapped'],\n CompareFunction: [\n ,\n 'never',\n 'less',\n 'equal',\n 'less-equal',\n 'greater',\n 'not-equal',\n 'greater-equal',\n 'always',\n ],\n CompilationInfoRequestStatus: [, 'success', 'callback-cancelled'],\n ComponentSwizzle: [, '0', '1', 'r', 'g', 'b', 'a'],\n CompositeAlphaMode: [\n ,\n 'opaque',\n 'premultiplied',\n 'unpremultiplied',\n 'inherit',\n ],\n CullMode: [, 'none', 'front', 'back'],\n ErrorFilter: [, 'validation', 'out-of-memory', 'internal'],\n FeatureLevel: [, 'compatibility', 'core'],\n FeatureName: {\n 1: 'core-features-and-limits',\n 2: 'depth-clip-control',\n 3: 'depth32float-stencil8',\n 4: 'texture-compression-bc',\n 5: 'texture-compression-bc-sliced-3d',\n 6: 'texture-compression-etc2',\n 7: 'texture-compression-astc',\n 8: 'texture-compression-astc-sliced-3d',\n 9: 'timestamp-query',\n 10: 'indirect-first-instance',\n 11: 'shader-f16',\n 12: 'rg11b10ufloat-renderable',\n 13: 'bgra8unorm-storage',\n 14: 'float32-filterable',\n 15: 'float32-blendable',\n 16: 'clip-distances',\n 17: 'dual-source-blending',\n 18: 'subgroups',\n 19: 'texture-formats-tier1',\n 20: 'texture-formats-tier2',\n 21: 'primitive-index',\n 22: 'texture-component-swizzle',\n 327692: 'chromium-experimental-unorm16-texture-formats',\n 327729: 'chromium-experimental-multi-draw-indirect',\n },\n FilterMode: [, 'nearest', 'linear'],\n FrontFace: [, 'ccw', 'cw'],\n IndexFormat: [, 'uint16', 'uint32'],\n InstanceFeatureName: [\n ,\n 'timed-wait-any',\n 'shader-source-spirv',\n 'multiple-devices-per-adapter',\n ],\n LoadOp: [, 'load', 'clear'],\n MipmapFilterMode: [, 'nearest', 'linear'],\n OptionalBool: ['false', 'true'],\n PowerPreference: [, 'low-power', 'high-performance'],\n PredefinedColorSpace: [, 'srgb', 'display-p3'],\n PrimitiveTopology: [\n ,\n 'point-list',\n 'line-list',\n 'line-strip',\n 'triangle-list',\n 'triangle-strip',\n ],\n QueryType: [, 'occlusion', 'timestamp'],\n SamplerBindingType: [, , 'filtering', 'non-filtering', 'comparison'],\n Status: [, 'success', 'error'],\n StencilOperation: [\n ,\n 'keep',\n 'zero',\n 'replace',\n 'invert',\n 'increment-clamp',\n 'decrement-clamp',\n 'increment-wrap',\n 'decrement-wrap',\n ],\n StorageTextureAccess: [, , 'write-only', 'read-only', 'read-write'],\n StoreOp: [, 'store', 'discard'],\n SurfaceGetCurrentTextureStatus: [\n ,\n 'success-optimal',\n 'success-suboptimal',\n 'timeout',\n 'outdated',\n 'lost',\n 'error',\n ],\n TextureAspect: [, 'all', 'stencil-only', 'depth-only'],\n TextureDimension: [, '1d', '2d', '3d'],\n TextureFormat: [\n ,\n 'r8unorm',\n 'r8snorm',\n 'r8uint',\n 'r8sint',\n 'r16unorm',\n 'r16snorm',\n 'r16uint',\n 'r16sint',\n 'r16float',\n 'rg8unorm',\n 'rg8snorm',\n 'rg8uint',\n 'rg8sint',\n 'r32float',\n 'r32uint',\n 'r32sint',\n 'rg16unorm',\n 'rg16snorm',\n 'rg16uint',\n 'rg16sint',\n 'rg16float',\n 'rgba8unorm',\n 'rgba8unorm-srgb',\n 'rgba8snorm',\n 'rgba8uint',\n 'rgba8sint',\n 'bgra8unorm',\n 'bgra8unorm-srgb',\n 'rgb10a2uint',\n 'rgb10a2unorm',\n 'rg11b10ufloat',\n 'rgb9e5ufloat',\n 'rg32float',\n 'rg32uint',\n 'rg32sint',\n 'rgba16unorm',\n 'rgba16snorm',\n 'rgba16uint',\n 'rgba16sint',\n 'rgba16float',\n 'rgba32float',\n 'rgba32uint',\n 'rgba32sint',\n 'stencil8',\n 'depth16unorm',\n 'depth24plus',\n 'depth24plus-stencil8',\n 'depth32float',\n 'depth32float-stencil8',\n 'bc1-rgba-unorm',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm',\n 'bc3-rgba-unorm-srgb',\n 'bc4-r-unorm',\n 'bc4-r-snorm',\n 'bc5-rg-unorm',\n 'bc5-rg-snorm',\n 'bc6h-rgb-ufloat',\n 'bc6h-rgb-float',\n 'bc7-rgba-unorm',\n 'bc7-rgba-unorm-srgb',\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm',\n 'astc-4x4-unorm',\n 'astc-4x4-unorm-srgb',\n 'astc-5x4-unorm',\n 'astc-5x4-unorm-srgb',\n 'astc-5x5-unorm',\n 'astc-5x5-unorm-srgb',\n 'astc-6x5-unorm',\n 'astc-6x5-unorm-srgb',\n 'astc-6x6-unorm',\n 'astc-6x6-unorm-srgb',\n 'astc-8x5-unorm',\n 'astc-8x5-unorm-srgb',\n 'astc-8x6-unorm',\n 'astc-8x6-unorm-srgb',\n 'astc-8x8-unorm',\n 'astc-8x8-unorm-srgb',\n 'astc-10x5-unorm',\n 'astc-10x5-unorm-srgb',\n 'astc-10x6-unorm',\n 'astc-10x6-unorm-srgb',\n 'astc-10x8-unorm',\n 'astc-10x8-unorm-srgb',\n 'astc-10x10-unorm',\n 'astc-10x10-unorm-srgb',\n 'astc-12x10-unorm',\n 'astc-12x10-unorm-srgb',\n 'astc-12x12-unorm',\n 'astc-12x12-unorm-srgb',\n ],\n TextureSampleType: [\n ,\n ,\n 'float',\n 'unfilterable-float',\n 'depth',\n 'sint',\n 'uint',\n ],\n TextureViewDimension: [, '1d', '2d', '2d-array', 'cube', 'cube-array', '3d'],\n ToneMappingMode: [, 'standard', 'extended'],\n VertexFormat: [\n ,\n 'uint8',\n 'uint8x2',\n 'uint8x4',\n 'sint8',\n 'sint8x2',\n 'sint8x4',\n 'unorm8',\n 'unorm8x2',\n 'unorm8x4',\n 'snorm8',\n 'snorm8x2',\n 'snorm8x4',\n 'uint16',\n 'uint16x2',\n 'uint16x4',\n 'sint16',\n 'sint16x2',\n 'sint16x4',\n 'unorm16',\n 'unorm16x2',\n 'unorm16x4',\n 'snorm16',\n 'snorm16x2',\n 'snorm16x4',\n 'float16',\n 'float16x2',\n 'float16x4',\n 'float32',\n 'float32x2',\n 'float32x3',\n 'float32x4',\n 'uint32',\n 'uint32x2',\n 'uint32x3',\n 'uint32x4',\n 'sint32',\n 'sint32x2',\n 'sint32x3',\n 'sint32x4',\n 'unorm10-10-10-2',\n 'unorm8x4-bgra',\n ],\n VertexStepMode: [, 'vertex', 'instance'],\n WGSLLanguageFeatureName: [\n ,\n 'readonly_and_readwrite_storage_textures',\n 'packed_4x8_integer_dot_product',\n 'unrestricted_pointer_parameters',\n 'pointer_composite_access',\n 'uniform_buffer_standard_layout',\n 'subgroup_id',\n 'texture_and_sampler_let',\n 'subgroup_uniformity',\n 'texture_formats_tier1',\n ],\n};\nvar emwgpuStringToInt_DeviceLostReason = {\n undefined: 1,\n unknown: 1,\n destroyed: 2,\n};\nvar handleException = (e) => {\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS;\n }\n quit_(1, e);\n};\nvar runtimeKeepaliveCounter = 0;\nvar keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;\nvar _proc_exit = (code) => {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n Module['onExit']?.(code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n};\nvar exitJS = (status, implicit) => {\n EXITSTATUS = status;\n _proc_exit(status);\n};\nvar _exit = exitJS;\nvar maybeExit = () => {\n if (!keepRuntimeAlive()) {\n try {\n _exit(EXITSTATUS);\n } catch (e) {\n handleException(e);\n }\n }\n};\nvar callUserCallback = (func) => {\n if (ABORT) {\n return;\n }\n try {\n func();\n maybeExit();\n } catch (e) {\n handleException(e);\n }\n};\nfunction _emwgpuAdapterRequestDevice(\n adapterPtr,\n futureId,\n deviceLostFutureId,\n devicePtr,\n queuePtr,\n descriptor\n) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n futureId = bigintToI53Checked(futureId);\n deviceLostFutureId = bigintToI53Checked(deviceLostFutureId);\n devicePtr = bigintToI53Checked(devicePtr);\n queuePtr = bigintToI53Checked(queuePtr);\n descriptor = bigintToI53Checked(descriptor);\n var adapter = WebGPU.getJsObject(adapterPtr);\n var desc = {};\n if (descriptor) {\n var requiredFeatureCount = Number(HEAPU64[(descriptor + 24) / 8]);\n if (requiredFeatureCount) {\n var requiredFeaturesPtr = Number(HEAPU64[(descriptor + 32) / 8]);\n desc['requiredFeatures'] = Array.from(\n HEAPU32.subarray(\n requiredFeaturesPtr / 4,\n (requiredFeaturesPtr + requiredFeatureCount * 4) / 4\n ),\n (feature) => WebGPU.FeatureName[feature]\n );\n }\n var limitsPtr = Number(HEAPU64[(descriptor + 40) / 8]);\n if (limitsPtr) {\n var nextInChainPtr = Number(HEAPU64[limitsPtr / 8]);\n var requiredLimits = {};\n function setLimitU32IfDefined(\n name,\n basePtr,\n limitOffset,\n ignoreIfZero = false\n ) {\n var ptr = basePtr + limitOffset;\n var value = HEAPU32[ptr / 4];\n if (value != 4294967295 && (!ignoreIfZero || value != 0)) {\n requiredLimits[name] = value;\n }\n }\n function setLimitU64IfDefined(name, basePtr, limitOffset) {\n var ptr = basePtr + limitOffset;\n var limitPart1 = HEAPU32[ptr / 4];\n var limitPart2 = HEAPU32[(ptr + 4) / 4];\n if (limitPart1 != 4294967295 || limitPart2 != 4294967295) {\n requiredLimits[name] = readI53FromI64(ptr);\n }\n }\n setLimitU32IfDefined('maxTextureDimension1D', limitsPtr, 8);\n setLimitU32IfDefined('maxTextureDimension2D', limitsPtr, 12);\n setLimitU32IfDefined('maxTextureDimension3D', limitsPtr, 16);\n setLimitU32IfDefined('maxTextureArrayLayers', limitsPtr, 20);\n setLimitU32IfDefined('maxBindGroups', limitsPtr, 24);\n setLimitU32IfDefined('maxBindGroupsPlusVertexBuffers', limitsPtr, 28);\n setLimitU32IfDefined('maxBindingsPerBindGroup', limitsPtr, 32);\n setLimitU32IfDefined(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsPtr,\n 36\n );\n setLimitU32IfDefined(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsPtr,\n 40\n );\n setLimitU32IfDefined('maxSampledTexturesPerShaderStage', limitsPtr, 44);\n setLimitU32IfDefined('maxSamplersPerShaderStage', limitsPtr, 48);\n setLimitU32IfDefined('maxStorageBuffersPerShaderStage', limitsPtr, 52);\n setLimitU32IfDefined('maxStorageTexturesPerShaderStage', limitsPtr, 56);\n setLimitU32IfDefined('maxUniformBuffersPerShaderStage', limitsPtr, 60);\n setLimitU32IfDefined('minUniformBufferOffsetAlignment', limitsPtr, 80);\n setLimitU32IfDefined('minStorageBufferOffsetAlignment', limitsPtr, 84);\n setLimitU64IfDefined('maxUniformBufferBindingSize', limitsPtr, 64);\n setLimitU64IfDefined('maxStorageBufferBindingSize', limitsPtr, 72);\n setLimitU32IfDefined('maxVertexBuffers', limitsPtr, 88);\n setLimitU64IfDefined('maxBufferSize', limitsPtr, 96);\n setLimitU32IfDefined('maxVertexAttributes', limitsPtr, 104);\n setLimitU32IfDefined('maxVertexBufferArrayStride', limitsPtr, 108);\n setLimitU32IfDefined('maxInterStageShaderVariables', limitsPtr, 112);\n setLimitU32IfDefined('maxColorAttachments', limitsPtr, 116);\n setLimitU32IfDefined('maxColorAttachmentBytesPerSample', limitsPtr, 120);\n setLimitU32IfDefined('maxComputeWorkgroupStorageSize', limitsPtr, 124);\n setLimitU32IfDefined('maxComputeInvocationsPerWorkgroup', limitsPtr, 128);\n setLimitU32IfDefined('maxComputeWorkgroupSizeX', limitsPtr, 132);\n setLimitU32IfDefined('maxComputeWorkgroupSizeY', limitsPtr, 136);\n setLimitU32IfDefined('maxComputeWorkgroupSizeZ', limitsPtr, 140);\n setLimitU32IfDefined('maxComputeWorkgroupsPerDimension', limitsPtr, 144);\n setLimitU32IfDefined('maxImmediateSize', limitsPtr, 148, true);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n if ('maxStorageBuffersInVertexStage' in GPUSupportedLimits.prototype) {\n setLimitU32IfDefined(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 16\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 20\n );\n setLimitU32IfDefined(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 24\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 28\n );\n }\n }\n desc['requiredLimits'] = requiredLimits;\n }\n var defaultQueuePtr = Number(HEAPU64[(descriptor + 48) / 8]);\n if (defaultQueuePtr) {\n var defaultQueueDesc = {\n label: WebGPU.makeStringFromOptionalStringView(defaultQueuePtr + 8),\n };\n desc['defaultQueue'] = defaultQueueDesc;\n }\n desc['label'] = WebGPU.makeStringFromOptionalStringView(descriptor + 8);\n }\n WebGPU.Internals.futureInsert(\n futureId,\n adapter.requestDevice(desc).then(\n (device) => {\n callUserCallback(() => {\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n devicePtr = BigInt(devicePtr);\n WebGPU.Internals.futureInsert(\n deviceLostFutureId,\n device.lost.then((info) => {\n callUserCallback(() => {\n device.onuncapturederror = (ev) => {};\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(info.message);\n _emwgpuOnDeviceLostCompleted(\n deviceLostFutureId,\n emwgpuStringToInt_DeviceLostReason[info.reason],\n BigInt(messagePtr)\n );\n stackRestore(sp);\n });\n })\n );\n device.onuncapturederror = (ev) => {\n var type = 5;\n if (ev.error instanceof GPUValidationError) type = 2;\n else if (ev.error instanceof GPUOutOfMemoryError) type = 3;\n else if (ev.error instanceof GPUInternalError) type = 4;\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ev.error.message);\n _emwgpuOnUncapturedError(\n BigInt(devicePtr),\n type,\n BigInt(messagePtr)\n );\n stackRestore(sp);\n };\n _emwgpuOnRequestDeviceCompleted(futureId, 1, BigInt(devicePtr), 0n);\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestDeviceCompleted(\n futureId,\n 3,\n BigInt(devicePtr),\n BigInt(messagePtr)\n );\n if (deviceLostFutureId) {\n _emwgpuOnDeviceLostCompleted(\n deviceLostFutureId,\n 4,\n BigInt(messagePtr)\n );\n }\n stackRestore(sp);\n });\n }\n )\n );\n}\nfunction _emwgpuBufferDestroy(bufferPtr) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (onUnmap) {\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n }\n buffer.destroy();\n}\nvar warnOnce = (text) => {\n warnOnce.shown ||= {};\n if (!warnOnce.shown[text]) {\n warnOnce.shown[text] = 1;\n if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;\n err(text);\n }\n};\nvar _emwgpuBufferGetConstMappedRange = function (bufferPtr, offset, size) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n offset = bigintToI53Checked(offset);\n size = bigintToI53Checked(size);\n var ret = (() => {\n var buffer = WebGPU.getJsObject(bufferPtr);\n if (size == -1) size = undefined;\n var mapped;\n try {\n mapped = buffer.getMappedRange(offset, size);\n } catch (ex) {\n return 0n;\n }\n var data = _memalign(16, mapped.byteLength);\n HEAPU8.set(new Uint8Array(mapped), data);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(() => _free(data));\n return data;\n })();\n return BigInt(ret);\n};\nvar _emwgpuBufferMapAsync = function (bufferPtr, futureId, mode, offset, size) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n futureId = bigintToI53Checked(futureId);\n mode = bigintToI53Checked(mode);\n offset = bigintToI53Checked(offset);\n size = bigintToI53Checked(size);\n var buffer = WebGPU.getJsObject(bufferPtr);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n if (size == -1) size = undefined;\n WebGPU.Internals.futureInsert(\n futureId,\n buffer.mapAsync(mode, offset, size).then(\n () => {\n callUserCallback(() => {\n _emwgpuOnMapAsyncCompleted(futureId, 1, 0n);\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n var status =\n ex.name === 'AbortError' ? 4 : ex.name === 'OperationError' ? 3 : 0;\n _emwgpuOnMapAsyncCompleted(futureId, status, BigInt(messagePtr));\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n });\n }\n )\n );\n};\nfunction _emwgpuBufferUnmap(bufferPtr) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (!onUnmap) {\n return;\n }\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n buffer.unmap();\n}\nfunction _emwgpuDelete(ptr) {\n ptr = bigintToI53Checked(ptr);\n delete WebGPU.Internals.jsObjects[ptr];\n}\nfunction _emwgpuDeviceCreateBuffer(devicePtr, descriptor, bufferPtr) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n bufferPtr = bigintToI53Checked(bufferPtr);\n var mappedAtCreation = !!HEAPU32[(descriptor + 40) / 4];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n usage: HEAPU32[(descriptor + 24) / 4],\n size: readI53FromI64(descriptor + 32),\n mappedAtCreation,\n };\n var device = WebGPU.getJsObject(devicePtr);\n var buffer;\n try {\n buffer = device.createBuffer(desc);\n } catch (ex) {\n return false;\n }\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n if (mappedAtCreation) {\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n }\n return true;\n}\nfunction _emwgpuDeviceCreateShaderModule(\n devicePtr,\n descriptor,\n shaderModulePtr\n) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n shaderModulePtr = bigintToI53Checked(shaderModulePtr);\n var nextInChainPtr = Number(HEAPU64[descriptor / 8]);\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n code: '',\n };\n switch (sType) {\n case 2: {\n desc['code'] = WebGPU.makeStringFromStringView(nextInChainPtr + 16);\n break;\n }\n }\n var device = WebGPU.getJsObject(devicePtr);\n WebGPU.Internals.jsObjectInsert(\n shaderModulePtr,\n device.createShaderModule(desc)\n );\n}\nvar _emwgpuDeviceDestroy = (devicePtr) => {\n const device = WebGPU.getJsObject(devicePtr);\n device.onuncapturederror = null;\n device.destroy();\n};\nfunction _emwgpuInstanceRequestAdapter(\n instancePtr,\n futureId,\n options,\n adapterPtr\n) {\n instancePtr = bigintToI53Checked(instancePtr);\n futureId = bigintToI53Checked(futureId);\n options = bigintToI53Checked(options);\n adapterPtr = bigintToI53Checked(adapterPtr);\n var opts;\n if (options) {\n opts = {\n featureLevel: WebGPU.FeatureLevel[HEAP32[(options + 8) / 4]],\n powerPreference: WebGPU.PowerPreference[HEAP32[(options + 12) / 4]],\n forceFallbackAdapter: !!HEAPU32[(options + 16) / 4],\n };\n var nextInChainPtr = Number(HEAPU64[options / 8]);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[(nextInChainPtr + 8) / 4];\n var webxrOptions = nextInChainPtr;\n opts.xrCompatible = !!HEAPU32[(webxrOptions + 16) / 4];\n }\n }\n if (!('gpu' in navigator)) {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (navigator.gpu is not available)'\n );\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 3,\n BigInt(adapterPtr),\n BigInt(messagePtr)\n );\n stackRestore(sp);\n return;\n }\n WebGPU.Internals.futureInsert(\n futureId,\n navigator.gpu.requestAdapter(opts).then(\n (adapter) => {\n callUserCallback(() => {\n if (adapter) {\n WebGPU.Internals.jsObjectInsert(adapterPtr, adapter);\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 1,\n BigInt(adapterPtr),\n 0n\n );\n } else {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (requestAdapter returned null)'\n );\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 3,\n BigInt(adapterPtr),\n BigInt(messagePtr)\n );\n stackRestore(sp);\n }\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 4,\n BigInt(adapterPtr),\n BigInt(messagePtr)\n );\n stackRestore(sp);\n });\n }\n )\n );\n}\nvar _emwgpuQueueOnSubmittedWorkDone = function (queuePtr, futureId) {\n queuePtr = bigintToI53Checked(queuePtr);\n futureId = bigintToI53Checked(futureId);\n var queue = WebGPU.getJsObject(queuePtr);\n WebGPU.Internals.futureInsert(\n futureId,\n queue.onSubmittedWorkDone().then(() => {\n callUserCallback(() => {\n _emwgpuOnWorkDoneCompleted(futureId, 1);\n });\n })\n );\n};\nvar _emwgpuWaitAny = function (futurePtr, futureCount, timeoutMSPtr) {\n futurePtr = bigintToI53Checked(futurePtr);\n futureCount = bigintToI53Checked(futureCount);\n timeoutMSPtr = bigintToI53Checked(timeoutMSPtr);\n return Asyncify.handleAsync(async () => {\n var promises = [];\n if (timeoutMSPtr) {\n var timeoutMS = HEAP32[timeoutMSPtr / 4];\n promises.length = futureCount + 1;\n promises[futureCount] = new Promise((resolve) =>\n setTimeout(resolve, timeoutMS, 0)\n );\n } else {\n promises.length = futureCount;\n }\n for (var i = 0; i < futureCount; ++i) {\n var futureId = readI53FromI64(futurePtr + i * 8);\n if (!(futureId in WebGPU.Internals.futures)) {\n return futureId;\n }\n promises[i] = WebGPU.Internals.futures[futureId];\n }\n const firstResolvedFuture = await Promise.race(promises);\n delete WebGPU.Internals.futures[firstResolvedFuture];\n return firstResolvedFuture;\n });\n};\n_emwgpuWaitAny.isAsync = true;\nvar ENV = {};\nvar getExecutableName = () => thisProgram || './this.program';\nvar getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n var lang =\n ((typeof navigator == 'object' && navigator.language) || 'C').replace(\n '-',\n '_'\n ) + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(`${x}=${env[x]}`);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n};\nfunction _environ_get(__environ, environ_buf) {\n __environ = bigintToI53Checked(__environ);\n environ_buf = bigintToI53Checked(environ_buf);\n var bufSize = 0;\n var envp = 0;\n for (var string of getEnvStrings()) {\n var ptr = environ_buf + bufSize;\n HEAPU64[(__environ + envp) / 8] = BigInt(ptr);\n bufSize += stringToUTF8(string, ptr, Infinity) + 1;\n envp += 8;\n }\n return 0;\n}\nfunction _environ_sizes_get(penviron_count, penviron_buf_size) {\n penviron_count = bigintToI53Checked(penviron_count);\n penviron_buf_size = bigintToI53Checked(penviron_buf_size);\n var strings = getEnvStrings();\n HEAPU64[penviron_count / 8] = BigInt(strings.length);\n var bufSize = 0;\n for (var string of strings) {\n bufSize += lengthBytesUTF8(string) + 1;\n }\n HEAPU64[penviron_buf_size / 8] = BigInt(bufSize);\n return 0;\n}\nfunction _fd_close(fd) {\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.close(stream);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doReadv = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = Number(HEAPU64[iov / 8]);\n var len = Number(HEAPU64[(iov + 8) / 8]);\n iov += 16;\n var curr = FS.read(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) break;\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_read(fd, iov, iovcnt, pnum) {\n iov = bigintToI53Checked(iov);\n iovcnt = bigintToI53Checked(iovcnt);\n pnum = bigintToI53Checked(pnum);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doReadv(stream, iov, iovcnt);\n HEAPU64[pnum / 8] = BigInt(num);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _fd_seek(fd, offset, whence, newOffset) {\n offset = bigintToI53Checked(offset);\n newOffset = bigintToI53Checked(newOffset);\n try {\n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.llseek(stream, offset, whence);\n HEAP64[newOffset / 8] = BigInt(stream.position);\n if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doWritev = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = Number(HEAPU64[iov / 8]);\n var len = Number(HEAPU64[(iov + 8) / 8]);\n iov += 16;\n var curr = FS.write(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) {\n break;\n }\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_write(fd, iov, iovcnt, pnum) {\n iov = bigintToI53Checked(iov);\n iovcnt = bigintToI53Checked(iovcnt);\n pnum = bigintToI53Checked(pnum);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doWritev(stream, iov, iovcnt);\n HEAPU64[pnum / 8] = BigInt(num);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _llvm_eh_typeid_for(type) {\n type = bigintToI53Checked(type);\n return type;\n}\nfunction _random_get(buffer, size) {\n buffer = bigintToI53Checked(buffer);\n size = bigintToI53Checked(size);\n try {\n randomFill(HEAPU8.subarray(buffer, buffer + size));\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar emwgpuStringToInt_FeatureName = {\n 'core-features-and-limits': 1,\n 'depth-clip-control': 2,\n 'depth32float-stencil8': 3,\n 'texture-compression-bc': 4,\n 'texture-compression-bc-sliced-3d': 5,\n 'texture-compression-etc2': 6,\n 'texture-compression-astc': 7,\n 'texture-compression-astc-sliced-3d': 8,\n 'timestamp-query': 9,\n 'indirect-first-instance': 10,\n 'shader-f16': 11,\n 'rg11b10ufloat-renderable': 12,\n 'bgra8unorm-storage': 13,\n 'float32-filterable': 14,\n 'float32-blendable': 15,\n 'clip-distances': 16,\n 'dual-source-blending': 17,\n subgroups: 18,\n 'texture-formats-tier1': 19,\n 'texture-formats-tier2': 20,\n 'primitive-index': 21,\n 'texture-component-swizzle': 22,\n 'chromium-experimental-unorm16-texture-formats': 327692,\n 'chromium-experimental-multi-draw-indirect': 327729,\n};\nfunction _wgpuAdapterGetFeatures(adapterPtr, supportedFeatures) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n supportedFeatures = bigintToI53Checked(supportedFeatures);\n var adapter = WebGPU.getJsObject(adapterPtr);\n var featuresPtr = _malloc(adapter.features.size * 4);\n var offset = 0;\n var numFeatures = 0;\n for (const feature of adapter.features) {\n var featureEnumValue = emwgpuStringToInt_FeatureName[feature];\n if (featureEnumValue >= 0) {\n HEAP32[(featuresPtr + offset) / 4] = featureEnumValue;\n offset += 4;\n numFeatures++;\n }\n }\n HEAPU64[(supportedFeatures + 8) / 8] = BigInt(featuresPtr);\n HEAPU64[supportedFeatures / 8] = BigInt(numFeatures);\n}\nfunction _wgpuAdapterGetInfo(adapterPtr, info) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n info = bigintToI53Checked(info);\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillAdapterInfoStruct(adapter.info, info);\n return 1;\n}\nfunction _wgpuAdapterGetLimits(adapterPtr, limitsOutPtr) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n limitsOutPtr = bigintToI53Checked(limitsOutPtr);\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillLimitStruct(adapter.limits, limitsOutPtr);\n return 1;\n}\nfunction _wgpuAdapterHasFeature(adapterPtr, featureEnumValue) {\n adapterPtr = bigintToI53Checked(adapterPtr);\n var adapter = WebGPU.getJsObject(adapterPtr);\n return adapter.features.has(WebGPU.FeatureName[featureEnumValue]);\n}\nvar _wgpuBufferGetSize = function (bufferPtr) {\n bufferPtr = bigintToI53Checked(bufferPtr);\n var ret = (() => {\n var buffer = WebGPU.getJsObject(bufferPtr);\n return buffer.size;\n })();\n return BigInt(ret);\n};\nvar _wgpuCommandEncoderBeginComputePass = function (encoderPtr, descriptor) {\n encoderPtr = bigintToI53Checked(encoderPtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var desc;\n if (descriptor) {\n desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n timestampWrites: WebGPU.makePassTimestampWrites(\n Number(HEAPU64[(descriptor + 24) / 8])\n ),\n };\n }\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateComputePassEncoder(0n);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.beginComputePass(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nfunction _wgpuCommandEncoderCopyBufferToBuffer(\n encoderPtr,\n srcPtr,\n srcOffset,\n dstPtr,\n dstOffset,\n size\n) {\n encoderPtr = bigintToI53Checked(encoderPtr);\n srcPtr = bigintToI53Checked(srcPtr);\n srcOffset = bigintToI53Checked(srcOffset);\n dstPtr = bigintToI53Checked(dstPtr);\n dstOffset = bigintToI53Checked(dstOffset);\n size = bigintToI53Checked(size);\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var src = WebGPU.getJsObject(srcPtr);\n var dst = WebGPU.getJsObject(dstPtr);\n commandEncoder.copyBufferToBuffer(src, srcOffset, dst, dstOffset, size);\n}\nvar _wgpuCommandEncoderFinish = function (encoderPtr, descriptor) {\n encoderPtr = bigintToI53Checked(encoderPtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateCommandBuffer(0n);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.finish());\n return ptr;\n })();\n return BigInt(ret);\n};\nfunction _wgpuComputePassEncoderDispatchWorkgroups(passPtr, x, y, z) {\n passPtr = bigintToI53Checked(passPtr);\n var pass = WebGPU.getJsObject(passPtr);\n pass.dispatchWorkgroups(x, y, z);\n}\nfunction _wgpuComputePassEncoderEnd(passPtr) {\n passPtr = bigintToI53Checked(passPtr);\n var pass = WebGPU.getJsObject(passPtr);\n pass.end();\n}\nfunction _wgpuComputePassEncoderSetBindGroup(\n passPtr,\n groupIndex,\n groupPtr,\n dynamicOffsetCount,\n dynamicOffsetsPtr\n) {\n passPtr = bigintToI53Checked(passPtr);\n groupPtr = bigintToI53Checked(groupPtr);\n dynamicOffsetCount = bigintToI53Checked(dynamicOffsetCount);\n dynamicOffsetsPtr = bigintToI53Checked(dynamicOffsetsPtr);\n var pass = WebGPU.getJsObject(passPtr);\n var group = WebGPU.getJsObject(groupPtr);\n if (dynamicOffsetCount == 0) {\n pass.setBindGroup(groupIndex, group);\n } else {\n pass.setBindGroup(\n groupIndex,\n group,\n HEAPU32,\n dynamicOffsetsPtr / 4,\n dynamicOffsetCount\n );\n }\n}\nfunction _wgpuComputePassEncoderSetPipeline(passPtr, pipelinePtr) {\n passPtr = bigintToI53Checked(passPtr);\n pipelinePtr = bigintToI53Checked(pipelinePtr);\n var pass = WebGPU.getJsObject(passPtr);\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n pass.setPipeline(pipeline);\n}\nvar _wgpuComputePipelineGetBindGroupLayout = function (\n pipelinePtr,\n groupIndex\n) {\n pipelinePtr = bigintToI53Checked(pipelinePtr);\n var ret = (() => {\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n var ptr = _emwgpuCreateBindGroupLayout(0n);\n WebGPU.Internals.jsObjectInsert(\n ptr,\n pipeline.getBindGroupLayout(groupIndex)\n );\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuDeviceCreateBindGroup = function (devicePtr, descriptor) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n function makeEntry(entryPtr) {\n var bufferPtr = Number(HEAPU64[(entryPtr + 16) / 8]);\n var samplerPtr = Number(HEAPU64[(entryPtr + 40) / 8]);\n var textureViewPtr = Number(HEAPU64[(entryPtr + 48) / 8]);\n var externalTexturePtr = 0;\n WebGPU.iterateExtensions(entryPtr, {\n 327681: (ptr) => {\n externalTexturePtr = Number(HEAPU64[(ptr + 16) / 8]);\n },\n });\n var resource;\n if (bufferPtr) {\n var size = readI53FromI64(entryPtr + 32);\n if (size == -1) size = undefined;\n resource = {\n buffer: WebGPU.getJsObject(bufferPtr),\n offset: readI53FromI64(entryPtr + 24),\n size,\n };\n } else {\n resource = WebGPU.getJsObject(\n samplerPtr || textureViewPtr || externalTexturePtr\n );\n }\n return { binding: HEAPU32[(entryPtr + 8) / 4], resource };\n }\n function makeEntries(count, entriesPtrs) {\n var entries = [];\n for (var i = 0; i < count; ++i) {\n entries.push(makeEntry(entriesPtrs + 56 * i));\n }\n return entries;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 8),\n layout: WebGPU.getJsObject(Number(HEAPU64[(descriptor + 24) / 8])),\n entries: makeEntries(\n Number(HEAPU64[(descriptor + 32) / 8]),\n Number(HEAPU64[(descriptor + 40) / 8])\n ),\n };\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateBindGroup(0n);\n WebGPU.Internals.jsObjectInsert(ptr, device.createBindGroup(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuDeviceCreateCommandEncoder = function (devicePtr, descriptor) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var desc;\n if (descriptor) {\n desc = { label: WebGPU.makeStringFromOptionalStringView(descriptor + 8) };\n }\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateCommandEncoder(0n);\n WebGPU.Internals.jsObjectInsert(ptr, device.createCommandEncoder(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuDeviceCreateComputePipeline = function (devicePtr, descriptor) {\n devicePtr = bigintToI53Checked(devicePtr);\n descriptor = bigintToI53Checked(descriptor);\n var ret = (() => {\n var desc = WebGPU.makeComputePipelineDesc(descriptor);\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateComputePipeline(0n);\n WebGPU.Internals.jsObjectInsert(ptr, device.createComputePipeline(desc));\n return ptr;\n })();\n return BigInt(ret);\n};\nvar _wgpuQueueSubmit = function (queuePtr, commandCount, commands) {\n queuePtr = bigintToI53Checked(queuePtr);\n commandCount = bigintToI53Checked(commandCount);\n commands = bigintToI53Checked(commands);\n var queue = WebGPU.getJsObject(queuePtr);\n var cmds = Array.from(\n HEAP64.subarray(commands / 8, (commands + commandCount * 8) / 8),\n (id) => WebGPU.getJsObject(id)\n );\n queue.submit(cmds);\n};\nfunction _wgpuQueueWriteBuffer(queuePtr, bufferPtr, bufferOffset, data, size) {\n queuePtr = bigintToI53Checked(queuePtr);\n bufferPtr = bigintToI53Checked(bufferPtr);\n bufferOffset = bigintToI53Checked(bufferOffset);\n data = bigintToI53Checked(data);\n size = bigintToI53Checked(size);\n var queue = WebGPU.getJsObject(queuePtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var subarray = HEAPU8.subarray(data, data + size);\n queue.writeBuffer(buffer, bufferOffset, subarray, 0, size);\n}\nvar runAndAbortIfError = (func) => {\n try {\n return func();\n } catch (e) {\n abort(e);\n }\n};\nvar runtimeKeepalivePush = () => {\n runtimeKeepaliveCounter += 1;\n};\nvar runtimeKeepalivePop = () => {\n runtimeKeepaliveCounter -= 1;\n};\nvar Asyncify = {\n rewindArguments: new Map(),\n instrumentWasmImports(imports) {\n var importPattern = /^(invoke_.*|__asyncjs__.*)$/;\n for (let [x, original] of Object.entries(imports)) {\n if (typeof original == 'function') {\n let isAsyncifyImport = original.isAsync || importPattern.test(x);\n }\n }\n },\n saveRewindArguments(func, passedArguments) {\n return Asyncify.rewindArguments.set(func, Array.from(passedArguments));\n },\n restoreRewindArguments(func) {\n return Asyncify.rewindArguments.get(func);\n },\n instrumentFunction(original) {\n var wrapper = (...args) => {\n Asyncify.exportCallStack.push(original);\n try {\n Asyncify.saveRewindArguments(original, args);\n return original(...args);\n } finally {\n if (!ABORT) {\n var top = Asyncify.exportCallStack.pop();\n Asyncify.maybeStopUnwind();\n }\n }\n };\n Asyncify.funcWrappers.set(original, wrapper);\n return wrapper;\n },\n instrumentWasmExports(exports) {\n var ret = {};\n for (let [x, original] of Object.entries(exports)) {\n if (typeof original == 'function') {\n var wrapper = Asyncify.instrumentFunction(original);\n ret[x] = wrapper;\n } else {\n ret[x] = original;\n }\n }\n return ret;\n },\n State: { Normal: 0, Unwinding: 1, Rewinding: 2, Disabled: 3 },\n state: 0,\n StackSize: 4096,\n currData: null,\n handleSleepReturnValue: 0,\n exportCallStack: [],\n callstackFuncToId: new Map(),\n callStackIdToFunc: new Map(),\n funcWrappers: new Map(),\n callStackId: 0,\n asyncPromiseHandlers: null,\n sleepCallbacks: [],\n getCallStackId(func) {\n if (!Asyncify.callstackFuncToId.has(func)) {\n var id = Asyncify.callStackId++;\n Asyncify.callstackFuncToId.set(func, id);\n Asyncify.callStackIdToFunc.set(id, func);\n }\n return Asyncify.callstackFuncToId.get(func);\n },\n maybeStopUnwind() {\n if (\n Asyncify.currData &&\n Asyncify.state === Asyncify.State.Unwinding &&\n Asyncify.exportCallStack.length === 0\n ) {\n Asyncify.state = Asyncify.State.Normal;\n runAndAbortIfError(_asyncify_stop_unwind);\n if (typeof Fibers != 'undefined') {\n Fibers.trampoline();\n }\n }\n },\n whenDone() {\n return new Promise((resolve, reject) => {\n Asyncify.asyncPromiseHandlers = { resolve, reject };\n });\n },\n allocateData() {\n var ptr = _malloc(24 + Asyncify.StackSize);\n Asyncify.setDataHeader(ptr, ptr + 24, Asyncify.StackSize);\n Asyncify.setDataRewindFunc(ptr);\n return ptr;\n },\n setDataHeader(ptr, stack, stackSize) {\n HEAPU64[ptr / 8] = BigInt(stack);\n HEAPU64[(ptr + 8) / 8] = BigInt(stack + stackSize);\n },\n setDataRewindFunc(ptr) {\n var bottomOfCallStack = Asyncify.exportCallStack[0];\n var rewindId = Asyncify.getCallStackId(bottomOfCallStack);\n HEAP32[(ptr + 16) / 4] = rewindId;\n },\n getDataRewindFunc(ptr) {\n var id = HEAP32[(ptr + 16) / 4];\n var func = Asyncify.callStackIdToFunc.get(id);\n return func;\n },\n doRewind(ptr) {\n var original = Asyncify.getDataRewindFunc(ptr);\n var func = Asyncify.funcWrappers.get(original);\n return func(...Asyncify.restoreRewindArguments(original));\n },\n handleSleep(startAsync) {\n if (ABORT) return;\n if (Asyncify.state === Asyncify.State.Normal) {\n var reachedCallback = false;\n var reachedAfterCallback = false;\n startAsync((handleSleepReturnValue = 0) => {\n if (ABORT) return;\n Asyncify.handleSleepReturnValue = handleSleepReturnValue;\n reachedCallback = true;\n if (!reachedAfterCallback) {\n return;\n }\n Asyncify.state = Asyncify.State.Rewinding;\n runAndAbortIfError(() => _asyncify_start_rewind(Asyncify.currData));\n if (typeof MainLoop != 'undefined' && MainLoop.func) {\n MainLoop.resume();\n }\n var asyncWasmReturnValue,\n isError = false;\n try {\n asyncWasmReturnValue = Asyncify.doRewind(Asyncify.currData);\n } catch (err) {\n asyncWasmReturnValue = err;\n isError = true;\n }\n var handled = false;\n if (!Asyncify.currData) {\n var asyncPromiseHandlers = Asyncify.asyncPromiseHandlers;\n if (asyncPromiseHandlers) {\n Asyncify.asyncPromiseHandlers = null;\n (isError\n ? asyncPromiseHandlers.reject\n : asyncPromiseHandlers.resolve)(asyncWasmReturnValue);\n handled = true;\n }\n }\n if (isError && !handled) {\n throw asyncWasmReturnValue;\n }\n });\n reachedAfterCallback = true;\n if (!reachedCallback) {\n Asyncify.state = Asyncify.State.Unwinding;\n Asyncify.currData = Asyncify.allocateData();\n if (typeof MainLoop != 'undefined' && MainLoop.func) {\n MainLoop.pause();\n }\n runAndAbortIfError(() => _asyncify_start_unwind(Asyncify.currData));\n }\n } else if (Asyncify.state === Asyncify.State.Rewinding) {\n Asyncify.state = Asyncify.State.Normal;\n runAndAbortIfError(_asyncify_stop_rewind);\n _free(Asyncify.currData);\n Asyncify.currData = null;\n Asyncify.sleepCallbacks.forEach(callUserCallback);\n } else {\n abort(`invalid state: ${Asyncify.state}`);\n }\n return Asyncify.handleSleepReturnValue;\n },\n handleAsync: (startAsync) =>\n Asyncify.handleSleep((wakeUp) => {\n startAsync().then(wakeUp);\n }),\n};\nvar getCFunc = (ident) => {\n var func = Module['_' + ident];\n return func;\n};\nvar writeArrayToMemory = (array, buffer) => {\n HEAP8.set(array, buffer);\n};\nvar ccall = (ident, returnType, argTypes, args, opts) => {\n var toC = {\n pointer: (p) => BigInt(p),\n string: (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str);\n }\n return BigInt(ret);\n },\n array: (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return BigInt(ret);\n },\n };\n function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(Number(ret));\n }\n if (returnType === 'pointer') return Number(ret);\n if (returnType === 'boolean') return Boolean(ret);\n return ret;\n }\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var previousAsync = Asyncify.currData;\n var ret = func(...cArgs);\n function onDone(ret) {\n runtimeKeepalivePop();\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n var asyncMode = opts?.async;\n runtimeKeepalivePush();\n if (Asyncify.currData != previousAsync) {\n return Asyncify.whenDone().then(onDone);\n }\n ret = onDone(ret);\n if (asyncMode) return Promise.resolve(ret);\n return ret;\n};\nvar cwrap = (ident, returnType, argTypes, opts) => {\n var numericArgs =\n !argTypes ||\n argTypes.every((type) => type === 'number' || type === 'boolean');\n var numericRet = returnType !== 'string';\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return (...args) => ccall(ident, returnType, argTypes, args, opts);\n};\nvar FS_createPath = (...args) => FS.createPath(...args);\nvar FS_unlink = (...args) => FS.unlink(...args);\nvar FS_createLazyFile = (...args) => FS.createLazyFile(...args);\nvar FS_createDevice = (...args) => FS.createDevice(...args);\nFS.createPreloadedFile = FS_createPreloadedFile;\nFS.preloadFile = FS_preloadFile;\nFS.staticInit();\n{\n initMemory();\n if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];\n if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins'];\n if (Module['print']) out = Module['print'];\n if (Module['printErr']) err = Module['printErr'];\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].shift()();\n }\n }\n}\nModule['mmapAlloc'] = mmapAlloc;\nModule['addRunDependency'] = addRunDependency;\nModule['removeRunDependency'] = removeRunDependency;\nModule['ccall'] = ccall;\nModule['cwrap'] = cwrap;\nModule['FS_preloadFile'] = FS_preloadFile;\nModule['FS_unlink'] = FS_unlink;\nModule['FS_createPath'] = FS_createPath;\nModule['FS_createDevice'] = FS_createDevice;\nModule['FS'] = FS;\nModule['FS_createDataFile'] = FS_createDataFile;\nModule['FS_createLazyFile'] = FS_createLazyFile;\nModule['MEMFS'] = MEMFS;\nvar _wllama_malloc,\n _wllama_start,\n _wllama_action,\n _wllama_exit,\n _wllama_debug,\n _main,\n _malloc,\n _free,\n _emwgpuCreateBindGroup,\n _emwgpuCreateBindGroupLayout,\n _emwgpuCreateCommandBuffer,\n _emwgpuCreateCommandEncoder,\n _emwgpuCreateComputePassEncoder,\n _emwgpuCreateComputePipeline,\n _emwgpuCreateExternalTexture,\n _emwgpuCreatePipelineLayout,\n _emwgpuCreateQuerySet,\n _emwgpuCreateRenderBundle,\n _emwgpuCreateRenderBundleEncoder,\n _emwgpuCreateRenderPassEncoder,\n _emwgpuCreateRenderPipeline,\n _emwgpuCreateSampler,\n _emwgpuCreateSurface,\n _emwgpuCreateTexture,\n _emwgpuCreateTextureView,\n _emwgpuCreateAdapter,\n _emwgpuCreateBuffer,\n _emwgpuCreateDevice,\n _emwgpuCreateQueue,\n _emwgpuCreateShaderModule,\n _emwgpuOnDeviceLostCompleted,\n _emwgpuOnMapAsyncCompleted,\n _emwgpuOnRequestAdapterCompleted,\n _emwgpuOnRequestDeviceCompleted,\n _emwgpuOnWorkDoneCompleted,\n _emwgpuOnUncapturedError,\n _emscripten_builtin_memalign,\n _memalign,\n _setThrew,\n __emscripten_tempret_set,\n __emscripten_stack_restore,\n __emscripten_stack_alloc,\n _emscripten_stack_get_current,\n ___cxa_decrement_exception_refcount,\n ___cxa_increment_exception_refcount,\n ___cxa_can_catch,\n ___cxa_get_exception_ptr,\n dynCall_v,\n dynCall_jj,\n dynCall_jjj,\n dynCall_vjjj,\n dynCall_vjj,\n dynCall_jjjjjj,\n dynCall_ij,\n dynCall_ijijj,\n dynCall_vj,\n dynCall_ji,\n dynCall_vji,\n dynCall_jjjj,\n dynCall_jji,\n dynCall_vjiii,\n dynCall_iji,\n dynCall_vjjjj,\n dynCall_jjjji,\n dynCall_jjjjjji,\n dynCall_vjii,\n dynCall_vjjii,\n dynCall_jjjjj,\n dynCall_vjjjii,\n dynCall_vjiiji,\n dynCall_ijj,\n dynCall_j,\n dynCall_ijjjjj,\n dynCall_ijjjiiiij,\n dynCall_ijjii,\n dynCall_ijiii,\n dynCall_vjiiii,\n dynCall_vjjjji,\n dynCall_vijj,\n dynCall_vjji,\n dynCall_ijijiii,\n dynCall_vjijj,\n dynCall_ijjijiii,\n dynCall_ijjjiji,\n dynCall_ijjjj,\n dynCall_jjjjjjjj,\n dynCall_jiij,\n dynCall_jfj,\n dynCall_jffji,\n dynCall_jfff,\n dynCall_jifff,\n dynCall_jjiffiijj,\n dynCall_jf,\n dynCall_jiff,\n dynCall_jiiffi,\n dynCall_ifj,\n dynCall_jjjjjjjjiiiijj,\n dynCall_iijji,\n dynCall_vjjjjjj,\n dynCall_vjjjjj,\n dynCall_ijij,\n dynCall_jij,\n dynCall_ii,\n dynCall_jjiiijij,\n dynCall_ijji,\n dynCall_jjjijii,\n dynCall_jjjijj,\n dynCall_jjij,\n dynCall_jjijj,\n dynCall_jjjf,\n dynCall_jjjiiii,\n dynCall_jjjii,\n dynCall_jjjjjjj,\n dynCall_jjijjj,\n dynCall_jjijjjj,\n dynCall_jjji,\n dynCall_jjjjjiiiiiij,\n dynCall_vjiji,\n dynCall_jijjjjjj,\n dynCall_vjjji,\n dynCall_fjji,\n dynCall_jjjjjjjjj,\n dynCall_jjjjjjjjffi,\n dynCall_ijjiiji,\n dynCall_ijjiij,\n dynCall_jjjiiiiiiiiiijj,\n dynCall_iii,\n dynCall_jjjiiiiij,\n dynCall_jjjiiij,\n dynCall_ijjji,\n dynCall_ijjjii,\n dynCall_iij,\n dynCall_ijjj,\n dynCall_ijjjji,\n dynCall_jjjjjiiiffffff,\n dynCall_jjjjiiiiiiii,\n dynCall_vij,\n dynCall_vi,\n dynCall_iijj,\n dynCall_jjjjiii,\n dynCall_ijjjjii,\n dynCall_jjjjii,\n dynCall_vjij,\n dynCall_vjjijj,\n dynCall_ijiji,\n dynCall_ijijii,\n dynCall_jjiijii,\n dynCall_jjjjjjjjji,\n dynCall_vjjjijjjji,\n dynCall_jjjjji,\n dynCall_vjjjijjj,\n dynCall_vjjjjij,\n dynCall_i,\n dynCall_ijjjjjj,\n dynCall_jjjiiiiiiiiiiiiijj,\n dynCall_vjjjij,\n dynCall_jjjjijjjj,\n dynCall_jjjjjii,\n dynCall_vjjjjjjji,\n dynCall_jjjjjjjjjjjjfi,\n dynCall_jjjjjjjjjjiifiijjjjj,\n dynCall_jjjjjjjjjjjjjiii,\n dynCall_jjjffff,\n dynCall_jjjjjjji,\n dynCall_jjjff,\n dynCall_jjjjjijiiffffff,\n dynCall_jjjjiij,\n dynCall_jjjjjjjjjjjjjjjj,\n dynCall_vjjjjjjjji,\n dynCall_jjjjjjjjjjjjjjiifiijjjjjj,\n dynCall_jjjjff,\n dynCall_ijiijjj,\n dynCall_jjjjjjjjjjjjj,\n dynCall_vijjiiiijjj,\n dynCall_vjjij,\n dynCall_djj,\n dynCall_vjjjiij,\n dynCall_vjjiiii,\n dynCall_vjjiif,\n dynCall_ijiijj,\n dynCall_vjjjijj,\n dynCall_vjjiii,\n dynCall_vjjjiijj,\n dynCall_jjjjiijj,\n dynCall_jjjjjifi,\n dynCall_jjjjjjjjfi,\n dynCall_jjjjjjjjjii,\n dynCall_jjjjiiiiii,\n dynCall_jjjiiiiiff,\n dynCall_vijjjjjji,\n dynCall_vijjjj,\n dynCall_vjijjj,\n dynCall_vijjj,\n dynCall_ijjjjjjj,\n dynCall_viifffj,\n dynCall_vjjjiii,\n dynCall_vjjjjjji,\n dynCall_ijjjjjjji,\n dynCall_jjiij,\n dynCall_vjjjjjjj,\n dynCall_ijjjij,\n dynCall_jjjd,\n dynCall_ijdiiii,\n dynCall_jjjjij,\n dynCall_iiijjjijjjj,\n dynCall_iijjjjiijjjjj,\n dynCall_fjjj,\n dynCall_djjj,\n dynCall_ijjijijjjjjj,\n dynCall_vijjjjjjjjj,\n dynCall_viijjjjjjjj,\n dynCall_vjjjijjjijiijjji,\n dynCall_ijii,\n dynCall_ijjjjjjjj,\n dynCall_jjjjid,\n dynCall_jjjjijj,\n dynCall_jjjjjjjii,\n dynCall_jjjjijii,\n dynCall_jjjjijjj,\n dynCall_jjjijijj,\n dynCall_jjjijij,\n dynCall_vjjf,\n dynCall_vjjd,\n dynCall_vjjjjii,\n _asyncify_start_unwind,\n _asyncify_stop_unwind,\n _asyncify_start_rewind,\n _asyncify_stop_rewind,\n __indirect_function_table,\n wasmTable;\nfunction assignWasmExports(wasmExports) {\n _wllama_malloc = Module['_wllama_malloc'] = wasmExports['gd'];\n _wllama_start = Module['_wllama_start'] = wasmExports['hd'];\n _wllama_action = Module['_wllama_action'] = wasmExports['id'];\n _wllama_exit = Module['_wllama_exit'] = wasmExports['jd'];\n _wllama_debug = Module['_wllama_debug'] = wasmExports['kd'];\n _main = Module['_main'] = wasmExports['ld'];\n _malloc = wasmExports['md'];\n _free = wasmExports['nd'];\n _emwgpuCreateBindGroup = wasmExports['od'];\n _emwgpuCreateBindGroupLayout = wasmExports['pd'];\n _emwgpuCreateCommandBuffer = wasmExports['qd'];\n _emwgpuCreateCommandEncoder = wasmExports['rd'];\n _emwgpuCreateComputePassEncoder = wasmExports['sd'];\n _emwgpuCreateComputePipeline = wasmExports['td'];\n _emwgpuCreateExternalTexture = wasmExports['ud'];\n _emwgpuCreatePipelineLayout = wasmExports['vd'];\n _emwgpuCreateQuerySet = wasmExports['wd'];\n _emwgpuCreateRenderBundle = wasmExports['xd'];\n _emwgpuCreateRenderBundleEncoder = wasmExports['yd'];\n _emwgpuCreateRenderPassEncoder = wasmExports['zd'];\n _emwgpuCreateRenderPipeline = wasmExports['Ad'];\n _emwgpuCreateSampler = wasmExports['Bd'];\n _emwgpuCreateSurface = wasmExports['Cd'];\n _emwgpuCreateTexture = wasmExports['Dd'];\n _emwgpuCreateTextureView = wasmExports['Ed'];\n _emwgpuCreateAdapter = wasmExports['Fd'];\n _emwgpuCreateBuffer = wasmExports['Gd'];\n _emwgpuCreateDevice = wasmExports['Hd'];\n _emwgpuCreateQueue = wasmExports['Id'];\n _emwgpuCreateShaderModule = wasmExports['Jd'];\n _emwgpuOnDeviceLostCompleted = wasmExports['Kd'];\n _emwgpuOnMapAsyncCompleted = wasmExports['Ld'];\n _emwgpuOnRequestAdapterCompleted = wasmExports['Md'];\n _emwgpuOnRequestDeviceCompleted = wasmExports['Nd'];\n _emwgpuOnWorkDoneCompleted = wasmExports['Od'];\n _emwgpuOnUncapturedError = wasmExports['Pd'];\n _emscripten_builtin_memalign = wasmExports['Qd'];\n _memalign = wasmExports['Rd'];\n _setThrew = wasmExports['Sd'];\n __emscripten_tempret_set = wasmExports['Td'];\n __emscripten_stack_restore = wasmExports['Ud'];\n __emscripten_stack_alloc = wasmExports['Vd'];\n _emscripten_stack_get_current = wasmExports['Wd'];\n ___cxa_decrement_exception_refcount = wasmExports['Xd'];\n ___cxa_increment_exception_refcount = wasmExports['Yd'];\n ___cxa_can_catch = wasmExports['Zd'];\n ___cxa_get_exception_ptr = wasmExports['_d'];\n dynCall_v = dynCalls['v'] = wasmExports['$d'];\n dynCall_jj = dynCalls['jj'] = wasmExports['ae'];\n dynCall_jjj = dynCalls['jjj'] = wasmExports['be'];\n dynCall_vjjj = dynCalls['vjjj'] = wasmExports['ce'];\n dynCall_vjj = dynCalls['vjj'] = wasmExports['de'];\n dynCall_jjjjjj = dynCalls['jjjjjj'] = wasmExports['ee'];\n dynCall_ij = dynCalls['ij'] = wasmExports['fe'];\n dynCall_ijijj = dynCalls['ijijj'] = wasmExports['ge'];\n dynCall_vj = dynCalls['vj'] = wasmExports['he'];\n dynCall_ji = dynCalls['ji'] = wasmExports['ie'];\n dynCall_vji = dynCalls['vji'] = wasmExports['je'];\n dynCall_jjjj = dynCalls['jjjj'] = wasmExports['ke'];\n dynCall_jji = dynCalls['jji'] = wasmExports['le'];\n dynCall_vjiii = dynCalls['vjiii'] = wasmExports['me'];\n dynCall_iji = dynCalls['iji'] = wasmExports['ne'];\n dynCall_vjjjj = dynCalls['vjjjj'] = wasmExports['oe'];\n dynCall_jjjji = dynCalls['jjjji'] = wasmExports['pe'];\n dynCall_jjjjjji = dynCalls['jjjjjji'] = wasmExports['qe'];\n dynCall_vjii = dynCalls['vjii'] = wasmExports['re'];\n dynCall_vjjii = dynCalls['vjjii'] = wasmExports['se'];\n dynCall_jjjjj = dynCalls['jjjjj'] = wasmExports['te'];\n dynCall_vjjjii = dynCalls['vjjjii'] = wasmExports['ue'];\n dynCall_vjiiji = dynCalls['vjiiji'] = wasmExports['ve'];\n dynCall_ijj = dynCalls['ijj'] = wasmExports['we'];\n dynCall_j = dynCalls['j'] = wasmExports['xe'];\n dynCall_ijjjjj = dynCalls['ijjjjj'] = wasmExports['ye'];\n dynCall_ijjjiiiij = dynCalls['ijjjiiiij'] = wasmExports['ze'];\n dynCall_ijjii = dynCalls['ijjii'] = wasmExports['Ae'];\n dynCall_ijiii = dynCalls['ijiii'] = wasmExports['Be'];\n dynCall_vjiiii = dynCalls['vjiiii'] = wasmExports['Ce'];\n dynCall_vjjjji = dynCalls['vjjjji'] = wasmExports['De'];\n dynCall_vijj = dynCalls['vijj'] = wasmExports['Ee'];\n dynCall_vjji = dynCalls['vjji'] = wasmExports['Fe'];\n dynCall_ijijiii = dynCalls['ijijiii'] = wasmExports['Ge'];\n dynCall_vjijj = dynCalls['vjijj'] = wasmExports['He'];\n dynCall_ijjijiii = dynCalls['ijjijiii'] = wasmExports['Ie'];\n dynCall_ijjjiji = dynCalls['ijjjiji'] = wasmExports['Je'];\n dynCall_ijjjj = dynCalls['ijjjj'] = wasmExports['Ke'];\n dynCall_jjjjjjjj = dynCalls['jjjjjjjj'] = wasmExports['Le'];\n dynCall_jiij = dynCalls['jiij'] = wasmExports['Me'];\n dynCall_jfj = dynCalls['jfj'] = wasmExports['Ne'];\n dynCall_jffji = dynCalls['jffji'] = wasmExports['Oe'];\n dynCall_jfff = dynCalls['jfff'] = wasmExports['Pe'];\n dynCall_jifff = dynCalls['jifff'] = wasmExports['Qe'];\n dynCall_jjiffiijj = dynCalls['jjiffiijj'] = wasmExports['Re'];\n dynCall_jf = dynCalls['jf'] = wasmExports['Se'];\n dynCall_jiff = dynCalls['jiff'] = wasmExports['Te'];\n dynCall_jiiffi = dynCalls['jiiffi'] = wasmExports['Ue'];\n dynCall_ifj = dynCalls['ifj'] = wasmExports['Ve'];\n dynCall_jjjjjjjjiiiijj = dynCalls['jjjjjjjjiiiijj'] = wasmExports['We'];\n dynCall_iijji = dynCalls['iijji'] = wasmExports['Xe'];\n dynCall_vjjjjjj = dynCalls['vjjjjjj'] = wasmExports['Ye'];\n dynCall_vjjjjj = dynCalls['vjjjjj'] = wasmExports['Ze'];\n dynCall_ijij = dynCalls['ijij'] = wasmExports['_e'];\n dynCall_jij = dynCalls['jij'] = wasmExports['$e'];\n dynCall_ii = dynCalls['ii'] = wasmExports['af'];\n dynCall_jjiiijij = dynCalls['jjiiijij'] = wasmExports['bf'];\n dynCall_ijji = dynCalls['ijji'] = wasmExports['cf'];\n dynCall_jjjijii = dynCalls['jjjijii'] = wasmExports['df'];\n dynCall_jjjijj = dynCalls['jjjijj'] = wasmExports['ef'];\n dynCall_jjij = dynCalls['jjij'] = wasmExports['ff'];\n dynCall_jjijj = dynCalls['jjijj'] = wasmExports['gf'];\n dynCall_jjjf = dynCalls['jjjf'] = wasmExports['hf'];\n dynCall_jjjiiii = dynCalls['jjjiiii'] = wasmExports['jf'];\n dynCall_jjjii = dynCalls['jjjii'] = wasmExports['kf'];\n dynCall_jjjjjjj = dynCalls['jjjjjjj'] = wasmExports['lf'];\n dynCall_jjijjj = dynCalls['jjijjj'] = wasmExports['mf'];\n dynCall_jjijjjj = dynCalls['jjijjjj'] = wasmExports['nf'];\n dynCall_jjji = dynCalls['jjji'] = wasmExports['of'];\n dynCall_jjjjjiiiiiij = dynCalls['jjjjjiiiiiij'] = wasmExports['pf'];\n dynCall_vjiji = dynCalls['vjiji'] = wasmExports['qf'];\n dynCall_jijjjjjj = dynCalls['jijjjjjj'] = wasmExports['rf'];\n dynCall_vjjji = dynCalls['vjjji'] = wasmExports['sf'];\n dynCall_fjji = dynCalls['fjji'] = wasmExports['tf'];\n dynCall_jjjjjjjjj = dynCalls['jjjjjjjjj'] = wasmExports['uf'];\n dynCall_jjjjjjjjffi = dynCalls['jjjjjjjjffi'] = wasmExports['vf'];\n dynCall_ijjiiji = dynCalls['ijjiiji'] = wasmExports['wf'];\n dynCall_ijjiij = dynCalls['ijjiij'] = wasmExports['xf'];\n dynCall_jjjiiiiiiiiiijj = dynCalls['jjjiiiiiiiiiijj'] = wasmExports['yf'];\n dynCall_iii = dynCalls['iii'] = wasmExports['zf'];\n dynCall_jjjiiiiij = dynCalls['jjjiiiiij'] = wasmExports['Af'];\n dynCall_jjjiiij = dynCalls['jjjiiij'] = wasmExports['Bf'];\n dynCall_ijjji = dynCalls['ijjji'] = wasmExports['Cf'];\n dynCall_ijjjii = dynCalls['ijjjii'] = wasmExports['Df'];\n dynCall_iij = dynCalls['iij'] = wasmExports['Ef'];\n dynCall_ijjj = dynCalls['ijjj'] = wasmExports['Ff'];\n dynCall_ijjjji = dynCalls['ijjjji'] = wasmExports['Gf'];\n dynCall_jjjjjiiiffffff = dynCalls['jjjjjiiiffffff'] = wasmExports['Hf'];\n dynCall_jjjjiiiiiiii = dynCalls['jjjjiiiiiiii'] = wasmExports['If'];\n dynCall_vij = dynCalls['vij'] = wasmExports['Jf'];\n dynCall_vi = dynCalls['vi'] = wasmExports['Kf'];\n dynCall_iijj = dynCalls['iijj'] = wasmExports['Lf'];\n dynCall_jjjjiii = dynCalls['jjjjiii'] = wasmExports['Mf'];\n dynCall_ijjjjii = dynCalls['ijjjjii'] = wasmExports['Nf'];\n dynCall_jjjjii = dynCalls['jjjjii'] = wasmExports['Of'];\n dynCall_vjij = dynCalls['vjij'] = wasmExports['Pf'];\n dynCall_vjjijj = dynCalls['vjjijj'] = wasmExports['Qf'];\n dynCall_ijiji = dynCalls['ijiji'] = wasmExports['Rf'];\n dynCall_ijijii = dynCalls['ijijii'] = wasmExports['Sf'];\n dynCall_jjiijii = dynCalls['jjiijii'] = wasmExports['Tf'];\n dynCall_jjjjjjjjji = dynCalls['jjjjjjjjji'] = wasmExports['Uf'];\n dynCall_vjjjijjjji = dynCalls['vjjjijjjji'] = wasmExports['Vf'];\n dynCall_jjjjji = dynCalls['jjjjji'] = wasmExports['Wf'];\n dynCall_vjjjijjj = dynCalls['vjjjijjj'] = wasmExports['Xf'];\n dynCall_vjjjjij = dynCalls['vjjjjij'] = wasmExports['Yf'];\n dynCall_i = dynCalls['i'] = wasmExports['Zf'];\n dynCall_ijjjjjj = dynCalls['ijjjjjj'] = wasmExports['_f'];\n dynCall_jjjiiiiiiiiiiiiijj = dynCalls['jjjiiiiiiiiiiiiijj'] =\n wasmExports['$f'];\n dynCall_vjjjij = dynCalls['vjjjij'] = wasmExports['ag'];\n dynCall_jjjjijjjj = dynCalls['jjjjijjjj'] = wasmExports['bg'];\n dynCall_jjjjjii = dynCalls['jjjjjii'] = wasmExports['cg'];\n dynCall_vjjjjjjji = dynCalls['vjjjjjjji'] = wasmExports['dg'];\n dynCall_jjjjjjjjjjjjfi = dynCalls['jjjjjjjjjjjjfi'] = wasmExports['eg'];\n dynCall_jjjjjjjjjjiifiijjjjj = dynCalls['jjjjjjjjjjiifiijjjjj'] =\n wasmExports['fg'];\n dynCall_jjjjjjjjjjjjjiii = dynCalls['jjjjjjjjjjjjjiii'] = wasmExports['gg'];\n dynCall_jjjffff = dynCalls['jjjffff'] = wasmExports['hg'];\n dynCall_jjjjjjji = dynCalls['jjjjjjji'] = wasmExports['ig'];\n dynCall_jjjff = dynCalls['jjjff'] = wasmExports['jg'];\n dynCall_jjjjjijiiffffff = dynCalls['jjjjjijiiffffff'] = wasmExports['kg'];\n dynCall_jjjjiij = dynCalls['jjjjiij'] = wasmExports['lg'];\n dynCall_jjjjjjjjjjjjjjjj = dynCalls['jjjjjjjjjjjjjjjj'] = wasmExports['mg'];\n dynCall_vjjjjjjjji = dynCalls['vjjjjjjjji'] = wasmExports['ng'];\n dynCall_jjjjjjjjjjjjjjiifiijjjjjj = dynCalls['jjjjjjjjjjjjjjiifiijjjjjj'] =\n wasmExports['og'];\n dynCall_jjjjff = dynCalls['jjjjff'] = wasmExports['pg'];\n dynCall_ijiijjj = dynCalls['ijiijjj'] = wasmExports['qg'];\n dynCall_jjjjjjjjjjjjj = dynCalls['jjjjjjjjjjjjj'] = wasmExports['rg'];\n dynCall_vijjiiiijjj = dynCalls['vijjiiiijjj'] = wasmExports['sg'];\n dynCall_vjjij = dynCalls['vjjij'] = wasmExports['tg'];\n dynCall_djj = dynCalls['djj'] = wasmExports['ug'];\n dynCall_vjjjiij = dynCalls['vjjjiij'] = wasmExports['vg'];\n dynCall_vjjiiii = dynCalls['vjjiiii'] = wasmExports['wg'];\n dynCall_vjjiif = dynCalls['vjjiif'] = wasmExports['xg'];\n dynCall_ijiijj = dynCalls['ijiijj'] = wasmExports['yg'];\n dynCall_vjjjijj = dynCalls['vjjjijj'] = wasmExports['zg'];\n dynCall_vjjiii = dynCalls['vjjiii'] = wasmExports['Ag'];\n dynCall_vjjjiijj = dynCalls['vjjjiijj'] = wasmExports['Bg'];\n dynCall_jjjjiijj = dynCalls['jjjjiijj'] = wasmExports['Cg'];\n dynCall_jjjjjifi = dynCalls['jjjjjifi'] = wasmExports['Dg'];\n dynCall_jjjjjjjjfi = dynCalls['jjjjjjjjfi'] = wasmExports['Eg'];\n dynCall_jjjjjjjjjii = dynCalls['jjjjjjjjjii'] = wasmExports['Fg'];\n dynCall_jjjjiiiiii = dynCalls['jjjjiiiiii'] = wasmExports['Gg'];\n dynCall_jjjiiiiiff = dynCalls['jjjiiiiiff'] = wasmExports['Hg'];\n dynCall_vijjjjjji = dynCalls['vijjjjjji'] = wasmExports['Ig'];\n dynCall_vijjjj = dynCalls['vijjjj'] = wasmExports['Jg'];\n dynCall_vjijjj = dynCalls['vjijjj'] = wasmExports['Kg'];\n dynCall_vijjj = dynCalls['vijjj'] = wasmExports['Lg'];\n dynCall_ijjjjjjj = dynCalls['ijjjjjjj'] = wasmExports['Mg'];\n dynCall_viifffj = dynCalls['viifffj'] = wasmExports['Ng'];\n dynCall_vjjjiii = dynCalls['vjjjiii'] = wasmExports['Og'];\n dynCall_vjjjjjji = dynCalls['vjjjjjji'] = wasmExports['Pg'];\n dynCall_ijjjjjjji = dynCalls['ijjjjjjji'] = wasmExports['Qg'];\n dynCall_jjiij = dynCalls['jjiij'] = wasmExports['Rg'];\n dynCall_vjjjjjjj = dynCalls['vjjjjjjj'] = wasmExports['Sg'];\n dynCall_ijjjij = dynCalls['ijjjij'] = wasmExports['Tg'];\n dynCall_jjjd = dynCalls['jjjd'] = wasmExports['Ug'];\n dynCall_ijdiiii = dynCalls['ijdiiii'] = wasmExports['Vg'];\n dynCall_jjjjij = dynCalls['jjjjij'] = wasmExports['Wg'];\n dynCall_iiijjjijjjj = dynCalls['iiijjjijjjj'] = wasmExports['Xg'];\n dynCall_iijjjjiijjjjj = dynCalls['iijjjjiijjjjj'] = wasmExports['Yg'];\n dynCall_fjjj = dynCalls['fjjj'] = wasmExports['Zg'];\n dynCall_djjj = dynCalls['djjj'] = wasmExports['_g'];\n dynCall_ijjijijjjjjj = dynCalls['ijjijijjjjjj'] = wasmExports['$g'];\n dynCall_vijjjjjjjjj = dynCalls['vijjjjjjjjj'] = wasmExports['ah'];\n dynCall_viijjjjjjjj = dynCalls['viijjjjjjjj'] = wasmExports['bh'];\n dynCall_vjjjijjjijiijjji = dynCalls['vjjjijjjijiijjji'] = wasmExports['ch'];\n dynCall_ijii = dynCalls['ijii'] = wasmExports['dh'];\n dynCall_ijjjjjjjj = dynCalls['ijjjjjjjj'] = wasmExports['eh'];\n dynCall_jjjjid = dynCalls['jjjjid'] = wasmExports['fh'];\n dynCall_jjjjijj = dynCalls['jjjjijj'] = wasmExports['gh'];\n dynCall_jjjjjjjii = dynCalls['jjjjjjjii'] = wasmExports['hh'];\n dynCall_jjjjijii = dynCalls['jjjjijii'] = wasmExports['ih'];\n dynCall_jjjjijjj = dynCalls['jjjjijjj'] = wasmExports['jh'];\n dynCall_jjjijijj = dynCalls['jjjijijj'] = wasmExports['kh'];\n dynCall_jjjijij = dynCalls['jjjijij'] = wasmExports['lh'];\n dynCall_vjjf = dynCalls['vjjf'] = wasmExports['mh'];\n dynCall_vjjd = dynCalls['vjjd'] = wasmExports['nh'];\n dynCall_vjjjjii = dynCalls['vjjjjii'] = wasmExports['oh'];\n _asyncify_start_unwind = wasmExports['ph'];\n _asyncify_stop_unwind = wasmExports['qh'];\n _asyncify_start_rewind = wasmExports['rh'];\n _asyncify_stop_rewind = wasmExports['sh'];\n __indirect_function_table = wasmTable = wasmExports['fd'];\n}\nvar wasmImports = {\n J: ___cxa_begin_catch,\n $b: ___cxa_current_primary_exception,\n $: ___cxa_end_catch,\n b: ___cxa_find_matching_catch_2,\n s: ___cxa_find_matching_catch_3,\n ma: ___cxa_find_matching_catch_4,\n Wa: ___cxa_rethrow,\n _b: ___cxa_rethrow_primary_exception,\n Q: ___cxa_throw,\n qb: ___cxa_uncaught_exceptions,\n h: ___resumeException,\n tb: ___syscall_fcntl64,\n ic: ___syscall_ioctl,\n jc: ___syscall_openat,\n mc: __abort_js,\n cc: __mmap_js,\n dc: __munmap_js,\n ec: __tzset_js,\n lc: _clock_time_get,\n kc: _emscripten_date_now,\n bc: _emscripten_get_heap_max,\n sc: _emscripten_has_asyncify,\n ac: _emscripten_resize_heap,\n rc: _emwgpuAdapterRequestDevice,\n xc: _emwgpuBufferDestroy,\n wc: _emwgpuBufferGetConstMappedRange,\n vc: _emwgpuBufferMapAsync,\n uc: _emwgpuBufferUnmap,\n X: _emwgpuDelete,\n qc: _emwgpuDeviceCreateBuffer,\n pc: _emwgpuDeviceCreateShaderModule,\n cb: _emwgpuDeviceDestroy,\n oc: _emwgpuInstanceRequestAdapter,\n nc: _emwgpuQueueOnSubmittedWorkDone,\n tc: _emwgpuWaitAny,\n gc: _environ_get,\n hc: _environ_sizes_get,\n bb: _fd_close,\n rb: _fd_read,\n fc: _fd_seek,\n sb: _fd_write,\n gb: invoke_djj,\n nb: invoke_djjj,\n W: invoke_fjji,\n ob: invoke_fjjj,\n Ob: invoke_i,\n ib: invoke_ifj,\n Lb: invoke_ii,\n Vb: invoke_iij,\n Va: invoke_iijj,\n Mb: invoke_iijji,\n A: invoke_ij,\n p: invoke_iji,\n Na: invoke_ijiii,\n wb: invoke_ijiijj,\n fb: invoke_ijiijjj,\n Da: invoke_ijij,\n o: invoke_ijiji,\n ea: invoke_ijijii,\n Ea: invoke_ijijiii,\n Ma: invoke_ijijj,\n z: invoke_ijj,\n P: invoke_ijji,\n ab: invoke_ijjii,\n Fb: invoke_ijjiij,\n Gb: invoke_ijjiiji,\n Fa: invoke_ijjijiii,\n Qa: invoke_ijjijijjjjjj,\n V: invoke_ijjj,\n da: invoke_ijjji,\n Ia: invoke_ijjjii,\n Xb: invoke_ijjjiiiij,\n qa: invoke_ijjjij,\n $a: invoke_ijjjiji,\n ga: invoke_ijjjj,\n S: invoke_ijjjji,\n Y: invoke_ijjjjii,\n za: invoke_ijjjjj,\n bd: invoke_ijjjjjj,\n Bc: invoke_ijjjjjjj,\n zc: invoke_ijjjjjjji,\n M: invoke_j,\n kb: invoke_jf,\n Sb: invoke_jfff,\n Tb: invoke_jffji,\n Za: invoke_jfj,\n xa: invoke_ji,\n Qb: invoke_jiff,\n Rb: invoke_jifff,\n Pb: invoke_jiiffi,\n Ub: invoke_jiij,\n Ja: invoke_jij,\n Ib: invoke_jijjjjjj,\n d: invoke_jj,\n R: invoke_jji,\n lb: invoke_jjiffiijj,\n wa: invoke_jjiiijij,\n yc: invoke_jjiij,\n ja: invoke_jjij,\n sa: invoke_jjijj,\n pa: invoke_jjijjj,\n fa: invoke_jjijjjj,\n i: invoke_jjj,\n ub: invoke_jjjd,\n I: invoke_jjjf,\n $c: invoke_jjjff,\n ad: invoke_jjjffff,\n m: invoke_jjji,\n ya: invoke_jjjii,\n _: invoke_jjjiiii,\n Sa: invoke_jjjiiiiiff,\n Cb: invoke_jjjiiiiiiiiiiiiijj,\n Ba: invoke_jjjiiiiiiiiiijj,\n Ya: invoke_jjjiiiiij,\n Eb: invoke_jjjiiij,\n jb: invoke_jjjijii,\n Ca: invoke_jjjijj,\n f: invoke_jjjj,\n Yc: invoke_jjjjff,\n v: invoke_jjjji,\n ra: invoke_jjjjii,\n la: invoke_jjjjiii,\n Ha: invoke_jjjjiiiiii,\n Db: invoke_jjjjiiiiiiii,\n ia: invoke_jjjjiij,\n ha: invoke_jjjjiijj,\n pb: invoke_jjjjij,\n Ab: invoke_jjjjijjjj,\n u: invoke_jjjjj,\n q: invoke_jjjjji,\n eb: invoke_jjjjjifi,\n n: invoke_jjjjjii,\n y: invoke_jjjjjiiiffffff,\n Kb: invoke_jjjjjiiiiiij,\n oa: invoke_jjjjjijiiffffff,\n F: invoke_jjjjjj,\n ba: invoke_jjjjjji,\n Z: invoke_jjjjjjj,\n Aa: invoke_jjjjjjji,\n _a: invoke_jjjjjjjj,\n Hb: invoke_jjjjjjjjffi,\n Uc: invoke_jjjjjjjjfi,\n Nb: invoke_jjjjjjjjiiiijj,\n N: invoke_jjjjjjjjj,\n g: invoke_jjjjjjjjji,\n Tc: invoke_jjjjjjjjjii,\n U: invoke_jjjjjjjjjjiifiijjjjj,\n D: invoke_jjjjjjjjjjjjfi,\n Xc: invoke_jjjjjjjjjjjjj,\n C: invoke_jjjjjjjjjjjjjiii,\n Zc: invoke_jjjjjjjjjjjjjjiifiijjjjjj,\n hb: invoke_jjjjjjjjjjjjjjjj,\n c: invoke_v,\n Xa: invoke_vi,\n Pa: invoke_viijjjjjjjj,\n Ka: invoke_vij,\n r: invoke_vijj,\n zb: invoke_vijjiiiijjj,\n mb: invoke_vijjjjjjjjj,\n k: invoke_vj,\n x: invoke_vji,\n ta: invoke_vjii,\n La: invoke_vjiii,\n Wb: invoke_vjiiii,\n Ga: invoke_vjiiji,\n ka: invoke_vjij,\n Jb: invoke_vjiji,\n t: invoke_vjijj,\n vb: invoke_vjijjj,\n l: invoke_vjj,\n Yb: invoke_vjjd,\n dd: invoke_vjjf,\n G: invoke_vjji,\n ca: invoke_vjjii,\n Wc: invoke_vjjiif,\n Vc: invoke_vjjiii,\n yb: invoke_vjjiiii,\n E: invoke_vjjij,\n aa: invoke_vjjijj,\n j: invoke_vjjj,\n e: invoke_vjjji,\n ua: invoke_vjjjii,\n Ac: invoke_vjjjiii,\n va: invoke_vjjjiij,\n xb: invoke_vjjjiijj,\n Bb: invoke_vjjjij,\n Ta: invoke_vjjjijj,\n Ua: invoke_vjjjijjj,\n Oa: invoke_vjjjijjjijiijjji,\n K: invoke_vjjjijjjji,\n w: invoke_vjjjj,\n T: invoke_vjjjji,\n cd: invoke_vjjjjij,\n L: invoke_vjjjjj,\n B: invoke_vjjjjjj,\n Ra: invoke_vjjjjjji,\n na: invoke_vjjjjjjj,\n H: invoke_vjjjjjjji,\n _c: invoke_vjjjjjjjji,\n O: _llvm_eh_typeid_for,\n a: wasmMemory,\n Zb: _random_get,\n Qc: _wgpuAdapterGetFeatures,\n Rc: _wgpuAdapterGetInfo,\n Sc: _wgpuAdapterGetLimits,\n Pc: _wgpuAdapterHasFeature,\n Nc: _wgpuBufferGetSize,\n Gc: _wgpuCommandEncoderBeginComputePass,\n Lc: _wgpuCommandEncoderCopyBufferToBuffer,\n Kc: _wgpuCommandEncoderFinish,\n Dc: _wgpuComputePassEncoderDispatchWorkgroups,\n Cc: _wgpuComputePassEncoderEnd,\n Ec: _wgpuComputePassEncoderSetBindGroup,\n Fc: _wgpuComputePassEncoderSetPipeline,\n Ic: _wgpuComputePipelineGetBindGroupLayout,\n Hc: _wgpuDeviceCreateBindGroup,\n Mc: _wgpuDeviceCreateCommandEncoder,\n Oc: _wgpuDeviceCreateComputePipeline,\n Jc: _wgpuQueueSubmit,\n db: _wgpuQueueWriteBuffer,\n};\nfunction invoke_v(index) {\n var sp = stackSave();\n try {\n dynCall_v(Number(index));\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vjjj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjj(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_jjj(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jj(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_jj(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjj(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vjj(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ij(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ij(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijijj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_ijijj(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vj(index, a1) {\n var sp = stackSave();\n try {\n dynCall_vj(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ji(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ji(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vji(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vji(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jjjj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jji(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_jji(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjiii(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iji(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_iji(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjjjj(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jjjji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vjii(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjjii(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjjii(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjiiji(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjiiji(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijj(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_ijj(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_j(index) {\n var sp = stackSave();\n try {\n return dynCall_j(Number(index));\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ijjjjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijjjjj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjiiiij(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_ijjjiiiij(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_ijjii(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_ijiii(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjiiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjiiii(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjji(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjjji(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjji(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjji(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jjjjj(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ijjjj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_ijjjj(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vij(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vij(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iij(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_iij(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjijj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjijj(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjijiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_ijjijiii(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjji(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vjji(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijijiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_ijijiii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjiji(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_ijjjiji(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jiij(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jiij(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jfj(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_jfj(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jffji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jffji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jfff(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jfff(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jifff(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jifff(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjiffiijj(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_jjiffiijj(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jf(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_jf(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jiff(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jiff(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jiiffi(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jiiffi(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjji(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jjji(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vijj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vijj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_i(index) {\n var sp = stackSave();\n try {\n return dynCall_i(Number(index));\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjjiiiijj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjiiiijj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_iijji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iijji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjjjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_vjjjjjj(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjjjj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijij(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_ijij(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jij(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_jij(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ii(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ii(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjiiijij(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_jjiiijij(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ijji(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_ijji(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjijii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjijii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjij(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jjij(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjijj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjjijj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jjjii(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjijjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjijjj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjijjjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjijjjj(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjijj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jjijj(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjf(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jjjf(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjiiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjiiii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjj(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjiiiiiij(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjiiiiiij(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjiji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjiji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jijjjjjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_jijjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjjji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_fjji(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_fjji(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjjj(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjjjffi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjffi(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ijjiiji(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_ijjiiji(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjiij(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijjiij(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjiiiiiiiiiijj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjiiiiiiiiiijj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjiiiiij(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_jjjiiiiij(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjiiij(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjiiij(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ijjji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_ijjji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijjjii(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_ijjj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjji(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijjjji(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ifj(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_ifj(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vi(index, a1) {\n var sp = stackSave();\n try {\n dynCall_vi(Number(index), a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iijj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iijj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjiiiffffff(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjiiiiiiii(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_ijjjjii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_ijjjjii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjij(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vjij(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjjiii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjjjii(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjf(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vjjf(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjijj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjijj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijiji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_ijiji(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijijii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijijii(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjji(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjjijjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n dynCall_vjjjijjjji(Number(index), a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjji(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjjjji(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjjijjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_vjjjijjj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjjij(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_vjjjjij(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjjjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_ijjjjjj(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjiiiiiiiiiiiiijj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjiiiiiiiiiiiiijj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjjij(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjjij(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjijjjj(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_jjjjijjjj(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjjjjjji(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n dynCall_vjjjjjjji(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjjjjjjfi(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjjjjfi(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjjjjjiifiijjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjjiifiijjjjj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjjjjjjjjiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjjjjjiii(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjffff(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjffff(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjji(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjji(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjff(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jjjff(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjijiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjijiiffffff(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjiij(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_jjjjiij(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjjjjjjjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjjjjjjjj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjjjjjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n dynCall_vjjjjjjjji(Number(index), a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjjjjjjjjiifiijjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjjjjjjiifiijjjjjj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjff(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjjjff(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_djj(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_djj(Number(index), a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijiijjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_ijiijjj(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjjjjjjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12\n) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjjjjj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vijjiiiijjj(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n dynCall_vijjiiiijjj(Number(index), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjij(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_vjjij(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjiij(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_vjjjiij(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjiiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_vjjiiii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjiif(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjiif(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjjiii(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjiijj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_vjjjiijj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijiijj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijiijj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjijj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_vjjjijj(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjjiijj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_jjjjiijj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjifi(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjifi(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjjjfi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjfi(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjjjjjjii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n return dynCall_jjjjjjjjjii(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_jjjjiiiiii(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjiiiiiff(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_jjjiiiiiff(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjijjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_vjijjj(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjjjjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_ijjjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_vjjjiii(Number(index), a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjjjji(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_vjjjjjji(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjjjjji(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_ijjjjjjji(Number(index), a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjiij(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jjiij(Number(index), a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_vjjjjjjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_vjjjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjjij(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_ijjjij(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jjjd(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jjjd(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_jjjjij(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jjjjij(Number(index), a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_fjjj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_fjjj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_djjj(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_djjj(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ijjijijjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n) {\n var sp = stackSave();\n try {\n return dynCall_ijjijijjjjjj(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vijjjjjjjjj(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n dynCall_vijjjjjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viijjjjjjjj(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n dynCall_viijjjjjjjj(Number(index), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjjijjjijiijjji(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n dynCall_vjjjijjjijiijjji(\n Number(index),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vjjd(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_vjjd(Number(index), a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction applySignatureConversions(wasmExports) {\n wasmExports = Object.assign({}, wasmExports);\n var makeWrapper___PP = (f) => (a0, a1, a2) =>\n f(a0, BigInt(a1 ? a1 : 0), BigInt(a2 ? a2 : 0));\n var makeWrapper_pp = (f) => (a0) => Number(f(BigInt(a0)));\n var makeWrapper__p = (f) => (a0) => f(BigInt(a0));\n var makeWrapper_ppp = (f) => (a0, a1) => Number(f(BigInt(a0), BigInt(a1)));\n var makeWrapper_p = (f) => () => Number(f());\n var makeWrapper__ppp = (f) => (a0, a1, a2) =>\n f(BigInt(a0), BigInt(a1), BigInt(a2));\n var makeWrapper__p_ = (f) => (a0, a1) => f(BigInt(a0), a1);\n var makeWrapper__p__ = (f) => (a0, a1, a2) => f(BigInt(a0), a1, a2);\n var makeWrapper__p___ = (f) => (a0, a1, a2, a3) => f(BigInt(a0), a1, a2, a3);\n var makeWrapper__p_____ = (f) => (a0, a1, a2, a3, a4, a5) =>\n f(BigInt(a0), a1, a2, a3, a4, a5);\n var makeWrapper__p____ = (f) => (a0, a1, a2, a3, a4) =>\n f(BigInt(a0), a1, a2, a3, a4);\n var makeWrapper__p______ = (f) => (a0, a1, a2, a3, a4, a5, a6) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6);\n var makeWrapper__p________ = (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7, a8);\n var makeWrapper__p_______ = (f) => (a0, a1, a2, a3, a4, a5, a6, a7) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7);\n var makeWrapper__p_____________ =\n (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);\n var makeWrapper__p___________ =\n (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\n var makeWrapper__p__________ =\n (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n var makeWrapper__p______________ =\n (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) =>\n f(\n BigInt(a0),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n var makeWrapper__p_________ =\n (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7, a8, a9);\n var makeWrapper__p_________________ =\n (f) =>\n (\n a0,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n ) =>\n f(\n BigInt(a0),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n );\n var makeWrapper__p___________________ =\n (f) =>\n (\n a0,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n ) =>\n f(\n BigInt(a0),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n );\n var makeWrapper__p_______________ =\n (f) =>\n (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) =>\n f(\n BigInt(a0),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n var makeWrapper__p________________________ =\n (f) =>\n (\n a0,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n ) =>\n f(\n BigInt(a0),\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n );\n var makeWrapper__p____________ =\n (f) => (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) =>\n f(BigInt(a0), a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);\n wasmExports['ld'] = makeWrapper___PP(wasmExports['ld']);\n wasmExports['md'] = makeWrapper_pp(wasmExports['md']);\n wasmExports['nd'] = makeWrapper__p(wasmExports['nd']);\n wasmExports['Qd'] = makeWrapper_ppp(wasmExports['Qd']);\n wasmExports['Rd'] = makeWrapper_ppp(wasmExports['Rd']);\n wasmExports['Sd'] = makeWrapper__p(wasmExports['Sd']);\n wasmExports['Ud'] = makeWrapper__p(wasmExports['Ud']);\n wasmExports['Vd'] = makeWrapper_pp(wasmExports['Vd']);\n wasmExports['Wd'] = makeWrapper_p(wasmExports['Wd']);\n wasmExports['Xd'] = makeWrapper__p(wasmExports['Xd']);\n wasmExports['Yd'] = makeWrapper__p(wasmExports['Yd']);\n wasmExports['Zd'] = makeWrapper__ppp(wasmExports['Zd']);\n wasmExports['_d'] = makeWrapper_pp(wasmExports['_d']);\n wasmExports['$d'] = makeWrapper__p(wasmExports['$d']);\n wasmExports['ae'] = makeWrapper__p_(wasmExports['ae']);\n wasmExports['be'] = makeWrapper__p__(wasmExports['be']);\n wasmExports['ce'] = makeWrapper__p___(wasmExports['ce']);\n wasmExports['de'] = makeWrapper__p__(wasmExports['de']);\n wasmExports['ee'] = makeWrapper__p_____(wasmExports['ee']);\n wasmExports['fe'] = makeWrapper__p_(wasmExports['fe']);\n wasmExports['ge'] = makeWrapper__p____(wasmExports['ge']);\n wasmExports['he'] = makeWrapper__p_(wasmExports['he']);\n wasmExports['ie'] = makeWrapper__p_(wasmExports['ie']);\n wasmExports['je'] = makeWrapper__p__(wasmExports['je']);\n wasmExports['ke'] = makeWrapper__p___(wasmExports['ke']);\n wasmExports['le'] = makeWrapper__p__(wasmExports['le']);\n wasmExports['me'] = makeWrapper__p____(wasmExports['me']);\n wasmExports['ne'] = makeWrapper__p__(wasmExports['ne']);\n wasmExports['oe'] = makeWrapper__p____(wasmExports['oe']);\n wasmExports['pe'] = makeWrapper__p____(wasmExports['pe']);\n wasmExports['qe'] = makeWrapper__p______(wasmExports['qe']);\n wasmExports['re'] = makeWrapper__p___(wasmExports['re']);\n wasmExports['se'] = makeWrapper__p____(wasmExports['se']);\n wasmExports['te'] = makeWrapper__p____(wasmExports['te']);\n wasmExports['ue'] = makeWrapper__p_____(wasmExports['ue']);\n wasmExports['ve'] = makeWrapper__p_____(wasmExports['ve']);\n wasmExports['we'] = makeWrapper__p__(wasmExports['we']);\n wasmExports['xe'] = makeWrapper__p(wasmExports['xe']);\n wasmExports['ye'] = makeWrapper__p_____(wasmExports['ye']);\n wasmExports['ze'] = makeWrapper__p________(wasmExports['ze']);\n wasmExports['Ae'] = makeWrapper__p____(wasmExports['Ae']);\n wasmExports['Be'] = makeWrapper__p____(wasmExports['Be']);\n wasmExports['Ce'] = makeWrapper__p_____(wasmExports['Ce']);\n wasmExports['De'] = makeWrapper__p_____(wasmExports['De']);\n wasmExports['Ee'] = makeWrapper__p___(wasmExports['Ee']);\n wasmExports['Fe'] = makeWrapper__p___(wasmExports['Fe']);\n wasmExports['Ge'] = makeWrapper__p______(wasmExports['Ge']);\n wasmExports['He'] = makeWrapper__p____(wasmExports['He']);\n wasmExports['Ie'] = makeWrapper__p_______(wasmExports['Ie']);\n wasmExports['Je'] = makeWrapper__p______(wasmExports['Je']);\n wasmExports['Ke'] = makeWrapper__p____(wasmExports['Ke']);\n wasmExports['Le'] = makeWrapper__p_______(wasmExports['Le']);\n wasmExports['Me'] = makeWrapper__p___(wasmExports['Me']);\n wasmExports['Ne'] = makeWrapper__p__(wasmExports['Ne']);\n wasmExports['Oe'] = makeWrapper__p____(wasmExports['Oe']);\n wasmExports['Pe'] = makeWrapper__p___(wasmExports['Pe']);\n wasmExports['Qe'] = makeWrapper__p____(wasmExports['Qe']);\n wasmExports['Re'] = makeWrapper__p________(wasmExports['Re']);\n wasmExports['Se'] = makeWrapper__p_(wasmExports['Se']);\n wasmExports['Te'] = makeWrapper__p___(wasmExports['Te']);\n wasmExports['Ue'] = makeWrapper__p_____(wasmExports['Ue']);\n wasmExports['Ve'] = makeWrapper__p__(wasmExports['Ve']);\n wasmExports['We'] = makeWrapper__p_____________(wasmExports['We']);\n wasmExports['Xe'] = makeWrapper__p____(wasmExports['Xe']);\n wasmExports['Ye'] = makeWrapper__p______(wasmExports['Ye']);\n wasmExports['Ze'] = makeWrapper__p_____(wasmExports['Ze']);\n wasmExports['_e'] = makeWrapper__p___(wasmExports['_e']);\n wasmExports['$e'] = makeWrapper__p__(wasmExports['$e']);\n wasmExports['af'] = makeWrapper__p_(wasmExports['af']);\n wasmExports['bf'] = makeWrapper__p_______(wasmExports['bf']);\n wasmExports['cf'] = makeWrapper__p___(wasmExports['cf']);\n wasmExports['df'] = makeWrapper__p______(wasmExports['df']);\n wasmExports['ef'] = makeWrapper__p_____(wasmExports['ef']);\n wasmExports['ff'] = makeWrapper__p___(wasmExports['ff']);\n wasmExports['gf'] = makeWrapper__p____(wasmExports['gf']);\n wasmExports['hf'] = makeWrapper__p___(wasmExports['hf']);\n wasmExports['jf'] = makeWrapper__p______(wasmExports['jf']);\n wasmExports['kf'] = makeWrapper__p____(wasmExports['kf']);\n wasmExports['lf'] = makeWrapper__p______(wasmExports['lf']);\n wasmExports['mf'] = makeWrapper__p_____(wasmExports['mf']);\n wasmExports['nf'] = makeWrapper__p______(wasmExports['nf']);\n wasmExports['of'] = makeWrapper__p___(wasmExports['of']);\n wasmExports['pf'] = makeWrapper__p___________(wasmExports['pf']);\n wasmExports['qf'] = makeWrapper__p____(wasmExports['qf']);\n wasmExports['rf'] = makeWrapper__p_______(wasmExports['rf']);\n wasmExports['sf'] = makeWrapper__p____(wasmExports['sf']);\n wasmExports['tf'] = makeWrapper__p___(wasmExports['tf']);\n wasmExports['uf'] = makeWrapper__p________(wasmExports['uf']);\n wasmExports['vf'] = makeWrapper__p__________(wasmExports['vf']);\n wasmExports['wf'] = makeWrapper__p______(wasmExports['wf']);\n wasmExports['xf'] = makeWrapper__p_____(wasmExports['xf']);\n wasmExports['yf'] = makeWrapper__p______________(wasmExports['yf']);\n wasmExports['zf'] = makeWrapper__p__(wasmExports['zf']);\n wasmExports['Af'] = makeWrapper__p________(wasmExports['Af']);\n wasmExports['Bf'] = makeWrapper__p______(wasmExports['Bf']);\n wasmExports['Cf'] = makeWrapper__p____(wasmExports['Cf']);\n wasmExports['Df'] = makeWrapper__p_____(wasmExports['Df']);\n wasmExports['Ef'] = makeWrapper__p__(wasmExports['Ef']);\n wasmExports['Ff'] = makeWrapper__p___(wasmExports['Ff']);\n wasmExports['Gf'] = makeWrapper__p_____(wasmExports['Gf']);\n wasmExports['Hf'] = makeWrapper__p_____________(wasmExports['Hf']);\n wasmExports['If'] = makeWrapper__p___________(wasmExports['If']);\n wasmExports['Jf'] = makeWrapper__p__(wasmExports['Jf']);\n wasmExports['Kf'] = makeWrapper__p_(wasmExports['Kf']);\n wasmExports['Lf'] = makeWrapper__p___(wasmExports['Lf']);\n wasmExports['Mf'] = makeWrapper__p______(wasmExports['Mf']);\n wasmExports['Nf'] = makeWrapper__p______(wasmExports['Nf']);\n wasmExports['Of'] = makeWrapper__p_____(wasmExports['Of']);\n wasmExports['Pf'] = makeWrapper__p___(wasmExports['Pf']);\n wasmExports['Qf'] = makeWrapper__p_____(wasmExports['Qf']);\n wasmExports['Rf'] = makeWrapper__p____(wasmExports['Rf']);\n wasmExports['Sf'] = makeWrapper__p_____(wasmExports['Sf']);\n wasmExports['Tf'] = makeWrapper__p______(wasmExports['Tf']);\n wasmExports['Uf'] = makeWrapper__p_________(wasmExports['Uf']);\n wasmExports['Vf'] = makeWrapper__p_________(wasmExports['Vf']);\n wasmExports['Wf'] = makeWrapper__p_____(wasmExports['Wf']);\n wasmExports['Xf'] = makeWrapper__p_______(wasmExports['Xf']);\n wasmExports['Yf'] = makeWrapper__p______(wasmExports['Yf']);\n wasmExports['Zf'] = makeWrapper__p(wasmExports['Zf']);\n wasmExports['_f'] = makeWrapper__p______(wasmExports['_f']);\n wasmExports['$f'] = makeWrapper__p_________________(wasmExports['$f']);\n wasmExports['ag'] = makeWrapper__p_____(wasmExports['ag']);\n wasmExports['bg'] = makeWrapper__p________(wasmExports['bg']);\n wasmExports['cg'] = makeWrapper__p______(wasmExports['cg']);\n wasmExports['dg'] = makeWrapper__p________(wasmExports['dg']);\n wasmExports['eg'] = makeWrapper__p_____________(wasmExports['eg']);\n wasmExports['fg'] = makeWrapper__p___________________(wasmExports['fg']);\n wasmExports['gg'] = makeWrapper__p_______________(wasmExports['gg']);\n wasmExports['hg'] = makeWrapper__p______(wasmExports['hg']);\n wasmExports['ig'] = makeWrapper__p_______(wasmExports['ig']);\n wasmExports['jg'] = makeWrapper__p____(wasmExports['jg']);\n wasmExports['kg'] = makeWrapper__p______________(wasmExports['kg']);\n wasmExports['lg'] = makeWrapper__p______(wasmExports['lg']);\n wasmExports['mg'] = makeWrapper__p_______________(wasmExports['mg']);\n wasmExports['ng'] = makeWrapper__p_________(wasmExports['ng']);\n wasmExports['og'] = makeWrapper__p________________________(wasmExports['og']);\n wasmExports['pg'] = makeWrapper__p_____(wasmExports['pg']);\n wasmExports['qg'] = makeWrapper__p______(wasmExports['qg']);\n wasmExports['rg'] = makeWrapper__p____________(wasmExports['rg']);\n wasmExports['sg'] = makeWrapper__p__________(wasmExports['sg']);\n wasmExports['tg'] = makeWrapper__p____(wasmExports['tg']);\n wasmExports['ug'] = makeWrapper__p__(wasmExports['ug']);\n wasmExports['vg'] = makeWrapper__p______(wasmExports['vg']);\n wasmExports['wg'] = makeWrapper__p______(wasmExports['wg']);\n wasmExports['xg'] = makeWrapper__p_____(wasmExports['xg']);\n wasmExports['yg'] = makeWrapper__p_____(wasmExports['yg']);\n wasmExports['zg'] = makeWrapper__p______(wasmExports['zg']);\n wasmExports['Ag'] = makeWrapper__p_____(wasmExports['Ag']);\n wasmExports['Bg'] = makeWrapper__p_______(wasmExports['Bg']);\n wasmExports['Cg'] = makeWrapper__p_______(wasmExports['Cg']);\n wasmExports['Dg'] = makeWrapper__p_______(wasmExports['Dg']);\n wasmExports['Eg'] = makeWrapper__p_________(wasmExports['Eg']);\n wasmExports['Fg'] = makeWrapper__p__________(wasmExports['Fg']);\n wasmExports['Gg'] = makeWrapper__p_________(wasmExports['Gg']);\n wasmExports['Hg'] = makeWrapper__p_________(wasmExports['Hg']);\n wasmExports['Ig'] = makeWrapper__p________(wasmExports['Ig']);\n wasmExports['Jg'] = makeWrapper__p_____(wasmExports['Jg']);\n wasmExports['Kg'] = makeWrapper__p_____(wasmExports['Kg']);\n wasmExports['Lg'] = makeWrapper__p____(wasmExports['Lg']);\n wasmExports['Mg'] = makeWrapper__p_______(wasmExports['Mg']);\n wasmExports['Ng'] = makeWrapper__p______(wasmExports['Ng']);\n wasmExports['Og'] = makeWrapper__p______(wasmExports['Og']);\n wasmExports['Pg'] = makeWrapper__p_______(wasmExports['Pg']);\n wasmExports['Qg'] = makeWrapper__p________(wasmExports['Qg']);\n wasmExports['Rg'] = makeWrapper__p____(wasmExports['Rg']);\n wasmExports['Sg'] = makeWrapper__p_______(wasmExports['Sg']);\n wasmExports['Tg'] = makeWrapper__p_____(wasmExports['Tg']);\n wasmExports['Ug'] = makeWrapper__p___(wasmExports['Ug']);\n wasmExports['Vg'] = makeWrapper__p______(wasmExports['Vg']);\n wasmExports['Wg'] = makeWrapper__p_____(wasmExports['Wg']);\n wasmExports['Xg'] = makeWrapper__p__________(wasmExports['Xg']);\n wasmExports['Yg'] = makeWrapper__p____________(wasmExports['Yg']);\n wasmExports['Zg'] = makeWrapper__p___(wasmExports['Zg']);\n wasmExports['_g'] = makeWrapper__p___(wasmExports['_g']);\n wasmExports['$g'] = makeWrapper__p___________(wasmExports['$g']);\n wasmExports['ah'] = makeWrapper__p__________(wasmExports['ah']);\n wasmExports['bh'] = makeWrapper__p__________(wasmExports['bh']);\n wasmExports['ch'] = makeWrapper__p_______________(wasmExports['ch']);\n wasmExports['dh'] = makeWrapper__p___(wasmExports['dh']);\n wasmExports['eh'] = makeWrapper__p________(wasmExports['eh']);\n wasmExports['fh'] = makeWrapper__p_____(wasmExports['fh']);\n wasmExports['gh'] = makeWrapper__p______(wasmExports['gh']);\n wasmExports['hh'] = makeWrapper__p________(wasmExports['hh']);\n wasmExports['ih'] = makeWrapper__p_______(wasmExports['ih']);\n wasmExports['jh'] = makeWrapper__p_______(wasmExports['jh']);\n wasmExports['kh'] = makeWrapper__p_______(wasmExports['kh']);\n wasmExports['lh'] = makeWrapper__p______(wasmExports['lh']);\n wasmExports['mh'] = makeWrapper__p___(wasmExports['mh']);\n wasmExports['nh'] = makeWrapper__p___(wasmExports['nh']);\n wasmExports['oh'] = makeWrapper__p______(wasmExports['oh']);\n wasmExports['ph'] = makeWrapper__p(wasmExports['ph']);\n wasmExports['rh'] = makeWrapper__p(wasmExports['rh']);\n return wasmExports;\n}\nfunction callMain() {\n var entryFunction = _main;\n var argc = 0;\n var argv = 0;\n try {\n var ret = entryFunction(argc, BigInt(argv));\n exitJS(ret, true);\n return ret;\n } catch (e) {\n return handleException(e);\n }\n}\nfunction run() {\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n preRun();\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n function doRun() {\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n preMain();\n Module['onRuntimeInitialized']?.();\n var noInitialRun = Module['noInitialRun'] || false;\n if (!noInitialRun) callMain();\n postRun();\n }\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(() => {\n setTimeout(() => Module['setStatus'](''), 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n}\nvar wasmExports;\ncreateWasm();\nrun();\n"; export declare const WLLAMA_ASYNCIFY_WEBGPU_MEM32_SINGLE_THREAD_CODE = "var Module = typeof Module != 'undefined' ? Module : {};\nvar ENVIRONMENT_IS_WEB = !!globalThis.window;\nvar ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope;\nvar ENVIRONMENT_IS_NODE =\n globalThis.process?.versions?.node && globalThis.process?.type != 'renderer';\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = (status, toThrow) => {\n throw toThrow;\n};\nvar _scriptName = globalThis.document?.currentScript?.src;\nif (typeof __filename != 'undefined') {\n _scriptName = __filename;\n} else if (ENVIRONMENT_IS_WORKER) {\n _scriptName = self.location.href;\n}\nvar scriptDirectory = '';\nfunction locateFile(path) {\n if (Module['locateFile']) {\n return Module['locateFile'](path, scriptDirectory);\n }\n return scriptDirectory + path;\n}\nvar readAsync, readBinary;\nif (ENVIRONMENT_IS_NODE) {\n var fs = require('fs');\n scriptDirectory = __dirname + '/';\n readBinary = (filename) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename);\n return ret;\n };\n readAsync = async (filename, binary = true) => {\n filename = isFileURI(filename) ? new URL(filename) : filename;\n var ret = fs.readFileSync(filename, binary ? undefined : 'utf8');\n return ret;\n };\n if (process.argv.length > 1) {\n thisProgram = process.argv[1].replace(/\\\\/g, '/');\n }\n arguments_ = process.argv.slice(2);\n if (typeof module != 'undefined') {\n module['exports'] = Module;\n }\n quit_ = (status, toThrow) => {\n process.exitCode = status;\n throw toThrow;\n };\n} else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n try {\n scriptDirectory = new URL('.', _scriptName).href;\n } catch {}\n {\n if (ENVIRONMENT_IS_WORKER) {\n readBinary = (url) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n xhr.responseType = 'arraybuffer';\n xhr.send(null);\n return new Uint8Array(xhr.response);\n };\n }\n readAsync = async (url) => {\n if (isFileURI(url)) {\n return new Promise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onload = () => {\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) {\n resolve(xhr.response);\n return;\n }\n reject(xhr.status);\n };\n xhr.onerror = reject;\n xhr.send(null);\n });\n }\n var response = await fetch(url, { credentials: 'same-origin' });\n if (response.ok) {\n return response.arrayBuffer();\n }\n throw new Error(response.status + ' : ' + response.url);\n };\n }\n} else {\n}\nvar out = console.log.bind(console);\nvar err = console.error.bind(console);\nvar wasmBinary;\nvar ABORT = false;\nvar EXITSTATUS;\nfunction assert(condition, text) {\n if (!condition) {\n abort(text);\n }\n}\nvar isFileURI = (filename) => filename.startsWith('file://');\nvar HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;\nvar HEAP64, HEAPU64;\nvar runtimeInitialized = false;\nfunction updateMemoryViews() {\n var b = wasmMemory.buffer;\n HEAP8 = new Int8Array(b);\n HEAP16 = new Int16Array(b);\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);\n HEAPU16 = new Uint16Array(b);\n HEAP32 = new Int32Array(b);\n HEAPU32 = new Uint32Array(b);\n HEAPF32 = new Float32Array(b);\n HEAPF64 = new Float64Array(b);\n HEAP64 = new BigInt64Array(b);\n HEAPU64 = new BigUint64Array(b);\n}\nfunction initMemory() {\n if (Module['wasmMemory']) {\n wasmMemory = Module['wasmMemory'];\n } else {\n var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 134217728;\n wasmMemory = new WebAssembly.Memory({\n initial: INITIAL_MEMORY / 65536,\n maximum: 65536,\n });\n }\n updateMemoryViews();\n}\nfunction preRun() {\n if (Module['preRun']) {\n if (typeof Module['preRun'] == 'function')\n Module['preRun'] = [Module['preRun']];\n while (Module['preRun'].length) {\n addOnPreRun(Module['preRun'].shift());\n }\n }\n callRuntimeCallbacks(onPreRuns);\n}\nfunction initRuntime() {\n runtimeInitialized = true;\n if (!Module['noFSInit'] && !FS.initialized) FS.init();\n TTY.init();\n wasmExports['Mb']();\n FS.ignorePermissions = false;\n}\nfunction preMain() {}\nfunction postRun() {\n if (Module['postRun']) {\n if (typeof Module['postRun'] == 'function')\n Module['postRun'] = [Module['postRun']];\n while (Module['postRun'].length) {\n addOnPostRun(Module['postRun'].shift());\n }\n }\n callRuntimeCallbacks(onPostRuns);\n}\nfunction abort(what) {\n Module['onAbort']?.(what);\n what = 'Aborted(' + what + ')';\n err(what);\n ABORT = true;\n what += '. Build with -sASSERTIONS for more info.';\n var e = new WebAssembly.RuntimeError(what);\n throw e;\n}\nvar wasmBinaryFile;\nfunction findWasmBinary() {\n return locateFile('wllama.wasm');\n}\nfunction getBinarySync(file) {\n if (file == wasmBinaryFile && wasmBinary) {\n return new Uint8Array(wasmBinary);\n }\n if (readBinary) {\n return readBinary(file);\n }\n throw 'both async and sync fetching of the wasm failed';\n}\nasync function getWasmBinary(binaryFile) {\n if (!wasmBinary) {\n try {\n var response = await readAsync(binaryFile);\n return new Uint8Array(response);\n } catch {}\n }\n return getBinarySync(binaryFile);\n}\nasync function instantiateArrayBuffer(binaryFile, imports) {\n try {\n var binary = await getWasmBinary(binaryFile);\n var instance = await WebAssembly.instantiate(binary, imports);\n return instance;\n } catch (reason) {\n err(`failed to asynchronously prepare wasm: ${reason}`);\n abort(reason);\n }\n}\nasync function instantiateAsync(binary, binaryFile, imports) {\n if (!binary && !isFileURI(binaryFile) && !ENVIRONMENT_IS_NODE) {\n try {\n var response = fetch(binaryFile, { credentials: 'same-origin' });\n var instantiationResult = await WebAssembly.instantiateStreaming(\n response,\n imports\n );\n return instantiationResult;\n } catch (reason) {\n err(`wasm streaming compile failed: ${reason}`);\n err('falling back to ArrayBuffer instantiation');\n }\n }\n return instantiateArrayBuffer(binaryFile, imports);\n}\nfunction getWasmImports() {\n var imports = { a: wasmImports };\n return imports;\n}\nasync function createWasm() {\n function receiveInstance(instance, module) {\n wasmExports = instance.exports;\n wasmExports = Asyncify.instrumentWasmExports(wasmExports);\n wasmExports = applySignatureConversions(wasmExports);\n assignWasmExports(wasmExports);\n removeRunDependency('wasm-instantiate');\n return wasmExports;\n }\n addRunDependency('wasm-instantiate');\n function receiveInstantiationResult(result) {\n return receiveInstance(result['instance']);\n }\n var info = getWasmImports();\n if (Module['instantiateWasm']) {\n return new Promise((resolve, reject) => {\n Module['instantiateWasm'](info, (inst, mod) => {\n resolve(receiveInstance(inst, mod));\n });\n });\n }\n wasmBinaryFile ??= findWasmBinary();\n var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info);\n var exports = receiveInstantiationResult(result);\n return exports;\n}\nclass ExitStatus {\n name = 'ExitStatus';\n constructor(status) {\n this.message = `Program terminated with exit(${status})`;\n this.status = status;\n }\n}\nvar callRuntimeCallbacks = (callbacks) => {\n while (callbacks.length > 0) {\n callbacks.shift()(Module);\n }\n};\nvar onPostRuns = [];\nvar addOnPostRun = (cb) => onPostRuns.push(cb);\nvar onPreRuns = [];\nvar addOnPreRun = (cb) => onPreRuns.push(cb);\nvar runDependencies = 0;\nvar dependenciesFulfilled = null;\nvar removeRunDependency = (id) => {\n runDependencies--;\n Module['monitorRunDependencies']?.(runDependencies);\n if (runDependencies == 0) {\n if (dependenciesFulfilled) {\n var callback = dependenciesFulfilled;\n dependenciesFulfilled = null;\n callback();\n }\n }\n};\nvar addRunDependency = (id) => {\n runDependencies++;\n Module['monitorRunDependencies']?.(runDependencies);\n};\nvar dynCalls = {};\nvar noExitRuntime = true;\nvar stackRestore = (val) => __emscripten_stack_restore(val);\nvar stackSave = () => _emscripten_stack_get_current();\nvar wasmMemory;\nvar exceptionCaught = [];\nvar uncaughtExceptionCount = 0;\nvar INT53_MAX = 9007199254740992;\nvar INT53_MIN = -9007199254740992;\nvar bigintToI53Checked = (num) =>\n num < INT53_MIN || num > INT53_MAX ? NaN : Number(num);\nfunction ___cxa_begin_catch(ptr) {\n ptr >>>= 0;\n var info = new ExceptionInfo(ptr);\n if (!info.get_caught()) {\n info.set_caught(true);\n uncaughtExceptionCount--;\n }\n info.set_rethrown(false);\n exceptionCaught.push(info);\n ___cxa_increment_exception_refcount(ptr);\n return ___cxa_get_exception_ptr(ptr);\n}\nfunction ___cxa_current_primary_exception() {\n if (!exceptionCaught.length) {\n return 0;\n }\n var info = exceptionCaught[exceptionCaught.length - 1];\n ___cxa_increment_exception_refcount(info.excPtr);\n return info.excPtr;\n}\nvar exceptionLast = 0;\nvar ___cxa_end_catch = () => {\n _setThrew(0, 0);\n var info = exceptionCaught.pop();\n ___cxa_decrement_exception_refcount(info.excPtr);\n exceptionLast = 0;\n};\nclass ExceptionInfo {\n constructor(excPtr) {\n this.excPtr = excPtr;\n this.ptr = excPtr - 24;\n }\n set_type(type) {\n HEAPU32[((this.ptr + 4) >>> 2) >>> 0] = type;\n }\n get_type() {\n return HEAPU32[((this.ptr + 4) >>> 2) >>> 0];\n }\n set_destructor(destructor) {\n HEAPU32[((this.ptr + 8) >>> 2) >>> 0] = destructor;\n }\n get_destructor() {\n return HEAPU32[((this.ptr + 8) >>> 2) >>> 0];\n }\n set_caught(caught) {\n caught = caught ? 1 : 0;\n HEAP8[(this.ptr + 12) >>> 0] = caught;\n }\n get_caught() {\n return HEAP8[(this.ptr + 12) >>> 0] != 0;\n }\n set_rethrown(rethrown) {\n rethrown = rethrown ? 1 : 0;\n HEAP8[(this.ptr + 13) >>> 0] = rethrown;\n }\n get_rethrown() {\n return HEAP8[(this.ptr + 13) >>> 0] != 0;\n }\n init(type, destructor) {\n this.set_adjusted_ptr(0);\n this.set_type(type);\n this.set_destructor(destructor);\n }\n set_adjusted_ptr(adjustedPtr) {\n HEAPU32[((this.ptr + 16) >>> 2) >>> 0] = adjustedPtr;\n }\n get_adjusted_ptr() {\n return HEAPU32[((this.ptr + 16) >>> 2) >>> 0];\n }\n}\nvar setTempRet0 = (val) => __emscripten_tempret_set(val);\nvar findMatchingCatch = (args) => {\n var thrown = exceptionLast;\n if (!thrown) {\n setTempRet0(0);\n return 0;\n }\n var info = new ExceptionInfo(thrown);\n info.set_adjusted_ptr(thrown);\n var thrownType = info.get_type();\n if (!thrownType) {\n setTempRet0(0);\n return thrown;\n }\n for (var caughtType of args) {\n if (caughtType === 0 || caughtType === thrownType) {\n break;\n }\n var adjusted_ptr_addr = info.ptr + 16;\n if (___cxa_can_catch(caughtType, thrownType, adjusted_ptr_addr)) {\n setTempRet0(caughtType);\n return thrown;\n }\n }\n setTempRet0(thrownType);\n return thrown;\n};\nfunction ___cxa_find_matching_catch_2() {\n return findMatchingCatch([]);\n}\nfunction ___cxa_find_matching_catch_3(arg0) {\n arg0 >>>= 0;\n return findMatchingCatch([arg0]);\n}\nfunction ___cxa_find_matching_catch_4(arg0, arg1) {\n arg0 >>>= 0;\n arg1 >>>= 0;\n return findMatchingCatch([arg0, arg1]);\n}\nvar ___cxa_rethrow = () => {\n var info = exceptionCaught.pop();\n if (!info) {\n abort('no exception to throw');\n }\n var ptr = info.excPtr;\n if (!info.get_rethrown()) {\n exceptionCaught.push(info);\n info.set_rethrown(true);\n info.set_caught(false);\n uncaughtExceptionCount++;\n }\n exceptionLast = ptr;\n throw exceptionLast;\n};\nfunction ___cxa_rethrow_primary_exception(ptr) {\n ptr >>>= 0;\n if (!ptr) return;\n var info = new ExceptionInfo(ptr);\n exceptionCaught.push(info);\n info.set_rethrown(true);\n ___cxa_rethrow();\n}\nfunction ___cxa_throw(ptr, type, destructor) {\n ptr >>>= 0;\n type >>>= 0;\n destructor >>>= 0;\n var info = new ExceptionInfo(ptr);\n info.init(type, destructor);\n exceptionLast = ptr;\n uncaughtExceptionCount++;\n throw exceptionLast;\n}\nvar ___cxa_uncaught_exceptions = () => uncaughtExceptionCount;\nfunction ___resumeException(ptr) {\n ptr >>>= 0;\n if (!exceptionLast) {\n exceptionLast = ptr;\n }\n throw exceptionLast;\n}\nvar syscallGetVarargI = () => {\n var ret = HEAP32[(+SYSCALLS.varargs >>> 2) >>> 0];\n SYSCALLS.varargs += 4;\n return ret;\n};\nvar syscallGetVarargP = syscallGetVarargI;\nvar PATH = {\n isAbs: (path) => path.charAt(0) === '/',\n splitPath: (filename) => {\n var splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n return splitPathRe.exec(filename).slice(1);\n },\n normalizeArray: (parts, allowAboveRoot) => {\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n if (allowAboveRoot) {\n for (; up; up--) {\n parts.unshift('..');\n }\n }\n return parts;\n },\n normalize: (path) => {\n var isAbsolute = PATH.isAbs(path),\n trailingSlash = path.slice(-1) === '/';\n path = PATH.normalizeArray(\n path.split('/').filter((p) => !!p),\n !isAbsolute\n ).join('/');\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n return (isAbsolute ? '/' : '') + path;\n },\n dirname: (path) => {\n var result = PATH.splitPath(path),\n root = result[0],\n dir = result[1];\n if (!root && !dir) {\n return '.';\n }\n if (dir) {\n dir = dir.slice(0, -1);\n }\n return root + dir;\n },\n basename: (path) => path && path.match(/([^\\/]+|\\/)\\/*$/)[1],\n join: (...paths) => PATH.normalize(paths.join('/')),\n join2: (l, r) => PATH.normalize(l + '/' + r),\n};\nvar initRandomFill = () => {\n if (ENVIRONMENT_IS_NODE) {\n var nodeCrypto = require('crypto');\n return (view) => nodeCrypto.randomFillSync(view);\n }\n return (view) => crypto.getRandomValues(view);\n};\nvar randomFill = (view) => {\n (randomFill = initRandomFill())(view);\n};\nvar PATH_FS = {\n resolve: (...args) => {\n var resolvedPath = '',\n resolvedAbsolute = false;\n for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? args[i] : FS.cwd();\n if (typeof path != 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n return '';\n }\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = PATH.isAbs(path);\n }\n resolvedPath = PATH.normalizeArray(\n resolvedPath.split('/').filter((p) => !!p),\n !resolvedAbsolute\n ).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n },\n relative: (from, to) => {\n from = PATH_FS.resolve(from).slice(1);\n to = PATH_FS.resolve(to).slice(1);\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n },\n};\nvar UTF8Decoder = globalThis.TextDecoder && new TextDecoder();\nvar findStringEnd = (heapOrArray, idx, maxBytesToRead, ignoreNul) => {\n var maxIdx = idx + maxBytesToRead;\n if (ignoreNul) return maxIdx;\n while (heapOrArray[idx] && !(idx >= maxIdx)) ++idx;\n return idx;\n};\nvar UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead, ignoreNul) => {\n idx >>>= 0;\n var endPtr = findStringEnd(heapOrArray, idx, maxBytesToRead, ignoreNul);\n if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {\n return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));\n }\n var str = '';\n while (idx < endPtr) {\n var u0 = heapOrArray[idx++];\n if (!(u0 & 128)) {\n str += String.fromCharCode(u0);\n continue;\n }\n var u1 = heapOrArray[idx++] & 63;\n if ((u0 & 224) == 192) {\n str += String.fromCharCode(((u0 & 31) << 6) | u1);\n continue;\n }\n var u2 = heapOrArray[idx++] & 63;\n if ((u0 & 240) == 224) {\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n } else {\n u0 =\n ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);\n }\n if (u0 < 65536) {\n str += String.fromCharCode(u0);\n } else {\n var ch = u0 - 65536;\n str += String.fromCharCode(55296 | (ch >> 10), 56320 | (ch & 1023));\n }\n }\n return str;\n};\nvar FS_stdin_getChar_buffer = [];\nvar lengthBytesUTF8 = (str) => {\n var len = 0;\n for (var i = 0; i < str.length; ++i) {\n var c = str.charCodeAt(i);\n if (c <= 127) {\n len++;\n } else if (c <= 2047) {\n len += 2;\n } else if (c >= 55296 && c <= 57343) {\n len += 4;\n ++i;\n } else {\n len += 3;\n }\n }\n return len;\n};\nvar stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => {\n outIdx >>>= 0;\n if (!(maxBytesToWrite > 0)) return 0;\n var startIdx = outIdx;\n var endIdx = outIdx + maxBytesToWrite - 1;\n for (var i = 0; i < str.length; ++i) {\n var u = str.codePointAt(i);\n if (u <= 127) {\n if (outIdx >= endIdx) break;\n heap[outIdx++ >>> 0] = u;\n } else if (u <= 2047) {\n if (outIdx + 1 >= endIdx) break;\n heap[outIdx++ >>> 0] = 192 | (u >> 6);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n } else if (u <= 65535) {\n if (outIdx + 2 >= endIdx) break;\n heap[outIdx++ >>> 0] = 224 | (u >> 12);\n heap[outIdx++ >>> 0] = 128 | ((u >> 6) & 63);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n } else {\n if (outIdx + 3 >= endIdx) break;\n heap[outIdx++ >>> 0] = 240 | (u >> 18);\n heap[outIdx++ >>> 0] = 128 | ((u >> 12) & 63);\n heap[outIdx++ >>> 0] = 128 | ((u >> 6) & 63);\n heap[outIdx++ >>> 0] = 128 | (u & 63);\n i++;\n }\n }\n heap[outIdx >>> 0] = 0;\n return outIdx - startIdx;\n};\nvar intArrayFromString = (stringy, dontAddNull, length) => {\n var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;\n var u8array = new Array(len);\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n if (dontAddNull) u8array.length = numBytesWritten;\n return u8array;\n};\nvar FS_stdin_getChar = () => {\n if (!FS_stdin_getChar_buffer.length) {\n var result = null;\n if (ENVIRONMENT_IS_NODE) {\n var BUFSIZE = 256;\n var buf = Buffer.alloc(BUFSIZE);\n var bytesRead = 0;\n var fd = process.stdin.fd;\n try {\n bytesRead = fs.readSync(fd, buf, 0, BUFSIZE);\n } catch (e) {\n if (e.toString().includes('EOF')) bytesRead = 0;\n else throw e;\n }\n if (bytesRead > 0) {\n result = buf.slice(0, bytesRead).toString('utf-8');\n }\n } else if (globalThis.window?.prompt) {\n result = window.prompt('Input: ');\n if (result !== null) {\n result += '\\n';\n }\n } else {\n }\n if (!result) {\n return null;\n }\n FS_stdin_getChar_buffer = intArrayFromString(result, true);\n }\n return FS_stdin_getChar_buffer.shift();\n};\nvar TTY = {\n ttys: [],\n init() {},\n shutdown() {},\n register(dev, ops) {\n TTY.ttys[dev] = { input: [], output: [], ops };\n FS.registerDevice(dev, TTY.stream_ops);\n },\n stream_ops: {\n open(stream) {\n var tty = TTY.ttys[stream.node.rdev];\n if (!tty) {\n throw new FS.ErrnoError(43);\n }\n stream.tty = tty;\n stream.seekable = false;\n },\n close(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n fsync(stream) {\n stream.tty.ops.fsync(stream.tty);\n },\n read(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.get_char) {\n throw new FS.ErrnoError(60);\n }\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = stream.tty.ops.get_char(stream.tty);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n if (!stream.tty || !stream.tty.ops.put_char) {\n throw new FS.ErrnoError(60);\n }\n try {\n for (var i = 0; i < length; i++) {\n stream.tty.ops.put_char(stream.tty, buffer[offset + i]);\n }\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n },\n default_tty_ops: {\n get_char(tty) {\n return FS_stdin_getChar();\n },\n put_char(tty, val) {\n if (val === null || val === 10) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n out(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n ioctl_tcgets(tty) {\n return {\n c_iflag: 25856,\n c_oflag: 5,\n c_cflag: 191,\n c_lflag: 35387,\n c_cc: [\n 3, 28, 127, 21, 4, 0, 1, 0, 17, 19, 26, 0, 18, 15, 23, 22, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n ],\n };\n },\n ioctl_tcsets(tty, optional_actions, data) {\n return 0;\n },\n ioctl_tiocgwinsz(tty) {\n return [24, 80];\n },\n },\n default_tty1_ops: {\n put_char(tty, val) {\n if (val === null || val === 10) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n } else {\n if (val != 0) tty.output.push(val);\n }\n },\n fsync(tty) {\n if (tty.output?.length > 0) {\n err(UTF8ArrayToString(tty.output));\n tty.output = [];\n }\n },\n },\n};\nvar zeroMemory = (ptr, size) => HEAPU8.fill(0, ptr, ptr + size);\nvar alignMemory = (size, alignment) => Math.ceil(size / alignment) * alignment;\nvar mmapAlloc = (size) => {\n size = alignMemory(size, 65536);\n var ptr = _emscripten_builtin_memalign(65536, size);\n if (ptr) zeroMemory(ptr, size);\n return ptr;\n};\nvar MEMFS = {\n ops_table: null,\n mount(mount) {\n return MEMFS.createNode(null, '/', 16895, 0);\n },\n createNode(parent, name, mode, dev) {\n if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n throw new FS.ErrnoError(63);\n }\n MEMFS.ops_table ||= {\n dir: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n lookup: MEMFS.node_ops.lookup,\n mknod: MEMFS.node_ops.mknod,\n rename: MEMFS.node_ops.rename,\n unlink: MEMFS.node_ops.unlink,\n rmdir: MEMFS.node_ops.rmdir,\n readdir: MEMFS.node_ops.readdir,\n symlink: MEMFS.node_ops.symlink,\n },\n stream: { llseek: MEMFS.stream_ops.llseek },\n },\n file: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: {\n llseek: MEMFS.stream_ops.llseek,\n read: MEMFS.stream_ops.read,\n write: MEMFS.stream_ops.write,\n mmap: MEMFS.stream_ops.mmap,\n msync: MEMFS.stream_ops.msync,\n },\n },\n link: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n readlink: MEMFS.node_ops.readlink,\n },\n stream: {},\n },\n chrdev: {\n node: {\n getattr: MEMFS.node_ops.getattr,\n setattr: MEMFS.node_ops.setattr,\n },\n stream: FS.chrdev_stream_ops,\n },\n };\n var node = FS.createNode(parent, name, mode, dev);\n if (FS.isDir(node.mode)) {\n node.node_ops = MEMFS.ops_table.dir.node;\n node.stream_ops = MEMFS.ops_table.dir.stream;\n node.contents = {};\n } else if (FS.isFile(node.mode)) {\n node.node_ops = MEMFS.ops_table.file.node;\n node.stream_ops = MEMFS.ops_table.file.stream;\n node.usedBytes = 0;\n node.contents = null;\n } else if (FS.isLink(node.mode)) {\n node.node_ops = MEMFS.ops_table.link.node;\n node.stream_ops = MEMFS.ops_table.link.stream;\n } else if (FS.isChrdev(node.mode)) {\n node.node_ops = MEMFS.ops_table.chrdev.node;\n node.stream_ops = MEMFS.ops_table.chrdev.stream;\n }\n node.atime = node.mtime = node.ctime = Date.now();\n if (parent) {\n parent.contents[name] = node;\n parent.atime = parent.mtime = parent.ctime = node.atime;\n }\n return node;\n },\n getFileDataAsTypedArray(node) {\n if (!node.contents) return new Uint8Array(0);\n if (node.contents.subarray)\n return node.contents.subarray(0, node.usedBytes);\n return new Uint8Array(node.contents);\n },\n expandFileStorage(node, newCapacity) {\n var prevCapacity = node.contents ? node.contents.length : 0;\n if (prevCapacity >= newCapacity) return;\n var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n newCapacity = Math.max(\n newCapacity,\n (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125)) >>> 0\n );\n if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256);\n var oldContents = node.contents;\n node.contents = new Uint8Array(newCapacity);\n if (node.usedBytes > 0)\n node.contents.set(oldContents.subarray(0, node.usedBytes), 0);\n },\n resizeFileStorage(node, newSize) {\n if (node.usedBytes == newSize) return;\n if (newSize == 0) {\n node.contents = null;\n node.usedBytes = 0;\n } else {\n var oldContents = node.contents;\n node.contents = new Uint8Array(newSize);\n if (oldContents) {\n node.contents.set(\n oldContents.subarray(0, Math.min(newSize, node.usedBytes))\n );\n }\n node.usedBytes = newSize;\n }\n },\n node_ops: {\n getattr(node) {\n var attr = {};\n attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n attr.ino = node.id;\n attr.mode = node.mode;\n attr.nlink = 1;\n attr.uid = 0;\n attr.gid = 0;\n attr.rdev = node.rdev;\n if (FS.isDir(node.mode)) {\n attr.size = 4096;\n } else if (FS.isFile(node.mode)) {\n attr.size = node.usedBytes;\n } else if (FS.isLink(node.mode)) {\n attr.size = node.link.length;\n } else {\n attr.size = 0;\n }\n attr.atime = new Date(node.atime);\n attr.mtime = new Date(node.mtime);\n attr.ctime = new Date(node.ctime);\n attr.blksize = 4096;\n attr.blocks = Math.ceil(attr.size / attr.blksize);\n return attr;\n },\n setattr(node, attr) {\n for (const key of ['mode', 'atime', 'mtime', 'ctime']) {\n if (attr[key] != null) {\n node[key] = attr[key];\n }\n }\n if (attr.size !== undefined) {\n MEMFS.resizeFileStorage(node, attr.size);\n }\n },\n lookup(parent, name) {\n if (!MEMFS.doesNotExistError) {\n MEMFS.doesNotExistError = new FS.ErrnoError(44);\n MEMFS.doesNotExistError.stack = '';\n }\n throw MEMFS.doesNotExistError;\n },\n mknod(parent, name, mode, dev) {\n return MEMFS.createNode(parent, name, mode, dev);\n },\n rename(old_node, new_dir, new_name) {\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (new_node) {\n if (FS.isDir(old_node.mode)) {\n for (var i in new_node.contents) {\n throw new FS.ErrnoError(55);\n }\n }\n FS.hashRemoveNode(new_node);\n }\n delete old_node.parent.contents[old_node.name];\n new_dir.contents[new_name] = old_node;\n old_node.name = new_name;\n new_dir.ctime =\n new_dir.mtime =\n old_node.parent.ctime =\n old_node.parent.mtime =\n Date.now();\n },\n unlink(parent, name) {\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n rmdir(parent, name) {\n var node = FS.lookupNode(parent, name);\n for (var i in node.contents) {\n throw new FS.ErrnoError(55);\n }\n delete parent.contents[name];\n parent.ctime = parent.mtime = Date.now();\n },\n readdir(node) {\n return ['.', '..', ...Object.keys(node.contents)];\n },\n symlink(parent, newname, oldpath) {\n var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);\n node.link = oldpath;\n return node;\n },\n readlink(node) {\n if (!FS.isLink(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n return node.link;\n },\n },\n stream_ops: {\n read(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= stream.node.usedBytes) return 0;\n var size = Math.min(stream.node.usedBytes - position, length);\n if (size > 8 && contents.subarray) {\n buffer.set(contents.subarray(position, position + size), offset);\n } else {\n for (var i = 0; i < size; i++)\n buffer[offset + i] = contents[position + i];\n }\n return size;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (buffer.buffer === HEAP8.buffer) {\n canOwn = false;\n }\n if (!length) return 0;\n var node = stream.node;\n node.mtime = node.ctime = Date.now();\n if (buffer.subarray && (!node.contents || node.contents.subarray)) {\n if (canOwn) {\n node.contents = buffer.subarray(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (node.usedBytes === 0 && position === 0) {\n node.contents = buffer.slice(offset, offset + length);\n node.usedBytes = length;\n return length;\n } else if (position + length <= node.usedBytes) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n return length;\n }\n }\n MEMFS.expandFileStorage(node, position + length);\n if (node.contents.subarray && buffer.subarray) {\n node.contents.set(buffer.subarray(offset, offset + length), position);\n } else {\n for (var i = 0; i < length; i++) {\n node.contents[position + i] = buffer[offset + i];\n }\n }\n node.usedBytes = Math.max(node.usedBytes, position + length);\n return length;\n },\n llseek(stream, offset, whence) {\n var position = offset;\n if (whence === 1) {\n position += stream.position;\n } else if (whence === 2) {\n if (FS.isFile(stream.node.mode)) {\n position += stream.node.usedBytes;\n }\n }\n if (position < 0) {\n throw new FS.ErrnoError(28);\n }\n return position;\n },\n mmap(stream, length, position, prot, flags) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n var ptr;\n var allocated;\n var contents = stream.node.contents;\n if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) {\n allocated = false;\n ptr = contents.byteOffset;\n } else {\n allocated = true;\n ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n if (contents) {\n if (position > 0 || position + length < contents.length) {\n if (contents.subarray) {\n contents = contents.subarray(position, position + length);\n } else {\n contents = Array.prototype.slice.call(\n contents,\n position,\n position + length\n );\n }\n }\n HEAP8.set(contents, ptr >>> 0);\n }\n }\n return { ptr, allocated };\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n return 0;\n },\n },\n};\nvar FS_modeStringToFlags = (str) => {\n var flagModes = {\n r: 0,\n 'r+': 2,\n w: 512 | 64 | 1,\n 'w+': 512 | 64 | 2,\n a: 1024 | 64 | 1,\n 'a+': 1024 | 64 | 2,\n };\n var flags = flagModes[str];\n if (typeof flags == 'undefined') {\n throw new Error(`Unknown file open mode: ${str}`);\n }\n return flags;\n};\nvar FS_getMode = (canRead, canWrite) => {\n var mode = 0;\n if (canRead) mode |= 292 | 73;\n if (canWrite) mode |= 146;\n return mode;\n};\nvar asyncLoad = async (url) => {\n var arrayBuffer = await readAsync(url);\n return new Uint8Array(arrayBuffer);\n};\nvar FS_createDataFile = (...args) => FS.createDataFile(...args);\nvar getUniqueRunDependency = (id) => id;\nvar preloadPlugins = [];\nvar FS_handledByPreloadPlugin = async (byteArray, fullname) => {\n if (typeof Browser != 'undefined') Browser.init();\n for (var plugin of preloadPlugins) {\n if (plugin['canHandle'](fullname)) {\n return plugin['handle'](byteArray, fullname);\n }\n }\n return byteArray;\n};\nvar FS_preloadFile = async (\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n var dep = getUniqueRunDependency(`cp ${fullname}`);\n addRunDependency(dep);\n try {\n var byteArray = url;\n if (typeof url == 'string') {\n byteArray = await asyncLoad(url);\n }\n byteArray = await FS_handledByPreloadPlugin(byteArray, fullname);\n preFinish?.();\n if (!dontCreateFile) {\n FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n }\n } finally {\n removeRunDependency(dep);\n }\n};\nvar FS_createPreloadedFile = (\n parent,\n name,\n url,\n canRead,\n canWrite,\n onload,\n onerror,\n dontCreateFile,\n canOwn,\n preFinish\n) => {\n FS_preloadFile(\n parent,\n name,\n url,\n canRead,\n canWrite,\n dontCreateFile,\n canOwn,\n preFinish\n )\n .then(onload)\n .catch(onerror);\n};\nvar FS = {\n root: null,\n mounts: [],\n devices: {},\n streams: [],\n nextInode: 1,\n nameTable: null,\n currentPath: '/',\n initialized: false,\n ignorePermissions: true,\n filesystems: null,\n syncFSRequests: 0,\n readFiles: {},\n ErrnoError: class {\n name = 'ErrnoError';\n constructor(errno) {\n this.errno = errno;\n }\n },\n FSStream: class {\n shared = {};\n get object() {\n return this.node;\n }\n set object(val) {\n this.node = val;\n }\n get isRead() {\n return (this.flags & 2097155) !== 1;\n }\n get isWrite() {\n return (this.flags & 2097155) !== 0;\n }\n get isAppend() {\n return this.flags & 1024;\n }\n get flags() {\n return this.shared.flags;\n }\n set flags(val) {\n this.shared.flags = val;\n }\n get position() {\n return this.shared.position;\n }\n set position(val) {\n this.shared.position = val;\n }\n },\n FSNode: class {\n node_ops = {};\n stream_ops = {};\n readMode = 292 | 73;\n writeMode = 146;\n mounted = null;\n constructor(parent, name, mode, rdev) {\n if (!parent) {\n parent = this;\n }\n this.parent = parent;\n this.mount = parent.mount;\n this.id = FS.nextInode++;\n this.name = name;\n this.mode = mode;\n this.rdev = rdev;\n this.atime = this.mtime = this.ctime = Date.now();\n }\n get read() {\n return (this.mode & this.readMode) === this.readMode;\n }\n set read(val) {\n val ? (this.mode |= this.readMode) : (this.mode &= ~this.readMode);\n }\n get write() {\n return (this.mode & this.writeMode) === this.writeMode;\n }\n set write(val) {\n val ? (this.mode |= this.writeMode) : (this.mode &= ~this.writeMode);\n }\n get isFolder() {\n return FS.isDir(this.mode);\n }\n get isDevice() {\n return FS.isChrdev(this.mode);\n }\n },\n lookupPath(path, opts = {}) {\n if (!path) {\n throw new FS.ErrnoError(44);\n }\n opts.follow_mount ??= true;\n if (!PATH.isAbs(path)) {\n path = FS.cwd() + '/' + path;\n }\n linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) {\n var parts = path.split('/').filter((p) => !!p);\n var current = FS.root;\n var current_path = '/';\n for (var i = 0; i < parts.length; i++) {\n var islast = i === parts.length - 1;\n if (islast && opts.parent) {\n break;\n }\n if (parts[i] === '.') {\n continue;\n }\n if (parts[i] === '..') {\n current_path = PATH.dirname(current_path);\n if (FS.isRoot(current)) {\n path = current_path + '/' + parts.slice(i + 1).join('/');\n nlinks--;\n continue linkloop;\n } else {\n current = current.parent;\n }\n continue;\n }\n current_path = PATH.join2(current_path, parts[i]);\n try {\n current = FS.lookupNode(current, parts[i]);\n } catch (e) {\n if (e?.errno === 44 && islast && opts.noent_okay) {\n return { path: current_path };\n }\n throw e;\n }\n if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) {\n current = current.mounted.root;\n }\n if (FS.isLink(current.mode) && (!islast || opts.follow)) {\n if (!current.node_ops.readlink) {\n throw new FS.ErrnoError(52);\n }\n var link = current.node_ops.readlink(current);\n if (!PATH.isAbs(link)) {\n link = PATH.dirname(current_path) + '/' + link;\n }\n path = link + '/' + parts.slice(i + 1).join('/');\n continue linkloop;\n }\n }\n return { path: current_path, node: current };\n }\n throw new FS.ErrnoError(32);\n },\n getPath(node) {\n var path;\n while (true) {\n if (FS.isRoot(node)) {\n var mount = node.mount.mountpoint;\n if (!path) return mount;\n return mount[mount.length - 1] !== '/'\n ? `${mount}/${path}`\n : mount + path;\n }\n path = path ? `${node.name}/${path}` : node.name;\n node = node.parent;\n }\n },\n hashName(parentid, name) {\n var hash = 0;\n for (var i = 0; i < name.length; i++) {\n hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n }\n return ((parentid + hash) >>> 0) % FS.nameTable.length;\n },\n hashAddNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n node.name_next = FS.nameTable[hash];\n FS.nameTable[hash] = node;\n },\n hashRemoveNode(node) {\n var hash = FS.hashName(node.parent.id, node.name);\n if (FS.nameTable[hash] === node) {\n FS.nameTable[hash] = node.name_next;\n } else {\n var current = FS.nameTable[hash];\n while (current) {\n if (current.name_next === node) {\n current.name_next = node.name_next;\n break;\n }\n current = current.name_next;\n }\n }\n },\n lookupNode(parent, name) {\n var errCode = FS.mayLookup(parent);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n var hash = FS.hashName(parent.id, name);\n for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n var nodeName = node.name;\n if (node.parent.id === parent.id && nodeName === name) {\n return node;\n }\n }\n return FS.lookup(parent, name);\n },\n createNode(parent, name, mode, rdev) {\n var node = new FS.FSNode(parent, name, mode, rdev);\n FS.hashAddNode(node);\n return node;\n },\n destroyNode(node) {\n FS.hashRemoveNode(node);\n },\n isRoot(node) {\n return node === node.parent;\n },\n isMountpoint(node) {\n return !!node.mounted;\n },\n isFile(mode) {\n return (mode & 61440) === 32768;\n },\n isDir(mode) {\n return (mode & 61440) === 16384;\n },\n isLink(mode) {\n return (mode & 61440) === 40960;\n },\n isChrdev(mode) {\n return (mode & 61440) === 8192;\n },\n isBlkdev(mode) {\n return (mode & 61440) === 24576;\n },\n isFIFO(mode) {\n return (mode & 61440) === 4096;\n },\n isSocket(mode) {\n return (mode & 49152) === 49152;\n },\n flagsToPermissionString(flag) {\n var perms = ['r', 'w', 'rw'][flag & 3];\n if (flag & 512) {\n perms += 'w';\n }\n return perms;\n },\n nodePermissions(node, perms) {\n if (FS.ignorePermissions) {\n return 0;\n }\n if (perms.includes('r') && !(node.mode & 292)) {\n return 2;\n } else if (perms.includes('w') && !(node.mode & 146)) {\n return 2;\n } else if (perms.includes('x') && !(node.mode & 73)) {\n return 2;\n }\n return 0;\n },\n mayLookup(dir) {\n if (!FS.isDir(dir.mode)) return 54;\n var errCode = FS.nodePermissions(dir, 'x');\n if (errCode) return errCode;\n if (!dir.node_ops.lookup) return 2;\n return 0;\n },\n mayCreate(dir, name) {\n if (!FS.isDir(dir.mode)) {\n return 54;\n }\n try {\n var node = FS.lookupNode(dir, name);\n return 20;\n } catch (e) {}\n return FS.nodePermissions(dir, 'wx');\n },\n mayDelete(dir, name, isdir) {\n var node;\n try {\n node = FS.lookupNode(dir, name);\n } catch (e) {\n return e.errno;\n }\n var errCode = FS.nodePermissions(dir, 'wx');\n if (errCode) {\n return errCode;\n }\n if (isdir) {\n if (!FS.isDir(node.mode)) {\n return 54;\n }\n if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n return 10;\n }\n } else {\n if (FS.isDir(node.mode)) {\n return 31;\n }\n }\n return 0;\n },\n mayOpen(node, flags) {\n if (!node) {\n return 44;\n }\n if (FS.isLink(node.mode)) {\n return 32;\n } else if (FS.isDir(node.mode)) {\n if (FS.flagsToPermissionString(flags) !== 'r' || flags & (512 | 64)) {\n return 31;\n }\n }\n return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n },\n checkOpExists(op, err) {\n if (!op) {\n throw new FS.ErrnoError(err);\n }\n return op;\n },\n MAX_OPEN_FDS: 4096,\n nextfd() {\n for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) {\n if (!FS.streams[fd]) {\n return fd;\n }\n }\n throw new FS.ErrnoError(33);\n },\n getStreamChecked(fd) {\n var stream = FS.getStream(fd);\n if (!stream) {\n throw new FS.ErrnoError(8);\n }\n return stream;\n },\n getStream: (fd) => FS.streams[fd],\n createStream(stream, fd = -1) {\n stream = Object.assign(new FS.FSStream(), stream);\n if (fd == -1) {\n fd = FS.nextfd();\n }\n stream.fd = fd;\n FS.streams[fd] = stream;\n return stream;\n },\n closeStream(fd) {\n FS.streams[fd] = null;\n },\n dupStream(origStream, fd = -1) {\n var stream = FS.createStream(origStream, fd);\n stream.stream_ops?.dup?.(stream);\n return stream;\n },\n doSetAttr(stream, node, attr) {\n var setattr = stream?.stream_ops.setattr;\n var arg = setattr ? stream : node;\n setattr ??= node.node_ops.setattr;\n FS.checkOpExists(setattr, 63);\n setattr(arg, attr);\n },\n chrdev_stream_ops: {\n open(stream) {\n var device = FS.getDevice(stream.node.rdev);\n stream.stream_ops = device.stream_ops;\n stream.stream_ops.open?.(stream);\n },\n llseek() {\n throw new FS.ErrnoError(70);\n },\n },\n major: (dev) => dev >> 8,\n minor: (dev) => dev & 255,\n makedev: (ma, mi) => (ma << 8) | mi,\n registerDevice(dev, ops) {\n FS.devices[dev] = { stream_ops: ops };\n },\n getDevice: (dev) => FS.devices[dev],\n getMounts(mount) {\n var mounts = [];\n var check = [mount];\n while (check.length) {\n var m = check.pop();\n mounts.push(m);\n check.push(...m.mounts);\n }\n return mounts;\n },\n syncfs(populate, callback) {\n if (typeof populate == 'function') {\n callback = populate;\n populate = false;\n }\n FS.syncFSRequests++;\n if (FS.syncFSRequests > 1) {\n err(\n `warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`\n );\n }\n var mounts = FS.getMounts(FS.root.mount);\n var completed = 0;\n function doCallback(errCode) {\n FS.syncFSRequests--;\n return callback(errCode);\n }\n function done(errCode) {\n if (errCode) {\n if (!done.errored) {\n done.errored = true;\n return doCallback(errCode);\n }\n return;\n }\n if (++completed >= mounts.length) {\n doCallback(null);\n }\n }\n for (var mount of mounts) {\n if (mount.type.syncfs) {\n mount.type.syncfs(mount, populate, done);\n } else {\n done(null);\n }\n }\n },\n mount(type, opts, mountpoint) {\n var root = mountpoint === '/';\n var pseudo = !mountpoint;\n var node;\n if (root && FS.root) {\n throw new FS.ErrnoError(10);\n } else if (!root && !pseudo) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n mountpoint = lookup.path;\n node = lookup.node;\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n if (!FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n }\n var mount = { type, opts, mountpoint, mounts: [] };\n var mountRoot = type.mount(mount);\n mountRoot.mount = mount;\n mount.root = mountRoot;\n if (root) {\n FS.root = mountRoot;\n } else if (node) {\n node.mounted = mount;\n if (node.mount) {\n node.mount.mounts.push(mount);\n }\n }\n return mountRoot;\n },\n unmount(mountpoint) {\n var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n if (!FS.isMountpoint(lookup.node)) {\n throw new FS.ErrnoError(28);\n }\n var node = lookup.node;\n var mount = node.mounted;\n var mounts = FS.getMounts(mount);\n for (var [hash, current] of Object.entries(FS.nameTable)) {\n while (current) {\n var next = current.name_next;\n if (mounts.includes(current.mount)) {\n FS.destroyNode(current);\n }\n current = next;\n }\n }\n node.mounted = null;\n var idx = node.mount.mounts.indexOf(mount);\n node.mount.mounts.splice(idx, 1);\n },\n lookup(parent, name) {\n return parent.node_ops.lookup(parent, name);\n },\n mknod(path, mode, dev) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n if (!name) {\n throw new FS.ErrnoError(28);\n }\n if (name === '.' || name === '..') {\n throw new FS.ErrnoError(20);\n }\n var errCode = FS.mayCreate(parent, name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.mknod) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.mknod(parent, name, mode, dev);\n },\n statfs(path) {\n return FS.statfsNode(FS.lookupPath(path, { follow: true }).node);\n },\n statfsStream(stream) {\n return FS.statfsNode(stream.node);\n },\n statfsNode(node) {\n var rtn = {\n bsize: 4096,\n frsize: 4096,\n blocks: 1e6,\n bfree: 5e5,\n bavail: 5e5,\n files: FS.nextInode,\n ffree: FS.nextInode - 1,\n fsid: 42,\n flags: 2,\n namelen: 255,\n };\n if (node.node_ops.statfs) {\n Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root));\n }\n return rtn;\n },\n create(path, mode = 438) {\n mode &= 4095;\n mode |= 32768;\n return FS.mknod(path, mode, 0);\n },\n mkdir(path, mode = 511) {\n mode &= 511 | 512;\n mode |= 16384;\n return FS.mknod(path, mode, 0);\n },\n mkdirTree(path, mode) {\n var dirs = path.split('/');\n var d = '';\n for (var dir of dirs) {\n if (!dir) continue;\n if (d || PATH.isAbs(path)) d += '/';\n d += dir;\n try {\n FS.mkdir(d, mode);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n }\n },\n mkdev(path, mode, dev) {\n if (typeof dev == 'undefined') {\n dev = mode;\n mode = 438;\n }\n mode |= 8192;\n return FS.mknod(path, mode, dev);\n },\n symlink(oldpath, newpath) {\n if (!PATH_FS.resolve(oldpath)) {\n throw new FS.ErrnoError(44);\n }\n var lookup = FS.lookupPath(newpath, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var newname = PATH.basename(newpath);\n var errCode = FS.mayCreate(parent, newname);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.symlink) {\n throw new FS.ErrnoError(63);\n }\n return parent.node_ops.symlink(parent, newname, oldpath);\n },\n rename(old_path, new_path) {\n var old_dirname = PATH.dirname(old_path);\n var new_dirname = PATH.dirname(new_path);\n var old_name = PATH.basename(old_path);\n var new_name = PATH.basename(new_path);\n var lookup, old_dir, new_dir;\n lookup = FS.lookupPath(old_path, { parent: true });\n old_dir = lookup.node;\n lookup = FS.lookupPath(new_path, { parent: true });\n new_dir = lookup.node;\n if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n if (old_dir.mount !== new_dir.mount) {\n throw new FS.ErrnoError(75);\n }\n var old_node = FS.lookupNode(old_dir, old_name);\n var relative = PATH_FS.relative(old_path, new_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(28);\n }\n relative = PATH_FS.relative(new_path, old_dirname);\n if (relative.charAt(0) !== '.') {\n throw new FS.ErrnoError(55);\n }\n var new_node;\n try {\n new_node = FS.lookupNode(new_dir, new_name);\n } catch (e) {}\n if (old_node === new_node) {\n return;\n }\n var isdir = FS.isDir(old_node.mode);\n var errCode = FS.mayDelete(old_dir, old_name, isdir);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n errCode = new_node\n ? FS.mayDelete(new_dir, new_name, isdir)\n : FS.mayCreate(new_dir, new_name);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!old_dir.node_ops.rename) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n throw new FS.ErrnoError(10);\n }\n if (new_dir !== old_dir) {\n errCode = FS.nodePermissions(old_dir, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n FS.hashRemoveNode(old_node);\n try {\n old_dir.node_ops.rename(old_node, new_dir, new_name);\n old_node.parent = new_dir;\n } catch (e) {\n throw e;\n } finally {\n FS.hashAddNode(old_node);\n }\n },\n rmdir(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, true);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.rmdir) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.rmdir(parent, name);\n FS.destroyNode(node);\n },\n readdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var readdir = FS.checkOpExists(node.node_ops.readdir, 54);\n return readdir(node);\n },\n unlink(path) {\n var lookup = FS.lookupPath(path, { parent: true });\n var parent = lookup.node;\n if (!parent) {\n throw new FS.ErrnoError(44);\n }\n var name = PATH.basename(path);\n var node = FS.lookupNode(parent, name);\n var errCode = FS.mayDelete(parent, name, false);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n if (!parent.node_ops.unlink) {\n throw new FS.ErrnoError(63);\n }\n if (FS.isMountpoint(node)) {\n throw new FS.ErrnoError(10);\n }\n parent.node_ops.unlink(parent, name);\n FS.destroyNode(node);\n },\n readlink(path) {\n var lookup = FS.lookupPath(path);\n var link = lookup.node;\n if (!link) {\n throw new FS.ErrnoError(44);\n }\n if (!link.node_ops.readlink) {\n throw new FS.ErrnoError(28);\n }\n return link.node_ops.readlink(link);\n },\n stat(path, dontFollow) {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n var node = lookup.node;\n var getattr = FS.checkOpExists(node.node_ops.getattr, 63);\n return getattr(node);\n },\n fstat(fd) {\n var stream = FS.getStreamChecked(fd);\n var node = stream.node;\n var getattr = stream.stream_ops.getattr;\n var arg = getattr ? stream : node;\n getattr ??= node.node_ops.getattr;\n FS.checkOpExists(getattr, 63);\n return getattr(arg);\n },\n lstat(path) {\n return FS.stat(path, true);\n },\n doChmod(stream, node, mode, dontFollow) {\n FS.doSetAttr(stream, node, {\n mode: (mode & 4095) | (node.mode & ~4095),\n ctime: Date.now(),\n dontFollow,\n });\n },\n chmod(path, mode, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChmod(null, node, mode, dontFollow);\n },\n lchmod(path, mode) {\n FS.chmod(path, mode, true);\n },\n fchmod(fd, mode) {\n var stream = FS.getStreamChecked(fd);\n FS.doChmod(stream, stream.node, mode, false);\n },\n doChown(stream, node, dontFollow) {\n FS.doSetAttr(stream, node, { timestamp: Date.now(), dontFollow });\n },\n chown(path, uid, gid, dontFollow) {\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: !dontFollow });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doChown(null, node, dontFollow);\n },\n lchown(path, uid, gid) {\n FS.chown(path, uid, gid, true);\n },\n fchown(fd, uid, gid) {\n var stream = FS.getStreamChecked(fd);\n FS.doChown(stream, stream.node, false);\n },\n doTruncate(stream, node, len) {\n if (FS.isDir(node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!FS.isFile(node.mode)) {\n throw new FS.ErrnoError(28);\n }\n var errCode = FS.nodePermissions(node, 'w');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.doSetAttr(stream, node, { size: len, timestamp: Date.now() });\n },\n truncate(path, len) {\n if (len < 0) {\n throw new FS.ErrnoError(28);\n }\n var node;\n if (typeof path == 'string') {\n var lookup = FS.lookupPath(path, { follow: true });\n node = lookup.node;\n } else {\n node = path;\n }\n FS.doTruncate(null, node, len);\n },\n ftruncate(fd, len) {\n var stream = FS.getStreamChecked(fd);\n if (len < 0 || (stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(28);\n }\n FS.doTruncate(stream, stream.node, len);\n },\n utime(path, atime, mtime) {\n var lookup = FS.lookupPath(path, { follow: true });\n var node = lookup.node;\n var setattr = FS.checkOpExists(node.node_ops.setattr, 63);\n setattr(node, { atime, mtime });\n },\n open(path, flags, mode = 438) {\n if (path === '') {\n throw new FS.ErrnoError(44);\n }\n flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags;\n if (flags & 64) {\n mode = (mode & 4095) | 32768;\n } else {\n mode = 0;\n }\n var node;\n var isDirPath;\n if (typeof path == 'object') {\n node = path;\n } else {\n isDirPath = path.endsWith('/');\n var lookup = FS.lookupPath(path, {\n follow: !(flags & 131072),\n noent_okay: true,\n });\n node = lookup.node;\n path = lookup.path;\n }\n var created = false;\n if (flags & 64) {\n if (node) {\n if (flags & 128) {\n throw new FS.ErrnoError(20);\n }\n } else if (isDirPath) {\n throw new FS.ErrnoError(31);\n } else {\n node = FS.mknod(path, mode | 511, 0);\n created = true;\n }\n }\n if (!node) {\n throw new FS.ErrnoError(44);\n }\n if (FS.isChrdev(node.mode)) {\n flags &= ~512;\n }\n if (flags & 65536 && !FS.isDir(node.mode)) {\n throw new FS.ErrnoError(54);\n }\n if (!created) {\n var errCode = FS.mayOpen(node, flags);\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n }\n if (flags & 512 && !created) {\n FS.truncate(node, 0);\n }\n flags &= ~(128 | 512 | 131072);\n var stream = FS.createStream({\n node,\n path: FS.getPath(node),\n flags,\n seekable: true,\n position: 0,\n stream_ops: node.stream_ops,\n ungotten: [],\n error: false,\n });\n if (stream.stream_ops.open) {\n stream.stream_ops.open(stream);\n }\n if (created) {\n FS.chmod(node, mode & 511);\n }\n if (Module['logReadFiles'] && !(flags & 1)) {\n if (!(path in FS.readFiles)) {\n FS.readFiles[path] = 1;\n }\n }\n return stream;\n },\n close(stream) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (stream.getdents) stream.getdents = null;\n try {\n if (stream.stream_ops.close) {\n stream.stream_ops.close(stream);\n }\n } catch (e) {\n throw e;\n } finally {\n FS.closeStream(stream.fd);\n }\n stream.fd = null;\n },\n isClosed(stream) {\n return stream.fd === null;\n },\n llseek(stream, offset, whence) {\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if (!stream.seekable || !stream.stream_ops.llseek) {\n throw new FS.ErrnoError(70);\n }\n if (whence != 0 && whence != 1 && whence != 2) {\n throw new FS.ErrnoError(28);\n }\n stream.position = stream.stream_ops.llseek(stream, offset, whence);\n stream.ungotten = [];\n return stream.position;\n },\n read(stream, buffer, offset, length, position) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.read) {\n throw new FS.ErrnoError(28);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesRead = stream.stream_ops.read(\n stream,\n buffer,\n offset,\n length,\n position\n );\n if (!seeking) stream.position += bytesRead;\n return bytesRead;\n },\n write(stream, buffer, offset, length, position, canOwn) {\n if (length < 0 || position < 0) {\n throw new FS.ErrnoError(28);\n }\n if (FS.isClosed(stream)) {\n throw new FS.ErrnoError(8);\n }\n if ((stream.flags & 2097155) === 0) {\n throw new FS.ErrnoError(8);\n }\n if (FS.isDir(stream.node.mode)) {\n throw new FS.ErrnoError(31);\n }\n if (!stream.stream_ops.write) {\n throw new FS.ErrnoError(28);\n }\n if (stream.seekable && stream.flags & 1024) {\n FS.llseek(stream, 0, 2);\n }\n var seeking = typeof position != 'undefined';\n if (!seeking) {\n position = stream.position;\n } else if (!stream.seekable) {\n throw new FS.ErrnoError(70);\n }\n var bytesWritten = stream.stream_ops.write(\n stream,\n buffer,\n offset,\n length,\n position,\n canOwn\n );\n if (!seeking) stream.position += bytesWritten;\n return bytesWritten;\n },\n mmap(stream, length, position, prot, flags) {\n if (\n (prot & 2) !== 0 &&\n (flags & 2) === 0 &&\n (stream.flags & 2097155) !== 2\n ) {\n throw new FS.ErrnoError(2);\n }\n if ((stream.flags & 2097155) === 1) {\n throw new FS.ErrnoError(2);\n }\n if (!stream.stream_ops.mmap) {\n throw new FS.ErrnoError(43);\n }\n if (!length) {\n throw new FS.ErrnoError(28);\n }\n return stream.stream_ops.mmap(stream, length, position, prot, flags);\n },\n msync(stream, buffer, offset, length, mmapFlags) {\n if (!stream.stream_ops.msync) {\n return 0;\n }\n return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n },\n ioctl(stream, cmd, arg) {\n if (!stream.stream_ops.ioctl) {\n throw new FS.ErrnoError(59);\n }\n return stream.stream_ops.ioctl(stream, cmd, arg);\n },\n readFile(path, opts = {}) {\n opts.flags = opts.flags || 0;\n opts.encoding = opts.encoding || 'binary';\n if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n abort(`Invalid encoding type \"${opts.encoding}\"`);\n }\n var stream = FS.open(path, opts.flags);\n var stat = FS.stat(path);\n var length = stat.size;\n var buf = new Uint8Array(length);\n FS.read(stream, buf, 0, length, 0);\n if (opts.encoding === 'utf8') {\n buf = UTF8ArrayToString(buf);\n }\n FS.close(stream);\n return buf;\n },\n writeFile(path, data, opts = {}) {\n opts.flags = opts.flags || 577;\n var stream = FS.open(path, opts.flags, opts.mode);\n if (typeof data == 'string') {\n data = new Uint8Array(intArrayFromString(data, true));\n }\n if (ArrayBuffer.isView(data)) {\n FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n } else {\n abort('Unsupported data type');\n }\n FS.close(stream);\n },\n cwd: () => FS.currentPath,\n chdir(path) {\n var lookup = FS.lookupPath(path, { follow: true });\n if (lookup.node === null) {\n throw new FS.ErrnoError(44);\n }\n if (!FS.isDir(lookup.node.mode)) {\n throw new FS.ErrnoError(54);\n }\n var errCode = FS.nodePermissions(lookup.node, 'x');\n if (errCode) {\n throw new FS.ErrnoError(errCode);\n }\n FS.currentPath = lookup.path;\n },\n createDefaultDirectories() {\n FS.mkdir('/tmp');\n FS.mkdir('/home');\n FS.mkdir('/home/web_user');\n },\n createDefaultDevices() {\n FS.mkdir('/dev');\n FS.registerDevice(FS.makedev(1, 3), {\n read: () => 0,\n write: (stream, buffer, offset, length, pos) => length,\n llseek: () => 0,\n });\n FS.mkdev('/dev/null', FS.makedev(1, 3));\n TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n FS.mkdev('/dev/tty', FS.makedev(5, 0));\n FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n var randomBuffer = new Uint8Array(1024),\n randomLeft = 0;\n var randomByte = () => {\n if (randomLeft === 0) {\n randomFill(randomBuffer);\n randomLeft = randomBuffer.byteLength;\n }\n return randomBuffer[--randomLeft];\n };\n FS.createDevice('/dev', 'random', randomByte);\n FS.createDevice('/dev', 'urandom', randomByte);\n FS.mkdir('/dev/shm');\n FS.mkdir('/dev/shm/tmp');\n },\n createSpecialDirectories() {\n FS.mkdir('/proc');\n var proc_self = FS.mkdir('/proc/self');\n FS.mkdir('/proc/self/fd');\n FS.mount(\n {\n mount() {\n var node = FS.createNode(proc_self, 'fd', 16895, 73);\n node.stream_ops = { llseek: MEMFS.stream_ops.llseek };\n node.node_ops = {\n lookup(parent, name) {\n var fd = +name;\n var stream = FS.getStreamChecked(fd);\n var ret = {\n parent: null,\n mount: { mountpoint: 'fake' },\n node_ops: { readlink: () => stream.path },\n id: fd + 1,\n };\n ret.parent = ret;\n return ret;\n },\n readdir() {\n return Array.from(FS.streams.entries())\n .filter(([k, v]) => v)\n .map(([k, v]) => k.toString());\n },\n };\n return node;\n },\n },\n {},\n '/proc/self/fd'\n );\n },\n createStandardStreams(input, output, error) {\n if (input) {\n FS.createDevice('/dev', 'stdin', input);\n } else {\n FS.symlink('/dev/tty', '/dev/stdin');\n }\n if (output) {\n FS.createDevice('/dev', 'stdout', null, output);\n } else {\n FS.symlink('/dev/tty', '/dev/stdout');\n }\n if (error) {\n FS.createDevice('/dev', 'stderr', null, error);\n } else {\n FS.symlink('/dev/tty1', '/dev/stderr');\n }\n var stdin = FS.open('/dev/stdin', 0);\n var stdout = FS.open('/dev/stdout', 1);\n var stderr = FS.open('/dev/stderr', 1);\n },\n staticInit() {\n FS.nameTable = new Array(4096);\n FS.mount(MEMFS, {}, '/');\n FS.createDefaultDirectories();\n FS.createDefaultDevices();\n FS.createSpecialDirectories();\n FS.filesystems = { MEMFS };\n },\n init(input, output, error) {\n FS.initialized = true;\n input ??= Module['stdin'];\n output ??= Module['stdout'];\n error ??= Module['stderr'];\n FS.createStandardStreams(input, output, error);\n },\n quit() {\n FS.initialized = false;\n for (var stream of FS.streams) {\n if (stream) {\n FS.close(stream);\n }\n }\n },\n findObject(path, dontResolveLastLink) {\n var ret = FS.analyzePath(path, dontResolveLastLink);\n if (!ret.exists) {\n return null;\n }\n return ret.object;\n },\n analyzePath(path, dontResolveLastLink) {\n try {\n var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n path = lookup.path;\n } catch (e) {}\n var ret = {\n isRoot: false,\n exists: false,\n error: 0,\n name: null,\n path: null,\n object: null,\n parentExists: false,\n parentPath: null,\n parentObject: null,\n };\n try {\n var lookup = FS.lookupPath(path, { parent: true });\n ret.parentExists = true;\n ret.parentPath = lookup.path;\n ret.parentObject = lookup.node;\n ret.name = PATH.basename(path);\n lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n ret.exists = true;\n ret.path = lookup.path;\n ret.object = lookup.node;\n ret.name = lookup.node.name;\n ret.isRoot = lookup.path === '/';\n } catch (e) {\n ret.error = e.errno;\n }\n return ret;\n },\n createPath(parent, path, canRead, canWrite) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n var parts = path.split('/').reverse();\n while (parts.length) {\n var part = parts.pop();\n if (!part) continue;\n var current = PATH.join2(parent, part);\n try {\n FS.mkdir(current);\n } catch (e) {\n if (e.errno != 20) throw e;\n }\n parent = current;\n }\n return current;\n },\n createFile(parent, name, properties, canRead, canWrite) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(canRead, canWrite);\n return FS.create(path, mode);\n },\n createDataFile(parent, name, data, canRead, canWrite, canOwn) {\n var path = name;\n if (parent) {\n parent = typeof parent == 'string' ? parent : FS.getPath(parent);\n path = name ? PATH.join2(parent, name) : parent;\n }\n var mode = FS_getMode(canRead, canWrite);\n var node = FS.create(path, mode);\n if (data) {\n if (typeof data == 'string') {\n var arr = new Array(data.length);\n for (var i = 0, len = data.length; i < len; ++i)\n arr[i] = data.charCodeAt(i);\n data = arr;\n }\n FS.chmod(node, mode | 146);\n var stream = FS.open(node, 577);\n FS.write(stream, data, 0, data.length, 0, canOwn);\n FS.close(stream);\n FS.chmod(node, mode);\n }\n },\n createDevice(parent, name, input, output) {\n var path = PATH.join2(\n typeof parent == 'string' ? parent : FS.getPath(parent),\n name\n );\n var mode = FS_getMode(!!input, !!output);\n FS.createDevice.major ??= 64;\n var dev = FS.makedev(FS.createDevice.major++, 0);\n FS.registerDevice(dev, {\n open(stream) {\n stream.seekable = false;\n },\n close(stream) {\n if (output?.buffer?.length) {\n output(10);\n }\n },\n read(stream, buffer, offset, length, pos) {\n var bytesRead = 0;\n for (var i = 0; i < length; i++) {\n var result;\n try {\n result = input();\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n if (result === undefined && bytesRead === 0) {\n throw new FS.ErrnoError(6);\n }\n if (result === null || result === undefined) break;\n bytesRead++;\n buffer[offset + i] = result;\n }\n if (bytesRead) {\n stream.node.atime = Date.now();\n }\n return bytesRead;\n },\n write(stream, buffer, offset, length, pos) {\n for (var i = 0; i < length; i++) {\n try {\n output(buffer[offset + i]);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n if (length) {\n stream.node.mtime = stream.node.ctime = Date.now();\n }\n return i;\n },\n });\n return FS.mkdev(path, mode, dev);\n },\n forceLoadFile(obj) {\n if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n if (globalThis.XMLHttpRequest) {\n abort(\n '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.'\n );\n } else {\n try {\n obj.contents = readBinary(obj.url);\n } catch (e) {\n throw new FS.ErrnoError(29);\n }\n }\n },\n createLazyFile(parent, name, url, canRead, canWrite) {\n class LazyUint8Array {\n lengthKnown = false;\n chunks = [];\n get(idx) {\n if (idx > this.length - 1 || idx < 0) {\n return undefined;\n }\n var chunkOffset = idx % this.chunkSize;\n var chunkNum = (idx / this.chunkSize) | 0;\n return this.getter(chunkNum)[chunkOffset];\n }\n setDataGetter(getter) {\n this.getter = getter;\n }\n cacheLength() {\n var xhr = new XMLHttpRequest();\n xhr.open('HEAD', url, false);\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n var datalength = Number(xhr.getResponseHeader('Content-length'));\n var header;\n var hasByteServing =\n (header = xhr.getResponseHeader('Accept-Ranges')) &&\n header === 'bytes';\n var usesGzip =\n (header = xhr.getResponseHeader('Content-Encoding')) &&\n header === 'gzip';\n var chunkSize = 1024 * 1024;\n if (!hasByteServing) chunkSize = datalength;\n var doXHR = (from, to) => {\n if (from > to)\n abort(\n 'invalid range (' + from + ', ' + to + ') or no bytes requested!'\n );\n if (to > datalength - 1)\n abort('only ' + datalength + ' bytes available! programmer error!');\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, false);\n if (datalength !== chunkSize)\n xhr.setRequestHeader('Range', 'bytes=' + from + '-' + to);\n xhr.responseType = 'arraybuffer';\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=x-user-defined');\n }\n xhr.send(null);\n if (!((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304))\n abort(\"Couldn't load \" + url + '. Status: ' + xhr.status);\n if (xhr.response !== undefined) {\n return new Uint8Array(xhr.response || []);\n }\n return intArrayFromString(xhr.responseText || '', true);\n };\n var lazyArray = this;\n lazyArray.setDataGetter((chunkNum) => {\n var start = chunkNum * chunkSize;\n var end = (chunkNum + 1) * chunkSize - 1;\n end = Math.min(end, datalength - 1);\n if (typeof lazyArray.chunks[chunkNum] == 'undefined') {\n lazyArray.chunks[chunkNum] = doXHR(start, end);\n }\n if (typeof lazyArray.chunks[chunkNum] == 'undefined')\n abort('doXHR failed!');\n return lazyArray.chunks[chunkNum];\n });\n if (usesGzip || !datalength) {\n chunkSize = datalength = 1;\n datalength = this.getter(0).length;\n chunkSize = datalength;\n out(\n 'LazyFiles on gzip forces download of the whole file when length is accessed'\n );\n }\n this._length = datalength;\n this._chunkSize = chunkSize;\n this.lengthKnown = true;\n }\n get length() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._length;\n }\n get chunkSize() {\n if (!this.lengthKnown) {\n this.cacheLength();\n }\n return this._chunkSize;\n }\n }\n if (globalThis.XMLHttpRequest) {\n if (!ENVIRONMENT_IS_WORKER)\n abort(\n 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'\n );\n var lazyArray = new LazyUint8Array();\n var properties = { isDevice: false, contents: lazyArray };\n } else {\n var properties = { isDevice: false, url };\n }\n var node = FS.createFile(parent, name, properties, canRead, canWrite);\n if (properties.contents) {\n node.contents = properties.contents;\n } else if (properties.url) {\n node.contents = null;\n node.url = properties.url;\n }\n Object.defineProperties(node, {\n usedBytes: {\n get: function () {\n return this.contents.length;\n },\n },\n });\n var stream_ops = {};\n for (const [key, fn] of Object.entries(node.stream_ops)) {\n stream_ops[key] = (...args) => {\n FS.forceLoadFile(node);\n return fn(...args);\n };\n }\n function writeChunks(stream, buffer, offset, length, position) {\n var contents = stream.node.contents;\n if (position >= contents.length) return 0;\n var size = Math.min(contents.length - position, length);\n if (contents.slice) {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents[position + i];\n }\n } else {\n for (var i = 0; i < size; i++) {\n buffer[offset + i] = contents.get(position + i);\n }\n }\n return size;\n }\n stream_ops.read = (stream, buffer, offset, length, position) => {\n FS.forceLoadFile(node);\n return writeChunks(stream, buffer, offset, length, position);\n };\n stream_ops.mmap = (stream, length, position, prot, flags) => {\n FS.forceLoadFile(node);\n var ptr = mmapAlloc(length);\n if (!ptr) {\n throw new FS.ErrnoError(48);\n }\n writeChunks(stream, HEAP8, ptr, length, position);\n return { ptr, allocated: true };\n };\n node.stream_ops = stream_ops;\n return node;\n },\n};\nvar UTF8ToString = (ptr, maxBytesToRead, ignoreNul) => {\n ptr >>>= 0;\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead, ignoreNul) : '';\n};\nvar SYSCALLS = {\n DEFAULT_POLLMASK: 5,\n calculateAt(dirfd, path, allowEmpty) {\n if (PATH.isAbs(path)) {\n return path;\n }\n var dir;\n if (dirfd === -100) {\n dir = FS.cwd();\n } else {\n var dirstream = SYSCALLS.getStreamFromFD(dirfd);\n dir = dirstream.path;\n }\n if (path.length == 0) {\n if (!allowEmpty) {\n throw new FS.ErrnoError(44);\n }\n return dir;\n }\n return dir + '/' + path;\n },\n writeStat(buf, stat) {\n HEAPU32[(buf >>> 2) >>> 0] = stat.dev;\n HEAPU32[((buf + 4) >>> 2) >>> 0] = stat.mode;\n HEAPU32[((buf + 8) >>> 2) >>> 0] = stat.nlink;\n HEAPU32[((buf + 12) >>> 2) >>> 0] = stat.uid;\n HEAPU32[((buf + 16) >>> 2) >>> 0] = stat.gid;\n HEAPU32[((buf + 20) >>> 2) >>> 0] = stat.rdev;\n HEAP64[((buf + 24) >>> 3) >>> 0] = BigInt(stat.size);\n HEAP32[((buf + 32) >>> 2) >>> 0] = 4096;\n HEAP32[((buf + 36) >>> 2) >>> 0] = stat.blocks;\n var atime = stat.atime.getTime();\n var mtime = stat.mtime.getTime();\n var ctime = stat.ctime.getTime();\n HEAP64[((buf + 40) >>> 3) >>> 0] = BigInt(Math.floor(atime / 1e3));\n HEAPU32[((buf + 48) >>> 2) >>> 0] = (atime % 1e3) * 1e3 * 1e3;\n HEAP64[((buf + 56) >>> 3) >>> 0] = BigInt(Math.floor(mtime / 1e3));\n HEAPU32[((buf + 64) >>> 2) >>> 0] = (mtime % 1e3) * 1e3 * 1e3;\n HEAP64[((buf + 72) >>> 3) >>> 0] = BigInt(Math.floor(ctime / 1e3));\n HEAPU32[((buf + 80) >>> 2) >>> 0] = (ctime % 1e3) * 1e3 * 1e3;\n HEAP64[((buf + 88) >>> 3) >>> 0] = BigInt(stat.ino);\n return 0;\n },\n writeStatFs(buf, stats) {\n HEAPU32[((buf + 4) >>> 2) >>> 0] = stats.bsize;\n HEAPU32[((buf + 60) >>> 2) >>> 0] = stats.bsize;\n HEAP64[((buf + 8) >>> 3) >>> 0] = BigInt(stats.blocks);\n HEAP64[((buf + 16) >>> 3) >>> 0] = BigInt(stats.bfree);\n HEAP64[((buf + 24) >>> 3) >>> 0] = BigInt(stats.bavail);\n HEAP64[((buf + 32) >>> 3) >>> 0] = BigInt(stats.files);\n HEAP64[((buf + 40) >>> 3) >>> 0] = BigInt(stats.ffree);\n HEAPU32[((buf + 48) >>> 2) >>> 0] = stats.fsid;\n HEAPU32[((buf + 64) >>> 2) >>> 0] = stats.flags;\n HEAPU32[((buf + 56) >>> 2) >>> 0] = stats.namelen;\n },\n doMsync(addr, stream, len, flags, offset) {\n if (!FS.isFile(stream.node.mode)) {\n throw new FS.ErrnoError(43);\n }\n if (flags & 2) {\n return 0;\n }\n var buffer = HEAPU8.slice(addr, addr + len);\n FS.msync(stream, buffer, offset, len, flags);\n },\n getStreamFromFD(fd) {\n var stream = FS.getStreamChecked(fd);\n return stream;\n },\n varargs: undefined,\n getStr(ptr) {\n var ret = UTF8ToString(ptr);\n return ret;\n },\n};\nfunction ___syscall_fcntl64(fd, cmd, varargs) {\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (cmd) {\n case 0: {\n var arg = syscallGetVarargI();\n if (arg < 0) {\n return -28;\n }\n while (FS.streams[arg]) {\n arg++;\n }\n var newStream;\n newStream = FS.dupStream(stream, arg);\n return newStream.fd;\n }\n case 1:\n case 2:\n return 0;\n case 3:\n return stream.flags;\n case 4: {\n var arg = syscallGetVarargI();\n stream.flags |= arg;\n return 0;\n }\n case 12: {\n var arg = syscallGetVarargP();\n var offset = 0;\n HEAP16[((arg + offset) >>> 1) >>> 0] = 2;\n return 0;\n }\n case 13:\n case 14:\n return 0;\n }\n return -28;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_ioctl(fd, op, varargs) {\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n switch (op) {\n case 21509: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21505: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcgets) {\n var termios = stream.tty.ops.ioctl_tcgets(stream);\n var argp = syscallGetVarargP();\n HEAP32[(argp >>> 2) >>> 0] = termios.c_iflag || 0;\n HEAP32[((argp + 4) >>> 2) >>> 0] = termios.c_oflag || 0;\n HEAP32[((argp + 8) >>> 2) >>> 0] = termios.c_cflag || 0;\n HEAP32[((argp + 12) >>> 2) >>> 0] = termios.c_lflag || 0;\n for (var i = 0; i < 32; i++) {\n HEAP8[(argp + i + 17) >>> 0] = termios.c_cc[i] || 0;\n }\n return 0;\n }\n return 0;\n }\n case 21510:\n case 21511:\n case 21512: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21506:\n case 21507:\n case 21508: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tcsets) {\n var argp = syscallGetVarargP();\n var c_iflag = HEAP32[(argp >>> 2) >>> 0];\n var c_oflag = HEAP32[((argp + 4) >>> 2) >>> 0];\n var c_cflag = HEAP32[((argp + 8) >>> 2) >>> 0];\n var c_lflag = HEAP32[((argp + 12) >>> 2) >>> 0];\n var c_cc = [];\n for (var i = 0; i < 32; i++) {\n c_cc.push(HEAP8[(argp + i + 17) >>> 0]);\n }\n return stream.tty.ops.ioctl_tcsets(stream.tty, op, {\n c_iflag,\n c_oflag,\n c_cflag,\n c_lflag,\n c_cc,\n });\n }\n return 0;\n }\n case 21519: {\n if (!stream.tty) return -59;\n var argp = syscallGetVarargP();\n HEAP32[(argp >>> 2) >>> 0] = 0;\n return 0;\n }\n case 21520: {\n if (!stream.tty) return -59;\n return -28;\n }\n case 21537:\n case 21531: {\n var argp = syscallGetVarargP();\n return FS.ioctl(stream, op, argp);\n }\n case 21523: {\n if (!stream.tty) return -59;\n if (stream.tty.ops.ioctl_tiocgwinsz) {\n var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);\n var argp = syscallGetVarargP();\n HEAP16[(argp >>> 1) >>> 0] = winsize[0];\n HEAP16[((argp + 2) >>> 1) >>> 0] = winsize[1];\n }\n return 0;\n }\n case 21524: {\n if (!stream.tty) return -59;\n return 0;\n }\n case 21515: {\n if (!stream.tty) return -59;\n return 0;\n }\n default:\n return -28;\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction ___syscall_openat(dirfd, path, flags, varargs) {\n path >>>= 0;\n varargs >>>= 0;\n SYSCALLS.varargs = varargs;\n try {\n path = SYSCALLS.getStr(path);\n path = SYSCALLS.calculateAt(dirfd, path);\n var mode = varargs ? syscallGetVarargI() : 0;\n return FS.open(path, flags, mode).fd;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar __abort_js = () => abort('');\nfunction __mmap_js(len, prot, flags, fd, offset, allocated, addr) {\n len >>>= 0;\n offset = bigintToI53Checked(offset);\n allocated >>>= 0;\n addr >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var res = FS.mmap(stream, len, offset, prot, flags);\n var ptr = res.ptr;\n HEAP32[(allocated >>> 2) >>> 0] = res.allocated;\n HEAPU32[(addr >>> 2) >>> 0] = ptr;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nfunction __munmap_js(addr, len, prot, flags, fd, offset) {\n addr >>>= 0;\n len >>>= 0;\n offset = bigintToI53Checked(offset);\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n if (prot & 2) {\n SYSCALLS.doMsync(addr, stream, len, flags, offset);\n }\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return -e.errno;\n }\n}\nvar stringToUTF8 = (str, outPtr, maxBytesToWrite) =>\n stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);\nvar __tzset_js = function (timezone, daylight, std_name, dst_name) {\n timezone >>>= 0;\n daylight >>>= 0;\n std_name >>>= 0;\n dst_name >>>= 0;\n var currentYear = new Date().getFullYear();\n var winter = new Date(currentYear, 0, 1);\n var summer = new Date(currentYear, 6, 1);\n var winterOffset = winter.getTimezoneOffset();\n var summerOffset = summer.getTimezoneOffset();\n var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n HEAPU32[(timezone >>> 2) >>> 0] = stdTimezoneOffset * 60;\n HEAP32[(daylight >>> 2) >>> 0] = Number(winterOffset != summerOffset);\n var extractZone = (timezoneOffset) => {\n var sign = timezoneOffset >= 0 ? '-' : '+';\n var absOffset = Math.abs(timezoneOffset);\n var hours = String(Math.floor(absOffset / 60)).padStart(2, '0');\n var minutes = String(absOffset % 60).padStart(2, '0');\n return `UTC${sign}${hours}${minutes}`;\n };\n var winterName = extractZone(winterOffset);\n var summerName = extractZone(summerOffset);\n if (summerOffset < winterOffset) {\n stringToUTF8(winterName, std_name, 17);\n stringToUTF8(summerName, dst_name, 17);\n } else {\n stringToUTF8(winterName, dst_name, 17);\n stringToUTF8(summerName, std_name, 17);\n }\n};\nvar _emscripten_get_now = () => performance.now();\nvar _emscripten_date_now = () => Date.now();\nvar nowIsMonotonic = 1;\nvar checkWasiClock = (clock_id) => clock_id >= 0 && clock_id <= 3;\nfunction _clock_time_get(clk_id, ignored_precision, ptime) {\n ignored_precision = bigintToI53Checked(ignored_precision);\n ptime >>>= 0;\n if (!checkWasiClock(clk_id)) {\n return 28;\n }\n var now;\n if (clk_id === 0) {\n now = _emscripten_date_now();\n } else if (nowIsMonotonic) {\n now = _emscripten_get_now();\n } else {\n return 52;\n }\n var nsec = Math.round(now * 1e3 * 1e3);\n HEAP64[(ptime >>> 3) >>> 0] = BigInt(nsec);\n return 0;\n}\nvar getHeapMax = () => 4294901760;\nfunction _emscripten_get_heap_max() {\n return getHeapMax();\n}\nvar _emscripten_has_asyncify = () => 1;\nvar growMemory = (size) => {\n var oldHeapSize = wasmMemory.buffer.byteLength;\n var pages = ((size - oldHeapSize + 65535) / 65536) | 0;\n try {\n wasmMemory.grow(pages);\n updateMemoryViews();\n return 1;\n } catch (e) {}\n};\nfunction _emscripten_resize_heap(requestedSize) {\n requestedSize >>>= 0;\n var oldSize = HEAPU8.length;\n var maxHeapSize = getHeapMax();\n if (requestedSize > maxHeapSize) {\n return false;\n }\n for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);\n overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);\n var newSize = Math.min(\n maxHeapSize,\n alignMemory(Math.max(requestedSize, overGrownHeapSize), 65536)\n );\n var replacement = growMemory(newSize);\n if (replacement) {\n return true;\n }\n }\n return false;\n}\nvar stackAlloc = (sz) => __emscripten_stack_alloc(sz);\nvar stringToUTF8OnStack = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = stackAlloc(size);\n stringToUTF8(str, ret, size);\n return ret;\n};\nvar writeI53ToI64 = (ptr, num) => {\n HEAPU32[(ptr >>> 2) >>> 0] = num;\n var lower = HEAPU32[(ptr >>> 2) >>> 0];\n HEAPU32[((ptr + 4) >>> 2) >>> 0] = (num - lower) / 4294967296;\n};\nvar stringToNewUTF8 = (str) => {\n var size = lengthBytesUTF8(str) + 1;\n var ret = _malloc(size);\n if (ret) stringToUTF8(str, ret, size);\n return ret;\n};\nvar readI53FromI64 = (ptr) =>\n HEAPU32[(ptr >>> 2) >>> 0] + HEAP32[((ptr + 4) >>> 2) >>> 0] * 4294967296;\nvar WebGPU = {\n Internals: {\n jsObjects: [],\n jsObjectInsert: (ptr, jsObject) => {\n ptr >>>= 0;\n WebGPU.Internals.jsObjects[ptr] = jsObject;\n },\n bufferOnUnmaps: [],\n futures: [],\n futureInsert: (futureId, promise) => {\n WebGPU.Internals.futures[futureId] = new Promise((resolve) =>\n promise.finally(() => resolve(futureId))\n );\n },\n },\n getJsObject: (ptr) => {\n if (!ptr) return undefined;\n ptr >>>= 0;\n return WebGPU.Internals.jsObjects[ptr];\n },\n importJsAdapter: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateAdapter(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroup: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroup(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBindGroupLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateBindGroupLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsBuffer: (buffer, parentPtr = 0) => {\n assert(buffer.mapState === 'unmapped');\n var bufferPtr = _emwgpuCreateBuffer(parentPtr);\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n return bufferPtr;\n },\n importJsCommandBuffer: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandBuffer(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsCommandEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateCommandEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsComputePipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateComputePipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsDevice: (device, parentPtr = 0) => {\n var queuePtr = _emwgpuCreateQueue(parentPtr);\n var devicePtr = _emwgpuCreateDevice(parentPtr, queuePtr);\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n return devicePtr;\n },\n importJsExternalTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateExternalTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsPipelineLayout: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreatePipelineLayout(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQuerySet: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQuerySet(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsQueue: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateQueue(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundle: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundle(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderBundleEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderBundleEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPassEncoder: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPassEncoder(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsRenderPipeline: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateRenderPipeline(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSampler: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSampler(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsShaderModule: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateShaderModule(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsSurface: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateSurface(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTexture: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTexture(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n importJsTextureView: (obj, parentPtr = 0) => {\n var ptr = _emwgpuCreateTextureView(parentPtr);\n WebGPU.Internals.jsObjects[ptr] = obj;\n return ptr;\n },\n errorCallback: (callback, type, message, userdata) => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(message);\n ((a1, a2, a3) => dynCall_viii(callback, a1, a2, a3))(\n type,\n messagePtr,\n userdata\n );\n stackRestore(sp);\n },\n iterateExtensions: (root, handlers) => {\n for (\n var ptr = HEAPU32[(root >>> 2) >>> 0];\n ptr;\n ptr = HEAPU32[(ptr >>> 2) >>> 0]\n ) {\n var sType = HEAP32[((ptr + 4) >>> 2) >>> 0];\n var handler = handlers[sType](ptr);\n }\n },\n setStringView: (ptr, data, length) => {\n HEAPU32[(ptr >>> 2) >>> 0] = data;\n HEAPU32[((ptr + 4) >>> 2) >>> 0] = length;\n },\n makeStringFromStringView: (stringViewPtr) => {\n var ptr = HEAPU32[(stringViewPtr >>> 2) >>> 0];\n var length = HEAPU32[((stringViewPtr + 4) >>> 2) >>> 0];\n return UTF8ToString(ptr, length);\n },\n makeStringFromOptionalStringView: (stringViewPtr) => {\n var ptr = HEAPU32[(stringViewPtr >>> 2) >>> 0];\n var length = HEAPU32[((stringViewPtr + 4) >>> 2) >>> 0];\n if (!ptr) {\n if (length === 0) {\n return '';\n }\n return undefined;\n }\n return UTF8ToString(ptr, length);\n },\n makeColor: (ptr) => ({\n r: HEAPF64[(ptr >>> 3) >>> 0],\n g: HEAPF64[((ptr + 8) >>> 3) >>> 0],\n b: HEAPF64[((ptr + 16) >>> 3) >>> 0],\n a: HEAPF64[((ptr + 24) >>> 3) >>> 0],\n }),\n makeExtent3D: (ptr) => ({\n width: HEAPU32[(ptr >>> 2) >>> 0],\n height: HEAPU32[((ptr + 4) >>> 2) >>> 0],\n depthOrArrayLayers: HEAPU32[((ptr + 8) >>> 2) >>> 0],\n }),\n makeOrigin3D: (ptr) => ({\n x: HEAPU32[(ptr >>> 2) >>> 0],\n y: HEAPU32[((ptr + 4) >>> 2) >>> 0],\n z: HEAPU32[((ptr + 8) >>> 2) >>> 0],\n }),\n makeTexelCopyTextureInfo: (ptr) => ({\n texture: WebGPU.getJsObject(HEAPU32[(ptr >>> 2) >>> 0]),\n mipLevel: HEAPU32[((ptr + 4) >>> 2) >>> 0],\n origin: WebGPU.makeOrigin3D(ptr + 8),\n aspect: WebGPU.TextureAspect[HEAP32[((ptr + 20) >>> 2) >>> 0]],\n }),\n makeTexelCopyBufferLayout: (ptr) => {\n var bytesPerRow = HEAPU32[((ptr + 8) >>> 2) >>> 0];\n var rowsPerImage = HEAPU32[((ptr + 12) >>> 2) >>> 0];\n return {\n offset: readI53FromI64(ptr),\n bytesPerRow: bytesPerRow === 4294967295 ? undefined : bytesPerRow,\n rowsPerImage: rowsPerImage === 4294967295 ? undefined : rowsPerImage,\n };\n },\n makeTexelCopyBufferInfo: (ptr) => {\n var layoutPtr = ptr + 0;\n var bufferCopyView = WebGPU.makeTexelCopyBufferLayout(layoutPtr);\n bufferCopyView['buffer'] = WebGPU.getJsObject(\n HEAPU32[((ptr + 16) >>> 2) >>> 0]\n );\n return bufferCopyView;\n },\n makePassTimestampWrites: (ptr) => {\n if (ptr === 0) return undefined;\n return {\n querySet: WebGPU.getJsObject(HEAPU32[((ptr + 4) >>> 2) >>> 0]),\n beginningOfPassWriteIndex: HEAPU32[((ptr + 8) >>> 2) >>> 0],\n endOfPassWriteIndex: HEAPU32[((ptr + 12) >>> 2) >>> 0],\n };\n },\n makePipelineConstants: (constantCount, constantsPtr) => {\n if (!constantCount) return;\n var constants = {};\n for (var i = 0; i < constantCount; ++i) {\n var entryPtr = constantsPtr + 24 * i;\n var key = WebGPU.makeStringFromStringView(entryPtr + 4);\n constants[key] = HEAPF64[((entryPtr + 16) >>> 3) >>> 0];\n }\n return constants;\n },\n makePipelineLayout: (layoutPtr) => {\n if (!layoutPtr) return 'auto';\n return WebGPU.getJsObject(layoutPtr);\n },\n makeComputeState: (ptr) => {\n if (!ptr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(HEAPU32[((ptr + 4) >>> 2) >>> 0]),\n constants: WebGPU.makePipelineConstants(\n HEAPU32[((ptr + 16) >>> 2) >>> 0],\n HEAPU32[((ptr + 20) >>> 2) >>> 0]\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(ptr + 8),\n };\n return desc;\n },\n makeComputePipelineDesc: (descriptor) => {\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n layout: WebGPU.makePipelineLayout(\n HEAPU32[((descriptor + 12) >>> 2) >>> 0]\n ),\n compute: WebGPU.makeComputeState(descriptor + 16),\n };\n return desc;\n },\n makeRenderPipelineDesc: (descriptor) => {\n function makePrimitiveState(psPtr) {\n if (!psPtr) return undefined;\n return {\n topology: WebGPU.PrimitiveTopology[HEAP32[((psPtr + 4) >>> 2) >>> 0]],\n stripIndexFormat: WebGPU.IndexFormat[HEAP32[((psPtr + 8) >>> 2) >>> 0]],\n frontFace: WebGPU.FrontFace[HEAP32[((psPtr + 12) >>> 2) >>> 0]],\n cullMode: WebGPU.CullMode[HEAP32[((psPtr + 16) >>> 2) >>> 0]],\n unclippedDepth: !!HEAPU32[((psPtr + 20) >>> 2) >>> 0],\n };\n }\n function makeBlendComponent(bdPtr) {\n if (!bdPtr) return undefined;\n return {\n operation: WebGPU.BlendOperation[HEAP32[(bdPtr >>> 2) >>> 0]],\n srcFactor: WebGPU.BlendFactor[HEAP32[((bdPtr + 4) >>> 2) >>> 0]],\n dstFactor: WebGPU.BlendFactor[HEAP32[((bdPtr + 8) >>> 2) >>> 0]],\n };\n }\n function makeBlendState(bsPtr) {\n if (!bsPtr) return undefined;\n return {\n alpha: makeBlendComponent(bsPtr + 12),\n color: makeBlendComponent(bsPtr + 0),\n };\n }\n function makeColorState(csPtr) {\n var format = WebGPU.TextureFormat[HEAP32[((csPtr + 4) >>> 2) >>> 0]];\n return format\n ? {\n format,\n blend: makeBlendState(HEAPU32[((csPtr + 8) >>> 2) >>> 0]),\n writeMask: HEAPU32[((csPtr + 16) >>> 2) >>> 0],\n }\n : undefined;\n }\n function makeColorStates(count, csArrayPtr) {\n var states = [];\n for (var i = 0; i < count; ++i) {\n states.push(makeColorState(csArrayPtr + 24 * i));\n }\n return states;\n }\n function makeStencilStateFace(ssfPtr) {\n return {\n compare: WebGPU.CompareFunction[HEAP32[(ssfPtr >>> 2) >>> 0]],\n failOp: WebGPU.StencilOperation[HEAP32[((ssfPtr + 4) >>> 2) >>> 0]],\n depthFailOp:\n WebGPU.StencilOperation[HEAP32[((ssfPtr + 8) >>> 2) >>> 0]],\n passOp: WebGPU.StencilOperation[HEAP32[((ssfPtr + 12) >>> 2) >>> 0]],\n };\n }\n function makeDepthStencilState(dssPtr) {\n if (!dssPtr) return undefined;\n return {\n format: WebGPU.TextureFormat[HEAP32[((dssPtr + 4) >>> 2) >>> 0]],\n depthWriteEnabled: !!HEAPU32[((dssPtr + 8) >>> 2) >>> 0],\n depthCompare:\n WebGPU.CompareFunction[HEAP32[((dssPtr + 12) >>> 2) >>> 0]],\n stencilFront: makeStencilStateFace(dssPtr + 16),\n stencilBack: makeStencilStateFace(dssPtr + 32),\n stencilReadMask: HEAPU32[((dssPtr + 48) >>> 2) >>> 0],\n stencilWriteMask: HEAPU32[((dssPtr + 52) >>> 2) >>> 0],\n depthBias: HEAP32[((dssPtr + 56) >>> 2) >>> 0],\n depthBiasSlopeScale: HEAPF32[((dssPtr + 60) >>> 2) >>> 0],\n depthBiasClamp: HEAPF32[((dssPtr + 64) >>> 2) >>> 0],\n };\n }\n function makeVertexAttribute(vaPtr) {\n return {\n format: WebGPU.VertexFormat[HEAP32[((vaPtr + 4) >>> 2) >>> 0]],\n offset: readI53FromI64(vaPtr + 8),\n shaderLocation: HEAPU32[((vaPtr + 16) >>> 2) >>> 0],\n };\n }\n function makeVertexAttributes(count, vaArrayPtr) {\n var vas = [];\n for (var i = 0; i < count; ++i) {\n vas.push(makeVertexAttribute(vaArrayPtr + i * 24));\n }\n return vas;\n }\n function makeVertexBuffer(vbPtr) {\n if (!vbPtr) return undefined;\n var stepMode = WebGPU.VertexStepMode[HEAP32[((vbPtr + 4) >>> 2) >>> 0]];\n var attributeCount = HEAPU32[((vbPtr + 16) >>> 2) >>> 0];\n if (!stepMode && !attributeCount) {\n return null;\n }\n return {\n arrayStride: readI53FromI64(vbPtr + 8),\n stepMode,\n attributes: makeVertexAttributes(\n attributeCount,\n HEAPU32[((vbPtr + 20) >>> 2) >>> 0]\n ),\n };\n }\n function makeVertexBuffers(count, vbArrayPtr) {\n if (!count) return undefined;\n var vbs = [];\n for (var i = 0; i < count; ++i) {\n vbs.push(makeVertexBuffer(vbArrayPtr + i * 24));\n }\n return vbs;\n }\n function makeVertexState(viPtr) {\n if (!viPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(HEAPU32[((viPtr + 4) >>> 2) >>> 0]),\n constants: WebGPU.makePipelineConstants(\n HEAPU32[((viPtr + 16) >>> 2) >>> 0],\n HEAPU32[((viPtr + 20) >>> 2) >>> 0]\n ),\n buffers: makeVertexBuffers(\n HEAPU32[((viPtr + 24) >>> 2) >>> 0],\n HEAPU32[((viPtr + 28) >>> 2) >>> 0]\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(viPtr + 8),\n };\n return desc;\n }\n function makeMultisampleState(msPtr) {\n if (!msPtr) return undefined;\n return {\n count: HEAPU32[((msPtr + 4) >>> 2) >>> 0],\n mask: HEAPU32[((msPtr + 8) >>> 2) >>> 0],\n alphaToCoverageEnabled: !!HEAPU32[((msPtr + 12) >>> 2) >>> 0],\n };\n }\n function makeFragmentState(fsPtr) {\n if (!fsPtr) return undefined;\n var desc = {\n module: WebGPU.getJsObject(HEAPU32[((fsPtr + 4) >>> 2) >>> 0]),\n constants: WebGPU.makePipelineConstants(\n HEAPU32[((fsPtr + 16) >>> 2) >>> 0],\n HEAPU32[((fsPtr + 20) >>> 2) >>> 0]\n ),\n targets: makeColorStates(\n HEAPU32[((fsPtr + 24) >>> 2) >>> 0],\n HEAPU32[((fsPtr + 28) >>> 2) >>> 0]\n ),\n entryPoint: WebGPU.makeStringFromOptionalStringView(fsPtr + 8),\n };\n return desc;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n layout: WebGPU.makePipelineLayout(\n HEAPU32[((descriptor + 12) >>> 2) >>> 0]\n ),\n vertex: makeVertexState(descriptor + 16),\n primitive: makePrimitiveState(descriptor + 48),\n depthStencil: makeDepthStencilState(\n HEAPU32[((descriptor + 72) >>> 2) >>> 0]\n ),\n multisample: makeMultisampleState(descriptor + 76),\n fragment: makeFragmentState(HEAPU32[((descriptor + 92) >>> 2) >>> 0]),\n };\n return desc;\n },\n fillLimitStruct: (limits, limitsOutPtr) => {\n var nextInChainPtr = HEAPU32[(limitsOutPtr >>> 2) >>> 0];\n function setLimitValueU32(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n HEAPU32[((basePtr + limitOffset) >>> 2) >>> 0] = limitValue;\n }\n function setLimitValueU64(name, basePtr, limitOffset, fallbackValue = 0) {\n var limitValue = limits[name] ?? fallbackValue;\n writeI53ToI64(basePtr + limitOffset, limitValue);\n }\n setLimitValueU32('maxTextureDimension1D', limitsOutPtr, 4);\n setLimitValueU32('maxTextureDimension2D', limitsOutPtr, 8);\n setLimitValueU32('maxTextureDimension3D', limitsOutPtr, 12);\n setLimitValueU32('maxTextureArrayLayers', limitsOutPtr, 16);\n setLimitValueU32('maxBindGroups', limitsOutPtr, 20);\n setLimitValueU32('maxBindGroupsPlusVertexBuffers', limitsOutPtr, 24);\n setLimitValueU32('maxBindingsPerBindGroup', limitsOutPtr, 28);\n setLimitValueU32(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsOutPtr,\n 32\n );\n setLimitValueU32(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsOutPtr,\n 36\n );\n setLimitValueU32('maxSampledTexturesPerShaderStage', limitsOutPtr, 40);\n setLimitValueU32('maxSamplersPerShaderStage', limitsOutPtr, 44);\n setLimitValueU32('maxStorageBuffersPerShaderStage', limitsOutPtr, 48);\n setLimitValueU32('maxStorageTexturesPerShaderStage', limitsOutPtr, 52);\n setLimitValueU32('maxUniformBuffersPerShaderStage', limitsOutPtr, 56);\n setLimitValueU32('minUniformBufferOffsetAlignment', limitsOutPtr, 80);\n setLimitValueU32('minStorageBufferOffsetAlignment', limitsOutPtr, 84);\n setLimitValueU64('maxUniformBufferBindingSize', limitsOutPtr, 64);\n setLimitValueU64('maxStorageBufferBindingSize', limitsOutPtr, 72);\n setLimitValueU32('maxVertexBuffers', limitsOutPtr, 88);\n setLimitValueU64('maxBufferSize', limitsOutPtr, 96);\n setLimitValueU32('maxVertexAttributes', limitsOutPtr, 104);\n setLimitValueU32('maxVertexBufferArrayStride', limitsOutPtr, 108);\n setLimitValueU32('maxInterStageShaderVariables', limitsOutPtr, 112);\n setLimitValueU32('maxColorAttachments', limitsOutPtr, 116);\n setLimitValueU32('maxColorAttachmentBytesPerSample', limitsOutPtr, 120);\n setLimitValueU32('maxComputeWorkgroupStorageSize', limitsOutPtr, 124);\n setLimitValueU32('maxComputeInvocationsPerWorkgroup', limitsOutPtr, 128);\n setLimitValueU32('maxComputeWorkgroupSizeX', limitsOutPtr, 132);\n setLimitValueU32('maxComputeWorkgroupSizeY', limitsOutPtr, 136);\n setLimitValueU32('maxComputeWorkgroupSizeZ', limitsOutPtr, 140);\n setLimitValueU32('maxComputeWorkgroupsPerDimension', limitsOutPtr, 144);\n setLimitValueU32('maxImmediateSize', limitsOutPtr, 148);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[((nextInChainPtr + 4) >>> 2) >>> 0];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n setLimitValueU32(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 8,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 16,\n limits.maxStorageBuffersPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 12,\n limits.maxStorageTexturesPerShaderStage\n );\n setLimitValueU32(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 20,\n limits.maxStorageTexturesPerShaderStage\n );\n }\n },\n fillAdapterInfoStruct: (info, infoStruct) => {\n HEAPU32[((infoStruct + 52) >>> 2) >>> 0] = info.subgroupMinSize;\n HEAPU32[((infoStruct + 56) >>> 2) >>> 0] = info.subgroupMaxSize;\n var strs = info.vendor + info.architecture + info.device + info.description;\n var strPtr = stringToNewUTF8(strs);\n var vendorLen = lengthBytesUTF8(info.vendor);\n WebGPU.setStringView(infoStruct + 4, strPtr, vendorLen);\n strPtr += vendorLen;\n var architectureLen = lengthBytesUTF8(info.architecture);\n WebGPU.setStringView(infoStruct + 12, strPtr, architectureLen);\n strPtr += architectureLen;\n var deviceLen = lengthBytesUTF8(info.device);\n WebGPU.setStringView(infoStruct + 20, strPtr, deviceLen);\n strPtr += deviceLen;\n var descriptionLen = lengthBytesUTF8(info.description);\n WebGPU.setStringView(infoStruct + 28, strPtr, descriptionLen);\n strPtr += descriptionLen;\n HEAP32[((infoStruct + 36) >>> 2) >>> 0] = 2;\n var adapterType = info.isFallbackAdapter ? 3 : 4;\n HEAP32[((infoStruct + 40) >>> 2) >>> 0] = adapterType;\n HEAPU32[((infoStruct + 44) >>> 2) >>> 0] = 0;\n HEAPU32[((infoStruct + 48) >>> 2) >>> 0] = 0;\n },\n AddressMode: [, 'clamp-to-edge', 'repeat', 'mirror-repeat'],\n BlendFactor: [\n ,\n 'zero',\n 'one',\n 'src',\n 'one-minus-src',\n 'src-alpha',\n 'one-minus-src-alpha',\n 'dst',\n 'one-minus-dst',\n 'dst-alpha',\n 'one-minus-dst-alpha',\n 'src-alpha-saturated',\n 'constant',\n 'one-minus-constant',\n 'src1',\n 'one-minus-src1',\n 'src1-alpha',\n 'one-minus-src1-alpha',\n ],\n BlendOperation: [, 'add', 'subtract', 'reverse-subtract', 'min', 'max'],\n BufferBindingType: [, , 'uniform', 'storage', 'read-only-storage'],\n BufferMapState: [, 'unmapped', 'pending', 'mapped'],\n CompareFunction: [\n ,\n 'never',\n 'less',\n 'equal',\n 'less-equal',\n 'greater',\n 'not-equal',\n 'greater-equal',\n 'always',\n ],\n CompilationInfoRequestStatus: [, 'success', 'callback-cancelled'],\n ComponentSwizzle: [, '0', '1', 'r', 'g', 'b', 'a'],\n CompositeAlphaMode: [\n ,\n 'opaque',\n 'premultiplied',\n 'unpremultiplied',\n 'inherit',\n ],\n CullMode: [, 'none', 'front', 'back'],\n ErrorFilter: [, 'validation', 'out-of-memory', 'internal'],\n FeatureLevel: [, 'compatibility', 'core'],\n FeatureName: {\n 1: 'core-features-and-limits',\n 2: 'depth-clip-control',\n 3: 'depth32float-stencil8',\n 4: 'texture-compression-bc',\n 5: 'texture-compression-bc-sliced-3d',\n 6: 'texture-compression-etc2',\n 7: 'texture-compression-astc',\n 8: 'texture-compression-astc-sliced-3d',\n 9: 'timestamp-query',\n 10: 'indirect-first-instance',\n 11: 'shader-f16',\n 12: 'rg11b10ufloat-renderable',\n 13: 'bgra8unorm-storage',\n 14: 'float32-filterable',\n 15: 'float32-blendable',\n 16: 'clip-distances',\n 17: 'dual-source-blending',\n 18: 'subgroups',\n 19: 'texture-formats-tier1',\n 20: 'texture-formats-tier2',\n 21: 'primitive-index',\n 22: 'texture-component-swizzle',\n 327692: 'chromium-experimental-unorm16-texture-formats',\n 327729: 'chromium-experimental-multi-draw-indirect',\n },\n FilterMode: [, 'nearest', 'linear'],\n FrontFace: [, 'ccw', 'cw'],\n IndexFormat: [, 'uint16', 'uint32'],\n InstanceFeatureName: [\n ,\n 'timed-wait-any',\n 'shader-source-spirv',\n 'multiple-devices-per-adapter',\n ],\n LoadOp: [, 'load', 'clear'],\n MipmapFilterMode: [, 'nearest', 'linear'],\n OptionalBool: ['false', 'true'],\n PowerPreference: [, 'low-power', 'high-performance'],\n PredefinedColorSpace: [, 'srgb', 'display-p3'],\n PrimitiveTopology: [\n ,\n 'point-list',\n 'line-list',\n 'line-strip',\n 'triangle-list',\n 'triangle-strip',\n ],\n QueryType: [, 'occlusion', 'timestamp'],\n SamplerBindingType: [, , 'filtering', 'non-filtering', 'comparison'],\n Status: [, 'success', 'error'],\n StencilOperation: [\n ,\n 'keep',\n 'zero',\n 'replace',\n 'invert',\n 'increment-clamp',\n 'decrement-clamp',\n 'increment-wrap',\n 'decrement-wrap',\n ],\n StorageTextureAccess: [, , 'write-only', 'read-only', 'read-write'],\n StoreOp: [, 'store', 'discard'],\n SurfaceGetCurrentTextureStatus: [\n ,\n 'success-optimal',\n 'success-suboptimal',\n 'timeout',\n 'outdated',\n 'lost',\n 'error',\n ],\n TextureAspect: [, 'all', 'stencil-only', 'depth-only'],\n TextureDimension: [, '1d', '2d', '3d'],\n TextureFormat: [\n ,\n 'r8unorm',\n 'r8snorm',\n 'r8uint',\n 'r8sint',\n 'r16unorm',\n 'r16snorm',\n 'r16uint',\n 'r16sint',\n 'r16float',\n 'rg8unorm',\n 'rg8snorm',\n 'rg8uint',\n 'rg8sint',\n 'r32float',\n 'r32uint',\n 'r32sint',\n 'rg16unorm',\n 'rg16snorm',\n 'rg16uint',\n 'rg16sint',\n 'rg16float',\n 'rgba8unorm',\n 'rgba8unorm-srgb',\n 'rgba8snorm',\n 'rgba8uint',\n 'rgba8sint',\n 'bgra8unorm',\n 'bgra8unorm-srgb',\n 'rgb10a2uint',\n 'rgb10a2unorm',\n 'rg11b10ufloat',\n 'rgb9e5ufloat',\n 'rg32float',\n 'rg32uint',\n 'rg32sint',\n 'rgba16unorm',\n 'rgba16snorm',\n 'rgba16uint',\n 'rgba16sint',\n 'rgba16float',\n 'rgba32float',\n 'rgba32uint',\n 'rgba32sint',\n 'stencil8',\n 'depth16unorm',\n 'depth24plus',\n 'depth24plus-stencil8',\n 'depth32float',\n 'depth32float-stencil8',\n 'bc1-rgba-unorm',\n 'bc1-rgba-unorm-srgb',\n 'bc2-rgba-unorm',\n 'bc2-rgba-unorm-srgb',\n 'bc3-rgba-unorm',\n 'bc3-rgba-unorm-srgb',\n 'bc4-r-unorm',\n 'bc4-r-snorm',\n 'bc5-rg-unorm',\n 'bc5-rg-snorm',\n 'bc6h-rgb-ufloat',\n 'bc6h-rgb-float',\n 'bc7-rgba-unorm',\n 'bc7-rgba-unorm-srgb',\n 'etc2-rgb8unorm',\n 'etc2-rgb8unorm-srgb',\n 'etc2-rgb8a1unorm',\n 'etc2-rgb8a1unorm-srgb',\n 'etc2-rgba8unorm',\n 'etc2-rgba8unorm-srgb',\n 'eac-r11unorm',\n 'eac-r11snorm',\n 'eac-rg11unorm',\n 'eac-rg11snorm',\n 'astc-4x4-unorm',\n 'astc-4x4-unorm-srgb',\n 'astc-5x4-unorm',\n 'astc-5x4-unorm-srgb',\n 'astc-5x5-unorm',\n 'astc-5x5-unorm-srgb',\n 'astc-6x5-unorm',\n 'astc-6x5-unorm-srgb',\n 'astc-6x6-unorm',\n 'astc-6x6-unorm-srgb',\n 'astc-8x5-unorm',\n 'astc-8x5-unorm-srgb',\n 'astc-8x6-unorm',\n 'astc-8x6-unorm-srgb',\n 'astc-8x8-unorm',\n 'astc-8x8-unorm-srgb',\n 'astc-10x5-unorm',\n 'astc-10x5-unorm-srgb',\n 'astc-10x6-unorm',\n 'astc-10x6-unorm-srgb',\n 'astc-10x8-unorm',\n 'astc-10x8-unorm-srgb',\n 'astc-10x10-unorm',\n 'astc-10x10-unorm-srgb',\n 'astc-12x10-unorm',\n 'astc-12x10-unorm-srgb',\n 'astc-12x12-unorm',\n 'astc-12x12-unorm-srgb',\n ],\n TextureSampleType: [\n ,\n ,\n 'float',\n 'unfilterable-float',\n 'depth',\n 'sint',\n 'uint',\n ],\n TextureViewDimension: [, '1d', '2d', '2d-array', 'cube', 'cube-array', '3d'],\n ToneMappingMode: [, 'standard', 'extended'],\n VertexFormat: [\n ,\n 'uint8',\n 'uint8x2',\n 'uint8x4',\n 'sint8',\n 'sint8x2',\n 'sint8x4',\n 'unorm8',\n 'unorm8x2',\n 'unorm8x4',\n 'snorm8',\n 'snorm8x2',\n 'snorm8x4',\n 'uint16',\n 'uint16x2',\n 'uint16x4',\n 'sint16',\n 'sint16x2',\n 'sint16x4',\n 'unorm16',\n 'unorm16x2',\n 'unorm16x4',\n 'snorm16',\n 'snorm16x2',\n 'snorm16x4',\n 'float16',\n 'float16x2',\n 'float16x4',\n 'float32',\n 'float32x2',\n 'float32x3',\n 'float32x4',\n 'uint32',\n 'uint32x2',\n 'uint32x3',\n 'uint32x4',\n 'sint32',\n 'sint32x2',\n 'sint32x3',\n 'sint32x4',\n 'unorm10-10-10-2',\n 'unorm8x4-bgra',\n ],\n VertexStepMode: [, 'vertex', 'instance'],\n WGSLLanguageFeatureName: [\n ,\n 'readonly_and_readwrite_storage_textures',\n 'packed_4x8_integer_dot_product',\n 'unrestricted_pointer_parameters',\n 'pointer_composite_access',\n 'uniform_buffer_standard_layout',\n 'subgroup_id',\n 'texture_and_sampler_let',\n 'subgroup_uniformity',\n 'texture_formats_tier1',\n ],\n};\nvar emwgpuStringToInt_DeviceLostReason = {\n undefined: 1,\n unknown: 1,\n destroyed: 2,\n};\nvar handleException = (e) => {\n if (e instanceof ExitStatus || e == 'unwind') {\n return EXITSTATUS;\n }\n quit_(1, e);\n};\nvar runtimeKeepaliveCounter = 0;\nvar keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0;\nvar _proc_exit = (code) => {\n EXITSTATUS = code;\n if (!keepRuntimeAlive()) {\n Module['onExit']?.(code);\n ABORT = true;\n }\n quit_(code, new ExitStatus(code));\n};\nvar exitJS = (status, implicit) => {\n EXITSTATUS = status;\n _proc_exit(status);\n};\nvar _exit = exitJS;\nvar maybeExit = () => {\n if (!keepRuntimeAlive()) {\n try {\n _exit(EXITSTATUS);\n } catch (e) {\n handleException(e);\n }\n }\n};\nvar callUserCallback = (func) => {\n if (ABORT) {\n return;\n }\n try {\n func();\n maybeExit();\n } catch (e) {\n handleException(e);\n }\n};\nfunction _emwgpuAdapterRequestDevice(\n adapterPtr,\n futureId,\n deviceLostFutureId,\n devicePtr,\n queuePtr,\n descriptor\n) {\n adapterPtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n deviceLostFutureId = bigintToI53Checked(deviceLostFutureId);\n devicePtr >>>= 0;\n queuePtr >>>= 0;\n descriptor >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n var desc = {};\n if (descriptor) {\n var requiredFeatureCount = HEAPU32[((descriptor + 12) >>> 2) >>> 0];\n if (requiredFeatureCount) {\n var requiredFeaturesPtr = HEAPU32[((descriptor + 16) >>> 2) >>> 0];\n desc['requiredFeatures'] = Array.from(\n HEAPU32.subarray(\n (requiredFeaturesPtr >>> 2) >>> 0,\n ((requiredFeaturesPtr + requiredFeatureCount * 4) >>> 2) >>> 0\n ),\n (feature) => WebGPU.FeatureName[feature]\n );\n }\n var limitsPtr = HEAPU32[((descriptor + 20) >>> 2) >>> 0];\n if (limitsPtr) {\n var nextInChainPtr = HEAPU32[(limitsPtr >>> 2) >>> 0];\n var requiredLimits = {};\n function setLimitU32IfDefined(\n name,\n basePtr,\n limitOffset,\n ignoreIfZero = false\n ) {\n var ptr = basePtr + limitOffset;\n var value = HEAPU32[(ptr >>> 2) >>> 0];\n if (value != 4294967295 && (!ignoreIfZero || value != 0)) {\n requiredLimits[name] = value;\n }\n }\n function setLimitU64IfDefined(name, basePtr, limitOffset) {\n var ptr = basePtr + limitOffset;\n var limitPart1 = HEAPU32[(ptr >>> 2) >>> 0];\n var limitPart2 = HEAPU32[((ptr + 4) >>> 2) >>> 0];\n if (limitPart1 != 4294967295 || limitPart2 != 4294967295) {\n requiredLimits[name] = readI53FromI64(ptr);\n }\n }\n setLimitU32IfDefined('maxTextureDimension1D', limitsPtr, 4);\n setLimitU32IfDefined('maxTextureDimension2D', limitsPtr, 8);\n setLimitU32IfDefined('maxTextureDimension3D', limitsPtr, 12);\n setLimitU32IfDefined('maxTextureArrayLayers', limitsPtr, 16);\n setLimitU32IfDefined('maxBindGroups', limitsPtr, 20);\n setLimitU32IfDefined('maxBindGroupsPlusVertexBuffers', limitsPtr, 24);\n setLimitU32IfDefined('maxBindingsPerBindGroup', limitsPtr, 28);\n setLimitU32IfDefined(\n 'maxDynamicUniformBuffersPerPipelineLayout',\n limitsPtr,\n 32\n );\n setLimitU32IfDefined(\n 'maxDynamicStorageBuffersPerPipelineLayout',\n limitsPtr,\n 36\n );\n setLimitU32IfDefined('maxSampledTexturesPerShaderStage', limitsPtr, 40);\n setLimitU32IfDefined('maxSamplersPerShaderStage', limitsPtr, 44);\n setLimitU32IfDefined('maxStorageBuffersPerShaderStage', limitsPtr, 48);\n setLimitU32IfDefined('maxStorageTexturesPerShaderStage', limitsPtr, 52);\n setLimitU32IfDefined('maxUniformBuffersPerShaderStage', limitsPtr, 56);\n setLimitU32IfDefined('minUniformBufferOffsetAlignment', limitsPtr, 80);\n setLimitU32IfDefined('minStorageBufferOffsetAlignment', limitsPtr, 84);\n setLimitU64IfDefined('maxUniformBufferBindingSize', limitsPtr, 64);\n setLimitU64IfDefined('maxStorageBufferBindingSize', limitsPtr, 72);\n setLimitU32IfDefined('maxVertexBuffers', limitsPtr, 88);\n setLimitU64IfDefined('maxBufferSize', limitsPtr, 96);\n setLimitU32IfDefined('maxVertexAttributes', limitsPtr, 104);\n setLimitU32IfDefined('maxVertexBufferArrayStride', limitsPtr, 108);\n setLimitU32IfDefined('maxInterStageShaderVariables', limitsPtr, 112);\n setLimitU32IfDefined('maxColorAttachments', limitsPtr, 116);\n setLimitU32IfDefined('maxColorAttachmentBytesPerSample', limitsPtr, 120);\n setLimitU32IfDefined('maxComputeWorkgroupStorageSize', limitsPtr, 124);\n setLimitU32IfDefined('maxComputeInvocationsPerWorkgroup', limitsPtr, 128);\n setLimitU32IfDefined('maxComputeWorkgroupSizeX', limitsPtr, 132);\n setLimitU32IfDefined('maxComputeWorkgroupSizeY', limitsPtr, 136);\n setLimitU32IfDefined('maxComputeWorkgroupSizeZ', limitsPtr, 140);\n setLimitU32IfDefined('maxComputeWorkgroupsPerDimension', limitsPtr, 144);\n setLimitU32IfDefined('maxImmediateSize', limitsPtr, 148, true);\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[((nextInChainPtr + 4) >>> 2) >>> 0];\n var compatibilityModeLimitsPtr = nextInChainPtr;\n if ('maxStorageBuffersInVertexStage' in GPUSupportedLimits.prototype) {\n setLimitU32IfDefined(\n 'maxStorageBuffersInVertexStage',\n compatibilityModeLimitsPtr,\n 8\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInVertexStage',\n compatibilityModeLimitsPtr,\n 12\n );\n setLimitU32IfDefined(\n 'maxStorageBuffersInFragmentStage',\n compatibilityModeLimitsPtr,\n 16\n );\n setLimitU32IfDefined(\n 'maxStorageTexturesInFragmentStage',\n compatibilityModeLimitsPtr,\n 20\n );\n }\n }\n desc['requiredLimits'] = requiredLimits;\n }\n var defaultQueuePtr = HEAPU32[((descriptor + 24) >>> 2) >>> 0];\n if (defaultQueuePtr) {\n var defaultQueueDesc = {\n label: WebGPU.makeStringFromOptionalStringView(defaultQueuePtr + 4),\n };\n desc['defaultQueue'] = defaultQueueDesc;\n }\n desc['label'] = WebGPU.makeStringFromOptionalStringView(descriptor + 4);\n }\n WebGPU.Internals.futureInsert(\n futureId,\n adapter.requestDevice(desc).then(\n (device) => {\n callUserCallback(() => {\n WebGPU.Internals.jsObjectInsert(queuePtr, device.queue);\n WebGPU.Internals.jsObjectInsert(devicePtr, device);\n WebGPU.Internals.futureInsert(\n deviceLostFutureId,\n device.lost.then((info) => {\n callUserCallback(() => {\n device.onuncapturederror = (ev) => {};\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(info.message);\n _emwgpuOnDeviceLostCompleted(\n deviceLostFutureId,\n emwgpuStringToInt_DeviceLostReason[info.reason],\n messagePtr\n );\n stackRestore(sp);\n });\n })\n );\n device.onuncapturederror = (ev) => {\n var type = 5;\n if (ev.error instanceof GPUValidationError) type = 2;\n else if (ev.error instanceof GPUOutOfMemoryError) type = 3;\n else if (ev.error instanceof GPUInternalError) type = 4;\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ev.error.message);\n _emwgpuOnUncapturedError(devicePtr, type, messagePtr);\n stackRestore(sp);\n };\n _emwgpuOnRequestDeviceCompleted(futureId, 1, devicePtr, 0);\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestDeviceCompleted(futureId, 3, devicePtr, messagePtr);\n if (deviceLostFutureId) {\n _emwgpuOnDeviceLostCompleted(deviceLostFutureId, 4, messagePtr);\n }\n stackRestore(sp);\n });\n }\n )\n );\n}\nfunction _emwgpuBufferDestroy(bufferPtr) {\n bufferPtr >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (onUnmap) {\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n }\n buffer.destroy();\n}\nvar warnOnce = (text) => {\n warnOnce.shown ||= {};\n if (!warnOnce.shown[text]) {\n warnOnce.shown[text] = 1;\n if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;\n err(text);\n }\n};\nfunction _emwgpuBufferGetConstMappedRange(bufferPtr, offset, size) {\n bufferPtr >>>= 0;\n offset >>>= 0;\n size >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n if (size == 4294967295) size = undefined;\n var mapped;\n try {\n mapped = buffer.getMappedRange(offset, size);\n } catch (ex) {\n return 0;\n }\n var data = _memalign(16, mapped.byteLength);\n HEAPU8.set(new Uint8Array(mapped), data >>> 0);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr].push(() => _free(data));\n return data;\n}\nvar _emwgpuBufferMapAsync = function (bufferPtr, futureId, mode, offset, size) {\n bufferPtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n mode = bigintToI53Checked(mode);\n offset >>>= 0;\n size >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n if (size == 4294967295) size = undefined;\n WebGPU.Internals.futureInsert(\n futureId,\n buffer.mapAsync(mode, offset, size).then(\n () => {\n callUserCallback(() => {\n _emwgpuOnMapAsyncCompleted(futureId, 1, 0);\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n var status =\n ex.name === 'AbortError' ? 4 : ex.name === 'OperationError' ? 3 : 0;\n _emwgpuOnMapAsyncCompleted(futureId, status, messagePtr);\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n });\n }\n )\n );\n};\nfunction _emwgpuBufferUnmap(bufferPtr) {\n bufferPtr >>>= 0;\n var buffer = WebGPU.getJsObject(bufferPtr);\n var onUnmap = WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n if (!onUnmap) {\n return;\n }\n for (var i = 0; i < onUnmap.length; ++i) {\n onUnmap[i]();\n }\n delete WebGPU.Internals.bufferOnUnmaps[bufferPtr];\n buffer.unmap();\n}\nfunction _emwgpuDelete(ptr) {\n ptr >>>= 0;\n delete WebGPU.Internals.jsObjects[ptr];\n}\nfunction _emwgpuDeviceCreateBuffer(devicePtr, descriptor, bufferPtr) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n bufferPtr >>>= 0;\n var mappedAtCreation = !!HEAPU32[((descriptor + 32) >>> 2) >>> 0];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n usage: HEAPU32[((descriptor + 16) >>> 2) >>> 0],\n size: readI53FromI64(descriptor + 24),\n mappedAtCreation,\n };\n var device = WebGPU.getJsObject(devicePtr);\n var buffer;\n try {\n buffer = device.createBuffer(desc);\n } catch (ex) {\n return false;\n }\n WebGPU.Internals.jsObjectInsert(bufferPtr, buffer);\n if (mappedAtCreation) {\n WebGPU.Internals.bufferOnUnmaps[bufferPtr] = [];\n }\n return true;\n}\nfunction _emwgpuDeviceCreateShaderModule(\n devicePtr,\n descriptor,\n shaderModulePtr\n) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n shaderModulePtr >>>= 0;\n var nextInChainPtr = HEAPU32[(descriptor >>> 2) >>> 0];\n var sType = HEAP32[((nextInChainPtr + 4) >>> 2) >>> 0];\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n code: '',\n };\n switch (sType) {\n case 2: {\n desc['code'] = WebGPU.makeStringFromStringView(nextInChainPtr + 8);\n break;\n }\n }\n var device = WebGPU.getJsObject(devicePtr);\n WebGPU.Internals.jsObjectInsert(\n shaderModulePtr,\n device.createShaderModule(desc)\n );\n}\nvar _emwgpuDeviceDestroy = (devicePtr) => {\n const device = WebGPU.getJsObject(devicePtr);\n device.onuncapturederror = null;\n device.destroy();\n};\nfunction _emwgpuInstanceRequestAdapter(\n instancePtr,\n futureId,\n options,\n adapterPtr\n) {\n instancePtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n options >>>= 0;\n adapterPtr >>>= 0;\n var opts;\n if (options) {\n opts = {\n featureLevel: WebGPU.FeatureLevel[HEAP32[((options + 4) >>> 2) >>> 0]],\n powerPreference:\n WebGPU.PowerPreference[HEAP32[((options + 8) >>> 2) >>> 0]],\n forceFallbackAdapter: !!HEAPU32[((options + 12) >>> 2) >>> 0],\n };\n var nextInChainPtr = HEAPU32[(options >>> 2) >>> 0];\n if (nextInChainPtr !== 0) {\n var sType = HEAP32[((nextInChainPtr + 4) >>> 2) >>> 0];\n var webxrOptions = nextInChainPtr;\n opts.xrCompatible = !!HEAPU32[((webxrOptions + 8) >>> 2) >>> 0];\n }\n }\n if (!('gpu' in navigator)) {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (navigator.gpu is not available)'\n );\n _emwgpuOnRequestAdapterCompleted(futureId, 3, adapterPtr, messagePtr);\n stackRestore(sp);\n return;\n }\n WebGPU.Internals.futureInsert(\n futureId,\n navigator.gpu.requestAdapter(opts).then(\n (adapter) => {\n callUserCallback(() => {\n if (adapter) {\n WebGPU.Internals.jsObjectInsert(adapterPtr, adapter);\n _emwgpuOnRequestAdapterCompleted(futureId, 1, adapterPtr, 0);\n } else {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(\n 'WebGPU not available on this browser (requestAdapter returned null)'\n );\n _emwgpuOnRequestAdapterCompleted(\n futureId,\n 3,\n adapterPtr,\n messagePtr\n );\n stackRestore(sp);\n }\n });\n },\n (ex) => {\n callUserCallback(() => {\n var sp = stackSave();\n var messagePtr = stringToUTF8OnStack(ex.message);\n _emwgpuOnRequestAdapterCompleted(futureId, 4, adapterPtr, messagePtr);\n stackRestore(sp);\n });\n }\n )\n );\n}\nvar _emwgpuQueueOnSubmittedWorkDone = function (queuePtr, futureId) {\n queuePtr >>>= 0;\n futureId = bigintToI53Checked(futureId);\n var queue = WebGPU.getJsObject(queuePtr);\n WebGPU.Internals.futureInsert(\n futureId,\n queue.onSubmittedWorkDone().then(() => {\n callUserCallback(() => {\n _emwgpuOnWorkDoneCompleted(futureId, 1);\n });\n })\n );\n};\nvar _emwgpuWaitAny = function (futurePtr, futureCount, timeoutMSPtr) {\n futurePtr >>>= 0;\n futureCount >>>= 0;\n timeoutMSPtr >>>= 0;\n return Asyncify.handleAsync(async () => {\n var promises = [];\n if (timeoutMSPtr) {\n var timeoutMS = HEAP32[(timeoutMSPtr >>> 2) >>> 0];\n promises.length = futureCount + 1;\n promises[futureCount] = new Promise((resolve) =>\n setTimeout(resolve, timeoutMS, 0)\n );\n } else {\n promises.length = futureCount;\n }\n for (var i = 0; i < futureCount; ++i) {\n var futureId = readI53FromI64(futurePtr + i * 8);\n if (!(futureId in WebGPU.Internals.futures)) {\n return futureId;\n }\n promises[i] = WebGPU.Internals.futures[futureId];\n }\n const firstResolvedFuture = await Promise.race(promises);\n delete WebGPU.Internals.futures[firstResolvedFuture];\n return firstResolvedFuture;\n });\n};\n_emwgpuWaitAny.isAsync = true;\nvar ENV = {};\nvar getExecutableName = () => thisProgram || './this.program';\nvar getEnvStrings = () => {\n if (!getEnvStrings.strings) {\n var lang =\n ((typeof navigator == 'object' && navigator.language) || 'C').replace(\n '-',\n '_'\n ) + '.UTF-8';\n var env = {\n USER: 'web_user',\n LOGNAME: 'web_user',\n PATH: '/',\n PWD: '/',\n HOME: '/home/web_user',\n LANG: lang,\n _: getExecutableName(),\n };\n for (var x in ENV) {\n if (ENV[x] === undefined) delete env[x];\n else env[x] = ENV[x];\n }\n var strings = [];\n for (var x in env) {\n strings.push(`${x}=${env[x]}`);\n }\n getEnvStrings.strings = strings;\n }\n return getEnvStrings.strings;\n};\nfunction _environ_get(__environ, environ_buf) {\n __environ >>>= 0;\n environ_buf >>>= 0;\n var bufSize = 0;\n var envp = 0;\n for (var string of getEnvStrings()) {\n var ptr = environ_buf + bufSize;\n HEAPU32[((__environ + envp) >>> 2) >>> 0] = ptr;\n bufSize += stringToUTF8(string, ptr, Infinity) + 1;\n envp += 4;\n }\n return 0;\n}\nfunction _environ_sizes_get(penviron_count, penviron_buf_size) {\n penviron_count >>>= 0;\n penviron_buf_size >>>= 0;\n var strings = getEnvStrings();\n HEAPU32[(penviron_count >>> 2) >>> 0] = strings.length;\n var bufSize = 0;\n for (var string of strings) {\n bufSize += lengthBytesUTF8(string) + 1;\n }\n HEAPU32[(penviron_buf_size >>> 2) >>> 0] = bufSize;\n return 0;\n}\nfunction _fd_close(fd) {\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.close(stream);\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doReadv = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[(iov >>> 2) >>> 0];\n var len = HEAPU32[((iov + 4) >>> 2) >>> 0];\n iov += 8;\n var curr = FS.read(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) break;\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_read(fd, iov, iovcnt, pnum) {\n iov >>>= 0;\n iovcnt >>>= 0;\n pnum >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doReadv(stream, iov, iovcnt);\n HEAPU32[(pnum >>> 2) >>> 0] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _fd_seek(fd, offset, whence, newOffset) {\n offset = bigintToI53Checked(offset);\n newOffset >>>= 0;\n try {\n if (isNaN(offset)) return 61;\n var stream = SYSCALLS.getStreamFromFD(fd);\n FS.llseek(stream, offset, whence);\n HEAP64[(newOffset >>> 3) >>> 0] = BigInt(stream.position);\n if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar doWritev = (stream, iov, iovcnt, offset) => {\n var ret = 0;\n for (var i = 0; i < iovcnt; i++) {\n var ptr = HEAPU32[(iov >>> 2) >>> 0];\n var len = HEAPU32[((iov + 4) >>> 2) >>> 0];\n iov += 8;\n var curr = FS.write(stream, HEAP8, ptr, len, offset);\n if (curr < 0) return -1;\n ret += curr;\n if (curr < len) {\n break;\n }\n if (typeof offset != 'undefined') {\n offset += curr;\n }\n }\n return ret;\n};\nfunction _fd_write(fd, iov, iovcnt, pnum) {\n iov >>>= 0;\n iovcnt >>>= 0;\n pnum >>>= 0;\n try {\n var stream = SYSCALLS.getStreamFromFD(fd);\n var num = doWritev(stream, iov, iovcnt);\n HEAPU32[(pnum >>> 2) >>> 0] = num;\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nfunction _llvm_eh_typeid_for(type) {\n type >>>= 0;\n return type;\n}\nfunction _random_get(buffer, size) {\n buffer >>>= 0;\n size >>>= 0;\n try {\n randomFill(HEAPU8.subarray(buffer >>> 0, (buffer + size) >>> 0));\n return 0;\n } catch (e) {\n if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;\n return e.errno;\n }\n}\nvar emwgpuStringToInt_FeatureName = {\n 'core-features-and-limits': 1,\n 'depth-clip-control': 2,\n 'depth32float-stencil8': 3,\n 'texture-compression-bc': 4,\n 'texture-compression-bc-sliced-3d': 5,\n 'texture-compression-etc2': 6,\n 'texture-compression-astc': 7,\n 'texture-compression-astc-sliced-3d': 8,\n 'timestamp-query': 9,\n 'indirect-first-instance': 10,\n 'shader-f16': 11,\n 'rg11b10ufloat-renderable': 12,\n 'bgra8unorm-storage': 13,\n 'float32-filterable': 14,\n 'float32-blendable': 15,\n 'clip-distances': 16,\n 'dual-source-blending': 17,\n subgroups: 18,\n 'texture-formats-tier1': 19,\n 'texture-formats-tier2': 20,\n 'primitive-index': 21,\n 'texture-component-swizzle': 22,\n 'chromium-experimental-unorm16-texture-formats': 327692,\n 'chromium-experimental-multi-draw-indirect': 327729,\n};\nfunction _wgpuAdapterGetFeatures(adapterPtr, supportedFeatures) {\n adapterPtr >>>= 0;\n supportedFeatures >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n var featuresPtr = _malloc(adapter.features.size * 4);\n var offset = 0;\n var numFeatures = 0;\n for (const feature of adapter.features) {\n var featureEnumValue = emwgpuStringToInt_FeatureName[feature];\n if (featureEnumValue >= 0) {\n HEAP32[((featuresPtr + offset) >>> 2) >>> 0] = featureEnumValue;\n offset += 4;\n numFeatures++;\n }\n }\n HEAPU32[((supportedFeatures + 4) >>> 2) >>> 0] = featuresPtr;\n HEAPU32[(supportedFeatures >>> 2) >>> 0] = numFeatures;\n}\nfunction _wgpuAdapterGetInfo(adapterPtr, info) {\n adapterPtr >>>= 0;\n info >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillAdapterInfoStruct(adapter.info, info);\n return 1;\n}\nfunction _wgpuAdapterGetLimits(adapterPtr, limitsOutPtr) {\n adapterPtr >>>= 0;\n limitsOutPtr >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n WebGPU.fillLimitStruct(adapter.limits, limitsOutPtr);\n return 1;\n}\nfunction _wgpuAdapterHasFeature(adapterPtr, featureEnumValue) {\n adapterPtr >>>= 0;\n var adapter = WebGPU.getJsObject(adapterPtr);\n return adapter.features.has(WebGPU.FeatureName[featureEnumValue]);\n}\nvar _wgpuBufferGetSize = function (bufferPtr) {\n bufferPtr >>>= 0;\n var ret = (() => {\n var buffer = WebGPU.getJsObject(bufferPtr);\n return buffer.size;\n })();\n return BigInt(ret);\n};\nfunction _wgpuCommandEncoderBeginComputePass(encoderPtr, descriptor) {\n encoderPtr >>>= 0;\n descriptor >>>= 0;\n var desc;\n if (descriptor) {\n desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n timestampWrites: WebGPU.makePassTimestampWrites(\n HEAPU32[((descriptor + 12) >>> 2) >>> 0]\n ),\n };\n }\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateComputePassEncoder(0);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.beginComputePass(desc));\n return ptr;\n}\nfunction _wgpuCommandEncoderCopyBufferToBuffer(\n encoderPtr,\n srcPtr,\n srcOffset,\n dstPtr,\n dstOffset,\n size\n) {\n encoderPtr >>>= 0;\n srcPtr >>>= 0;\n srcOffset = bigintToI53Checked(srcOffset);\n dstPtr >>>= 0;\n dstOffset = bigintToI53Checked(dstOffset);\n size = bigintToI53Checked(size);\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var src = WebGPU.getJsObject(srcPtr);\n var dst = WebGPU.getJsObject(dstPtr);\n commandEncoder.copyBufferToBuffer(src, srcOffset, dst, dstOffset, size);\n}\nfunction _wgpuCommandEncoderFinish(encoderPtr, descriptor) {\n encoderPtr >>>= 0;\n descriptor >>>= 0;\n var commandEncoder = WebGPU.getJsObject(encoderPtr);\n var ptr = _emwgpuCreateCommandBuffer(0);\n WebGPU.Internals.jsObjectInsert(ptr, commandEncoder.finish());\n return ptr;\n}\nfunction _wgpuComputePassEncoderDispatchWorkgroups(passPtr, x, y, z) {\n passPtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n pass.dispatchWorkgroups(x, y, z);\n}\nfunction _wgpuComputePassEncoderEnd(passPtr) {\n passPtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n pass.end();\n}\nfunction _wgpuComputePassEncoderSetBindGroup(\n passPtr,\n groupIndex,\n groupPtr,\n dynamicOffsetCount,\n dynamicOffsetsPtr\n) {\n passPtr >>>= 0;\n groupPtr >>>= 0;\n dynamicOffsetCount >>>= 0;\n dynamicOffsetsPtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n var group = WebGPU.getJsObject(groupPtr);\n if (dynamicOffsetCount == 0) {\n pass.setBindGroup(groupIndex, group);\n } else {\n pass.setBindGroup(\n groupIndex,\n group,\n HEAPU32,\n dynamicOffsetsPtr >>> 2,\n dynamicOffsetCount\n );\n }\n}\nfunction _wgpuComputePassEncoderSetPipeline(passPtr, pipelinePtr) {\n passPtr >>>= 0;\n pipelinePtr >>>= 0;\n var pass = WebGPU.getJsObject(passPtr);\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n pass.setPipeline(pipeline);\n}\nfunction _wgpuComputePipelineGetBindGroupLayout(pipelinePtr, groupIndex) {\n pipelinePtr >>>= 0;\n var pipeline = WebGPU.getJsObject(pipelinePtr);\n var ptr = _emwgpuCreateBindGroupLayout(0);\n WebGPU.Internals.jsObjectInsert(ptr, pipeline.getBindGroupLayout(groupIndex));\n return ptr;\n}\nvar _wgpuDeviceCreateBindGroup = function (devicePtr, descriptor) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n function makeEntry(entryPtr) {\n var bufferPtr = HEAPU32[((entryPtr + 8) >>> 2) >>> 0];\n var samplerPtr = HEAPU32[((entryPtr + 32) >>> 2) >>> 0];\n var textureViewPtr = HEAPU32[((entryPtr + 36) >>> 2) >>> 0];\n var externalTexturePtr = 0;\n WebGPU.iterateExtensions(entryPtr, {\n 327681: (ptr) => {\n externalTexturePtr = HEAPU32[((ptr + 8) >>> 2) >>> 0];\n },\n });\n var resource;\n if (bufferPtr) {\n var size = readI53FromI64(entryPtr + 24);\n if (size == -1) size = undefined;\n resource = {\n buffer: WebGPU.getJsObject(bufferPtr),\n offset: readI53FromI64(entryPtr + 16),\n size,\n };\n } else {\n resource = WebGPU.getJsObject(\n samplerPtr || textureViewPtr || externalTexturePtr\n );\n }\n return { binding: HEAPU32[((entryPtr + 4) >>> 2) >>> 0], resource };\n }\n function makeEntries(count, entriesPtrs) {\n var entries = [];\n for (var i = 0; i < count; ++i) {\n entries.push(makeEntry(entriesPtrs + 40 * i));\n }\n return entries;\n }\n var desc = {\n label: WebGPU.makeStringFromOptionalStringView(descriptor + 4),\n layout: WebGPU.getJsObject(HEAPU32[((descriptor + 12) >>> 2) >>> 0]),\n entries: makeEntries(\n HEAPU32[((descriptor + 16) >>> 2) >>> 0],\n HEAPU32[((descriptor + 20) >>> 2) >>> 0]\n ),\n };\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateBindGroup(0);\n WebGPU.Internals.jsObjectInsert(ptr, device.createBindGroup(desc));\n return ptr;\n};\nfunction _wgpuDeviceCreateCommandEncoder(devicePtr, descriptor) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n var desc;\n if (descriptor) {\n desc = { label: WebGPU.makeStringFromOptionalStringView(descriptor + 4) };\n }\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateCommandEncoder(0);\n WebGPU.Internals.jsObjectInsert(ptr, device.createCommandEncoder(desc));\n return ptr;\n}\nfunction _wgpuDeviceCreateComputePipeline(devicePtr, descriptor) {\n devicePtr >>>= 0;\n descriptor >>>= 0;\n var desc = WebGPU.makeComputePipelineDesc(descriptor);\n var device = WebGPU.getJsObject(devicePtr);\n var ptr = _emwgpuCreateComputePipeline(0);\n WebGPU.Internals.jsObjectInsert(ptr, device.createComputePipeline(desc));\n return ptr;\n}\nvar _wgpuQueueSubmit = function (queuePtr, commandCount, commands) {\n queuePtr >>>= 0;\n commandCount >>>= 0;\n commands >>>= 0;\n var queue = WebGPU.getJsObject(queuePtr);\n var cmds = Array.from(\n HEAP32.subarray(\n (commands >>> 2) >>> 0,\n ((commands + commandCount * 4) >>> 2) >>> 0\n ),\n (id) => WebGPU.getJsObject(id)\n );\n queue.submit(cmds);\n};\nfunction _wgpuQueueWriteBuffer(queuePtr, bufferPtr, bufferOffset, data, size) {\n queuePtr >>>= 0;\n bufferPtr >>>= 0;\n bufferOffset = bigintToI53Checked(bufferOffset);\n data >>>= 0;\n size >>>= 0;\n var queue = WebGPU.getJsObject(queuePtr);\n var buffer = WebGPU.getJsObject(bufferPtr);\n var subarray = HEAPU8.subarray(data >>> 0, (data + size) >>> 0);\n queue.writeBuffer(buffer, bufferOffset, subarray, 0, size);\n}\nvar runAndAbortIfError = (func) => {\n try {\n return func();\n } catch (e) {\n abort(e);\n }\n};\nvar runtimeKeepalivePush = () => {\n runtimeKeepaliveCounter += 1;\n};\nvar runtimeKeepalivePop = () => {\n runtimeKeepaliveCounter -= 1;\n};\nvar Asyncify = {\n instrumentWasmImports(imports) {\n var importPattern = /^(invoke_.*|__asyncjs__.*)$/;\n for (let [x, original] of Object.entries(imports)) {\n if (typeof original == 'function') {\n let isAsyncifyImport = original.isAsync || importPattern.test(x);\n }\n }\n },\n instrumentFunction(original) {\n var wrapper = (...args) => {\n Asyncify.exportCallStack.push(original);\n try {\n return original(...args);\n } finally {\n if (!ABORT) {\n var top = Asyncify.exportCallStack.pop();\n Asyncify.maybeStopUnwind();\n }\n }\n };\n Asyncify.funcWrappers.set(original, wrapper);\n return wrapper;\n },\n instrumentWasmExports(exports) {\n var ret = {};\n for (let [x, original] of Object.entries(exports)) {\n if (typeof original == 'function') {\n var wrapper = Asyncify.instrumentFunction(original);\n ret[x] = wrapper;\n } else {\n ret[x] = original;\n }\n }\n return ret;\n },\n State: { Normal: 0, Unwinding: 1, Rewinding: 2, Disabled: 3 },\n state: 0,\n StackSize: 4096,\n currData: null,\n handleSleepReturnValue: 0,\n exportCallStack: [],\n callstackFuncToId: new Map(),\n callStackIdToFunc: new Map(),\n funcWrappers: new Map(),\n callStackId: 0,\n asyncPromiseHandlers: null,\n sleepCallbacks: [],\n getCallStackId(func) {\n if (!Asyncify.callstackFuncToId.has(func)) {\n var id = Asyncify.callStackId++;\n Asyncify.callstackFuncToId.set(func, id);\n Asyncify.callStackIdToFunc.set(id, func);\n }\n return Asyncify.callstackFuncToId.get(func);\n },\n maybeStopUnwind() {\n if (\n Asyncify.currData &&\n Asyncify.state === Asyncify.State.Unwinding &&\n Asyncify.exportCallStack.length === 0\n ) {\n Asyncify.state = Asyncify.State.Normal;\n runAndAbortIfError(_asyncify_stop_unwind);\n if (typeof Fibers != 'undefined') {\n Fibers.trampoline();\n }\n }\n },\n whenDone() {\n return new Promise((resolve, reject) => {\n Asyncify.asyncPromiseHandlers = { resolve, reject };\n });\n },\n allocateData() {\n var ptr = _malloc(12 + Asyncify.StackSize);\n Asyncify.setDataHeader(ptr, ptr + 12, Asyncify.StackSize);\n Asyncify.setDataRewindFunc(ptr);\n return ptr;\n },\n setDataHeader(ptr, stack, stackSize) {\n HEAPU32[(ptr >>> 2) >>> 0] = stack;\n HEAPU32[((ptr + 4) >>> 2) >>> 0] = stack + stackSize;\n },\n setDataRewindFunc(ptr) {\n var bottomOfCallStack = Asyncify.exportCallStack[0];\n var rewindId = Asyncify.getCallStackId(bottomOfCallStack);\n HEAP32[((ptr + 8) >>> 2) >>> 0] = rewindId;\n },\n getDataRewindFunc(ptr) {\n var id = HEAP32[((ptr + 8) >>> 2) >>> 0];\n var func = Asyncify.callStackIdToFunc.get(id);\n return func;\n },\n doRewind(ptr) {\n var original = Asyncify.getDataRewindFunc(ptr);\n var func = Asyncify.funcWrappers.get(original);\n return func();\n },\n handleSleep(startAsync) {\n if (ABORT) return;\n if (Asyncify.state === Asyncify.State.Normal) {\n var reachedCallback = false;\n var reachedAfterCallback = false;\n startAsync((handleSleepReturnValue = 0) => {\n if (ABORT) return;\n Asyncify.handleSleepReturnValue = handleSleepReturnValue;\n reachedCallback = true;\n if (!reachedAfterCallback) {\n return;\n }\n Asyncify.state = Asyncify.State.Rewinding;\n runAndAbortIfError(() => _asyncify_start_rewind(Asyncify.currData));\n if (typeof MainLoop != 'undefined' && MainLoop.func) {\n MainLoop.resume();\n }\n var asyncWasmReturnValue,\n isError = false;\n try {\n asyncWasmReturnValue = Asyncify.doRewind(Asyncify.currData);\n } catch (err) {\n asyncWasmReturnValue = err;\n isError = true;\n }\n var handled = false;\n if (!Asyncify.currData) {\n var asyncPromiseHandlers = Asyncify.asyncPromiseHandlers;\n if (asyncPromiseHandlers) {\n Asyncify.asyncPromiseHandlers = null;\n (isError\n ? asyncPromiseHandlers.reject\n : asyncPromiseHandlers.resolve)(asyncWasmReturnValue);\n handled = true;\n }\n }\n if (isError && !handled) {\n throw asyncWasmReturnValue;\n }\n });\n reachedAfterCallback = true;\n if (!reachedCallback) {\n Asyncify.state = Asyncify.State.Unwinding;\n Asyncify.currData = Asyncify.allocateData();\n if (typeof MainLoop != 'undefined' && MainLoop.func) {\n MainLoop.pause();\n }\n runAndAbortIfError(() => _asyncify_start_unwind(Asyncify.currData));\n }\n } else if (Asyncify.state === Asyncify.State.Rewinding) {\n Asyncify.state = Asyncify.State.Normal;\n runAndAbortIfError(_asyncify_stop_rewind);\n _free(Asyncify.currData);\n Asyncify.currData = null;\n Asyncify.sleepCallbacks.forEach(callUserCallback);\n } else {\n abort(`invalid state: ${Asyncify.state}`);\n }\n return Asyncify.handleSleepReturnValue;\n },\n handleAsync: (startAsync) =>\n Asyncify.handleSleep((wakeUp) => {\n startAsync().then(wakeUp);\n }),\n};\nvar getCFunc = (ident) => {\n var func = Module['_' + ident];\n return func;\n};\nvar writeArrayToMemory = (array, buffer) => {\n HEAP8.set(array, buffer >>> 0);\n};\nvar ccall = (ident, returnType, argTypes, args, opts) => {\n var toC = {\n string: (str) => {\n var ret = 0;\n if (str !== null && str !== undefined && str !== 0) {\n ret = stringToUTF8OnStack(str);\n }\n return ret;\n },\n array: (arr) => {\n var ret = stackAlloc(arr.length);\n writeArrayToMemory(arr, ret);\n return ret;\n },\n };\n function convertReturnValue(ret) {\n if (returnType === 'string') {\n return UTF8ToString(ret);\n }\n if (returnType === 'pointer') return ret >>> 0;\n if (returnType === 'boolean') return Boolean(ret);\n return ret;\n }\n var func = getCFunc(ident);\n var cArgs = [];\n var stack = 0;\n if (args) {\n for (var i = 0; i < args.length; i++) {\n var converter = toC[argTypes[i]];\n if (converter) {\n if (stack === 0) stack = stackSave();\n cArgs[i] = converter(args[i]);\n } else {\n cArgs[i] = args[i];\n }\n }\n }\n var previousAsync = Asyncify.currData;\n var ret = func(...cArgs);\n function onDone(ret) {\n runtimeKeepalivePop();\n if (stack !== 0) stackRestore(stack);\n return convertReturnValue(ret);\n }\n var asyncMode = opts?.async;\n runtimeKeepalivePush();\n if (Asyncify.currData != previousAsync) {\n return Asyncify.whenDone().then(onDone);\n }\n ret = onDone(ret);\n if (asyncMode) return Promise.resolve(ret);\n return ret;\n};\nvar cwrap = (ident, returnType, argTypes, opts) => {\n var numericArgs =\n !argTypes ||\n argTypes.every((type) => type === 'number' || type === 'boolean');\n var numericRet = returnType !== 'string';\n if (numericRet && numericArgs && !opts) {\n return getCFunc(ident);\n }\n return (...args) => ccall(ident, returnType, argTypes, args, opts);\n};\nvar FS_createPath = (...args) => FS.createPath(...args);\nvar FS_unlink = (...args) => FS.unlink(...args);\nvar FS_createLazyFile = (...args) => FS.createLazyFile(...args);\nvar FS_createDevice = (...args) => FS.createDevice(...args);\nFS.createPreloadedFile = FS_createPreloadedFile;\nFS.preloadFile = FS_preloadFile;\nFS.staticInit();\n{\n initMemory();\n if (Module['noExitRuntime']) noExitRuntime = Module['noExitRuntime'];\n if (Module['preloadPlugins']) preloadPlugins = Module['preloadPlugins'];\n if (Module['print']) out = Module['print'];\n if (Module['printErr']) err = Module['printErr'];\n if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\n if (Module['arguments']) arguments_ = Module['arguments'];\n if (Module['thisProgram']) thisProgram = Module['thisProgram'];\n if (Module['preInit']) {\n if (typeof Module['preInit'] == 'function')\n Module['preInit'] = [Module['preInit']];\n while (Module['preInit'].length > 0) {\n Module['preInit'].shift()();\n }\n }\n}\nModule['mmapAlloc'] = mmapAlloc;\nModule['addRunDependency'] = addRunDependency;\nModule['removeRunDependency'] = removeRunDependency;\nModule['ccall'] = ccall;\nModule['cwrap'] = cwrap;\nModule['FS_preloadFile'] = FS_preloadFile;\nModule['FS_unlink'] = FS_unlink;\nModule['FS_createPath'] = FS_createPath;\nModule['FS_createDevice'] = FS_createDevice;\nModule['FS'] = FS;\nModule['FS_createDataFile'] = FS_createDataFile;\nModule['FS_createLazyFile'] = FS_createLazyFile;\nModule['MEMFS'] = MEMFS;\nvar _wllama_malloc,\n _wllama_start,\n _wllama_action,\n _wllama_exit,\n _wllama_debug,\n _main,\n _malloc,\n _free,\n _emwgpuCreateBindGroup,\n _emwgpuCreateBindGroupLayout,\n _emwgpuCreateCommandBuffer,\n _emwgpuCreateCommandEncoder,\n _emwgpuCreateComputePassEncoder,\n _emwgpuCreateComputePipeline,\n _emwgpuCreateExternalTexture,\n _emwgpuCreatePipelineLayout,\n _emwgpuCreateQuerySet,\n _emwgpuCreateRenderBundle,\n _emwgpuCreateRenderBundleEncoder,\n _emwgpuCreateRenderPassEncoder,\n _emwgpuCreateRenderPipeline,\n _emwgpuCreateSampler,\n _emwgpuCreateSurface,\n _emwgpuCreateTexture,\n _emwgpuCreateTextureView,\n _emwgpuCreateAdapter,\n _emwgpuCreateBuffer,\n _emwgpuCreateDevice,\n _emwgpuCreateQueue,\n _emwgpuCreateShaderModule,\n _emwgpuOnDeviceLostCompleted,\n _emwgpuOnMapAsyncCompleted,\n _emwgpuOnRequestAdapterCompleted,\n _emwgpuOnRequestDeviceCompleted,\n _emwgpuOnWorkDoneCompleted,\n _emwgpuOnUncapturedError,\n _emscripten_builtin_memalign,\n _memalign,\n _setThrew,\n __emscripten_tempret_set,\n __emscripten_stack_restore,\n __emscripten_stack_alloc,\n _emscripten_stack_get_current,\n ___cxa_decrement_exception_refcount,\n ___cxa_increment_exception_refcount,\n ___cxa_can_catch,\n ___cxa_get_exception_ptr,\n dynCall_v,\n dynCall_ii,\n dynCall_iii,\n dynCall_viii,\n dynCall_vii,\n dynCall_iiiiii,\n dynCall_iiiii,\n dynCall_vi,\n dynCall_iiii,\n dynCall_viiii,\n dynCall_iiiiiii,\n dynCall_ji,\n dynCall_viiiii,\n dynCall_i,\n dynCall_iiiiiiiii,\n dynCall_j,\n dynCall_iiiiiiii,\n dynCall_ifi,\n dynCall_iffii,\n dynCall_ifff,\n dynCall_iifff,\n dynCall_iiiffiiii,\n dynCall_if,\n dynCall_iiff,\n dynCall_iiiffi,\n dynCall_iiiiiiiiiiiiii,\n dynCall_viiiiii,\n dynCall_iij,\n dynCall_jii,\n dynCall_iiij,\n dynCall_iiijj,\n dynCall_iiif,\n dynCall_iiijjii,\n dynCall_iiijjj,\n dynCall_iiijjjj,\n dynCall_iiiji,\n dynCall_iiiiiiiiiiii,\n dynCall_iiji,\n dynCall_iiiijjji,\n dynCall_fiii,\n dynCall_iiijjjiii,\n dynCall_iiiiiiiiffi,\n dynCall_iiiiiiiiiiiiiii,\n dynCall_iiiiiij,\n dynCall_iiiiiiiiffffff,\n dynCall_jiii,\n dynCall_iiiiiiiiii,\n dynCall_viiiijjjji,\n dynCall_viiiijjj,\n dynCall_iiiiiiiiiiiiiiiiii,\n dynCall_viiiijjji,\n dynCall_iiiiiiiiiiiifi,\n dynCall_iiiiiiiijjiifiiiiiii,\n dynCall_iiiiiiiiiiiiiiii,\n dynCall_iiiffff,\n dynCall_iiiff,\n dynCall_iiiiiiiiiffffff,\n dynCall_iiiiiiji,\n dynCall_iiiiijiiijjjjjjj,\n dynCall_viiiiiiiii,\n dynCall_iiiiiji,\n dynCall_iiiiiiiiiiiijjiifiiiiiiii,\n dynCall_iiiiff,\n dynCall_iiiiiiiiiiiii,\n dynCall_viiiiiiiiii,\n dynCall_dii,\n dynCall_viiiif,\n dynCall_viiiiiii,\n dynCall_iiijiiii,\n dynCall_iiiiiifi,\n dynCall_iiiiiiiifi,\n dynCall_iiiiiiiiiii,\n dynCall_iiiiiiiiff,\n dynCall_viij,\n dynCall_viiiiiiii,\n dynCall_iiiij,\n dynCall_viijii,\n dynCall_viijijj,\n dynCall_jijiii,\n dynCall_viifffi,\n dynCall_vij,\n dynCall_iiid,\n dynCall_viji,\n dynCall_jiji,\n dynCall_iidiiii,\n dynCall_jiiii,\n dynCall_diii,\n dynCall_viiiiiiiiiiiiiii,\n dynCall_iiiiij,\n dynCall_iiiiid,\n dynCall_iiiiijj,\n dynCall_iiiiiijj,\n dynCall_viif,\n dynCall_viid,\n _asyncify_start_unwind,\n _asyncify_stop_unwind,\n _asyncify_start_rewind,\n _asyncify_stop_rewind,\n __indirect_function_table,\n wasmTable;\nfunction assignWasmExports(wasmExports) {\n _wllama_malloc = Module['_wllama_malloc'] = wasmExports['Ob'];\n _wllama_start = Module['_wllama_start'] = wasmExports['Pb'];\n _wllama_action = Module['_wllama_action'] = wasmExports['Qb'];\n _wllama_exit = Module['_wllama_exit'] = wasmExports['Rb'];\n _wllama_debug = Module['_wllama_debug'] = wasmExports['Sb'];\n _main = Module['_main'] = wasmExports['Tb'];\n _malloc = wasmExports['Ub'];\n _free = wasmExports['Vb'];\n _emwgpuCreateBindGroup = wasmExports['Wb'];\n _emwgpuCreateBindGroupLayout = wasmExports['Xb'];\n _emwgpuCreateCommandBuffer = wasmExports['Yb'];\n _emwgpuCreateCommandEncoder = wasmExports['Zb'];\n _emwgpuCreateComputePassEncoder = wasmExports['_b'];\n _emwgpuCreateComputePipeline = wasmExports['$b'];\n _emwgpuCreateExternalTexture = wasmExports['ac'];\n _emwgpuCreatePipelineLayout = wasmExports['bc'];\n _emwgpuCreateQuerySet = wasmExports['cc'];\n _emwgpuCreateRenderBundle = wasmExports['dc'];\n _emwgpuCreateRenderBundleEncoder = wasmExports['ec'];\n _emwgpuCreateRenderPassEncoder = wasmExports['fc'];\n _emwgpuCreateRenderPipeline = wasmExports['gc'];\n _emwgpuCreateSampler = wasmExports['hc'];\n _emwgpuCreateSurface = wasmExports['ic'];\n _emwgpuCreateTexture = wasmExports['jc'];\n _emwgpuCreateTextureView = wasmExports['kc'];\n _emwgpuCreateAdapter = wasmExports['lc'];\n _emwgpuCreateBuffer = wasmExports['mc'];\n _emwgpuCreateDevice = wasmExports['nc'];\n _emwgpuCreateQueue = wasmExports['oc'];\n _emwgpuCreateShaderModule = wasmExports['pc'];\n _emwgpuOnDeviceLostCompleted = wasmExports['qc'];\n _emwgpuOnMapAsyncCompleted = wasmExports['rc'];\n _emwgpuOnRequestAdapterCompleted = wasmExports['sc'];\n _emwgpuOnRequestDeviceCompleted = wasmExports['tc'];\n _emwgpuOnWorkDoneCompleted = wasmExports['uc'];\n _emwgpuOnUncapturedError = wasmExports['vc'];\n _emscripten_builtin_memalign = wasmExports['wc'];\n _memalign = wasmExports['xc'];\n _setThrew = wasmExports['yc'];\n __emscripten_tempret_set = wasmExports['zc'];\n __emscripten_stack_restore = wasmExports['Ac'];\n __emscripten_stack_alloc = wasmExports['Bc'];\n _emscripten_stack_get_current = wasmExports['Cc'];\n ___cxa_decrement_exception_refcount = wasmExports['Dc'];\n ___cxa_increment_exception_refcount = wasmExports['Ec'];\n ___cxa_can_catch = wasmExports['Fc'];\n ___cxa_get_exception_ptr = wasmExports['Gc'];\n dynCall_v = dynCalls['v'] = wasmExports['Hc'];\n dynCall_ii = dynCalls['ii'] = wasmExports['Ic'];\n dynCall_iii = dynCalls['iii'] = wasmExports['Jc'];\n dynCall_viii = dynCalls['viii'] = wasmExports['Kc'];\n dynCall_vii = dynCalls['vii'] = wasmExports['Lc'];\n dynCall_iiiiii = dynCalls['iiiiii'] = wasmExports['Mc'];\n dynCall_iiiii = dynCalls['iiiii'] = wasmExports['Nc'];\n dynCall_vi = dynCalls['vi'] = wasmExports['Oc'];\n dynCall_iiii = dynCalls['iiii'] = wasmExports['Pc'];\n dynCall_viiii = dynCalls['viiii'] = wasmExports['Qc'];\n dynCall_iiiiiii = dynCalls['iiiiiii'] = wasmExports['Rc'];\n dynCall_ji = dynCalls['ji'] = wasmExports['Sc'];\n dynCall_viiiii = dynCalls['viiiii'] = wasmExports['Tc'];\n dynCall_i = dynCalls['i'] = wasmExports['Uc'];\n dynCall_iiiiiiiii = dynCalls['iiiiiiiii'] = wasmExports['Vc'];\n dynCall_j = dynCalls['j'] = wasmExports['Wc'];\n dynCall_iiiiiiii = dynCalls['iiiiiiii'] = wasmExports['Xc'];\n dynCall_ifi = dynCalls['ifi'] = wasmExports['Yc'];\n dynCall_iffii = dynCalls['iffii'] = wasmExports['Zc'];\n dynCall_ifff = dynCalls['ifff'] = wasmExports['_c'];\n dynCall_iifff = dynCalls['iifff'] = wasmExports['$c'];\n dynCall_iiiffiiii = dynCalls['iiiffiiii'] = wasmExports['ad'];\n dynCall_if = dynCalls['if'] = wasmExports['bd'];\n dynCall_iiff = dynCalls['iiff'] = wasmExports['cd'];\n dynCall_iiiffi = dynCalls['iiiffi'] = wasmExports['dd'];\n dynCall_iiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiii'] = wasmExports['ed'];\n dynCall_viiiiii = dynCalls['viiiiii'] = wasmExports['fd'];\n dynCall_iij = dynCalls['iij'] = wasmExports['gd'];\n dynCall_jii = dynCalls['jii'] = wasmExports['hd'];\n dynCall_iiij = dynCalls['iiij'] = wasmExports['id'];\n dynCall_iiijj = dynCalls['iiijj'] = wasmExports['jd'];\n dynCall_iiif = dynCalls['iiif'] = wasmExports['kd'];\n dynCall_iiijjii = dynCalls['iiijjii'] = wasmExports['ld'];\n dynCall_iiijjj = dynCalls['iiijjj'] = wasmExports['md'];\n dynCall_iiijjjj = dynCalls['iiijjjj'] = wasmExports['nd'];\n dynCall_iiiji = dynCalls['iiiji'] = wasmExports['od'];\n dynCall_iiiiiiiiiiii = dynCalls['iiiiiiiiiiii'] = wasmExports['pd'];\n dynCall_iiji = dynCalls['iiji'] = wasmExports['qd'];\n dynCall_iiiijjji = dynCalls['iiiijjji'] = wasmExports['rd'];\n dynCall_fiii = dynCalls['fiii'] = wasmExports['sd'];\n dynCall_iiijjjiii = dynCalls['iiijjjiii'] = wasmExports['td'];\n dynCall_iiiiiiiiffi = dynCalls['iiiiiiiiffi'] = wasmExports['ud'];\n dynCall_iiiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiiii'] = wasmExports['vd'];\n dynCall_iiiiiij = dynCalls['iiiiiij'] = wasmExports['wd'];\n dynCall_iiiiiiiiffffff = dynCalls['iiiiiiiiffffff'] = wasmExports['xd'];\n dynCall_jiii = dynCalls['jiii'] = wasmExports['yd'];\n dynCall_iiiiiiiiii = dynCalls['iiiiiiiiii'] = wasmExports['zd'];\n dynCall_viiiijjjji = dynCalls['viiiijjjji'] = wasmExports['Ad'];\n dynCall_viiiijjj = dynCalls['viiiijjj'] = wasmExports['Bd'];\n dynCall_iiiiiiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiiiiiii'] =\n wasmExports['Cd'];\n dynCall_viiiijjji = dynCalls['viiiijjji'] = wasmExports['Dd'];\n dynCall_iiiiiiiiiiiifi = dynCalls['iiiiiiiiiiiifi'] = wasmExports['Ed'];\n dynCall_iiiiiiiijjiifiiiiiii = dynCalls['iiiiiiiijjiifiiiiiii'] =\n wasmExports['Fd'];\n dynCall_iiiiiiiiiiiiiiii = dynCalls['iiiiiiiiiiiiiiii'] = wasmExports['Gd'];\n dynCall_iiiffff = dynCalls['iiiffff'] = wasmExports['Hd'];\n dynCall_iiiff = dynCalls['iiiff'] = wasmExports['Id'];\n dynCall_iiiiiiiiiffffff = dynCalls['iiiiiiiiiffffff'] = wasmExports['Jd'];\n dynCall_iiiiiiji = dynCalls['iiiiiiji'] = wasmExports['Kd'];\n dynCall_iiiiijiiijjjjjjj = dynCalls['iiiiijiiijjjjjjj'] = wasmExports['Ld'];\n dynCall_viiiiiiiii = dynCalls['viiiiiiiii'] = wasmExports['Md'];\n dynCall_iiiiiji = dynCalls['iiiiiji'] = wasmExports['Nd'];\n dynCall_iiiiiiiiiiiijjiifiiiiiiii = dynCalls['iiiiiiiiiiiijjiifiiiiiiii'] =\n wasmExports['Od'];\n dynCall_iiiiff = dynCalls['iiiiff'] = wasmExports['Pd'];\n dynCall_iiiiiiiiiiiii = dynCalls['iiiiiiiiiiiii'] = wasmExports['Qd'];\n dynCall_viiiiiiiiii = dynCalls['viiiiiiiiii'] = wasmExports['Rd'];\n dynCall_dii = dynCalls['dii'] = wasmExports['Sd'];\n dynCall_viiiif = dynCalls['viiiif'] = wasmExports['Td'];\n dynCall_viiiiiii = dynCalls['viiiiiii'] = wasmExports['Ud'];\n dynCall_iiijiiii = dynCalls['iiijiiii'] = wasmExports['Vd'];\n dynCall_iiiiiifi = dynCalls['iiiiiifi'] = wasmExports['Wd'];\n dynCall_iiiiiiiifi = dynCalls['iiiiiiiifi'] = wasmExports['Xd'];\n dynCall_iiiiiiiiiii = dynCalls['iiiiiiiiiii'] = wasmExports['Yd'];\n dynCall_iiiiiiiiff = dynCalls['iiiiiiiiff'] = wasmExports['Zd'];\n dynCall_viij = dynCalls['viij'] = wasmExports['_d'];\n dynCall_viiiiiiii = dynCalls['viiiiiiii'] = wasmExports['$d'];\n dynCall_iiiij = dynCalls['iiiij'] = wasmExports['ae'];\n dynCall_viijii = dynCalls['viijii'] = wasmExports['be'];\n dynCall_viijijj = dynCalls['viijijj'] = wasmExports['ce'];\n dynCall_jijiii = dynCalls['jijiii'] = wasmExports['de'];\n dynCall_viifffi = dynCalls['viifffi'] = wasmExports['ee'];\n dynCall_vij = dynCalls['vij'] = wasmExports['fe'];\n dynCall_iiid = dynCalls['iiid'] = wasmExports['ge'];\n dynCall_viji = dynCalls['viji'] = wasmExports['he'];\n dynCall_jiji = dynCalls['jiji'] = wasmExports['ie'];\n dynCall_iidiiii = dynCalls['iidiiii'] = wasmExports['je'];\n dynCall_jiiii = dynCalls['jiiii'] = wasmExports['ke'];\n dynCall_diii = dynCalls['diii'] = wasmExports['le'];\n dynCall_viiiiiiiiiiiiiii = dynCalls['viiiiiiiiiiiiiii'] = wasmExports['me'];\n dynCall_iiiiij = dynCalls['iiiiij'] = wasmExports['ne'];\n dynCall_iiiiid = dynCalls['iiiiid'] = wasmExports['oe'];\n dynCall_iiiiijj = dynCalls['iiiiijj'] = wasmExports['pe'];\n dynCall_iiiiiijj = dynCalls['iiiiiijj'] = wasmExports['qe'];\n dynCall_viif = dynCalls['viif'] = wasmExports['re'];\n dynCall_viid = dynCalls['viid'] = wasmExports['se'];\n _asyncify_start_unwind = wasmExports['te'];\n _asyncify_stop_unwind = wasmExports['ue'];\n _asyncify_start_rewind = wasmExports['ve'];\n _asyncify_stop_rewind = wasmExports['we'];\n __indirect_function_table = wasmTable = wasmExports['Nb'];\n}\nvar wasmImports = {\n y: ___cxa_begin_catch,\n ib: ___cxa_current_primary_exception,\n K: ___cxa_end_catch,\n b: ___cxa_find_matching_catch_2,\n p: ___cxa_find_matching_catch_3,\n R: ___cxa_find_matching_catch_4,\n ma: ___cxa_rethrow,\n hb: ___cxa_rethrow_primary_exception,\n E: ___cxa_throw,\n sa: ___cxa_uncaught_exceptions,\n j: ___resumeException,\n va: ___syscall_fcntl64,\n rb: ___syscall_ioctl,\n sb: ___syscall_openat,\n vb: __abort_js,\n lb: __mmap_js,\n mb: __munmap_js,\n nb: __tzset_js,\n ub: _clock_time_get,\n tb: _emscripten_date_now,\n kb: _emscripten_get_heap_max,\n Bb: _emscripten_has_asyncify,\n jb: _emscripten_resize_heap,\n Ab: _emwgpuAdapterRequestDevice,\n Hb: _emwgpuBufferDestroy,\n Gb: _emwgpuBufferGetConstMappedRange,\n Fb: _emwgpuBufferMapAsync,\n Eb: _emwgpuBufferUnmap,\n I: _emwgpuDelete,\n zb: _emwgpuDeviceCreateBuffer,\n yb: _emwgpuDeviceCreateShaderModule,\n Db: _emwgpuDeviceDestroy,\n xb: _emwgpuInstanceRequestAdapter,\n wb: _emwgpuQueueOnSubmittedWorkDone,\n Cb: _emwgpuWaitAny,\n pb: _environ_get,\n qb: _environ_sizes_get,\n na: _fd_close,\n ta: _fd_read,\n ob: _fd_seek,\n ua: _fd_write,\n ja: invoke_dii,\n ra: invoke_diii,\n G: invoke_fiii,\n D: invoke_i,\n pa: invoke_if,\n db: invoke_ifff,\n eb: invoke_iffii,\n $: invoke_ifi,\n d: invoke_ii,\n bb: invoke_iiff,\n cb: invoke_iifff,\n g: invoke_iii,\n wa: invoke_iiid,\n w: invoke_iiif,\n Va: invoke_iiiff,\n Wa: invoke_iiiffff,\n ab: invoke_iiiffi,\n qa: invoke_iiiffiiii,\n f: invoke_iiii,\n Ra: invoke_iiiiff,\n k: invoke_iiiii,\n o: invoke_iiiiii,\n ia: invoke_iiiiiifi,\n n: invoke_iiiiiii,\n M: invoke_iiiiiiii,\n ba: invoke_iiiiiiiiff,\n q: invoke_iiiiiiiiffffff,\n Za: invoke_iiiiiiiiffi,\n Oa: invoke_iiiiiiiifi,\n V: invoke_iiiiiiiii,\n Q: invoke_iiiiiiiiiffffff,\n i: invoke_iiiiiiiiii,\n Na: invoke_iiiiiiiiiii,\n Z: invoke_iiiiiiiiiiii,\n u: invoke_iiiiiiiiiiiifi,\n Qa: invoke_iiiiiiiiiiiii,\n $a: invoke_iiiiiiiiiiiiii,\n Y: invoke_iiiiiiiiiiiiiii,\n t: invoke_iiiiiiiiiiiiiiii,\n oa: invoke_iiiiiiiiiiiiiiiiii,\n Sa: invoke_iiiiiiiiiiiijjiifiiiiiiii,\n F: invoke_iiiiiiiijjiifiiiiiii,\n Ya: invoke_iiiiiij,\n la: invoke_iiiiiiji,\n Ta: invoke_iiiiiji,\n ka: invoke_iiiiijiiijjjjjjj,\n _: invoke_iiiij,\n _a: invoke_iiiijjji,\n N: invoke_iiij,\n X: invoke_iiiji,\n P: invoke_iiijiiii,\n H: invoke_iiijj,\n O: invoke_iiijjii,\n x: invoke_iiijjj,\n B: invoke_iiijjjiii,\n J: invoke_iiijjjj,\n A: invoke_iij,\n S: invoke_iiji,\n T: invoke_j,\n fa: invoke_ji,\n da: invoke_jii,\n W: invoke_jiii,\n aa: invoke_jiiii,\n Ba: invoke_jijiii,\n c: invoke_v,\n m: invoke_vi,\n l: invoke_vii,\n fb: invoke_viid,\n Xa: invoke_viif,\n h: invoke_viii,\n e: invoke_viiii,\n Pa: invoke_viiiif,\n s: invoke_viiiii,\n r: invoke_viiiiii,\n L: invoke_viiiiiii,\n Ua: invoke_viiiiiiiii,\n U: invoke_viiiiiiiiii,\n ea: invoke_viiiiiiiiiiiiiii,\n ca: invoke_viiiijjj,\n v: invoke_viiiijjji,\n z: invoke_viiiijjjji,\n ga: invoke_viijii,\n Ea: invoke_viijijj,\n xa: invoke_vij,\n C: _llvm_eh_typeid_for,\n a: wasmMemory,\n gb: _random_get,\n Ka: _wgpuAdapterGetFeatures,\n La: _wgpuAdapterGetInfo,\n Ma: _wgpuAdapterGetLimits,\n Ja: _wgpuAdapterHasFeature,\n Ha: _wgpuBufferGetSize,\n ya: _wgpuCommandEncoderBeginComputePass,\n Fa: _wgpuCommandEncoderCopyBufferToBuffer,\n Da: _wgpuCommandEncoderFinish,\n Jb: _wgpuComputePassEncoderDispatchWorkgroups,\n Ib: _wgpuComputePassEncoderEnd,\n Kb: _wgpuComputePassEncoderSetBindGroup,\n Lb: _wgpuComputePassEncoderSetPipeline,\n Aa: _wgpuComputePipelineGetBindGroupLayout,\n za: _wgpuDeviceCreateBindGroup,\n Ga: _wgpuDeviceCreateCommandEncoder,\n Ia: _wgpuDeviceCreateComputePipeline,\n Ca: _wgpuQueueSubmit,\n ha: _wgpuQueueWriteBuffer,\n};\nfunction invoke_v(index) {\n var sp = stackSave();\n try {\n dynCall_v(index);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_viii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iii(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_iii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ii(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ii(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vii(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiiiii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vi(index, a1) {\n var sp = stackSave();\n try {\n dynCall_vi(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n dynCall_viiii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ji(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_ji(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_viiiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_viiiii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_i(index) {\n var sp = stackSave();\n try {\n return dynCall_i(index);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_j(index) {\n var sp = stackSave();\n try {\n return dynCall_j(index);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_iiiiiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiii(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiii(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ifi(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_ifi(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iffii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iffii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_ifff(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_ifff(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iifff(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iifff(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiffiiii(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_iiiffiiii(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_if(index, a1) {\n var sp = stackSave();\n try {\n return dynCall_if(index, a1);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiff(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiff(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiffi(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiiffi(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_viiiiii(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iij(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_iij(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jii(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_jii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_iiij(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiij(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiijjj(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_viiiijjj(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijj(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiijj(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiif(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiif(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjii(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiijjii(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjj(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiijjj(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjjj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiijjjj(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiji(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiji(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiji(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiji(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiijjji(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiijjji(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_fiii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_fiii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijjjiii(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n return dynCall_iiijjjiii(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiffi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiffi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiij(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiij(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viif(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_viif(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiijjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n dynCall_viiiijjjji(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jiii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_jiii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_viiiijjji(index, a1, a2, a3, a4, a5, a6, a7, a8) {\n var sp = stackSave();\n try {\n dynCall_viiiijjji(index, a1, a2, a3, a4, a5, a6, a7, a8);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiifi(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiifi(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiijjiifiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiijjiifiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiffff(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiffff(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiff(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiff(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiffffff(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiji(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiji(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiijiiijjjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiijiiijjjjjjj(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n dynCall_viiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiji(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiji(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiijjiifiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiijjiifiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15,\n a16,\n a17,\n a18,\n a19,\n a20,\n a21,\n a22,\n a23,\n a24\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiff(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_iiiiff(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_dii(index, a1, a2) {\n var sp = stackSave();\n try {\n return dynCall_dii(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12\n) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n dynCall_viiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiif(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_viiiif(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n dynCall_viiiiiii(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiijiiii(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiijiiii(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiifi(index, a1, a2, a3, a4, a5, a6, a7) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiifi(index, a1, a2, a3, a4, a5, a6, a7);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiifi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiifi(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiiii(index, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiiiiiiff(index, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n var sp = stackSave();\n try {\n return dynCall_iiiiiiiiff(index, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiiij(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_iiiij(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viijijj(index, a1, a2, a3, a4, a5, a6) {\n var sp = stackSave();\n try {\n dynCall_viijijj(index, a1, a2, a3, a4, a5, a6);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jijiii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n return dynCall_jijiii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_viijii(index, a1, a2, a3, a4, a5) {\n var sp = stackSave();\n try {\n dynCall_viijii(index, a1, a2, a3, a4, a5);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_vij(index, a1, a2) {\n var sp = stackSave();\n try {\n dynCall_vij(index, a1, a2);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_iiid(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_iiid(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_jiiii(index, a1, a2, a3, a4) {\n var sp = stackSave();\n try {\n return dynCall_jiiii(index, a1, a2, a3, a4);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n return 0n;\n }\n}\nfunction invoke_diii(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n return dynCall_diii(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n) {\n var sp = stackSave();\n try {\n dynCall_viiiiiiiiiiiiiii(\n index,\n a1,\n a2,\n a3,\n a4,\n a5,\n a6,\n a7,\n a8,\n a9,\n a10,\n a11,\n a12,\n a13,\n a14,\n a15\n );\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction invoke_viid(index, a1, a2, a3) {\n var sp = stackSave();\n try {\n dynCall_viid(index, a1, a2, a3);\n } catch (e) {\n stackRestore(sp);\n if (e !== e + 0) throw e;\n _setThrew(1, 0);\n }\n}\nfunction applySignatureConversions(wasmExports) {\n wasmExports = Object.assign({}, wasmExports);\n var makeWrapper_pp = (f) => (a0) => f(a0) >>> 0;\n var makeWrapper_ppp = (f) => (a0, a1) => f(a0, a1) >>> 0;\n var makeWrapper_p = (f) => () => f() >>> 0;\n wasmExports['Ub'] = makeWrapper_pp(wasmExports['Ub']);\n wasmExports['wc'] = makeWrapper_ppp(wasmExports['wc']);\n wasmExports['xc'] = makeWrapper_ppp(wasmExports['xc']);\n wasmExports['Bc'] = makeWrapper_pp(wasmExports['Bc']);\n wasmExports['Cc'] = makeWrapper_p(wasmExports['Cc']);\n wasmExports['Gc'] = makeWrapper_pp(wasmExports['Gc']);\n return wasmExports;\n}\nfunction callMain() {\n var entryFunction = _main;\n var argc = 0;\n var argv = 0;\n try {\n var ret = entryFunction(argc, argv);\n exitJS(ret, true);\n return ret;\n } catch (e) {\n return handleException(e);\n }\n}\nfunction run() {\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n preRun();\n if (runDependencies > 0) {\n dependenciesFulfilled = run;\n return;\n }\n function doRun() {\n Module['calledRun'] = true;\n if (ABORT) return;\n initRuntime();\n preMain();\n Module['onRuntimeInitialized']?.();\n var noInitialRun = Module['noInitialRun'] || false;\n if (!noInitialRun) callMain();\n postRun();\n }\n if (Module['setStatus']) {\n Module['setStatus']('Running...');\n setTimeout(() => {\n setTimeout(() => Module['setStatus'](''), 1);\n doRun();\n }, 1);\n } else {\n doRun();\n }\n}\nvar wasmExports;\ncreateWasm();\nrun();\n";