>4;if(l>0){for(var c=l+240;255===c;)l+=c=e[r++];for(var u=r+l;ri)return-(r-2);var f=15&a;for(c=f+240;255===c;)f+=c=e[r++];var h=i-d;for(u=i+f+4;ir?0:e+e/255+16|0},s.compress=function(e,t,n,u){return l.set(c),function(e,t,n,c,u){var d=c,f=u-c,h=0;if(e.length>=r)throw new Error("input too large");if(e.length>12){var p=s.compressBound(e.length);if(f>>16,v=l[g]-1;if(l[g]=n+1,v<0||n-v>>>16>0||(e[v+3]<<8|e[v+2])!=w||(e[v+1]<<8|e[v])!=b)n+=m++>>6;else{m=67;var x=n-h,_=n-v;v+=4;for(var k=n+=4;n=i){t[d++]=240+P;for(var j=x-i;j>254;j-=255)t[d++]=255;t[d++]=j}else t[d++]=(x<<4)+P;for(var S=0;S>8,k>=o){for(k-=o;k>=255;)k-=255,t[d++]=255;t[d++]=k}h=n}}}if(0==h)return 0;if((x=e.length-h)>=i){t[d++]=240;for(var M=x-i;M>254;M-=255)t[d++]=255;t[d++]=M}else t[d++]=x<<4;n=h;for(;n{};panicMessages=[];connectPromise=null;connectResolve=()=>{};connectReject=()=>{};disconnectPromise=null;disconnectResolve=()=>{};asyncifyStatsPromise=null;asyncifyStatsResolve=()=>{};fsTreePromise=null;fsTreeResolve=()=>{};fsGetFilePromise={};fsGetFileResolve={};fsGetFileParts={};fsDeleteFilePromise=null;fsDeleteFileResolve=()=>{};dataChunkPromise={};dataChunkResolve={};networkId=0;network={};sockdrives={};options;constructor(e,t,n,s){this.options=s,this.init=e,this.transport=t,this.ready=n,this.configPromise=new Promise((e=>this.configResolve=e)),this.transport.initMessageHandler(this.onServerMessage.bind(this))}sendClientMessage(e,t,n){(t=t||{}).sessionId=t.sessionId||this.transport.sessionId,this.transport.sendMessageToServer(e,t,n)}onServerMessage(e,t){if(!(void 0===e||e.length<3||"w"!==e[0]||"s"!==e[1]||"-"!==e[2])&&void 0!==t&&t.sessionId===this.transport.sessionId)switch(e){case"ws-ready":{const e=async()=>{if(!this.init||0===this.init.length)return;const e=new TextEncoder,t=async(e,t,n)=>{await this.sendDataChunk({type:e,name:t,data:n.buffer}),await this.sendDataChunk({type:e,name:t,data:null})};let n=0;for(const s of this.init)if(ArrayBuffer.isView(s))await t("bundle",n+"",s),n++;else if("string"==typeof s)await t("file",".jsdos/dosbox.conf",e.encode(s));else{const n=s,r=s;void 0!==r.jsdosConf?.version?(await t("file",".jsdos/dosbox.conf",e.encode(r.dosboxConf)),await t("file",".jsdos/jsdos.json",e.encode(JSON.stringify(r.jsdosConf,null,2)))):void 0!==n.path?await t("file",n.path,n.contents):console.error("Unknown init part",s)}};e().then((()=>{this.sendClientMessage("wc-run",{token:this.options.token})})).catch((e=>{this.onErr("panic","Can't send bundles to backend: "+e.message),console.error(e)})).finally((()=>{delete this.init}))}break;case"ws-server-ready":this.panicMessages.length>0?(void 0!==this.transport.exit&&this.transport.exit(),this.ready(new Error(JSON.stringify(this.panicMessages)))):this.ready(null),delete this.ready;break;case"ws-frame-set-size":this.onFrameSize(t.width,t.height);break;case"ws-update-lines":this.onFrameLines(t.lines,t.rgba);break;case"ws-exit":this.onExit();break;case"ws-log":this.onLog(t.tag,t.message);break;case"ws-warn":this.onWarn(t.tag,t.message);break;case"ws-err":this.onErr(t.tag,t.message);break;case"ws-stdout":this.onStdout(t.message);break;case"ws-persist":this.onPersist(t.bundle??t.sockdrives??null);break;case"ws-sound-init":this.onSoundInit(t.freq);break;case"ws-sound-push":this.onSoundPush(t.samples);break;case"ws-config":this.onConfig({dosboxConf:this.utf8Decoder.decode(t.dosboxConf),jsdosConf:JSON.parse(t.jsdosConf)});break;case"ws-sync-sleep":this.sendClientMessage("wc-sync-sleep",t);break;case"ws-connected":this.connectResolve(),this.connectPromise=null,this.connectResolve=()=>{},this.connectReject=()=>{},this.eventsImpl.fireNetworkConnected(t.networkType,t.address);break;case"ws-disconnected":null!==this.connectPromise?(this.connectReject(),this.connectPromise=null,this.connectResolve=()=>{},this.connectReject=()=>{}):(this.disconnectResolve(),this.disconnectPromise=null,this.disconnectResolve=()=>{}),this.eventsImpl.fireNetworkDisconnected(t.networkType);break;case"ws-extract-progress":this.options.onExtractProgress&&this.options.onExtractProgress(t.index,t.file,t.extracted,t.count);break;case"ws-asyncify-stats":t.driveIo=[];for(const e of Object.values(this.sockdrives))t.driveIo.push({url:e.info.url,preload:e.info.preloadSizeInBytes,total:e.info.sizeInBytes,read:e.info.readInBytes,write:e.info.writeInBytes});this.asyncifyStatsResolve(t),this.asyncifyStatsResolve=()=>{},this.asyncifyStatsPromise=null;break;case"ws-fs-tree":this.fsTreeResolve(t.fsTree),this.fsTreeResolve=()=>{},this.fsTreePromise=null;break;case"ws-fs-delete-file":this.fsDeleteFileResolve(t.deleted),this.fsDeleteFileResolve=()=>{},this.fsDeleteFilePromise=null;break;case"ws-send-data-chunk":{const e=t.chunk,n=this.dataChunkKey(e);if("ok"===e.type)void 0!==this.dataChunkPromise[n]&&(this.dataChunkResolve[n](),delete this.dataChunkPromise[n],delete this.dataChunkResolve[n]);else if("file"===e.type)if(null===e.data){const t=this.mergeChunks(this.fsGetFileParts[e.name]);this.fsGetFileResolve[e.name](t),delete this.fsGetFilePromise[e.name],delete this.fsGetFileResolve[e.name]}else this.fsGetFileParts[e.name].push(new Uint8Array(e.data));else console.log("Unknown chunk type:",e.type)}break;case"ws-net-connect":{this.networkId+=1;const e=this.networkId,n=new WebSocket(t.address);n.binaryType="arraybuffer",n.addEventListener("error",(e=>{console.error("Can't connect to",t.address),this.sendClientMessage("wc-net-connected",{networkId:-1})})),n.addEventListener("open",(()=>{this.network[e]=n,this.sendClientMessage("wc-net-connected",{networkId:e})})),n.addEventListener("message",(t=>{this.sendClientMessage("wc-net-received",{networkId:e,data:t.data},[t.data])}))}break;case"ws-net-send":{const e=this.network[t.networkId];e&&e.send(t.data)}break;case"ws-net-disconnect":{const e=this.network[t.networkId];delete this.network[t.networkId],e&&e.close()}break;case"ws-sockdrive-open":{const e=t.handle;let n=t.url.replace("wss://sockdrive.js-dos.com:8001/dos.zone/","https://br.cdn.dos.zone/sockdrive-qcow2/dos.zone-").replace("wss://sockdrive.js-dos.com:8001/system/","https://br.cdn.dos.zone/sockdrive-qcow2/system-");n.endsWith("/")&&(n=n.slice(0,-1)),(0,r.sockdrive)(n,((t,n)=>{this.sendClientMessage("wc-sockdrive-new-range",{handle:e,range:t,buffer:n})})).then((n=>{this.sockdrives[t.handle]=n;const s=Array.from(n.info.dropped_ranges);this.sendClientMessage("wc-sockdrive-opened",{handle:e,size:n.info.size,heads:n.info.heads,cylinders:n.info.cylinders,sectors:n.info.sectors,sectorSize:n.info.sector_size,aheadRange:n.info.ahead_read,emptyRangesCount:n.info.dropped_ranges.length,emptyRanges:s})})).catch((t=>{this.onErr("panic","Can't open sockdrive("+n+"): "+t.message),console.error(t),this.sendClientMessage("wc-sockdrive-opened",{handle:e,size:0,heads:0,cylinders:0,sectors:0,sectorSize:0,aheadRange:0,emptyRangesCount:0,emptyRanges:[]})}))}break;case"ws-sockdrive-ready":this.sockdrives[t.handle].ready();break;case"ws-sockdrive-load-range":this.sockdrives[t.handle].readRangeAsync(t.range);break;case"ws-sockdrive-write-sector":this.sockdrives[t.handle].write(t.sector,t.data);break;case"ws-sockdrive-close":delete this.sockdrives[t.handle];break;case"ws-unload":this.eventsImpl.fireUnload().finally((()=>{this.sendClientMessage("wc-unload")}));break;default:console.log("Unknown server message (ws):",e)}}onConfig(e){this.configResolve(e)}onFrameSize(e,t){this.frameWidth===e&&this.frameHeight===t||(this.frameWidth=e,this.frameHeight=t,this.rgb=new Uint8Array(e*t*3),this.eventsImpl.fireFrameSize(e,t))}onFrameLines(e,t){for(const t of e)this.rgb.set(t.heapu8,t.start*this.frameWidth*3);this.eventsImpl.fireFrame(this.rgb,this.rgba)}onSoundInit(e){this.freq=e}onSoundPush(e){this.eventsImpl.fireSoundPush(e)}onLog(e,t){this.eventsImpl.fireMessage("log","["+e+"]"+t)}onWarn(e,t){this.eventsImpl.fireMessage("warn","["+e+"]"+t)}onErr(e,t){"panic"===e&&(this.panicMessages.push(t),console.error("["+e+"]"+t)),this.eventsImpl.fireMessage("error","["+e+"]"+t)}onStdout(e){this.eventsImpl.fireStdout(e)}config(){return this.configPromise}width(){return this.frameWidth}height(){return this.frameHeight}soundFrequency(){return this.freq}screenshot(){if(null!==this.rgb||null!==this.rgba){const e=new Uint8ClampedArray(this.frameWidth*this.frameHeight*4),t=null!==this.rgb?this.rgb:this.rgba;let n=0,s=0;for(;sthis.addKey(t,!0,e))),n.forEach((t=>this.addKey(t,!1,e+16)))}sendKeyEvent(e,t){this.addKey(e,t,Date.now()-this.startedAt)}addKey(e,t,n){!0===this.keyMatrix[e]!==t&&(this.keyMatrix[e]=t,this.sendClientMessage("wc-add-key",{key:e,pressed:t,timeMs:n}))}sendMouseMotion(e,t){this.sendClientMessage("wc-mouse-move",{x:e,y:t,relative:!1,timeMs:Date.now()-this.startedAt})}sendMouseRelativeMotion(e,t){this.sendClientMessage("wc-mouse-move",{x:e,y:t,relative:!0,timeMs:Date.now()-this.startedAt})}sendMouseButton(e,t){this.sendClientMessage("wc-mouse-button",{button:e,pressed:t,timeMs:Date.now()-this.startedAt})}sendMouseSync(){this.sendClientMessage("wc-mouse-sync",{timeMs:Date.now()-this.startedAt})}sendBackendEvent(e){this.sendClientMessage("wc-backend-event",{json:JSON.stringify(e)})}async persist(e){const t=e??!0;if(void 0!==this.persistPromise)return this.persistPromise;const n=await this.persistSockdrives();if(null!==n&&t)return Promise.resolve(n);const s=new Promise((e=>{this.persistResolve=e}));return this.persistPromise=s,this.sendClientMessage("wc-pack-fs-to-bundle",{onlyChanges:t}),s}onPersist(e){this.persistResolve&&(this.persistResolve(e),delete this.persistPromise,delete this.persistResolve)}pause(){this.sendClientMessage("wc-pause")}resume(){this.sendClientMessage("wc-resume")}mute(){this.sendClientMessage("wc-mute")}unmute(){this.sendClientMessage("wc-unmute")}exit(){if(this.exited)return Promise.resolve();if(void 0!==this.exitPromise)return this.exitPromise;this.exitPromise=new Promise((e=>this.exitResolve=e)),this.exitPromise.then((()=>{this.events().fireExit()})),this.resume();for(const e of Object.values(this.network))e.close();return this.network={},this.sendClientMessage("wc-exit"),this.exitPromise}onExit(){this.exited||(this.exited=!0,void 0!==this.transport.exit&&this.transport.exit(),this.exitResolve&&(this.exitResolve(),delete this.exitPromise,delete this.exitResolve))}events(){return this.eventsImpl}networkConnect(e,t){return null!==this.connectPromise||null!==this.disconnectPromise?Promise.reject(new Error("Already prefoming connection or disconnection...")):(this.connectPromise=new Promise(((n,s)=>{t.startsWith("wss://")||t.startsWith("ws://")||(t=("http:"===window.location.protocol?"ws://":"wss://")+t),this.connectResolve=n,this.connectReject=s,this.sendClientMessage("wc-connect",{networkType:e,address:t})})),this.connectPromise)}networkDisconnect(e){return null!==this.connectPromise||null!==this.disconnectPromise?Promise.reject(new Error("Already prefoming connection or disconnection...")):(this.disconnectPromise=new Promise((t=>{this.disconnectResolve=t,this.sendClientMessage("wc-disconnect",{networkType:e})})),this.disconnectPromise)}asyncifyStats(){if(null!==this.asyncifyStatsPromise)return this.asyncifyStatsPromise;const e=new Promise((e=>{this.asyncifyStatsResolve=e}));return this.asyncifyStatsPromise=e,this.sendClientMessage("wc-asyncify-stats",{}),e}fsTree(){if(null!==this.fsTreePromise)return this.fsTreePromise;const e=new Promise((e=>{this.fsTreeResolve=e}));return this.fsTreePromise=e,this.sendClientMessage("wc-fs-tree"),e}async fsReadFile(e){if(void 0!==this.fsGetFilePromise[e])throw new Error("fsGetFile should not be called twice for same file");const t=new Promise((t=>{this.fsGetFileResolve[e]=t}));return this.fsGetFilePromise[e]=t,this.fsGetFileParts[e]=[],this.sendClientMessage("wc-fs-get-file",{file:e}),t}async fsWriteFile(e,t){if(ArrayBuffer.isView(t))await this.sendDataChunk({type:"file",name:e,data:t.buffer});else{const n=t.getReader();for(;;){const t=await n.read();if(void 0!==t.value&&await this.sendDataChunk({type:"file",name:e,data:t.value.buffer}),t.done)break}}await this.sendDataChunk({type:"file",name:e,data:null})}async fsDeleteFile(e){if(null!==this.fsDeleteFilePromise)throw new Error("fsDeleteFile should not be called while previous one is not resolved");const t=new Promise((e=>{this.fsDeleteFileResolve=e}));return this.fsDeleteFilePromise=t,this.sendClientMessage("wc-fs-delete-file",{file:e}),t}async persistSockdrives(){if(0===Object.keys(this.sockdrives).length)return null;const e=[];for(const[t,n]of Object.entries(this.sockdrives)){const t=await n.persist();null!==t&&e.push({url:n.info.url,persist:t})}return{drives:e}}async sendDataChunk(e){if(null===e.data||e.data.byteLength<=o)return this.sendFullDataChunk(e);{let t=0;for(;t{this.dataChunkResolve[t]=e}));return this.dataChunkPromise[t]=n,this.sendClientMessage("wc-send-data-chunk",{chunk:e},null===e.data?void 0:[e.data]),n}dataChunkKey(e){return e.name}mergeChunks(e){if(1===e.length)return e[0];let t=0;for(const n of e)t+=n.byteLength;const n=new Uint8Array(t);t=0;for(const s of e)n.set(s,t),t+=s.byteLength;return n}}},{"../impl/ci-impl":72,"./sockdrive":80,"core-js/modules/es.typed-array.set.js":65}],79:[function(e,t,n){"use strict";e("core-js/modules/es.typed-array.set.js"),Object.defineProperty(n,"__esModule",{value:!0}),n.getStore=n.NoStore=n.WRITE_STORE=n.RAW_STORE=void 0,n.RAW_STORE="raw",n.WRITE_STORE="write";class s{owner="";close(){}put(e,t,n){return Promise.resolve()}get(e,t){return Promise.resolve(null)}keys(e){return Promise.resolve([])}each(e,t,n){return Promise.resolve()}}n.NoStore=s;class r{indexedDB;db=null;constructor(e,t,s){if(this.indexedDB="undefined"==typeof window?void 0:window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB,this.indexedDB)try{const r=this.indexedDB.open("sockdrive ("+e+")",1);r.onerror=()=>{s("Can't open cache database: "+r.error?.message)},r.onsuccess=()=>{this.db=r.result,t(this)},r.onupgradeneeded=()=>{try{this.db=r.result,this.db.onerror=()=>{s("Can't upgrade cache database")},this.db.createObjectStore(n.RAW_STORE).createIndex("range","",{multiEntry:!1}),this.db.createObjectStore(n.WRITE_STORE).createIndex("sector","",{multiEntry:!1})}catch(e){s("Can't upgrade cache database")}}}catch(e){s("Can't open cache database: "+e.message)}else s("IndexedDB is not supported on this host")}close(){null!==this.db&&(this.db.close(),this.db=null)}put(e,t,n){return new Promise((s=>{const r=this.db.transaction(n,"readwrite").objectStore(n).put(new Blob([t.buffer]),e);r.onerror=e=>{console.error(e),s()},r.onsuccess=()=>{s()}}))}get(e,t){return new Promise((n=>{const s=this.db.transaction(t,"readonly").objectStore(t).get(e);s.onerror=e=>{console.error(e),n(null)},s.onsuccess=()=>{s.result?s.result.arrayBuffer().then((e=>{n(new Uint8Array(e))})).catch((e=>{console.error(e),n(null)})):n(null)}}))}keys(e){return new Promise((t=>{if(null===this.db)return void t([]);const n=this.db.transaction(e,"readonly").objectStore(e).getAllKeys();n.onerror=e=>{console.error(e),t([])},n.onsuccess=e=>{n.result?t(n.result):t([])}}))}each(e,t,n){return new Promise((s=>{if(null===this.db)return void s();const r=this.db.transaction(t,"readonly").objectStore(t),o=async e=>new Promise(((t,n)=>{const s=r.get(e);s.onerror=e=>{n(e)},s.onsuccess=e=>{s.result.arrayBuffer().then((e=>{t(new Uint8Array(e))})).catch(n)}}));(async()=>{for(const t of e){const e=await o(t);n(t,e)}s()})().catch((e=>{console.error(e),s()}))}))}}n.getStore=function(e){return new Promise((t=>{new r(e,t,(e=>{console.error("Can't open IndexedDB cache",e),t(new s)}))}))}},{"core-js/modules/es.typed-array.set.js":65}],80:[function(e,t,n){"use strict";e("core-js/modules/es.typed-array.set.js"),Object.defineProperty(n,"__esModule",{value:!0}),n.sockdrive=void 0;const s=e("./sockdrive-store"),r=e("./mini-lz4");n.sockdrive=async function(e,t){const n=await(0,s.getStore)(e),o=await fetch(e+"/sockdrive.metaj"),i=await o.json();i.url=e,i.readInBytes=0,i.writeInBytes=0,void 0===i.small_ranges&&(i.small_ranges=[]);let a=new Map;const l=await n.get(0,s.WRITE_STORE);l&&(i.writeInBytes=l.length,a=x(l));const c=new Set;for(const e of await n.keys(s.RAW_STORE))c.add(e);if(void 0!==i.small_ranges.find((e=>!c.has(e)))){const t=new Uint8Array(await(await fetch(e+"/preload.raw")).arrayBuffer());for(let e=0;e=i.range_count)&&e.push(t);if(e.length>0){console.error("sockdrive-error: invalid ranges",e);for(const t of e)h.splice(h.indexOf(t),1)}}h.reverse();let m=h.length;for(let e=0;e0&&e.length<1;){const t=h.pop();u.has(t)||(u.add(t),e.push(w(t)))}await Promise.all(e),h.length>0&&g().catch(console.error)}function v(e){const t=new Map;for(const[n,s]of e.entries())s.forEach(((e,s)=>{t.set(s+n*i.ahead_read/i.sector_size,e)}));const n=i.sector_size+4,s=(0,r.compressBound)(n),o=new Uint8Array(n),a=new Uint32Array(o.buffer),l=new Uint8Array(s),c=[];let u=0;t.forEach(((e,t)=>{a[0]=t,o.set(e,4);const s=(0,r.compress)(o,l,0,l.length);s<=0||s>=o.length?(c.push(o.slice(0)),u+=n):(c.push(l.slice(0,s)),u+=s)}));const d=new Uint8Array(u+4*t.size+4);d[0]=t.size,d[1]=(65280&t.size)>>8,d[2]=(16711680&t.size)>>16,d[3]=(4278190080&t.size)>>24;let f=4;for(const e of c)d[f]=e.length,d[f+1]=(65280&e.length)>>8,d[f+2]=(16711680&e.length)>>16,d[f+3]=(4278190080&e.length)>>24,f+=4,d.set(e,f),f+=e.length;return d}function x(e){const t=new Map,n=255&e[0]|e[1]<<8&65280|e[2]<<16&16711680|e[3]<<24&4278190080,s=i.sector_size+4,o=new Uint8Array(s),a=new Uint32Array(o.buffer);let l=4;for(let c=0;c{if(0===a.size)return;const e=v(a),t=new Blob([e],{type:"application/octet-stream"}),n=URL.createObjectURL(t);console.log("Download serialized sectors:",n);const s=x(e);console.log("Comparing sectors and deserialized:"),console.log("Original sectors size:",a.size),console.log("Deserialized sectors size:",s.size),a.forEach(((e,t)=>{const n=s.get(t);n?e.forEach(((e,s)=>{const r=n.get(s);if(!r)return void console.error(`Sector ${s} missing in range ${t}`);e.length===r.length&&e.every(((e,t)=>e===r[t]))||(console.error(`Data mismatch in range ${t}, sector ${s}`),console.log("Original:",e),console.log("Deserialized:",r))})):console.error(`Range ${t} missing in deserialized data`)}))},{info:i,range:y,readRangeAsync:async e=>{u.has(e)||(u.add(e),w(e))},ready:()=>{g().catch(console.error)},write:(e,t)=>{const n=y(e);a.has(n)||a.set(n,new Map),a.get(n).set(e-n*i.ahead_read/i.sector_size,t)},persist:async()=>{const e=v(a);return e.byteLength>4?e:null}}}},{"./mini-lz4":77,"./sockdrive-store":79,"core-js/modules/es.typed-array.set.js":65}]},{},[70]);
+//# sourceMappingURL=emulators.js.map
diff --git a/public/madness/2026/doom/emulators/emulators.js.map b/public/madness/2026/doom/emulators/emulators.js.map
new file mode 100644
index 0000000..ee525d0
--- /dev/null
+++ b/public/madness/2026/doom/emulators/emulators.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/core-js/internals/a-callable.js","emulators.js","node_modules/core-js/internals/a-possible-prototype.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/array-buffer-basic-detection.js","node_modules/core-js/internals/array-buffer-view-core.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/correct-prototype-getter.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/define-built-in.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/document-all.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/engine-user-agent.js","node_modules/core-js/internals/engine-v8-version.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/function-uncurry-this-accessor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/global.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/math-trunc.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/object-get-prototype-of.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/object-set-prototype-of.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/to-offset.js","node_modules/core-js/internals/to-positive-integer.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/modules/es.typed-array.set.js","src/build.ts","src/dos/bundle/dos-bundle.ts","src/dos/dosbox/ts/direct.ts","src/dos/dosbox/ts/worker.ts","src/emulators.ts","src/http.ts","src/impl/ci-impl.ts","src/impl/emulators-impl.ts","src/impl/modules.ts","src/libzip/libzip.ts","src/protocol/messages-queue.ts","src/protocol/mini-lz4.ts","src/protocol/protocol.ts","src/protocol/sockdrive-store.ts","src/protocol/sockdrive.ts"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","module","isCallable","tryToString","$TypeError","TypeError","argument","$String","String","isObject","ArrayBuffer","DataView","NAME","Constructor","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","global","hasOwn","classof","createNonEnumerableProperty","defineBuiltIn","defineBuiltInAccessor","isPrototypeOf","getPrototypeOf","setPrototypeOf","wellKnownSymbol","uid","InternalStateModule","enforceInternalState","enforce","getInternalState","get","Int8Array","Int8ArrayPrototype","prototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","Object","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","getTypedArrayConstructor","it","proto","state","isTypedArray","klass","Function","configurable","this","undefined","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","property","forced","options","ARRAY","TypedArrayConstructor","error","error2","exportTypedArrayStaticMethod","isView","uncurryThis","toString","stringSlice","slice","TO_STRING_TAG_SUPPORT","classofRaw","$Object","CORRECT_ARGUMENTS","arguments","O","tag","result","key","tryGet","callee","fails","F","constructor","definePropertyModule","createPropertyDescriptor","object","value","bitmap","enumerable","writable","makeBuiltIn","defineProperty","target","name","descriptor","getter","set","setter","defineGlobalProperty","simple","unsafe","nonConfigurable","nonWritable","documentAll","document","all","IS_HTMLDDA","EXISTS","createElement","navigator","userAgent","match","version","process","Deno","versions","v8","split","exec","test","bind","hasOwnProperty","NATIVE_BIND","apply","FunctionPrototype","getDescriptor","getOwnPropertyDescriptor","PROPER","CONFIGURABLE","aCallable","method","uncurryThisWithBind","fn","aFunction","namespace","isNullOrUndefined","V","P","func","check","Math","globalThis","window","self","toObject","store","functionToString","inspectSource","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","metadata","facade","STATE","getterFor","TYPE","type","$documentAll","getBuiltIn","USE_SYMBOL_AS_UID","$Symbol","toLength","obj","CONFIGURABLE_FUNCTION_NAME","replace","join","CONFIGURABLE_LENGTH","TEMPLATE","arity","source","ceil","floor","trunc","x","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","anObject","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","ENUMERABLE","WRITABLE","Attributes","current","CORRECT_PROTOTYPE_GETTER","IE_PROTO","uncurryThisAccessor","aPossiblePrototype","CORRECT_SETTER","Array","__proto__","input","pref","val","valueOf","keys","SHARED","IS_PURE","push","mode","copyright","license","V8_VERSION","getOwnPropertySymbols","symbol","Symbol","sham","number","toIntegerOrInfinity","min","requireObjectCoercible","toPositiveInteger","$RangeError","RangeError","BYTES","offset","isSymbol","getMethod","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","id","postfix","random","NATIVE_SYMBOL","iterator","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","ArrayBufferViewCore","lengthOfArrayLike","toOffset","toIndexedObject","$set","WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS","array","TO_OBJECT_BUG","arrayLike","src","len","index","Build","buildSeed","size","gzSize","__importDefault","mod","__esModule","default","defaultConfig","libzip_1","http_1","build_1","dosboxConf","jsdosConf","sources","libzipWasm","autoexec","indexOf","_len","lines","_key","substring","extract","url","path","extractAll","async","overwriteConfig","instantiate","libzip","promises","resource","httpRequest","responseType","then","buffer","data","writeFile","readmeTxt","JSON","stringify","resources","Promise","zipToFs","bundle","zipFromFs","destroy","dosDirect","messages_queue_1","wasmModule","sessionId","messagesQueue","MessagesQueue","handler","props","sleepHandler","postMessage","transportLayer","sendMessageToServer","messageHandler","initMessageHandler","newHandler","sendTo","exit","removeEventListener","addEventListener","passive","callMain","dosWorker","workerUrl","response","fetch","status","statusText","localUrl","URL","createObjectURL","blob","worker","Worker","onerror","filename","message","onmessage","transfer","revokeObjectURL","terminate","NetworkType","emulators_impl_1","emulators","resolve","reject","Xhr","success","fail","xhr","total","loaded","makeHttpRequest","progressListner","errorListener","XMLHttpRequest","open","setRequestHeader","overrideMimeType","evt","progress","onreadystatechange","onReadyStateChange","send","readyState","max","CommandInterfaceEventsImpl","onStdoutConsumers","delayedStdout","onFrameSizeConsumers","onFrameConsumers","onSoundPushConsumers","onExitConsumers","onMessageConsumers","delayedMessages","onNetworkConnectedConsumers","onNetworkDisconnectedConsumers","onUnloadConsumers","onStdout","consumer","next","fireStdout","onFrameSize","onFrame","onSoundPush","onExit","onMessage","msgType","args","onNetworkConnected","onNetworkDisconnected","onUnload","fireFrameSize","width","height","fireFrame","rgb","rgba","fireSoundPush","samples","fireExit","fireMessage","_this","fireNetworkConnected","networkType","address","fireNetworkDisconnected","fireUnload","modules_1","dos_bundle_1","direct_1","worker_1","protocol_1","pathPrefix","pathSuffix","wdosboxJs","wdosboxxJs","wasmModulesPromise","modules","wasmModules","readFile","parse","config","zipAddFile","init","dosboxDirect","dosboxWasm","dosbox","Date","now","backend","dosboxXDirect","dosboxxWasm","dosboxx","ci","CommandInterfaceOverTransportLayer","isArray","err","setTimeout","WasmModulesImpl","make","dosboxWorker","loadWasmModule","host","wasmSupported","globals","compiled","WebAssembly","compile","wmodule","Module","of","Instance","imul","b","al","bl","fround","clz32","moduleName","onprogress","emModule","compiledModulePromise","CompiledNodeModule","loadWasmModuleNode","load","fromIndex","lastIndexOf","wIndex","isWasmUrl","indexOfJs","wasmUrl","binaryPromise","scriptPromise","binary","script","instantiateWasm","info","receiveInstance","env","instance","eval","CompiledBrowserModule","promise","loadWasmModuleBrowser","libzipPromise","dosboxPromise","dosboxxPromise","loadModule","initialModule","home","FS","ignorePermissions","chdirToHome","changedAfterMs","ptr","_zip_from_fs","HEAPU32","archive","HEAPU8","_free","zipArchive","filter","normalizeFilename","pathParts","createPath","chdir","withFilter","filterBuffer","filterLength","stringToUTF8","bytes","_malloc","retcode","_zip_to_fs","file","body","parts","trim","encoding","exists","lookupPath","_libzip_destroy","RegExp","substr","begin","end","part","archiveLength","archiveBuffer","fileLength","fileBuffer","ret","_zipfile_add","messages","uncompress","compress","compressBound","lz4","output","sIdx","eIdx","j","token","literals_length","l","match_length","pos","maxInputSize","mlMask","runMask","hasher","condition","assert","hashShift","hashTable","empty","isize","dst","dpos","dlen","anchor","copyLength","findMatchAttempts","srcLength","sequenceLowBits","sequenceHighBits","hash","minMatch","ref","ln","compressBlock","CHUNK_SIZE","ci_impl_1","sockdrive_1","maxDataChunkSize","startedAt","exited","frameWidth","frameHeight","freq","utf8Decoder","TextDecoder","transport","ready","persistPromise","persistResolve","exitPromise","exitResolve","eventsImpl","keyMatrix","configPromise","configResolve","panicMessages","connectPromise","connectResolve","connectReject","disconnectPromise","disconnectResolve","asyncifyStatsPromise","asyncifyStatsResolve","fsTreePromise","fsTreeResolve","fsGetFilePromise","fsGetFileResolve","fsGetFileParts","fsDeleteFilePromise","fsDeleteFileResolve","dataChunkPromise","dataChunkResolve","networkId","network","sockdrives","onServerMessage","sendClientMessage","sendBundles","encoder","TextEncoder","sendData","contents","sendDataChunk","bundleIndex","encode","fileEntry","dosConfig","console","catch","onErr","finally","onFrameLines","onLog","onWarn","onPersist","onSoundInit","onConfig","decode","onExtractProgress","extracted","count","driveIo","drive","values","preload","preloadSizeInBytes","sizeInBytes","read","readInBytes","write","writeInBytes","fsTree","deleted","chunk","dataChunkKey","mergeChunks","log","socket","WebSocket","binaryType","close","handle","endsWith","sockdrive","range","emptyRanges","from","dropped_ranges","heads","cylinders","sectors","sectorSize","sector_size","aheadRange","ahead_read","emptyRangesCount","readRangeAsync","sector","rgbaPtr","line","heapu8","start","soundFrequency","screenshot","frame","frameOffset","rgbaOffset","ImageData","simulateKeyPress","timeMs","keyCodes","forEach","keyCode","addKey","sendKeyEvent","pressed","sendMouseMotion","y","relative","sendMouseRelativeMotion","sendMouseButton","button","sendMouseSync","sendBackendEvent","payload","json","optOnlyChanges","onlyChanges","persistSockdrives","pause","resume","mute","unmute","events","networkConnect","startsWith","location","protocol","networkDisconnect","asyncifyStats","reader","getReader","done","drives","_","entries","persist","byteLength","sendFullDataChunk","merged","getStore","NoStore","WRITE_STORE","RAW_STORE","owner","put","each","callback","DbStore","indexedDB","db","onready","mozIndexedDB","webkitIndexedDB","msIndexedDB","openRequest","onsuccess","onupgradeneeded","createObjectStore","createIndex","multiEntry","request","transaction","objectStore","Blob","arrayBuffer","getAllKeys","event","storeName","readOne","msg","sockdrive_store_1","mini_lz4_1","_onNewRange","small_ranges","storedSectors","Map","serializedSectors","deserializeSectors","storeKeys","Set","add","find","droppedRanges","loadQueue","preloaded","preload_ranges","range_count","invalidRanges","splice","reverse","rangesToLoad","onNewRange","sectorData","mergeSectorsData","loadRange","ok","loadFromQueue","bach","pop","serializeSectors","sectorsData","rangeSectors","chunksSize","boundSize","uncompressedChunk","u32uncompressedChunk","compressedChunk","chunks","compressedSize","chunkSize","uncompressedSize","rangeOfSector","verifySectors","serialized","deserialized","rangeMap","rangeKey","deserializedRange","sectorKey","deserializedSector","every"],"mappings":"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","file":"emulators.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","var isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n","var isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.30.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.30.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw $RangeError('Wrong offset');\n return offset;\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw $RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","\n/* eslint-disable */\n// Autogenerated\n// -------------\n// gulpfile.ts/wasm.ts --> generateBuildInfo\n\nexport const Build = {\n version: \"8.3.8 (16e44762152643af872b97ec8a256a8b)\",\n buildSeed: 1748680937134,\n \"wdosbox-x.wasm\": {\n \"size\": 6672487,\n \"gzSize\": 2409453\n },\n \"wdosbox-x.js\": {\n \"size\": 220224,\n \"gzSize\": 52779\n },\n \"wdosbox.wasm\": {\n \"size\": 1458714,\n \"gzSize\": 499994\n },\n \"wdosbox.js\": {\n \"size\": 102407,\n \"gzSize\": 27644\n },\n \"wlibzip.wasm\": {\n \"size\": 113081,\n \"gzSize\": 52376\n },\n \"wlibzip.js\": {\n \"size\": 74502,\n \"gzSize\": 20042\n }\n,\n};\n","// # DosBundle\n// Is a complete bundle that contains everything needed to start dosbox server\n\nimport LibZip from \"../../libzip/libzip\";\n\nimport { httpRequest } from \"../../http\";\n\nimport { WasmModule } from \"../../impl/modules\";\nimport { Build } from \"../../build\";\n\n// ### DosArchiveSource\nexport interface DosArchiveSource {\n // source (archive) to download and extract via `extractAll`\n\n // **url** where archive is located\n url: string;\n\n // **path**\n path: string;\n\n // **type**\n type?: \"zip\";\n // archive type, now only Zip is supported\n}\n\nexport default class DosBundle {\n public dosboxConf = defaultConfig;\n public jsdosConf = {\n version: Build.version,\n };\n public sources: DosArchiveSource[];\n\n private libzipWasm: WasmModule;\n\n constructor(libzipWasm: WasmModule) {\n this.sources = [];\n this.libzipWasm = libzipWasm;\n }\n\n autoexec(...lines: string[]): DosBundle {\n const index = this.dosboxConf.indexOf(\"[autoexec]\");\n this.dosboxConf = this.dosboxConf.substring(0, index) +\n \"[autoexec]\\nmount c .\\nc:\\n\" + lines.join(\"\\n\");\n return this;\n }\n\n extract(url: string, path = \"/\", type: \"zip\" = \"zip\"): DosBundle {\n // simplified version of extractAll, works only for one archive. It calls extractAll inside.\n return this.extractAll([{ url, path, type }]);\n }\n\n extractAll(sources: DosArchiveSource[]): DosBundle {\n // eslint-disable-next-line max-len\n // download given [`sources`](https://js-dos.com/6.22/docs/api/generate.html?page=jsdos-bundle#dosfs-dosarchivesource)\n // and extract them\n this.sources.push(...sources);\n return this;\n }\n\n async toUint8Array(overwriteConfig = false): Promise {\n const module = {};\n await this.libzipWasm.instantiate(module);\n const libzip = new LibZip(module);\n\n const promises = [];\n for (const source of this.sources) {\n if (source.type !== \"zip\") {\n throw new Error(\"Only Zip is supported\");\n }\n\n const resource = httpRequest(source.url, {\n responseType: \"arraybuffer\",\n }).then((buffer: string | ArrayBuffer) => {\n return {\n source,\n data: new Uint8Array(buffer as ArrayBuffer),\n };\n });\n\n promises.push(resource);\n }\n\n if (!overwriteConfig) {\n await libzip.writeFile(\".jsdos/dosbox.conf\", this.dosboxConf);\n await libzip.writeFile(\".jsdos/readme.txt\", readmeTxt);\n await libzip.writeFile(\".jsdos/jsdos.json\", JSON.stringify(this.jsdosConf, null, 2));\n }\n\n const resources = await Promise.all(promises);\n for (const resource of resources) {\n libzip.zipToFs(resource.data, resource.source.path);\n }\n\n if (overwriteConfig) {\n await libzip.writeFile(\".jsdos/dosbox.conf\", this.dosboxConf);\n await libzip.writeFile(\".jsdos/readme.txt\", readmeTxt);\n await libzip.writeFile(\".jsdos/jsdos.json\", JSON.stringify(this.jsdosConf, null, 2));\n }\n\n const bundle = await libzip.zipFromFs();\n libzip.destroy();\n\n return bundle;\n }\n}\n\n\nconst readmeTxt = `\nPlease visit our website:\n\n _ __\n (_)____ ____/ /___ _____ _________ ____ ___\n / / ___/_____/ __ / __ \\\\/ ___// ___/ __ \\\\/ __ \\`__ \\\\\n / (__ )_____/ /_/ / /_/ (__ )/ /__/ /_/ / / / / / /\n __/ /____/ \\\\__,_/\\\\____/____(_)___/\\\\____/_/ /_/ /_/\n /___/\n`.replace(/\\n/g, \"\\r\\n\");\n\n/* eslint-disable max-len */\nexport const defaultConfig = `[sdl]\nautolock=false\n\nfullscreen=false\nfulldouble=false\nfullresolution=original\nwindowresolution=original\noutput=surface\nsensitivity=100\nwaitonerror=true\npriority=higher,normal\nmapperfile=mapper-jsdos.map\nusescancodes=true\nvsync=false\n[dosbox]\nmachine=svga_s3\n\nlanguage=\ncaptures=capture\nmemsize=16\n[cpu]\ncore=auto\ncputype=auto\ncycles=auto\n\ncycleup=10\ncycledown=20\n[mixer]\nnosound=false\nrate=44100\n\nblocksize=1024\nprebuffer=20\n\n[render]\n# frameskip: How many frames DOSBox skips before drawing one.\n# aspect: Do aspect correction, if your output method doesn't support scaling this can slow things down!.\n# scaler: Scaler used to enlarge/enhance low resolution modes.\n# If 'forced' is appended, then the scaler will be used even if the result might not be desired.\n# Possible values: none, normal2x, normal3x, advmame2x, advmame3x, advinterp2x, advinterp3x, hq2x, hq3x, 2xsai, super2xsai, supereagle, tv2x, tv3x, rgb2x, rgb3x, scan2x, scan3x.\n\nframeskip=0\naspect=false\nscaler=none\n\n[midi]\n# mpu401: Type of MPU-401 to emulate.\n# Possible values: intelligent, uart, none.\n# mididevice: Device that will receive the MIDI data from MPU-401.\n# Possible values: default, win32, alsa, oss, coreaudio, coremidi, none.\n# midiconfig: Special configuration options for the device driver. This is usually the id of the device you want to use.\n# See the README/Manual for more details.\n\nmpu401=intelligent\nmididevice=default\nmidiconfig=\n\n[sblaster]\n# sbtype: Type of Soundblaster to emulate. gb is Gameblaster.\n# Possible values: sb1, sb2, sbpro1, sbpro2, sb16, gb, none.\n# sbbase: The IO address of the soundblaster.\n# Possible values: 220, 240, 260, 280, 2a0, 2c0, 2e0, 300.\n# irq: The IRQ number of the soundblaster.\n# Possible values: 7, 5, 3, 9, 10, 11, 12.\n# dma: The DMA number of the soundblaster.\n# Possible values: 1, 5, 0, 3, 6, 7.\n# hdma: The High DMA number of the soundblaster.\n# Possible values: 1, 5, 0, 3, 6, 7.\n# sbmixer: Allow the soundblaster mixer to modify the DOSBox mixer.\n# oplmode: Type of OPL emulation. On 'auto' the mode is determined by sblaster type. All OPL modes are Adlib-compatible, except for 'cms'.\n# Possible values: auto, cms, opl2, dualopl2, opl3, none.\n# oplemu: Provider for the OPL emulation. compat might provide better quality (see oplrate as well).\n# Possible values: default, compat, fast.\n# oplrate: Sample rate of OPL music emulation. Use 49716 for highest quality (set the mixer rate accordingly).\n# Possible values: 44100, 49716, 48000, 32000, 22050, 16000, 11025, 8000.\n\nsbtype=sb16\nsbbase=220\nirq=7\ndma=1\nhdma=5\nsbmixer=true\noplmode=auto\noplemu=default\noplrate=44100\n\n[gus]\n# gus: Enable the Gravis Ultrasound emulation.\n# gusrate: Sample rate of Ultrasound emulation.\n# Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.\n# gusbase: The IO base address of the Gravis Ultrasound.\n# Possible values: 240, 220, 260, 280, 2a0, 2c0, 2e0, 300.\n# gusirq: The IRQ number of the Gravis Ultrasound.\n# Possible values: 5, 3, 7, 9, 10, 11, 12.\n# gusdma: The DMA channel of the Gravis Ultrasound.\n# Possible values: 3, 0, 1, 5, 6, 7.\n# ultradir: Path to Ultrasound directory. In this directory\n# there should be a MIDI directory that contains\n# the patch files for GUS playback. Patch sets used\n# with Timidity should work fine.\n\ngus=false\ngusrate=44100\ngusbase=240\ngusirq=5\ngusdma=3\nultradir=C:\\\\ULTRASND\n\n[speaker]\n# pcspeaker: Enable PC-Speaker emulation.\n# pcrate: Sample rate of the PC-Speaker sound generation.\n# Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.\n# tandy: Enable Tandy Sound System emulation. For 'auto', emulation is present only if machine is set to 'tandy'.\n# Possible values: auto, on, off.\n# tandyrate: Sample rate of the Tandy 3-Voice generation.\n# Possible values: 44100, 48000, 32000, 22050, 16000, 11025, 8000, 49716.\n# disney: Enable Disney Sound Source emulation. (Covox Voice Master and Speech Thing compatible).\n\npcspeaker=true\npcrate=44100\ntandy=auto\ntandyrate=44100\ndisney=true\n\n[joystick]\n# joysticktype: Type of joystick to emulate: auto (default), none,\n# 2axis (supports two joysticks),\n# 4axis (supports one joystick, first joystick used),\n# 4axis_2 (supports one joystick, second joystick used),\n# fcs (Thrustmaster), ch (CH Flightstick).\n# none disables joystick emulation.\n# auto chooses emulation depending on real joystick(s).\n# (Remember to reset dosbox's mapperfile if you saved it earlier)\n# Possible values: auto, 2axis, 4axis, 4axis_2, fcs, ch, none.\n# timed: enable timed intervals for axis. Experiment with this option, if your joystick drifts (away).\n# autofire: continuously fires as long as you keep the button pressed.\n# swap34: swap the 3rd and the 4th axis. can be useful for certain joysticks.\n# buttonwrap: enable button wrapping at the number of emulated buttons.\n\njoysticktype=auto\ntimed=true\nautofire=false\nswap34=false\nbuttonwrap=false\n\n[serial]\n# serial1: set type of device connected to com port.\n# Can be disabled, dummy, modem, nullmodem, directserial.\n# Additional parameters must be in the same line in the form of\n# parameter:value. Parameter for all types is irq (optional).\n# for directserial: realport (required), rxdelay (optional).\n# (realport:COM1 realport:ttyS0).\n# for modem: listenport (optional).\n# for nullmodem: server, rxdelay, txdelay, telnet, usedtr,\n# transparent, port, inhsocket (all optional).\n# Example: serial1=modem listenport:5000\n# Possible values: dummy, disabled, modem, nullmodem, directserial.\n# serial2: see serial1\n# Possible values: dummy, disabled, modem, nullmodem, directserial.\n# serial3: see serial1\n# Possible values: dummy, disabled, modem, nullmodem, directserial.\n# serial4: see serial1\n# Possible values: dummy, disabled, modem, nullmodem, directserial.\n\nserial1=dummy\nserial2=dummy\nserial3=disabled\nserial4=disabled\n\n[dos]\n# xms: Enable XMS support.\n# ems: Enable EMS support.\n# umb: Enable UMB support.\n# keyboardlayout: Language code of the keyboard layout (or none).\n\nxms=true\nems=true\numb=true\nkeyboardlayout=auto\n\n[ipx]\n# ipx: Enable ipx over UDP/IP emulation.\n\nipx=true\n[autoexec]\necho off\nmount c .\nc:\n\ntype jsdos~1/readme.txt\necho on\n\n# Generated using https://js-dos.com\n# █▀▀▀▀▀█ █ ▄▄▄▀▀█ █▀▀▀▀▀█\n# █ ███ █ ██▄ █ ▀ ▄ █ ███ █\n# █ ▀▀▀ █ ▄██ ▀ ▀▀█ █ ▀▀▀ █\n# ▀▀▀▀▀▀▀ ▀ █▄▀▄▀ █ ▀▀▀▀▀▀▀\n# █▀▄▄█▀▀▄▄ ▀ ▀█▄▄▄▄ ▀▄█▀█▀\n# █▀ ▀ ▀▀▄ █▀ ▄ ▄▀▀▀▄ █▀█▄\n# ▄ ▄▄ █▀▀▄ ▄▀▄▀▀█ ▀▀▄▀▀█▀\n# ▄▀▀█▀▀ █▀█▀█▀▀▄ ▀██▀█▄\n# ▀▀▀ ▀ ▀ █▄█ ▀█▄▄█▀▀▀█▀▀\n# █▀▀▀▀▀█ ▄▄▄ ▄ ▄ █ ▀ █▄▄▄▄\n# █ ███ █ ▀█▀▀▄▀▀▄████▀▀█▄█\n# █ ▀▀▀ █ ▄▀▀█▀█▀▄ ▀▀▄▄█▄█\n# ▀▀▀▀▀▀▀ ▀ ▀▀ ▀ ▀ ▀▀▀\n`.replace(/\\n/g, \"\\r\\n\");\n\n/* eslint-enable max-len */\n","import { WasmModule } from \"../../../impl/modules\";\nimport { TransportLayer, MessageHandler, ClientMessage, ServerMessage } from \"../../../protocol/protocol\";\nimport { MessagesQueue } from \"../../../protocol/messages-queue\";\n\nexport async function dosDirect(wasmModule: WasmModule, sessionId: string): Promise {\n const messagesQueue = new MessagesQueue();\n let handler: MessageHandler = messagesQueue.handler.bind(messagesQueue);\n\n const module: any = {};\n\n module.postMessage = (name: ServerMessage, props: {[key: string]: any}) => {\n handler(name, props);\n };\n\n const sleepHandler = (e: MessageEvent) => {\n const data = e.data;\n if (data?.name === \"ws-sync-sleep\" && data.props.sessionId === sessionId) {\n postMessage({ name: \"wc-sync-sleep\", props: data.props }, \"*\");\n }\n };\n\n const transportLayer: TransportLayer = {\n sessionId,\n sendMessageToServer: (name: ClientMessage, props?: {[key: string]: any}) => {\n module.messageHandler({ data: { name, props } });\n },\n initMessageHandler: (newHandler: MessageHandler) => {\n handler = newHandler;\n messagesQueue.sendTo(handler);\n },\n exit: () => {\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"message\", sleepHandler);\n }\n },\n };\n\n (transportLayer as any).module = module;\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", sleepHandler, { passive: true });\n }\n\n await wasmModule.instantiate(module);\n module.callMain([sessionId]);\n\n return transportLayer;\n}\n","import { WasmModule } from \"../../../impl/modules\";\nimport { TransportLayer, MessageHandler, ClientMessage } from \"../../../protocol/protocol\";\nimport { MessagesQueue } from \"../../../protocol/messages-queue\";\n\nexport async function dosWorker(workerUrl: string,\n wasmModule: WasmModule,\n sessionId: string): Promise {\n const messagesQueue = new MessagesQueue();\n let handler: MessageHandler = messagesQueue.handler.bind(messagesQueue);\n\n const response = await fetch(workerUrl);\n if (response.status !== 200) {\n throw new Error(\"Unable to download '\" + workerUrl + \"' (\" +\n response.status + \"): \" + response.statusText);\n }\n const localUrl = URL.createObjectURL(await response.blob());\n const worker = new Worker(localUrl);\n worker.onerror = (e) => {\n handler(\"ws-err\", { type: e.type, filename: e.filename, message: e.message });\n };\n worker.onmessage = (e) => {\n const data = e.data;\n if (data?.name !== undefined) {\n handler(data.name, data.props);\n }\n };\n\n const transportLayer: TransportLayer = {\n sessionId,\n sendMessageToServer: (name: ClientMessage,\n props: {[key: string]: any},\n transfer?: ArrayBuffer[]) => {\n if (transfer) {\n worker.postMessage({ name, props }, transfer);\n } else {\n worker.postMessage({ name, props });\n }\n },\n initMessageHandler: (newHandler: MessageHandler) => {\n handler = newHandler;\n messagesQueue.sendTo(handler);\n },\n exit: () => {\n URL.revokeObjectURL(localUrl);\n worker.terminate();\n },\n };\n\n try {\n transportLayer.sendMessageToServer(\"wc-install\", {\n module: (wasmModule as any).wasmModule,\n sessionId,\n });\n } catch (e) {\n transportLayer.sendMessageToServer(\"wc-install\", { sessionId });\n }\n\n return transportLayer;\n}\n","import DosBundle from \"./dos/bundle/dos-bundle\";\nimport emulatorsImpl from \"./impl/emulators-impl\";\n\nimport { AsyncifyStats, TransportLayer, FsNode } from \"./protocol/protocol\";\n\nexport interface DosConfig {\n dosboxConf: string,\n jsdosConf: {\n version: string,\n },\n};\n\n/* eslint-disable no-unused-vars */\nexport enum NetworkType {\n NETWORK_DOSBOX_IPX = 0,\n}\n/* eslint-enable no-unused-vars */\n\nexport interface BackendOptions {\n token?: string | undefined;\n onExtractProgress?: (bundleIndex: number, file: string, extracted: number, total: number) => void;\n}\n\nexport type InitBundleEntry = Uint8Array;\nexport interface InitFileEntry {\n path: string,\n contents: Uint8Array,\n};\nexport type InitFsEntry = InitBundleEntry | InitFileEntry | DosConfig | string;\nexport type InitFs = InitFsEntry | InitFsEntry[];\n\nexport type PersistedSockdrives = {\n drives: {\n url: string,\n persist: Uint8Array,\n }[],\n} | null;\n\nexport interface Emulators {\n // * pathPrefix - by default emulators will load wasm modules relatively from current path,\n // you should specify path prefix if you want to load them from different place\n pathPrefix: string;\n\n // * pathSuffix - suffix fill be added to end of the each path\n pathSuffix: string;\n\n // * version - version of emulators build\n version: string;\n\n // * wdosboxJs - a file name to load\n wdosboxJs: string;\n\n // * dosBundle - create empty DosBundle\n bundle: () => Promise;\n\n // * dosConfig - read bundle config\n bundleConfig: (bundle: InitBundleEntry) => Promise;\n\n // * updateDosConfig - update bunle config\n bundleUpdateConfig: (bundle: InitBundleEntry, config: DosConfig) => Promise;\n\n // * dosboxNode - create dosbox node emulator backend\n dosboxNode: (init: InitFs, options?: BackendOptions) => Promise;\n\n // * dosboxDirect - create dosbox direct emulator backend\n dosboxDirect: (init: InitFs, options?: BackendOptions) => Promise;\n\n // * dosboxWorker - create dosbox worker emulator backend\n dosboxWorker: (init: InitFs, options?: BackendOptions) => Promise;\n\n // * dosboxXNode - create dosbox-x node emulator backend\n dosboxXNode: (init: InitFs, options?: BackendOptions) => Promise;\n\n // * dosboxDirect - create dosbox-x direct emulator backend\n dosboxXDirect: (init: InitFs, options?: BackendOptions) => Promise;\n\n // * dosboxWorker - create dosbox-x worker emulator backend\n dosboxXWorker: (init: InitFs, options?: BackendOptions) => Promise;\n\n // * backend - create abstract emulation backend by given TransportLayer\n backend: (init: InitFs, transportLayer: TransportLayer,\n options?: BackendOptions) => Promise;\n}\n\nexport interface CommandInterface {\n // * get bundle config\n config: () => Promise;\n\n // * current render buffer width\n height: () => number;\n\n // * current render buffer height\n width: () => number;\n\n // * sound frequency\n soundFrequency: () => number;\n\n // * `screenshot()` - get screnshot of canvas as ImageData\n screenshot: () => Promise;\n\n // * `pause()` - pause emulation (also mute all sounds)\n pause: () => void;\n\n // * `resume()` - resume emulation (also unmute all sounds)\n resume: () => void;\n\n // * `mute()` - mute all sounds\n mute: () => void;\n\n // * `unmute()` - unmute all sounds\n unmute: () => void;\n\n // * `exit()` - exit from runtime\n exit: () => Promise;\n\n // * `simulateKeyPress(...keyCodes)` - allows to simulate key press **AND** release event for key code\n // see `sendKeyPress` to find meaning of keyCode. Key combination is supported when more than 1 keyCode is set.\n simulateKeyPress: (...keyCodes: number[]) => void;\n\n // * `sendKeyEvent(keyCode, pressed)` - sends single key (press or release) event to backend\n sendKeyEvent: (keyCode: number, pressed: boolean) => void;\n\n // * `sendMouseMotion` - sends mouse motion event to backend, position is in range [0, 1]\n sendMouseMotion: (x: number, y: number) => void;\n\n // * `sendRelativeMotion` - sends mouse motion event to backend, position is absolute diff of position\n sendMouseRelativeMotion: (x: number, y: number) => void;\n\n // * `simulateMouseButton` - sends mouse button event (press or release) to backend\n sendMouseButton: (button: number, pressed: boolean) => void;\n\n // * `sendMouseSync` - sends mouse sync event\n sendMouseSync: () => void;\n\n // * `sendBackendEvent` - send event for current backend, event will be stringified to json\n sendBackendEvent: (event: any) => void;\n\n // dump FS as Uint8Array \n persist(onlyChanges?: boolean): Promise;\n\n // events\n events(): CommandInterfaceEvents;\n\n networkConnect(networkType: NetworkType, address: string): Promise;\n\n networkDisconnect(networkType: NetworkType): Promise;\n\n asyncifyStats(): Promise;\n\n fsTree(): Promise;\n\n fsReadFile(file: string): Promise;\n\n fsWriteFile(file: string, contents: ReadableStream | Uint8Array): Promise;\n\n fsDeleteFile(file: string): Promise;\n\n}\n\nexport type MessageType = \"log\" | \"warn\" | \"error\" | string;\n\nexport interface CommandInterfaceEvents {\n onStdout: (consumer: (message: string) => void) => void;\n onFrameSize: (consumer: (width: number, height: number) => void) => void;\n onFrame: (consumer: (rgb: Uint8Array | null, rgba: Uint8Array | null) => void) => void;\n onSoundPush: (consumer: (samples: Float32Array) => void) => void;\n onExit: (consumer: () => void) => void;\n\n onMessage: (consumer: (msgType: MessageType, ...args: any[]) => void) => void;\n\n onNetworkConnected: (consumer: (networkType: NetworkType, address: string) => void) => void;\n onNetworkDisconnected: (consumer: (networkType: NetworkType) => void) => void;\n\n onUnload: (consumer: () => Promise) => void;\n}\n\nif (typeof window !== \"undefined\") {\n (window as any).emulators = emulatorsImpl;\n} if (typeof global !== \"undefined\") {\n (global as any).emulators = emulatorsImpl;\n}\n","export interface XhrOptions {\n method?: string;\n progress?: (total: number, loaded: number) => void;\n data?: string;\n responseType?: XMLHttpRequestResponseType;\n}\n\nexport const httpRequest = XhrRequest;\n\n// # XhrRequest\n// `XhrRequest` is small wrapper over XMLHttpRequest, that provides some\n// handy methods\nfunction XhrRequest(url: string, options: XhrOptions): Promise {\n return new Promise((resolve, reject) => {\n new Xhr(url, {\n ...options,\n success: resolve,\n fail: (message: string) => {\n reject(new Error(message));\n },\n });\n });\n}\n\n// private implementation\ninterface XhrOptionsInternal extends XhrOptions {\n success?: (response: any) => void;\n fail?: (message: string) => void;\n}\n// * `success` - callback when resource is downloaded\n// * `fail` - fail callback\n\n\n// Class Xhr does not have any public methods\nclass Xhr {\n private resource: string;\n private options: XhrOptionsInternal;\n private xhr: XMLHttpRequest | null = null;\n private total = 0;\n private loaded = 0;\n\n constructor(url: string, options: XhrOptionsInternal) {\n this.resource = url;\n this.options = options;\n this.options.method = options.method || \"GET\";\n\n if (this.options.method !== \"GET\") {\n throw new Error(\"Method \" + this.options.method + \" is not supported\");\n }\n\n this.makeHttpRequest();\n }\n\n private makeHttpRequest() {\n this.xhr = new XMLHttpRequest();\n this.xhr.open(this.options.method || \"GET\", this.resource, true);\n if (this.options.method === \"POST\") {\n this.xhr.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n this.xhr.overrideMimeType(\"text/plain; charset=x-user-defined\");\n\n let progressListner;\n if (typeof (progressListner = this.xhr).addEventListener === \"function\") {\n progressListner.addEventListener(\"progress\", (evt) => {\n this.total = evt.total;\n this.loaded = evt.loaded;\n if (this.options.progress) {\n return this.options.progress(evt.total, evt.loaded);\n }\n });\n }\n\n let errorListener;\n if (typeof (errorListener = this.xhr).addEventListener === \"function\") {\n errorListener.addEventListener(\"error\", () => {\n if (this.options.fail) {\n this.options.fail(\"Unalbe to download '\" + this.resource +\n \"', code: \" + (this.xhr as XMLHttpRequest).status);\n return delete this.options.fail;\n }\n });\n }\n this.xhr.onreadystatechange = () => {\n return this.onReadyStateChange();\n };\n if (this.options.responseType) {\n this.xhr.responseType = this.options.responseType;\n }\n this.xhr.send(this.options.data);\n }\n\n private onReadyStateChange() {\n const xhr = (this.xhr as XMLHttpRequest);\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n if (this.options.success) {\n const total = Math.max(this.total, this.loaded);\n if (this.options.progress !== undefined) {\n this.options.progress(total, total);\n }\n\n return this.options.success(xhr.response);\n }\n } else if (this.options.fail) {\n this.options.fail(\"Unable to download '\" + this.resource + \"', code: \" + xhr.status);\n return delete this.options.fail;\n }\n }\n }\n}\n\n","/* eslint-disable no-invalid-this */\n\nimport { CommandInterfaceEvents, MessageType, NetworkType } from \"../emulators\";\n\nexport class CommandInterfaceEventsImpl implements CommandInterfaceEvents {\n private onStdoutConsumers: ((message: string) => void)[] = [];\n private delayedStdout: string[] = [];\n\n private onFrameSizeConsumers: ((width: number, height: number) => void)[] = [];\n private onFrameConsumers: ((rgb: Uint8Array | null, rgba: Uint8Array | null) => void)[] = [];\n private onSoundPushConsumers: ((samples: Float32Array) => void)[] = [];\n private onExitConsumers: (() => void)[] = [];\n\n private onMessageConsumers: ((msgType: MessageType, ...args: any[]) => void)[] = [];\n private delayedMessages: {msgType: MessageType, args: any[]}[] = [];\n\n private onNetworkConnectedConsumers: ((networkType: NetworkType, address: string) => void)[] = [];\n private onNetworkDisconnectedConsumers: ((networkType: NetworkType) => void)[] = [];\n\n private onUnloadConsumers: (() => Promise)[] = [];\n\n onStdout = (consumer: (message: string) => void) => {\n this.onStdoutConsumers.push(consumer);\n\n if (this.onStdoutConsumers.length === 1) {\n for (const next of this.delayedStdout) {\n this.fireStdout(next);\n }\n this.delayedStdout = [];\n }\n };\n\n onFrameSize = (consumer: (width: number, height: number) => void) => {\n this.onFrameSizeConsumers.push(consumer);\n };\n\n onFrame = (consumer: (rgb: Uint8Array | null, rgba: Uint8Array | null) => void) => {\n this.onFrameConsumers.push(consumer);\n };\n\n onSoundPush = (consumer: (samples: Float32Array) => void) => {\n this.onSoundPushConsumers.push(consumer);\n };\n\n onExit = (consumer: () => void) => {\n this.onExitConsumers.push(consumer);\n };\n\n onMessage = (consumer: (msgType: MessageType, ...args: any[]) => void) => {\n this.onMessageConsumers.push(consumer);\n\n if (this.onMessageConsumers.length === 1) {\n for (const next of this.delayedMessages) {\n consumer(next.msgType, ...next.args);\n }\n this.delayedMessages = [];\n }\n };\n\n onNetworkConnected(consumer: (networkType: NetworkType, address: string) => void) {\n this.onNetworkConnectedConsumers.push(consumer);\n }\n\n onNetworkDisconnected(consumer: (networkType: NetworkType) => void) {\n this.onNetworkDisconnectedConsumers.push(consumer);\n }\n\n onUnload = (consumer: () => Promise) => {\n this.onUnloadConsumers.push(consumer);\n };\n\n fireStdout = (message: string) => {\n if (this.onStdoutConsumers.length === 0) {\n this.delayedStdout.push(message);\n return;\n }\n\n for (const next of this.onStdoutConsumers) {\n next(message);\n }\n };\n\n fireFrameSize = (width: number, height: number) => {\n for (const next of this.onFrameSizeConsumers) {\n next(width, height);\n }\n };\n\n fireFrame = (rgb: Uint8Array | null, rgba: Uint8Array | null) => {\n for (const next of this.onFrameConsumers) {\n next(rgb, rgba);\n }\n };\n\n fireSoundPush = (samples: Float32Array) => {\n for (const next of this.onSoundPushConsumers) {\n next(samples);\n }\n };\n\n fireExit = () => {\n for (const next of this.onExitConsumers) {\n next();\n }\n\n this.onStdoutConsumers = [];\n this.onFrameSizeConsumers = [];\n this.onFrameConsumers = [];\n this.onSoundPushConsumers = [];\n this.onExitConsumers = [];\n this.onMessageConsumers = [];\n };\n\n fireMessage = (msgType: MessageType, ...args: any[]) => {\n if (this.onMessageConsumers.length === 0) {\n this.delayedMessages.push({ msgType, args });\n return;\n }\n\n for (const next of this.onMessageConsumers) {\n next(msgType, ...args);\n }\n };\n\n fireNetworkConnected = (networkType: NetworkType, address: string) => {\n for (const next of this.onNetworkConnectedConsumers) {\n next(networkType, address);\n }\n };\n\n fireNetworkDisconnected = (networkType: NetworkType) => {\n for (const next of this.onNetworkDisconnectedConsumers) {\n next(networkType);\n }\n };\n\n fireUnload = async () => {\n const promises = [];\n for (const next of this.onUnloadConsumers) {\n promises.push(next());\n }\n await Promise.all(promises);\n };\n}\n","import { Build } from \"../build\";\nimport { Emulators, CommandInterface, BackendOptions, DosConfig, InitFs, InitBundleEntry } from \"../emulators\";\n\nimport { IWasmModules, WasmModulesImpl } from \"./modules\";\n\nimport DosBundle from \"../dos/bundle/dos-bundle\";\nimport { dosDirect } from \"../dos/dosbox/ts/direct\";\nimport { dosWorker } from \"../dos/dosbox/ts/worker\";\n\nimport { TransportLayer, CommandInterfaceOverTransportLayer } from \"../protocol/protocol\";\nimport LibZip from \"../libzip/libzip\";\n\nclass EmulatorsImpl implements Emulators {\n pathPrefix = \"\";\n pathSuffix = \"\";\n version = Build.version;\n wdosboxJs = \"wdosbox.js\";\n wdosboxxJs = \"wdosbox-x.js\";\n\n private wasmModulesPromise?: Promise;\n\n async bundle(): Promise {\n const modules = await this.wasmModules();\n const libzipWasm = await modules.libzip();\n return new DosBundle(libzipWasm);\n }\n\n async bundleConfig(bundle: InitBundleEntry): Promise {\n const modules = await this.wasmModules();\n const libzipWasm = await modules.libzip();\n\n const module = {};\n await libzipWasm.instantiate(module);\n const libzip = new LibZip(module);\n\n try {\n libzip.zipToFs(bundle, \"/\", \".jsdos/\");\n try {\n const dosboxConf = (await libzip.readFile(\".jsdos/dosbox.conf\")) as string;\n try {\n const jsdosConf = (await libzip.readFile(\".jsdos/jsdos.json\")) as string;\n return {\n dosboxConf,\n jsdosConf: JSON.parse(jsdosConf),\n };\n } catch (e) {\n // ignore\n }\n return {\n dosboxConf,\n jsdosConf: {\n version: Build.version,\n },\n };\n } catch (e) {\n // ignore\n }\n return null;\n } finally {\n libzip.destroy();\n }\n }\n\n async bundleUpdateConfig(bundle: InitBundleEntry, config: DosConfig): Promise {\n const modules = await this.wasmModules();\n const libzipWasm = await modules.libzip();\n\n const module = {};\n await libzipWasm.instantiate(module);\n const libzip = new LibZip(module);\n\n try {\n await libzip.writeFile(\"bundle.zip\", bundle);\n await libzip.writeFile(\".jsdos/dosbox.conf\", config.dosboxConf);\n await libzip.writeFile(\".jsdos/jsdos.json\", JSON.stringify(config.jsdosConf));\n await libzip.zipAddFile(\"bundle.zip\", \".jsdos/jsdos.json\");\n await libzip.zipAddFile(\"bundle.zip\", \".jsdos/dosbox.conf\");\n return (await libzip.readFile(\"bundle.zip\", \"binary\")) as Uint8Array;\n } finally {\n libzip.destroy();\n }\n }\n\n async dosboxNode(init: InitFs, options?: BackendOptions): Promise {\n return this.dosboxDirect(init, options);\n }\n\n async dosboxDirect(init: InitFs, options?: BackendOptions): Promise {\n const modules = await this.wasmModules();\n const dosboxWasm = await modules.dosbox();\n const transportLayer = await dosDirect(dosboxWasm, \"session-\" + Date.now());\n return this.backend(init, transportLayer, options);\n }\n\n async dosboxWorker(init: InitFs, options?: BackendOptions): Promise {\n const modules = await this.wasmModules();\n const dosboxWasm = await modules.dosbox();\n const transportLayer = await dosWorker(this.pathPrefix + this.wdosboxJs + this.pathSuffix,\n dosboxWasm, \"session-\" + Date.now());\n return this.backend(init, transportLayer, options);\n }\n\n async dosboxXNode(init: InitFs, options?: BackendOptions): Promise {\n return this.dosboxXDirect(init, options);\n }\n\n async dosboxXDirect(init: InitFs, options?: BackendOptions): Promise {\n const modules = await this.wasmModules();\n const dosboxxWasm = await modules.dosboxx();\n const transportLayer = await dosDirect(dosboxxWasm, \"session-\" + Date.now());\n return this.backend(init, transportLayer, options);\n }\n\n async dosboxXWorker(init: InitFs, options?: BackendOptions): Promise {\n const modules = await this.wasmModules();\n const dosboxxWasm = await modules.dosboxx();\n const transportLayer = await dosWorker(this.pathPrefix + this.wdosboxxJs + this.pathSuffix,\n dosboxxWasm, \"session-\" + Date.now());\n return this.backend(init, transportLayer, options);\n }\n\n async backend(init: InitFs, transportLayer: TransportLayer,\n options?: BackendOptions): Promise {\n return new Promise((resolve, reject) => {\n const ci = new CommandInterfaceOverTransportLayer(\n Array.isArray(init) ? init : [init],\n transportLayer,\n (err) => {\n if (err !== null) {\n reject(err);\n } else {\n // can be called from ctor, without timeout can be undefined\n setTimeout(() => resolve(ci), 4);\n }\n },\n options || {},\n );\n });\n }\n\n wasmModules(): Promise {\n if (this.wasmModulesPromise !== undefined) {\n return this.wasmModulesPromise;\n }\n\n const make = async () => {\n return new WasmModulesImpl(this.pathPrefix, this.pathSuffix, this.wdosboxJs, this.wdosboxxJs);\n };\n\n this.wasmModulesPromise = make();\n return this.wasmModulesPromise;\n }\n\n async dosDirect(init: InitFs): Promise {\n return this.dosboxDirect(init);\n }\n\n async dosWorker(init: InitFs): Promise {\n return this.dosboxWorker(init);\n }\n}\n\nconst emulators = new EmulatorsImpl();\n\nexport default emulators;\n","import { httpRequest } from \"../http\";\n\nexport interface WasmModule {\n instantiate: (module?: any) => Promise;\n}\n\nexport interface IWasmModules {\n libzip: () => Promise;\n dosbox: () => Promise;\n dosboxx: () => Promise;\n}\n\ninterface Globals {\n exports: {[moduleName: string]: any},\n module: {\n exports?: () => void,\n },\n compiled: {[moduleName: string]: Promise},\n}\n\nclass Host {\n public wasmSupported = false;\n public globals: Globals;\n constructor() {\n this.globals = typeof window === \"undefined\" ? {} : window as any;\n if (!this.globals.module) {\n this.globals.module = {};\n }\n if (!this.globals.exports) {\n this.globals.exports = {};\n }\n if (!this.globals.compiled) {\n this.globals.compiled = {};\n }\n\n // ### WebAssembly\n // Host able to detect is WebAssembly supported or not,\n // this information is stored in `Host.wasmSupported` variable\n if (typeof WebAssembly === \"object\" &&\n typeof WebAssembly.instantiate === \"function\" &&\n typeof WebAssembly.compile === \"function\") {\n const wmodule = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));\n if (wmodule instanceof WebAssembly.Module) {\n this.wasmSupported = new WebAssembly.Instance(wmodule) instanceof WebAssembly.Instance;\n }\n }\n\n // Polyfill for old contains implementations for:\n // `Math.imul`, `Math.fround`, `Math.clz32`, `Math.trunc`\n (function polyfill() {\n if (!Math.imul || Math.imul(0xffffffff, 5) !== -5) {\n Math.imul = function imul(a: any, b: any) {\n const ah = a >>> 16;\n const al = a & 0xffff;\n const bh = b >>> 16;\n const bl = b & 0xffff;\n return (al * bl + ((ah * bl + al * bh) << 16)) | 0;\n };\n }\n Math.imul = Math.imul;\n\n if (!Math.fround) {\n Math.fround = function(x) {\n return x;\n };\n }\n Math.fround = Math.fround;\n\n if (!Math.clz32) {\n Math.clz32 = function(x) {\n x = x >>> 0;\n for (let i = 0; i < 32; i++) {\n if (x & (1 << (31 - i))) {\n return i;\n }\n }\n return 32;\n };\n }\n Math.clz32 = Math.clz32;\n\n if (!Math.trunc) {\n Math.trunc = function(x) {\n return x < 0 ? Math.ceil(x) : Math.floor(x);\n };\n }\n Math.trunc = Math.trunc;\n })();\n }\n}\n\nexport const host = new Host();\n\nexport class WasmModulesImpl implements IWasmModules {\n private pathPrefix: string;\n private pathSuffix: string;\n private wdosboxJs: string;\n private wdosboxxJs: string;\n\n private libzipPromise?: Promise;\n private dosboxPromise?: Promise;\n private dosboxxPromise?: Promise;\n\n public wasmSupported = false;\n\n constructor(pathPrefix: string,\n pathSuffix: string,\n wdosboxJs: string,\n wdosboxxJs: string) {\n if (pathPrefix.length > 0 && pathPrefix[pathPrefix.length - 1] !== \"/\") {\n pathPrefix += \"/\";\n }\n\n this.pathPrefix = pathPrefix;\n this.pathSuffix = pathSuffix;\n this.wdosboxJs = wdosboxJs;\n this.wdosboxxJs = wdosboxxJs;\n }\n\n libzip() {\n if (this.libzipPromise !== undefined) {\n return this.libzipPromise;\n }\n\n this.libzipPromise = this.loadModule(this.pathPrefix + \"wlibzip.js\" + this.pathSuffix, \"WLIBZIP\");\n return this.libzipPromise;\n }\n\n dosbox() {\n if (this.dosboxPromise !== undefined) {\n return this.dosboxPromise;\n }\n\n this.dosboxPromise = this.loadModule(this.pathPrefix + this.wdosboxJs + this.pathSuffix, \"WDOSBOX\");\n\n return this.dosboxPromise;\n }\n\n dosboxx() {\n if (this.dosboxxPromise !== undefined) {\n return this.dosboxxPromise;\n }\n\n this.dosboxxPromise = this.loadModule(this.pathPrefix + this.wdosboxxJs + this.pathSuffix, \"WDOSBOXX\");\n\n return this.dosboxxPromise;\n }\n\n private loadModule(url: string,\n moduleName: string) {\n // eslint-disable-next-line\n return loadWasmModule(url, moduleName, () => {});\n }\n}\n\nexport function loadWasmModule(url: string,\n moduleName: string,\n onprogress: (stage: string, total: number, loaded: number) => void,\n): Promise {\n if (typeof XMLHttpRequest === \"undefined\") {\n return loadWasmModuleNode(url, moduleName, onprogress);\n } else {\n return loadWasmModuleBrowser(url, moduleName, onprogress);\n }\n}\n\nfunction loadWasmModuleNode(url: string,\n moduleName: string,\n // eslint-disable-next-line\n onprogress: (stage: string, total: number, loaded: number) => void) {\n if (host.globals.compiled[moduleName] !== undefined) {\n return host.globals.compiled[moduleName];\n }\n\n const emModule = require(url);\n const compiledModulePromise = Promise.resolve(new CompiledNodeModule(emModule));\n if (moduleName) {\n host.globals.compiled[moduleName] = compiledModulePromise;\n }\n\n return compiledModulePromise;\n}\n\nfunction loadWasmModuleBrowser(url: string,\n moduleName: string,\n onprogress: (stage: string, total: number, loaded: number) => void) {\n if (host.globals.compiled[moduleName] !== undefined) {\n return host.globals.compiled[moduleName];\n }\n\n async function load() {\n const fromIndex = url.lastIndexOf(\"/\");\n const wIndex = url.indexOf(\"w\", fromIndex);\n const isWasmUrl = wIndex === fromIndex + 1 && wIndex >= 0;\n\n if (!host.wasmSupported || !isWasmUrl) {\n throw new Error(\"Starting from js-dos 6.22.60 js environment is not supported\");\n }\n\n const indexOfJs = url.lastIndexOf(\".js\");\n const wasmUrl = url.substring(0, indexOfJs) + \".wasm\" + url.substring(indexOfJs + 3);\n const binaryPromise = httpRequest(wasmUrl, {\n responseType: \"arraybuffer\",\n progress: (total, loaded) => {\n onprogress(\"Resolving DosBox (\" + url + \")\", total, loaded);\n },\n });\n const scriptPromise = httpRequest(url, {\n progress: (total, loaded) => {\n onprogress(\"Resolving DosBox\", total, loaded);\n },\n });\n\n const [binary, script] = await Promise.all([binaryPromise, scriptPromise]);\n const wasmModule = await WebAssembly.compile(binary as ArrayBuffer);\n const instantiateWasm = (info: any, receiveInstance: any) => {\n info.env = info.env || {};\n return WebAssembly.instantiate(wasmModule, info)\n .then((instance) => receiveInstance(instance, wasmModule));\n };\n\n eval.call(window, script as string);\n host.globals.exports[moduleName] = host.globals.module.exports;\n\n return new CompiledBrowserModule(wasmModule,\n host.globals.exports[moduleName],\n instantiateWasm);\n }\n\n const promise = load();\n\n if (moduleName) {\n host.globals.compiled[moduleName] = promise;\n }\n\n return promise;\n}\n\nclass CompiledNodeModule implements WasmModule {\n private emModule: any;\n constructor(emModule: any) {\n this.emModule = emModule;\n }\n\n async instantiate(initialModule: any): Promise {\n await this.emModule(initialModule);\n }\n}\n\nclass CompiledBrowserModule implements WasmModule {\n public wasmModule: WebAssembly.Module;\n private module: any;\n private instantiateWasm: any;\n\n constructor(wasmModule: WebAssembly.Module, module: any, instantiateWasm: any) {\n this.wasmModule = wasmModule;\n this.module = module;\n this.instantiateWasm = instantiateWasm;\n }\n\n async instantiate(initialModule: any): Promise {\n initialModule.instantiateWasm = this.instantiateWasm;\n await this.module(initialModule);\n }\n}\n","export default class LibZip {\n public module: any;\n private home: string;\n\n constructor(module: any, home: string = \"/home/web_user\") {\n this.module = module;\n this.home = home;\n this.module.callMain([]);\n this.module.FS.ignorePermissions = true;\n this.chdirToHome();\n }\n\n zipFromFs(changedAfterMs = -1): Promise {\n this.chdirToHome();\n\n const ptr = this.module._zip_from_fs(changedAfterMs);\n if (ptr === 0) {\n return Promise.reject(new Error(\"Can't create zip, see more info in logs\"));\n }\n\n const length = this.module.HEAPU32[ptr / 4];\n const memory: Uint8Array = this.module.HEAPU8;\n const archive = memory.slice(ptr + 4, ptr + 4 + length);\n this.module._free(ptr);\n return Promise.resolve(archive);\n }\n\n zipToFs(zipArchive: Uint8Array, path = \"/\", filter?: string): Promise {\n const Module = this.module;\n\n path = this.normalizeFilename(path);\n const pathParts = this.normalizeFilename(path).split(\"/\");\n this.createPath(pathParts, 0, pathParts.length);\n this.chdir(path);\n\n const withFilter = filter !== undefined && filter.length > 0;\n let filterBuffer = 0;\n if (withFilter) {\n const filterLength = Module[\"lengthBytesUTF8\"](filter) + 1;\n filterBuffer = Module[\"_malloc\"](filterLength);\n Module.stringToUTF8(filter, filterBuffer, filterLength);\n }\n\n const bytes = new Uint8Array(zipArchive);\n const buffer = Module._malloc(bytes.length);\n Module.HEAPU8.set(bytes, buffer);\n const retcode = Module._zip_to_fs(buffer, bytes.length, filterBuffer);\n Module._free(buffer);\n\n this.chdirToHome();\n\n if (withFilter) {\n Module._free(filterBuffer);\n }\n\n if (retcode === 0) {\n return Promise.resolve();\n } else {\n return Promise.reject(new Error(\"Can't extract zip, retcode \" +\n retcode + \", see more info in logs\"));\n }\n }\n\n // ### writeFile\n writeFile(file: string, body: ArrayBuffer | Uint8Array | string) {\n // Allow to create file in FS, it will be created relatively cwd\n // All directories will be created\n //\n // windows style path are also valid, but **drive letter is ignored**\n // if you pass only filename, then file will be writed in cwd\n //\n // body can be string or ArrayBuffer or Uint8Array\n file = this.normalizeFilename(file);\n\n if (body instanceof ArrayBuffer) {\n body = new Uint8Array(body);\n }\n\n const parts = file.split(\"/\");\n\n if (parts.length === 0) {\n throw new Error(\"Can't create file '\" + file + \"', because it's not valid file path\");\n }\n\n const filename = parts[parts.length - 1].trim();\n\n if (filename.length === 0) {\n throw new Error(\"Can't create file '\" + file + \"', because file name is empty\");\n }\n\n /* i < parts.length - 1, because last part is file name */\n const path = this.createPath(parts, 0, parts.length - 1);\n this.module.FS.writeFile(path + \"/\" + filename, body);\n }\n\n async readFile(file: string, encoding: \"binary\" | \"utf8\" = \"utf8\"): Promise {\n file = this.normalizeFilename(file);\n return this.module.FS.readFile(file, { encoding });\n }\n\n exists(file: string): boolean {\n file = this.normalizeFilename(file);\n try {\n this.module.FS.lookupPath(file);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n destroy(): any {\n try {\n this.module._libzip_destroy();\n } catch (e) {\n return e;\n }\n }\n\n private normalizeFilename(file: string): string {\n file = file.replace(new RegExp(\"^[a-zA-z]+:\"), \"\").replace(new RegExp(\"\\\\\\\\\", \"g\"), \"/\");\n while (file[0] === \"/\") {\n file = file.substr(1);\n }\n return file;\n }\n\n private createPath(parts: string[], begin: number, end: number) {\n let path = \".\";\n for (let i = begin; i < end; ++i) {\n const part = parts[i].trim();\n if (part.length === 0) {\n continue;\n }\n\n this.module.FS.createPath(path, part, true, true);\n path = path + \"/\" + part;\n }\n\n return path;\n }\n\n private chdirToHome() {\n this.module.FS.chdir(this.home);\n }\n\n private chdir(path: string) {\n this.module.FS.chdir(this.home + \"/\" + path);\n }\n\n public async zipAddFile(archive: string, file: string) {\n const Module = this.module;\n const archiveLength = Module[\"lengthBytesUTF8\"](archive) + 1;\n const archiveBuffer = Module[\"_malloc\"](archiveLength);\n Module.stringToUTF8(archive, archiveBuffer, archiveLength);\n\n const fileLength = Module[\"lengthBytesUTF8\"](file) + 1;\n const fileBuffer = Module[\"_malloc\"](fileLength);\n Module.stringToUTF8(file, fileBuffer, fileLength);\n\n const ret = this.module._zipfile_add(archiveBuffer, fileBuffer, fileBuffer);\n\n Module[\"_free\"](archiveBuffer);\n Module[\"_free\"](fileBuffer);\n\n if (ret !== 0) {\n throw new Error(\"Unable to add \" + file + \" into \" + archive);\n }\n }\n}\n","import { ServerMessage, MessageHandler } from \"./protocol\";\n\ninterface DelayedMessage {\n name: ServerMessage,\n props: {[key: string]: any},\n}\n\nexport class MessagesQueue {\n private messages: DelayedMessage[] = [];\n public handler(name: ServerMessage, props: {[key: string]: any}) {\n this.messages.push({ name, props });\n }\n public sendTo(handler: MessageHandler) {\n for (const next of this.messages) {\n handler(next.name, next.props);\n }\n\n this.messages = [];\n }\n}\n","/* eslint-disable */\n/*\nMiniLZ4: Minimal LZ4 block decoding and encoding.\n\nbased off of node-lz4, https://github.com/pierrec/node-lz4\n\n====\nCopyright (c) 2012 Pierre Curto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n====\n\nchanges have the same license\n*/\n\n\nconst lz4: any = {};\n \n /**\n * Decode a block. Assumptions: input contains all sequences of a \n * chunk, output is large enough to receive the decoded data.\n * If the output buffer is too small, an error will be thrown.\n * If the returned value is negative, an error occured at the returned offset.\n *\n * @param {ArrayBufferView} input input data\n * @param {ArrayBufferView} output output data\n * @param {number=} sIdx\n * @param {number=} eIdx\n * @return {number} number of decoded bytes\n * @private\n */\n lz4.uncompress = function (input: Uint8Array, output: Uint8Array, sIdx: number, eIdx: number) {\n sIdx = sIdx || 0\n eIdx = eIdx || (input.length - sIdx)\n // Process each sequence in the incoming data\n for (var i = sIdx, n = eIdx, j = 0; i < n;) {\n var token = input[i++]\n \n // Literals\n var literals_length = (token >> 4)\n if (literals_length > 0) {\n // length of literals\n var l = literals_length + 240\n while (l === 255) {\n l = input[i++]\n literals_length += l\n }\n \n // Copy the literals\n var end = i + literals_length\n while (i < end) output[j++] = input[i++]\n \n // End of buffer?\n if (i === n) return j\n }\n \n // Match copy\n // 2 bytes offset (little endian)\n var offset = input[i++] | (input[i++] << 8)\n \n // XXX 0 is an invalid offset value\n if (offset === 0) return j\n if (offset > j) return -(i-2)\n \n // length of match copy\n var match_length = (token & 0xf)\n var l = match_length + 240\n while (l === 255) {\n l = input[i++]\n match_length += l\n }\n \n // Copy the match\n var pos = j - offset // position of the match copy in the current output\n var end = j + match_length + 4 // minmatch = 4\n while (j < end) output[j++] = output[pos++]\n }\n \n return j\n }\n \n var\n maxInputSize\t= 0x7E000000\n ,\tminMatch\t\t= 4\n // uint32() optimization\n ,\thashLog\t\t\t= 16\n ,\thashShift\t\t= (minMatch * 8) - hashLog\n ,\thashSize\t\t= 1 << hashLog\n \n ,\tcopyLength\t\t= 8\n ,\tlastLiterals\t= 5\n ,\tmfLimit\t\t\t= copyLength + minMatch\n ,\tskipStrength\t= 6\n \n ,\tmlBits \t\t= 4\n ,\tmlMask \t\t= (1 << mlBits) - 1\n ,\trunBits \t\t= 8 - mlBits\n ,\trunMask \t\t= (1 << runBits) - 1\n \n ,\thasher \t\t\t= /* XXX uint32( */ 2654435761 /* ) */\n \n assert(hashShift === 16);\n var hashTable = new Int16Array(1<<16);\n var empty = new Int16Array(hashTable.length);\n \n // CompressBound returns the maximum length of a lz4 block, given it's uncompressed length\n lz4.compressBound = function (isize: number) {\n return isize > maxInputSize\n ? 0\n : (isize + (isize/255) + 16) | 0\n }\n \n /** @param {number=} sIdx\n @param {number=} eIdx */\n lz4.compress = function (src: Uint8Array, dst: Uint8Array, sIdx: number, eIdx: number) {\n hashTable.set(empty);\n return compressBlock(src, dst, 0, sIdx || 0, eIdx || dst.length)\n }\n \n function compressBlock (src: Uint8Array, dst: Uint8Array, pos: number, sIdx: number, eIdx: number) {\n // XXX var Hash = uint32() // Reusable unsigned 32 bits integer\n var dpos = sIdx\n var dlen = eIdx - sIdx\n var anchor = 0\n \n if (src.length >= maxInputSize) throw new Error(\"input too large\")\n \n // Minimum of input bytes for compression (LZ4 specs)\n if (src.length > mfLimit) {\n var n = lz4.compressBound(src.length)\n if ( dlen < n ) throw Error(\"output too small: \" + dlen + \" < \" + n)\n \n var \n step = 1\n ,\tfindMatchAttempts = (1 << skipStrength) + 3\n // Keep last few bytes incompressible (LZ4 specs):\n // last 5 bytes must be literals\n ,\tsrcLength = src.length - mfLimit\n \n while (pos + minMatch < srcLength) {\n // Find a match\n // min match of 4 bytes aka sequence\n var sequenceLowBits = src[pos+1]<<8 | src[pos]\n var sequenceHighBits = src[pos+3]<<8 | src[pos+2]\n // compute hash for the current sequence\n var hash = Math.imul(sequenceLowBits | (sequenceHighBits << 16), hasher) >>> hashShift;\n /* XXX Hash.fromBits(sequenceLowBits, sequenceHighBits)\n .multiply(hasher)\n .shiftr(hashShift)\n .toNumber() */\n // get the position of the sequence matching the hash\n // NB. since 2 different sequences may have the same hash\n // it is double-checked below\n // do -1 to distinguish between initialized and uninitialized values\n var ref = hashTable[hash] - 1\n // save position of current sequence in hash table\n hashTable[hash] = pos + 1\n \n // first reference or within 64k limit or current sequence !== hashed one: no match\n if ( ref < 0 ||\n ((pos - ref) >>> 16) > 0 ||\n (\n ((src[ref+3]<<8 | src[ref+2]) != sequenceHighBits) ||\n ((src[ref+1]<<8 | src[ref]) != sequenceLowBits )\n )\n ) {\n // increase step if nothing found within limit\n step = findMatchAttempts++ >> skipStrength\n pos += step\n continue\n }\n \n findMatchAttempts = (1 << skipStrength) + 3\n \n // got a match\n var literals_length = pos - anchor\n var offset = pos - ref\n \n // minMatch already verified\n pos += minMatch\n ref += minMatch\n \n // move to the end of the match (>=minMatch)\n var match_length = pos\n while (pos < srcLength && src[pos] == src[ref]) {\n pos++\n ref++\n }\n \n // match length\n match_length = pos - match_length\n \n // token\n var token = match_length < mlMask ? match_length : mlMask\n \n // encode literals length\n if (literals_length >= runMask) {\n // add match length to the token\n dst[dpos++] = (runMask << mlBits) + token\n for (var len = literals_length - runMask; len > 254; len -= 255) {\n dst[dpos++] = 255\n }\n dst[dpos++] = len\n } else {\n // add match length to the token\n dst[dpos++] = (literals_length << mlBits) + token\n }\n \n // write literals\n for (var i = 0; i < literals_length; i++) {\n dst[dpos++] = src[anchor+i]\n }\n \n // encode offset\n dst[dpos++] = offset\n dst[dpos++] = (offset >> 8)\n \n // encode match length\n if (match_length >= mlMask) {\n match_length -= mlMask\n while (match_length >= 255) {\n match_length -= 255\n dst[dpos++] = 255\n }\n \n dst[dpos++] = match_length\n }\n \n anchor = pos\n }\n }\n \n // cannot compress input\n if (anchor == 0) return 0\n \n // Write last literals\n // encode literals length\n literals_length = src.length - anchor\n if (literals_length >= runMask) {\n // add match length to the token\n dst[dpos++] = (runMask << mlBits)\n for (var ln = literals_length - runMask; ln > 254; ln -= 255) {\n dst[dpos++] = 255\n }\n dst[dpos++] = ln\n } else {\n // add match length to the token\n dst[dpos++] = (literals_length << mlBits)\n }\n \n // write literals\n pos = anchor\n while (pos < src.length) {\n dst[dpos++] = src[pos++]\n }\n \n return dpos\n }\n \n lz4.CHUNK_SIZE = 2048; // musl libc does readaheads of 1024 bytes, so a multiple of that is a good idea\n \n \n \nexport const compressBound = lz4.compressBound;\nexport const compress = lz4.compress;\nexport const uncompress = lz4.uncompress;\n\nfunction assert(condition: boolean, message?: string) {\n if (!condition) {\n throw new Error(message || \"Assertion failed\");\n }\n}\n\n","import { CommandInterface, NetworkType, BackendOptions, DosConfig,\n InitFsEntry, InitFileEntry, PersistedSockdrives } from \"../emulators\";\nimport { CommandInterfaceEventsImpl } from \"../impl/ci-impl\";\nimport { Drive, sockdrive } from \"./sockdrive\";\n\nconst maxDataChunkSize = 4 * 1024 * 1024;\n\nexport type ClientMessage =\n \"wc-install\" |\n \"wc-run\" |\n \"wc-pack-fs-to-bundle\" |\n \"wc-add-key\" |\n \"wc-mouse-move\" |\n \"wc-mouse-button\" |\n \"wc-mouse-sync\" |\n \"wc-exit\" |\n \"wc-sync-sleep\" |\n \"wc-pause\" |\n \"wc-resume\" |\n \"wc-mute\" |\n \"wc-unmute\" |\n \"wc-connect\" |\n \"wc-disconnect\" |\n \"wc-backend-event\" |\n \"wc-asyncify-stats\" |\n \"wc-fs-tree\" |\n \"wc-fs-get-file\" |\n \"wc-send-data-chunk\" |\n \"wc-net-connected\" |\n \"wc-net-received\" |\n \"wc-sockdrive-opened\" |\n \"wc-sockdrive-new-range\" |\n \"wc-unload\" |\n \"wc-fs-delete-file\";\n\nexport type ServerMessage =\n \"ws-extract-progress\" |\n \"ws-ready\" |\n \"ws-server-ready\" |\n \"ws-frame-set-size\" |\n \"ws-update-lines\" |\n \"ws-log\" |\n \"ws-warn\" |\n \"ws-err\" |\n \"ws-stdout\" |\n \"ws-exit\" |\n \"ws-persist\" |\n \"ws-sound-init\" |\n \"ws-sound-push\" |\n \"ws-config\" |\n \"ws-sync-sleep\" |\n \"ws-connected\" |\n \"ws-disconnected\" |\n \"ws-asyncify-stats\" |\n \"ws-fs-tree\" |\n \"ws-send-data-chunk\" |\n \"ws-net-connect\" |\n \"ws-net-disconnect\" |\n \"ws-net-send\" |\n \"ws-sockdrive-open\" |\n \"ws-sockdrive-ready\" |\n \"ws-sockdrive-close\" |\n \"ws-sockdrive-load-range\" |\n \"ws-sockdrive-write-sector\" |\n \"ws-unload\" |\n \"ws-fs-delete-file\";\n\nexport type MessageHandler = (name: ServerMessage, props: { [key: string]: any }) => void;\n\nexport interface TransportLayer {\n sessionId: string;\n sendMessageToServer(name: ClientMessage,\n props: { [key: string]: any },\n transfer?: ArrayBuffer[]): void;\n initMessageHandler(handler: MessageHandler): void;\n exit?: () => void;\n}\n\nexport interface FrameLine {\n start: number;\n heapu8: Uint8Array;\n}\n\nexport interface DataChunk {\n type: \"ok\" | \"file\" | \"bundle\";\n name: string;\n data: ArrayBuffer | null;\n}\n\nexport interface AsyncifyStats {\n messageSent: number,\n messageReceived: number,\n messageFrame: number,\n messageSound: number,\n nonSkippableSleepCount: number,\n sleepCount: number,\n sleepTime: number,\n cycles: number,\n netSent: number,\n netRecv: number,\n driveIo: {\n url: string,\n preload: number,\n total: number,\n read: number,\n write: number,\n }[];\n}\n\nexport interface FsNode {\n name: string,\n size: number | null,\n nodes: FsNode[] | null,\n}\n\nexport class CommandInterfaceOverTransportLayer implements CommandInterface {\n private startedAt = Date.now();\n private exited = false;\n private frameWidth = 0;\n private frameHeight = 0;\n private rgb: Uint8Array | null = null;\n private rgba: Uint8Array | null = null;\n private freq = 0;\n private utf8Decoder = new TextDecoder();\n\n private init?: InitFsEntry[];\n private transport: TransportLayer;\n private ready: (err: Error | null) => void;\n\n private persistPromise?: Promise;\n private persistResolve?: (bundle: Uint8Array | PersistedSockdrives | null) => void;\n\n private exitPromise?: Promise;\n private exitResolve?: () => void;\n\n private eventsImpl = new CommandInterfaceEventsImpl();\n\n private keyMatrix: { [keyCode: number]: boolean } = {};\n\n private configPromise: Promise;\n private configResolve: (config: DosConfig) => void = () => {/**/};\n private panicMessages: string[] = [];\n\n private connectPromise: Promise | null = null;\n private connectResolve: () => void = () => {/**/};\n private connectReject: () => void = () => {/**/};\n\n private disconnectPromise: Promise | null = null;\n private disconnectResolve: () => void = () => {/**/};\n\n private asyncifyStatsPromise: Promise | null = null;\n private asyncifyStatsResolve: (stats: AsyncifyStats) => void = () => {/**/};\n\n private fsTreePromise: Promise | null = null;\n private fsTreeResolve: (fsRoot: FsNode) => void = () => {/**/};\n\n private fsGetFilePromise: { [name: string]: Promise } = {};\n private fsGetFileResolve: { [name: string]: (file: Uint8Array) => void } = {};\n private fsGetFileParts: { [name: string]: Uint8Array[] } = {};\n\n private fsDeleteFilePromise: Promise | null = null;\n private fsDeleteFileResolve: (deleted: boolean) => void = () => {/**/};\n\n private dataChunkPromise: { [name: string]: Promise } = {};\n private dataChunkResolve: { [name: string]: () => void } = {};\n private networkId = 0;\n private network: { [id: number]: WebSocket } = {};\n\n private sockdrives: { [handle: number]: Drive } = {};\n\n public options: BackendOptions;\n\n constructor(init: InitFsEntry[],\n transport: TransportLayer,\n ready: (err: Error | null) => void,\n options: BackendOptions) {\n this.options = options;\n this.init = init;\n this.transport = transport;\n this.ready = ready;\n this.configPromise = new Promise((resolve) => this.configResolve = resolve);\n this.transport.initMessageHandler(this.onServerMessage.bind(this));\n }\n\n private sendClientMessage(name: ClientMessage, props?: { [key: string]: any }, transfer?: [ArrayBuffer]) {\n props = props || {};\n props.sessionId = props.sessionId || this.transport.sessionId;\n this.transport.sendMessageToServer(name, props, transfer);\n }\n\n\n private onServerMessage(name: ServerMessage, props: { [key: string]: any }) {\n if (name === undefined || name.length < 3 ||\n name[0] !== \"w\" || name[1] !== \"s\" || name[2] !== \"-\") {\n return;\n }\n\n if (props === undefined || props.sessionId !== this.transport.sessionId) {\n return;\n }\n\n switch (name) {\n case \"ws-ready\": {\n const sendBundles = async () => {\n if (!this.init || this.init.length === 0) {\n return;\n }\n\n const encoder = new TextEncoder();\n const sendData = async (type: \"file\" | \"bundle\", name: string, contents: Uint8Array) => {\n await this.sendDataChunk({\n type,\n name,\n data: contents.buffer,\n });\n\n await this.sendDataChunk({\n type,\n name,\n data: null,\n });\n };\n\n let bundleIndex = 0;\n for (const next of this.init) {\n if (ArrayBuffer.isView(next)) {\n await sendData(\"bundle\", bundleIndex + \"\", next);\n bundleIndex++;\n } else if (typeof next === \"string\") {\n await sendData(\"file\", \".jsdos/dosbox.conf\", encoder.encode(next));\n } else {\n const fileEntry = next as InitFileEntry;\n const dosConfig = next as DosConfig;\n\n if (dosConfig.jsdosConf?.version !== undefined) {\n await sendData(\"file\", \".jsdos/dosbox.conf\",\n encoder.encode(dosConfig.dosboxConf));\n await sendData(\"file\", \".jsdos/jsdos.json\",\n encoder.encode(JSON.stringify(dosConfig.jsdosConf, null, 2)));\n } else if (fileEntry.path !== undefined) {\n await sendData(\"file\", fileEntry.path, fileEntry.contents);\n } else {\n console.error(\"Unknown init part\", next);\n }\n }\n }\n };\n\n sendBundles()\n .then(() => {\n this.sendClientMessage(\"wc-run\", { token: this.options.token });\n })\n .catch((e) => {\n this.onErr(\"panic\", \"Can't send bundles to backend: \" + e.message);\n console.error(e);\n })\n .finally(() => {\n delete this.init;\n });\n } break;\n case \"ws-server-ready\": {\n if (this.panicMessages.length > 0) {\n if (this.transport.exit !== undefined) {\n this.transport.exit();\n }\n this.ready(new Error(JSON.stringify(this.panicMessages)));\n } else {\n this.ready(null);\n }\n delete (this as any).ready;\n } break;\n case \"ws-frame-set-size\": {\n this.onFrameSize(props.width, props.height);\n } break;\n case \"ws-update-lines\": {\n this.onFrameLines(props.lines, props.rgba);\n } break;\n case \"ws-exit\": {\n this.onExit();\n } break;\n case \"ws-log\": {\n // eslint-disable-next-line\n this.onLog(props.tag, props.message);\n } break;\n case \"ws-warn\": {\n // eslint-disable-next-line\n this.onWarn(props.tag, props.message);\n } break;\n case \"ws-err\": {\n // eslint-disable-next-line\n this.onErr(props.tag, props.message);\n } break;\n case \"ws-stdout\": {\n this.onStdout(props.message);\n } break;\n case \"ws-persist\": {\n this.onPersist(props.bundle ?? props.sockdrives ?? null);\n } break;\n case \"ws-sound-init\": {\n this.onSoundInit(props.freq);\n } break;\n case \"ws-sound-push\": {\n this.onSoundPush(props.samples);\n } break;\n case \"ws-config\": {\n this.onConfig({\n dosboxConf: this.utf8Decoder.decode(props.dosboxConf),\n jsdosConf: JSON.parse(props.jsdosConf),\n });\n } break;\n case \"ws-sync-sleep\": {\n this.sendClientMessage(\"wc-sync-sleep\", props);\n } break;\n case \"ws-connected\": {\n this.connectResolve();\n this.connectPromise = null;\n this.connectResolve = () => {/**/};\n this.connectReject = () => {/**/};\n this.eventsImpl.fireNetworkConnected(props.networkType, props.address);\n } break;\n case \"ws-disconnected\": {\n if (this.connectPromise !== null) {\n this.connectReject();\n this.connectPromise = null;\n this.connectResolve = () => {/**/};\n this.connectReject = () => {/**/};\n } else {\n this.disconnectResolve();\n this.disconnectPromise = null;\n this.disconnectResolve = () => {/**/};\n }\n this.eventsImpl.fireNetworkDisconnected(props.networkType);\n } break;\n case \"ws-extract-progress\": {\n if (this.options.onExtractProgress) {\n this.options.onExtractProgress(props.index, props.file, props.extracted, props.count);\n }\n } break;\n case \"ws-asyncify-stats\": {\n props.driveIo = [];\n for (const drive of Object.values(this.sockdrives)) {\n props.driveIo.push({\n url: drive.info.url,\n preload: drive.info.preloadSizeInBytes,\n total: drive.info.sizeInBytes,\n read: drive.info.readInBytes,\n write: drive.info.writeInBytes,\n });\n }\n this.asyncifyStatsResolve(props as AsyncifyStats);\n this.asyncifyStatsResolve = () => {/**/};\n this.asyncifyStatsPromise = null;\n } break;\n case \"ws-fs-tree\": {\n this.fsTreeResolve(props.fsTree as FsNode);\n this.fsTreeResolve = () => {/**/};\n this.fsTreePromise = null;\n } break;\n case \"ws-fs-delete-file\": {\n this.fsDeleteFileResolve(props.deleted);\n this.fsDeleteFileResolve = () => {/**/};\n this.fsDeleteFilePromise = null;\n } break;\n case \"ws-send-data-chunk\": {\n const chunk: DataChunk = props.chunk;\n const key = this.dataChunkKey(chunk);\n if (chunk.type === \"ok\") {\n if (this.dataChunkPromise[key] !== undefined) {\n this.dataChunkResolve[key]();\n delete this.dataChunkPromise[key];\n delete this.dataChunkResolve[key];\n }\n } else if (chunk.type === \"file\") {\n if (chunk.data === null) {\n const file = this.mergeChunks(this.fsGetFileParts[chunk.name]);\n this.fsGetFileResolve[chunk.name](file);\n delete this.fsGetFilePromise[chunk.name];\n delete this.fsGetFileResolve[chunk.name];\n } else {\n this.fsGetFileParts[chunk.name].push(new Uint8Array(chunk.data));\n }\n } else {\n console.log(\"Unknown chunk type:\", chunk.type);\n }\n } break;\n case \"ws-net-connect\": {\n this.networkId += 1;\n const networkId = this.networkId;\n const socket = new WebSocket(props.address);\n socket.binaryType = \"arraybuffer\";\n socket.addEventListener(\"error\", (e) => {\n console.error(\"Can't connect to\", props.address);\n this.sendClientMessage(\"wc-net-connected\", { networkId: -1 });\n });\n socket.addEventListener(\"open\", () => {\n this.network[networkId] = socket;\n this.sendClientMessage(\"wc-net-connected\", { networkId });\n });\n socket.addEventListener(\"message\", (message) => {\n this.sendClientMessage(\"wc-net-received\", {\n networkId,\n data: message.data,\n }, [message.data]);\n });\n } break;\n case \"ws-net-send\": {\n const socket = this.network[props.networkId];\n if (socket) {\n socket.send(props.data);\n }\n } break;\n case \"ws-net-disconnect\": {\n const socket = this.network[props.networkId];\n delete this.network[props.networkId];\n if (socket) {\n socket.close();\n }\n } break;\n case \"ws-sockdrive-open\": {\n const handle = props.handle;\n let url =\n props.url\n .replace(\"wss://sockdrive.js-dos.com:8001/dos.zone/\",\n \"https://br.cdn.dos.zone/sockdrive-qcow2/dos.zone-\")\n .replace(\"wss://sockdrive.js-dos.com:8001/system/\",\n \"https://br.cdn.dos.zone/sockdrive-qcow2/system-\");\n if (url.endsWith(\"/\")) {\n url = url.slice(0, -1);\n }\n sockdrive(url, (range, buffer) => {\n this.sendClientMessage(\"wc-sockdrive-new-range\", {\n handle: handle,\n range: range,\n buffer,\n });\n }).then((drive) => {\n this.sockdrives[props.handle] = drive;\n const emptyRanges = Array.from(drive.info.dropped_ranges);\n this.sendClientMessage(\"wc-sockdrive-opened\", {\n handle: handle,\n size: drive.info.size,\n heads: drive.info.heads,\n cylinders: drive.info.cylinders,\n sectors: drive.info.sectors,\n sectorSize: drive.info.sector_size,\n aheadRange: drive.info.ahead_read,\n emptyRangesCount: drive.info.dropped_ranges.length,\n emptyRanges,\n });\n }).catch((e: Error) => {\n this.onErr(\"panic\", \"Can't open sockdrive(\" + url + \"): \" + e.message);\n console.error(e);\n\n this.sendClientMessage(\"wc-sockdrive-opened\", {\n handle: handle,\n size: 0,\n heads: 0,\n cylinders: 0,\n sectors: 0,\n sectorSize: 0,\n aheadRange: 0,\n emptyRangesCount: 0,\n emptyRanges: [],\n });\n });\n } break;\n case \"ws-sockdrive-ready\": {\n this.sockdrives[props.handle].ready();\n } break;\n case \"ws-sockdrive-load-range\": {\n this.sockdrives[props.handle].readRangeAsync(props.range);\n } break;\n case \"ws-sockdrive-write-sector\": {\n this.sockdrives[props.handle].write(props.sector, props.data);\n } break;\n case \"ws-sockdrive-close\": {\n delete this.sockdrives[props.handle];\n } break;\n case \"ws-unload\": {\n this.eventsImpl.fireUnload().finally(() => {\n this.sendClientMessage(\"wc-unload\");\n });\n } break;\n default: {\n // eslint-disable-next-line\n console.log(\"Unknown server message (ws):\", name);\n } break;\n }\n }\n\n private onConfig(config: DosConfig) {\n this.configResolve(config);\n }\n\n private onFrameSize(width: number, height: number) {\n if (this.frameWidth === width && this.frameHeight === height) {\n return;\n }\n\n this.frameWidth = width;\n this.frameHeight = height;\n this.rgb = new Uint8Array(width * height * 3);\n this.eventsImpl.fireFrameSize(width, height);\n }\n\n private onFrameLines(lines: FrameLine[], rgbaPtr: number) {\n for (const line of (lines as FrameLine[])) {\n this.rgb!.set(line.heapu8, line.start * this.frameWidth * 3);\n }\n\n this.eventsImpl.fireFrame(this.rgb, this.rgba);\n }\n\n private onSoundInit(freq: number) {\n this.freq = freq;\n }\n\n private onSoundPush(samples: Float32Array) {\n this.eventsImpl.fireSoundPush(samples);\n }\n\n private onLog(tag: string, message: string) {\n this.eventsImpl.fireMessage(\"log\", \"[\" + tag + \"]\" + message);\n }\n\n private onWarn(tag: string, message: string) {\n this.eventsImpl.fireMessage(\"warn\", \"[\" + tag + \"]\" + message);\n }\n\n private onErr(tag: string, message: string) {\n if (tag === \"panic\") {\n this.panicMessages.push(message);\n console.error(\"[\" + tag + \"]\" + message);\n }\n this.eventsImpl.fireMessage(\"error\", \"[\" + tag + \"]\" + message);\n }\n\n private onStdout(message: string) {\n this.eventsImpl.fireStdout(message);\n }\n\n public config() {\n return this.configPromise;\n }\n\n public width() {\n return this.frameWidth;\n }\n\n public height() {\n return this.frameHeight;\n }\n\n public soundFrequency() {\n return this.freq;\n }\n\n public screenshot(): Promise {\n if (this.rgb !== null || this.rgba !== null) {\n const rgba = new Uint8ClampedArray(this.frameWidth * this.frameHeight * 4);\n const frame = (this.rgb !== null ? this.rgb : this.rgba) as Uint8Array;\n\n let frameOffset = 0;\n let rgbaOffset = 0;\n\n while (rgbaOffset < rgba.length) {\n rgba[rgbaOffset++] = frame[frameOffset++];\n rgba[rgbaOffset++] = frame[frameOffset++];\n rgba[rgbaOffset++] = frame[frameOffset++];\n rgba[rgbaOffset++] = 255;\n\n if (frame.length === rgba.length) {\n frameOffset++;\n }\n }\n\n return Promise.resolve(new ImageData(rgba, this.frameWidth, this.frameHeight));\n } else {\n return Promise.reject(new Error(\"No frame received\"));\n }\n }\n\n public simulateKeyPress(...keyCodes: number[]) {\n const timeMs = Date.now() - this.startedAt;\n keyCodes.forEach((keyCode) => this.addKey(keyCode, true, timeMs));\n keyCodes.forEach((keyCode) => this.addKey(keyCode, false, timeMs + 16));\n }\n\n public sendKeyEvent(keyCode: number, pressed: boolean) {\n this.addKey(keyCode, pressed, Date.now() - this.startedAt);\n }\n\n // public for test\n public addKey(keyCode: number, pressed: boolean, timeMs: number) {\n const keyPressed = this.keyMatrix[keyCode] === true;\n if (keyPressed === pressed) {\n return;\n }\n this.keyMatrix[keyCode] = pressed;\n this.sendClientMessage(\"wc-add-key\", { key: keyCode, pressed, timeMs });\n }\n\n public sendMouseMotion(x: number, y: number) {\n this.sendClientMessage(\"wc-mouse-move\", { x, y, relative: false, timeMs: Date.now() - this.startedAt });\n }\n\n public sendMouseRelativeMotion(x: number, y: number) {\n this.sendClientMessage(\"wc-mouse-move\", { x, y, relative: true, timeMs: Date.now() - this.startedAt });\n }\n\n public sendMouseButton(button: number, pressed: boolean) {\n this.sendClientMessage(\"wc-mouse-button\", { button, pressed, timeMs: Date.now() - this.startedAt });\n }\n\n public sendMouseSync() {\n this.sendClientMessage(\"wc-mouse-sync\", { timeMs: Date.now() - this.startedAt });\n }\n\n public sendBackendEvent(payload: any) {\n this.sendClientMessage(\"wc-backend-event\", { json: JSON.stringify(payload) });\n }\n\n\n public async persist(optOnlyChanges?: boolean): Promise {\n const onlyChanges = optOnlyChanges ?? true;\n if (this.persistPromise !== undefined) {\n return this.persistPromise;\n }\n\n const sockdrives = await this.persistSockdrives();\n if (sockdrives !== null && onlyChanges) {\n return Promise.resolve(sockdrives);\n }\n\n const persistPromise = new Promise((resolve) => {\n this.persistResolve = resolve;\n });\n this.persistPromise = persistPromise;\n this.sendClientMessage(\"wc-pack-fs-to-bundle\", {\n onlyChanges,\n });\n\n return persistPromise;\n }\n\n private onPersist(bundle: Uint8Array | PersistedSockdrives | null) {\n if (this.persistResolve) {\n this.persistResolve(bundle);\n delete this.persistPromise;\n delete this.persistResolve;\n }\n }\n\n public pause() {\n this.sendClientMessage(\"wc-pause\");\n }\n\n public resume() {\n this.sendClientMessage(\"wc-resume\");\n }\n\n public mute() {\n this.sendClientMessage(\"wc-mute\");\n }\n\n public unmute() {\n this.sendClientMessage(\"wc-unmute\");\n }\n\n public exit(): Promise {\n if (this.exited) {\n return Promise.resolve();\n }\n if (this.exitPromise !== undefined) {\n return this.exitPromise;\n }\n this.exitPromise = new Promise((resolve) => this.exitResolve = resolve);\n this.exitPromise.then(() => {\n this.events().fireExit();\n });\n\n this.resume();\n for (const next of Object.values(this.network)) {\n next.close();\n }\n this.network = {};\n this.sendClientMessage(\"wc-exit\");\n\n return this.exitPromise;\n }\n\n private onExit() {\n if (!this.exited) {\n this.exited = true;\n if (this.transport.exit !== undefined) {\n this.transport.exit();\n }\n if (this.exitResolve) {\n this.exitResolve();\n delete this.exitPromise;\n delete this.exitResolve;\n }\n }\n }\n\n public events() {\n return this.eventsImpl;\n }\n\n public networkConnect(networkType: NetworkType, address: string): Promise {\n if (this.connectPromise !== null || this.disconnectPromise !== null) {\n return Promise.reject(new Error(\"Already prefoming connection or disconnection...\"));\n }\n\n this.connectPromise = new Promise((resolve, reject) => {\n if (!address.startsWith(\"wss://\") && !address.startsWith(\"ws://\")) {\n address = (window.location.protocol === \"http:\" ? \"ws://\" : \"wss://\") + address;\n }\n\n this.connectResolve = resolve;\n this.connectReject = reject;\n this.sendClientMessage(\"wc-connect\", {\n networkType,\n address,\n });\n });\n return this.connectPromise;\n }\n\n public networkDisconnect(networkType: NetworkType): Promise {\n if (this.connectPromise !== null || this.disconnectPromise !== null) {\n return Promise.reject(new Error(\"Already prefoming connection or disconnection...\"));\n }\n\n this.disconnectPromise = new Promise((resolve) => {\n this.disconnectResolve = resolve;\n\n this.sendClientMessage(\"wc-disconnect\", {\n networkType,\n });\n });\n return this.disconnectPromise;\n }\n\n public asyncifyStats(): Promise {\n if (this.asyncifyStatsPromise !== null) {\n return this.asyncifyStatsPromise;\n }\n\n const promise = new Promise((resolve) => {\n this.asyncifyStatsResolve = resolve;\n });\n\n this.asyncifyStatsPromise = promise;\n this.sendClientMessage(\"wc-asyncify-stats\", {});\n\n return promise;\n }\n\n public fsTree(): Promise {\n if (this.fsTreePromise !== null) {\n return this.fsTreePromise;\n }\n\n const promise = new Promise((resolve) => {\n this.fsTreeResolve = resolve;\n });\n this.fsTreePromise = promise;\n this.sendClientMessage(\"wc-fs-tree\");\n\n return promise;\n }\n\n async fsReadFile(file: string): Promise {\n if (this.fsGetFilePromise[file] !== undefined) {\n throw new Error(\"fsGetFile should not be called twice for same file\");\n }\n\n const promise = new Promise((resolve) => {\n this.fsGetFileResolve[file] = resolve;\n });\n this.fsGetFilePromise[file] = promise;\n this.fsGetFileParts[file] = [];\n this.sendClientMessage(\"wc-fs-get-file\", {\n file,\n });\n\n return promise;\n }\n\n async fsWriteFile(file: string, contents: ReadableStream | Uint8Array): Promise {\n if (ArrayBuffer.isView(contents)) {\n await this.sendDataChunk({\n type: \"file\",\n name: file,\n data: contents.buffer,\n });\n } else {\n const reader = contents.getReader();\n while (true) {\n const result = await reader.read();\n if (result.value !== undefined) {\n await this.sendDataChunk({\n type: \"file\",\n name: file,\n data: result.value.buffer,\n });\n }\n if (result.done) {\n break;\n }\n }\n }\n\n await this.sendDataChunk({\n type: \"file\",\n name: file,\n data: null,\n });\n }\n\n async fsDeleteFile(file: string): Promise {\n if (this.fsDeleteFilePromise !== null) {\n throw new Error(\"fsDeleteFile should not be called while previous one is not resolved\");\n }\n\n const promise = new Promise((resolve) => {\n this.fsDeleteFileResolve = resolve;\n });\n this.fsDeleteFilePromise = promise;\n this.sendClientMessage(\"wc-fs-delete-file\", { file });\n return promise;\n }\n\n async persistSockdrives(): Promise {\n if (Object.keys(this.sockdrives).length === 0) {\n return null;\n }\n\n const drives = [];\n // eslint-disable-next-line no-unused-vars\n for (const [_, drive] of Object.entries(this.sockdrives)) {\n const persist = await drive.persist();\n if (persist !== null) {\n drives.push({\n url: drive.info.url,\n persist,\n });\n }\n }\n return {\n drives,\n };\n }\n\n private async sendDataChunk(chunk: DataChunk): Promise {\n if (chunk.data === null || chunk.data.byteLength <= maxDataChunkSize) {\n return this.sendFullDataChunk(chunk);\n } else {\n let pos = 0;\n while (pos < chunk.data.byteLength) {\n await this.sendFullDataChunk({\n type: chunk.type,\n name: chunk.name,\n data: chunk.data.slice(pos, Math.min(chunk.data.byteLength, pos + maxDataChunkSize)),\n });\n pos += maxDataChunkSize;\n }\n }\n }\n\n private async sendFullDataChunk(chunk: DataChunk): Promise {\n const key = this.dataChunkKey(chunk);\n if (this.dataChunkPromise[key] !== undefined) {\n throw new Error(\"sendDataChunk should be accepted before sending new one\");\n }\n const promise = new Promise((resolve) => {\n this.dataChunkResolve[key] = resolve;\n });\n this.dataChunkPromise[key] = promise;\n this.sendClientMessage(\"wc-send-data-chunk\", {\n chunk,\n }, chunk.data === null ? undefined : [chunk.data]);\n return promise;\n }\n\n private dataChunkKey(chunk: DataChunk) {\n return chunk.name;\n }\n\n private mergeChunks(parts: Uint8Array[]): Uint8Array {\n if (parts.length === 1) {\n return parts[0];\n }\n\n let length = 0;\n for (const next of parts) {\n length += next.byteLength;\n }\n const merged = new Uint8Array(length);\n length = 0;\n for (const next of parts) {\n merged.set(next, length);\n length += next.byteLength;\n }\n return merged;\n }\n}\n","export const RAW_STORE = \"raw\";\nexport const WRITE_STORE = \"write\";\n\nexport interface Store {\n put: (key: number, data: Uint8Array, store: string) => Promise;\n get: (key: number, store: string) => Promise;\n keys: (store: string) => Promise;\n each: (key: number[], store: string, callback: (key: number, data: Uint8Array) => void) => Promise;\n close: () => void;\n}\n\nexport class NoStore implements Store {\n public owner = \"\";\n\n public close() {\n }\n\n public put(key: number, data: Uint8Array, store: string): Promise {\n return Promise.resolve();\n }\n\n public get(range: number, store: string): Promise {\n return Promise.resolve(null);\n }\n\n public keys(store: string): Promise {\n return Promise.resolve([]);\n }\n\n public each(keys: number[], store: string, callback: (key: number, data: Uint8Array) => void) {\n return Promise.resolve();\n }\n}\n\nclass DbStore implements Store {\n private indexedDB: IDBFactory;\n private db: IDBDatabase | null = null;\n\n constructor(\n url: string,\n onready: (cache: Store) => void,\n onerror: (msg: string) => void) {\n this.indexedDB = (typeof window === \"undefined\" ? undefined : window.indexedDB ||\n (window as any).mozIndexedDB ||\n (window as any).webkitIndexedDB || (window as any).msIndexedDB) as any;\n\n if (!this.indexedDB) {\n onerror(\"IndexedDB is not supported on this host\");\n return;\n }\n\n try {\n const openRequest = this.indexedDB.open(\"sockdrive (\" + url + \")\", 1);\n openRequest.onerror = () => {\n onerror(\"Can't open cache database: \" + openRequest.error?.message);\n };\n openRequest.onsuccess = () => {\n this.db = openRequest.result;\n onready(this);\n };\n openRequest.onupgradeneeded = () => {\n try {\n this.db = openRequest.result;\n this.db.onerror = () => {\n onerror(\"Can't upgrade cache database\");\n };\n\n this.db.createObjectStore(RAW_STORE)\n .createIndex(\"range\", \"\", { multiEntry: false });\n this.db.createObjectStore(WRITE_STORE)\n .createIndex(\"sector\", \"\", { multiEntry: false });\n } catch (e) {\n onerror(\"Can't upgrade cache database\");\n }\n };\n } catch (e: any) {\n onerror(\"Can't open cache database: \" + e.message);\n }\n }\n\n public close() {\n if (this.db !== null) {\n this.db.close();\n this.db = null;\n }\n }\n\n public put(key: number, data: Uint8Array, store: string): Promise {\n return new Promise((resolve) => {\n const transaction = this.db!.transaction(store, \"readwrite\");\n const request = transaction.objectStore(store).put(new Blob([data.buffer]), key);\n request.onerror = (e) => {\n console.error(e);\n resolve();\n };\n request.onsuccess = () => {\n resolve();\n };\n });\n }\n\n public get(key: number, store: string): Promise {\n return new Promise((resolve) => {\n const transaction = this.db!.transaction(store, \"readonly\");\n const request = transaction.objectStore(store).get(key) as IDBRequest;\n request.onerror = (e) => {\n console.error(e);\n resolve(null);\n };\n request.onsuccess = () => {\n if (request.result) {\n (request.result as Blob).arrayBuffer().then((buffer) => {\n resolve(new Uint8Array(buffer));\n }).catch((e) => {\n console.error(e);\n resolve(null);\n });\n } else {\n resolve(null);\n }\n };\n });\n }\n\n public keys(store: string): Promise {\n return new Promise((resolve) => {\n if (this.db === null) {\n resolve([]);\n return;\n }\n\n const transaction = this.db.transaction(store, \"readonly\");\n const request = transaction.objectStore(store).getAllKeys();\n request.onerror = (e) => {\n console.error(e);\n resolve([]);\n };\n request.onsuccess = (event) => {\n if (request.result) {\n resolve(request.result as number[]);\n } else {\n resolve([]);\n }\n };\n });\n }\n\n public each(keys: number[], storeName: string, callback: (key: number, data: Uint8Array) => void) {\n return new Promise((resolve) => {\n if (this.db === null) {\n resolve();\n return;\n }\n\n const transaction = this.db.transaction(storeName, \"readonly\");\n const store = transaction.objectStore(storeName);\n\n const readOne = async (key: number) => {\n return new Promise((resolve, reject) => {\n const request = store.get(key);\n request.onerror = (e) => {\n reject(e);\n };\n request.onsuccess = (event) => {\n (request.result as Blob).arrayBuffer()\n .then((buffer) => {\n resolve(new Uint8Array(buffer));\n }).catch(reject);\n };\n });\n };\n\n (async () => {\n for (const key of keys) {\n const data = await readOne(key);\n callback(key, data);\n }\n resolve();\n })().catch((e) => {\n console.error(e);\n resolve();\n });\n });\n }\n}\n\nexport function getStore(owner: string): Promise {\n return new Promise((resolve) => {\n new DbStore(owner, resolve, (msg: string) => {\n console.error(\"Can't open IndexedDB cache\", msg);\n resolve(new NoStore());\n });\n });\n}\n","import { getStore, RAW_STORE, WRITE_STORE } from \"./sockdrive-store\";\nimport { compress, compressBound, uncompress } from \"./mini-lz4\";\n\nconst BATCH_SIZE = 1;\n\ninterface DriveInfo {\n ahead_read: number;\n range_count: number;\n dropped_ranges: number[];\n preload_ranges: number[] | \"_\";\n small_ranges: number[];\n cylinders: number;\n heads: number;\n sectors: number;\n sector_size: number;\n size: number;\n name: string;\n url: string;\n\n preloadSizeInBytes: number;\n sizeInBytes: number;\n readInBytes: number;\n writeInBytes: number;\n}\n\nexport interface Drive {\n info: DriveInfo;\n range(sector: number): number;\n readRangeAsync(range: number): void;\n ready(): void;\n write(sector: number, buffer: Uint8Array): void;\n persist(): Promise;\n}\n\nexport async function sockdrive(url: string, _onNewRange: (range: number, buffer: Uint8Array) => void): Promise {\n const store = await getStore(url);\n const response = await fetch(url + \"/sockdrive.metaj\");\n const info = await response.json() as DriveInfo;\n info.url = url;\n info.readInBytes = 0;\n info.writeInBytes = 0;\n\n if (info.small_ranges === undefined) {\n info.small_ranges = [];\n }\n\n let storedSectors = new Map>();\n const serializedSectors = await store.get(0, WRITE_STORE);\n if (serializedSectors) {\n info.writeInBytes = serializedSectors.length;\n storedSectors = deserializeSectors(serializedSectors);\n }\n\n const storeKeys = new Set();\n for (const key of await store.keys(RAW_STORE)) {\n storeKeys.add(key);\n }\n\n if (info.small_ranges.find((range) => !storeKeys.has(range)) !== undefined) {\n const preload = new Uint8Array(await (await fetch(url + \"/preload.raw\")).arrayBuffer());\n\n for (let i = 0; i < info.small_ranges.length; i++) {\n const range = info.small_ranges[i];\n storeKeys.add(range);\n await store.put(range, preload.slice(i * info.ahead_read, (i + 1) * info.ahead_read), RAW_STORE);\n };\n }\n\n const loaded = new Set();\n const droppedRanges: number[] = info.dropped_ranges;\n const emptyRanges: Set = new Set();\n info.dropped_ranges = [];\n for (const next of droppedRanges) {\n emptyRanges.add(next);\n if (!storedSectors.has(next)) {\n loaded.add(next);\n info.dropped_ranges.push(next);\n }\n }\n\n const loadQueue: number[] = [];\n const preloaded = new Set();\n if (info.preload_ranges !== \"_\") {\n for (const next of info.preload_ranges) {\n loadQueue.push(next);\n preloaded.add(next);\n }\n } else {\n for (let i = 0; i < info.range_count; i++) {\n if (!loaded.has(i) && !preloaded.has(i)) {\n loadQueue.push(i);\n }\n }\n }\n\n // validate queue\n {\n const invalidRanges = [];\n for (const range of loadQueue) {\n if (range < 0 || range >= info.range_count) {\n invalidRanges.push(range);\n }\n }\n if (invalidRanges.length > 0) {\n console.error(\"sockdrive-error: invalid ranges\", invalidRanges);\n for (const range of invalidRanges) {\n loadQueue.splice(loadQueue.indexOf(range), 1);\n }\n }\n }\n\n loadQueue.reverse();\n\n\n let rangesToLoad = loadQueue.length;\n for (let i = 0; i < info.range_count; i++) {\n if (!loaded.has(i) && !preloaded.has(i)) {\n rangesToLoad++;\n }\n }\n info.preloadSizeInBytes = loadQueue.length * info.ahead_read;\n info.sizeInBytes = rangesToLoad * info.ahead_read;\n\n function range(sector: number) {\n return Math.floor(sector * info.sector_size / info.ahead_read);\n };\n\n function mergeSectorsData(range: number, data: Uint8Array): Uint8Array {\n if (storedSectors.has(range)) {\n for (const [offset, sectorData] of storedSectors.get(range)!.entries()) {\n data.set(sectorData, offset * info.sector_size);\n }\n }\n\n return data;\n }\n\n function onNewRange(range: number, buffer: Uint8Array) {\n _onNewRange(range, mergeSectorsData(range, buffer));\n }\n\n async function loadRange(range: number) {\n try {\n if (emptyRanges.has(range)) {\n onNewRange(range, new Uint8Array(info.ahead_read));\n return;\n }\n\n if (storeKeys.has(range)) {\n const buffer = await store.get(range, RAW_STORE);\n if (buffer) {\n onNewRange(range, buffer);\n return;\n }\n }\n\n const response = await fetch(url + \"/\" + range + \".raw\");\n if (!response.ok) {\n throw new Error(\"Can't read range \" + range + \", network response code is \" + response.status);\n }\n const buffer = new Uint8Array(await response.arrayBuffer());\n await store.put(range, buffer, RAW_STORE);\n onNewRange(range, buffer);\n } catch (e) {\n console.error(\"Can't read range\", range, e);\n } finally {\n info.readInBytes += info.ahead_read;\n }\n }\n\n async function loadFromQueue() {\n const bach: Promise[] = [];\n while (loadQueue.length > 0 && bach.length < BATCH_SIZE) {\n const range = loadQueue.pop()!;\n if (!loaded.has(range)) {\n loaded.add(range);\n bach.push(loadRange(range));\n }\n }\n await Promise.all(bach);\n\n if (loadQueue.length > 0) {\n loadFromQueue().catch(console.error);\n }\n };\n\n function serializeSectors(sectors: Map>): Uint8Array {\n const sectorsData = new Map();\n\n for (const [range, rangeSectors] of sectors.entries()) {\n rangeSectors.forEach((data, sector) => {\n sectorsData.set(sector + range * info.ahead_read / info.sector_size, data);\n });\n }\n\n const chunksSize = info.sector_size + 4;\n const boundSize = compressBound(chunksSize);\n\n const uncompressedChunk = new Uint8Array(chunksSize);\n const u32uncompressedChunk = new Uint32Array(uncompressedChunk.buffer);\n\n const compressedChunk = new Uint8Array(boundSize);\n const chunks: Uint8Array[] = [];\n\n let total = 0;\n sectorsData.forEach((data, sector) => {\n u32uncompressedChunk[0] = sector;\n uncompressedChunk.set(data, 4);\n const compressedSize = compress(uncompressedChunk, compressedChunk, 0, compressedChunk.length);\n if (compressedSize <= 0 || compressedSize >= uncompressedChunk.length) {\n chunks.push(uncompressedChunk.slice(0));\n total += chunksSize;\n } else {\n chunks.push(compressedChunk.slice(0, compressedSize));\n total += compressedSize;\n }\n });\n\n const payload = new Uint8Array(total + sectorsData.size * 4 + 4);\n payload[0] = sectorsData.size;\n payload[1] = (sectorsData.size & 0x0000ff00) >> 8;\n payload[2] = (sectorsData.size & 0x00ff0000) >> 16;\n payload[3] = (sectorsData.size & 0xff000000) >> 24;\n\n\n let offset = 4;\n for (const chunk of chunks) {\n payload[offset] = chunk.length;\n payload[offset + 1] = (chunk.length & 0x0000ff00) >> 8;\n payload[offset + 2] = (chunk.length & 0x00ff0000) >> 16;\n payload[offset + 3] = (chunk.length & 0xff000000) >> 24;\n offset += 4;\n payload.set(chunk, offset);\n offset += chunk.length;\n }\n\n return payload;\n }\n\n function deserializeSectors(data: Uint8Array): Map> {\n const sectors = new Map>();\n const count = (data[0] & 0x000000ff) | ((data[1] << 8) & 0x0000ff00) |\n ((data[2] << 16) & 0x00ff0000) | ((data[3] << 24) & 0xff000000);\n const chunkSize = info.sector_size + 4;\n const uncompressedChunk = new Uint8Array(chunkSize);\n const u32uncompressedChunk = new Uint32Array(uncompressedChunk.buffer);\n\n let offset = 4;\n for (let i = 0; i < count; i++) {\n const compressedSize = (data[offset] & 0x000000ff) | ((data[offset + 1] << 8) & 0x0000ff00) |\n ((data[offset + 2] << 16) & 0x00ff0000) | ((data[offset + 3] << 24) & 0xff000000);\n offset += 4;\n const compressedChunk = data.slice(offset, offset + compressedSize);\n offset += compressedSize;\n\n\n let sector;\n let sectorData;\n if (compressedSize === chunkSize) {\n sector = new Uint32Array(compressedChunk.buffer)[0];\n sectorData = compressedChunk.slice(4);\n } else {\n const uncompressedSize = uncompress(compressedChunk, uncompressedChunk, 0, 0);\n if (uncompressedSize !== chunkSize) {\n console.error(\"Can't uncompress sectors data, size mismatch\",\n uncompressedSize, \"!==\", chunkSize, \"chunk\", i, \"offset\", offset);\n return new Map();\n }\n sector = u32uncompressedChunk[0];\n sectorData = uncompressedChunk.slice(4);\n }\n\n\n const rangeOfSector = range(sector);\n\n if (!sectors.has(rangeOfSector)) {\n sectors.set(rangeOfSector, new Map());\n }\n\n sectors.get(rangeOfSector)!.set(\n sector - (rangeOfSector * info.ahead_read) / info.sector_size,\n sectorData,\n );\n }\n\n return sectors;\n }\n\n (window as any).verifySectors = () => {\n if (storedSectors.size === 0) {\n return;\n }\n\n const serialized = serializeSectors(storedSectors);\n // Create a blob URL for downloading the serialized data\n const blob = new Blob([serialized], { type: \"application/octet-stream\" });\n const url = URL.createObjectURL(blob);\n console.log(\"Download serialized sectors:\", url);\n const deserialized = deserializeSectors(serialized);\n console.log(\"Comparing sectors and deserialized:\");\n\n // Compare sizes\n console.log(\"Original sectors size:\", storedSectors.size);\n console.log(\"Deserialized sectors size:\", deserialized.size);\n\n // Compare each range and sector\n storedSectors.forEach((rangeMap, rangeKey) => {\n const deserializedRange = deserialized.get(rangeKey);\n if (!deserializedRange) {\n console.error(`Range ${rangeKey} missing in deserialized data`);\n return;\n }\n\n rangeMap.forEach((sectorData, sectorKey) => {\n const deserializedSector = deserializedRange.get(sectorKey);\n if (!deserializedSector) {\n console.error(`Sector ${sectorKey} missing in range ${rangeKey}`);\n return;\n }\n\n // Compare sector data\n const match = sectorData.length === deserializedSector.length &&\n sectorData.every((val, i) => val === deserializedSector[i]);\n\n if (!match) {\n console.error(`Data mismatch in range ${rangeKey}, sector ${sectorKey}`);\n console.log(\"Original:\", sectorData);\n console.log(\"Deserialized:\", deserializedSector);\n }\n });\n });\n };\n\n return {\n info,\n range,\n readRangeAsync: async (range: number) => {\n if (!loaded.has(range)) {\n loaded.add(range);\n loadRange(range);\n }\n },\n ready: () => {\n loadFromQueue().catch(console.error);\n },\n write: (sector: number, buffer: Uint8Array) => {\n const rangeOfSector = range(sector);\n if (!storedSectors.has(rangeOfSector)) {\n storedSectors.set(rangeOfSector, new Map());\n }\n storedSectors.get(rangeOfSector)!.set(\n sector - (rangeOfSector * info.ahead_read) / info.sector_size,\n buffer);\n },\n persist: async () => {\n const serialized = serializeSectors(storedSectors);\n if (serialized.byteLength > 4) {\n return serialized;\n }\n return null;\n },\n };\n}\n"]}
\ No newline at end of file
diff --git a/public/madness/2026/doom/emulators/types/build.d.ts b/public/madness/2026/doom/emulators/types/build.d.ts
new file mode 100644
index 0000000..00b1846
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/build.d.ts
@@ -0,0 +1,28 @@
+export declare const Build: {
+ version: string;
+ buildSeed: number;
+ "wdosbox-x.wasm": {
+ size: number;
+ gzSize: number;
+ };
+ "wdosbox-x.js": {
+ size: number;
+ gzSize: number;
+ };
+ "wdosbox.wasm": {
+ size: number;
+ gzSize: number;
+ };
+ "wdosbox.js": {
+ size: number;
+ gzSize: number;
+ };
+ "wlibzip.wasm": {
+ size: number;
+ gzSize: number;
+ };
+ "wlibzip.js": {
+ size: number;
+ gzSize: number;
+ };
+};
diff --git a/public/madness/2026/doom/emulators/types/dos/bundle/dos-bundle.d.ts b/public/madness/2026/doom/emulators/types/dos/bundle/dos-bundle.d.ts
new file mode 100644
index 0000000..f8493a5
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/dos/bundle/dos-bundle.d.ts
@@ -0,0 +1,20 @@
+import { WasmModule } from "../../impl/modules";
+export interface DosArchiveSource {
+ url: string;
+ path: string;
+ type?: "zip";
+}
+export default class DosBundle {
+ dosboxConf: string;
+ jsdosConf: {
+ version: string;
+ };
+ sources: DosArchiveSource[];
+ private libzipWasm;
+ constructor(libzipWasm: WasmModule);
+ autoexec(...lines: string[]): DosBundle;
+ extract(url: string, path?: string, type?: "zip"): DosBundle;
+ extractAll(sources: DosArchiveSource[]): DosBundle;
+ toUint8Array(overwriteConfig?: boolean): Promise;
+}
+export declare const defaultConfig: string;
diff --git a/public/madness/2026/doom/emulators/types/dos/dosbox/ts/direct.d.ts b/public/madness/2026/doom/emulators/types/dos/dosbox/ts/direct.d.ts
new file mode 100644
index 0000000..11626b7
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/dos/dosbox/ts/direct.d.ts
@@ -0,0 +1,3 @@
+import { WasmModule } from "../../../impl/modules";
+import { TransportLayer } from "../../../protocol/protocol";
+export declare function dosDirect(wasmModule: WasmModule, sessionId: string): Promise;
diff --git a/public/madness/2026/doom/emulators/types/dos/dosbox/ts/worker.d.ts b/public/madness/2026/doom/emulators/types/dos/dosbox/ts/worker.d.ts
new file mode 100644
index 0000000..58cbd76
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/dos/dosbox/ts/worker.d.ts
@@ -0,0 +1,3 @@
+import { WasmModule } from "../../../impl/modules";
+import { TransportLayer } from "../../../protocol/protocol";
+export declare function dosWorker(workerUrl: string, wasmModule: WasmModule, sessionId: string): Promise;
diff --git a/public/madness/2026/doom/emulators/types/emulators.d.ts b/public/madness/2026/doom/emulators/types/emulators.d.ts
new file mode 100644
index 0000000..3ed5af8
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/emulators.d.ts
@@ -0,0 +1,84 @@
+import DosBundle from "./dos/bundle/dos-bundle";
+import { AsyncifyStats, TransportLayer, FsNode } from "./protocol/protocol";
+export interface DosConfig {
+ dosboxConf: string;
+ jsdosConf: {
+ version: string;
+ };
+}
+export declare enum NetworkType {
+ NETWORK_DOSBOX_IPX = 0
+}
+export interface BackendOptions {
+ token?: string | undefined;
+ onExtractProgress?: (bundleIndex: number, file: string, extracted: number, total: number) => void;
+}
+export type InitBundleEntry = Uint8Array;
+export interface InitFileEntry {
+ path: string;
+ contents: Uint8Array;
+}
+export type InitFsEntry = InitBundleEntry | InitFileEntry | DosConfig | string;
+export type InitFs = InitFsEntry | InitFsEntry[];
+export type PersistedSockdrives = {
+ drives: {
+ url: string;
+ persist: Uint8Array;
+ }[];
+} | null;
+export interface Emulators {
+ pathPrefix: string;
+ pathSuffix: string;
+ version: string;
+ wdosboxJs: string;
+ bundle: () => Promise;
+ bundleConfig: (bundle: InitBundleEntry) => Promise;
+ bundleUpdateConfig: (bundle: InitBundleEntry, config: DosConfig) => Promise;
+ dosboxNode: (init: InitFs, options?: BackendOptions) => Promise;
+ dosboxDirect: (init: InitFs, options?: BackendOptions) => Promise;
+ dosboxWorker: (init: InitFs, options?: BackendOptions) => Promise;
+ dosboxXNode: (init: InitFs, options?: BackendOptions) => Promise;
+ dosboxXDirect: (init: InitFs, options?: BackendOptions) => Promise;
+ dosboxXWorker: (init: InitFs, options?: BackendOptions) => Promise;
+ backend: (init: InitFs, transportLayer: TransportLayer, options?: BackendOptions) => Promise;
+}
+export interface CommandInterface {
+ config: () => Promise;
+ height: () => number;
+ width: () => number;
+ soundFrequency: () => number;
+ screenshot: () => Promise;
+ pause: () => void;
+ resume: () => void;
+ mute: () => void;
+ unmute: () => void;
+ exit: () => Promise;
+ simulateKeyPress: (...keyCodes: number[]) => void;
+ sendKeyEvent: (keyCode: number, pressed: boolean) => void;
+ sendMouseMotion: (x: number, y: number) => void;
+ sendMouseRelativeMotion: (x: number, y: number) => void;
+ sendMouseButton: (button: number, pressed: boolean) => void;
+ sendMouseSync: () => void;
+ sendBackendEvent: (event: any) => void;
+ persist(onlyChanges?: boolean): Promise;
+ events(): CommandInterfaceEvents;
+ networkConnect(networkType: NetworkType, address: string): Promise;
+ networkDisconnect(networkType: NetworkType): Promise;
+ asyncifyStats(): Promise;
+ fsTree(): Promise;
+ fsReadFile(file: string): Promise;
+ fsWriteFile(file: string, contents: ReadableStream | Uint8Array): Promise;
+ fsDeleteFile(file: string): Promise;
+}
+export type MessageType = "log" | "warn" | "error" | string;
+export interface CommandInterfaceEvents {
+ onStdout: (consumer: (message: string) => void) => void;
+ onFrameSize: (consumer: (width: number, height: number) => void) => void;
+ onFrame: (consumer: (rgb: Uint8Array | null, rgba: Uint8Array | null) => void) => void;
+ onSoundPush: (consumer: (samples: Float32Array) => void) => void;
+ onExit: (consumer: () => void) => void;
+ onMessage: (consumer: (msgType: MessageType, ...args: any[]) => void) => void;
+ onNetworkConnected: (consumer: (networkType: NetworkType, address: string) => void) => void;
+ onNetworkDisconnected: (consumer: (networkType: NetworkType) => void) => void;
+ onUnload: (consumer: () => Promise) => void;
+}
diff --git a/public/madness/2026/doom/emulators/types/http.d.ts b/public/madness/2026/doom/emulators/types/http.d.ts
new file mode 100644
index 0000000..525b56b
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/http.d.ts
@@ -0,0 +1,9 @@
+export interface XhrOptions {
+ method?: string;
+ progress?: (total: number, loaded: number) => void;
+ data?: string;
+ responseType?: XMLHttpRequestResponseType;
+}
+export declare const httpRequest: typeof XhrRequest;
+declare function XhrRequest(url: string, options: XhrOptions): Promise;
+export {};
diff --git a/public/madness/2026/doom/emulators/types/impl/ci-impl.d.ts b/public/madness/2026/doom/emulators/types/impl/ci-impl.d.ts
new file mode 100644
index 0000000..f66ace5
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/impl/ci-impl.d.ts
@@ -0,0 +1,32 @@
+import { CommandInterfaceEvents, MessageType, NetworkType } from "../emulators";
+export declare class CommandInterfaceEventsImpl implements CommandInterfaceEvents {
+ private onStdoutConsumers;
+ private delayedStdout;
+ private onFrameSizeConsumers;
+ private onFrameConsumers;
+ private onSoundPushConsumers;
+ private onExitConsumers;
+ private onMessageConsumers;
+ private delayedMessages;
+ private onNetworkConnectedConsumers;
+ private onNetworkDisconnectedConsumers;
+ private onUnloadConsumers;
+ onStdout: (consumer: (message: string) => void) => void;
+ onFrameSize: (consumer: (width: number, height: number) => void) => void;
+ onFrame: (consumer: (rgb: Uint8Array | null, rgba: Uint8Array | null) => void) => void;
+ onSoundPush: (consumer: (samples: Float32Array) => void) => void;
+ onExit: (consumer: () => void) => void;
+ onMessage: (consumer: (msgType: MessageType, ...args: any[]) => void) => void;
+ onNetworkConnected(consumer: (networkType: NetworkType, address: string) => void): void;
+ onNetworkDisconnected(consumer: (networkType: NetworkType) => void): void;
+ onUnload: (consumer: () => Promise) => void;
+ fireStdout: (message: string) => void;
+ fireFrameSize: (width: number, height: number) => void;
+ fireFrame: (rgb: Uint8Array | null, rgba: Uint8Array | null) => void;
+ fireSoundPush: (samples: Float32Array) => void;
+ fireExit: () => void;
+ fireMessage: (msgType: MessageType, ...args: any[]) => void;
+ fireNetworkConnected: (networkType: NetworkType, address: string) => void;
+ fireNetworkDisconnected: (networkType: NetworkType) => void;
+ fireUnload: () => Promise;
+}
diff --git a/public/madness/2026/doom/emulators/types/impl/emulators-impl.d.ts b/public/madness/2026/doom/emulators/types/impl/emulators-impl.d.ts
new file mode 100644
index 0000000..2d6db7b
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/impl/emulators-impl.d.ts
@@ -0,0 +1,27 @@
+import { Emulators, CommandInterface, BackendOptions, DosConfig, InitFs, InitBundleEntry } from "../emulators";
+import { IWasmModules } from "./modules";
+import DosBundle from "../dos/bundle/dos-bundle";
+import { TransportLayer } from "../protocol/protocol";
+declare class EmulatorsImpl implements Emulators {
+ pathPrefix: string;
+ pathSuffix: string;
+ version: string;
+ wdosboxJs: string;
+ wdosboxxJs: string;
+ private wasmModulesPromise?;
+ bundle(): Promise;
+ bundleConfig(bundle: InitBundleEntry): Promise;
+ bundleUpdateConfig(bundle: InitBundleEntry, config: DosConfig): Promise;
+ dosboxNode(init: InitFs, options?: BackendOptions): Promise;
+ dosboxDirect(init: InitFs, options?: BackendOptions): Promise;
+ dosboxWorker(init: InitFs, options?: BackendOptions): Promise;
+ dosboxXNode(init: InitFs, options?: BackendOptions): Promise;
+ dosboxXDirect(init: InitFs, options?: BackendOptions): Promise;
+ dosboxXWorker(init: InitFs, options?: BackendOptions): Promise;
+ backend(init: InitFs, transportLayer: TransportLayer, options?: BackendOptions): Promise;
+ wasmModules(): Promise;
+ dosDirect(init: InitFs): Promise;
+ dosWorker(init: InitFs): Promise;
+}
+declare const emulators: EmulatorsImpl;
+export default emulators;
diff --git a/public/madness/2026/doom/emulators/types/impl/modules.d.ts b/public/madness/2026/doom/emulators/types/impl/modules.d.ts
new file mode 100644
index 0000000..b0e79c2
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/impl/modules.d.ts
@@ -0,0 +1,42 @@
+export interface WasmModule {
+ instantiate: (module?: any) => Promise;
+}
+export interface IWasmModules {
+ libzip: () => Promise;
+ dosbox: () => Promise;
+ dosboxx: () => Promise;
+}
+interface Globals {
+ exports: {
+ [moduleName: string]: any;
+ };
+ module: {
+ exports?: () => void;
+ };
+ compiled: {
+ [moduleName: string]: Promise;
+ };
+}
+declare class Host {
+ wasmSupported: boolean;
+ globals: Globals;
+ constructor();
+}
+export declare const host: Host;
+export declare class WasmModulesImpl implements IWasmModules {
+ private pathPrefix;
+ private pathSuffix;
+ private wdosboxJs;
+ private wdosboxxJs;
+ private libzipPromise?;
+ private dosboxPromise?;
+ private dosboxxPromise?;
+ wasmSupported: boolean;
+ constructor(pathPrefix: string, pathSuffix: string, wdosboxJs: string, wdosboxxJs: string);
+ libzip(): Promise;
+ dosbox(): Promise;
+ dosboxx(): Promise;
+ private loadModule;
+}
+export declare function loadWasmModule(url: string, moduleName: string, onprogress: (stage: string, total: number, loaded: number) => void): Promise;
+export {};
diff --git a/public/madness/2026/doom/emulators/types/libzip/libzip.d.ts b/public/madness/2026/doom/emulators/types/libzip/libzip.d.ts
new file mode 100644
index 0000000..f6946a3
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/libzip/libzip.d.ts
@@ -0,0 +1,16 @@
+export default class LibZip {
+ module: any;
+ private home;
+ constructor(module: any, home?: string);
+ zipFromFs(changedAfterMs?: number): Promise;
+ zipToFs(zipArchive: Uint8Array, path?: string, filter?: string): Promise;
+ writeFile(file: string, body: ArrayBuffer | Uint8Array | string): void;
+ readFile(file: string, encoding?: "binary" | "utf8"): Promise;
+ exists(file: string): boolean;
+ destroy(): any;
+ private normalizeFilename;
+ private createPath;
+ private chdirToHome;
+ private chdir;
+ zipAddFile(archive: string, file: string): Promise;
+}
diff --git a/public/madness/2026/doom/emulators/types/protocol/messages-queue.d.ts b/public/madness/2026/doom/emulators/types/protocol/messages-queue.d.ts
new file mode 100644
index 0000000..5acf917
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/protocol/messages-queue.d.ts
@@ -0,0 +1,8 @@
+import { ServerMessage, MessageHandler } from "./protocol";
+export declare class MessagesQueue {
+ private messages;
+ handler(name: ServerMessage, props: {
+ [key: string]: any;
+ }): void;
+ sendTo(handler: MessageHandler): void;
+}
diff --git a/public/madness/2026/doom/emulators/types/protocol/mini-lz4.d.ts b/public/madness/2026/doom/emulators/types/protocol/mini-lz4.d.ts
new file mode 100644
index 0000000..79c1e10
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/protocol/mini-lz4.d.ts
@@ -0,0 +1,3 @@
+export declare const compressBound: any;
+export declare const compress: any;
+export declare const uncompress: any;
diff --git a/public/madness/2026/doom/emulators/types/protocol/protocol.d.ts b/public/madness/2026/doom/emulators/types/protocol/protocol.d.ts
new file mode 100644
index 0000000..3c71815
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/protocol/protocol.d.ts
@@ -0,0 +1,136 @@
+import { CommandInterface, NetworkType, BackendOptions, DosConfig, InitFsEntry, PersistedSockdrives } from "../emulators";
+import { CommandInterfaceEventsImpl } from "../impl/ci-impl";
+export type ClientMessage = "wc-install" | "wc-run" | "wc-pack-fs-to-bundle" | "wc-add-key" | "wc-mouse-move" | "wc-mouse-button" | "wc-mouse-sync" | "wc-exit" | "wc-sync-sleep" | "wc-pause" | "wc-resume" | "wc-mute" | "wc-unmute" | "wc-connect" | "wc-disconnect" | "wc-backend-event" | "wc-asyncify-stats" | "wc-fs-tree" | "wc-fs-get-file" | "wc-send-data-chunk" | "wc-net-connected" | "wc-net-received" | "wc-sockdrive-opened" | "wc-sockdrive-new-range" | "wc-unload" | "wc-fs-delete-file";
+export type ServerMessage = "ws-extract-progress" | "ws-ready" | "ws-server-ready" | "ws-frame-set-size" | "ws-update-lines" | "ws-log" | "ws-warn" | "ws-err" | "ws-stdout" | "ws-exit" | "ws-persist" | "ws-sound-init" | "ws-sound-push" | "ws-config" | "ws-sync-sleep" | "ws-connected" | "ws-disconnected" | "ws-asyncify-stats" | "ws-fs-tree" | "ws-send-data-chunk" | "ws-net-connect" | "ws-net-disconnect" | "ws-net-send" | "ws-sockdrive-open" | "ws-sockdrive-ready" | "ws-sockdrive-close" | "ws-sockdrive-load-range" | "ws-sockdrive-write-sector" | "ws-unload" | "ws-fs-delete-file";
+export type MessageHandler = (name: ServerMessage, props: {
+ [key: string]: any;
+}) => void;
+export interface TransportLayer {
+ sessionId: string;
+ sendMessageToServer(name: ClientMessage, props: {
+ [key: string]: any;
+ }, transfer?: ArrayBuffer[]): void;
+ initMessageHandler(handler: MessageHandler): void;
+ exit?: () => void;
+}
+export interface FrameLine {
+ start: number;
+ heapu8: Uint8Array;
+}
+export interface DataChunk {
+ type: "ok" | "file" | "bundle";
+ name: string;
+ data: ArrayBuffer | null;
+}
+export interface AsyncifyStats {
+ messageSent: number;
+ messageReceived: number;
+ messageFrame: number;
+ messageSound: number;
+ nonSkippableSleepCount: number;
+ sleepCount: number;
+ sleepTime: number;
+ cycles: number;
+ netSent: number;
+ netRecv: number;
+ driveIo: {
+ url: string;
+ preload: number;
+ total: number;
+ read: number;
+ write: number;
+ }[];
+}
+export interface FsNode {
+ name: string;
+ size: number | null;
+ nodes: FsNode[] | null;
+}
+export declare class CommandInterfaceOverTransportLayer implements CommandInterface {
+ private startedAt;
+ private exited;
+ private frameWidth;
+ private frameHeight;
+ private rgb;
+ private rgba;
+ private freq;
+ private utf8Decoder;
+ private init?;
+ private transport;
+ private ready;
+ private persistPromise?;
+ private persistResolve?;
+ private exitPromise?;
+ private exitResolve?;
+ private eventsImpl;
+ private keyMatrix;
+ private configPromise;
+ private configResolve;
+ private panicMessages;
+ private connectPromise;
+ private connectResolve;
+ private connectReject;
+ private disconnectPromise;
+ private disconnectResolve;
+ private asyncifyStatsPromise;
+ private asyncifyStatsResolve;
+ private fsTreePromise;
+ private fsTreeResolve;
+ private fsGetFilePromise;
+ private fsGetFileResolve;
+ private fsGetFileParts;
+ private fsDeleteFilePromise;
+ private fsDeleteFileResolve;
+ private dataChunkPromise;
+ private dataChunkResolve;
+ private networkId;
+ private network;
+ private sockdrives;
+ options: BackendOptions;
+ constructor(init: InitFsEntry[], transport: TransportLayer, ready: (err: Error | null) => void, options: BackendOptions);
+ private sendClientMessage;
+ private onServerMessage;
+ private onConfig;
+ private onFrameSize;
+ private onFrameLines;
+ private onSoundInit;
+ private onSoundPush;
+ private onLog;
+ private onWarn;
+ private onErr;
+ private onStdout;
+ config(): Promise;
+ width(): number;
+ height(): number;
+ soundFrequency(): number;
+ screenshot(): Promise;
+ simulateKeyPress(...keyCodes: number[]): void;
+ sendKeyEvent(keyCode: number, pressed: boolean): void;
+ addKey(keyCode: number, pressed: boolean, timeMs: number): void;
+ sendMouseMotion(x: number, y: number): void;
+ sendMouseRelativeMotion(x: number, y: number): void;
+ sendMouseButton(button: number, pressed: boolean): void;
+ sendMouseSync(): void;
+ sendBackendEvent(payload: any): void;
+ persist(optOnlyChanges?: boolean): Promise;
+ private onPersist;
+ pause(): void;
+ resume(): void;
+ mute(): void;
+ unmute(): void;
+ exit(): Promise;
+ private onExit;
+ events(): CommandInterfaceEventsImpl;
+ networkConnect(networkType: NetworkType, address: string): Promise;
+ networkDisconnect(networkType: NetworkType): Promise;
+ asyncifyStats(): Promise;
+ fsTree(): Promise;
+ fsReadFile(file: string): Promise;
+ fsWriteFile(file: string, contents: ReadableStream | Uint8Array): Promise;
+ fsDeleteFile(file: string): Promise;
+ persistSockdrives(): Promise;
+ private sendDataChunk;
+ private sendFullDataChunk;
+ private dataChunkKey;
+ private mergeChunks;
+}
diff --git a/public/madness/2026/doom/emulators/types/protocol/sockdrive-store.d.ts b/public/madness/2026/doom/emulators/types/protocol/sockdrive-store.d.ts
new file mode 100644
index 0000000..3c27eb6
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/protocol/sockdrive-store.d.ts
@@ -0,0 +1,18 @@
+export declare const RAW_STORE = "raw";
+export declare const WRITE_STORE = "write";
+export interface Store {
+ put: (key: number, data: Uint8Array, store: string) => Promise;
+ get: (key: number, store: string) => Promise;
+ keys: (store: string) => Promise;
+ each: (key: number[], store: string, callback: (key: number, data: Uint8Array) => void) => Promise;
+ close: () => void;
+}
+export declare class NoStore implements Store {
+ owner: string;
+ close(): void;
+ put(key: number, data: Uint8Array, store: string): Promise;
+ get(range: number, store: string): Promise;
+ keys(store: string): Promise;
+ each(keys: number[], store: string, callback: (key: number, data: Uint8Array) => void): Promise;
+}
+export declare function getStore(owner: string): Promise;
diff --git a/public/madness/2026/doom/emulators/types/protocol/sockdrive.d.ts b/public/madness/2026/doom/emulators/types/protocol/sockdrive.d.ts
new file mode 100644
index 0000000..6721251
--- /dev/null
+++ b/public/madness/2026/doom/emulators/types/protocol/sockdrive.d.ts
@@ -0,0 +1,28 @@
+interface DriveInfo {
+ ahead_read: number;
+ range_count: number;
+ dropped_ranges: number[];
+ preload_ranges: number[] | "_";
+ small_ranges: number[];
+ cylinders: number;
+ heads: number;
+ sectors: number;
+ sector_size: number;
+ size: number;
+ name: string;
+ url: string;
+ preloadSizeInBytes: number;
+ sizeInBytes: number;
+ readInBytes: number;
+ writeInBytes: number;
+}
+export interface Drive {
+ info: DriveInfo;
+ range(sector: number): number;
+ readRangeAsync(range: number): void;
+ ready(): void;
+ write(sector: number, buffer: Uint8Array): void;
+ persist(): Promise;
+}
+export declare function sockdrive(url: string, _onNewRange: (range: number, buffer: Uint8Array) => void): Promise;
+export {};
diff --git a/public/madness/2026/doom/emulators/wdosbox-x.js b/public/madness/2026/doom/emulators/wdosbox-x.js
new file mode 100644
index 0000000..dd81975
--- /dev/null
+++ b/public/madness/2026/doom/emulators/wdosbox-x.js
@@ -0,0 +1,54 @@
+var WDOSBOXX = (() => {
+ var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;
+ if (typeof __filename != 'undefined') _scriptName = _scriptName || __filename;
+ return (
+async function(moduleArg = {}) {
+ var moduleRtn;
+
+var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";if(ENVIRONMENT_IS_NODE){}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}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(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{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=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var runtimeInitialized=false;var runtimeExited=false;var dataURIPrefix="data:application/octet-stream;base64,";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];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(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();FS.ignorePermissions=false;TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){___funcs_on_exit();callRuntimeCallbacks(__ATEXIT__);FS.quit();TTY.shutdown();runtimeExited=true}function postRun(){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)}var runDependencies=0;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";if(runtimeInitialized){___trap()}var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){var f="wdosbox-x.wasm";if(!isDataURI(f)){return locateFile(f)}return f}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmExports=Asyncify.instrumentWasmExports(wasmExports);wasmMemory=wasmExports["Ee"];updateMemoryViews();wasmTable=wasmExports["Ge"];addOnInit(wasmExports["Fe"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}var tempDouble;var tempI64;var ASM_CONSTS={1993991:()=>{Module.paused=true},1994019:()=>{Module.paused=false},1994048:()=>{Module.performance=Module.performance||(typeof performance==="object"?performance:Date)},1994153:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},1994300:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},1994534:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){if(typeof navigator.userActivation==="undefined"){autoResumeAudioContext(SDL2.audioContext)}}}return SDL2.audioContext===undefined?-1:0},1995086:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},1995154:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined;SDL2.capture.silenceBuffer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},1996847:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}if(SDL2.audio.silenceTimer!==undefined){clearInterval(SDL2.audio.silenceTimer);SDL2.audio.silenceTimer=undefined;SDL2.audio.silenceBuffer=undefined}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"]);if(SDL2.audioContext.state==="suspended"){SDL2.audio.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.audio.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){if(typeof navigator.userActivation!=="undefined"){if(navigator.userActivation.hasBeenActive){SDL2.audioContext.resume()}}SDL2.audio.currentOutputBuffer=SDL2.audio.silenceBuffer;dynCall("vi",$2,[$3]);SDL2.audio.currentOutputBuffer=undefined};SDL2.audio.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3)}},1998022:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var buf=$0>>>2;var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;iwindow.innerWidth,2000152:()=>window.innerHeight,2000183:($0,$1,$2)=>{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},2002639:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},2002722:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}}};function syncSleep(ms,nonSkippable){if(!Module.sync_sleep){throw new Error("Async environment does not exists");return}const now=Date.now();if(Asyncify.state===0){if(!nonSkippable&&now-Module.last_wakeup<24){return}if(nonSkippable){Module.wakeUpAt=Date.now()+ms;++Module.nonskippable_sleep_count}++Module.sleep_count;Module.cycles+=Module._getAndResetCycles();Module.sleep_started_at=now}else if(Asyncify.state===2){Module.sleep_time+=now-Module.sleep_started_at;Module.last_wakeup=now;if(Asyncify.asyncPromiseHandlers===null){Asyncify.whenDone().catch(Module.uncaughtAsyncify)}}Asyncify.handleSleep(Module.sync_sleep)}function initTimeoutSyncSleep(){Module.alive=true;Module.nonskippable_sleep_count=0;Module.sleep_count=0;Module.sleep_time=0;Module.cycles=0;Module.last_wakeup=Date.now();Module.sync_sleep=function(wakeUp){setTimeout(function(){if(!Module.alive){return}if(Module.paused===true){var checkIntervalId=setInterval(function(){if(Module.paused===false){clearInterval(checkIntervalId);wakeUp()}},16)}else{wakeUp()}})};Module.destroyAsyncify=function(){Module.alive=false;delete Module.sync_sleep};Module.uncaughtAsyncify=function(error){console.error(error);Module.destroyAsyncify();Module.uncaught(error)};return true}function initMessageSyncSleep(worker){Module.alive=true;Module.nonskippable_sleep_count=0;Module.sleep_count=0;Module.sleep_time=0;Module.cycles=0;Module.last_wakeup=Date.now();function postWakeUpMessage(){if(worker){postMessage({name:"ws-sync-sleep",props:{sessionId:Module.sessionId}})}else{window.postMessage({name:"ws-sync-sleep",props:{sessionId:Module.sessionId}},"*")}}Module.sync_sleep=function(wakeUp){if(Module.sync_wakeUp){throw new Error("Trying to sleep in sleeping state!");return}Module.sync_wakeUp=wakeUp;if(Module.paused===true){var checkIntervalId=setInterval(function(){if(Module.paused===false){clearInterval(checkIntervalId);postWakeUpMessage()}},16)}else{postWakeUpMessage()}};Module.receive=function(ev){var data=ev.data;if(ev.data.name==="wc-sync-sleep"&&Module.sessionId===ev.data.props.sessionId){if(Module.wakeUpAt!==undefined&&Date.now(){const deleted=Module._fsDeleteFile(cstr)===1;sendMessage("ws-fs-delete-file",{deleted})})}break;case"wc-send-data-chunk":{function mergeChunks(parts){if(parts.length===1){return parts[0]}let length=0;for(const next of parts){length+=next.byteLength}const merged=new Uint8Array(length);length=0;for(const next of parts){merged.set(next,length);length+=next.byteLength}return merged}function createPath(parts,begin,end){let path="/home/web_user";for(let i=begin;i>8;Module.HEAPU8[offset+2]=(value&16711680)>>16;Module.HEAPU8[offset+3]=(value&4278190080)>>24}Module["_em_client_sockdrive_opened"](data.props.handle,data.props.size,data.props.heads,data.props.cylinders,data.props.sectors,data.props.sectorSize,data.props.aheadRange,data.props.emptyRangesCount,ptr);Module["_free"](ptr)}break;case"wc-sockdrive-new-range":{const ptr=Module["_malloc"](data.props.buffer.length);Module.HEAPU8.set(data.props.buffer,ptr);Module["_em_client_sockdrive_new_range"](data.props.handle,data.props.range,ptr);Module["_free"](ptr)}break;case"wc-unload":{if(Module.wsUnloadResolve){Module.wsUnloadResolve()}else{console.error("wc-unload recived but no awaiting promises")}}break;default:{console.log("Unknown client message (wc): "+JSON.stringify(data))}break}}if(Module.postMessage){Module.messageHandler=messageHandler;Module.cleanup=function(){}}else if(worker){onmessage=messageHandler;Module.cleanup=function(){}}else{window.addEventListener("message",messageHandler,{passive:true});Module.cleanup=function(){window.removeEventListener("message",messageHandler)}}sendMessage("ws-ready",{})}function emsc_ws_client_frame_set_size(width,height){Module.sendMessage("ws-frame-set-size",{width,height})}function emsc_start_frame_update(){Module.frame_update_lines=[];Module.frame_update_lines_transferable=[]}function emsc_add_frame_line(start,ptr,len){var bpp3=Module.HEAPU8.slice(ptr,ptr+len);Module.frame_update_lines.push({start,heapu8:bpp3});Module.frame_update_lines_transferable.push(bpp3.buffer)}function emsc_end_frame_update(){if(Module.frame_update_lines.length>0){++Module.messageFrame;Module.sendMessage("ws-update-lines",{lines:Module.frame_update_lines},Module.frame_update_lines_transferable)}delete Module.frame_update_lines;delete Module.frame_update_lines_transferable}function emsc_ws_client_sound_init(freq){Module.sendMessage("ws-sound-init",{freq})}function emsc_ws_client_sound_push(samples,num_samples){if(num_samples<=0){return}++Module.messageSound;const heapf32=Module.HEAPF32.slice(samples/4,samples/4+num_samples);Module.sendMessage("ws-sound-push",{samples:heapf32},[heapf32.buffer])}function emsc_ws_exit_runtime(){Module.exit=function(){Module.sendMessage("ws-exit")}}function ws_client_stdout(data,amount){Module.sendMessage("ws-stdout",{message:UTF8ToString(data,amount)})}function ws_client_log(tag,message){Module.sendMessage("ws-log",{tag:UTF8ToString(tag),message:UTF8ToString(message)})}function ws_client_warn(tag,message){Module.sendMessage("ws-warn",{tag:UTF8ToString(tag),message:UTF8ToString(message)})}function ws_client_error(tag,message){Module.sendMessage("ws-err",{tag:UTF8ToString(tag),message:UTF8ToString(message)})}function ws_client_network_connected(networkType,address){Module.sendMessage("ws-connected",{networkType,address:UTF8ToString(address)})}function ws_client_network_disconnected(networkType){Module.sendMessage("ws-disconnected",{networkType})}function emsc_exit_runtime(){if(!Module.exit){var message="ERR! exitRuntime called without request"+", asyncify state: "+Asyncify.state;Module.err(message);return}Module.exit();Module.cleanup()}function emsc_extract_bundle_to_fs(){Module.FS.chdir("/home/web_user");let index;Module.libzip_progress=function(file,extracted,count){Module.sendMessage("ws-extract-progress",{index,file,extracted,count})};let dosboxConf=null;for(index=0;indexnew Promise(resolve=>{if(Module.wsNetConnectResolve){console.error("wsOpen is called while another one is still processing");return-1}Module.wsNetConnectResolve=id=>{delete Module.wsNetConnectResolve;if(id!==-1){Module.wsNetIds[id]=true}resolve(id)};Module.sendMessage("ws-net-connect",{address:UTF8ToString(address)})}))}function __asyncjs__em_unload(){return Asyncify.handleAsync(async()=>new Promise(resolve=>{Module.sendMessage("ws-unload");Module.wsUnloadResolve=()=>{delete Module.wsUnloadResolve;resolve()}}))}function em_net_send(networkId,datap,len){if(Module.wsNetIds[networkId]){const data=Module.HEAPU8.slice(datap,datap+len);Module.sendMessage("ws-net-send",{networkId,data},[data.buffer])}return Module.wsNetIds[networkId]===true}function em_net_disconnect(networkId){if(Module.wsNetIds[networkId]){Module.sendMessage("ws-net-disconnect",{networkId});delete Module.wsNetIds[networkId]}}function em_server_sockdrive_open(handle,url){Module.sendMessage("ws-sockdrive-open",{handle,url:UTF8ToString(url)})}function em_server_sockdrive_ready(handle){Module.sendMessage("ws-sockdrive-ready",{handle})}function em_server_sockdrive_close(handle){Module.sendMessage("ws-sockdrive-close",{handle})}function em_server_sockdrive_load_range(handle,range){Module.sendMessage("ws-sockdrive-load-range",{handle,range})}function em_server_sockdrive_write_sector(handle,sector,buffer){const data=HEAPU8.slice(buffer,buffer+Module.sockdriveSectorSize);Module.sendMessage("ws-sockdrive-write-sector",{handle,sector,data},[data.buffer])}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var noExitRuntime=Module["noExitRuntime"]||false;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":abort("to do setValue(i64) use WASM_BIGINT");case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var ___call_sighandler=(fp,sig)=>(a1=>dynCall_vi(fp,a1))(sig);var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(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:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>crypto.getRandomValues(view)};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[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.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=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{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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;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};var 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 FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(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;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}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.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(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(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>>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(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(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.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(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);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};asyncLoad.isAsync=true;var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_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){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url).then(processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},filesystems:null,syncFSRequests:0,readFiles:{},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>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)}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){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},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){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}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|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;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(...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){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){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,opts,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);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){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}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)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,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;iFS.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,llseek:()=>0});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 randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);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",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}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)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;_fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}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||[])}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}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}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;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,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]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];return 0},writeStatFs(buf,stats){HEAP32[buf+4>>2]=stats.bsize;HEAP32[buf+40>>2]=stats.bsize;HEAP32[buf+8>>2]=stats.blocks;HEAP32[buf+12>>2]=stats.bfree;HEAP32[buf+16>>2]=stats.bavail;HEAP32[buf+20>>2]=stats.files;HEAP32[buf+24>>2]=stats.ffree;HEAP32[buf+28>>2]=stats.fsid;HEAP32[buf+44>>2]=stats.flags;HEAP32[buf+36>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);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}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function ___syscall_ftruncate64(fd,length_low,length_high){var length=convertI32PairToI53Checked(length_low,length_high);try{if(isNaN(length))return 61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{SYSCALLS.writeStatFs(buf,FS.statfs(SYSCALLS.getStr(path)));return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("");var runtimeKeepaliveCounter=0;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_system=command=>{if(ENVIRONMENT_IS_NODE){if(!command)return 1;var cmdstr=UTF8ToString(command);if(!cmdstr.length)return 0;var cp=require("child_process");var ret=cp.spawnSync(cmdstr,[],{shell:true,stdio:"inherit"});var _W_EXITCODE=(ret,sig)=>ret<<8|sig;if(ret.status===null){var signalToNumber=sig=>{switch(sig){case"SIGHUP":return 1;case"SIGQUIT":return 3;case"SIGFPE":return 8;case"SIGKILL":return 9;case"SIGALRM":return 14;case"SIGTERM":return 15;default:return 2}};return _W_EXITCODE(0,signalToNumber(ret.signal))}return _W_EXITCODE(ret.status,0)}if(!command)return 0;return-52};function __gmtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time_low,time_high,tmPtr){var time=convertI32PairToI53Checked(time_low,time_high);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var setTempRet0=val=>__emscripten_tempret_set(val);var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return setTempRet0((tempDouble=ret,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)),ret>>>0};var timers={};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;if(!keepRuntimeAlive()){exitRuntime()}_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(runtimeExited){return}if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(runtimeExited||ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var _emscripten_get_now=()=>performance.now();var __setitimer_js=(which,timeout_ms)=>{if(timers[which]){clearTimeout(timers[which].id);delete timers[which]}if(!timeout_ms)return 0;var id=setTimeout(()=>{delete timers[which];callUserCallback(()=>__emscripten_timeout(which,_emscripten_get_now()))},timeout_ms);timers[which]={id,timeout_ms};return 0};var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffsetDate.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision_low,ignored_precision_high,ptime){var ignored_precision=convertI32PairToI53Checked(ignored_precision_low,ignored_precision_high);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);tempI64=[nsec>>>0,(tempDouble=nsec,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptime>>2]=tempI64[0],HEAP32[ptime+4>>2]=tempI64[1];return 0}var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};var safeSetTimeout=(func,timeout)=>{runtimeKeepalivePush();return setTimeout(()=>{runtimeKeepalivePop();callUserCallback(func)},timeout)};var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);var img=new Image;img.onload=()=>{var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Browser.preloadedImages[name]=canvas;URL.revokeObjectURL(url);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);onerror?.()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;onload?.(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.slice(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Module["canvas"])return Module["ctx"];var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){Module["ctx"]=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.slice(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);var GLctx;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_EXT_polygon_offset_clamp=ctx=>!!(ctx.extPolygonOffsetClamp=ctx.getExtension("EXT_polygon_offset_clamp"));var webgl_enable_EXT_clip_control=ctx=>!!(ctx.extClipControl=ctx.getExtension("EXT_clip_control"));var webgl_enable_WEBGL_polygon_mode=ctx=>!!(ctx.webglPolygonMode=ctx.getExtension("WEBGL_polygon_mode"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_clip_control","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_polygon_offset_clamp","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw","WEBGL_polygon_mode"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,unpackRowLength:0,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>2]=id}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module["ctx"]=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]?.GLctx?.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_multi_draw(GLctx);webgl_enable_EXT_polygon_offset_clamp(GLctx);webgl_enable_EXT_clip_control(GLctx);webgl_enable_WEBGL_polygon_mode(GLctx);webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}getEmscriptenSupportedExtensions(GLctx).forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Browser.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}};var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};var _eglGetError=()=>EGL.errorCode;var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!GLctx){EGL.setErrorCode(12290)}else if(GLctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){MainLoop.remainingBlockers=next}else{next=next+.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0){MainLoop.tickStartTime=_emscripten_get_now()}MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}MainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var MainLoop={running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining){if(remaining=MainLoop.nextRAF){MainLoop.nextRAF+=1e3/60}}var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=MainLoop.fakeRequestAnimationFrame;RAF(func)}};var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){return 1}if(!MainLoop.running){runtimeKeepalivePush();MainLoop.running=true}if(mode==0){MainLoop.scheduler=function MainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)};MainLoop.method="timeout"}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)};MainLoop.method="rAF"}else if(mode==2){if(typeof MainLoop.setImmediate=="undefined"){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{MainLoop.setImmediate=setImmediate}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)};MainLoop.method="immediate"}return 0};var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};var _eglWaitGL=_eglWaitClient;var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[emAsmAddr](...args)};var _emscripten_asm_const_int_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_asm_const_ptr_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var JSEvents={memcpy(target,src,size){HEAP8.set(HEAP8.subarray(src,src+size),target)},removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},registerRemoveEventListeners(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):null);return domElement};var findCanvasEventTarget=findEventTarget;var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height};var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>{var sp=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];stackRestore(sp);return size};var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var sp=stackSave();var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(sp)}};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){((a1,a2,a3)=>dynCall_iiii(currentFullscreenStrategy.canvasResizedCallback,a1,a2,a3))(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){((a1,a2,a3)=>dynCall_iiii(strategy.canvasResizedCallback,a1,a2,a3))(37,0,strategy.canvasResizedCallbackUserData)}return 0};var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0};var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};var _emscripten_force_exit=status=>{__emscripten_runtime_keepalive_clear();_exit(status)};var _emscripten_get_device_pixel_ratio=()=>typeof devicePixelRatio=="number"&&devicePixelRatio||1;var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height};var _glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glActiveTexture=_glActiveTexture;var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glAttachShader=_glAttachShader;var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindAttribLocation=_glBindAttribLocation;var _glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindBuffer=_glBindBuffer;var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindFramebuffer=_glBindFramebuffer;var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTexture=_glBindTexture;var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;var _glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendColor=_glBlendColor;var _glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquation=_glBlendEquation;var _glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;var _glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFunc=_glBlendFunc;var _glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferData=_glBufferData;var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glBufferSubData=_glBufferSubData;var _glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;var _glClear=x0=>GLctx.clear(x0);var _emscripten_glClear=_glClear;var _glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearColor=_glClearColor;var _glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearDepthf=_glClearDepthf;var _glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClearStencil=_glClearStencil;var _glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};var _emscripten_glClipControlEXT=_glClipControlEXT;var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorMask=_glColorMask;var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompileShader=_glCompileShader;var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;var _glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;var _glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateProgram=_glCreateProgram;var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCreateShader=_glCreateShader;var _glCullFace=x0=>GLctx.cullFace(x0);var _emscripten_glCullFace=_glCullFace;var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};var _emscripten_glDeleteBuffers=_glDeleteBuffers;var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteProgram=_glDeleteProgram;var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i