dilithium-crystals-js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -0
- package/dilithium.js +21 -0
- package/dilithium.wasm +0 -0
- package/dist/dilithium.min.js +1 -0
- package/package.json +28 -0
- package/src/browser/index.js +34 -0
- package/src/common.js +196 -0
- package/src/node/index.js +32 -0
package/README.md
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
# Dilithium-JS
|
2
|
+
|
3
|
+
Dilithium-JS is a JavaScript implementation of the Dilithium post-quantum cryptographic signature scheme. This package provides a unified API for both Node.js and browser environments, offering robust quantum-resistant digital signatures.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
- Implements Dilithium, a lattice-based digital signature scheme
|
8
|
+
- Supports all four parameter sets of Dilithium
|
9
|
+
- Works in both Node.js and browser environments
|
10
|
+
- Easy-to-use API for key generation, signing, and verification
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
You can install the package using npm:
|
15
|
+
|
16
|
+
```bash
|
17
|
+
npm install dilithium-js
|
18
|
+
```
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
### Node.js
|
23
|
+
|
24
|
+
In a Node.js environment, you can use the package as follows:
|
25
|
+
|
26
|
+
```javascript
|
27
|
+
const Dilithium = require("dilithium-js");
|
28
|
+
|
29
|
+
Dilithium.then((dilithium) => {
|
30
|
+
// Generate keys
|
31
|
+
const kind = 2; // Dilithium2
|
32
|
+
const { publicKey, privateKey } = dilithium.generateKeys(kind);
|
33
|
+
|
34
|
+
// Sign a message
|
35
|
+
const message = Buffer.from("Hello, Dilithium!");
|
36
|
+
const { signature } = dilithium.sign(message, privateKey, kind);
|
37
|
+
|
38
|
+
// Verify the signature
|
39
|
+
const verificationResult = dilithium.verify(
|
40
|
+
signature,
|
41
|
+
message,
|
42
|
+
publicKey,
|
43
|
+
kind
|
44
|
+
);
|
45
|
+
|
46
|
+
console.log(
|
47
|
+
"Verification result:",
|
48
|
+
verificationResult.result === 0 ? "Valid" : "Invalid"
|
49
|
+
);
|
50
|
+
});
|
51
|
+
```
|
52
|
+
|
53
|
+
### Browser
|
54
|
+
|
55
|
+
For browser environments, include the minified script in your HTML
|
56
|
+
|
57
|
+
```javascript
|
58
|
+
<script src="path/to/dilithium.min.js"></script>;
|
59
|
+
|
60
|
+
Dilithium.then((dilithium) => {
|
61
|
+
// Generate keys
|
62
|
+
const kind = 2; // Dilithium2
|
63
|
+
const { publicKey, privateKey } = dilithium.generateKeys(kind);
|
64
|
+
|
65
|
+
// Sign a message
|
66
|
+
const message = new TextEncoder().encode("Hello, Dilithium!");
|
67
|
+
const { signature } = dilithium.sign(message, privateKey, kind);
|
68
|
+
|
69
|
+
// Verify the signature
|
70
|
+
const verificationResult = dilithium.verify(
|
71
|
+
signature,
|
72
|
+
message,
|
73
|
+
publicKey,
|
74
|
+
kind
|
75
|
+
);
|
76
|
+
|
77
|
+
console.log(
|
78
|
+
"Verification result:",
|
79
|
+
verificationResult.result === 0 ? "Valid" : "Invalid"
|
80
|
+
);
|
81
|
+
});
|
82
|
+
```
|
83
|
+
|
84
|
+
## API Reference
|
85
|
+
|
86
|
+
### `dilithium.generateKeys(kind, seed?)`
|
87
|
+
|
88
|
+
Generates a new key pair.
|
89
|
+
|
90
|
+
- **kind**: Number (0-3) specifying the Dilithium parameter set.
|
91
|
+
- **seed** (optional): A seed for deterministic key generation.
|
92
|
+
|
93
|
+
**Returns**: `{ publicKey, privateKey }`
|
94
|
+
|
95
|
+
### `dilithium.sign(message, privateKey, kind)`
|
96
|
+
|
97
|
+
Signs a message.
|
98
|
+
|
99
|
+
- **message**: `Uint8Array` or `Buffer` containing the message to sign.
|
100
|
+
- **privateKey**: The private key generated by `generateKeys`.
|
101
|
+
- **kind**: Number (0-3) specifying the Dilithium parameter set.
|
102
|
+
|
103
|
+
**Returns**: `{ signature, signatureLength }`
|
104
|
+
|
105
|
+
### `dilithium.verify(signature, message, publicKey, kind)`
|
106
|
+
|
107
|
+
Verifies a signature.
|
108
|
+
|
109
|
+
- **signature**: The signature to verify.
|
110
|
+
- **message**: The original message that was signed.
|
111
|
+
- **publicKey**: The public key corresponding to the private key used for signing.
|
112
|
+
- **kind**: Number (0-3) specifying the Dilithium parameter set.
|
113
|
+
|
114
|
+
**Returns**: An object containing the verification result and other metadata.
|
115
|
+
|
116
|
+
## Dilithium Parameter Sets
|
117
|
+
|
118
|
+
Dilithium-JS supports all four parameter sets of the Dilithium signature scheme:
|
119
|
+
|
120
|
+
- **0**: Dilithium2 (NIST security level 2)
|
121
|
+
- **1**: Dilithium3 (NIST security level 3)
|
122
|
+
- **2**: Dilithium5 (NIST security level 5)
|
123
|
+
- **3**: Dilithium2-AES (NIST security level 2, AES variant)
|
124
|
+
|
125
|
+
Choose the appropriate parameter set based on your security requirements.
|
126
|
+
|
127
|
+
## Contributing
|
128
|
+
|
129
|
+
Contributions to Dilithium-JS are welcome! Please follow these steps:
|
130
|
+
|
131
|
+
1. Fork the repository
|
132
|
+
2. Create a new branch for your feature or bug fix
|
133
|
+
3. Commit your changes with clear, descriptive commit messages
|
134
|
+
4. Push your branch and submit a pull request
|
135
|
+
|
136
|
+
Please ensure your code adheres to the existing style and includes appropriate test coverage.
|
137
|
+
|
138
|
+
If you encounter any issues or have questions about Dilithium-JS, please file an issue on the GitHub repository.
|
139
|
+
|
140
|
+
## Acknowledgments
|
package/dilithium.js
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
var dilithium = (() => {
|
3
|
+
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
|
4
|
+
if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
|
5
|
+
return (
|
6
|
+
function(dilithium) {
|
7
|
+
dilithium = dilithium || {};
|
8
|
+
|
9
|
+
"use strict";var Module=typeof dilithium!="undefined"?dilithium:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});if(!Object.getOwnPropertyDescriptor(Module["ready"],"_malloc")){Object.defineProperty(Module["ready"],"_malloc",{configurable:true,get:function(){abort("You are getting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_malloc",{configurable:true,set:function(){abort("You are setting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_free")){Object.defineProperty(Module["ready"],"_free",{configurable:true,get:function(){abort("You are getting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_free",{configurable:true,set:function(){abort("You are setting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_SHA3_256")){Object.defineProperty(Module["ready"],"_SHA3_256",{configurable:true,get:function(){abort("You are getting _SHA3_256 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_SHA3_256",{configurable:true,set:function(){abort("You are setting _SHA3_256 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_randombytes")){Object.defineProperty(Module["ready"],"_randombytes",{configurable:true,get:function(){abort("You are getting _randombytes on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_randombytes",{configurable:true,set:function(){abort("You are setting _randombytes on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_dilithium_keygen")){Object.defineProperty(Module["ready"],"_dilithium_keygen",{configurable:true,get:function(){abort("You are getting _dilithium_keygen on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_dilithium_keygen",{configurable:true,set:function(){abort("You are setting _dilithium_keygen on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_dilithium_sign")){Object.defineProperty(Module["ready"],"_dilithium_sign",{configurable:true,get:function(){abort("You are getting _dilithium_sign on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_dilithium_sign",{configurable:true,set:function(){abort("You are setting _dilithium_sign on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"_dilithium_verify")){Object.defineProperty(Module["ready"],"_dilithium_verify",{configurable:true,get:function(){abort("You are getting _dilithium_verify on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"_dilithium_verify",{configurable:true,set:function(){abort("You are setting _dilithium_verify on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"___stdio_exit")){Object.defineProperty(Module["ready"],"___stdio_exit",{configurable:true,get:function(){abort("You are getting ___stdio_exit on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"___stdio_exit",{configurable:true,set:function(){abort("You are setting ___stdio_exit on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}if(!Object.getOwnPropertyDescriptor(Module["ready"],"onRuntimeInitialized")){Object.defineProperty(Module["ready"],"onRuntimeInitialized",{configurable:true,get:function(){abort("You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}});Object.defineProperty(Module["ready"],"onRuntimeInitialized",{configurable:true,set:function(){abort("You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)")}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;if(e&&typeof e=="object"&&e.stack){toLog=[e,e.stack]}err("exiting due to exception: "+toLog)}var fs;var nodePath;var requireNodeFS;if(ENVIRONMENT_IS_NODE){if(!(typeof process=="object"&&typeof require=="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}requireNodeFS=(()=>{if(!nodePath){fs=require("fs");nodePath=require("path")}});read_=function shell_read(filename,binary){requireNodeFS();filename=nodePath["normalize"](filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=(filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret});readAsync=((filename,onload,onerror)=>{requireNodeFS();filename=nodePath["normalize"](filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})});if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=((status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)});Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof process=="object"&&typeof require==="function"||typeof window=="object"||typeof importScripts=="function")throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){let data;if(typeof readbuffer=="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data=="object");return data};readAsync=function readAsync(f,onload,onerror){setTimeout(()=>onload(readBinary(f)),0)};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit=="function"){quit_=((status,toThrow)=>{logExceptionOnExit(toThrow);quit(status)})}if(typeof print!="undefined"){if(typeof console=="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}if(!(typeof window=="object"||typeof importScripts=="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{throw new Error("environment detection error")}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(!Object.getOwnPropertyDescriptor(Module,"arguments")){Object.defineProperty(Module,"arguments",{configurable:true,get:function(){abort("Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(!Object.getOwnPropertyDescriptor(Module,"thisProgram")){Object.defineProperty(Module,"thisProgram",{configurable:true,get:function(){abort("Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(Module["quit"])quit_=Module["quit"];if(!Object.getOwnPropertyDescriptor(Module,"quit")){Object.defineProperty(Module,"quit",{configurable:true,get:function(){abort("Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(typeof Module["memoryInitializerPrefixURL"]=="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]=="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]=="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]=="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["read"]=="undefined","Module.read option was removed (modify read_ in JS)");assert(typeof Module["readAsync"]=="undefined","Module.readAsync option was removed (modify readAsync in JS)");assert(typeof Module["readBinary"]=="undefined","Module.readBinary option was removed (modify readBinary in JS)");assert(typeof Module["setWindowTitle"]=="undefined","Module.setWindowTitle option was removed (modify setWindowTitle in JS)");assert(typeof Module["TOTAL_MEMORY"]=="undefined","Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");if(!Object.getOwnPropertyDescriptor(Module,"read")){Object.defineProperty(Module,"read",{configurable:true,get:function(){abort("Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"readAsync")){Object.defineProperty(Module,"readAsync",{configurable:true,get:function(){abort("Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"readBinary")){Object.defineProperty(Module,"readBinary",{configurable:true,get:function(){abort("Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(!Object.getOwnPropertyDescriptor(Module,"setWindowTitle")){Object.defineProperty(Module,"setWindowTitle",{configurable:true,get:function(){abort("Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(!ENVIRONMENT_IS_SHELL,"shell environment detected but not enabled at build time. Add 'shell' to `-s ENVIRONMENT` to enable.");var POINTER_SIZE=4;function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function=="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i<sig.length;++i){type.parameters.push(typeNames[sig[i]])}return new WebAssembly.Function(type,func)}var typeSection=[1,0,1,96];var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={"i":127,"j":126,"f":125,"d":124};typeSection.push(sigParam.length);for(var i=0;i<sigParam.length;++i){typeSection.push(typeCodes[sigParam[i]])}if(sigRet=="v"){typeSection.push(0)}else{typeSection=typeSection.concat([1,typeCodes[sigRet]])}typeSection[1]=typeSection.length-2;var bytes=new Uint8Array([0,97,115,109,1,0,0,0].concat(typeSection,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0]));var module=new WebAssembly.Module(bytes);var instance=new WebAssembly.Instance(module,{"e":{"f":func}});var wrappedFunc=instance.exports["f"];return wrappedFunc}var freeTableIndexes=[];var functionsInTableMap;function getEmptyTableSlot(){if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1}function updateTableMap(offset,count){for(var i=offset;i<offset+count;i++){var item=getWasmTableEntry(i);if(item){functionsInTableMap.set(item,i)}}}var tempRet0=0;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(!Object.getOwnPropertyDescriptor(Module,"wasmBinary")){Object.defineProperty(Module,"wasmBinary",{configurable:true,get:function(){abort("Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}var noExitRuntime=Module["noExitRuntime"]||true;if(!Object.getOwnPropertyDescriptor(Module,"noExitRuntime")){Object.defineProperty(Module,"noExitRuntime",{configurable:true,get:function(){abort("Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}if(typeof WebAssembly!="object"){abort("no native wasm support detected")}function setValue(ptr,value,type="i8",noSafe){if(type.charAt(type.length-1)==="*")type="i32";if(noSafe){switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":HEAP64[ptr>>3]=BigInt(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}else{switch(type){case"i1":SAFE_HEAP_STORE(ptr|0,value|0,1);break;case"i8":SAFE_HEAP_STORE(ptr|0,value|0,1);break;case"i16":SAFE_HEAP_STORE(ptr|0,value|0,2);break;case"i32":SAFE_HEAP_STORE(ptr|0,value|0,4);break;case"i64":SAFE_HEAP_STORE(ptr|0,value|0,8);break;case"float":SAFE_HEAP_STORE_D(ptr|0,Math.fround(value),4);break;case"double":SAFE_HEAP_STORE_D(ptr|0,+value,8);break;default:abort("invalid type for setValue: "+type)}}}function getValue(ptr,type="i8",noSafe){if(type.charAt(type.length-1)==="*")type="i32";if(noSafe){switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return Number(HEAP64[ptr>>3]);case"float":return HEAPF32[ptr>>2];case"double":return Number(HEAPF64[ptr>>3]);default:abort("invalid type for getValue: "+type)}}else{switch(type){case"i1":return SAFE_HEAP_LOAD(ptr|0,1,0)|0;case"i8":return SAFE_HEAP_LOAD(ptr|0,1,0)|0;case"i16":return SAFE_HEAP_LOAD(ptr|0,2,0)|0;case"i32":return SAFE_HEAP_LOAD(ptr|0,4,0)|0;case"i64":return SAFE_HEAP_LOAD(ptr|0,8,0)|0;case"float":return Math.fround(SAFE_HEAP_LOAD_D(ptr|0,4,0));case"double":return+SAFE_HEAP_LOAD_D(ptr|0,8,0);default:abort("invalid type for getValue: "+type)}}return null}function getSafeHeapType(bytes,isFloat){switch(bytes){case 1:return"i8";case 2:return"i16";case 4:return isFloat?"float":"i32";case 8:return isFloat?"double":"i64";default:assert(0)}}function SAFE_HEAP_STORE(dest,value,bytes,isFloat){if(dest<=0)abort("segmentation fault storing "+bytes+" bytes to address "+dest);if(dest%bytes!==0)abort("alignment error storing to address "+dest+", which was expected to be aligned to a multiple of "+bytes);if(runtimeInitialized&&!runtimeExited){var brk=_sbrk()>>>0;if(dest+bytes>brk)abort("segmentation fault, exceeded the top of the available dynamic heap when storing "+bytes+" bytes to address "+dest+". DYNAMICTOP="+brk);assert(brk>=_emscripten_stack_get_base());assert(brk<=HEAP8.length)}setValue(dest,value,getSafeHeapType(bytes,isFloat),1);return value}function SAFE_HEAP_STORE_D(dest,value,bytes){return SAFE_HEAP_STORE(dest,value,bytes,true)}function SAFE_HEAP_LOAD(dest,bytes,unsigned,isFloat){if(dest<=0)abort("segmentation fault loading "+bytes+" bytes from address "+dest);if(dest%bytes!==0)abort("alignment error loading from address "+dest+", which was expected to be aligned to a multiple of "+bytes);if(runtimeInitialized&&!runtimeExited){var brk=_sbrk()>>>0;if(dest+bytes>brk)abort("segmentation fault, exceeded the top of the available dynamic heap when loading "+bytes+" bytes from address "+dest+". DYNAMICTOP="+brk);assert(brk>=_emscripten_stack_get_base());assert(brk<=HEAP8.length)}var type=getSafeHeapType(bytes,isFloat);var ret=getValue(dest,type,1);if(unsigned)ret=unSign(ret,parseInt(type.substr(1),10));return ret}function SAFE_HEAP_LOAD_D(dest,bytes,unsigned){return SAFE_HEAP_LOAD(dest,bytes,unsigned,true)}function segfault(){abort("segmentation fault")}function alignfault(){abort("alignment fault")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed"+(text?": "+text:""))}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}function cwrap(ident,returnType,argTypes,opts){return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{if((u0&248)!=240)warnOnce("Invalid UTF-8 leading byte 0x"+u0.toString(16)+" encountered when deserializing a UTF-8 string in wasm memory to a JS string!");u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;if(u>1114111)warnOnce("Invalid Unicode code point 0x"+u.toString(16)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):undefined;function writeArrayToMemory(array,buffer){assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){assert(str.charCodeAt(i)===(str.charCodeAt(i)&255));SAFE_HEAP_STORE(buffer++|0,str.charCodeAt(i)|0,1)}if(!dontAddNull)SAFE_HEAP_STORE(buffer|0,0|0,1)}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf);Module["HEAP64"]=HEAP64=new BigInt64Array(buf);Module["HEAPU64"]=HEAPU64=new BigUint64Array(buf)}var TOTAL_STACK=5242880;if(Module["TOTAL_STACK"])assert(TOTAL_STACK===Module["TOTAL_STACK"],"the stack size can no longer be determined at runtime");var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(!Object.getOwnPropertyDescriptor(Module,"INITIAL_MEMORY")){Object.defineProperty(Module,"INITIAL_MEMORY",{configurable:true,get:function(){abort("Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}})}assert(INITIAL_MEMORY>=TOTAL_STACK,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+INITIAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");assert(typeof Int32Array!="undefined"&&typeof Float64Array!=="undefined"&&Int32Array.prototype.subarray!=undefined&&Int32Array.prototype.set!=undefined,"JS engine does not provide full typed array support");assert(!Module["wasmMemory"],"Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally");assert(INITIAL_MEMORY==16777216,"Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically");var wasmTable;function writeStackCookie(){var max=_emscripten_stack_get_end();assert((max&3)==0);SAFE_HEAP_STORE(max+4|0,34821223|0,4);SAFE_HEAP_STORE(max+8|0,2310721022|0,4)}function checkStackCookie(){if(ABORT)return;var max=_emscripten_stack_get_end();var cookie1=SAFE_HEAP_LOAD(max+4|0,4,1)>>>0;var cookie2=SAFE_HEAP_LOAD(max+8|0,4,1)>>>0;if(cookie1!=34821223||cookie2!=2310721022){abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+cookie2.toString(16)+" 0x"+cookie1.toString(16))}}(function(){var h16=new Int16Array(1);var h8=new Int8Array(h16.buffer);h16[0]=25459;if(h8[0]!==115||h8[1]!==99)throw"Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)"})();var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){checkStackCookie();assert(!runtimeInitialized);runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){checkStackCookie();runtimeExited=true}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}assert(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");assert(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;var runDependencyTracking={};function getUniqueRunDependency(id){var orig=id;while(1){if(!runDependencyTracking[id])return id;id=orig+Math.random()}}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(!runDependencyTracking[id]);runDependencyTracking[id]=1;if(runDependencyWatcher===null&&typeof setInterval!="undefined"){runDependencyWatcher=setInterval(function(){if(ABORT){clearInterval(runDependencyWatcher);runDependencyWatcher=null;return}var shown=false;for(var dep in runDependencyTracking){if(!shown){shown=true;err("still waiting on run dependencies:")}err("dependency: "+dep)}if(shown){err("(end of list)")}},1e4)}}else{err("warning: run dependency added without ID")}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(id){assert(runDependencyTracking[id]);delete runDependencyTracking[id]}else{err("warning: run dependency removed without ID")}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}function createExportWrapper(name,fixedasm){return function(){var displayName=name;var asm=fixedasm;if(!fixedasm){asm=Module["asm"]}assert(runtimeInitialized,"native function `"+displayName+"` called before runtime initialization");assert(!runtimeExited,"native function `"+displayName+"` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)");if(!asm[name]){assert(asm[name],"exported native function `"+displayName+"` not found")}return asm[name].apply(null,arguments)}}var wasmBinaryFile;wasmBinaryFile="dilithium.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];assert(wasmMemory,"memory not found in wasm exports");updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["__indirect_function_table"];assert(wasmTable,"table not found in wasm exports");addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");var trueModule=Module;function receiveInstantiationResult(result){assert(Module===trueModule,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");trueModule=null;receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);if(isFileURI(wasmBinaryFile)){err("warning: Loading from a file URI ("+wasmBinaryFile+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing")}abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}var wasmTableMirror=[];function getWasmTableEntry(funcPtr){var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}assert(wasmTable.get(funcPtr)==func,"JavaScript-side Wasm function table mirror is out of date!");return func}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function setWasmTableEntry(idx,func){wasmTable.set(idx,func);wasmTableMirror[idx]=func}function unSign(value,bits){if(value>=0){return value}return bits<=32?2*Math.abs(1<<bits-1)+value:Math.pow(2,bits)+value}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;try{bytesRead=fs.readSync(process.stdin.fd,buf,0,BUFSIZE,-1)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){abort("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){assert(!(buffer instanceof ArrayBuffer));if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){assert(position===0,"canOwn must imply no weird position inside the file");node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};var ERRNO_CODES={};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{assert(typeof parent=="object");var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{if(typeof type=="string"){throw type}var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:(path,mode,dev)=>{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode,fd_start,fd_end)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,address,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1);assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}};this.setErrno(errno);this.message=ERRNO_MESSAGES[errno];if(this.stack){Object.defineProperty(this,"stack",{value:(new Error).stack,writable:true});this.stack=demangleAll(this.stack)}};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:(input,output,error)=>{assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;___stdio_exit();for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:(parent,name,input,output)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:(stream,buffer,offset,length,pos)=>{for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:obj=>{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=((stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size});node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=(()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)});openRequest.onsuccess=(()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=(()=>{ok++;if(ok+fail==total)finish()});putRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=(()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=(()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()});getRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror},absolutePath:()=>{abort("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{abort("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{abort("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{abort("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{abort("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{abort("FS.standardizePath has been removed; use PATH.normalize instead")}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}SAFE_HEAP_STORE(buf|0,stat.dev|0,4);SAFE_HEAP_STORE(buf+4|0,0|0,4);SAFE_HEAP_STORE(buf+8|0,stat.ino|0,4);SAFE_HEAP_STORE(buf+12|0,stat.mode|0,4);SAFE_HEAP_STORE(buf+16|0,stat.nlink|0,4);SAFE_HEAP_STORE(buf+20|0,stat.uid|0,4);SAFE_HEAP_STORE(buf+24|0,stat.gid|0,4);SAFE_HEAP_STORE(buf+28|0,stat.rdev|0,4);SAFE_HEAP_STORE(buf+32|0,0|0,4);SAFE_HEAP_STORE(buf+40|0,stat.size|0,8);SAFE_HEAP_STORE(buf+48|0,4096|0,4);SAFE_HEAP_STORE(buf+52|0,stat.blocks|0,4);SAFE_HEAP_STORE(buf+56|0,stat.atime.getTime()/1e3|0|0,4);SAFE_HEAP_STORE(buf+60|0,0|0,4);SAFE_HEAP_STORE(buf+64|0,stat.mtime.getTime()/1e3|0|0,4);SAFE_HEAP_STORE(buf+68|0,0|0,4);SAFE_HEAP_STORE(buf+72|0,stat.ctime.getTime()/1e3|0|0,4);SAFE_HEAP_STORE(buf+76|0,0|0,4);SAFE_HEAP_STORE(buf+80|0,stat.ino|0,8);return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=SAFE_HEAP_LOAD(buf+len,1,0);stringToUTF8(ret,buf,bufsize+1);SAFE_HEAP_STORE(buf+len,endChar,1);return len},doAccess:function(path,amode){if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=SAFE_HEAP_LOAD(iov+i*8|0,4,0)|0;var len=SAFE_HEAP_LOAD(iov+(i*8+4)|0,4,0)|0;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=SAFE_HEAP_LOAD(iov+i*8|0,4,0)|0;var len=SAFE_HEAP_LOAD(iov+(i*8+4)|0,4,0)|0;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){assert(SYSCALLS.varargs!=undefined);SYSCALLS.varargs+=4;var ret=SAFE_HEAP_LOAD(SYSCALLS.varargs-4|0,4,0)|0;return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){if(low>=0)assert(high===0);else assert(high===-1);return low}};function ___syscall_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_max(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){err("emscripten_realloc_buffer: Attempted to grow heap from "+buffer.byteLength+" bytes to "+size+" bytes, but got error: "+e)}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;assert(requestedSize>oldSize);var maxHeapSize=_emscripten_get_heap_max();if(requestedSize>maxHeapSize){err("Cannot enlarge memory, asked to go up to "+requestedSize+" bytes, but the limit is "+maxHeapSize+" bytes!");return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}err("Failed to grow the heap from "+oldSize+" bytes to "+newSize+" bytes, not enough memory!");return false}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);SAFE_HEAP_STORE(pnum|0,num|0,4);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_seek(fd,offset_bigint,whence,newOffset){try{var offset_low=Number(offset_bigint&BigInt(4294967295))|0,offset_high=Number(offset_bigint>>BigInt(32))|0;var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);SAFE_HEAP_STORE(newOffset|0,stream.position|0,8);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);SAFE_HEAP_STORE(pnum|0,num|0,4);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();ERRNO_CODES={"EPERM":63,"ENOENT":44,"ESRCH":71,"EINTR":27,"EIO":29,"ENXIO":60,"E2BIG":1,"ENOEXEC":45,"EBADF":8,"ECHILD":12,"EAGAIN":6,"EWOULDBLOCK":6,"ENOMEM":48,"EACCES":2,"EFAULT":21,"ENOTBLK":105,"EBUSY":10,"EEXIST":20,"EXDEV":75,"ENODEV":43,"ENOTDIR":54,"EISDIR":31,"EINVAL":28,"ENFILE":41,"EMFILE":33,"ENOTTY":59,"ETXTBSY":74,"EFBIG":22,"ENOSPC":51,"ESPIPE":70,"EROFS":69,"EMLINK":34,"EPIPE":64,"EDOM":18,"ERANGE":68,"ENOMSG":49,"EIDRM":24,"ECHRNG":106,"EL2NSYNC":156,"EL3HLT":107,"EL3RST":108,"ELNRNG":109,"EUNATCH":110,"ENOCSI":111,"EL2HLT":112,"EDEADLK":16,"ENOLCK":46,"EBADE":113,"EBADR":114,"EXFULL":115,"ENOANO":104,"EBADRQC":103,"EBADSLT":102,"EDEADLOCK":16,"EBFONT":101,"ENOSTR":100,"ENODATA":116,"ETIME":117,"ENOSR":118,"ENONET":119,"ENOPKG":120,"EREMOTE":121,"ENOLINK":47,"EADV":122,"ESRMNT":123,"ECOMM":124,"EPROTO":65,"EMULTIHOP":36,"EDOTDOT":125,"EBADMSG":9,"ENOTUNIQ":126,"EBADFD":127,"EREMCHG":128,"ELIBACC":129,"ELIBBAD":130,"ELIBSCN":131,"ELIBMAX":132,"ELIBEXEC":133,"ENOSYS":52,"ENOTEMPTY":55,"ENAMETOOLONG":37,"ELOOP":32,"EOPNOTSUPP":138,"EPFNOSUPPORT":139,"ECONNRESET":15,"ENOBUFS":42,"EAFNOSUPPORT":5,"EPROTOTYPE":67,"ENOTSOCK":57,"ENOPROTOOPT":50,"ESHUTDOWN":140,"ECONNREFUSED":14,"EADDRINUSE":3,"ECONNABORTED":13,"ENETUNREACH":40,"ENETDOWN":38,"ETIMEDOUT":73,"EHOSTDOWN":142,"EHOSTUNREACH":23,"EINPROGRESS":26,"EALREADY":7,"EDESTADDRREQ":17,"EMSGSIZE":35,"EPROTONOSUPPORT":66,"ESOCKTNOSUPPORT":137,"EADDRNOTAVAIL":4,"ENETRESET":39,"EISCONN":30,"ENOTCONN":53,"ETOOMANYREFS":141,"EUSERS":136,"EDQUOT":19,"ESTALE":72,"ENOTSUP":138,"ENOMEDIUM":148,"EILSEQ":25,"EOVERFLOW":61,"ECANCELED":11,"ENOTRECOVERABLE":56,"EOWNERDEAD":62,"ESTRPIPE":135};var ASSERTIONS=true;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"__assert_fail":___assert_fail,"__syscall_open":___syscall_open,"alignfault":alignfault,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"fd_close":_fd_close,"fd_read":_fd_read,"fd_seek":_fd_seek,"fd_write":_fd_write,"segfault":segfault};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=createExportWrapper("__wasm_call_ctors");var _dilithium_keygen=Module["_dilithium_keygen"]=createExportWrapper("dilithium_keygen");var _malloc=Module["_malloc"]=createExportWrapper("malloc");var _free=Module["_free"]=createExportWrapper("free");var _dilithium_sign=Module["_dilithium_sign"]=createExportWrapper("dilithium_sign");var _dilithium_verify=Module["_dilithium_verify"]=createExportWrapper("dilithium_verify");var _SHA3_256=Module["_SHA3_256"]=createExportWrapper("SHA3_256");var _randombytes=Module["_randombytes"]=createExportWrapper("randombytes");var ___errno_location=Module["___errno_location"]=createExportWrapper("__errno_location");var ___stdio_exit=Module["___stdio_exit"]=createExportWrapper("__stdio_exit");var _sbrk=Module["_sbrk"]=createExportWrapper("sbrk");var _emscripten_get_sbrk_ptr=Module["_emscripten_get_sbrk_ptr"]=createExportWrapper("emscripten_get_sbrk_ptr");var _emscripten_stack_init=Module["_emscripten_stack_init"]=function(){return(_emscripten_stack_init=Module["_emscripten_stack_init"]=Module["asm"]["emscripten_stack_init"]).apply(null,arguments)};var _emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=function(){return(_emscripten_stack_get_free=Module["_emscripten_stack_get_free"]=Module["asm"]["emscripten_stack_get_free"]).apply(null,arguments)};var _emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=function(){return(_emscripten_stack_get_base=Module["_emscripten_stack_get_base"]=Module["asm"]["emscripten_stack_get_base"]).apply(null,arguments)};var _emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=function(){return(_emscripten_stack_get_end=Module["_emscripten_stack_get_end"]=Module["asm"]["emscripten_stack_get_end"]).apply(null,arguments)};var stackSave=Module["stackSave"]=createExportWrapper("stackSave");var stackRestore=Module["stackRestore"]=createExportWrapper("stackRestore");var stackAlloc=Module["stackAlloc"]=createExportWrapper("stackAlloc");if(!Object.getOwnPropertyDescriptor(Module,"intArrayFromString"))Module["intArrayFromString"]=(()=>abort("'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"intArrayToString"))Module["intArrayToString"]=(()=>abort("'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["setValue"]=setValue;Module["getValue"]=getValue;if(!Object.getOwnPropertyDescriptor(Module,"allocate"))Module["allocate"]=(()=>abort("'allocate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF8ArrayToString"))Module["UTF8ArrayToString"]=(()=>abort("'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF8ToString"))Module["UTF8ToString"]=(()=>abort("'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8Array"))Module["stringToUTF8Array"]=(()=>abort("'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF8"))Module["stringToUTF8"]=(()=>abort("'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF8"))Module["lengthBytesUTF8"]=(()=>abort("'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=(()=>abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnPreRun"))Module["addOnPreRun"]=(()=>abort("'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnInit"))Module["addOnInit"]=(()=>abort("'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnPreMain"))Module["addOnPreMain"]=(()=>abort("'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnExit"))Module["addOnExit"]=(()=>abort("'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addOnPostRun"))Module["addOnPostRun"]=(()=>abort("'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeStringToMemory"))Module["writeStringToMemory"]=(()=>abort("'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeArrayToMemory"))Module["writeArrayToMemory"]=(()=>abort("'writeArrayToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeAsciiToMemory"))Module["writeAsciiToMemory"]=(()=>abort("'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addRunDependency"))Module["addRunDependency"]=(()=>abort("'addRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"removeRunDependency"))Module["removeRunDependency"]=(()=>abort("'removeRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createFolder"))Module["FS_createFolder"]=(()=>abort("'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createPath"))Module["FS_createPath"]=(()=>abort("'FS_createPath' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createDataFile"))Module["FS_createDataFile"]=(()=>abort("'FS_createDataFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createPreloadedFile"))Module["FS_createPreloadedFile"]=(()=>abort("'FS_createPreloadedFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createLazyFile"))Module["FS_createLazyFile"]=(()=>abort("'FS_createLazyFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createLink"))Module["FS_createLink"]=(()=>abort("'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"FS_createDevice"))Module["FS_createDevice"]=(()=>abort("'FS_createDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"FS_unlink"))Module["FS_unlink"]=(()=>abort("'FS_unlink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you"));if(!Object.getOwnPropertyDescriptor(Module,"getLEB"))Module["getLEB"]=(()=>abort("'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getFunctionTables"))Module["getFunctionTables"]=(()=>abort("'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"alignFunctionTables"))Module["alignFunctionTables"]=(()=>abort("'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerFunctions"))Module["registerFunctions"]=(()=>abort("'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"addFunction"))Module["addFunction"]=(()=>abort("'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"removeFunction"))Module["removeFunction"]=(()=>abort("'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=(()=>abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"prettyPrint"))Module["prettyPrint"]=(()=>abort("'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=(()=>abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getCompilerSetting"))Module["getCompilerSetting"]=(()=>abort("'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"print"))Module["print"]=(()=>abort("'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"printErr"))Module["printErr"]=(()=>abort("'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getTempRet0"))Module["getTempRet0"]=(()=>abort("'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setTempRet0"))Module["setTempRet0"]=(()=>abort("'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"callMain"))Module["callMain"]=(()=>abort("'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"abort"))Module["abort"]=(()=>abort("'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"keepRuntimeAlive"))Module["keepRuntimeAlive"]=(()=>abort("'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"zeroMemory"))Module["zeroMemory"]=(()=>abort("'zeroMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToNewUTF8"))Module["stringToNewUTF8"]=(()=>abort("'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"emscripten_realloc_buffer"))Module["emscripten_realloc_buffer"]=(()=>abort("'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ENV"))Module["ENV"]=(()=>abort("'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"withStackSave"))Module["withStackSave"]=(()=>abort("'withStackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_CODES"))Module["ERRNO_CODES"]=(()=>abort("'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"ERRNO_MESSAGES"))Module["ERRNO_MESSAGES"]=(()=>abort("'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setErrNo"))Module["setErrNo"]=(()=>abort("'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetPton4"))Module["inetPton4"]=(()=>abort("'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetNtop4"))Module["inetNtop4"]=(()=>abort("'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetPton6"))Module["inetPton6"]=(()=>abort("'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"inetNtop6"))Module["inetNtop6"]=(()=>abort("'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readSockaddr"))Module["readSockaddr"]=(()=>abort("'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeSockaddr"))Module["writeSockaddr"]=(()=>abort("'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"DNS"))Module["DNS"]=(()=>abort("'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getHostByName"))Module["getHostByName"]=(()=>abort("'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Protocols"))Module["Protocols"]=(()=>abort("'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Sockets"))Module["Sockets"]=(()=>abort("'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getRandomDevice"))Module["getRandomDevice"]=(()=>abort("'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"traverseStack"))Module["traverseStack"]=(()=>abort("'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertFrameToPC"))Module["convertFrameToPC"]=(()=>abort("'convertFrameToPC' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UNWIND_CACHE"))Module["UNWIND_CACHE"]=(()=>abort("'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"saveInUnwindCache"))Module["saveInUnwindCache"]=(()=>abort("'saveInUnwindCache' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertPCtoSourceLocation"))Module["convertPCtoSourceLocation"]=(()=>abort("'convertPCtoSourceLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgsArray"))Module["readAsmConstArgsArray"]=(()=>abort("'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readAsmConstArgs"))Module["readAsmConstArgs"]=(()=>abort("'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"mainThreadEM_ASM"))Module["mainThreadEM_ASM"]=(()=>abort("'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"jstoi_q"))Module["jstoi_q"]=(()=>abort("'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"jstoi_s"))Module["jstoi_s"]=(()=>abort("'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getExecutableName"))Module["getExecutableName"]=(()=>abort("'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"listenOnce"))Module["listenOnce"]=(()=>abort("'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"autoResumeAudioContext"))Module["autoResumeAudioContext"]=(()=>abort("'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"dynCall"))Module["dynCall"]=(()=>abort("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"callRuntimeCallbacks"))Module["callRuntimeCallbacks"]=(()=>abort("'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"wasmTableMirror"))Module["wasmTableMirror"]=(()=>abort("'wasmTableMirror' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setWasmTableEntry"))Module["setWasmTableEntry"]=(()=>abort("'setWasmTableEntry' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getWasmTableEntry"))Module["getWasmTableEntry"]=(()=>abort("'getWasmTableEntry' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"handleException"))Module["handleException"]=(()=>abort("'handleException' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runtimeKeepalivePush"))Module["runtimeKeepalivePush"]=(()=>abort("'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"runtimeKeepalivePop"))Module["runtimeKeepalivePop"]=(()=>abort("'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"callUserCallback"))Module["callUserCallback"]=(()=>abort("'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"maybeExit"))Module["maybeExit"]=(()=>abort("'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"safeSetTimeout"))Module["safeSetTimeout"]=(()=>abort("'safeSetTimeout' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"asmjsMangle"))Module["asmjsMangle"]=(()=>abort("'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"asyncLoad"))Module["asyncLoad"]=(()=>abort("'asyncLoad' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"alignMemory"))Module["alignMemory"]=(()=>abort("'alignMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"mmapAlloc"))Module["mmapAlloc"]=(()=>abort("'mmapAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"reallyNegative"))Module["reallyNegative"]=(()=>abort("'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"unSign"))Module["unSign"]=(()=>abort("'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"reSign"))Module["reSign"]=(()=>abort("'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"formatString"))Module["formatString"]=(()=>abort("'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PATH"))Module["PATH"]=(()=>abort("'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PATH_FS"))Module["PATH_FS"]=(()=>abort("'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SYSCALLS"))Module["SYSCALLS"]=(()=>abort("'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getSocketFromFD"))Module["getSocketFromFD"]=(()=>abort("'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getSocketAddress"))Module["getSocketAddress"]=(()=>abort("'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"JSEvents"))Module["JSEvents"]=(()=>abort("'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerKeyEventCallback"))Module["registerKeyEventCallback"]=(()=>abort("'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"specialHTMLTargets"))Module["specialHTMLTargets"]=(()=>abort("'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"maybeCStringToJsString"))Module["maybeCStringToJsString"]=(()=>abort("'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"findEventTarget"))Module["findEventTarget"]=(()=>abort("'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"findCanvasEventTarget"))Module["findCanvasEventTarget"]=(()=>abort("'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getBoundingClientRect"))Module["getBoundingClientRect"]=(()=>abort("'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillMouseEventData"))Module["fillMouseEventData"]=(()=>abort("'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerMouseEventCallback"))Module["registerMouseEventCallback"]=(()=>abort("'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerWheelEventCallback"))Module["registerWheelEventCallback"]=(()=>abort("'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerUiEventCallback"))Module["registerUiEventCallback"]=(()=>abort("'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerFocusEventCallback"))Module["registerFocusEventCallback"]=(()=>abort("'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillDeviceOrientationEventData"))Module["fillDeviceOrientationEventData"]=(()=>abort("'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerDeviceOrientationEventCallback"))Module["registerDeviceOrientationEventCallback"]=(()=>abort("'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillDeviceMotionEventData"))Module["fillDeviceMotionEventData"]=(()=>abort("'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerDeviceMotionEventCallback"))Module["registerDeviceMotionEventCallback"]=(()=>abort("'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"screenOrientation"))Module["screenOrientation"]=(()=>abort("'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillOrientationChangeEventData"))Module["fillOrientationChangeEventData"]=(()=>abort("'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerOrientationChangeEventCallback"))Module["registerOrientationChangeEventCallback"]=(()=>abort("'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillFullscreenChangeEventData"))Module["fillFullscreenChangeEventData"]=(()=>abort("'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerFullscreenChangeEventCallback"))Module["registerFullscreenChangeEventCallback"]=(()=>abort("'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerRestoreOldStyle"))Module["registerRestoreOldStyle"]=(()=>abort("'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"hideEverythingExceptGivenElement"))Module["hideEverythingExceptGivenElement"]=(()=>abort("'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"restoreHiddenElements"))Module["restoreHiddenElements"]=(()=>abort("'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setLetterbox"))Module["setLetterbox"]=(()=>abort("'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"currentFullscreenStrategy"))Module["currentFullscreenStrategy"]=(()=>abort("'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"restoreOldWindowedStyle"))Module["restoreOldWindowedStyle"]=(()=>abort("'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"softFullscreenResizeWebGLRenderTarget"))Module["softFullscreenResizeWebGLRenderTarget"]=(()=>abort("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"doRequestFullscreen"))Module["doRequestFullscreen"]=(()=>abort("'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillPointerlockChangeEventData"))Module["fillPointerlockChangeEventData"]=(()=>abort("'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerPointerlockChangeEventCallback"))Module["registerPointerlockChangeEventCallback"]=(()=>abort("'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerPointerlockErrorEventCallback"))Module["registerPointerlockErrorEventCallback"]=(()=>abort("'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"requestPointerLock"))Module["requestPointerLock"]=(()=>abort("'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillVisibilityChangeEventData"))Module["fillVisibilityChangeEventData"]=(()=>abort("'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerVisibilityChangeEventCallback"))Module["registerVisibilityChangeEventCallback"]=(()=>abort("'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerTouchEventCallback"))Module["registerTouchEventCallback"]=(()=>abort("'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillGamepadEventData"))Module["fillGamepadEventData"]=(()=>abort("'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerGamepadEventCallback"))Module["registerGamepadEventCallback"]=(()=>abort("'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerBeforeUnloadEventCallback"))Module["registerBeforeUnloadEventCallback"]=(()=>abort("'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"fillBatteryEventData"))Module["fillBatteryEventData"]=(()=>abort("'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"battery"))Module["battery"]=(()=>abort("'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"registerBatteryEventCallback"))Module["registerBatteryEventCallback"]=(()=>abort("'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setCanvasElementSize"))Module["setCanvasElementSize"]=(()=>abort("'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getCanvasElementSize"))Module["getCanvasElementSize"]=(()=>abort("'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"demangle"))Module["demangle"]=(()=>abort("'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"demangleAll"))Module["demangleAll"]=(()=>abort("'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"jsStackTrace"))Module["jsStackTrace"]=(()=>abort("'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackTrace"))Module["stackTrace"]=(()=>abort("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getEnvStrings"))Module["getEnvStrings"]=(()=>abort("'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"checkWasiClock"))Module["checkWasiClock"]=(()=>abort("'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64"))Module["writeI53ToI64"]=(()=>abort("'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Clamped"))Module["writeI53ToI64Clamped"]=(()=>abort("'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToI64Signaling"))Module["writeI53ToI64Signaling"]=(()=>abort("'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Clamped"))Module["writeI53ToU64Clamped"]=(()=>abort("'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"writeI53ToU64Signaling"))Module["writeI53ToU64Signaling"]=(()=>abort("'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readI53FromI64"))Module["readI53FromI64"]=(()=>abort("'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"readI53FromU64"))Module["readI53FromU64"]=(()=>abort("'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertI32PairToI53"))Module["convertI32PairToI53"]=(()=>abort("'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"convertU32PairToI53"))Module["convertU32PairToI53"]=(()=>abort("'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setImmediateWrapped"))Module["setImmediateWrapped"]=(()=>abort("'setImmediateWrapped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"clearImmediateWrapped"))Module["clearImmediateWrapped"]=(()=>abort("'clearImmediateWrapped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"polyfillSetImmediate"))Module["polyfillSetImmediate"]=(()=>abort("'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"Browser"))Module["Browser"]=(()=>abort("'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"funcWrappers"))Module["funcWrappers"]=(()=>abort("'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"getFuncWrapper"))Module["getFuncWrapper"]=(()=>abort("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"setMainLoop"))Module["setMainLoop"]=(()=>abort("'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"wget"))Module["wget"]=(()=>abort("'wget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"FS"))Module["FS"]=(()=>abort("'FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"MEMFS"))Module["MEMFS"]=(()=>abort("'MEMFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"TTY"))Module["TTY"]=(()=>abort("'TTY' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"PIPEFS"))Module["PIPEFS"]=(()=>abort("'PIPEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"SOCKFS"))Module["SOCKFS"]=(()=>abort("'SOCKFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"_setNetworkCallback"))Module["_setNetworkCallback"]=(()=>abort("'_setNetworkCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"warnOnce"))Module["warnOnce"]=(()=>abort("'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackSave"))Module["stackSave"]=(()=>abort("'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackRestore"))Module["stackRestore"]=(()=>abort("'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stackAlloc"))Module["stackAlloc"]=(()=>abort("'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"AsciiToString"))Module["AsciiToString"]=(()=>abort("'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToAscii"))Module["stringToAscii"]=(()=>abort("'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF16ToString"))Module["UTF16ToString"]=(()=>abort("'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF16"))Module["stringToUTF16"]=(()=>abort("'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF16"))Module["lengthBytesUTF16"]=(()=>abort("'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"UTF32ToString"))Module["UTF32ToString"]=(()=>abort("'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"stringToUTF32"))Module["stringToUTF32"]=(()=>abort("'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"lengthBytesUTF32"))Module["lengthBytesUTF32"]=(()=>abort("'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8"))Module["allocateUTF8"]=(()=>abort("'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));if(!Object.getOwnPropertyDescriptor(Module,"allocateUTF8OnStack"))Module["allocateUTF8OnStack"]=(()=>abort("'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)"));Module["writeStackCookie"]=writeStackCookie;Module["checkStackCookie"]=checkStackCookie;if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_NORMAL"))Object.defineProperty(Module,"ALLOC_NORMAL",{configurable:true,get:function(){abort("'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}});if(!Object.getOwnPropertyDescriptor(Module,"ALLOC_STACK"))Object.defineProperty(Module,"ALLOC_STACK",{configurable:true,get:function(){abort("'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}});var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function stackCheckInit(){_emscripten_stack_init();writeStackCookie()}function run(args){args=args||arguments_;if(runDependencies>0){return}stackCheckInit();preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}checkStackCookie()}Module["run"]=run;function checkUnflushedContent(){var oldOut=out;var oldErr=err;var has=false;out=err=(x=>{has=true});try{___stdio_exit();["stdout","stderr"].forEach(function(name){var info=FS.analyzePath("/dev/"+name);if(!info)return;var stream=info.object;var rdev=stream.rdev;var tty=TTY.ttys[rdev];if(tty&&tty.output&&tty.output.length){has=true}})}catch(e){}out=oldOut;err=oldErr;if(has){warnOnce("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.")}}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();
|
10
|
+
|
11
|
+
|
12
|
+
return dilithium.ready
|
13
|
+
}
|
14
|
+
);
|
15
|
+
})();
|
16
|
+
if (typeof exports === 'object' && typeof module === 'object')
|
17
|
+
module.exports = dilithium;
|
18
|
+
else if (typeof define === 'function' && define['amd'])
|
19
|
+
define([], function() { return dilithium; });
|
20
|
+
else if (typeof exports === 'object')
|
21
|
+
exports["dilithium"] = dilithium;
|
package/dilithium.wasm
ADDED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Dilithium=t():e.Dilithium=t()}(this,(()=>(()=>{var e={944:(e,t,r)=>{var o,n=(o=(o="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||"/index.js",function(e){var t,n,i=void 0!==(e=e||{})?e:{};i.ready=new Promise((function(e,r){t=e,n=r})),Object.getOwnPropertyDescriptor(i.ready,"_malloc")||(Object.defineProperty(i.ready,"_malloc",{configurable:!0,get:function(){Ee("You are getting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_malloc",{configurable:!0,set:function(){Ee("You are setting _malloc on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"_free")||(Object.defineProperty(i.ready,"_free",{configurable:!0,get:function(){Ee("You are getting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_free",{configurable:!0,set:function(){Ee("You are setting _free on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"_SHA3_256")||(Object.defineProperty(i.ready,"_SHA3_256",{configurable:!0,get:function(){Ee("You are getting _SHA3_256 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_SHA3_256",{configurable:!0,set:function(){Ee("You are setting _SHA3_256 on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"_randombytes")||(Object.defineProperty(i.ready,"_randombytes",{configurable:!0,get:function(){Ee("You are getting _randombytes on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_randombytes",{configurable:!0,set:function(){Ee("You are setting _randombytes on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"_dilithium_keygen")||(Object.defineProperty(i.ready,"_dilithium_keygen",{configurable:!0,get:function(){Ee("You are getting _dilithium_keygen on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_dilithium_keygen",{configurable:!0,set:function(){Ee("You are setting _dilithium_keygen on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"_dilithium_sign")||(Object.defineProperty(i.ready,"_dilithium_sign",{configurable:!0,get:function(){Ee("You are getting _dilithium_sign on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_dilithium_sign",{configurable:!0,set:function(){Ee("You are setting _dilithium_sign on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"_dilithium_verify")||(Object.defineProperty(i.ready,"_dilithium_verify",{configurable:!0,get:function(){Ee("You are getting _dilithium_verify on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"_dilithium_verify",{configurable:!0,set:function(){Ee("You are setting _dilithium_verify on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"___stdio_exit")||(Object.defineProperty(i.ready,"___stdio_exit",{configurable:!0,get:function(){Ee("You are getting ___stdio_exit on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"___stdio_exit",{configurable:!0,set:function(){Ee("You are setting ___stdio_exit on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}})),Object.getOwnPropertyDescriptor(i.ready,"onRuntimeInitialized")||(Object.defineProperty(i.ready,"onRuntimeInitialized",{configurable:!0,get:function(){Ee("You are getting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}),Object.defineProperty(i.ready,"onRuntimeInitialized",{configurable:!0,set:function(){Ee("You are setting onRuntimeInitialized on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js")}}));var a=Object.assign({},i),s=[],d="object"==typeof window,c="function"==typeof importScripts,l="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,p=!d&&!l&&!c;if(i.ENVIRONMENT)throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)");var E,u,f,h,O,m,g="";if(l){if("object"!=typeof process)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");g=c?r(507).dirname(g)+"/":"//",m=()=>{O||(h=r(175),O=r(507))},E=function(e,t){return m(),e=O.normalize(e),h.readFileSync(e,t?void 0:"utf8")},f=e=>{var t=E(e,!0);return t.buffer||(t=new Uint8Array(t)),I(t.buffer),t},u=(e,t,r)=>{m(),e=O.normalize(e),h.readFile(e,(function(e,o){e?r(e):t(o.buffer)}))},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),s=process.argv.slice(2),process.on("uncaughtException",(function(e){if(!(e instanceof Ke))throw e})),process.on("unhandledRejection",(function(e){throw e})),i.inspect=function(){return"[Emscripten Module object]"}}else if(p){if("object"==typeof process||"object"==typeof window||"function"==typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");"undefined"!=typeof read&&(E=function(e){return read(e)}),f=function(e){let t;return"function"==typeof readbuffer?new Uint8Array(readbuffer(e)):(t=read(e,"binary"),I("object"==typeof t),t)},u=function(e,t,r){setTimeout((()=>t(f(e))),0)},"undefined"!=typeof scriptArgs?s=scriptArgs:void 0!==arguments&&(s=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)}else{if(!d&&!c)throw new Error("environment detection error");if(c?g=self.location.href:"undefined"!=typeof document&&document.currentScript&&(g=document.currentScript.src),o&&(g=o),g=0!==g.indexOf("blob:")?g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):"","object"!=typeof window&&"function"!=typeof importScripts)throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");E=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},c&&(f=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),u=(e,t,r)=>{var o=new XMLHttpRequest;o.open("GET",e,!0),o.responseType="arraybuffer",o.onload=()=>{200==o.status||0==o.status&&o.response?t(o.response):r()},o.onerror=r,o.send(null)}}var w,T=i.print||console.log.bind(console),y=i.printErr||console.warn.bind(console);function _(e){_.shown||(_.shown={}),_.shown[e]||(_.shown[e]=1,y(e))}Object.assign(i,a),a=null,i.arguments&&(s=i.arguments),Object.getOwnPropertyDescriptor(i,"arguments")||Object.defineProperty(i,"arguments",{configurable:!0,get:function(){Ee("Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),i.thisProgram&&i.thisProgram,Object.getOwnPropertyDescriptor(i,"thisProgram")||Object.defineProperty(i,"thisProgram",{configurable:!0,get:function(){Ee("Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),i.quit&&i.quit,Object.getOwnPropertyDescriptor(i,"quit")||Object.defineProperty(i,"quit",{configurable:!0,get:function(){Ee("Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),I(void 0===i.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead"),I(void 0===i.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead"),I(void 0===i.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead"),I(void 0===i.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead"),I(void 0===i.read,"Module.read option was removed (modify read_ in JS)"),I(void 0===i.readAsync,"Module.readAsync option was removed (modify readAsync in JS)"),I(void 0===i.readBinary,"Module.readBinary option was removed (modify readBinary in JS)"),I(void 0===i.setWindowTitle,"Module.setWindowTitle option was removed (modify setWindowTitle in JS)"),I(void 0===i.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY"),Object.getOwnPropertyDescriptor(i,"read")||Object.defineProperty(i,"read",{configurable:!0,get:function(){Ee("Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),Object.getOwnPropertyDescriptor(i,"readAsync")||Object.defineProperty(i,"readAsync",{configurable:!0,get:function(){Ee("Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),Object.getOwnPropertyDescriptor(i,"readBinary")||Object.defineProperty(i,"readBinary",{configurable:!0,get:function(){Ee("Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),Object.getOwnPropertyDescriptor(i,"setWindowTitle")||Object.defineProperty(i,"setWindowTitle",{configurable:!0,get:function(){Ee("Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),I(!p,"shell environment detected but not enabled at build time. Add 'shell' to `-s ENVIRONMENT` to enable."),i.wasmBinary&&(w=i.wasmBinary),Object.getOwnPropertyDescriptor(i,"wasmBinary")||Object.defineProperty(i,"wasmBinary",{configurable:!0,get:function(){Ee("Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}});var D;i.noExitRuntime;function b(e,t,r="i8",o){if("*"===r.charAt(r.length-1)&&(r="i32"),o)switch(r){case"i1":case"i8":U[0|e]=t;break;case"i16":x[e>>1]=t;break;case"i32":C[e>>2]=t;break;case"i64":L[e>>3]=BigInt(t);break;case"float":H[e>>2]=t;break;case"double":X[e>>3]=t;break;default:Ee("invalid type for setValue: "+r)}else switch(r){case"i1":case"i8":M(0|e,0|t,1);break;case"i16":M(0|e,0|t,2);break;case"i32":M(0|e,0|t,4);break;case"i64":M(0|e,0|t,8);break;case"float":R(0|e,Math.fround(t),4);break;case"double":R(0|e,+t,8);break;default:Ee("invalid type for setValue: "+r)}}function v(e,t="i8",r){if("*"===t.charAt(t.length-1)&&(t="i32"),r)switch(t){case"i1":case"i8":return U[0|e];case"i16":return x[e>>1];case"i32":return C[e>>2];case"i64":return Number(L[e>>3]);case"float":return H[e>>2];case"double":return Number(X[e>>3]);default:Ee("invalid type for getValue: "+t)}else switch(t){case"i1":case"i8":return 0|S(0|e,1,0);case"i16":return 0|S(0|e,2,0);case"i32":return 0|S(0|e,4,0);case"i64":return 0|S(0|e,8,0);case"float":return Math.fround(A(0|e,4,0));case"double":return+A(0|e,8,0);default:Ee("invalid type for getValue: "+t)}return null}function P(e,t){switch(e){case 1:return"i8";case 2:return"i16";case 4:return t?"float":"i32";case 8:return t?"double":"i64";default:I(0)}}function M(e,t,r,o){if(e<=0&&Ee("segmentation fault storing "+r+" bytes to address "+e),e%r!=0&&Ee("alignment error storing to address "+e+", which was expected to be aligned to a multiple of "+r),oe&&!ne){var n=Le()>>>0;e+r>n&&Ee("segmentation fault, exceeded the top of the available dynamic heap when storing "+r+" bytes to address "+e+". DYNAMICTOP="+n),I(n>=Qe()),I(n<=U.length)}return b(e,t,P(r,o),1),t}function R(e,t,r){return M(e,t,r,!0)}function S(e,t,r,o){if(e<=0&&Ee("segmentation fault loading "+t+" bytes from address "+e),e%t!=0&&Ee("alignment error loading from address "+e+", which was expected to be aligned to a multiple of "+t),oe&&!ne){var n=Le()>>>0;e+t>n&&Ee("segmentation fault, exceeded the top of the available dynamic heap when loading "+t+" bytes from address "+e+". DYNAMICTOP="+n),I(n>=Qe()),I(n<=U.length)}var i,a,s=P(t,o),d=v(e,s,1);return r&&(i=d,a=parseInt(s.substr(1),10),d=i>=0?i:a<=32?2*Math.abs(1<<a-1)+i:Math.pow(2,a)+i),d}function A(e,t,r){return S(e,t,r,!0)}Object.getOwnPropertyDescriptor(i,"noExitRuntime")||Object.defineProperty(i,"noExitRuntime",{configurable:!0,get:function(){Ee("Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),"object"!=typeof WebAssembly&&Ee("no native wasm support detected");var F=!1;function I(e,t){e||Ee("Assertion failed"+(t?": "+t:""))}function k(e,t,r,o,n){var a={string:function(e){var t=0;if(null!=e&&0!==e){var r=1+(e.length<<2);W(e,t=We(r),r)}return t},array:function(e){var t=We(e.length);return function(e,t){I(e.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)"),U.set(e,t)}(e,t),t}},s=function(e){var t=i["_"+e];return I(t,"Cannot call unknown function "+e+", make sure it is exported"),t}(e),d=[],c=0;if(I("array"!==t,'Return type should not be "array".'),o)for(var l=0;l<o.length;l++){var p=a[r[l]];p?(0===c&&(c=Ye()),d[l]=p(o[l])):d[l]=o[l]}var E=s.apply(null,d);return E=function(e){return 0!==c&&ze(c),function(e){return"string"===t?Y(e):"boolean"===t?Boolean(e):e}(e)}(E)}var N,U,j,x,C,H,L,X,Q="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(e,t,r){for(var o=t+r,n=t;e[n]&&!(n>=o);)++n;if(n-t>16&&e.subarray&&Q)return Q.decode(e.subarray(t,n));for(var i="";t<n;){var a=e[t++];if(128&a){var s=63&e[t++];if(192!=(224&a)){var d=63&e[t++];if(224==(240&a)?a=(15&a)<<12|s<<6|d:(240!=(248&a)&&_("Invalid UTF-8 leading byte 0x"+a.toString(16)+" encountered when deserializing a UTF-8 string in wasm memory to a JS string!"),a=(7&a)<<18|s<<12|d<<6|63&e[t++]),a<65536)i+=String.fromCharCode(a);else{var c=a-65536;i+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else i+=String.fromCharCode((31&a)<<6|s)}else i+=String.fromCharCode(a)}return i}function Y(e,t){return e?B(j,e,t):""}function z(e,t,r,o){if(!(o>0))return 0;for(var n=r,i=r+o-1,a=0;a<e.length;++a){var s=e.charCodeAt(a);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&e.charCodeAt(++a)),s<=127){if(r>=i)break;t[r++]=s}else if(s<=2047){if(r+1>=i)break;t[r++]=192|s>>6,t[r++]=128|63&s}else if(s<=65535){if(r+2>=i)break;t[r++]=224|s>>12,t[r++]=128|s>>6&63,t[r++]=128|63&s}else{if(r+3>=i)break;s>1114111&&_("Invalid Unicode code point 0x"+s.toString(16)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF)."),t[r++]=240|s>>18,t[r++]=128|s>>12&63,t[r++]=128|s>>6&63,t[r++]=128|63&s}}return t[r]=0,r-n}function W(e,t,r){return I("number"==typeof r,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!"),z(e,j,t,r)}function K(e){for(var t=0,r=0;r<e.length;++r){var o=e.charCodeAt(r);o>=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++r)),o<=127?++t:t+=o<=2047?2:o<=65535?3:4}return t}function V(e){N=e,i.HEAP8=U=new Int8Array(e),i.HEAP16=x=new Int16Array(e),i.HEAP32=C=new Int32Array(e),i.HEAPU8=j=new Uint8Array(e),i.HEAPU16=new Uint16Array(e),i.HEAPU32=new Uint32Array(e),i.HEAPF32=H=new Float32Array(e),i.HEAPF64=X=new Float64Array(e),i.HEAP64=L=new BigInt64Array(e),i.HEAPU64=new BigUint64Array(e)}"undefined"!=typeof TextDecoder&&new TextDecoder("utf-16le");var G=5242880;i.TOTAL_STACK&&I(G===i.TOTAL_STACK,"the stack size can no longer be determined at runtime");var q,Z=i.INITIAL_MEMORY||16777216;function J(){var e=Be();I(!(3&e)),M(e+4|0,34821223,4),M(e+8|0,-1984246274,4)}function $(){if(!F){var e=Be(),t=S(e+4|0,4,1)>>>0,r=S(e+8|0,4,1)>>>0;34821223==t&&2310721022==r||Ee("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x"+r.toString(16)+" 0x"+t.toString(16))}}Object.getOwnPropertyDescriptor(i,"INITIAL_MEMORY")||Object.defineProperty(i,"INITIAL_MEMORY",{configurable:!0,get:function(){Ee("Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)")}}),I(Z>=G,"INITIAL_MEMORY should be larger than TOTAL_STACK, was "+Z+"! (TOTAL_STACK="+G+")"),I("undefined"!=typeof Int32Array&&"undefined"!=typeof Float64Array&&null!=Int32Array.prototype.subarray&&null!=Int32Array.prototype.set,"JS engine does not provide full typed array support"),I(!i.wasmMemory,"Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally"),I(16777216==Z,"Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically"),function(){var e=new Int16Array(1),t=new Int8Array(e.buffer);if(e[0]=25459,115!==t[0]||99!==t[1])throw"Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)"}();var ee=[],te=[],re=[],oe=!1,ne=!1;I(Math.imul,"This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),I(Math.fround,"This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),I(Math.clz32,"This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill"),I(Math.trunc,"This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill");var ie=0,ae=null,se=null,de={};function ce(e){for(var t=e;;){if(!de[e])return e;e=t+Math.random()}}function le(e){ie++,i.monitorRunDependencies&&i.monitorRunDependencies(ie),e?(I(!de[e]),de[e]=1,null===ae&&"undefined"!=typeof setInterval&&(ae=setInterval((function(){if(F)return clearInterval(ae),void(ae=null);var e=!1;for(var t in de)e||(e=!0,y("still waiting on run dependencies:")),y("dependency: "+t);e&&y("(end of list)")}),1e4))):y("warning: run dependency added without ID")}function pe(e){if(ie--,i.monitorRunDependencies&&i.monitorRunDependencies(ie),e?(I(de[e]),delete de[e]):y("warning: run dependency removed without ID"),0==ie&&(null!==ae&&(clearInterval(ae),ae=null),se)){var t=se;se=null,t()}}function Ee(e){i.onAbort&&i.onAbort(e),y(e="Aborted("+e+")"),F=!0;var t=new WebAssembly.RuntimeError(e);throw n(t),t}i.preloadedImages={},i.preloadedAudios={};var ue,fe,he="data:application/octet-stream;base64,";function Oe(e){return e.startsWith(he)}function me(e){return e.startsWith("file://")}function ge(e,t){return function(){var r=e,o=t;return t||(o=i.asm),I(oe,"native function `"+r+"` called before runtime initialization"),I(!ne,"native function `"+r+"` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)"),o[e]||I(o[e],"exported native function `"+r+"` not found"),o[e].apply(null,arguments)}}function we(e){try{if(e==ue&&w)return new Uint8Array(w);if(f)return f(e);throw"both async and sync fetching of the wasm failed"}catch(e){Ee(e)}}function Te(e){for(;e.length>0;){var t=e.shift();if("function"!=typeof t){var r=t.func;"number"==typeof r?void 0===t.arg?De(r)():De(r)(t.arg):r(void 0===t.arg?null:t.arg)}else t(i)}}function ye(e){return e.replace(/\b_Z[\w\d_]+/g,(function(e){var t,r=(t=e,_("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),t);return e===r?e:r+" ["+e+"]"}))}Oe(ue="dilithium.wasm")||(fe=ue,ue=i.locateFile?i.locateFile(fe,g):g+fe);var _e=[];function De(e){var t=_e[e];return t||(e>=_e.length&&(_e.length=e+1),_e[e]=t=q.get(e)),I(q.get(e)==t,"JavaScript-side Wasm function table mirror is out of date!"),t}var be={splitPath:function(e){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(e).slice(1)},normalizeArray:function(e,t){for(var r=0,o=e.length-1;o>=0;o--){var n=e[o];"."===n?e.splice(o,1):".."===n?(e.splice(o,1),r++):r&&(e.splice(o,1),r--)}if(t)for(;r;r--)e.unshift("..");return e},normalize:function(e){var t="/"===e.charAt(0),r="/"===e.substr(-1);return(e=be.normalizeArray(e.split("/").filter((function(e){return!!e})),!t).join("/"))||t||(e="."),e&&r&&(e+="/"),(t?"/":"")+e},dirname:function(e){var t=be.splitPath(e),r=t[0],o=t[1];return r||o?(o&&(o=o.substr(0,o.length-1)),r+o):"."},basename:function(e){if("/"===e)return"/";var t=(e=(e=be.normalize(e)).replace(/\/$/,"")).lastIndexOf("/");return-1===t?e:e.substr(t+1)},extname:function(e){return be.splitPath(e)[3]},join:function(){var e=Array.prototype.slice.call(arguments,0);return be.normalize(e.join("/"))},join2:function(e,t){return be.normalize(e+"/"+t)}},ve={resolve:function(){for(var e="",t=!1,r=arguments.length-1;r>=-1&&!t;r--){var o=r>=0?arguments[r]:Ae.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");if(!o)return"";e=o+"/"+e,t="/"===o.charAt(0)}return(t?"/":"")+(e=be.normalizeArray(e.split("/").filter((function(e){return!!e})),!t).join("/"))||"."},relative:function(e,t){function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var r=e.length-1;r>=0&&""===e[r];r--);return t>r?[]:e.slice(t,r-t+1)}e=ve.resolve(e).substr(1),t=ve.resolve(t).substr(1);for(var o=r(e.split("/")),n=r(t.split("/")),i=Math.min(o.length,n.length),a=i,s=0;s<i;s++)if(o[s]!==n[s]){a=s;break}var d=[];for(s=a;s<o.length;s++)d.push("..");return(d=d.concat(n.slice(a))).join("/")}},Pe={ttys:[],init:function(){},shutdown:function(){},register:function(e,t){Pe.ttys[e]={input:[],output:[],ops:t},Ae.registerDevice(e,Pe.stream_ops)},stream_ops:{open:function(e){var t=Pe.ttys[e.node.rdev];if(!t)throw new Ae.ErrnoError(43);e.tty=t,e.seekable=!1},close:function(e){e.tty.ops.flush(e.tty)},flush:function(e){e.tty.ops.flush(e.tty)},read:function(e,t,r,o,n){if(!e.tty||!e.tty.ops.get_char)throw new Ae.ErrnoError(60);for(var i=0,a=0;a<o;a++){var s;try{s=e.tty.ops.get_char(e.tty)}catch(e){throw new Ae.ErrnoError(29)}if(void 0===s&&0===i)throw new Ae.ErrnoError(6);if(null==s)break;i++,t[r+a]=s}return i&&(e.node.timestamp=Date.now()),i},write:function(e,t,r,o,n){if(!e.tty||!e.tty.ops.put_char)throw new Ae.ErrnoError(60);try{for(var i=0;i<o;i++)e.tty.ops.put_char(e.tty,t[r+i])}catch(e){throw new Ae.ErrnoError(29)}return o&&(e.node.timestamp=Date.now()),i}},default_tty_ops:{get_char:function(e){if(!e.input.length){var t=null;if(l){var r=Buffer.alloc(256),o=0;try{o=h.readSync(process.stdin.fd,r,0,256,-1)}catch(e){if(!e.toString().includes("EOF"))throw e;o=0}t=o>0?r.slice(0,o).toString("utf-8"):null}else"undefined"!=typeof window&&"function"==typeof window.prompt?null!==(t=window.prompt("Input: "))&&(t+="\n"):"function"==typeof readline&&null!==(t=readline())&&(t+="\n");if(!t)return null;e.input=je(t,!0)}return e.input.shift()},put_char:function(e,t){null===t||10===t?(T(B(e.output,0)),e.output=[]):0!=t&&e.output.push(t)},flush:function(e){e.output&&e.output.length>0&&(T(B(e.output,0)),e.output=[])}},default_tty1_ops:{put_char:function(e,t){null===t||10===t?(y(B(e.output,0)),e.output=[]):0!=t&&e.output.push(t)},flush:function(e){e.output&&e.output.length>0&&(y(B(e.output,0)),e.output=[])}}},Me={ops_table:null,mount:function(e){return Me.createNode(null,"/",16895,0)},createNode:function(e,t,r,o){if(Ae.isBlkdev(r)||Ae.isFIFO(r))throw new Ae.ErrnoError(63);Me.ops_table||(Me.ops_table={dir:{node:{getattr:Me.node_ops.getattr,setattr:Me.node_ops.setattr,lookup:Me.node_ops.lookup,mknod:Me.node_ops.mknod,rename:Me.node_ops.rename,unlink:Me.node_ops.unlink,rmdir:Me.node_ops.rmdir,readdir:Me.node_ops.readdir,symlink:Me.node_ops.symlink},stream:{llseek:Me.stream_ops.llseek}},file:{node:{getattr:Me.node_ops.getattr,setattr:Me.node_ops.setattr},stream:{llseek:Me.stream_ops.llseek,read:Me.stream_ops.read,write:Me.stream_ops.write,allocate:Me.stream_ops.allocate,mmap:Me.stream_ops.mmap,msync:Me.stream_ops.msync}},link:{node:{getattr:Me.node_ops.getattr,setattr:Me.node_ops.setattr,readlink:Me.node_ops.readlink},stream:{}},chrdev:{node:{getattr:Me.node_ops.getattr,setattr:Me.node_ops.setattr},stream:Ae.chrdev_stream_ops}});var n=Ae.createNode(e,t,r,o);return Ae.isDir(n.mode)?(n.node_ops=Me.ops_table.dir.node,n.stream_ops=Me.ops_table.dir.stream,n.contents={}):Ae.isFile(n.mode)?(n.node_ops=Me.ops_table.file.node,n.stream_ops=Me.ops_table.file.stream,n.usedBytes=0,n.contents=null):Ae.isLink(n.mode)?(n.node_ops=Me.ops_table.link.node,n.stream_ops=Me.ops_table.link.stream):Ae.isChrdev(n.mode)&&(n.node_ops=Me.ops_table.chrdev.node,n.stream_ops=Me.ops_table.chrdev.stream),n.timestamp=Date.now(),e&&(e.contents[t]=n,e.timestamp=n.timestamp),n},getFileDataAsTypedArray:function(e){return e.contents?e.contents.subarray?e.contents.subarray(0,e.usedBytes):new Uint8Array(e.contents):new Uint8Array(0)},expandFileStorage:function(e,t){var r=e.contents?e.contents.length:0;if(!(r>=t)){t=Math.max(t,r*(r<1048576?2:1.125)>>>0),0!=r&&(t=Math.max(t,256));var o=e.contents;e.contents=new Uint8Array(t),e.usedBytes>0&&e.contents.set(o.subarray(0,e.usedBytes),0)}},resizeFileStorage:function(e,t){if(e.usedBytes!=t)if(0==t)e.contents=null,e.usedBytes=0;else{var r=e.contents;e.contents=new Uint8Array(t),r&&e.contents.set(r.subarray(0,Math.min(t,e.usedBytes))),e.usedBytes=t}},node_ops:{getattr:function(e){var t={};return t.dev=Ae.isChrdev(e.mode)?e.id:1,t.ino=e.id,t.mode=e.mode,t.nlink=1,t.uid=0,t.gid=0,t.rdev=e.rdev,Ae.isDir(e.mode)?t.size=4096:Ae.isFile(e.mode)?t.size=e.usedBytes:Ae.isLink(e.mode)?t.size=e.link.length:t.size=0,t.atime=new Date(e.timestamp),t.mtime=new Date(e.timestamp),t.ctime=new Date(e.timestamp),t.blksize=4096,t.blocks=Math.ceil(t.size/t.blksize),t},setattr:function(e,t){void 0!==t.mode&&(e.mode=t.mode),void 0!==t.timestamp&&(e.timestamp=t.timestamp),void 0!==t.size&&Me.resizeFileStorage(e,t.size)},lookup:function(e,t){throw Ae.genericErrors[44]},mknod:function(e,t,r,o){return Me.createNode(e,t,r,o)},rename:function(e,t,r){if(Ae.isDir(e.mode)){var o;try{o=Ae.lookupNode(t,r)}catch(e){}if(o)for(var n in o.contents)throw new Ae.ErrnoError(55)}delete e.parent.contents[e.name],e.parent.timestamp=Date.now(),e.name=r,t.contents[r]=e,t.timestamp=e.parent.timestamp,e.parent=t},unlink:function(e,t){delete e.contents[t],e.timestamp=Date.now()},rmdir:function(e,t){var r=Ae.lookupNode(e,t);for(var o in r.contents)throw new Ae.ErrnoError(55);delete e.contents[t],e.timestamp=Date.now()},readdir:function(e){var t=[".",".."];for(var r in e.contents)e.contents.hasOwnProperty(r)&&t.push(r);return t},symlink:function(e,t,r){var o=Me.createNode(e,t,41471,0);return o.link=r,o},readlink:function(e){if(!Ae.isLink(e.mode))throw new Ae.ErrnoError(28);return e.link}},stream_ops:{read:function(e,t,r,o,n){var i=e.node.contents;if(n>=e.node.usedBytes)return 0;var a=Math.min(e.node.usedBytes-n,o);if(I(a>=0),a>8&&i.subarray)t.set(i.subarray(n,n+a),r);else for(var s=0;s<a;s++)t[r+s]=i[n+s];return a},write:function(e,t,r,o,n,i){if(I(!(t instanceof ArrayBuffer)),t.buffer===U.buffer&&(i=!1),!o)return 0;var a=e.node;if(a.timestamp=Date.now(),t.subarray&&(!a.contents||a.contents.subarray)){if(i)return I(0===n,"canOwn must imply no weird position inside the file"),a.contents=t.subarray(r,r+o),a.usedBytes=o,o;if(0===a.usedBytes&&0===n)return a.contents=t.slice(r,r+o),a.usedBytes=o,o;if(n+o<=a.usedBytes)return a.contents.set(t.subarray(r,r+o),n),o}if(Me.expandFileStorage(a,n+o),a.contents.subarray&&t.subarray)a.contents.set(t.subarray(r,r+o),n);else for(var s=0;s<o;s++)a.contents[n+s]=t[r+s];return a.usedBytes=Math.max(a.usedBytes,n+o),o},llseek:function(e,t,r){var o=t;if(1===r?o+=e.position:2===r&&Ae.isFile(e.node.mode)&&(o+=e.node.usedBytes),o<0)throw new Ae.ErrnoError(28);return o},allocate:function(e,t,r){Me.expandFileStorage(e.node,t+r),e.node.usedBytes=Math.max(e.node.usedBytes,t+r)},mmap:function(e,t,r,o,n,i){if(0!==t)throw new Ae.ErrnoError(28);if(!Ae.isFile(e.node.mode))throw new Ae.ErrnoError(43);var a,s,d=e.node.contents;if(2&i||d.buffer!==N){if((o>0||o+r<d.length)&&(d=d.subarray?d.subarray(o,o+r):Array.prototype.slice.call(d,o,o+r)),s=!0,!(a=void Ee("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")))throw new Ae.ErrnoError(48);U.set(d,a)}else s=!1,a=d.byteOffset;return{ptr:a,allocated:s}},msync:function(e,t,r,o,n){if(!Ae.isFile(e.node.mode))throw new Ae.ErrnoError(43);return 2&n||Me.stream_ops.write(e,t,0,o,r,!1),0}}},Re={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"},Se={},Ae={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:!1,ignorePermissions:!0,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(e,t={})=>{if(!(e=ve.resolve(Ae.cwd(),e)))return{path:"",node:null};var r={follow_mount:!0,recurse_count:0};for(var o in r)void 0===t[o]&&(t[o]=r[o]);if(t.recurse_count>8)throw new Ae.ErrnoError(32);for(var n=be.normalizeArray(e.split("/").filter((e=>!!e)),!1),i=Ae.root,a="/",s=0;s<n.length;s++){var d=s===n.length-1;if(d&&t.parent)break;if(i=Ae.lookupNode(i,n[s]),a=be.join2(a,n[s]),Ae.isMountpoint(i)&&(!d||d&&t.follow_mount)&&(i=i.mounted.root),!d||t.follow)for(var c=0;Ae.isLink(i.mode);){var l=Ae.readlink(a);if(a=ve.resolve(be.dirname(a),l),i=Ae.lookupPath(a,{recurse_count:t.recurse_count}).node,c++>40)throw new Ae.ErrnoError(32)}}return{path:a,node:i}},getPath:e=>{for(var t;;){if(Ae.isRoot(e)){var r=e.mount.mountpoint;return t?"/"!==r[r.length-1]?r+"/"+t:r+t:r}t=t?e.name+"/"+t:e.name,e=e.parent}},hashName:(e,t)=>{for(var r=0,o=0;o<t.length;o++)r=(r<<5)-r+t.charCodeAt(o)|0;return(e+r>>>0)%Ae.nameTable.length},hashAddNode:e=>{var t=Ae.hashName(e.parent.id,e.name);e.name_next=Ae.nameTable[t],Ae.nameTable[t]=e},hashRemoveNode:e=>{var t=Ae.hashName(e.parent.id,e.name);if(Ae.nameTable[t]===e)Ae.nameTable[t]=e.name_next;else for(var r=Ae.nameTable[t];r;){if(r.name_next===e){r.name_next=e.name_next;break}r=r.name_next}},lookupNode:(e,t)=>{var r=Ae.mayLookup(e);if(r)throw new Ae.ErrnoError(r,e);for(var o=Ae.hashName(e.id,t),n=Ae.nameTable[o];n;n=n.name_next){var i=n.name;if(n.parent.id===e.id&&i===t)return n}return Ae.lookup(e,t)},createNode:(e,t,r,o)=>{I("object"==typeof e);var n=new Ae.FSNode(e,t,r,o);return Ae.hashAddNode(n),n},destroyNode:e=>{Ae.hashRemoveNode(e)},isRoot:e=>e===e.parent,isMountpoint:e=>!!e.mounted,isFile:e=>32768==(61440&e),isDir:e=>16384==(61440&e),isLink:e=>40960==(61440&e),isChrdev:e=>8192==(61440&e),isBlkdev:e=>24576==(61440&e),isFIFO:e=>4096==(61440&e),isSocket:e=>!(49152&~e),flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:e=>{var t=Ae.flagModes[e];if(void 0===t)throw new Error("Unknown file open mode: "+e);return t},flagsToPermissionString:e=>{var t=["r","w","rw"][3&e];return 512&e&&(t+="w"),t},nodePermissions:(e,t)=>Ae.ignorePermissions||(!t.includes("r")||292&e.mode)&&(!t.includes("w")||146&e.mode)&&(!t.includes("x")||73&e.mode)?0:2,mayLookup:e=>{var t=Ae.nodePermissions(e,"x");return t||(e.node_ops.lookup?0:2)},mayCreate:(e,t)=>{try{return Ae.lookupNode(e,t),20}catch(e){}return Ae.nodePermissions(e,"wx")},mayDelete:(e,t,r)=>{var o;try{o=Ae.lookupNode(e,t)}catch(e){return e.errno}var n=Ae.nodePermissions(e,"wx");if(n)return n;if(r){if(!Ae.isDir(o.mode))return 54;if(Ae.isRoot(o)||Ae.getPath(o)===Ae.cwd())return 10}else if(Ae.isDir(o.mode))return 31;return 0},mayOpen:(e,t)=>e?Ae.isLink(e.mode)?32:Ae.isDir(e.mode)&&("r"!==Ae.flagsToPermissionString(t)||512&t)?31:Ae.nodePermissions(e,Ae.flagsToPermissionString(t)):44,MAX_OPEN_FDS:4096,nextfd:(e=0,t=Ae.MAX_OPEN_FDS)=>{for(var r=e;r<=t;r++)if(!Ae.streams[r])return r;throw new Ae.ErrnoError(33)},getStream:e=>Ae.streams[e],createStream:(e,t,r)=>{Ae.FSStream||(Ae.FSStream=function(){},Ae.FSStream.prototype={object:{get:function(){return this.node},set:function(e){this.node=e}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return!!(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}}),e=Object.assign(new Ae.FSStream,e);var o=Ae.nextfd(t,r);return e.fd=o,Ae.streams[o]=e,e},closeStream:e=>{Ae.streams[e]=null},chrdev_stream_ops:{open:e=>{var t=Ae.getDevice(e.node.rdev);e.stream_ops=t.stream_ops,e.stream_ops.open&&e.stream_ops.open(e)},llseek:()=>{throw new Ae.ErrnoError(70)}},major:e=>e>>8,minor:e=>255&e,makedev:(e,t)=>e<<8|t,registerDevice:(e,t)=>{Ae.devices[e]={stream_ops:t}},getDevice:e=>Ae.devices[e],getMounts:e=>{for(var t=[],r=[e];r.length;){var o=r.pop();t.push(o),r.push.apply(r,o.mounts)}return t},syncfs:(e,t)=>{"function"==typeof e&&(t=e,e=!1),Ae.syncFSRequests++,Ae.syncFSRequests>1&&y("warning: "+Ae.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var r=Ae.getMounts(Ae.root.mount),o=0;function n(e){return I(Ae.syncFSRequests>0),Ae.syncFSRequests--,t(e)}function i(e){if(e)return i.errored?void 0:(i.errored=!0,n(e));++o>=r.length&&n(null)}r.forEach((t=>{if(!t.type.syncfs)return i(null);t.type.syncfs(t,e,i)}))},mount:(e,t,r)=>{if("string"==typeof e)throw e;var o,n="/"===r,i=!r;if(n&&Ae.root)throw new Ae.ErrnoError(10);if(!n&&!i){var a=Ae.lookupPath(r,{follow_mount:!1});if(r=a.path,o=a.node,Ae.isMountpoint(o))throw new Ae.ErrnoError(10);if(!Ae.isDir(o.mode))throw new Ae.ErrnoError(54)}var s={type:e,opts:t,mountpoint:r,mounts:[]},d=e.mount(s);return d.mount=s,s.root=d,n?Ae.root=d:o&&(o.mounted=s,o.mount&&o.mount.mounts.push(s)),d},unmount:e=>{var t=Ae.lookupPath(e,{follow_mount:!1});if(!Ae.isMountpoint(t.node))throw new Ae.ErrnoError(28);var r=t.node,o=r.mounted,n=Ae.getMounts(o);Object.keys(Ae.nameTable).forEach((e=>{for(var t=Ae.nameTable[e];t;){var r=t.name_next;n.includes(t.mount)&&Ae.destroyNode(t),t=r}})),r.mounted=null;var i=r.mount.mounts.indexOf(o);I(-1!==i),r.mount.mounts.splice(i,1)},lookup:(e,t)=>e.node_ops.lookup(e,t),mknod:(e,t,r)=>{var o=Ae.lookupPath(e,{parent:!0}).node,n=be.basename(e);if(!n||"."===n||".."===n)throw new Ae.ErrnoError(28);var i=Ae.mayCreate(o,n);if(i)throw new Ae.ErrnoError(i);if(!o.node_ops.mknod)throw new Ae.ErrnoError(63);return o.node_ops.mknod(o,n,t,r)},create:(e,t)=>(t=void 0!==t?t:438,t&=4095,t|=32768,Ae.mknod(e,t,0)),mkdir:(e,t)=>(t=void 0!==t?t:511,t&=1023,t|=16384,Ae.mknod(e,t,0)),mkdirTree:(e,t)=>{for(var r=e.split("/"),o="",n=0;n<r.length;++n)if(r[n]){o+="/"+r[n];try{Ae.mkdir(o,t)}catch(e){if(20!=e.errno)throw e}}},mkdev:(e,t,r)=>(void 0===r&&(r=t,t=438),t|=8192,Ae.mknod(e,t,r)),symlink:(e,t)=>{if(!ve.resolve(e))throw new Ae.ErrnoError(44);var r=Ae.lookupPath(t,{parent:!0}).node;if(!r)throw new Ae.ErrnoError(44);var o=be.basename(t),n=Ae.mayCreate(r,o);if(n)throw new Ae.ErrnoError(n);if(!r.node_ops.symlink)throw new Ae.ErrnoError(63);return r.node_ops.symlink(r,o,e)},rename:(e,t)=>{var r,o,n=be.dirname(e),i=be.dirname(t),a=be.basename(e),s=be.basename(t);if(r=Ae.lookupPath(e,{parent:!0}).node,o=Ae.lookupPath(t,{parent:!0}).node,!r||!o)throw new Ae.ErrnoError(44);if(r.mount!==o.mount)throw new Ae.ErrnoError(75);var d,c=Ae.lookupNode(r,a),l=ve.relative(e,i);if("."!==l.charAt(0))throw new Ae.ErrnoError(28);if("."!==(l=ve.relative(t,n)).charAt(0))throw new Ae.ErrnoError(55);try{d=Ae.lookupNode(o,s)}catch(e){}if(c!==d){var p=Ae.isDir(c.mode),E=Ae.mayDelete(r,a,p);if(E)throw new Ae.ErrnoError(E);if(E=d?Ae.mayDelete(o,s,p):Ae.mayCreate(o,s))throw new Ae.ErrnoError(E);if(!r.node_ops.rename)throw new Ae.ErrnoError(63);if(Ae.isMountpoint(c)||d&&Ae.isMountpoint(d))throw new Ae.ErrnoError(10);if(o!==r&&(E=Ae.nodePermissions(r,"w")))throw new Ae.ErrnoError(E);Ae.hashRemoveNode(c);try{r.node_ops.rename(c,o,s)}catch(e){throw e}finally{Ae.hashAddNode(c)}}},rmdir:e=>{var t=Ae.lookupPath(e,{parent:!0}).node,r=be.basename(e),o=Ae.lookupNode(t,r),n=Ae.mayDelete(t,r,!0);if(n)throw new Ae.ErrnoError(n);if(!t.node_ops.rmdir)throw new Ae.ErrnoError(63);if(Ae.isMountpoint(o))throw new Ae.ErrnoError(10);t.node_ops.rmdir(t,r),Ae.destroyNode(o)},readdir:e=>{var t=Ae.lookupPath(e,{follow:!0}).node;if(!t.node_ops.readdir)throw new Ae.ErrnoError(54);return t.node_ops.readdir(t)},unlink:e=>{var t=Ae.lookupPath(e,{parent:!0}).node;if(!t)throw new Ae.ErrnoError(44);var r=be.basename(e),o=Ae.lookupNode(t,r),n=Ae.mayDelete(t,r,!1);if(n)throw new Ae.ErrnoError(n);if(!t.node_ops.unlink)throw new Ae.ErrnoError(63);if(Ae.isMountpoint(o))throw new Ae.ErrnoError(10);t.node_ops.unlink(t,r),Ae.destroyNode(o)},readlink:e=>{var t=Ae.lookupPath(e).node;if(!t)throw new Ae.ErrnoError(44);if(!t.node_ops.readlink)throw new Ae.ErrnoError(28);return ve.resolve(Ae.getPath(t.parent),t.node_ops.readlink(t))},stat:(e,t)=>{var r=Ae.lookupPath(e,{follow:!t}).node;if(!r)throw new Ae.ErrnoError(44);if(!r.node_ops.getattr)throw new Ae.ErrnoError(63);return r.node_ops.getattr(r)},lstat:e=>Ae.stat(e,!0),chmod:(e,t,r)=>{var o;if(!(o="string"==typeof e?Ae.lookupPath(e,{follow:!r}).node:e).node_ops.setattr)throw new Ae.ErrnoError(63);o.node_ops.setattr(o,{mode:4095&t|-4096&o.mode,timestamp:Date.now()})},lchmod:(e,t)=>{Ae.chmod(e,t,!0)},fchmod:(e,t)=>{var r=Ae.getStream(e);if(!r)throw new Ae.ErrnoError(8);Ae.chmod(r.node,t)},chown:(e,t,r,o)=>{var n;if(!(n="string"==typeof e?Ae.lookupPath(e,{follow:!o}).node:e).node_ops.setattr)throw new Ae.ErrnoError(63);n.node_ops.setattr(n,{timestamp:Date.now()})},lchown:(e,t,r)=>{Ae.chown(e,t,r,!0)},fchown:(e,t,r)=>{var o=Ae.getStream(e);if(!o)throw new Ae.ErrnoError(8);Ae.chown(o.node,t,r)},truncate:(e,t)=>{if(t<0)throw new Ae.ErrnoError(28);var r;if(!(r="string"==typeof e?Ae.lookupPath(e,{follow:!0}).node:e).node_ops.setattr)throw new Ae.ErrnoError(63);if(Ae.isDir(r.mode))throw new Ae.ErrnoError(31);if(!Ae.isFile(r.mode))throw new Ae.ErrnoError(28);var o=Ae.nodePermissions(r,"w");if(o)throw new Ae.ErrnoError(o);r.node_ops.setattr(r,{size:t,timestamp:Date.now()})},ftruncate:(e,t)=>{var r=Ae.getStream(e);if(!r)throw new Ae.ErrnoError(8);if(!(2097155&r.flags))throw new Ae.ErrnoError(28);Ae.truncate(r.node,t)},utime:(e,t,r)=>{var o=Ae.lookupPath(e,{follow:!0}).node;o.node_ops.setattr(o,{timestamp:Math.max(t,r)})},open:(e,t,r,o,n)=>{if(""===e)throw new Ae.ErrnoError(44);var a;if(r=void 0===r?438:r,r=64&(t="string"==typeof t?Ae.modeStringToFlags(t):t)?4095&r|32768:0,"object"==typeof e)a=e;else{e=be.normalize(e);try{a=Ae.lookupPath(e,{follow:!(131072&t)}).node}catch(e){}}var s=!1;if(64&t)if(a){if(128&t)throw new Ae.ErrnoError(20)}else a=Ae.mknod(e,r,0),s=!0;if(!a)throw new Ae.ErrnoError(44);if(Ae.isChrdev(a.mode)&&(t&=-513),65536&t&&!Ae.isDir(a.mode))throw new Ae.ErrnoError(54);if(!s){var d=Ae.mayOpen(a,t);if(d)throw new Ae.ErrnoError(d)}512&t&&Ae.truncate(a,0),t&=-131713;var c=Ae.createStream({node:a,path:Ae.getPath(a),flags:t,seekable:!0,position:0,stream_ops:a.stream_ops,ungotten:[],error:!1},o,n);return c.stream_ops.open&&c.stream_ops.open(c),!i.logReadFiles||1&t||(Ae.readFiles||(Ae.readFiles={}),e in Ae.readFiles||(Ae.readFiles[e]=1)),c},close:e=>{if(Ae.isClosed(e))throw new Ae.ErrnoError(8);e.getdents&&(e.getdents=null);try{e.stream_ops.close&&e.stream_ops.close(e)}catch(e){throw e}finally{Ae.closeStream(e.fd)}e.fd=null},isClosed:e=>null===e.fd,llseek:(e,t,r)=>{if(Ae.isClosed(e))throw new Ae.ErrnoError(8);if(!e.seekable||!e.stream_ops.llseek)throw new Ae.ErrnoError(70);if(0!=r&&1!=r&&2!=r)throw new Ae.ErrnoError(28);return e.position=e.stream_ops.llseek(e,t,r),e.ungotten=[],e.position},read:(e,t,r,o,n)=>{if(o<0||n<0)throw new Ae.ErrnoError(28);if(Ae.isClosed(e))throw new Ae.ErrnoError(8);if(1==(2097155&e.flags))throw new Ae.ErrnoError(8);if(Ae.isDir(e.node.mode))throw new Ae.ErrnoError(31);if(!e.stream_ops.read)throw new Ae.ErrnoError(28);var i=void 0!==n;if(i){if(!e.seekable)throw new Ae.ErrnoError(70)}else n=e.position;var a=e.stream_ops.read(e,t,r,o,n);return i||(e.position+=a),a},write:(e,t,r,o,n,i)=>{if(o<0||n<0)throw new Ae.ErrnoError(28);if(Ae.isClosed(e))throw new Ae.ErrnoError(8);if(!(2097155&e.flags))throw new Ae.ErrnoError(8);if(Ae.isDir(e.node.mode))throw new Ae.ErrnoError(31);if(!e.stream_ops.write)throw new Ae.ErrnoError(28);e.seekable&&1024&e.flags&&Ae.llseek(e,0,2);var a=void 0!==n;if(a){if(!e.seekable)throw new Ae.ErrnoError(70)}else n=e.position;var s=e.stream_ops.write(e,t,r,o,n,i);return a||(e.position+=s),s},allocate:(e,t,r)=>{if(Ae.isClosed(e))throw new Ae.ErrnoError(8);if(t<0||r<=0)throw new Ae.ErrnoError(28);if(!(2097155&e.flags))throw new Ae.ErrnoError(8);if(!Ae.isFile(e.node.mode)&&!Ae.isDir(e.node.mode))throw new Ae.ErrnoError(43);if(!e.stream_ops.allocate)throw new Ae.ErrnoError(138);e.stream_ops.allocate(e,t,r)},mmap:(e,t,r,o,n,i)=>{if(2&n&&!(2&i)&&2!=(2097155&e.flags))throw new Ae.ErrnoError(2);if(1==(2097155&e.flags))throw new Ae.ErrnoError(2);if(!e.stream_ops.mmap)throw new Ae.ErrnoError(43);return e.stream_ops.mmap(e,t,r,o,n,i)},msync:(e,t,r,o,n)=>e&&e.stream_ops.msync?e.stream_ops.msync(e,t,r,o,n):0,munmap:e=>0,ioctl:(e,t,r)=>{if(!e.stream_ops.ioctl)throw new Ae.ErrnoError(59);return e.stream_ops.ioctl(e,t,r)},readFile:(e,t={})=>{if(t.flags=t.flags||0,t.encoding=t.encoding||"binary","utf8"!==t.encoding&&"binary"!==t.encoding)throw new Error('Invalid encoding type "'+t.encoding+'"');var r,o=Ae.open(e,t.flags),n=Ae.stat(e).size,i=new Uint8Array(n);return Ae.read(o,i,0,n,0),"utf8"===t.encoding?r=B(i,0):"binary"===t.encoding&&(r=i),Ae.close(o),r},writeFile:(e,t,r={})=>{r.flags=r.flags||577;var o=Ae.open(e,r.flags,r.mode);if("string"==typeof t){var n=new Uint8Array(K(t)+1),i=z(t,n,0,n.length);Ae.write(o,n,0,i,void 0,r.canOwn)}else{if(!ArrayBuffer.isView(t))throw new Error("Unsupported data type");Ae.write(o,t,0,t.byteLength,void 0,r.canOwn)}Ae.close(o)},cwd:()=>Ae.currentPath,chdir:e=>{var t=Ae.lookupPath(e,{follow:!0});if(null===t.node)throw new Ae.ErrnoError(44);if(!Ae.isDir(t.node.mode))throw new Ae.ErrnoError(54);var r=Ae.nodePermissions(t.node,"x");if(r)throw new Ae.ErrnoError(r);Ae.currentPath=t.path},createDefaultDirectories:()=>{Ae.mkdir("/tmp"),Ae.mkdir("/home"),Ae.mkdir("/home/web_user")},createDefaultDevices:()=>{Ae.mkdir("/dev"),Ae.registerDevice(Ae.makedev(1,3),{read:()=>0,write:(e,t,r,o,n)=>o}),Ae.mkdev("/dev/null",Ae.makedev(1,3)),Pe.register(Ae.makedev(5,0),Pe.default_tty_ops),Pe.register(Ae.makedev(6,0),Pe.default_tty1_ops),Ae.mkdev("/dev/tty",Ae.makedev(5,0)),Ae.mkdev("/dev/tty1",Ae.makedev(6,0));var e=function(){if("object"==typeof crypto&&"function"==typeof crypto.getRandomValues){var e=new Uint8Array(1);return function(){return crypto.getRandomValues(e),e[0]}}if(l)try{var t=r(349);return function(){return t.randomBytes(1)[0]}}catch(e){}return function(){Ee("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };")}}();Ae.createDevice("/dev","random",e),Ae.createDevice("/dev","urandom",e),Ae.mkdir("/dev/shm"),Ae.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{Ae.mkdir("/proc");var e=Ae.mkdir("/proc/self");Ae.mkdir("/proc/self/fd"),Ae.mount({mount:()=>{var t=Ae.createNode(e,"fd",16895,73);return t.node_ops={lookup:(e,t)=>{var r=+t,o=Ae.getStream(r);if(!o)throw new Ae.ErrnoError(8);var n={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>o.path}};return n.parent=n,n}},t}},{},"/proc/self/fd")},createStandardStreams:()=>{i.stdin?Ae.createDevice("/dev","stdin",i.stdin):Ae.symlink("/dev/tty","/dev/stdin"),i.stdout?Ae.createDevice("/dev","stdout",null,i.stdout):Ae.symlink("/dev/tty","/dev/stdout"),i.stderr?Ae.createDevice("/dev","stderr",null,i.stderr):Ae.symlink("/dev/tty1","/dev/stderr");var e=Ae.open("/dev/stdin",0),t=Ae.open("/dev/stdout",1),r=Ae.open("/dev/stderr",1);I(0===e.fd,"invalid handle for stdin ("+e.fd+")"),I(1===t.fd,"invalid handle for stdout ("+t.fd+")"),I(2===r.fd,"invalid handle for stderr ("+r.fd+")")},ensureErrnoError:()=>{Ae.ErrnoError||(Ae.ErrnoError=function(e,t){this.node=t,this.setErrno=function(e){for(var t in this.errno=e,Se)if(Se[t]===e){this.code=t;break}},this.setErrno(e),this.message=Re[e],this.stack&&(Object.defineProperty(this,"stack",{value:(new Error).stack,writable:!0}),this.stack=ye(this.stack))},Ae.ErrnoError.prototype=new Error,Ae.ErrnoError.prototype.constructor=Ae.ErrnoError,[44].forEach((e=>{Ae.genericErrors[e]=new Ae.ErrnoError(e),Ae.genericErrors[e].stack="<generic error, no stack>"})))},staticInit:()=>{Ae.ensureErrnoError(),Ae.nameTable=new Array(4096),Ae.mount(Me,{},"/"),Ae.createDefaultDirectories(),Ae.createDefaultDevices(),Ae.createSpecialDirectories(),Ae.filesystems={MEMFS:Me}},init:(e,t,r)=>{I(!Ae.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)"),Ae.init.initialized=!0,Ae.ensureErrnoError(),i.stdin=e||i.stdin,i.stdout=t||i.stdout,i.stderr=r||i.stderr,Ae.createStandardStreams()},quit:()=>{Ae.init.initialized=!1,He();for(var e=0;e<Ae.streams.length;e++){var t=Ae.streams[e];t&&Ae.close(t)}},getMode:(e,t)=>{var r=0;return e&&(r|=365),t&&(r|=146),r},findObject:(e,t)=>{var r=Ae.analyzePath(e,t);return r.exists?r.object:null},analyzePath:(e,t)=>{try{e=(o=Ae.lookupPath(e,{follow:!t})).path}catch(e){}var r={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var o=Ae.lookupPath(e,{parent:!0});r.parentExists=!0,r.parentPath=o.path,r.parentObject=o.node,r.name=be.basename(e),o=Ae.lookupPath(e,{follow:!t}),r.exists=!0,r.path=o.path,r.object=o.node,r.name=o.node.name,r.isRoot="/"===o.path}catch(e){r.error=e.errno}return r},createPath:(e,t,r,o)=>{e="string"==typeof e?e:Ae.getPath(e);for(var n=t.split("/").reverse();n.length;){var i=n.pop();if(i){var a=be.join2(e,i);try{Ae.mkdir(a)}catch(e){}e=a}}return a},createFile:(e,t,r,o,n)=>{var i=be.join2("string"==typeof e?e:Ae.getPath(e),t),a=Ae.getMode(o,n);return Ae.create(i,a)},createDataFile:(e,t,r,o,n,i)=>{var a=t;e&&(e="string"==typeof e?e:Ae.getPath(e),a=t?be.join2(e,t):e);var s=Ae.getMode(o,n),d=Ae.create(a,s);if(r){if("string"==typeof r){for(var c=new Array(r.length),l=0,p=r.length;l<p;++l)c[l]=r.charCodeAt(l);r=c}Ae.chmod(d,146|s);var E=Ae.open(d,577);Ae.write(E,r,0,r.length,0,i),Ae.close(E),Ae.chmod(d,s)}return d},createDevice:(e,t,r,o)=>{var n=be.join2("string"==typeof e?e:Ae.getPath(e),t),i=Ae.getMode(!!r,!!o);Ae.createDevice.major||(Ae.createDevice.major=64);var a=Ae.makedev(Ae.createDevice.major++,0);return Ae.registerDevice(a,{open:e=>{e.seekable=!1},close:e=>{o&&o.buffer&&o.buffer.length&&o(10)},read:(e,t,o,n,i)=>{for(var a=0,s=0;s<n;s++){var d;try{d=r()}catch(e){throw new Ae.ErrnoError(29)}if(void 0===d&&0===a)throw new Ae.ErrnoError(6);if(null==d)break;a++,t[o+s]=d}return a&&(e.node.timestamp=Date.now()),a},write:(e,t,r,n,i)=>{for(var a=0;a<n;a++)try{o(t[r+a])}catch(e){throw new Ae.ErrnoError(29)}return n&&(e.node.timestamp=Date.now()),a}}),Ae.mkdev(n,i,a)},forceLoadFile:e=>{if(e.isDevice||e.isFolder||e.link||e.contents)return!0;if("undefined"!=typeof XMLHttpRequest)throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");if(!E)throw new Error("Cannot load without read() or XMLHttpRequest.");try{e.contents=je(E(e.url),!0),e.usedBytes=e.contents.length}catch(e){throw new Ae.ErrnoError(29)}},createLazyFile:(e,t,r,o,n)=>{function i(){this.lengthKnown=!1,this.chunks=[]}if(i.prototype.get=function(e){if(!(e>this.length-1||e<0)){var t=e%this.chunkSize,r=e/this.chunkSize|0;return this.getter(r)[t]}},i.prototype.setDataGetter=function(e){this.getter=e},i.prototype.cacheLength=function(){var e=new XMLHttpRequest;if(e.open("HEAD",r,!1),e.send(null),!(e.status>=200&&e.status<300||304===e.status))throw new Error("Couldn't load "+r+". Status: "+e.status);var t,o=Number(e.getResponseHeader("Content-length")),n=(t=e.getResponseHeader("Accept-Ranges"))&&"bytes"===t,i=(t=e.getResponseHeader("Content-Encoding"))&&"gzip"===t,a=1048576;n||(a=o);var s=this;s.setDataGetter((e=>{var t=e*a,n=(e+1)*a-1;if(n=Math.min(n,o-1),void 0===s.chunks[e]&&(s.chunks[e]=((e,t)=>{if(e>t)throw new Error("invalid range ("+e+", "+t+") or no bytes requested!");if(t>o-1)throw new Error("only "+o+" bytes available! programmer error!");var n=new XMLHttpRequest;if(n.open("GET",r,!1),o!==a&&n.setRequestHeader("Range","bytes="+e+"-"+t),n.responseType="arraybuffer",n.overrideMimeType&&n.overrideMimeType("text/plain; charset=x-user-defined"),n.send(null),!(n.status>=200&&n.status<300||304===n.status))throw new Error("Couldn't load "+r+". Status: "+n.status);return void 0!==n.response?new Uint8Array(n.response||[]):je(n.responseText||"",!0)})(t,n)),void 0===s.chunks[e])throw new Error("doXHR failed!");return s.chunks[e]})),!i&&o||(a=o=1,o=this.getter(0).length,a=o,T("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=o,this._chunkSize=a,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!c)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var a=new i;Object.defineProperties(a,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var s={isDevice:!1,contents:a}}else s={isDevice:!1,url:r};var d=Ae.createFile(e,t,s,o,n);s.contents?d.contents=s.contents:s.url&&(d.contents=null,d.url=s.url),Object.defineProperties(d,{usedBytes:{get:function(){return this.contents.length}}});var l={};return Object.keys(d.stream_ops).forEach((e=>{var t=d.stream_ops[e];l[e]=function(){return Ae.forceLoadFile(d),t.apply(null,arguments)}})),l.read=(e,t,r,o,n)=>{Ae.forceLoadFile(d);var i=e.node.contents;if(n>=i.length)return 0;var a=Math.min(i.length-n,o);if(I(a>=0),i.slice)for(var s=0;s<a;s++)t[r+s]=i[n+s];else for(s=0;s<a;s++)t[r+s]=i.get(n+s);return a},d.stream_ops=l,d},createPreloadedFile:(e,t,r,o,n,i,a,s,d,c)=>{var l=t?ve.resolve(be.join2(e,t)):e,p=ce("cp "+l);function E(r){function E(r){c&&c(),s||Ae.createDataFile(e,t,r,o,n,d),i&&i(),pe(p)}Browser.handledByPreloadPlugin(r,l,E,(()=>{a&&a(),pe(p)}))||E(r)}le(p),"string"==typeof r?function(e,t,r,o){var n=o?"":ce("al "+e);u(e,(function(r){I(r,'Loading data file "'+e+'" failed (no arrayBuffer).'),t(new Uint8Array(r)),n&&pe(n)}),(function(t){if(!r)throw'Loading data file "'+e+'" failed.';r()})),n&&le(n)}(r,(e=>E(e)),a):E(r)},indexedDB:()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,DB_NAME:()=>"EM_FS_"+window.location.pathname,DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(e,t,r)=>{t=t||(()=>{}),r=r||(()=>{});var o=Ae.indexedDB();try{var n=o.open(Ae.DB_NAME(),Ae.DB_VERSION)}catch(e){return r(e)}n.onupgradeneeded=()=>{T("creating db"),n.result.createObjectStore(Ae.DB_STORE_NAME)},n.onsuccess=()=>{var o=n.result.transaction([Ae.DB_STORE_NAME],"readwrite"),i=o.objectStore(Ae.DB_STORE_NAME),a=0,s=0,d=e.length;function c(){0==s?t():r()}e.forEach((e=>{var t=i.put(Ae.analyzePath(e).object.contents,e);t.onsuccess=()=>{++a+s==d&&c()},t.onerror=()=>{s++,a+s==d&&c()}})),o.onerror=r},n.onerror=r},loadFilesFromDB:(e,t,r)=>{t=t||(()=>{}),r=r||(()=>{});var o=Ae.indexedDB();try{var n=o.open(Ae.DB_NAME(),Ae.DB_VERSION)}catch(e){return r(e)}n.onupgradeneeded=r,n.onsuccess=()=>{var o=n.result;try{var i=o.transaction([Ae.DB_STORE_NAME],"readonly")}catch(e){return void r(e)}var a=i.objectStore(Ae.DB_STORE_NAME),s=0,d=0,c=e.length;function l(){0==d?t():r()}e.forEach((e=>{var t=a.get(e);t.onsuccess=()=>{Ae.analyzePath(e).exists&&Ae.unlink(e),Ae.createDataFile(be.dirname(e),be.basename(e),t.result,!0,!0,!0),++s+d==c&&l()},t.onerror=()=>{d++,s+d==c&&l()}})),i.onerror=r},n.onerror=r},absolutePath:()=>{Ee("FS.absolutePath has been removed; use PATH_FS.resolve instead")},createFolder:()=>{Ee("FS.createFolder has been removed; use FS.mkdir instead")},createLink:()=>{Ee("FS.createLink has been removed; use FS.symlink instead")},joinPath:()=>{Ee("FS.joinPath has been removed; use PATH.join instead")},mmapAlloc:()=>{Ee("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},standardizePath:()=>{Ee("FS.standardizePath has been removed; use PATH.normalize instead")}},Fe={DEFAULT_POLLMASK:5,calculateAt:function(e,t,r){if("/"===t[0])return t;var o;if(-100===e)o=Ae.cwd();else{var n=Ae.getStream(e);if(!n)throw new Ae.ErrnoError(8);o=n.path}if(0==t.length){if(!r)throw new Ae.ErrnoError(44);return o}return be.join2(o,t)},doStat:function(e,t,r){try{var o=e(t)}catch(e){if(e&&e.node&&be.normalize(t)!==be.normalize(Ae.getPath(e.node)))return-54;throw e}return M(0|r,0|o.dev,4),M(r+4|0,0,4),M(r+8|0,0|o.ino,4),M(r+12|0,0|o.mode,4),M(r+16|0,0|o.nlink,4),M(r+20|0,0|o.uid,4),M(r+24|0,0|o.gid,4),M(r+28|0,0|o.rdev,4),M(r+32|0,0,4),M(r+40|0,0|o.size,8),M(r+48|0,4096,4),M(r+52|0,0|o.blocks,4),M(r+56|0,o.atime.getTime()/1e3|0,4),M(r+60|0,0,4),M(r+64|0,o.mtime.getTime()/1e3|0,4),M(r+68|0,0,4),M(r+72|0,o.ctime.getTime()/1e3|0,4),M(r+76|0,0,4),M(r+80|0,0|o.ino,8),0},doMsync:function(e,t,r,o,n){var i=j.slice(e,e+r);Ae.msync(t,i,n,r,o)},doMkdir:function(e,t){return"/"===(e=be.normalize(e))[e.length-1]&&(e=e.substr(0,e.length-1)),Ae.mkdir(e,t,0),0},doMknod:function(e,t,r){switch(61440&t){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return Ae.mknod(e,t,r),0},doReadlink:function(e,t,r){if(r<=0)return-28;var o=Ae.readlink(e),n=Math.min(r,K(o)),i=S(t+n,1,0);return W(o,t,r+1),M(t+n,i,1),n},doAccess:function(e,t){if(-8&t)return-28;var r=Ae.lookupPath(e,{follow:!0}).node;if(!r)return-44;var o="";return 4&t&&(o+="r"),2&t&&(o+="w"),1&t&&(o+="x"),o&&Ae.nodePermissions(r,o)?-2:0},doDup:function(e,t,r){var o=Ae.getStream(r);return o&&Ae.close(o),Ae.open(e,t,0,r,r).fd},doReadv:function(e,t,r,o){for(var n=0,i=0;i<r;i++){var a=0|S(t+8*i|0,4,0),s=0|S(t+(8*i+4)|0,4,0),d=Ae.read(e,U,a,s,o);if(d<0)return-1;if(n+=d,d<s)break}return n},doWritev:function(e,t,r,o){for(var n=0,i=0;i<r;i++){var a=0|S(t+8*i|0,4,0),s=0|S(t+(8*i+4)|0,4,0),d=Ae.write(e,U,a,s,o);if(d<0)return-1;n+=d}return n},varargs:void 0,get:function(){return I(null!=Fe.varargs),Fe.varargs+=4,0|S(Fe.varargs-4|0,4,0)},getStr:function(e){return Y(e)},getStreamFromFD:function(e){var t=Ae.getStream(e);if(!t)throw new Ae.ErrnoError(8);return t},get64:function(e,t){return I(e>=0?0===t:-1===t),e}};function Ie(e){try{return D.grow(e-N.byteLength+65535>>>16),V(D.buffer),1}catch(t){y("emscripten_realloc_buffer: Attempted to grow heap from "+N.byteLength+" bytes to "+e+" bytes, but got error: "+t)}}var ke=function(e,t,r,o){e||(e=this),this.parent=e,this.mount=e.mount,this.mounted=null,this.id=Ae.nextInode++,this.name=t,this.mode=r,this.node_ops={},this.stream_ops={},this.rdev=o},Ne=365,Ue=146;function je(e,t,r){var o=r>0?r:K(e)+1,n=new Array(o),i=z(e,n,0,n.length);return t&&(n.length=i),n}Object.defineProperties(ke.prototype,{read:{get:function(){return(this.mode&Ne)===Ne},set:function(e){e?this.mode|=Ne:this.mode&=-366}},write:{get:function(){return(this.mode&Ue)===Ue},set:function(e){e?this.mode|=Ue:this.mode&=-147}},isFolder:{get:function(){return Ae.isDir(this.mode)}},isDevice:{get:function(){return Ae.isChrdev(this.mode)}}}),Ae.FSNode=ke,Ae.staticInit(),Se={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};var xe,Ce={__assert_fail:function(e,t,r,o){Ee("Assertion failed: "+Y(e)+", at: "+[t?Y(t):"unknown filename",r,o?Y(o):"unknown function"])},__syscall_open:function(e,t,r){Fe.varargs=r;try{var o=Fe.getStr(e),n=r?Fe.get():0;return Ae.open(o,t,n).fd}catch(e){if(void 0===Ae||!(e instanceof Ae.ErrnoError))throw e;return-e.errno}},alignfault:function(){Ee("alignment fault")},emscripten_memcpy_big:function(e,t,r){j.copyWithin(e,t,t+r)},emscripten_resize_heap:function(e){var t=j.length;I((e>>>=0)>t);var r,o,n=2147483648;if(e>n)return y("Cannot enlarge memory, asked to go up to "+e+" bytes, but the limit is "+n+" bytes!"),!1;for(var i=1;i<=4;i*=2){var a=t*(1+.2/i);a=Math.min(a,e+100663296);var s=Math.min(n,((r=Math.max(e,a))%(o=65536)>0&&(r+=o-r%o),r));if(Ie(s))return!0}return y("Failed to grow the heap from "+t+" bytes to "+s+" bytes, not enough memory!"),!1},fd_close:function(e){try{var t=Fe.getStreamFromFD(e);return Ae.close(t),0}catch(e){if(void 0===Ae||!(e instanceof Ae.ErrnoError))throw e;return e.errno}},fd_read:function(e,t,r,o){try{var n=Fe.getStreamFromFD(e);return M(0|o,0|Fe.doReadv(n,t,r),4),0}catch(e){if(void 0===Ae||!(e instanceof Ae.ErrnoError))throw e;return e.errno}},fd_seek:function(e,t,r,o){try{var n=0|Number(t&BigInt(4294967295)),i=0|Number(t>>BigInt(32)),a=Fe.getStreamFromFD(e),s=4294967296*i+(n>>>0),d=9007199254740992;return s<=-d||s>=d?-61:(Ae.llseek(a,s,r),M(0|o,0|a.position,8),a.getdents&&0===s&&0===r&&(a.getdents=null),0)}catch(e){if(void 0===Ae||!(e instanceof Ae.ErrnoError))throw e;return e.errno}},fd_write:function(e,t,r,o){try{var n=Fe.getStreamFromFD(e);return M(0|o,0|Fe.doWritev(n,t,r),4),0}catch(e){if(void 0===Ae||!(e instanceof Ae.ErrnoError))throw e;return e.errno}},segfault:function(){Ee("segmentation fault")}},He=(function(){var e={env:Ce,wasi_snapshot_preview1:Ce};function t(e,t){var r,o=e.exports;i.asm=o,I(D=i.asm.memory,"memory not found in wasm exports"),V(D.buffer),I(q=i.asm.__indirect_function_table,"table not found in wasm exports"),r=i.asm.__wasm_call_ctors,te.unshift(r),pe("wasm-instantiate")}le("wasm-instantiate");var r=i;function o(e){I(i===r,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?"),r=null,t(e.instance)}function a(t){return function(){if(!w&&(d||c)){if("function"==typeof fetch&&!me(ue))return fetch(ue,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+ue+"'";return e.arrayBuffer()})).catch((function(){return we(ue)}));if(u)return new Promise((function(e,t){u(ue,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return we(ue)}))}().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(e){return e})).then(t,(function(e){y("failed to asynchronously prepare wasm: "+e),me(ue)&&y("warning: Loading from a file URI ("+ue+") is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing"),Ee(e)}))}if(i.instantiateWasm)try{return i.instantiateWasm(e,t)}catch(e){return y("Module.instantiateWasm callback failed with error: "+e),!1}(w||"function"!=typeof WebAssembly.instantiateStreaming||Oe(ue)||me(ue)||"function"!=typeof fetch?a(o):fetch(ue,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(o,(function(e){return y("wasm streaming compile failed: "+e),y("falling back to ArrayBuffer instantiation"),a(o)}))}))).catch(n)}(),i.___wasm_call_ctors=ge("__wasm_call_ctors"),i._dilithium_keygen=ge("dilithium_keygen"),i._malloc=ge("malloc"),i._free=ge("free"),i._dilithium_sign=ge("dilithium_sign"),i._dilithium_verify=ge("dilithium_verify"),i._SHA3_256=ge("SHA3_256"),i._randombytes=ge("randombytes"),i.___errno_location=ge("__errno_location"),i.___stdio_exit=ge("__stdio_exit")),Le=i._sbrk=ge("sbrk"),Xe=(i._emscripten_get_sbrk_ptr=ge("emscripten_get_sbrk_ptr"),i._emscripten_stack_init=function(){return(Xe=i._emscripten_stack_init=i.asm.emscripten_stack_init).apply(null,arguments)}),Qe=(i._emscripten_stack_get_free=function(){return(i._emscripten_stack_get_free=i.asm.emscripten_stack_get_free).apply(null,arguments)},i._emscripten_stack_get_base=function(){return(Qe=i._emscripten_stack_get_base=i.asm.emscripten_stack_get_base).apply(null,arguments)}),Be=i._emscripten_stack_get_end=function(){return(Be=i._emscripten_stack_get_end=i.asm.emscripten_stack_get_end).apply(null,arguments)},Ye=i.stackSave=ge("stackSave"),ze=i.stackRestore=ge("stackRestore"),We=i.stackAlloc=ge("stackAlloc");function Ke(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function Ve(e){function r(){xe||(xe=!0,i.calledRun=!0,F||($(),I(!oe),oe=!0,i.noFSInit||Ae.init.initialized||Ae.init(),Ae.ignorePermissions=!1,Pe.init(),Te(te),t(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),I(!i._main,'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'),function(){if($(),i.postRun)for("function"==typeof i.postRun&&(i.postRun=[i.postRun]);i.postRun.length;)e=i.postRun.shift(),re.unshift(e);var e;Te(re)}()))}e=e||s,ie>0||(Xe(),J(),function(){if(i.preRun)for("function"==typeof i.preRun&&(i.preRun=[i.preRun]);i.preRun.length;)e=i.preRun.shift(),ee.unshift(e);var e;Te(ee)}(),ie>0||(i.setStatus?(i.setStatus("Running..."),setTimeout((function(){setTimeout((function(){i.setStatus("")}),1),r()}),1)):r(),$()))}if(Object.getOwnPropertyDescriptor(i,"intArrayFromString")||(i.intArrayFromString=()=>Ee("'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"intArrayToString")||(i.intArrayToString=()=>Ee("'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),i.ccall=k,i.cwrap=function(e,t,r,o){return function(){return k(e,t,r,arguments)}},i.setValue=b,i.getValue=v,Object.getOwnPropertyDescriptor(i,"allocate")||(i.allocate=()=>Ee("'allocate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"UTF8ArrayToString")||(i.UTF8ArrayToString=()=>Ee("'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"UTF8ToString")||(i.UTF8ToString=()=>Ee("'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stringToUTF8Array")||(i.stringToUTF8Array=()=>Ee("'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stringToUTF8")||(i.stringToUTF8=()=>Ee("'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"lengthBytesUTF8")||(i.lengthBytesUTF8=()=>Ee("'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stackTrace")||(i.stackTrace=()=>Ee("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addOnPreRun")||(i.addOnPreRun=()=>Ee("'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addOnInit")||(i.addOnInit=()=>Ee("'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addOnPreMain")||(i.addOnPreMain=()=>Ee("'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addOnExit")||(i.addOnExit=()=>Ee("'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addOnPostRun")||(i.addOnPostRun=()=>Ee("'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeStringToMemory")||(i.writeStringToMemory=()=>Ee("'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeArrayToMemory")||(i.writeArrayToMemory=()=>Ee("'writeArrayToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeAsciiToMemory")||(i.writeAsciiToMemory=()=>Ee("'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addRunDependency")||(i.addRunDependency=()=>Ee("'addRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"removeRunDependency")||(i.removeRunDependency=()=>Ee("'removeRunDependency' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"FS_createFolder")||(i.FS_createFolder=()=>Ee("'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"FS_createPath")||(i.FS_createPath=()=>Ee("'FS_createPath' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"FS_createDataFile")||(i.FS_createDataFile=()=>Ee("'FS_createDataFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"FS_createPreloadedFile")||(i.FS_createPreloadedFile=()=>Ee("'FS_createPreloadedFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"FS_createLazyFile")||(i.FS_createLazyFile=()=>Ee("'FS_createLazyFile' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"FS_createLink")||(i.FS_createLink=()=>Ee("'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"FS_createDevice")||(i.FS_createDevice=()=>Ee("'FS_createDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"FS_unlink")||(i.FS_unlink=()=>Ee("'FS_unlink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you")),Object.getOwnPropertyDescriptor(i,"getLEB")||(i.getLEB=()=>Ee("'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getFunctionTables")||(i.getFunctionTables=()=>Ee("'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"alignFunctionTables")||(i.alignFunctionTables=()=>Ee("'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerFunctions")||(i.registerFunctions=()=>Ee("'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"addFunction")||(i.addFunction=()=>Ee("'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"removeFunction")||(i.removeFunction=()=>Ee("'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getFuncWrapper")||(i.getFuncWrapper=()=>Ee("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"prettyPrint")||(i.prettyPrint=()=>Ee("'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"dynCall")||(i.dynCall=()=>Ee("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getCompilerSetting")||(i.getCompilerSetting=()=>Ee("'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"print")||(i.print=()=>Ee("'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"printErr")||(i.printErr=()=>Ee("'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getTempRet0")||(i.getTempRet0=()=>Ee("'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setTempRet0")||(i.setTempRet0=()=>Ee("'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"callMain")||(i.callMain=()=>Ee("'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"abort")||(i.abort=()=>Ee("'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"keepRuntimeAlive")||(i.keepRuntimeAlive=()=>Ee("'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"zeroMemory")||(i.zeroMemory=()=>Ee("'zeroMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stringToNewUTF8")||(i.stringToNewUTF8=()=>Ee("'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"emscripten_realloc_buffer")||(i.emscripten_realloc_buffer=()=>Ee("'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"ENV")||(i.ENV=()=>Ee("'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"withStackSave")||(i.withStackSave=()=>Ee("'withStackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"ERRNO_CODES")||(i.ERRNO_CODES=()=>Ee("'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"ERRNO_MESSAGES")||(i.ERRNO_MESSAGES=()=>Ee("'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setErrNo")||(i.setErrNo=()=>Ee("'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"inetPton4")||(i.inetPton4=()=>Ee("'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"inetNtop4")||(i.inetNtop4=()=>Ee("'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"inetPton6")||(i.inetPton6=()=>Ee("'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"inetNtop6")||(i.inetNtop6=()=>Ee("'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"readSockaddr")||(i.readSockaddr=()=>Ee("'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeSockaddr")||(i.writeSockaddr=()=>Ee("'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"DNS")||(i.DNS=()=>Ee("'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getHostByName")||(i.getHostByName=()=>Ee("'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"Protocols")||(i.Protocols=()=>Ee("'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"Sockets")||(i.Sockets=()=>Ee("'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getRandomDevice")||(i.getRandomDevice=()=>Ee("'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"traverseStack")||(i.traverseStack=()=>Ee("'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"convertFrameToPC")||(i.convertFrameToPC=()=>Ee("'convertFrameToPC' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"UNWIND_CACHE")||(i.UNWIND_CACHE=()=>Ee("'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"saveInUnwindCache")||(i.saveInUnwindCache=()=>Ee("'saveInUnwindCache' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"convertPCtoSourceLocation")||(i.convertPCtoSourceLocation=()=>Ee("'convertPCtoSourceLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"readAsmConstArgsArray")||(i.readAsmConstArgsArray=()=>Ee("'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"readAsmConstArgs")||(i.readAsmConstArgs=()=>Ee("'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"mainThreadEM_ASM")||(i.mainThreadEM_ASM=()=>Ee("'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"jstoi_q")||(i.jstoi_q=()=>Ee("'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"jstoi_s")||(i.jstoi_s=()=>Ee("'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getExecutableName")||(i.getExecutableName=()=>Ee("'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"listenOnce")||(i.listenOnce=()=>Ee("'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"autoResumeAudioContext")||(i.autoResumeAudioContext=()=>Ee("'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"dynCall")||(i.dynCall=()=>Ee("'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"callRuntimeCallbacks")||(i.callRuntimeCallbacks=()=>Ee("'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"wasmTableMirror")||(i.wasmTableMirror=()=>Ee("'wasmTableMirror' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setWasmTableEntry")||(i.setWasmTableEntry=()=>Ee("'setWasmTableEntry' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getWasmTableEntry")||(i.getWasmTableEntry=()=>Ee("'getWasmTableEntry' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"handleException")||(i.handleException=()=>Ee("'handleException' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"runtimeKeepalivePush")||(i.runtimeKeepalivePush=()=>Ee("'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"runtimeKeepalivePop")||(i.runtimeKeepalivePop=()=>Ee("'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"callUserCallback")||(i.callUserCallback=()=>Ee("'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"maybeExit")||(i.maybeExit=()=>Ee("'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"safeSetTimeout")||(i.safeSetTimeout=()=>Ee("'safeSetTimeout' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"asmjsMangle")||(i.asmjsMangle=()=>Ee("'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"asyncLoad")||(i.asyncLoad=()=>Ee("'asyncLoad' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"alignMemory")||(i.alignMemory=()=>Ee("'alignMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"mmapAlloc")||(i.mmapAlloc=()=>Ee("'mmapAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"reallyNegative")||(i.reallyNegative=()=>Ee("'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"unSign")||(i.unSign=()=>Ee("'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"reSign")||(i.reSign=()=>Ee("'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"formatString")||(i.formatString=()=>Ee("'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"PATH")||(i.PATH=()=>Ee("'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"PATH_FS")||(i.PATH_FS=()=>Ee("'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"SYSCALLS")||(i.SYSCALLS=()=>Ee("'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getSocketFromFD")||(i.getSocketFromFD=()=>Ee("'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getSocketAddress")||(i.getSocketAddress=()=>Ee("'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"JSEvents")||(i.JSEvents=()=>Ee("'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerKeyEventCallback")||(i.registerKeyEventCallback=()=>Ee("'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"specialHTMLTargets")||(i.specialHTMLTargets=()=>Ee("'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"maybeCStringToJsString")||(i.maybeCStringToJsString=()=>Ee("'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"findEventTarget")||(i.findEventTarget=()=>Ee("'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"findCanvasEventTarget")||(i.findCanvasEventTarget=()=>Ee("'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getBoundingClientRect")||(i.getBoundingClientRect=()=>Ee("'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillMouseEventData")||(i.fillMouseEventData=()=>Ee("'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerMouseEventCallback")||(i.registerMouseEventCallback=()=>Ee("'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerWheelEventCallback")||(i.registerWheelEventCallback=()=>Ee("'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerUiEventCallback")||(i.registerUiEventCallback=()=>Ee("'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerFocusEventCallback")||(i.registerFocusEventCallback=()=>Ee("'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillDeviceOrientationEventData")||(i.fillDeviceOrientationEventData=()=>Ee("'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerDeviceOrientationEventCallback")||(i.registerDeviceOrientationEventCallback=()=>Ee("'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillDeviceMotionEventData")||(i.fillDeviceMotionEventData=()=>Ee("'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerDeviceMotionEventCallback")||(i.registerDeviceMotionEventCallback=()=>Ee("'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"screenOrientation")||(i.screenOrientation=()=>Ee("'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillOrientationChangeEventData")||(i.fillOrientationChangeEventData=()=>Ee("'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerOrientationChangeEventCallback")||(i.registerOrientationChangeEventCallback=()=>Ee("'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillFullscreenChangeEventData")||(i.fillFullscreenChangeEventData=()=>Ee("'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerFullscreenChangeEventCallback")||(i.registerFullscreenChangeEventCallback=()=>Ee("'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerRestoreOldStyle")||(i.registerRestoreOldStyle=()=>Ee("'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"hideEverythingExceptGivenElement")||(i.hideEverythingExceptGivenElement=()=>Ee("'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"restoreHiddenElements")||(i.restoreHiddenElements=()=>Ee("'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setLetterbox")||(i.setLetterbox=()=>Ee("'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"currentFullscreenStrategy")||(i.currentFullscreenStrategy=()=>Ee("'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"restoreOldWindowedStyle")||(i.restoreOldWindowedStyle=()=>Ee("'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"softFullscreenResizeWebGLRenderTarget")||(i.softFullscreenResizeWebGLRenderTarget=()=>Ee("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"doRequestFullscreen")||(i.doRequestFullscreen=()=>Ee("'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillPointerlockChangeEventData")||(i.fillPointerlockChangeEventData=()=>Ee("'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerPointerlockChangeEventCallback")||(i.registerPointerlockChangeEventCallback=()=>Ee("'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerPointerlockErrorEventCallback")||(i.registerPointerlockErrorEventCallback=()=>Ee("'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"requestPointerLock")||(i.requestPointerLock=()=>Ee("'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillVisibilityChangeEventData")||(i.fillVisibilityChangeEventData=()=>Ee("'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerVisibilityChangeEventCallback")||(i.registerVisibilityChangeEventCallback=()=>Ee("'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerTouchEventCallback")||(i.registerTouchEventCallback=()=>Ee("'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillGamepadEventData")||(i.fillGamepadEventData=()=>Ee("'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerGamepadEventCallback")||(i.registerGamepadEventCallback=()=>Ee("'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerBeforeUnloadEventCallback")||(i.registerBeforeUnloadEventCallback=()=>Ee("'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"fillBatteryEventData")||(i.fillBatteryEventData=()=>Ee("'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"battery")||(i.battery=()=>Ee("'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"registerBatteryEventCallback")||(i.registerBatteryEventCallback=()=>Ee("'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setCanvasElementSize")||(i.setCanvasElementSize=()=>Ee("'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getCanvasElementSize")||(i.getCanvasElementSize=()=>Ee("'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"demangle")||(i.demangle=()=>Ee("'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"demangleAll")||(i.demangleAll=()=>Ee("'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"jsStackTrace")||(i.jsStackTrace=()=>Ee("'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stackTrace")||(i.stackTrace=()=>Ee("'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getEnvStrings")||(i.getEnvStrings=()=>Ee("'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"checkWasiClock")||(i.checkWasiClock=()=>Ee("'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeI53ToI64")||(i.writeI53ToI64=()=>Ee("'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeI53ToI64Clamped")||(i.writeI53ToI64Clamped=()=>Ee("'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeI53ToI64Signaling")||(i.writeI53ToI64Signaling=()=>Ee("'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeI53ToU64Clamped")||(i.writeI53ToU64Clamped=()=>Ee("'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"writeI53ToU64Signaling")||(i.writeI53ToU64Signaling=()=>Ee("'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"readI53FromI64")||(i.readI53FromI64=()=>Ee("'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"readI53FromU64")||(i.readI53FromU64=()=>Ee("'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"convertI32PairToI53")||(i.convertI32PairToI53=()=>Ee("'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"convertU32PairToI53")||(i.convertU32PairToI53=()=>Ee("'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setImmediateWrapped")||(i.setImmediateWrapped=()=>Ee("'setImmediateWrapped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"clearImmediateWrapped")||(i.clearImmediateWrapped=()=>Ee("'clearImmediateWrapped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"polyfillSetImmediate")||(i.polyfillSetImmediate=()=>Ee("'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"Browser")||(i.Browser=()=>Ee("'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"funcWrappers")||(i.funcWrappers=()=>Ee("'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"getFuncWrapper")||(i.getFuncWrapper=()=>Ee("'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"setMainLoop")||(i.setMainLoop=()=>Ee("'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"wget")||(i.wget=()=>Ee("'wget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"FS")||(i.FS=()=>Ee("'FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"MEMFS")||(i.MEMFS=()=>Ee("'MEMFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"TTY")||(i.TTY=()=>Ee("'TTY' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"PIPEFS")||(i.PIPEFS=()=>Ee("'PIPEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"SOCKFS")||(i.SOCKFS=()=>Ee("'SOCKFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"_setNetworkCallback")||(i._setNetworkCallback=()=>Ee("'_setNetworkCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"warnOnce")||(i.warnOnce=()=>Ee("'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stackSave")||(i.stackSave=()=>Ee("'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stackRestore")||(i.stackRestore=()=>Ee("'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stackAlloc")||(i.stackAlloc=()=>Ee("'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"AsciiToString")||(i.AsciiToString=()=>Ee("'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stringToAscii")||(i.stringToAscii=()=>Ee("'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"UTF16ToString")||(i.UTF16ToString=()=>Ee("'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stringToUTF16")||(i.stringToUTF16=()=>Ee("'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"lengthBytesUTF16")||(i.lengthBytesUTF16=()=>Ee("'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"UTF32ToString")||(i.UTF32ToString=()=>Ee("'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"stringToUTF32")||(i.stringToUTF32=()=>Ee("'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"lengthBytesUTF32")||(i.lengthBytesUTF32=()=>Ee("'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"allocateUTF8")||(i.allocateUTF8=()=>Ee("'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),Object.getOwnPropertyDescriptor(i,"allocateUTF8OnStack")||(i.allocateUTF8OnStack=()=>Ee("'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")),i.writeStackCookie=J,i.checkStackCookie=$,Object.getOwnPropertyDescriptor(i,"ALLOC_NORMAL")||Object.defineProperty(i,"ALLOC_NORMAL",{configurable:!0,get:function(){Ee("'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}}),Object.getOwnPropertyDescriptor(i,"ALLOC_STACK")||Object.defineProperty(i,"ALLOC_STACK",{configurable:!0,get:function(){Ee("'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)")}}),se=function e(){xe||Ve(),xe||(se=e)},i.run=Ve,i.preInit)for("function"==typeof i.preInit&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return Ve(),e.ready});e.exports=n},727:e=>{const t=[{CRYPTO_PUBLICKEYBYTES:896,CRYPTO_SECRETKEYBYTES:2096,CRYPTO_BYTES:1387},{CRYPTO_PUBLICKEYBYTES:1184,CRYPTO_SECRETKEYBYTES:2800,CRYPTO_BYTES:2044},{CRYPTO_PUBLICKEYBYTES:1472,CRYPTO_SECRETKEYBYTES:3504,CRYPTO_BYTES:2701},{CRYPTO_PUBLICKEYBYTES:1760,CRYPTO_SECRETKEYBYTES:3856,CRYPTO_BYTES:3366}];e.exports={DILITHIUM_PARAMS:t,generateKeys:function(e,r,o){if(r<0||r>3)return-1;const n=o?o.length:0,i=o?e._malloc(n):0;o&&e.HEAPU8.set(new Uint8Array(o),i);const a=t[r].CRYPTO_SECRETKEYBYTES,s=t[r].CRYPTO_PUBLICKEYBYTES,d=e._malloc(s),c=e._malloc(a),l=e.ccall("dilithium_keygen","number",["number","number","number","number","number"],[d,c,r,i,n]);let p,E;return 0===l&&(p=new Uint8Array(e.HEAPU8.subarray(d,d+s)),E=new Uint8Array(e.HEAPU8.subarray(c,c+a))),i&&e._free(i),e._free(d),e._free(c),{result:l,publicKey:p,privateKey:E}},sign:function(e,r,o,n){if(n<0||n>3)throw new Error("Invalid Dilithium kind");const i=t[n],a=i.CRYPTO_BYTES,s=r.length,d=e._malloc(s);e.HEAPU8.set(new Uint8Array(r),d);const c=o.length;if(c!==i.CRYPTO_SECRETKEYBYTES)throw new Error(`Invalid private key size. Expected: ${i.CRYPTO_SECRETKEYBYTES}, Provided: ${c}`);const l=e._malloc(c);e.HEAPU8.set(new Uint8Array(o),l);const p=a+s,E=e._malloc(p),u=e._malloc(4);e.setValue(u,p,"i32");const f=e.ccall("dilithium_sign","number",["number","number","number","number","number","number","number"],[E,u,d,s,l,c,n]),h=e.getValue(u,"i32"),O=new Uint8Array(e.HEAPU8.buffer,E,h),m=new Uint8Array(O);return e._free(d),e._free(l),e._free(E),e._free(u),{result:f,signature:m,signatureLength:h}},verify:function(e,r,o,n,i){console.log("inside verify for kind",i);const a=t[i],s=a.CRYPTO_BYTES+o.length,d=a.CRYPTO_PUBLICKEYBYTES;if(console.log("inside verify expectedPublicKeySize",d),r.length!==s)throw new Error(`Invalid signature size. Expected ${s}, got ${r.length}`);if(n.length!==d)throw new Error(`Invalid public key size. Expected ${d}, got ${n.length}`);const c=e._malloc(s),l=e._malloc(o.length),p=e._malloc(d);e.HEAPU8.set(new Uint8Array(r),c),e.HEAPU8.set(new Uint8Array(o),l),e.HEAPU8.set(new Uint8Array(n),p);try{return{result:e.ccall("dilithium_verify","number",["number","number","number","bigint","number","number","number"],[c,s,l,BigInt(o.length),p,d,i]),signatureLength:r.length,expectedSignatureSize:s,messageLength:o.length,publicKeyLength:n.length,expectedPublicKeySize:d,kind:i}}finally{e._free(c),e._free(l),e._free(p)}}}},349:()=>{},175:()=>{},507:()=>{}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var i=t[o]={exports:{}};return e[o](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{"use strict";r.r(o),r.d(o,{createDilithium:()=>i});var e=r(944),t=r.n(e),n=r(727);const i=()=>async function(){console.log("fetching wasm from /node_modules/dilithium-js/dilithium.wasm");const e=await fetch("/node_modules/dilithium-js/dilithium.wasm");return await e.arrayBuffer()}().then((e=>t()({wasmBinary:e,locateFile:e=>e.endsWith(".wasm")?"/node_modules/dilithium-js/dilithium.wasm":e}))).then((e=>({generateKeys:(t,r)=>(0,n.generateKeys)(e,t,r),sign:(t,r,o)=>(0,n.sign)(e,t,r,o),verify:(t,r,o,i)=>(0,n.verify)(e,t,r,o,i),DILITHIUM_PARAMS:n.DILITHIUM_PARAMS})))})(),o})()));
|
package/package.json
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"name": "dilithium-crystals-js",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"main": "src/node/index.js",
|
5
|
+
"browser": "dist/dilithium.min.js",
|
6
|
+
"files": [
|
7
|
+
"src",
|
8
|
+
"dist",
|
9
|
+
"dilithium.wasm",
|
10
|
+
"dilithium.js"
|
11
|
+
],
|
12
|
+
"scripts": {
|
13
|
+
"build": "webpack"
|
14
|
+
},
|
15
|
+
"keywords": [
|
16
|
+
"dilithium",
|
17
|
+
"post-quantum",
|
18
|
+
"cryptography"
|
19
|
+
],
|
20
|
+
"author": "Miloš Mirković",
|
21
|
+
"license": "ISC",
|
22
|
+
"description": "Dilithium post-quantum cryptography implementation for Node.js and browsers",
|
23
|
+
"devDependencies": {
|
24
|
+
"terser-webpack-plugin": "^5.3.10",
|
25
|
+
"webpack": "^5.93.0",
|
26
|
+
"webpack-cli": "^5.1.4"
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import dilithiumFactory from "../../dilithium.js";
|
2
|
+
import { DILITHIUM_PARAMS, generateKeys, sign, verify } from "../common";
|
3
|
+
|
4
|
+
// Function to fetch the WebAssembly file
|
5
|
+
async function fetchWasm() {
|
6
|
+
console.log(`fetching wasm from /node_modules/dilithium-js/dilithium.wasm`);
|
7
|
+
const response = await fetch("/node_modules/dilithium-js/dilithium.wasm");
|
8
|
+
return await response.arrayBuffer();
|
9
|
+
}
|
10
|
+
|
11
|
+
// Create the Dilithium object
|
12
|
+
const createDilithium = () =>
|
13
|
+
fetchWasm()
|
14
|
+
.then((wasmBinary) =>
|
15
|
+
dilithiumFactory({
|
16
|
+
wasmBinary,
|
17
|
+
locateFile: (path) => {
|
18
|
+
if (path.endsWith(".wasm")) {
|
19
|
+
return "/node_modules/dilithium-js/dilithium.wasm";
|
20
|
+
}
|
21
|
+
return path;
|
22
|
+
},
|
23
|
+
})
|
24
|
+
)
|
25
|
+
.then((dilithium) => ({
|
26
|
+
generateKeys: (kind, seed) => generateKeys(dilithium, kind, seed),
|
27
|
+
sign: (message, privateKey, kind) =>
|
28
|
+
sign(dilithium, message, privateKey, kind),
|
29
|
+
verify: (signature, message, publicKey, kind) =>
|
30
|
+
verify(dilithium, signature, message, publicKey, kind),
|
31
|
+
DILITHIUM_PARAMS,
|
32
|
+
}));
|
33
|
+
|
34
|
+
export { createDilithium };
|
package/src/common.js
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
const DILITHIUM_PARAMS = [
|
2
|
+
{
|
3
|
+
CRYPTO_PUBLICKEYBYTES: 896,
|
4
|
+
CRYPTO_SECRETKEYBYTES: 2096,
|
5
|
+
CRYPTO_BYTES: 1387,
|
6
|
+
},
|
7
|
+
{
|
8
|
+
CRYPTO_PUBLICKEYBYTES: 1184,
|
9
|
+
CRYPTO_SECRETKEYBYTES: 2800,
|
10
|
+
CRYPTO_BYTES: 2044,
|
11
|
+
},
|
12
|
+
{
|
13
|
+
CRYPTO_PUBLICKEYBYTES: 1472,
|
14
|
+
CRYPTO_SECRETKEYBYTES: 3504,
|
15
|
+
CRYPTO_BYTES: 2701,
|
16
|
+
},
|
17
|
+
{
|
18
|
+
CRYPTO_PUBLICKEYBYTES: 1760,
|
19
|
+
CRYPTO_SECRETKEYBYTES: 3856,
|
20
|
+
CRYPTO_BYTES: 3366,
|
21
|
+
},
|
22
|
+
];
|
23
|
+
|
24
|
+
function generateKeys(dilithium, kind, seed) {
|
25
|
+
if (kind < 0 || kind > 3) {
|
26
|
+
return -1;
|
27
|
+
}
|
28
|
+
|
29
|
+
const seedSize = seed ? seed.length : 0;
|
30
|
+
const seedPtr = seed ? dilithium._malloc(seedSize) : 0;
|
31
|
+
if (seed) {
|
32
|
+
dilithium.HEAPU8.set(new Uint8Array(seed), seedPtr);
|
33
|
+
}
|
34
|
+
|
35
|
+
const privateKeySize = DILITHIUM_PARAMS[kind].CRYPTO_SECRETKEYBYTES;
|
36
|
+
const publicKeySize = DILITHIUM_PARAMS[kind].CRYPTO_PUBLICKEYBYTES;
|
37
|
+
|
38
|
+
const publicKeyPtr = dilithium._malloc(publicKeySize);
|
39
|
+
const privateKeyPtr = dilithium._malloc(privateKeySize);
|
40
|
+
|
41
|
+
const result = dilithium.ccall(
|
42
|
+
"dilithium_keygen",
|
43
|
+
"number",
|
44
|
+
["number", "number", "number", "number", "number"],
|
45
|
+
[publicKeyPtr, privateKeyPtr, kind, seedPtr, seedSize]
|
46
|
+
);
|
47
|
+
|
48
|
+
let publicKey, privateKey;
|
49
|
+
if (result === 0) {
|
50
|
+
publicKey = new Uint8Array(
|
51
|
+
dilithium.HEAPU8.subarray(publicKeyPtr, publicKeyPtr + publicKeySize)
|
52
|
+
);
|
53
|
+
privateKey = new Uint8Array(
|
54
|
+
dilithium.HEAPU8.subarray(privateKeyPtr, privateKeyPtr + privateKeySize)
|
55
|
+
);
|
56
|
+
}
|
57
|
+
|
58
|
+
if (seedPtr) dilithium._free(seedPtr);
|
59
|
+
dilithium._free(publicKeyPtr);
|
60
|
+
dilithium._free(privateKeyPtr);
|
61
|
+
|
62
|
+
return { result, publicKey, privateKey };
|
63
|
+
}
|
64
|
+
function sign(dilithium, message, privateKey, kind) {
|
65
|
+
if (kind < 0 || kind > 3) {
|
66
|
+
throw new Error("Invalid Dilithium kind");
|
67
|
+
}
|
68
|
+
|
69
|
+
const params = DILITHIUM_PARAMS[kind];
|
70
|
+
const cryptoBytes = params.CRYPTO_BYTES;
|
71
|
+
|
72
|
+
// Allocate memory for inputs
|
73
|
+
const messageLength = message.length;
|
74
|
+
const messagePtr = dilithium._malloc(messageLength);
|
75
|
+
dilithium.HEAPU8.set(new Uint8Array(message), messagePtr);
|
76
|
+
|
77
|
+
const privateKeySize = privateKey.length;
|
78
|
+
if (privateKeySize !== params.CRYPTO_SECRETKEYBYTES) {
|
79
|
+
throw new Error(
|
80
|
+
`Invalid private key size. Expected: ${params.CRYPTO_SECRETKEYBYTES}, Provided: ${privateKeySize}`
|
81
|
+
);
|
82
|
+
}
|
83
|
+
const privateKeyPtr = dilithium._malloc(privateKeySize);
|
84
|
+
dilithium.HEAPU8.set(new Uint8Array(privateKey), privateKeyPtr);
|
85
|
+
|
86
|
+
// Allocate memory for outputs
|
87
|
+
const maxSignatureLength = cryptoBytes + messageLength;
|
88
|
+
const signaturePtr = dilithium._malloc(maxSignatureLength);
|
89
|
+
const signatureLengthPtr = dilithium._malloc(4); // size_t is 4 bytes
|
90
|
+
dilithium.setValue(signatureLengthPtr, maxSignatureLength, "i32");
|
91
|
+
|
92
|
+
// Call the C function
|
93
|
+
const result = dilithium.ccall(
|
94
|
+
"dilithium_sign",
|
95
|
+
"number",
|
96
|
+
["number", "number", "number", "number", "number", "number", "number"],
|
97
|
+
[
|
98
|
+
signaturePtr,
|
99
|
+
signatureLengthPtr,
|
100
|
+
messagePtr,
|
101
|
+
messageLength,
|
102
|
+
privateKeyPtr,
|
103
|
+
privateKeySize,
|
104
|
+
kind,
|
105
|
+
]
|
106
|
+
);
|
107
|
+
|
108
|
+
// Get the actual signature length
|
109
|
+
const actualSignatureLength = dilithium.getValue(signatureLengthPtr, "i32");
|
110
|
+
|
111
|
+
// Copy the signature data
|
112
|
+
const signatureData = new Uint8Array(
|
113
|
+
dilithium.HEAPU8.buffer,
|
114
|
+
signaturePtr,
|
115
|
+
actualSignatureLength
|
116
|
+
);
|
117
|
+
const signature = new Uint8Array(signatureData);
|
118
|
+
|
119
|
+
// Free allocated memory
|
120
|
+
dilithium._free(messagePtr);
|
121
|
+
dilithium._free(privateKeyPtr);
|
122
|
+
dilithium._free(signaturePtr);
|
123
|
+
dilithium._free(signatureLengthPtr);
|
124
|
+
|
125
|
+
return { result, signature, signatureLength: actualSignatureLength };
|
126
|
+
}
|
127
|
+
|
128
|
+
function verify(dilithium, signature, message, publicKey, kind) {
|
129
|
+
console.log("inside verify for kind", kind);
|
130
|
+
// Determine the expected sizes based on the Dilithium kind
|
131
|
+
const params = DILITHIUM_PARAMS[kind];
|
132
|
+
const expectedSignatureSize = params.CRYPTO_BYTES + message.length;
|
133
|
+
const expectedPublicKeySize = params.CRYPTO_PUBLICKEYBYTES;
|
134
|
+
console.log("inside verify expectedPublicKeySize", expectedPublicKeySize);
|
135
|
+
|
136
|
+
// Validate input sizes
|
137
|
+
if (signature.length !== expectedSignatureSize) {
|
138
|
+
throw new Error(
|
139
|
+
`Invalid signature size. Expected ${expectedSignatureSize}, got ${signature.length}`
|
140
|
+
);
|
141
|
+
}
|
142
|
+
if (publicKey.length !== expectedPublicKeySize) {
|
143
|
+
throw new Error(
|
144
|
+
`Invalid public key size. Expected ${expectedPublicKeySize}, got ${publicKey.length}`
|
145
|
+
);
|
146
|
+
}
|
147
|
+
|
148
|
+
// Allocate memory for the signature, message, and public key
|
149
|
+
const signaturePtr = dilithium._malloc(expectedSignatureSize);
|
150
|
+
const messagePtr = dilithium._malloc(message.length);
|
151
|
+
const publicKeyPtr = dilithium._malloc(expectedPublicKeySize);
|
152
|
+
|
153
|
+
// Copy the data to the allocated memory
|
154
|
+
dilithium.HEAPU8.set(new Uint8Array(signature), signaturePtr);
|
155
|
+
dilithium.HEAPU8.set(new Uint8Array(message), messagePtr);
|
156
|
+
dilithium.HEAPU8.set(new Uint8Array(publicKey), publicKeyPtr);
|
157
|
+
|
158
|
+
try {
|
159
|
+
const result = dilithium.ccall(
|
160
|
+
"dilithium_verify",
|
161
|
+
"number",
|
162
|
+
["number", "number", "number", "bigint", "number", "number", "number"],
|
163
|
+
[
|
164
|
+
signaturePtr,
|
165
|
+
expectedSignatureSize,
|
166
|
+
messagePtr,
|
167
|
+
BigInt(message.length),
|
168
|
+
publicKeyPtr,
|
169
|
+
expectedPublicKeySize,
|
170
|
+
kind,
|
171
|
+
]
|
172
|
+
);
|
173
|
+
|
174
|
+
return {
|
175
|
+
result,
|
176
|
+
signatureLength: signature.length,
|
177
|
+
expectedSignatureSize,
|
178
|
+
messageLength: message.length,
|
179
|
+
publicKeyLength: publicKey.length,
|
180
|
+
expectedPublicKeySize,
|
181
|
+
kind,
|
182
|
+
};
|
183
|
+
} finally {
|
184
|
+
// Free the allocated memory
|
185
|
+
dilithium._free(signaturePtr);
|
186
|
+
dilithium._free(messagePtr);
|
187
|
+
dilithium._free(publicKeyPtr);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
module.exports = {
|
192
|
+
DILITHIUM_PARAMS,
|
193
|
+
generateKeys,
|
194
|
+
sign,
|
195
|
+
verify,
|
196
|
+
};
|
@@ -0,0 +1,32 @@
|
|
1
|
+
const fs = require("fs");
|
2
|
+
const path = require("path");
|
3
|
+
const dilithiumFactory = require("../../dilithium.js");
|
4
|
+
const { DILITHIUM_PARAMS, generateKeys, sign, verify } = require("../common");
|
5
|
+
|
6
|
+
// Read the WebAssembly file
|
7
|
+
const wasmPath = path.join(__dirname, "../../dilithium.wasm");
|
8
|
+
const wasmBinary = fs.readFileSync(wasmPath);
|
9
|
+
|
10
|
+
// Define a custom locateFile function for Node.js
|
11
|
+
const nodeLocateFile = (filename) => {
|
12
|
+
if (filename.endsWith(".wasm")) {
|
13
|
+
return wasmPath;
|
14
|
+
}
|
15
|
+
return filename;
|
16
|
+
};
|
17
|
+
|
18
|
+
// Initialize the Dilithium module with the WebAssembly binary
|
19
|
+
const dilithiumModule = dilithiumFactory({
|
20
|
+
wasmBinary,
|
21
|
+
locateFile: nodeLocateFile,
|
22
|
+
});
|
23
|
+
|
24
|
+
module.exports = dilithiumModule.then((dilithium) => ({
|
25
|
+
generateKeys: (kind, seed) => generateKeys(dilithium, kind, seed),
|
26
|
+
sign: (message, privateKey, kind) =>
|
27
|
+
sign(dilithium, message, privateKey, kind),
|
28
|
+
verify: (signature, message, publicKey, kind) =>
|
29
|
+
verify(dilithium, signature, message, publicKey, kind),
|
30
|
+
DILITHIUM_PARAMS,
|
31
|
+
HEAP8: dilithium.HEAP8, // Add this line
|
32
|
+
}));
|