From 9257f215984f66e03b04f2076b9aebb102839c75 Mon Sep 17 00:00:00 2001 From: The Dust Council Date: Fri, 5 Jun 2026 00:39:31 -0700 Subject: [PATCH] Web, Commodore, Windows version, Linux standalone, Windows Screensaver complete. --- .claude/scheduled_tasks.lock | 1 + .claude/settings.local.json | 39 ++++- Makefile | 24 ++- README.md | 93 +++++++++++ c64/Makefile | 55 +++++++ c64/c64-vg.cfg | 51 ++++++ c64/vectorgons.c | 311 +++++++++++++++++++++++++++++++++++ c64/vectorgons.d64 | Bin 0 -> 174848 bytes c64/vectorgons.o | Bin 0 -> 38111 bytes c64/vectorgons.prg | Bin 0 -> 4330 bytes resume.txt | 1 + vectorgons | Bin 249216 -> 249280 bytes vectorgons.c | 183 +++++++++++++++++++-- vectorgons.exe | Bin 531968 -> 532480 bytes vectorgons.scr | Bin 532480 -> 532480 bytes web/index.html | 37 +++++ web/vectorgons-boot.js | 16 ++ web/vectorgons.js | 1 + web/vectorgons.wasm | Bin 0 -> 508761 bytes 19 files changed, 794 insertions(+), 18 deletions(-) create mode 100644 .claude/scheduled_tasks.lock create mode 100644 c64/Makefile create mode 100644 c64/c64-vg.cfg create mode 100644 c64/vectorgons.c create mode 100644 c64/vectorgons.d64 create mode 100644 c64/vectorgons.o create mode 100644 c64/vectorgons.prg create mode 100644 resume.txt create mode 100644 web/index.html create mode 100644 web/vectorgons-boot.js create mode 100644 web/vectorgons.js create mode 100755 web/vectorgons.wasm diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock new file mode 100644 index 0000000..c7c5ae6 --- /dev/null +++ b/.claude/scheduled_tasks.lock @@ -0,0 +1 @@ +{"sessionId":"dca9796d-8a4b-4077-8999-f6dfc6f287a1","pid":12539,"procStart":"661839","acquiredAt":1780643072550} \ No newline at end of file diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 967db2f..233ab4e 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -125,7 +125,44 @@ "Bash(python3 glow.py)", "Bash(python3 dense.py)", "Bash(montage g_bloom.png g_legacy.png -tile 2x1 -geometry +2+2 g_cmp125.png)", - "Bash(montage g_bloom.png g_legacy.png -tile 2x1 -geometry +2+2 g_cmp_fold.png)" + "Bash(montage g_bloom.png g_legacy.png -tile 2x1 -geometry +2+2 g_cmp_fold.png)", + "Bash(emcc --version)", + "Read(//usr/lib/**)", + "Bash(command -v emcc)", + "Bash(echo \"PATH emcc: $\\(command -v emcc || echo MISSING\\)\")", + "Bash(timeout 8 bash -c 'curl -sSI https://github.com 2>&1 | head -3 || echo \"NO-CURL\"; echo \"---\"; ping -c1 -W2 github.com 2>&1 | head -2')", + "Bash(echo \"native run exit=$? \\(124=healthy\\)\")", + "Bash(curl -s -o /dev/null -w 'HTTP %{http_code} type=%{content_type} bytes=%{size_download}\\\\n' https://staging.frostwarning.com/vectorgons/__TRACKED_VAR__)", + "Bash(curl -s https://staging.frostwarning.com/vectorgons/index.html)", + "Bash(curl -sI https://staging.frostwarning.com/vectorgons/index.html)", + "Bash(curl -s -D - -o /dev/null https://staging.frostwarning.com/vectorgons/index.html)", + "Bash(convert test.png -resize 300% test_big.png)", + "Bash(cp test.png test_big.png)", + "Bash(convert test.png -crop 380x762+360+0 +repage -resize 170% col_morph.png)", + "Bash(convert test.png -crop 400x762+700+0 +repage -resize 170% col_dyn.png)", + "Bash(python3 winshot.py)", + "Bash(DISPLAY=:0 VG_WIN=1 timeout 30 wine vgtest.exe)", + "Bash(echo \"wine exit=$?\")", + "Bash(convert vgwin_out.ppm -crop 400x762+700+0 +repage -resize 170% win_dyn.png)", + "Bash(rm -rf /tmp/vgwin /tmp/vgweb/vg.c /tmp/vgweb/web /tmp/vgweb/*.png)", + "Bash(rm -f /tmp/pptr/*.png)", + "Bash(xargs -n1 basename)", + "Bash(apt-cache policy *)", + "Bash(apt-get install *)", + "Bash(xa --version)", + "Bash(c1541 -h)", + "Bash(cl65 --version)", + "Bash(dpkg-deb -x cc65_2.19-2_amd64.deb cc65root)", + "Bash(/tmp/cc65dl/cc65root/usr/bin/cl65 --version)", + "Bash(x64sc --help)", + "Bash(pkill -f x64sc)", + "Bash(grep -v '^$')", + "Bash(timeout 16 bash -c ' *)", + "Bash(export CC65_HOME=/tmp/cc65dl/cc65root/usr/share/cc65)", + "Bash(DISPLAY=:0 timeout 60 firefox --headless --window-size=1920,1080 --screenshot /tmp/fsshot.png file:///tmp/fstest.html)", + "Bash(grep -oE 'getFramebufferSize[^,;]{0,120}' web/vectorgons.js)", + "Bash(grep -oE 'onCanvasResize[^,;{]{0,60}|setWindowSize[^,;{]{0,80}' web/vectorgons.js)", + "Bash(DISPLAY=:0 timeout 60 firefox --headless --window-size=1920,1080 --screenshot /tmp/fsshot2.png file:///tmp/fstest2.html)" ] } } diff --git a/Makefile b/Makefile index 82ad284..95631ab 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,25 @@ screensaver: $(SRC) $(WINCC) $(WINFLAGS) -DSCREENSAVER -I$(GLFWDIR)/include -o $(TARGET).scr $(SRC) \ -L$(GLFWDIR)/lib-mingw-w64 $(WINLIBS) -clean: - rm -f $(TARGET) $(TARGET).exe $(TARGET).scr +# --- WebAssembly / browser build (Emscripten) ------------------------------ +# Produces vectorgons.js + vectorgons.wasm (load from an HTML page; see +# web/index.html). Legacy-GL emulation maps the fixed-function + immediate-mode +# rendering onto WebGL; GLFW3 is emulated; the VBO/FBO entry points are resolved +# at run time, so GL_ENABLE_GET_PROC_ADDRESS is required. Run: +# source /path/to/emsdk/emsdk_env.sh && make web +# Must be served over HTTP (WebAssembly will not load from file://). +EMCC ?= emcc +EMFLAGS = -O2 -std=c11 -sUSE_GLFW=3 -sLEGACY_GL_EMULATION=1 -sGL_UNSAFE_OPTS=0 \ + -sGL_ENABLE_GET_PROC_ADDRESS=1 -sALLOW_MEMORY_GROWTH=1 \ + -sINITIAL_MEMORY=67108864 -sEXIT_RUNTIME=0 -.PHONY: run windows screensaver clean +web: web/vectorgons.js + +web/vectorgons.js: $(SRC) + mkdir -p web + $(EMCC) $(EMFLAGS) $(SRC) -o web/vectorgons.js + +clean: + rm -f $(TARGET) $(TARGET).exe $(TARGET).scr web/vectorgons.js web/vectorgons.wasm + +.PHONY: run windows screensaver web clean diff --git a/README.md b/README.md index e6f4bc7..69d8aad 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,99 @@ To install on Windows: right-click `vectorgons.scr` → **Install** (or copy it `C:\Windows\System32` and choose it under *Settings → Personalization → Lock screen → Screen saver*). Like the `.exe`, it needs only Windows system DLLs. +## Browser (WebAssembly) + +The same source compiles to WebAssembly with [Emscripten](https://emscripten.org), +which maps the GLFW3 windowing and the legacy/immediate-mode OpenGL onto WebGL +(`-sLEGACY_GL_EMULATION`). The retained-mode VBO geometry, the FBO bloom, and the +frustum culling all run unchanged; the browser-specific bits (GLU helpers, the +`requestAnimationFrame` main loop, and the WebGL-incompatible `double`/`glReadBuffer` +calls) are guarded behind `#ifdef __EMSCRIPTEN__`. + +```sh +source /path/to/emsdk/emsdk_env.sh # put emcc on PATH +make web # -> web/vectorgons.js + web/vectorgons.wasm +``` + +Serve the `web/` directory over HTTP (WebAssembly will **not** load from a +`file://` URL) and open `index.html`: + +```sh +cd web && python3 -m http.server 8000 # then visit http://localhost:8000/ +``` + +`web/index.html` is a ready-made page. To embed in your own page, drop a focusable +canvas with `id="canvas"`, point Emscripten's `Module` at it, and load the script: + +```html + + + +``` + +Serve `vectorgons.js`, `vectorgons.wasm`, and `vectorgons-boot.js` from the same +directory. Click the canvas to give it keyboard focus; all the usual controls +then work, and `F` requests browser fullscreen. (Settings are not persisted in +the browser.) + +### Content-Security-Policy + +WebAssembly needs a couple of CSP allowances. If your server sends a strict CSP +(symptom: the canvas appears but nothing runs, and the console shows +`both async and sync fetching of the wasm failed`), the page's `script-src` must +include **`'wasm-unsafe-eval'`** (required to instantiate any WASM — there is no +nonce/hash alternative) and **`connect-src`** must allow fetching the `.wasm` +(e.g. `'self'`). Loading the `Module` config from `vectorgons-boot.js` (rather +than an inline ` + + + diff --git a/web/vectorgons-boot.js b/web/vectorgons-boot.js new file mode 100644 index 0000000..5da4329 --- /dev/null +++ b/web/vectorgons-boot.js @@ -0,0 +1,16 @@ +// Emscripten Module config, in an external file so it loads under a strict CSP +// (script-src 'self') without needing 'unsafe-inline'. Must load BEFORE +// vectorgons.js. The canvas (id="canvas") must already exist in the DOM. +var Module = { + canvas: (function () { + var c = document.getElementById('canvas'); + c.addEventListener('click', function () { c.focus(); }); + // Don't let arrow keys / space scroll the page while playing. + c.addEventListener('keydown', function (e) { + if ([32, 37, 38, 39, 40].indexOf(e.keyCode) >= 0) e.preventDefault(); + }); + return c; + })(), + print: function (t) { console.log(t); }, + printErr: function (t) { console.error(t); } +}; diff --git a/web/vectorgons.js b/web/vectorgons.js new file mode 100644 index 0000000..e096aa8 --- /dev/null +++ b/web/vectorgons.js @@ -0,0 +1 @@ +var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var programArgs=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var _scriptName=globalThis.document?.currentScript?.src;if(typeof __filename!="undefined"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}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("node:fs");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(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}programArgs=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{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=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var EXITSTATUS;var isFileURI=filename=>filename.startsWith("file://");class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function preMain(){}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("vectorgons.wasm")}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&&!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(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP16;var HEAP32;var HEAP64;var HEAP8;var HEAPF32;var HEAPF64;var HEAPU16;var HEAPU32;var HEAPU64;var HEAPU8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var runDependencies=0;var dependenciesFulfilled=null;var removeRunDependency=id=>{runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}};var addRunDependency=id=>{runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)};var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();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};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);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 stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=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;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);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 onExits=[];var JSEvents={removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},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.precedence-y.precedence)},removeDeferredCalls(targetFunction){JSEvents.deferredCalls=JSEvents.deferredCalls.filter(call=>call.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;i{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);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 UTF8ToString=(ptr,maxBytesToRead,ignoreNul)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead,ignoreNul):"";var maybeCStringToJsString=cString=>cString>2?UTF8ToString(cString):cString;var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||globalThis.document?.querySelector(target);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 lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};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 currentFullscreenStrategy={};var wasmTableMirror=[];var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};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(){if(!getFullscreenElement()){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){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(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){getWasmTableEntry(strategy.canvasResizedCallback)(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 _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 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 registerPreMainLoop=f=>{typeof MainLoop!="undefined"&&MainLoop.preMainLoop.push(f)};var webglBufferSubData=(target,offset,size,data,src=HEAPU8)=>{GLctx.bufferSubData(target,offset,src.subarray(data,data+size))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],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}},MAX_TEMP_BUFFER_SIZE:2097152,numTempVertexBuffersPerSize:64,log2ceilLookup:i=>32-Math.clz32(i===0?0:i-1),generateTempBuffers:(quads,context)=>{var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);context.tempVertexBufferCounters1=[];context.tempVertexBufferCounters2=[];context.tempVertexBufferCounters1.length=context.tempVertexBufferCounters2.length=largestIndex+1;context.tempVertexBuffers1=[];context.tempVertexBuffers2=[];context.tempVertexBuffers1.length=context.tempVertexBuffers2.length=largestIndex+1;context.tempIndexBuffers=[];context.tempIndexBuffers.length=largestIndex+1;for(var i=0;i<=largestIndex;++i){context.tempIndexBuffers[i]=null;context.tempVertexBufferCounters1[i]=context.tempVertexBufferCounters2[i]=0;var ringbufferLength=GL.numTempVertexBuffersPerSize;context.tempVertexBuffers1[i]=[];context.tempVertexBuffers2[i]=[];var ringbuffer1=context.tempVertexBuffers1[i];var ringbuffer2=context.tempVertexBuffers2[i];ringbuffer1.length=ringbuffer2.length=ringbufferLength;for(var j=0;j>1;var quadIndexes=new Uint16Array(numIndexes);var i=0,v=0;while(1){quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+1;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v+3;if(i>=numIndexes)break;v+=4}context.GLctx.bufferData(34963,quadIndexes,35044);context.GLctx.bindBuffer(34963,null)}},getTempVertexBuffer:sizeBytes=>{var idx=GL.log2ceilLookup(sizeBytes);var ringbuffer=GL.currentContext.tempVertexBuffers1[idx];var nextFreeBufferIndex=GL.currentContext.tempVertexBufferCounters1[idx];GL.currentContext.tempVertexBufferCounters1[idx]=GL.currentContext.tempVertexBufferCounters1[idx]+1&GL.numTempVertexBuffersPerSize-1;var vbo=ringbuffer[nextFreeBufferIndex];if(vbo){return vbo}var prevVBO=GLctx.getParameter(34964);ringbuffer[nextFreeBufferIndex]=GLctx.createBuffer();GLctx.bindBuffer(34962,ringbuffer[nextFreeBufferIndex]);GLctx.bufferData(34962,1<{var idx=GL.log2ceilLookup(sizeBytes);var ibo=GL.currentContext.tempIndexBuffers[idx];if(ibo){return ibo}var prevIBO=GLctx.getParameter(34965);GL.currentContext.tempIndexBuffers[idx]=GLctx.createBuffer();GLctx.bindBuffer(34963,GL.currentContext.tempIndexBuffers[idx]);GLctx.bufferData(34963,1<{if(!GL.currentContext){return}var vb=GL.currentContext.tempVertexBuffers1;GL.currentContext.tempVertexBuffers1=GL.currentContext.tempVertexBuffers2;GL.currentContext.tempVertexBuffers2=vb;vb=GL.currentContext.tempVertexBufferCounters1;GL.currentContext.tempVertexBufferCounters1=GL.currentContext.tempVertexBufferCounters2;GL.currentContext.tempVertexBufferCounters2=vb;var largestIndex=GL.log2ceilLookup(GL.MAX_TEMP_BUFFER_SIZE);for(var i=0;i<=largestIndex;++i){GL.currentContext.tempVertexBufferCounters1[i]=0}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}var type=GLctx.getShaderParameter(GL.shaders[shader],35663);if(type==35632){if(GLEmulation.findToken(source,"dFdx")||GLEmulation.findToken(source,"dFdy")||GLEmulation.findToken(source,"fwidth")){source="#extension GL_OES_standard_derivatives : enable\n"+source;var extension=GLctx.getExtension("OES_standard_derivatives")}}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;context.compressionExt=GLctx.getExtension("WEBGL_compressed_texture_s3tc");context.anisotropicExt=GLctx.getExtension("EXT_texture_filter_anisotropic");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")}for(var ext of getEmscriptenSupportedExtensions(GLctx)){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}}}};var _emscripten_glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glAlphaFunc=(func,ref)=>{switch(func){case 512:case 513:case 514:case 515:case 516:case 517:case 518:case 519:GLEmulation.alphaTestRef=ref;if(GLEmulation.alphaTestFunc!=func){GLEmulation.alphaTestFunc=func;GLImmediate.currentRenderer=null}break;default:break}};var _emscripten_glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;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;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{return func()}catch(e){handleException(e)}finally{maybeExit()}};function getFullscreenElement(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement||document.msFullscreenElement}var safeSetTimeout=(func,timeout)=>setTimeout(()=>{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 preloadPlugins=[];var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},getCanvas:()=>Module["canvas"],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=name=>!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name);imagePlugin["handle"]=async(byteArray,name)=>{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);return new Promise((resolve,reject)=>{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);resolve(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);reject()};img.src=url})};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=name=>!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1};audioPlugin["handle"]=async(byteArray,name)=>new Promise((resolve,reject)=>{var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;resolve(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=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(){var canvas=Browser.getCanvas();Browser.pointerLock=document.pointerLockElement===canvas}var canvas=Browser.getCanvas();if(canvas){document.addEventListener("pointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Browser.getCanvas().requestPointerLock){Browser.getCanvas().requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Browser.getCanvas())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=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===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:abort("unrecognized mouse wheel delta mode: "+event.deltaMode)}break;default:abort("unrecognized mouse wheel event: "+event.type)}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var canvas=Browser.getCanvas();var rect=canvas.getBoundingClientRect();var adjustedX=pageX-(window.scrollX+rect.left);var adjustedY=pageY-(window.scrollY+rect.top);adjustedX=adjustedX*(canvas.width/rect.width);adjustedY=adjustedY*(canvas.height/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=Browser.getCanvas();Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Browser.getCanvas();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(Browser.getCanvas());Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());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/hGLctx.enable(x0);var _glEnable=_emscripten_glEnable;var _emscripten_glDisable=x0=>GLctx.disable(x0);var _glDisable=_emscripten_glDisable;var _emscripten_glIsEnabled=x0=>GLctx.isEnabled(x0);var _glIsEnabled=_emscripten_glIsEnabled;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;break}};var _emscripten_glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _glGetBooleanv=_emscripten_glGetBooleanv;var _emscripten_glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _glGetIntegerv=_emscripten_glGetIntegerv;var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var webglGetExtensions=()=>{var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var _emscripten_glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var webGLVersion=GLctx.getParameter(7938);var glVersion=`OpenGL ES 2.0 (${webGLVersion})`;ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _glGetString=_emscripten_glGetString;var _emscripten_glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _glCreateShader=_emscripten_glCreateShader;var _emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _glShaderSource=_emscripten_glShaderSource;var _emscripten_glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _glCompileShader=_emscripten_glCompileShader;var _glAttachShader=_emscripten_glAttachShader;var _emscripten_glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _glDetachShader=_emscripten_glDetachShader;var _emscripten_glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _glUseProgram=_emscripten_glUseProgram;var _emscripten_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 _glDeleteProgram=_emscripten_glDeleteProgram;var _emscripten_glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _glBindAttribLocation=_emscripten_glBindAttribLocation;var _emscripten_glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _glLinkProgram=_emscripten_glLinkProgram;var _emscripten_glBindBuffer=(target,buffer)=>{if(target==34962){GLctx.currentArrayBufferBinding=buffer;GLImmediate.lastArrayBuffer=buffer}else if(target==34963){GLctx.currentElementArrayBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])};var _glBindBuffer=_emscripten_glBindBuffer;var _emscripten_glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _glGetFloatv=_emscripten_glGetFloatv;var _emscripten_glHint=(x0,x1)=>GLctx.hint(x0,x1);var _glHint=_emscripten_glHint;var _emscripten_glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray;var _emscripten_glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray;var _emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _glVertexAttribPointer=_emscripten_glVertexAttribPointer;var _glActiveTexture=_emscripten_glActiveTexture;function ptrToString(ptr){ptr>>>=0;return"0x"+ptr.toString(16).padStart(8,"0")}var GLEmulation={fogStart:0,fogEnd:1,fogDensity:1,fogColor:null,fogMode:2048,fogEnabled:false,MAX_CLIP_PLANES:6,clipPlaneEnabled:[false,false,false,false,false,false],clipPlaneEquation:[],lightingEnabled:false,lightModelAmbient:null,lightModelLocalViewer:false,lightModelTwoSide:false,materialAmbient:null,materialDiffuse:null,materialSpecular:null,materialShininess:null,materialEmission:null,MAX_LIGHTS:8,lightEnabled:[false,false,false,false,false,false,false,false],lightAmbient:[],lightDiffuse:[],lightSpecular:[],lightPosition:[],alphaTestEnabled:false,alphaTestFunc:519,alphaTestRef:0,pointSize:1,vaos:[],currentVao:null,enabledVertexAttribArrays:{},hasRunInit:false,findToken(source,token){function isIdentChar(ch){if(ch>=48&&ch<=57)return true;if(ch>=65&&ch<=90)return true;if(ch>=97&&ch<=122)return true;return false}var i=-1;do{i=source.indexOf(token,i+1);if(i<0){break}if(i>0&&isIdentChar(source[i-1])){continue}i+=token.length;if(i{GLImmediate.lastRenderer?.cleanup();if(cap==2912){if(GLEmulation.fogEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.fogEnabled=true}return}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;if(GLEmulation.clipPlaneEnabled[clipPlaneId]!=true){GLImmediate.currentRenderer=null;GLEmulation.clipPlaneEnabled[clipPlaneId]=true}return}else if(cap>=16384&&cap<16392){var lightId=cap-16384;if(GLEmulation.lightEnabled[lightId]!=true){GLImmediate.currentRenderer=null;GLEmulation.lightEnabled[lightId]=true}return}else if(cap==2896){if(GLEmulation.lightingEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.lightingEnabled=true}return}else if(cap==3008){if(GLEmulation.alphaTestEnabled!=true){GLImmediate.currentRenderer=null;GLEmulation.alphaTestEnabled=true}return}else if(cap==3553){return}else if(!(cap in validCapabilities)){return}orig_glEnable(cap)};var orig_glDisable=_glDisable;_glDisable=_emscripten_glDisable=cap=>{GLImmediate.lastRenderer?.cleanup();if(cap==2912){if(GLEmulation.fogEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.fogEnabled=false}return}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;if(GLEmulation.clipPlaneEnabled[clipPlaneId]!=false){GLImmediate.currentRenderer=null;GLEmulation.clipPlaneEnabled[clipPlaneId]=false}return}else if(cap>=16384&&cap<16392){var lightId=cap-16384;if(GLEmulation.lightEnabled[lightId]!=false){GLImmediate.currentRenderer=null;GLEmulation.lightEnabled[lightId]=false}return}else if(cap==2896){if(GLEmulation.lightingEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.lightingEnabled=false}return}else if(cap==3008){if(GLEmulation.alphaTestEnabled!=false){GLImmediate.currentRenderer=null;GLEmulation.alphaTestEnabled=false}return}else if(cap==3553){return}else if(!(cap in validCapabilities)){return}orig_glDisable(cap)};_glIsEnabled=_emscripten_glIsEnabled=cap=>{if(cap==2912){return GLEmulation.fogEnabled?1:0}else if(cap>=12288&&cap<12294){var clipPlaneId=cap-12288;return GLEmulation.clipPlaneEnabled[clipPlaneId]?1:0}else if(cap>=16384&&cap<16392){var lightId=cap-16384;return GLEmulation.lightEnabled[lightId]?1:0}else if(cap==2896){return GLEmulation.lightingEnabled?1:0}else if(cap==3008){return GLEmulation.alphaTestEnabled?1:0}else if(!(cap in validCapabilities)){return 0}return GLctx.isEnabled(cap)};var orig_glGetBooleanv=_glGetBooleanv;_glGetBooleanv=_emscripten_glGetBooleanv=(pname,p)=>{var attrib=GLEmulation.getAttributeFromCapability(pname);if(attrib!==null){var result=GLImmediate.enabledClientAttributes[attrib];HEAP8[p]=result===true?1:0;return}orig_glGetBooleanv(pname,p)};var orig_glGetIntegerv=_glGetIntegerv;_glGetIntegerv=_emscripten_glGetIntegerv=(pname,params)=>{switch(pname){case 34018:pname=GLctx.MAX_TEXTURE_IMAGE_UNITS;break;case 35658:{var result=GLctx.getParameter(GLctx.MAX_VERTEX_UNIFORM_VECTORS);HEAP32[params>>2]=result*4;return}case 35657:{var result=GLctx.getParameter(GLctx.MAX_FRAGMENT_UNIFORM_VECTORS);HEAP32[params>>2]=result*4;return}case 35659:{var result=GLctx.getParameter(GLctx.MAX_VARYING_VECTORS);HEAP32[params>>2]=result*4;return}case 34929:pname=GLctx.MAX_COMBINED_TEXTURE_IMAGE_UNITS;break;case 32890:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.size:0;return}case 32891:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.type:0;return}case 32892:{var attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];HEAP32[params>>2]=attribute?attribute.stride:0;return}case 32897:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.size:0;return}case 32898:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.type:0;return}case 32899:{var attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];HEAP32[params>>2]=attribute?attribute.stride:0;return}case 32904:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.size:0;return}case 32905:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.type:0;return}case 32906:{var attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];HEAP32[params>>2]=attribute?attribute.stride:0;return}case 3378:{HEAP32[params>>2]=GLEmulation.MAX_CLIP_PLANES;return}case 2976:{HEAP32[params>>2]=GLImmediate.currentMatrix+5888;return}case 3009:{HEAP32[params>>2]=GLEmulation.alphaTestFunc;return}}orig_glGetIntegerv(pname,params)};var orig_glGetString=_glGetString;_glGetString=_emscripten_glGetString=name_=>{if(GL.stringCache[name_])return GL.stringCache[name_];switch(name_){case 7939:var ret=stringToNewUTF8(getEmscriptenSupportedExtensions(GLctx).join(" ")+" GL_EXT_texture_env_combine GL_ARB_texture_env_crossbar GL_ATI_texture_env_combine3 GL_NV_texture_env_combine4 GL_EXT_texture_env_dot3 GL_ARB_multitexture GL_ARB_vertex_buffer_object GL_EXT_framebuffer_object GL_ARB_vertex_program GL_ARB_fragment_program GL_ARB_shading_language_100 GL_ARB_shader_objects GL_ARB_vertex_shader GL_ARB_fragment_shader GL_ARB_texture_cube_map GL_EXT_draw_range_elements"+(GL.currentContext.compressionExt?" GL_ARB_texture_compression GL_EXT_texture_compression_s3tc":"")+(GL.currentContext.anisotropicExt?" GL_EXT_texture_filter_anisotropic":""));return GL.stringCache[name_]=ret}return orig_glGetString(name_)};GL.shaderInfos={};var orig_glCreateShader=_glCreateShader;_glCreateShader=_emscripten_glCreateShader=shaderType=>{var id=orig_glCreateShader(shaderType);GL.shaderInfos[id]={type:shaderType,ftransform:false};return id};function ensurePrecision(source){if(!/precision +(low|medium|high)p +float *;/.test(source)){source="#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n"+source}return source}_glShaderSource=_emscripten_glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);if(GL.shaderInfos[shader].type==GLctx.VERTEX_SHADER){var has_pm=source.search(/u_projection/)>=0;var has_mm=source.search(/u_modelView/)>=0;var has_pv=source.search(/a_position/)>=0;var need_pm=0,need_mm=0,need_pv=0;var old=source;source=source.replace(/ftransform\(\)/g,"(u_projection * u_modelView * a_position)");if(old!=source)need_pm=need_mm=need_pv=1;old=source;source=source.replace(/gl_ProjectionMatrix/g,"u_projection");if(old!=source)need_pm=1;old=source;source=source.replace(/gl_ModelViewMatrixTranspose\[2\]/g,"vec4(u_modelView[0][2], u_modelView[1][2], u_modelView[2][2], u_modelView[3][2])");if(old!=source)need_mm=1;old=source;source=source.replace(/gl_ModelViewMatrix/g,"u_modelView");if(old!=source)need_mm=1;old=source;source=source.replace(/gl_Vertex/g,"a_position");if(old!=source)need_pv=1;old=source;source=source.replace(/gl_ModelViewProjectionMatrix/g,"(u_projection * u_modelView)");if(old!=source)need_pm=need_mm=1;if(need_pv&&!has_pv)source="attribute vec4 a_position; \n"+source;if(need_mm&&!has_mm)source="uniform mat4 u_modelView; \n"+source;if(need_pm&&!has_pm)source="uniform mat4 u_projection; \n"+source;GL.shaderInfos[shader].ftransform=need_pm||need_mm||need_pv;for(var i=0;i{GLctx.compileShader(GL.shaders[shader])};GL.programShaders={};var orig_glAttachShader=_glAttachShader;_glAttachShader=_emscripten_glAttachShader=(program,shader)=>{GL.programShaders[program]||=[];GL.programShaders[program].push(shader);orig_glAttachShader(program,shader)};var orig_glDetachShader=_glDetachShader;_glDetachShader=_emscripten_glDetachShader=(program,shader)=>{var programShader=GL.programShaders[program];if(!programShader){err(`WARNING: _glDetachShader received invalid program: ${program}`);return}var index=programShader.indexOf(shader);programShader.splice(index,1);orig_glDetachShader(program,shader)};var orig_glUseProgram=_glUseProgram;_glUseProgram=_emscripten_glUseProgram=program=>{if(GL.currProgram!=program){GLImmediate.currentRenderer=null;GL.currProgram=program;GLImmediate.fixedFunctionProgram=0;orig_glUseProgram(program)}};var orig_glDeleteProgram=_glDeleteProgram;_glDeleteProgram=_emscripten_glDeleteProgram=program=>{orig_glDeleteProgram(program);if(program==GL.currProgram){GLImmediate.currentRenderer=null;GL.currProgram=0}};var zeroUsedPrograms={};var orig_glBindAttribLocation=_glBindAttribLocation;_glBindAttribLocation=_emscripten_glBindAttribLocation=(program,index,name)=>{if(index==0)zeroUsedPrograms[program]=true;orig_glBindAttribLocation(program,index,name)};var orig_glLinkProgram=_glLinkProgram;_glLinkProgram=_emscripten_glLinkProgram=program=>{if(!(program in zeroUsedPrograms)){GLctx.bindAttribLocation(GL.programs[program],0,"a_position")}orig_glLinkProgram(program)};var orig_glBindBuffer=_glBindBuffer;_glBindBuffer=_emscripten_glBindBuffer=(target,buffer)=>{orig_glBindBuffer(target,buffer);if(target==GLctx.ARRAY_BUFFER){if(GLEmulation.currentVao){GLEmulation.currentVao.arrayBuffer=buffer}}else if(target==GLctx.ELEMENT_ARRAY_BUFFER){if(GLEmulation.currentVao)GLEmulation.currentVao.elementArrayBuffer=buffer}};var orig_glGetFloatv=_glGetFloatv;_glGetFloatv=_emscripten_glGetFloatv=(pname,params)=>{if(pname==2982){HEAPF32.set(GLImmediate.matrix[0],params>>2)}else if(pname==2983){HEAPF32.set(GLImmediate.matrix[1],params>>2)}else if(pname==2984){HEAPF32.set(GLImmediate.matrix[2+GLImmediate.clientActiveTexture],params>>2)}else if(pname==2918){HEAPF32.set(GLEmulation.fogColor,params>>2)}else if(pname==2915){HEAPF32[params>>2]=GLEmulation.fogStart}else if(pname==2916){HEAPF32[params>>2]=GLEmulation.fogEnd}else if(pname==2914){HEAPF32[params>>2]=GLEmulation.fogDensity}else if(pname==2917){HEAPF32[params>>2]=GLEmulation.fogMode}else if(pname==2899){HEAPF32[params>>2]=GLEmulation.lightModelAmbient[0];HEAPF32[params+4>>2]=GLEmulation.lightModelAmbient[1];HEAPF32[params+8>>2]=GLEmulation.lightModelAmbient[2];HEAPF32[params+12>>2]=GLEmulation.lightModelAmbient[3]}else if(pname==3010){HEAPF32[params>>2]=GLEmulation.alphaTestRef}else{orig_glGetFloatv(pname,params)}};var orig_glHint=_glHint;_glHint=_emscripten_glHint=(target,mode)=>{if(target==34031){return}orig_glHint(target,mode)};var orig_glEnableVertexAttribArray=_glEnableVertexAttribArray;_glEnableVertexAttribArray=_emscripten_glEnableVertexAttribArray=index=>{orig_glEnableVertexAttribArray(index);GLEmulation.enabledVertexAttribArrays[index]=1;if(GLEmulation.currentVao)GLEmulation.currentVao.enabledVertexAttribArrays[index]=1};var orig_glDisableVertexAttribArray=_glDisableVertexAttribArray;_glDisableVertexAttribArray=_emscripten_glDisableVertexAttribArray=index=>{orig_glDisableVertexAttribArray(index);delete GLEmulation.enabledVertexAttribArrays[index];if(GLEmulation.currentVao)delete GLEmulation.currentVao.enabledVertexAttribArrays[index]};var orig_glVertexAttribPointer=_glVertexAttribPointer;_glVertexAttribPointer=_emscripten_glVertexAttribPointer=(index,size,type,normalized,stride,pointer)=>{orig_glVertexAttribPointer(index,size,type,normalized,stride,pointer);if(GLEmulation.currentVao){GLEmulation.currentVao.vertexAttribPointers[index]=[index,size,type,normalized,stride,pointer]}}},getAttributeFromCapability(cap){var attrib=null;switch(cap){case 3553:case 32888:attrib=GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture;break;case 32884:attrib=GLImmediate.VERTEX;break;case 32885:attrib=GLImmediate.NORMAL;break;case 32886:attrib=GLImmediate.COLOR;break}return attrib}};var GLImmediate={MapTreeLib:null,spawnMapTreeLib:()=>{function CNaiveListMap(){var list=[];this.insert=function CNaiveListMap_insert(key,val){if(this.contains(key|0))return false;list.push([key,val]);return true};var __contains_i;this.contains=function CNaiveListMap_contains(key){for(__contains_i=0;__contains_inew CMapTree}},TexEnvJIT:null,spawnTexEnvJIT:()=>{var GL_TEXTURE0=33984;var GL_TEXTURE_1D=3552;var GL_TEXTURE_2D=3553;var GL_TEXTURE_3D=32879;var GL_TEXTURE_CUBE_MAP=34067;var GL_TEXTURE_ENV=8960;var GL_TEXTURE_ENV_MODE=8704;var GL_TEXTURE_ENV_COLOR=8705;var GL_SRC0_RGB=34176;var GL_SRC1_RGB=34177;var GL_SRC2_RGB=34178;var GL_SRC0_ALPHA=34184;var GL_SRC1_ALPHA=34185;var GL_SRC2_ALPHA=34186;var GL_OPERAND0_RGB=34192;var GL_OPERAND1_RGB=34193;var GL_OPERAND2_RGB=34194;var GL_OPERAND0_ALPHA=34200;var GL_OPERAND1_ALPHA=34201;var GL_OPERAND2_ALPHA=34202;var GL_COMBINE_RGB=34161;var GL_COMBINE_ALPHA=34162;var GL_RGB_SCALE=34163;var GL_ALPHA_SCALE=3356;var GL_ADD=260;var GL_BLEND=3042;var GL_REPLACE=7681;var GL_MODULATE=8448;var GL_DECAL=8449;var GL_COMBINE=34160;var GL_SUBTRACT=34023;var GL_INTERPOLATE=34165;var GL_TEXTURE=5890;var GL_CONSTANT=34166;var GL_PRIMARY_COLOR=34167;var GL_PREVIOUS=34168;var GL_SRC_COLOR=768;var GL_ONE_MINUS_SRC_COLOR=769;var GL_SRC_ALPHA=770;var GL_ONE_MINUS_SRC_ALPHA=771;var TEXENVJIT_NAMESPACE_PREFIX="tej_";var TEX_UNIT_UNIFORM_PREFIX="uTexUnit";var TEX_COORD_VARYING_PREFIX="vTexCoord";var PRIM_COLOR_VARYING="vPrimColor";var TEX_MATRIX_UNIFORM_PREFIX="uTexMatrix";var s_texUnits=null;var s_activeTexture=0;var s_requiredTexUnitsForPass=[];function abort_noSupport(info){abort("[TexEnvJIT] ABORT: No support: "+info)}function abort_sanity(info){abort("[TexEnvJIT] ABORT: Sanity failure: "+info)}function genTexUnitSampleExpr(texUnitID){var texUnit=s_texUnits[texUnitID];var texType=texUnit.getTexType();var func=null;switch(texType){case GL_TEXTURE_1D:func="texture2D";break;case GL_TEXTURE_2D:func="texture2D";break;case GL_TEXTURE_3D:return abort_noSupport("No support for 3D textures.");case GL_TEXTURE_CUBE_MAP:func="textureCube";break;default:return abort_sanity(`Unknown texType: ${ptrToString(texType)}`)}var texCoordExpr=TEX_COORD_VARYING_PREFIX+texUnitID;if(TEX_MATRIX_UNIFORM_PREFIX!=null){texCoordExpr=`(${TEX_MATRIX_UNIFORM_PREFIX}${texUnitID} * ${texCoordExpr})`}return`${func}(${TEX_UNIT_UNIFORM_PREFIX}${texUnitID}, ${texCoordExpr}.xy)`}function getTypeFromCombineOp(op){switch(op){case GL_SRC_COLOR:case GL_ONE_MINUS_SRC_COLOR:return"vec3";case GL_SRC_ALPHA:case GL_ONE_MINUS_SRC_ALPHA:return"float"}return abort_noSupport("Unsupported combiner op: "+ptrToString(op))}function getCurTexUnit(){return s_texUnits[s_activeTexture]}function genCombinerSourceExpr(texUnitID,constantExpr,previousVar,src,op){var srcExpr=null;switch(src){case GL_TEXTURE:srcExpr=genTexUnitSampleExpr(texUnitID);break;case GL_CONSTANT:srcExpr=constantExpr;break;case GL_PRIMARY_COLOR:srcExpr=PRIM_COLOR_VARYING;break;case GL_PREVIOUS:srcExpr=previousVar;break;default:return abort_noSupport("Unsupported combiner src: "+ptrToString(src))}var expr=null;switch(op){case GL_SRC_COLOR:expr=srcExpr+".rgb";break;case GL_ONE_MINUS_SRC_COLOR:expr="(vec3(1.0) - "+srcExpr+".rgb)";break;case GL_SRC_ALPHA:expr=srcExpr+".a";break;case GL_ONE_MINUS_SRC_ALPHA:expr="(1.0 - "+srcExpr+".a)";break;default:return abort_noSupport("Unsupported combiner op: "+ptrToString(op))}return expr}function valToFloatLiteral(val){if(val==Math.round(val))return val+".0";return val}function CTexEnv(){this.mode=GL_MODULATE;this.colorCombiner=GL_MODULATE;this.alphaCombiner=GL_MODULATE;this.colorScale=1;this.alphaScale=1;this.envColor=[0,0,0,0];this.colorSrc=[GL_TEXTURE,GL_PREVIOUS,GL_CONSTANT];this.alphaSrc=[GL_TEXTURE,GL_PREVIOUS,GL_CONSTANT];this.colorOp=[GL_SRC_COLOR,GL_SRC_COLOR,GL_SRC_ALPHA];this.alphaOp=[GL_SRC_ALPHA,GL_SRC_ALPHA,GL_SRC_ALPHA];this.traverseKey={7681:0,8448:1,260:2,3042:3,8449:4,34160:5,34023:3,34165:4,5890:0,34166:1,34167:2,34168:3,768:0,769:1,770:2,771:3};this.key0=-1;this.key1=0;this.key2=0;this.computeKey0=function(){var k=this.traverseKey;var key=k[this.mode]*1638400;key+=k[this.colorCombiner]*327680;key+=k[this.alphaCombiner]*65536;key+=(this.colorScale-1)*16384;key+=(this.alphaScale-1)*4096;key+=k[this.colorSrc[0]]*1024;key+=k[this.colorSrc[1]]*256;key+=k[this.colorSrc[2]]*64;key+=k[this.alphaSrc[0]]*16;key+=k[this.alphaSrc[1]]*4;key+=k[this.alphaSrc[2]];return key};this.computeKey1=function(){var k=this.traverseKey;var key=k[this.colorOp[0]]*4096;key+=k[this.colorOp[1]]*1024;key+=k[this.colorOp[2]]*256;key+=k[this.alphaOp[0]]*16;key+=k[this.alphaOp[1]]*4;key+=k[this.alphaOp[2]];return key};this.computeKey2=function(){return this.envColor[0]*16777216+this.envColor[1]*65536+this.envColor[2]*256+1+this.envColor[3]};this.recomputeKey=function(){this.key0=this.computeKey0();this.key1=this.computeKey1();this.key2=this.computeKey2()};this.invalidateKey=function(){this.key0=-1;GLImmediate.currentRenderer=null}}function CTexUnit(){this.env=new CTexEnv;this.enabled_tex1D=false;this.enabled_tex2D=false;this.enabled_tex3D=false;this.enabled_texCube=false;this.texTypesEnabled=0;this.traverseState=function CTexUnit_traverseState(keyView){if(this.texTypesEnabled){if(this.env.key0==-1){this.env.recomputeKey()}keyView.next(this.texTypesEnabled|this.env.key0<<4);keyView.next(this.env.key1);keyView.next(this.env.key2)}else{keyView.next(0)}}}CTexUnit.prototype.enabled=function CTexUnit_enabled(){return this.texTypesEnabled};CTexUnit.prototype.genPassLines=function CTexUnit_genPassLines(passOutputVar,passInputVar,texUnitID){if(!this.enabled()){return["vec4 "+passOutputVar+" = "+passInputVar+";"]}var lines=this.env.genPassLines(passOutputVar,passInputVar,texUnitID).join("\n");var texLoadLines="";var texLoadRegex=/(texture.*?\(.*?\))/g;var loadCounter=0;var load;while(load=texLoadRegex.exec(lines)){var texLoadExpr=load[1];var secondOccurrence=lines.slice(load.index+1).indexOf(texLoadExpr);if(secondOccurrence!=-1){var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texLoadVar=prefix+"texload"+loadCounter++;var texLoadLine="vec4 "+texLoadVar+" = "+texLoadExpr+";\n";texLoadLines+=texLoadLine+"\n";lines=lines.split(texLoadExpr).join(texLoadVar);texLoadRegex=/(texture.*\(.*\))/g}}return[texLoadLines+lines]};CTexUnit.prototype.getTexType=function CTexUnit_getTexType(){if(this.enabled_texCube){return GL_TEXTURE_CUBE_MAP}else if(this.enabled_tex3D){return GL_TEXTURE_3D}else if(this.enabled_tex2D){return GL_TEXTURE_2D}else if(this.enabled_tex1D){return GL_TEXTURE_1D}return 0};CTexEnv.prototype.genPassLines=function CTexEnv_genPassLines(passOutputVar,passInputVar,texUnitID){switch(this.mode){case GL_REPLACE:{return["vec4 "+passOutputVar+" = "+genTexUnitSampleExpr(texUnitID)+";"]}case GL_ADD:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";","vec3 "+colorVar+" = "+passInputVar+".rgb + "+texVar+".rgb;","float "+alphaVar+" = "+passInputVar+".a * "+texVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_MODULATE:{var line=["vec4 "+passOutputVar," = ",passInputVar," * ",genTexUnitSampleExpr(texUnitID),";"];return[line.join("")]}case GL_DECAL:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";",["vec3 "+colorVar+" = ",passInputVar+".rgb * (1.0 - "+texVar+".a)"," + ",texVar+".rgb * "+texVar+".a",";"].join(""),"float "+alphaVar+" = "+passInputVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_BLEND:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var texVar=prefix+"tex";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";return["vec4 "+texVar+" = "+genTexUnitSampleExpr(texUnitID)+";",["vec3 "+colorVar+" = ",passInputVar+".rgb * (1.0 - "+texVar+".rgb)"," + ",PRIM_COLOR_VARYING+".rgb * "+texVar+".rgb",";"].join(""),"float "+alphaVar+" = "+texVar+".a;","vec4 "+passOutputVar+" = vec4("+colorVar+", "+alphaVar+");"]}case GL_COMBINE:{var prefix=TEXENVJIT_NAMESPACE_PREFIX+"env"+texUnitID+"_";var colorVar=prefix+"color";var alphaVar=prefix+"alpha";var colorLines=this.genCombinerLines(true,colorVar,passInputVar,texUnitID,this.colorCombiner,this.colorSrc,this.colorOp);var alphaLines=this.genCombinerLines(false,alphaVar,passInputVar,texUnitID,this.alphaCombiner,this.alphaSrc,this.alphaOp);var scaledColor=this.colorScale==1?colorVar:colorVar+" * "+valToFloatLiteral(this.colorScale);var scaledAlpha=this.alphaScale==1?alphaVar:alphaVar+" * "+valToFloatLiteral(this.alphaScale);var line=["vec4 "+passOutputVar," = ","vec4(",scaledColor,", ",scaledAlpha,")",";"].join("");return[].concat(colorLines,alphaLines,[line])}}return abort_noSupport("Unsupported TexEnv mode: "+ptrToString(this.mode))};CTexEnv.prototype.genCombinerLines=function CTexEnv_getCombinerLines(isColor,outputVar,passInputVar,texUnitID,combiner,srcArr,opArr){var argsNeeded=null;switch(combiner){case GL_REPLACE:argsNeeded=1;break;case GL_MODULATE:case GL_ADD:case GL_SUBTRACT:argsNeeded=2;break;case GL_INTERPOLATE:argsNeeded=3;break;default:return abort_noSupport("Unsupported combiner: "+ptrToString(combiner))}var constantExpr=["vec4(",valToFloatLiteral(this.envColor[0]),", ",valToFloatLiteral(this.envColor[1]),", ",valToFloatLiteral(this.envColor[2]),", ",valToFloatLiteral(this.envColor[3]),")"].join("");var src0Expr=argsNeeded>=1?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[0],opArr[0]):null;var src1Expr=argsNeeded>=2?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[1],opArr[1]):null;var src2Expr=argsNeeded>=3?genCombinerSourceExpr(texUnitID,constantExpr,passInputVar,srcArr[2],opArr[2]):null;var outputType=isColor?"vec3":"float";var lines=null;switch(combiner){case GL_REPLACE:{lines=[`${outputType} ${outputVar} = ${src0Expr};`];break}case GL_MODULATE:{lines=[`${outputType} ${outputVar} = ${src0Expr} * ${src1Expr};`];break}case GL_ADD:{lines=[`${outputType} ${outputVar} = ${src0Expr} + ${src1Expr};`];break}case GL_SUBTRACT:{lines=[`${outputType} ${outputVar} = ${src0Expr} - ${src1Expr};`];break}case GL_INTERPOLATE:{var prefix=`${TEXENVJIT_NAMESPACE_PREFIX}env${texUnitID}_`;var arg2Var=`${prefix}colorSrc2`;var arg2Type=getTypeFromCombineOp(this.colorOp[2]);lines=[`${arg2Type} ${arg2Var} = ${src2Expr};`,`${outputType} ${outputVar} = ${src0Expr} * ${arg2Var} + ${src1Expr} * (1.0 - ${arg2Var});`];break}default:return abort_sanity("Unmatched TexEnv.colorCombiner?")}return lines};return{init:(gl,specifiedMaxTextureImageUnits)=>{var maxTexUnits=0;if(specifiedMaxTextureImageUnits){maxTexUnits=specifiedMaxTextureImageUnits}else if(gl){maxTexUnits=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)}s_texUnits=[];for(var i=0;i{TEX_UNIT_UNIFORM_PREFIX=uTexUnitPrefix;TEX_COORD_VARYING_PREFIX=vTexCoordPrefix;PRIM_COLOR_VARYING=vPrimColor;TEX_MATRIX_UNIFORM_PREFIX=uTexMatrixPrefix},genAllPassLines:(resultDest,indentSize=0)=>{s_requiredTexUnitsForPass.length=0;var lines=[];var lastPassVar=PRIM_COLOR_VARYING;for(var i=0;is_requiredTexUnitsForPass,getActiveTexture:()=>s_activeTexture,traverseState:keyView=>{for(var texUnit of s_texUnits){texUnit.traverseState(keyView)}},getTexUnitType:texUnitID=>s_texUnits[texUnitID].getTexType(),hook_activeTexture:texture=>{s_activeTexture=texture-GL_TEXTURE0;if(GLImmediate.currentMatrix>=2){GLImmediate.currentMatrix=2+s_activeTexture}},hook_enable:cap=>{var cur=getCurTexUnit();switch(cap){case GL_TEXTURE_1D:if(!cur.enabled_tex1D){GLImmediate.currentRenderer=null;cur.enabled_tex1D=true;cur.texTypesEnabled|=1}break;case GL_TEXTURE_2D:if(!cur.enabled_tex2D){GLImmediate.currentRenderer=null;cur.enabled_tex2D=true;cur.texTypesEnabled|=2}break;case GL_TEXTURE_3D:if(!cur.enabled_tex3D){GLImmediate.currentRenderer=null;cur.enabled_tex3D=true;cur.texTypesEnabled|=4}break;case GL_TEXTURE_CUBE_MAP:if(!cur.enabled_texCube){GLImmediate.currentRenderer=null;cur.enabled_texCube=true;cur.texTypesEnabled|=8}break}},hook_disable:cap=>{var cur=getCurTexUnit();switch(cap){case GL_TEXTURE_1D:if(cur.enabled_tex1D){GLImmediate.currentRenderer=null;cur.enabled_tex1D=false;cur.texTypesEnabled&=~1}break;case GL_TEXTURE_2D:if(cur.enabled_tex2D){GLImmediate.currentRenderer=null;cur.enabled_tex2D=false;cur.texTypesEnabled&=~2}break;case GL_TEXTURE_3D:if(cur.enabled_tex3D){GLImmediate.currentRenderer=null;cur.enabled_tex3D=false;cur.texTypesEnabled&=~4}break;case GL_TEXTURE_CUBE_MAP:if(cur.enabled_texCube){GLImmediate.currentRenderer=null;cur.enabled_texCube=false;cur.texTypesEnabled&=~8}break}},hook_texEnvf(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_RGB_SCALE:if(env.colorScale!=param){env.invalidateKey();env.colorScale=param}break;case GL_ALPHA_SCALE:if(env.alphaScale!=param){env.invalidateKey();env.alphaScale=param}break;default:err("WARNING: Unhandled `pname` in call to `glTexEnvf`.")}},hook_texEnvi(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_MODE:if(env.mode!=param){env.invalidateKey();env.mode=param}break;case GL_COMBINE_RGB:if(env.colorCombiner!=param){env.invalidateKey();env.colorCombiner=param}break;case GL_COMBINE_ALPHA:if(env.alphaCombiner!=param){env.invalidateKey();env.alphaCombiner=param}break;case GL_SRC0_RGB:if(env.colorSrc[0]!=param){env.invalidateKey();env.colorSrc[0]=param}break;case GL_SRC1_RGB:if(env.colorSrc[1]!=param){env.invalidateKey();env.colorSrc[1]=param}break;case GL_SRC2_RGB:if(env.colorSrc[2]!=param){env.invalidateKey();env.colorSrc[2]=param}break;case GL_SRC0_ALPHA:if(env.alphaSrc[0]!=param){env.invalidateKey();env.alphaSrc[0]=param}break;case GL_SRC1_ALPHA:if(env.alphaSrc[1]!=param){env.invalidateKey();env.alphaSrc[1]=param}break;case GL_SRC2_ALPHA:if(env.alphaSrc[2]!=param){env.invalidateKey();env.alphaSrc[2]=param}break;case GL_OPERAND0_RGB:if(env.colorOp[0]!=param){env.invalidateKey();env.colorOp[0]=param}break;case GL_OPERAND1_RGB:if(env.colorOp[1]!=param){env.invalidateKey();env.colorOp[1]=param}break;case GL_OPERAND2_RGB:if(env.colorOp[2]!=param){env.invalidateKey();env.colorOp[2]=param}break;case GL_OPERAND0_ALPHA:if(env.alphaOp[0]!=param){env.invalidateKey();env.alphaOp[0]=param}break;case GL_OPERAND1_ALPHA:if(env.alphaOp[1]!=param){env.invalidateKey();env.alphaOp[1]=param}break;case GL_OPERAND2_ALPHA:if(env.alphaOp[2]!=param){env.invalidateKey();env.alphaOp[2]=param}break;case GL_RGB_SCALE:if(env.colorScale!=param){env.invalidateKey();env.colorScale=param}break;case GL_ALPHA_SCALE:if(env.alphaScale!=param){env.invalidateKey();env.alphaScale=param}break;default:err("WARNING: Unhandled `pname` in call to `glTexEnvi`.")}},hook_texEnvfv(target,pname,params){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_COLOR:{for(var i=0;i<4;i++){var param=HEAPF32[params+i*4>>2];if(env.envColor[i]!=param){env.invalidateKey();env.envColor[i]=param}}break}default:err("WARNING: Unhandled `pname` in call to `glTexEnvfv`.")}},hook_getTexEnviv(target,pname,param){if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_MODE:HEAP32[param>>2]=env.mode;return;case GL_TEXTURE_ENV_COLOR:HEAP32[param>>2]=Math.max(Math.min(env.envColor[0]*255,255,-255));HEAP32[param+1>>2]=Math.max(Math.min(env.envColor[1]*255,255,-255));HEAP32[param+2>>2]=Math.max(Math.min(env.envColor[2]*255,255,-255));HEAP32[param+3>>2]=Math.max(Math.min(env.envColor[3]*255,255,-255));return;case GL_COMBINE_RGB:HEAP32[param>>2]=env.colorCombiner;return;case GL_COMBINE_ALPHA:HEAP32[param>>2]=env.alphaCombiner;return;case GL_SRC0_RGB:HEAP32[param>>2]=env.colorSrc[0];return;case GL_SRC1_RGB:HEAP32[param>>2]=env.colorSrc[1];return;case GL_SRC2_RGB:HEAP32[param>>2]=env.colorSrc[2];return;case GL_SRC0_ALPHA:HEAP32[param>>2]=env.alphaSrc[0];return;case GL_SRC1_ALPHA:HEAP32[param>>2]=env.alphaSrc[1];return;case GL_SRC2_ALPHA:HEAP32[param>>2]=env.alphaSrc[2];return;case GL_OPERAND0_RGB:HEAP32[param>>2]=env.colorOp[0];return;case GL_OPERAND1_RGB:HEAP32[param>>2]=env.colorOp[1];return;case GL_OPERAND2_RGB:HEAP32[param>>2]=env.colorOp[2];return;case GL_OPERAND0_ALPHA:HEAP32[param>>2]=env.alphaOp[0];return;case GL_OPERAND1_ALPHA:HEAP32[param>>2]=env.alphaOp[1];return;case GL_OPERAND2_ALPHA:HEAP32[param>>2]=env.alphaOp[2];return;case GL_RGB_SCALE:HEAP32[param>>2]=env.colorScale;return;case GL_ALPHA_SCALE:HEAP32[param>>2]=env.alphaScale;return;default:err("WARNING: Unhandled `pname` in call to `glGetTexEnvi`.")}},hook_getTexEnvfv:(target,pname,param)=>{if(target!=GL_TEXTURE_ENV)return;var env=getCurTexUnit().env;switch(pname){case GL_TEXTURE_ENV_COLOR:HEAPF32[param>>2]=env.envColor[0];HEAPF32[param+4>>2]=env.envColor[1];HEAPF32[param+8>>2]=env.envColor[2];HEAPF32[param+12>>2]=env.envColor[3];return}}}},vertexData:null,vertexDataU8:null,tempData:null,indexData:null,vertexCounter:0,mode:-1,rendererCache:null,rendererComponents:[],rendererComponentPointer:0,lastRenderer:null,lastArrayBuffer:null,lastProgram:null,lastStride:-1,matrix:[],matrixStack:[],currentMatrix:0,tempMatrix:null,matricesModified:false,useTextureMatrix:false,VERTEX:0,NORMAL:1,COLOR:2,TEXTURE0:3,NUM_ATTRIBUTES:-1,MAX_TEXTURES:-1,totalEnabledClientAttributes:0,enabledClientAttributes:[0,0],clientAttributes:[],liveClientAttributes:[],currentRenderer:null,modifiedClientAttributes:false,clientActiveTexture:0,clientColor:null,usedTexUnitList:[],fixedFunctionProgram:null,setClientAttribute(name,size,type,stride,pointer){var attrib=GLImmediate.clientAttributes[name];if(!attrib){for(var i=0;i<=name;i++){GLImmediate.clientAttributes[i]||={name,size,type,stride,pointer,offset:0}}}else{attrib.name=name;attrib.size=size;attrib.type=type;attrib.stride=stride;attrib.pointer=pointer;attrib.offset=0}GLImmediate.modifiedClientAttributes=true},addRendererComponent(name,size,type){if(!GLImmediate.rendererComponents[name]){GLImmediate.rendererComponents[name]=1;GLImmediate.enabledClientAttributes[name]=true;GLImmediate.setClientAttribute(name,size,type,0,GLImmediate.rendererComponentPointer);GLImmediate.rendererComponentPointer+=size*GL.byteSizeByType[type-GL.byteSizeByTypeRoot]}else{GLImmediate.rendererComponents[name]++}},disableBeginEndClientAttributes(){for(var i=0;i0&&this.normalLocation>=0;this.hasColor=this.colorLocation===0||this.colorLocation>0;this.floatType=GLctx.FLOAT;this.fogColorLocation=GLctx.getUniformLocation(this.program,"u_fogColor");this.fogEndLocation=GLctx.getUniformLocation(this.program,"u_fogEnd");this.fogScaleLocation=GLctx.getUniformLocation(this.program,"u_fogScale");this.fogDensityLocation=GLctx.getUniformLocation(this.program,"u_fogDensity");this.hasFog=!!(this.fogColorLocation||this.fogEndLocation||this.fogScaleLocation||this.fogDensityLocation);this.pointSizeLocation=GLctx.getUniformLocation(this.program,"u_pointSize");this.hasClipPlane=false;this.clipPlaneEquationLocation=[];for(var clipPlaneId=0;clipPlaneId>2,start>>2,GLImmediate.vertexData)}if(!GL.currProgram){if(GLImmediate.fixedFunctionProgram!=this.program){GLctx.useProgram(this.program);GLImmediate.fixedFunctionProgram=this.program}}if(this.modelViewLocation&&this.modelViewMatrixVersion!=GLImmediate.matrixVersion[0]){this.modelViewMatrixVersion=GLImmediate.matrixVersion[0];GLctx.uniformMatrix4fv(this.modelViewLocation,false,GLImmediate.matrix[0]);if(GLEmulation.lightEnabled){var tmpMVinv=GLImmediate.matrixLib.mat4.create(GLImmediate.matrix[0]);GLImmediate.matrixLib.mat4.inverse(tmpMVinv);GLImmediate.matrixLib.mat4.transpose(tmpMVinv);GLctx.uniformMatrix3fv(this.normalMatrixLocation,false,GLImmediate.matrixLib.mat4.toMat3(tmpMVinv))}}if(this.projectionLocation&&this.projectionMatrixVersion!=GLImmediate.matrixVersion[1]){this.projectionMatrixVersion=GLImmediate.matrixVersion[1];GLctx.uniformMatrix4fv(this.projectionLocation,false,GLImmediate.matrix[1])}var clientAttributes=GLImmediate.clientAttributes;var posAttr=clientAttributes[GLImmediate.VERTEX];GLctx.vertexAttribPointer(this.positionLocation,posAttr.size,posAttr.type,false,GLImmediate.stride,posAttr.offset);GLctx.enableVertexAttribArray(this.positionLocation);if(this.hasNormal){var normalAttr=clientAttributes[GLImmediate.NORMAL];GLctx.vertexAttribPointer(this.normalLocation,normalAttr.size,normalAttr.type,true,GLImmediate.stride,normalAttr.offset);GLctx.enableVertexAttribArray(this.normalLocation)}if(this.hasTextures){for(var i=0;i=0){GLctx.disableVertexAttribArray(this.texCoordLocations[i])}}}if(this.hasColor){GLctx.disableVertexAttribArray(this.colorLocation)}if(this.hasNormal){GLctx.disableVertexAttribArray(this.normalLocation)}if(!GL.currProgram){GLctx.useProgram(null);GLImmediate.fixedFunctionProgram=0}if(!GLctx.currentArrayBufferBinding){GLctx.bindBuffer(GLctx.ARRAY_BUFFER,null);GLImmediate.lastArrayBuffer=null}GLImmediate.matricesModified=true};this.init()}return new Renderer},setupFuncs(){GLImmediate.MapTreeLib=GLImmediate.spawnMapTreeLib();GLImmediate.spawnMapTreeLib=null;GLImmediate.TexEnvJIT=GLImmediate.spawnTexEnvJIT();GLImmediate.spawnTexEnvJIT=null;GLImmediate.setupHooks()},setupHooks(){if(!GLEmulation.hasRunInit){GLEmulation.init()}var glActiveTexture=_glActiveTexture;_glActiveTexture=_emscripten_glActiveTexture=texture=>{GLImmediate.TexEnvJIT.hook_activeTexture(texture);glActiveTexture(texture)};var glEnable=_glEnable;_glEnable=_emscripten_glEnable=cap=>{GLImmediate.TexEnvJIT.hook_enable(cap);glEnable(cap)};var glDisable=_glDisable;_glDisable=_emscripten_glDisable=cap=>{GLImmediate.TexEnvJIT.hook_disable(cap);glDisable(cap)};_glTexEnvf=_emscripten_glTexEnvf=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvf(target,pname,param)};_glTexEnvi=_emscripten_glTexEnvi=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvi(target,pname,param)};_glTexEnvfv=_emscripten_glTexEnvfv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_texEnvfv(target,pname,param)};_glGetTexEnviv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_getTexEnviv(target,pname,param)};_glGetTexEnvfv=(target,pname,param)=>{GLImmediate.TexEnvJIT.hook_getTexEnvfv(target,pname,param)};var glGetIntegerv=_glGetIntegerv;_glGetIntegerv=_emscripten_glGetIntegerv=(pname,params)=>{switch(pname){case 35725:{var cur=GLctx.getParameter(GLctx.CURRENT_PROGRAM);if(cur==GLImmediate.fixedFunctionProgram){HEAP32[params>>2]=0;return}break}}glGetIntegerv(pname,params)}},initted:false,init(){err("WARNING: using emscripten GL immediate mode emulation. This is very limited in what it supports");GLImmediate.initted=true;if(!Browser.useWebGL)return;GLImmediate.MAX_TEXTURES=Math.min(Module["GL_MAX_TEXTURE_IMAGE_UNITS"]||GLctx.getParameter(GLctx.MAX_TEXTURE_IMAGE_UNITS),28);GLImmediate.TexEnvJIT.init(GLctx,GLImmediate.MAX_TEXTURES);GLImmediate.NUM_ATTRIBUTES=3+GLImmediate.MAX_TEXTURES;GLImmediate.clientAttributes=[];GLEmulation.enabledClientAttribIndices=[];for(var i=0;i>2);GLImmediate.indexData=new Uint16Array(GL.MAX_TEMP_BUFFER_SIZE>>1);GLImmediate.vertexDataU8=new Uint8Array(GLImmediate.tempData.buffer);GL.generateTempBuffers(true,GL.currentContext);GLImmediate.clientColor=new Float32Array([1,1,1,1])},prepareClientAttributes(count,beginEnd){if(!GLImmediate.modifiedClientAttributes){GLImmediate.vertexCounter=GLImmediate.stride*count/4;return}GLImmediate.modifiedClientAttributes=false;var clientStartPointer=4294967295;var bytes=0;var minStride=4294967295;var maxStride=0;var attributes=GLImmediate.liveClientAttributes;attributes.length=0;for(var i=0;i<3+GLImmediate.MAX_TEXTURES;i++){if(GLImmediate.enabledClientAttributes[i]){var attr=GLImmediate.clientAttributes[i];attributes.push(attr);clientStartPointer=Math.min(clientStartPointer,attr.pointer);attr.sizeBytes=attr.size*GL.byteSizeByType[attr.type-GL.byteSizeByTypeRoot];bytes+=attr.sizeBytes;minStride=Math.min(minStride,attr.stride);maxStride=Math.max(maxStride,attr.stride)}}if((minStride!=maxStride||maxStride>2];HEAP32[start+attr.offset+(bytes*j+k)>>2]=val}}}else{for(var j=0;jGLImmediate.lastVertex){for(var i=0;i>1];GLImmediate.firstVertex=Math.min(GLImmediate.firstVertex,currIndex);GLImmediate.lastVertex=Math.max(GLImmediate.lastVertex,currIndex+1)}}if(!GLctx.currentElementArrayBufferBinding){var byteSize=numProvidedIndexes<<1;var indexBuffer=GL.getTempIndexBuffer(byteSize);GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,indexBuffer);webglBufferSubData(GLctx.ELEMENT_ARRAY_BUFFER,0,byteSize,ptr);ptr=0;emulatedElementArrayBuffer=true}}else if(GLImmediate.mode>6){if(GLImmediate.mode!=7)abort("unsupported immediate mode "+GLImmediate.mode);ptr=GLImmediate.firstVertex*3;var numQuads=numVertices/4;numIndexes=numQuads*6;GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,GL.currentContext.tempQuadIndexBuffer);emulatedElementArrayBuffer=true;GLImmediate.mode=GLctx.TRIANGLES}renderer.prepare();if(numIndexes){GLctx.drawElements(GLImmediate.mode,numIndexes,GLctx.UNSIGNED_SHORT,ptr)}else{GLctx.drawArrays(GLImmediate.mode,startIndex,numVertices)}if(emulatedElementArrayBuffer){GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,GL.buffers[GLctx.currentElementArrayBufferBinding]||null)}renderer.cleanup()}};GLImmediate.matrixLib=(()=>{var vec3={};var mat3={};var mat4={};var quat4={};var MatrixArray=Float32Array;vec3.create=function(vec){var dest=new MatrixArray(3);if(vec){dest[0]=vec[0];dest[1]=vec[1];dest[2]=vec[2]}else{dest[0]=dest[1]=dest[2]=0}return dest};vec3.set=function(vec,dest){dest[0]=vec[0];dest[1]=vec[1];dest[2]=vec[2];return dest};vec3.add=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]+=vec2[0];vec[1]+=vec2[1];vec[2]+=vec2[2];return vec}dest[0]=vec[0]+vec2[0];dest[1]=vec[1]+vec2[1];dest[2]=vec[2]+vec2[2];return dest};vec3.subtract=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]-=vec2[0];vec[1]-=vec2[1];vec[2]-=vec2[2];return vec}dest[0]=vec[0]-vec2[0];dest[1]=vec[1]-vec2[1];dest[2]=vec[2]-vec2[2];return dest};vec3.multiply=function(vec,vec2,dest){if(!dest||vec===dest){vec[0]*=vec2[0];vec[1]*=vec2[1];vec[2]*=vec2[2];return vec}dest[0]=vec[0]*vec2[0];dest[1]=vec[1]*vec2[1];dest[2]=vec[2]*vec2[2];return dest};vec3.negate=function(vec,dest){if(!dest){dest=vec}dest[0]=-vec[0];dest[1]=-vec[1];dest[2]=-vec[2];return dest};vec3.scale=function(vec,val,dest){if(!dest||vec===dest){vec[0]*=val;vec[1]*=val;vec[2]*=val;return vec}dest[0]=vec[0]*val;dest[1]=vec[1]*val;dest[2]=vec[2]*val;return dest};vec3.normalize=function(vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],len=Math.sqrt(x*x+y*y+z*z);if(!len){dest[0]=0;dest[1]=0;dest[2]=0;return dest}else if(len===1){dest[0]=x;dest[1]=y;dest[2]=z;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;return dest};vec3.cross=function(vec,vec2,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],x2=vec2[0],y2=vec2[1],z2=vec2[2];dest[0]=y*z2-z*y2;dest[1]=z*x2-x*z2;dest[2]=x*y2-y*x2;return dest};vec3.length=function(vec){var x=vec[0],y=vec[1],z=vec[2];return Math.sqrt(x*x+y*y+z*z)};vec3.dot=function(vec,vec2){return vec[0]*vec2[0]+vec[1]*vec2[1]+vec[2]*vec2[2]};vec3.direction=function(vec,vec2,dest){if(!dest){dest=vec}var x=vec[0]-vec2[0],y=vec[1]-vec2[1],z=vec[2]-vec2[2],len=Math.sqrt(x*x+y*y+z*z);if(!len){dest[0]=0;dest[1]=0;dest[2]=0;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;return dest};vec3.lerp=function(vec,vec2,lerp,dest){if(!dest){dest=vec}dest[0]=vec[0]+lerp*(vec2[0]-vec[0]);dest[1]=vec[1]+lerp*(vec2[1]-vec[1]);dest[2]=vec[2]+lerp*(vec2[2]-vec[2]);return dest};vec3.dist=function(vec,vec2){var x=vec2[0]-vec[0],y=vec2[1]-vec[1],z=vec2[2]-vec[2];return Math.sqrt(x*x+y*y+z*z)};vec3.unproject=function(vec,view,proj,viewport,dest){if(!dest){dest=vec}var m=mat4.create();var v=new MatrixArray(4);v[0]=(vec[0]-viewport[0])*2/viewport[2]-1;v[1]=(vec[1]-viewport[1])*2/viewport[3]-1;v[2]=2*vec[2]-1;v[3]=1;mat4.multiply(proj,view,m);if(!mat4.inverse(m)){return null}mat4.multiplyVec4(m,v);if(v[3]===0){return null}dest[0]=v[0]/v[3];dest[1]=v[1]/v[3];dest[2]=v[2]/v[3];return dest};vec3.str=function(vec){return"["+vec[0]+", "+vec[1]+", "+vec[2]+"]"};mat3.create=function(mat){var dest=new MatrixArray(9);if(mat){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8]}return dest};mat3.set=function(mat,dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];return dest};mat3.identity=function(dest){if(!dest){dest=mat3.create()}dest[0]=1;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=1;dest[5]=0;dest[6]=0;dest[7]=0;dest[8]=1;return dest};mat3.transpose=function(mat,dest){if(!dest||mat===dest){var a01=mat[1],a02=mat[2],a12=mat[5];mat[1]=mat[3];mat[2]=mat[6];mat[3]=a01;mat[5]=mat[7];mat[6]=a02;mat[7]=a12;return mat}dest[0]=mat[0];dest[1]=mat[3];dest[2]=mat[6];dest[3]=mat[1];dest[4]=mat[4];dest[5]=mat[7];dest[6]=mat[2];dest[7]=mat[5];dest[8]=mat[8];return dest};mat3.toMat4=function(mat,dest){if(!dest){dest=mat4.create()}dest[15]=1;dest[14]=0;dest[13]=0;dest[12]=0;dest[11]=0;dest[10]=mat[8];dest[9]=mat[7];dest[8]=mat[6];dest[7]=0;dest[6]=mat[5];dest[5]=mat[4];dest[4]=mat[3];dest[3]=0;dest[2]=mat[2];dest[1]=mat[1];dest[0]=mat[0];return dest};mat3.str=function(mat){return"["+mat[0]+", "+mat[1]+", "+mat[2]+", "+mat[3]+", "+mat[4]+", "+mat[5]+", "+mat[6]+", "+mat[7]+", "+mat[8]+"]"};mat4.create=function(mat){var dest=new MatrixArray(16);if(mat){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}return dest};mat4.set=function(mat,dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15];return dest};mat4.identity=function(dest){if(!dest){dest=mat4.create()}dest[0]=1;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=1;dest[6]=0;dest[7]=0;dest[8]=0;dest[9]=0;dest[10]=1;dest[11]=0;dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};mat4.transpose=function(mat,dest){if(!dest||mat===dest){var a01=mat[1],a02=mat[2],a03=mat[3],a12=mat[6],a13=mat[7],a23=mat[11];mat[1]=mat[4];mat[2]=mat[8];mat[3]=mat[12];mat[4]=a01;mat[6]=mat[9];mat[7]=mat[13];mat[8]=a02;mat[9]=a12;mat[11]=mat[14];mat[12]=a03;mat[13]=a13;mat[14]=a23;return mat}dest[0]=mat[0];dest[1]=mat[4];dest[2]=mat[8];dest[3]=mat[12];dest[4]=mat[1];dest[5]=mat[5];dest[6]=mat[9];dest[7]=mat[13];dest[8]=mat[2];dest[9]=mat[6];dest[10]=mat[10];dest[11]=mat[14];dest[12]=mat[3];dest[13]=mat[7];dest[14]=mat[11];dest[15]=mat[15];return dest};mat4.determinant=function(mat){var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15];return a30*a21*a12*a03-a20*a31*a12*a03-a30*a11*a22*a03+a10*a31*a22*a03+a20*a11*a32*a03-a10*a21*a32*a03-a30*a21*a02*a13+a20*a31*a02*a13+a30*a01*a22*a13-a00*a31*a22*a13-a20*a01*a32*a13+a00*a21*a32*a13+a30*a11*a02*a23-a10*a31*a02*a23-a30*a01*a12*a23+a00*a31*a12*a23+a10*a01*a32*a23-a00*a11*a32*a23-a20*a11*a02*a33+a10*a21*a02*a33+a20*a01*a12*a33-a00*a21*a12*a33-a10*a01*a22*a33+a00*a11*a22*a33};mat4.inverse=function(mat,dest){if(!dest){dest=mat}var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15],b00=a00*a11-a01*a10,b01=a00*a12-a02*a10,b02=a00*a13-a03*a10,b03=a01*a12-a02*a11,b04=a01*a13-a03*a11,b05=a02*a13-a03*a12,b06=a20*a31-a21*a30,b07=a20*a32-a22*a30,b08=a20*a33-a23*a30,b09=a21*a32-a22*a31,b10=a21*a33-a23*a31,b11=a22*a33-a23*a32,d=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06,invDet;if(!d){return null}invDet=1/d;dest[0]=(a11*b11-a12*b10+a13*b09)*invDet;dest[1]=(-a01*b11+a02*b10-a03*b09)*invDet;dest[2]=(a31*b05-a32*b04+a33*b03)*invDet;dest[3]=(-a21*b05+a22*b04-a23*b03)*invDet;dest[4]=(-a10*b11+a12*b08-a13*b07)*invDet;dest[5]=(a00*b11-a02*b08+a03*b07)*invDet;dest[6]=(-a30*b05+a32*b02-a33*b01)*invDet;dest[7]=(a20*b05-a22*b02+a23*b01)*invDet;dest[8]=(a10*b10-a11*b08+a13*b06)*invDet;dest[9]=(-a00*b10+a01*b08-a03*b06)*invDet;dest[10]=(a30*b04-a31*b02+a33*b00)*invDet;dest[11]=(-a20*b04+a21*b02-a23*b00)*invDet;dest[12]=(-a10*b09+a11*b07-a12*b06)*invDet;dest[13]=(a00*b09-a01*b07+a02*b06)*invDet;dest[14]=(-a30*b03+a31*b01-a32*b00)*invDet;dest[15]=(a20*b03-a21*b01+a22*b00)*invDet;return dest};mat4.toRotationMat=function(mat,dest){if(!dest){dest=mat4.create()}dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};mat4.toMat3=function(mat,dest){if(!dest){dest=mat3.create()}dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[4];dest[4]=mat[5];dest[5]=mat[6];dest[6]=mat[8];dest[7]=mat[9];dest[8]=mat[10];return dest};mat4.toInverseMat3=function(mat,dest){var a00=mat[0],a01=mat[1],a02=mat[2],a10=mat[4],a11=mat[5],a12=mat[6],a20=mat[8],a21=mat[9],a22=mat[10],b01=a22*a11-a12*a21,b11=-a22*a10+a12*a20,b21=a21*a10-a11*a20,d=a00*b01+a01*b11+a02*b21,id;if(!d){return null}id=1/d;if(!dest){dest=mat3.create()}dest[0]=b01*id;dest[1]=(-a22*a01+a02*a21)*id;dest[2]=(a12*a01-a02*a11)*id;dest[3]=b11*id;dest[4]=(a22*a00-a02*a20)*id;dest[5]=(-a12*a00+a02*a10)*id;dest[6]=b21*id;dest[7]=(-a21*a00+a01*a20)*id;dest[8]=(a11*a00-a01*a10)*id;return dest};mat4.multiply=function(mat,mat2,dest){if(!dest){dest=mat}var a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11],a30=mat[12],a31=mat[13],a32=mat[14],a33=mat[15],b00=mat2[0],b01=mat2[1],b02=mat2[2],b03=mat2[3],b10=mat2[4],b11=mat2[5],b12=mat2[6],b13=mat2[7],b20=mat2[8],b21=mat2[9],b22=mat2[10],b23=mat2[11],b30=mat2[12],b31=mat2[13],b32=mat2[14],b33=mat2[15];dest[0]=b00*a00+b01*a10+b02*a20+b03*a30;dest[1]=b00*a01+b01*a11+b02*a21+b03*a31;dest[2]=b00*a02+b01*a12+b02*a22+b03*a32;dest[3]=b00*a03+b01*a13+b02*a23+b03*a33;dest[4]=b10*a00+b11*a10+b12*a20+b13*a30;dest[5]=b10*a01+b11*a11+b12*a21+b13*a31;dest[6]=b10*a02+b11*a12+b12*a22+b13*a32;dest[7]=b10*a03+b11*a13+b12*a23+b13*a33;dest[8]=b20*a00+b21*a10+b22*a20+b23*a30;dest[9]=b20*a01+b21*a11+b22*a21+b23*a31;dest[10]=b20*a02+b21*a12+b22*a22+b23*a32;dest[11]=b20*a03+b21*a13+b22*a23+b23*a33;dest[12]=b30*a00+b31*a10+b32*a20+b33*a30;dest[13]=b30*a01+b31*a11+b32*a21+b33*a31;dest[14]=b30*a02+b31*a12+b32*a22+b33*a32;dest[15]=b30*a03+b31*a13+b32*a23+b33*a33;return dest};mat4.multiplyVec3=function(mat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2];dest[0]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12];dest[1]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13];dest[2]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14];return dest};mat4.multiplyVec4=function(mat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],w=vec[3];dest[0]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12]*w;dest[1]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13]*w;dest[2]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14]*w;dest[3]=mat[3]*x+mat[7]*y+mat[11]*z+mat[15]*w;return dest};mat4.translate=function(mat,vec,dest){var x=vec[0],y=vec[1],z=vec[2],a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23;if(!dest||mat===dest){mat[12]=mat[0]*x+mat[4]*y+mat[8]*z+mat[12];mat[13]=mat[1]*x+mat[5]*y+mat[9]*z+mat[13];mat[14]=mat[2]*x+mat[6]*y+mat[10]*z+mat[14];mat[15]=mat[3]*x+mat[7]*y+mat[11]*z+mat[15];return mat}a00=mat[0];a01=mat[1];a02=mat[2];a03=mat[3];a10=mat[4];a11=mat[5];a12=mat[6];a13=mat[7];a20=mat[8];a21=mat[9];a22=mat[10];a23=mat[11];dest[0]=a00;dest[1]=a01;dest[2]=a02;dest[3]=a03;dest[4]=a10;dest[5]=a11;dest[6]=a12;dest[7]=a13;dest[8]=a20;dest[9]=a21;dest[10]=a22;dest[11]=a23;dest[12]=a00*x+a10*y+a20*z+mat[12];dest[13]=a01*x+a11*y+a21*z+mat[13];dest[14]=a02*x+a12*y+a22*z+mat[14];dest[15]=a03*x+a13*y+a23*z+mat[15];return dest};mat4.scale=function(mat,vec,dest){var x=vec[0],y=vec[1],z=vec[2];if(!dest||mat===dest){mat[0]*=x;mat[1]*=x;mat[2]*=x;mat[3]*=x;mat[4]*=y;mat[5]*=y;mat[6]*=y;mat[7]*=y;mat[8]*=z;mat[9]*=z;mat[10]*=z;mat[11]*=z;return mat}dest[0]=mat[0]*x;dest[1]=mat[1]*x;dest[2]=mat[2]*x;dest[3]=mat[3]*x;dest[4]=mat[4]*y;dest[5]=mat[5]*y;dest[6]=mat[6]*y;dest[7]=mat[7]*y;dest[8]=mat[8]*z;dest[9]=mat[9]*z;dest[10]=mat[10]*z;dest[11]=mat[11]*z;dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15];return dest};mat4.rotate=function(mat,angle,axis,dest){var x=axis[0],y=axis[1],z=axis[2],len=Math.sqrt(x*x+y*y+z*z),s,c,t,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,b00,b01,b02,b10,b11,b12,b20,b21,b22;if(!len){return null}if(len!==1){len=1/len;x*=len;y*=len;z*=len}s=Math.sin(angle);c=Math.cos(angle);t=1-c;a00=mat[0];a01=mat[1];a02=mat[2];a03=mat[3];a10=mat[4];a11=mat[5];a12=mat[6];a13=mat[7];a20=mat[8];a21=mat[9];a22=mat[10];a23=mat[11];b00=x*x*t+c;b01=y*x*t+z*s;b02=z*x*t-y*s;b10=x*y*t-z*s;b11=y*y*t+c;b12=z*y*t+x*s;b20=x*z*t+y*s;b21=y*z*t-x*s;b22=z*z*t+c;if(!dest){dest=mat}else if(mat!==dest){dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*b00+a10*b01+a20*b02;dest[1]=a01*b00+a11*b01+a21*b02;dest[2]=a02*b00+a12*b01+a22*b02;dest[3]=a03*b00+a13*b01+a23*b02;dest[4]=a00*b10+a10*b11+a20*b12;dest[5]=a01*b10+a11*b11+a21*b12;dest[6]=a02*b10+a12*b11+a22*b12;dest[7]=a03*b10+a13*b11+a23*b12;dest[8]=a00*b20+a10*b21+a20*b22;dest[9]=a01*b20+a11*b21+a21*b22;dest[10]=a02*b20+a12*b21+a22*b22;dest[11]=a03*b20+a13*b21+a23*b22;return dest};mat4.rotateX=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11];if(!dest){dest=mat}else if(mat!==dest){dest[0]=mat[0];dest[1]=mat[1];dest[2]=mat[2];dest[3]=mat[3];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[4]=a10*c+a20*s;dest[5]=a11*c+a21*s;dest[6]=a12*c+a22*s;dest[7]=a13*c+a23*s;dest[8]=a10*-s+a20*c;dest[9]=a11*-s+a21*c;dest[10]=a12*-s+a22*c;dest[11]=a13*-s+a23*c;return dest};mat4.rotateY=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a20=mat[8],a21=mat[9],a22=mat[10],a23=mat[11];if(!dest){dest=mat}else if(mat!==dest){dest[4]=mat[4];dest[5]=mat[5];dest[6]=mat[6];dest[7]=mat[7];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*c+a20*-s;dest[1]=a01*c+a21*-s;dest[2]=a02*c+a22*-s;dest[3]=a03*c+a23*-s;dest[8]=a00*s+a20*c;dest[9]=a01*s+a21*c;dest[10]=a02*s+a22*c;dest[11]=a03*s+a23*c;return dest};mat4.rotateZ=function(mat,angle,dest){var s=Math.sin(angle),c=Math.cos(angle),a00=mat[0],a01=mat[1],a02=mat[2],a03=mat[3],a10=mat[4],a11=mat[5],a12=mat[6],a13=mat[7];if(!dest){dest=mat}else if(mat!==dest){dest[8]=mat[8];dest[9]=mat[9];dest[10]=mat[10];dest[11]=mat[11];dest[12]=mat[12];dest[13]=mat[13];dest[14]=mat[14];dest[15]=mat[15]}dest[0]=a00*c+a10*s;dest[1]=a01*c+a11*s;dest[2]=a02*c+a12*s;dest[3]=a03*c+a13*s;dest[4]=a00*-s+a10*c;dest[5]=a01*-s+a11*c;dest[6]=a02*-s+a12*c;dest[7]=a03*-s+a13*c;return dest};mat4.frustum=function(left,right,bottom,top,near,far,dest){if(!dest){dest=mat4.create()}var rl=right-left,tb=top-bottom,fn=far-near;dest[0]=near*2/rl;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=near*2/tb;dest[6]=0;dest[7]=0;dest[8]=(right+left)/rl;dest[9]=(top+bottom)/tb;dest[10]=-(far+near)/fn;dest[11]=-1;dest[12]=0;dest[13]=0;dest[14]=-(far*near*2)/fn;dest[15]=0;return dest};mat4.perspective=function(fovy,aspect,near,far,dest){var top=near*Math.tan(fovy*Math.PI/360),right=top*aspect;return mat4.frustum(-right,right,-top,top,near,far,dest)};mat4.ortho=function(left,right,bottom,top,near,far,dest){if(!dest){dest=mat4.create()}var rl=right-left,tb=top-bottom,fn=far-near;dest[0]=2/rl;dest[1]=0;dest[2]=0;dest[3]=0;dest[4]=0;dest[5]=2/tb;dest[6]=0;dest[7]=0;dest[8]=0;dest[9]=0;dest[10]=-2/fn;dest[11]=0;dest[12]=-(left+right)/rl;dest[13]=-(top+bottom)/tb;dest[14]=-(far+near)/fn;dest[15]=1;return dest};mat4.lookAt=function(eye,center,up,dest){if(!dest){dest=mat4.create()}var x0,x1,x2,y0,y1,y2,z0,z1,z2,len,eyex=eye[0],eyey=eye[1],eyez=eye[2],upx=up[0],upy=up[1],upz=up[2],centerx=center[0],centery=center[1],centerz=center[2];if(eyex===centerx&&eyey===centery&&eyez===centerz){return mat4.identity(dest)}z0=eyex-centerx;z1=eyey-centery;z2=eyez-centerz;len=1/Math.sqrt(z0*z0+z1*z1+z2*z2);z0*=len;z1*=len;z2*=len;x0=upy*z2-upz*z1;x1=upz*z0-upx*z2;x2=upx*z1-upy*z0;len=Math.sqrt(x0*x0+x1*x1+x2*x2);if(!len){x0=0;x1=0;x2=0}else{len=1/len;x0*=len;x1*=len;x2*=len}y0=z1*x2-z2*x1;y1=z2*x0-z0*x2;y2=z0*x1-z1*x0;len=Math.sqrt(y0*y0+y1*y1+y2*y2);if(!len){y0=0;y1=0;y2=0}else{len=1/len;y0*=len;y1*=len;y2*=len}dest[0]=x0;dest[1]=y0;dest[2]=z0;dest[3]=0;dest[4]=x1;dest[5]=y1;dest[6]=z1;dest[7]=0;dest[8]=x2;dest[9]=y2;dest[10]=z2;dest[11]=0;dest[12]=-(x0*eyex+x1*eyey+x2*eyez);dest[13]=-(y0*eyex+y1*eyey+y2*eyez);dest[14]=-(z0*eyex+z1*eyey+z2*eyez);dest[15]=1;return dest};mat4.fromRotationTranslation=function(quat,vec,dest){if(!dest){dest=mat4.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=0;dest[4]=xy-wz;dest[5]=1-(xx+zz);dest[6]=yz+wx;dest[7]=0;dest[8]=xz+wy;dest[9]=yz-wx;dest[10]=1-(xx+yy);dest[11]=0;dest[12]=vec[0];dest[13]=vec[1];dest[14]=vec[2];dest[15]=1;return dest};mat4.str=function(mat){return"["+mat[0]+", "+mat[1]+", "+mat[2]+", "+mat[3]+", "+mat[4]+", "+mat[5]+", "+mat[6]+", "+mat[7]+", "+mat[8]+", "+mat[9]+", "+mat[10]+", "+mat[11]+", "+mat[12]+", "+mat[13]+", "+mat[14]+", "+mat[15]+"]"};quat4.create=function(quat){var dest=new MatrixArray(4);if(quat){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3]}return dest};quat4.set=function(quat,dest){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3];return dest};quat4.calculateW=function(quat,dest){var x=quat[0],y=quat[1],z=quat[2];if(!dest||quat===dest){quat[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return quat}dest[0]=x;dest[1]=y;dest[2]=z;dest[3]=-Math.sqrt(Math.abs(1-x*x-y*y-z*z));return dest};quat4.dot=function(quat,quat2){return quat[0]*quat2[0]+quat[1]*quat2[1]+quat[2]*quat2[2]+quat[3]*quat2[3]};quat4.inverse=function(quat,dest){var q0=quat[0],q1=quat[1],q2=quat[2],q3=quat[3],dot=q0*q0+q1*q1+q2*q2+q3*q3,invDot=dot?1/dot:0;if(!dest||quat===dest){quat[0]*=-invDot;quat[1]*=-invDot;quat[2]*=-invDot;quat[3]*=invDot;return quat}dest[0]=-quat[0]*invDot;dest[1]=-quat[1]*invDot;dest[2]=-quat[2]*invDot;dest[3]=quat[3]*invDot;return dest};quat4.conjugate=function(quat,dest){if(!dest||quat===dest){quat[0]*=-1;quat[1]*=-1;quat[2]*=-1;return quat}dest[0]=-quat[0];dest[1]=-quat[1];dest[2]=-quat[2];dest[3]=quat[3];return dest};quat4.length=function(quat){var x=quat[0],y=quat[1],z=quat[2],w=quat[3];return Math.sqrt(x*x+y*y+z*z+w*w)};quat4.normalize=function(quat,dest){if(!dest){dest=quat}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],len=Math.sqrt(x*x+y*y+z*z+w*w);if(len===0){dest[0]=0;dest[1]=0;dest[2]=0;dest[3]=0;return dest}len=1/len;dest[0]=x*len;dest[1]=y*len;dest[2]=z*len;dest[3]=w*len;return dest};quat4.add=function(quat,quat2,dest){if(!dest||quat===dest){quat[0]+=quat2[0];quat[1]+=quat2[1];quat[2]+=quat2[2];quat[3]+=quat2[3];return quat}dest[0]=quat[0]+quat2[0];dest[1]=quat[1]+quat2[1];dest[2]=quat[2]+quat2[2];dest[3]=quat[3]+quat2[3];return dest};quat4.multiply=function(quat,quat2,dest){if(!dest){dest=quat}var qax=quat[0],qay=quat[1],qaz=quat[2],qaw=quat[3],qbx=quat2[0],qby=quat2[1],qbz=quat2[2],qbw=quat2[3];dest[0]=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;dest[1]=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;dest[2]=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;dest[3]=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;return dest};quat4.multiplyVec3=function(quat,vec,dest){if(!dest){dest=vec}var x=vec[0],y=vec[1],z=vec[2],qx=quat[0],qy=quat[1],qz=quat[2],qw=quat[3],ix=qw*x+qy*z-qz*y,iy=qw*y+qz*x-qx*z,iz=qw*z+qx*y-qy*x,iw=-qx*x-qy*y-qz*z;dest[0]=ix*qw+iw*-qx+iy*-qz-iz*-qy;dest[1]=iy*qw+iw*-qy+iz*-qx-ix*-qz;dest[2]=iz*qw+iw*-qz+ix*-qy-iy*-qx;return dest};quat4.scale=function(quat,val,dest){if(!dest||quat===dest){quat[0]*=val;quat[1]*=val;quat[2]*=val;quat[3]*=val;return quat}dest[0]=quat[0]*val;dest[1]=quat[1]*val;dest[2]=quat[2]*val;dest[3]=quat[3]*val;return dest};quat4.toMat3=function(quat,dest){if(!dest){dest=mat3.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=xy-wz;dest[4]=1-(xx+zz);dest[5]=yz+wx;dest[6]=xz+wy;dest[7]=yz-wx;dest[8]=1-(xx+yy);return dest};quat4.toMat4=function(quat,dest){if(!dest){dest=mat4.create()}var x=quat[0],y=quat[1],z=quat[2],w=quat[3],x2=x+x,y2=y+y,z2=z+z,xx=x*x2,xy=x*y2,xz=x*z2,yy=y*y2,yz=y*z2,zz=z*z2,wx=w*x2,wy=w*y2,wz=w*z2;dest[0]=1-(yy+zz);dest[1]=xy+wz;dest[2]=xz-wy;dest[3]=0;dest[4]=xy-wz;dest[5]=1-(xx+zz);dest[6]=yz+wx;dest[7]=0;dest[8]=xz+wy;dest[9]=yz-wx;dest[10]=1-(xx+yy);dest[11]=0;dest[12]=0;dest[13]=0;dest[14]=0;dest[15]=1;return dest};quat4.slerp=function(quat,quat2,slerp,dest){if(!dest){dest=quat}var cosHalfTheta=quat[0]*quat2[0]+quat[1]*quat2[1]+quat[2]*quat2[2]+quat[3]*quat2[3],halfTheta,sinHalfTheta,ratioA,ratioB;if(Math.abs(cosHalfTheta)>=1){if(dest!==quat){dest[0]=quat[0];dest[1]=quat[1];dest[2]=quat[2];dest[3]=quat[3]}return dest}halfTheta=Math.acos(cosHalfTheta);sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){dest[0]=quat[0]*.5+quat2[0]*.5;dest[1]=quat[1]*.5+quat2[1]*.5;dest[2]=quat[2]*.5+quat2[2]*.5;dest[3]=quat[3]*.5+quat2[3]*.5;return dest}ratioA=Math.sin((1-slerp)*halfTheta)/sinHalfTheta;ratioB=Math.sin(slerp*halfTheta)/sinHalfTheta;dest[0]=quat[0]*ratioA+quat2[0]*ratioB;dest[1]=quat[1]*ratioA+quat2[1]*ratioB;dest[2]=quat[2]*ratioA+quat2[2]*ratioB;dest[3]=quat[3]*ratioA+quat2[3]*ratioB;return dest};quat4.str=function(quat){return"["+quat[0]+", "+quat[1]+", "+quat[2]+", "+quat[3]+"]"};return{vec3,mat3,mat4,quat4}})();var _emscripten_glBegin=mode=>{GLImmediate.enabledClientAttributes_preBegin=GLImmediate.enabledClientAttributes;GLImmediate.enabledClientAttributes=[];GLImmediate.clientAttributes_preBegin=GLImmediate.clientAttributes;GLImmediate.clientAttributes=[];for(var i=0;i{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindProgram=(type,id)=>{};var _emscripten_glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glEnableClientState=cap=>{var attrib=GLEmulation.getAttributeFromCapability(cap);if(attrib===null){return}if(!GLImmediate.enabledClientAttributes[attrib]){GLImmediate.enabledClientAttributes[attrib]=true;GLImmediate.totalEnabledClientAttributes++;GLImmediate.currentRenderer=null;if(GLEmulation.currentVao)GLEmulation.currentVao.enabledClientStates[cap]=1;GLImmediate.modifiedClientAttributes=true}};var _glEnableClientState=_emscripten_glEnableClientState;var emulGlBindVertexArray=vao=>{GLEmulation.currentVao=null;GLImmediate.lastRenderer?.cleanup();_glBindBuffer(GLctx.ARRAY_BUFFER,0);_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,0);for(var vaa in GLEmulation.enabledVertexAttribArrays){GLctx.disableVertexAttribArray(vaa)}GLEmulation.enabledVertexAttribArrays={};GLImmediate.enabledClientAttributes=[0,0];GLImmediate.totalEnabledClientAttributes=0;GLImmediate.modifiedClientAttributes=true;if(vao){var info=GLEmulation.vaos[vao];_glBindBuffer(GLctx.ARRAY_BUFFER,info.arrayBuffer);_glBindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,info.elementArrayBuffer);for(var vaa in info.enabledVertexAttribArrays){_glEnableVertexAttribArray(vaa)}for(var vaa in info.vertexAttribPointers){_glVertexAttribPointer(...info.vertexAttribPointers[vaa])}for(var attrib in info.enabledClientStates){_glEnableClientState(attrib|0)}GLEmulation.currentVao=info}};var _emscripten_glBindVertexArray=vao=>{emulGlBindVertexArray(vao);var ibo=GLctx.getParameter(34965);GLctx.currentElementArrayBufferBinding=ibo?ibo.name|0:0};var _glBindVertexArray=_emscripten_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBufferData=(target,size,data,usage)=>{switch(usage){case 35041:case 35042:usage=35040;break;case 35045:case 35046:usage=35044;break;case 35049:case 35050:usage=35048;break}GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferSubData=(target,offset,size,data)=>webglBufferSubData(target,offset,size,data);var _emscripten_glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glClear=x0=>GLctx.clear(x0);var _emscripten_glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClientActiveTexture=texture=>{GLImmediate.clientActiveTexture=texture-33984};var _emscripten_glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};var _emscripten_glClipPlane=(pname,param)=>{if(pname>=12288&&pname<12294){var clipPlaneId=pname-12288;GLEmulation.clipPlaneEquation[clipPlaneId][0]=HEAPF64[param>>3];GLEmulation.clipPlaneEquation[clipPlaneId][1]=HEAPF64[param+8>>3];GLEmulation.clipPlaneEquation[clipPlaneId][2]=HEAPF64[param+16>>3];GLEmulation.clipPlaneEquation[clipPlaneId][3]=HEAPF64[param+24>>3];var tmpMV=GLImmediate.matrixLib.mat4.create(GLImmediate.matrix[0]);GLImmediate.matrixLib.mat4.inverse(tmpMV);GLImmediate.matrixLib.mat4.transpose(tmpMV);GLImmediate.matrixLib.mat4.multiplyVec4(tmpMV,GLEmulation.clipPlaneEquation[clipPlaneId])}};var _emscripten_glColor4f=(r,g,b,a)=>{r=Math.max(Math.min(r,1),0);g=Math.max(Math.min(g,1),0);b=Math.max(Math.min(b,1),0);a=Math.max(Math.min(a,1),0);if(GLImmediate.mode>=0){var start=GLImmediate.vertexCounter<<2;GLImmediate.vertexDataU8[start+0]=r*255;GLImmediate.vertexDataU8[start+1]=g*255;GLImmediate.vertexDataU8[start+2]=b*255;GLImmediate.vertexDataU8[start+3]=a*255;GLImmediate.vertexCounter++;GLImmediate.addRendererComponent(GLImmediate.COLOR,4,GLctx.UNSIGNED_BYTE)}else{GLImmediate.clientColor[0]=r;GLImmediate.clientColor[1]=g;GLImmediate.clientColor[2]=b;GLImmediate.clientColor[3]=a}};var _glColor4f=_emscripten_glColor4f;var _emscripten_glColor3f=(r,g,b)=>_glColor4f(r,g,b,1);var _glColor3f=_emscripten_glColor3f;var _emscripten_glColor3d=_glColor3f;var _emscripten_glColor3fv=p=>_glColor3f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2]);var _emscripten_glColor4ub=(r,g,b,a)=>_glColor4f((r&255)/255,(g&255)/255,(b&255)/255,(a&255)/255);var _glColor4ub=_emscripten_glColor4ub;var _emscripten_glColor3ub=(r,g,b)=>_glColor4ub(r,g,b,255);var _glColor3ub=_emscripten_glColor3ub;var _emscripten_glColor3ubv=p=>_glColor3ub(HEAP8[p],HEAP8[p+1],HEAP8[p+2]);var _emscripten_glColor4ui=(r,g,b,a)=>_glColor4f((r>>>0)/4294967295,(g>>>0)/4294967295,(b>>>0)/4294967295,(a>>>0)/4294967295);var _glColor4ui=_emscripten_glColor4ui;var _emscripten_glColor3ui=(r,g,b)=>_glColor4ui(r,g,b,4294967295);var _glColor3ui=_emscripten_glColor3ui;var _emscripten_glColor3uiv=p=>_glColor3ui(HEAP32[p>>2],HEAP32[p+4>>2],HEAP32[p+8>>2]);var _emscripten_glColor4us=(r,g,b,a)=>_glColor4f((r&65535)/65535,(g&65535)/65535,(b&65535)/65535,(a&65535)/65535);var _glColor4us=_emscripten_glColor4us;var _emscripten_glColor3us=(r,g,b)=>_glColor4us(r,g,b,65535);var _glColor3us=_emscripten_glColor3us;var _emscripten_glColor3usv=p=>_glColor3us(HEAP16[p>>1],HEAP16[p+2>>1],HEAP16[p+4>>1]);var _emscripten_glColor4d=_glColor4f;var _emscripten_glColor4fv=p=>_glColor4f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2],HEAPF32[p+12>>2]);var _emscripten_glColor4ubv=p=>_glColor4ub(HEAP8[p],HEAP8[p+1],HEAP8[p+2],HEAP8[p+3]);var _emscripten_glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.COLOR,size,type,stride,pointer)};var _emscripten_glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data,data+imageSize))};var _emscripten_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_glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_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_glCullFace=x0=>GLctx.cullFace(x0);var _emscripten_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;if(id==GLctx.currentArrayBufferBinding)GLctx.currentArrayBufferBinding=0;if(id==GLctx.currentElementArrayBufferBinding)GLctx.currentElementArrayBufferBinding=0}};var _emscripten_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_glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _glDeleteShader=_emscripten_glDeleteShader;var _emscripten_glDeleteObject=id=>{if(GL.programs[id]){_glDeleteProgram(id)}else if(GL.shaders[id]){_glDeleteShader(id)}else{err(`WARNING: deleteObject received invalid id: ${id}`)}};var _emscripten_glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _emscripten_glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var emulGlDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLEmulation.vaos[id]=null;if(GLEmulation.currentVao?.id==id)GLEmulation.currentVao=null}};var _emscripten_glDeleteVertexArrays=(n,vaos)=>{emulGlDeleteVertexArrays(n,vaos)};var _glDeleteVertexArrays=_emscripten_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDepthFunc=x0=>GLctx.depthFunc(x0);var _emscripten_glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);var _emscripten_glDisableClientState=cap=>{var attrib=GLEmulation.getAttributeFromCapability(cap);if(attrib===null){return}if(GLImmediate.enabledClientAttributes[attrib]){GLImmediate.enabledClientAttributes[attrib]=false;GLImmediate.totalEnabledClientAttributes--;GLImmediate.currentRenderer=null;if(GLEmulation.currentVao)delete GLEmulation.currentVao.enabledClientStates[cap];GLImmediate.modifiedClientAttributes=true}};var _emscripten_glDrawArrays=(mode,first,count)=>{if(GLImmediate.totalEnabledClientAttributes==0&&mode<=6){GLctx.drawArrays(mode,first,count);return}GLImmediate.prepareClientAttributes(count,false);GLImmediate.mode=mode;if(!GLctx.currentArrayBufferBinding){GLImmediate.vertexData=HEAPF32.subarray(GLImmediate.vertexPointer>>2,GLImmediate.vertexPointer+(first+count)*GLImmediate.stride>>2);GLImmediate.firstVertex=first;GLImmediate.lastVertex=first+count}GLImmediate.flush(null,first);GLImmediate.mode=-1};var _emscripten_glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstanced=_emscripten_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawBuffer=()=>{abort("glDrawBuffer: TODO")};var tempFixedLengthArray=[];var _emscripten_glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffers=_emscripten_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawElements=(mode,count,type,indices,start,end)=>{if(GLImmediate.totalEnabledClientAttributes==0&&mode<=6&&GLctx.currentElementArrayBufferBinding){GLctx.drawElements(mode,count,type,indices);return}GLImmediate.prepareClientAttributes(count,false);GLImmediate.mode=mode;if(!GLctx.currentArrayBufferBinding){GLImmediate.firstVertex=end?start:HEAP8.length;GLImmediate.lastVertex=end?end+1:0;start=GLImmediate.vertexPointer;if(end){end=GLImmediate.vertexPointer+(end+1)*GLImmediate.stride;GLImmediate.vertexData=HEAPF32.subarray(start>>2,end>>2)}else{GLImmediate.vertexData=HEAPF32.subarray(start>>2)}}GLImmediate.flush(count,0,indices);GLImmediate.mode=-1};var _emscripten_glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstanced=_emscripten_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _glDrawElements=_emscripten_glDrawElements;var _emscripten_glDrawRangeElements=(mode,start,end,count,type,indices)=>{_glDrawElements(mode,count,type,indices,start,end)};var _emscripten_glEnd=()=>{GLImmediate.prepareClientAttributes(GLImmediate.rendererComponents[GLImmediate.VERTEX],true);GLImmediate.firstVertex=0;GLImmediate.lastVertex=GLImmediate.vertexCounter/(GLImmediate.stride>>2);GLImmediate.flush();GLImmediate.disableBeginEndClientAttributes();GLImmediate.mode=-1;GLImmediate.enabledClientAttributes=GLImmediate.enabledClientAttributes_preBegin;GLImmediate.clientAttributes=GLImmediate.clientAttributes_preBegin;GLImmediate.currentRenderer=null;GLImmediate.modifiedClientAttributes=true};var _emscripten_glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glFinish=()=>GLctx.finish();var _emscripten_glFlush=()=>GLctx.flush();var _emscripten_glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFrontFace=x0=>GLctx.frontFace(x0);var _emscripten_glFrustum=(left,right,bottom,top_,nearVal,farVal)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],GLImmediate.matrixLib.mat4.frustum(left,right,bottom,top_,nearVal,farVal))};var _emscripten_glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenTextures=(n,textures)=>{GL.genObject(n,textures,"createTexture",GL.textures)};var emulGlGenVertexArrays=(n,vaos)=>{for(var i=0;i>2]=id}};var _emscripten_glGenVertexArrays=(n,arrays)=>{emulGlGenVertexArrays(n,arrays)};var _glGenVertexArrays=_emscripten_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenerateMipmap=x0=>GLctx.generateMipmap(x0);var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _emscripten_glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name);var _emscripten_glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};var _emscripten_glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _glGetProgramInfoLog=_emscripten_glGetProgramInfoLog;var _emscripten_glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _glGetShaderInfoLog=_emscripten_glGetShaderInfoLog;var _emscripten_glGetInfoLog=(id,maxLength,length,infoLog)=>{if(GL.programs[id]){_glGetProgramInfoLog(id,maxLength,length,infoLog)}else if(GL.shaders[id]){_glGetShaderInfoLog(id,maxLength,length,infoLog)}else{err(`WARNING: glGetInfoLog received invalid id: ${id}`)}};var _emscripten_glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){var numActiveAttributes=GLctx.getProgramParameter(program,35721);for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){var numActiveUniformBlocks=GLctx.getProgramParameter(program,35382);for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _glGetProgramiv=_emscripten_glGetProgramiv;var _emscripten_glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var _glGetShaderiv=_emscripten_glGetShaderiv;var _emscripten_glGetObjectParameteriv=(id,type,result)=>{if(GL.programs[id]){if(type==35716){var log=GLctx.getProgramInfoLog(GL.programs[id]);if(log===null)log="(unknown error)";HEAP32[result>>2]=log.length;return}_glGetProgramiv(id,type,result)}else if(GL.shaders[id]){if(type==35716){var log=GLctx.getShaderInfoLog(GL.shaders[id]);if(log===null)log="(unknown error)";HEAP32[result>>2]=log.length;return}else if(type==35720){var source=GLctx.getShaderSource(GL.shaders[id]);if(source===null)return;HEAP32[result>>2]=source.length;return}_glGetShaderiv(id,type,result)}else{err(`WARNING: getObjectParameteriv received invalid id: ${id}`)}};var _emscripten_glGetPointerv=(name,p)=>{var attribute;switch(name){case 32910:attribute=GLImmediate.clientAttributes[GLImmediate.VERTEX];break;case 32912:attribute=GLImmediate.clientAttributes[GLImmediate.COLOR];break;case 32914:attribute=GLImmediate.clientAttributes[GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture];break;default:GL.recordError(1280);return}HEAP32[p>>2]=attribute?attribute.pointer:0};var _emscripten_glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _glGetQueryObjecti64vEXT=_emscripten_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=_emscripten_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};var _emscripten_glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetTexEnvfv=(target,pname,param)=>abort("GL emulation not initialized!");var _emscripten_glGetTexEnviv=(target,pname,param)=>abort("GL emulation not initialized!");var _emscripten_glGetTexLevelParameteriv=(target,level,pname,params)=>abort("glGetTexLevelParameteriv: TODO");var _emscripten_glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{if(program){var webglLoc=program.uniformLocsById[location];if(typeof webglLoc=="number"){program.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(program,program.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetProgramUniformLocation(program,location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _emscripten_glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _emscripten_glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var emulGlIsVertexArray=array=>{var vao=GLEmulation.vaos[array];if(!vao)return 0;return 1};var _emscripten_glIsVertexArray=array=>emulGlIsVertexArray(array);var _glIsVertexArray=_emscripten_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glLightModelf=(pname,param)=>{if(pname==2898){GLEmulation.lightModelTwoSide=param!=0?true:false}else{abort("glLightModelf: TODO: "+pname)}};var _emscripten_glLightModelfv=(pname,param)=>{if(pname==2899){GLEmulation.lightModelAmbient[0]=HEAPF32[param>>2];GLEmulation.lightModelAmbient[1]=HEAPF32[param+4>>2];GLEmulation.lightModelAmbient[2]=HEAPF32[param+8>>2];GLEmulation.lightModelAmbient[3]=HEAPF32[param+12>>2]}else{abort("glLightModelfv: TODO: "+pname)}};var _emscripten_glLightfv=(light,pname,param)=>{if(light>=16384&&light<16392){var lightId=light-16384;if(pname==4608){GLEmulation.lightAmbient[lightId][0]=HEAPF32[param>>2];GLEmulation.lightAmbient[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightAmbient[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightAmbient[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4609){GLEmulation.lightDiffuse[lightId][0]=HEAPF32[param>>2];GLEmulation.lightDiffuse[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightDiffuse[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightDiffuse[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4610){GLEmulation.lightSpecular[lightId][0]=HEAPF32[param>>2];GLEmulation.lightSpecular[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightSpecular[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightSpecular[lightId][3]=HEAPF32[param+12>>2]}else if(pname==4611){GLEmulation.lightPosition[lightId][0]=HEAPF32[param>>2];GLEmulation.lightPosition[lightId][1]=HEAPF32[param+4>>2];GLEmulation.lightPosition[lightId][2]=HEAPF32[param+8>>2];GLEmulation.lightPosition[lightId][3]=HEAPF32[param+12>>2];GLImmediate.matrixLib.mat4.multiplyVec4(GLImmediate.matrix[0],GLEmulation.lightPosition[lightId])}else{abort("glLightfv: TODO: "+pname)}}};var _emscripten_glLineWidth=x0=>GLctx.lineWidth(x0);var _emscripten_glLoadIdentity=()=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.identity(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadTransposeMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),GLImmediate.matrix[GLImmediate.currentMatrix]);GLImmediate.matrixLib.mat4.transpose(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glLoadTransposeMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),GLImmediate.matrix[GLImmediate.currentMatrix]);GLImmediate.matrixLib.mat4.transpose(GLImmediate.matrix[GLImmediate.currentMatrix])};var _emscripten_glMaterialfv=(face,pname,param)=>{if(face!=1028&&face!=1032){abort("glMaterialfv: TODO"+face)}if(pname==4608){GLEmulation.materialAmbient[0]=HEAPF32[param>>2];GLEmulation.materialAmbient[1]=HEAPF32[param+4>>2];GLEmulation.materialAmbient[2]=HEAPF32[param+8>>2];GLEmulation.materialAmbient[3]=HEAPF32[param+12>>2]}else if(pname==4609){GLEmulation.materialDiffuse[0]=HEAPF32[param>>2];GLEmulation.materialDiffuse[1]=HEAPF32[param+4>>2];GLEmulation.materialDiffuse[2]=HEAPF32[param+8>>2];GLEmulation.materialDiffuse[3]=HEAPF32[param+12>>2]}else if(pname==4610){GLEmulation.materialSpecular[0]=HEAPF32[param>>2];GLEmulation.materialSpecular[1]=HEAPF32[param+4>>2];GLEmulation.materialSpecular[2]=HEAPF32[param+8>>2];GLEmulation.materialSpecular[3]=HEAPF32[param+12>>2]}else if(pname==5633){GLEmulation.materialShininess[0]=HEAPF32[param>>2]}else{abort("glMaterialfv: TODO: "+pname)}};var _emscripten_glMatrixMode=mode=>{if(mode==5888){GLImmediate.currentMatrix=0}else if(mode==5889){GLImmediate.currentMatrix=1}else if(mode==5890){GLImmediate.useTextureMatrix=true;GLImmediate.currentMatrix=2+GLImmediate.TexEnvJIT.getActiveTexture()}else{throw`Wrong mode ${mode} passed to glMatrixMode`}};var _emscripten_glMultMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],HEAPF64.subarray(matrix>>3,matrix+128>>3))};var _emscripten_glMultMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],HEAPF32.subarray(matrix>>2,matrix+64>>2))};var _emscripten_glMultTransposeMatrixd=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;var colMajor=GLImmediate.matrixLib.mat4.create();GLImmediate.matrixLib.mat4.set(HEAPF64.subarray(matrix>>3,matrix+128>>3),colMajor);GLImmediate.matrixLib.mat4.transpose(colMajor);GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],colMajor)};var _emscripten_glMultTransposeMatrixf=matrix=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;var colMajor=GLImmediate.matrixLib.mat4.create();GLImmediate.matrixLib.mat4.set(HEAPF32.subarray(matrix>>2,matrix+64>>2),colMajor);GLImmediate.matrixLib.mat4.transpose(colMajor);GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],colMajor)};var _emscripten_glNormal3f=(x,y,z)=>{GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.addRendererComponent(GLImmediate.NORMAL,3,GLctx.FLOAT)};var _emscripten_glNormalPointer=(type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.NORMAL,3,type,stride,pointer)};var _emscripten_glOrtho=(left,right,bottom,top_,nearVal,farVal)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.multiply(GLImmediate.matrix[GLImmediate.currentMatrix],GLImmediate.matrixLib.mat4.ortho(left,right,bottom,top_,nearVal,farVal))};var _emscripten_glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}else if(pname==3314){GL.unpackRowLength=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPolygonMode=()=>{};var _emscripten_glPolygonModeWEBGL=(face,mode)=>{GLctx.webglPolygonMode["polygonModeWEBGL"](face,mode)};var _emscripten_glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);var _emscripten_glPolygonOffsetClampEXT=(factor,units,clamp)=>{GLctx.extPolygonOffsetClamp["polygonOffsetClampEXT"](factor,units,clamp)};var _emscripten_glPopMatrix=()=>{if(GLImmediate.matrixStack[GLImmediate.currentMatrix].length==0){GL.recordError(1284);return}GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrix[GLImmediate.currentMatrix]=GLImmediate.matrixStack[GLImmediate.currentMatrix].pop()};var _emscripten_glPushMatrix=()=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixStack[GLImmediate.currentMatrix].push(Array.prototype.slice.call(GLImmediate.matrix[GLImmediate.currentMatrix]))};var _emscripten_glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glReadBuffer=()=>{abort("glReadBuffer: TODO")};var computeUnpackAlignedImageSize=(width,height,sizePerPixel)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=(GL.unpackRowLength||width)*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,GL.unpackAlignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};var _emscripten_glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReleaseShaderCompiler=()=>{};var _emscripten_glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);var _emscripten_glRotated=(angle,x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.rotate(GLImmediate.matrix[GLImmediate.currentMatrix],angle*Math.PI/180,[x,y,z])};var _glRotated=_emscripten_glRotated;var _emscripten_glRotatef=_glRotated;var _emscripten_glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glScaled=(x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.scale(GLImmediate.matrix[GLImmediate.currentMatrix],[x,y,z])};var _glScaled=_emscripten_glScaled;var _emscripten_glScalef=_glScaled;var _emscripten_glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);var _emscripten_glShadeModel=()=>warnOnce("TODO: glShadeModel");var _emscripten_glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);var _emscripten_glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);var _emscripten_glStencilMask=x0=>GLctx.stencilMask(x0);var _emscripten_glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);var _emscripten_glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);var _emscripten_glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);var _emscripten_glTexCoord2i=(u,v)=>{GLImmediate.vertexData[GLImmediate.vertexCounter++]=u;GLImmediate.vertexData[GLImmediate.vertexCounter++]=v;GLImmediate.addRendererComponent(GLImmediate.TEXTURE0,2,GLctx.FLOAT)};var _glTexCoord2i=_emscripten_glTexCoord2i;var _emscripten_glTexCoord2f=_glTexCoord2i;var _emscripten_glTexCoord2fv=v=>_glTexCoord2i(HEAPF32[v>>2],HEAPF32[v+4>>2]);var _emscripten_glTexCoord3f=(target,level,internalformat,width,border,format,type,data)=>abort("glTexCoord3f: TODO");var _emscripten_glTexCoord4f=()=>{abort("glTexCoord4f: TODO")};var _emscripten_glTexCoordPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.TEXTURE0+GLImmediate.clientActiveTexture,size,type,stride,pointer)};var _emscripten_glTexGenfv=(coord,pname,param)=>abort("glTexGenfv: TODO");var _emscripten_glTexGeni=(coord,pname,param)=>abort("glTexGeni: TODO");var _emscripten_glTexImage1D=(target,level,internalformat,width,border,format,type,data)=>abort("glTexImage1D: TODO");var _emscripten_glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};var _emscripten_glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);var _emscripten_glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);var _emscripten_glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTranslated=(x,y,z)=>{GLImmediate.matricesModified=true;GLImmediate.matrixVersion[GLImmediate.currentMatrix]=GLImmediate.matrixVersion[GLImmediate.currentMatrix]+1|0;GLImmediate.matrixLib.mat4.translate(GLImmediate.matrix[GLImmediate.currentMatrix],[x,y,z])};var _glTranslated=_emscripten_glTranslated;var _emscripten_glTranslatef=_glTranslated;var webglGetUniformLocation=location=>webglGetProgramUniformLocation(GLctx.currentProgram,location);var _emscripten_glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var miniTempWebGLFloatBuffers=[];var _emscripten_glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var miniTempWebGLIntBuffers=[];var _emscripten_glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2fv=(location,count,value)=>{if(count<=144){count*=2;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2iv=(location,count,value)=>{if(count<=144){count*=2;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3fv=(location,count,value)=>{if(count<=96){count*=3;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3iv=(location,count,value)=>{if(count<=96){count*=3;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>2;count*=4;for(var i=0;i>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4iv=(location,count,value)=>{if(count<=72){count*=4;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){count*=4;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){count*=9;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>2;count*=16;for(var i=0;i>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glVertex2f=(x,y)=>{GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=0;GLImmediate.vertexData[GLImmediate.vertexCounter++]=1;GLImmediate.addRendererComponent(GLImmediate.VERTEX,4,GLctx.FLOAT)};var _glVertex2f=_emscripten_glVertex2f;var _emscripten_glVertex2fv=p=>_glVertex2f(HEAPF32[p>>2],HEAPF32[p+4>>2]);var _emscripten_glVertex2i=_glVertex2f;var _emscripten_glVertex3f=(x,y,z)=>{GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.vertexData[GLImmediate.vertexCounter++]=1;GLImmediate.addRendererComponent(GLImmediate.VERTEX,4,GLctx.FLOAT)};var _glVertex3f=_emscripten_glVertex3f;var _emscripten_glVertex3fv=p=>_glVertex3f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2]);var _emscripten_glVertex3i=_glVertex3f;var _emscripten_glVertex4f=(x,y,z,w)=>{GLImmediate.vertexData[GLImmediate.vertexCounter++]=x;GLImmediate.vertexData[GLImmediate.vertexCounter++]=y;GLImmediate.vertexData[GLImmediate.vertexCounter++]=z;GLImmediate.vertexData[GLImmediate.vertexCounter++]=w;GLImmediate.addRendererComponent(GLImmediate.VERTEX,4,GLctx.FLOAT)};var _glVertex4f=_emscripten_glVertex4f;var _emscripten_glVertex4fv=p=>_glVertex4f(HEAPF32[p>>2],HEAPF32[p+4>>2],HEAPF32[p+8>>2],HEAPF32[p+12>>2]);var _emscripten_glVertex4i=_glVertex4f;var _emscripten_glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);var _emscripten_glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);var _emscripten_glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);var _emscripten_glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);var _emscripten_glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisor=_emscripten_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexPointer=(size,type,stride,pointer)=>{GLImmediate.setClientAttribute(GLImmediate.VERTEX,size,type,stride,pointer)};var _emscripten_glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}if(!JSEvents.canPerformEventHandlerRequests()){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};var _emscripten_request_fullscreen=(target,deferUntilInEventHandler)=>{var strategy={scaleMode:0,canvasResolutionScaleMode:0,filteringMode:0,deferUntilInEventHandler,canvasResizedCallbackTargetThread:2};return doRequestFullscreen(target,strategy)};var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=getFullscreenElement();var isFullscreen=!!fullscreenElement;HEAP8[eventStruct]=isFullscreen;HEAP8[eventStruct+1]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id??"";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>2]=reportedElement?.clientWidth??0;HEAP32[eventStruct+264>>2]=reportedElement?.clientHeight??0;HEAP32[eventStruct+268>>2]=screen.width;HEAP32[eventStruct+272>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{var eventSize=276;JSEvents.fullscreenChangeEvent||=_malloc(eventSize);var fullscreenChangeEventHandlerFunc=e=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,eventTypeId,userData,callbackfunc,handlerFunc:fullscreenChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){return 1}if(!MainLoop.running){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)}}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)}}else{if(!MainLoop.setImmediate){if(globalThis.scheduler){MainLoop.setImmediate=scheduler.postTask.bind(scheduler)}else if(globalThis.setImmediate){MainLoop.setImmediate=setImmediate}else{var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){postMessage(emscriptenMainLoopMessageId)}else{postMessage(emscriptenMainLoopMessageId,"*")}}}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)}}return 0};var MainLoop={running:false,scheduler:null,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(globalThis.requestAnimationFrame){requestAnimationFrame(func)}else{MainLoop.fakeRequestAnimationFrame(func)}}};var _emscripten_get_now=()=>performance.now();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 _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var iterFunc=getWasmTableEntry(func);setMainLoop(iterFunc,fps,simulateInfiniteLoop)};var _fd_close=fd=>52;function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);return 70}var printCharBuffers=[null,[],[]];var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0};var _glBegin=_emscripten_glBegin;var _glBindTexture=_emscripten_glBindTexture;var _glBlendFunc=_emscripten_glBlendFunc;var _glClear=_emscripten_glClear;var _glClearColor=_emscripten_glClearColor;var _glCopyTexSubImage2D=_emscripten_glCopyTexSubImage2D;var _glDeleteTextures=_emscripten_glDeleteTextures;var _glDisableClientState=_emscripten_glDisableClientState;var _glEnd=_emscripten_glEnd;var _glGenTextures=_emscripten_glGenTextures;var _glLineWidth=_emscripten_glLineWidth;var _glLoadIdentity=_emscripten_glLoadIdentity;var _glMatrixMode=_emscripten_glMatrixMode;var _glMultMatrixf=_emscripten_glMultMatrixf;var _glPopMatrix=_emscripten_glPopMatrix;var _glPushMatrix=_emscripten_glPushMatrix;var _glRotatef=_emscripten_glRotatef;var _glScalef=_emscripten_glScalef;var _glTexCoord2f=_emscripten_glTexCoord2f;var _glTexImage2D=_emscripten_glTexImage2D;var _glTexParameteri=_emscripten_glTexParameteri;var _glTranslatef=_emscripten_glTranslatef;var _glVertexPointer=_emscripten_glVertexPointer;var _glViewport=_emscripten_glViewport;function GLFW_Window(id,width,height,framebufferWidth,framebufferHeight,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.framebufferWidth=framebufferWidth;this.framebufferHeight=framebufferHeight;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes={...GLFW.hints};this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=0;this.windowSizeFunc=0;this.windowCloseFunc=0;this.windowRefreshFunc=0;this.windowFocusFunc=0;this.windowIconifyFunc=0;this.windowMaximizeFunc=0;this.framebufferSizeFunc=0;this.windowContentScaleFunc=0;this.mouseButtonFunc=0;this.cursorPosFunc=0;this.cursorEnterFunc=0;this.scrollFunc=0;this.dropFunc=0;this.keyFunc=0;this.charFunc=0;this.userptr=0}var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("node:crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>(crypto.getRandomValues(view),0)};var randomFill=view=>(randomFill=initRandomFill())(view);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 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 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(globalThis.window?.prompt){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 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,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=MEMFS.emptyFileContents??=new Uint8Array(0)}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){return node.contents.subarray(0,node.usedBytes)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents.length;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity)newCapacity=Math.max(newCapacity,256);var oldContents=MEMFS.getFileDataAsTypedArray(node);node.contents=new Uint8Array(newCapacity);node.contents.set(oldContents)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;var oldContents=node.contents;node.contents=new Uint8Array(newSize);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){if(!MEMFS.doesNotExistError){MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack=""}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);buffer.set(contents.subarray(position,position+size),offset);return size},write(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.mtime=node.ctime=Date.now();if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length}else{MEMFS.expandFileStorage(node,position+length);node.contents.set(buffer.subarray(offset,offset+length),position);node.usedBytes=Math.max(node.usedBytes,position+length)}return length},llseek(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},mmap(stream,length,position,prot,flags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===HEAP8.buffer){allocated=false;ptr=contents.byteOffset}else{allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}if(contents){if(position>0||position+length{if(typeof str!="string")return 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_fileDataToTypedArray=data=>{if(typeof data=="string"){data=intArrayFromString(data,true)}if(!data.subarray){data=new Uint8Array(data)}return data};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var asyncLoad=async url=>{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var getUniqueRunDependency=id=>id;var FS_handledByPreloadPlugin=async(byteArray,fullname)=>{if(typeof Browser!="undefined")Browser.init();for(var plugin of preloadPlugins){if(plugin["canHandle"](fullname)){return plugin["handle"](byteArray,fullname)}}return byteArray};var FS_preloadFile=async(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);addRunDependency(dep);try{var byteArray=url;if(typeof url=="string"){byteArray=await asyncLoad(url)}byteArray=await FS_handledByPreloadPlugin(byteArray,fullname);preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}}finally{removeRunDependency(dep)}};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{FS_preloadFile(parent,name,url,canRead,canWrite,dontCreateFile,canOwn,preFinish).then(onload).catch(onerror)};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},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}if(perms.includes("w")&&!(node.mode&146)){return 2}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}var mode=FS.flagsToPermissionString(flags);if(FS.isDir(node.mode)){if(mode!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,mode)},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);try{setattr(arg,attr)}catch(e){if(e instanceof RangeError){throw new FS.ErrnoError(22)}throw e}},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)}}for(var mount of mounts){if(mount.type.syncfs){mount.type.syncfs(mount,populate,done)}else{done(null)}}},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);for(var[hash,current]of Object.entries(FS.nameTable)){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 dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=FS_modeStringToFlags(flags);if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags??0;opts.encoding=opts.encoding??"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){abort(`Invalid encoding type "${opts.encoding}"`)}var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){buf=UTF8ArrayToString(buf)}FS.close(stream);return buf},writeFile(path,data,opts={}){opts.flags=opts.flags??577;var stream=FS.open(path,opts.flags,opts.mode);data=FS_fileDataToTypedArray(data);FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn);FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,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;for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){data=FS_fileDataToTypedArray(data);FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}},createDevice(parent,name,input,output){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(!!input,!!output);FS.createDevice.major??=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open(stream){stream.seekable=false},close(stream){if(output?.buffer?.length){output(10)}},read(stream,buffer,offset,length,pos){var bytesRead=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))abort("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)abort(`invalid range (${from}, ${to}) or no bytes requested!`);if(to>datalength-1)abort(`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))abort("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")abort("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(globalThis.XMLHttpRequest){if(!ENVIRONMENT_IS_WORKER)abort("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={};for(const[key,fn]of Object.entries(node.stream_ops)){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 GLFW={WindowFromId:id=>{if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:0,errorFunc:0,monitorFunc:0,active:null,scale:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,devicePixelRatioMQL:null,hints:null,primaryTouchId:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,131082:0,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0,139276:0},DOMToGLFWKeyCode:keycode=>{switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 96;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 224:return 343;case 93:return 348;default:return-1}},getModBits:win=>{var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343]||win.keys[348])mod|=8;return mod},onKeyPress:event=>{if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;getWasmTableEntry(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:(keyCode,status)=>{if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(GLFW.active.keyFunc){if(repeat)status=2;getWasmTableEntry(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))}},onGamepadConnected:event=>{GLFW.refreshJoysticks()},onGamepadDisconnected:event=>{GLFW.refreshJoysticks()},onKeydown:event=>{GLFW.onKeyChanged(event.keyCode,1);if(event.key=="Backspace"||event.key=="Tab"){event.preventDefault()}},onKeyup:event=>{GLFW.onKeyChanged(event.keyCode,0)},onBlur:event=>{if(!GLFW.active)return;for(var i=0;i{if(!GLFW.active)return;if(event.type==="touchmove"){event.preventDefault();let primaryChanged=false;for(let i of event.changedTouches){if(GLFW.primaryTouchId===i.identifier){Browser.setMouseCoords(i.pageX,i.pageY);primaryChanged=true;break}}if(!primaryChanged){return}}else{Browser.calculateMouseEvent(event)}if(event.target!=Browser.getCanvas()||!GLFW.active.cursorPosFunc)return;if(GLFW.active.cursorPosFunc){getWasmTableEntry(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)}},DOMToGLFWMouseButton:event=>{var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:event=>{if(!GLFW.active)return;if(event.target!=Browser.getCanvas())return;if(GLFW.active.cursorEnterFunc){getWasmTableEntry(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)}},onMouseleave:event=>{if(!GLFW.active)return;if(event.target!=Browser.getCanvas())return;if(GLFW.active.cursorEnterFunc){getWasmTableEntry(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)}},onMouseButtonChanged:(event,status)=>{if(!GLFW.active)return;if(event.target!=Browser.getCanvas())return;const isTouchType=event.type==="touchstart"||event.type==="touchend"||event.type==="touchcancel";let eventButton=0;if(isTouchType){event.preventDefault();let primaryChanged=false;if(GLFW.primaryTouchId===null&&event.type==="touchstart"&&event.targetTouches.length>0){const chosenTouch=event.targetTouches[0];GLFW.primaryTouchId=chosenTouch.identifier;Browser.setMouseCoords(chosenTouch.pageX,chosenTouch.pageY);primaryChanged=true}else if(event.type==="touchend"||event.type==="touchcancel"){for(let i of event.changedTouches){if(GLFW.primaryTouchId===i.identifier){GLFW.primaryTouchId=null;primaryChanged=true;break}}}if(!primaryChanged){return}}else{Browser.calculateMouseEvent(event);eventButton=GLFW.DOMToGLFWMouseButton(event)}if(status==1){GLFW.active.buttons|=1<{if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:event=>{if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:event=>{var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Browser.getCanvas())return;var sx=0;var sy=delta;if(event.type=="mousewheel"){sx=event.wheelDeltaX}else{sx=event.deltaX}getWasmTableEntry(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:(width,height,framebufferWidth,framebufferHeight)=>{if(!GLFW.active)return;var resizeNeeded=false;if(getFullscreenElement()){if(!GLFW.active.fullscreen){resizeNeeded=width!=screen.width||height!=screen.height;GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}}else if(GLFW.active.fullscreen==true){resizeNeeded=width!=GLFW.active.storedWidth||height!=GLFW.active.storedHeight;GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height)}else if(GLFW.active.width!=width||GLFW.active.height!=height||GLFW.active.framebufferWidth!=framebufferWidth||GLFW.active.framebufferHeight!=framebufferHeight){GLFW.active.width=width;GLFW.active.height=height;GLFW.active.framebufferWidth=framebufferWidth;GLFW.active.framebufferHeight=framebufferHeight;GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:()=>{if(!GLFW.active)return;if(GLFW.active.windowSizeFunc){getWasmTableEntry(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)}},onFramebufferSizeChanged:()=>{if(!GLFW.active)return;if(GLFW.active.framebufferSizeFunc){getWasmTableEntry(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.framebufferWidth,GLFW.active.framebufferHeight)}},onWindowContentScaleChanged:scale=>{GLFW.scale=scale;if(!GLFW.active)return;if(GLFW.active.windowContentScaleFunc){getWasmTableEntry(GLFW.active.windowContentScaleFunc)(GLFW.active.id,GLFW.scale,GLFW.scale)}},getTime:()=>_emscripten_get_now()/1e3,setWindowTitle:(winid,title)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.title=title;if(GLFW.active.id==win.id){_emscripten_set_window_title(title)}},setJoystickCallback:cbfun=>{var prevcbfun=GLFW.joystickFunc;GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks();return prevcbfun},joys:{},lastGamepadState:[],lastGamepadStateFrame:null,refreshJoysticks:()=>{if(MainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!MainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads||[];GLFW.lastGamepadStateFrame=MainLoop.currentFrameNumber;for(var joy=0;joy>2]=gamepad.axes[i]}}else{if(GLFW.joys[joy]){out("glfw joystick disconnected",joy);if(GLFW.joystickFunc){getWasmTableEntry(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:event=>{if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var drop_dir=".glfw_dropped_files";var filenames=_malloc(event.dataTransfer.files.length*4);var filenamesArray=[];for(var i=0;i>2]=filename}var written=0;FS.createPath("/",drop_dir);function save(file,in_path,numfiles){var path="/"+drop_dir+in_path+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=e=>{if(reader.readyState!=2){++written;err(`failed to read dropped file: ${in_path}/${file.name}: ${reader.error}`);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===numfiles){getWasmTableEntry(GLFW.active.dropFunc)(GLFW.active.id,filenamesArray.length,filenames);for(var i=0;i-1)entriesTree[parentpath].subpaths.splice(fpIndex,1);if(recursive)markDone(parentpath,true);if(Object.keys(entriesTree).length==0)finalize()}function processEntry(entry){let fp=entry.fullPath;let pp=fp.substring(0,fp.lastIndexOf("/"));entriesTree[fp]={subpaths:[]};if(entry.isFile){entry.file(f=>{filesQ.push({file:f,path:pp});markDone(fp,false)})}else if(entry.isDirectory){if(entriesTree.hasOwnProperty(pp))entriesTree[pp].subpaths.push(fp);FS.createPath("/"+drop_dir+pp,entry.name);var reader=entry.createReader();var rRead=function(dirEntries){if(dirEntries.length==0){markDone(fp,true);return}for(const ent of dirEntries)processEntry(ent);reader.readEntries(rRead)};reader.readEntries(rRead)}}for(const item of event.dataTransfer.items){processEntry(item.webkitGetAsEntry())}}else{for(const file of event.dataTransfer.files){filesQ.push({file,path:""})}finalize()}return false},onDragover:event=>{if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:(winid,cbfun)=>{var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:e=>{var canvas=Browser.getCanvas();if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();e.preventDefault()}},setInputMode:(winid,mode,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{var canvas=Browser.getCanvas();switch(value){case 212993:{win.inputModes[mode]=value;canvas.removeEventListener("click",GLFW.onClickRequestPointerLock,true);document.exitPointerLock();break}case 212994:{err("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented");break}case 212995:{win.inputModes[mode]=value;canvas.addEventListener("click",GLFW.onClickRequestPointerLock,true);canvas.requestPointerLock();break}default:{err(`glfwSetInputMode called with unknown value parameter value: ${value}`);break}}break}case 208898:{err("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented");break}case 208899:{err("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented");break}case 208900:{err("glfwSetInputMode called with GLFW_LOCK_KEY_MODS mode not implemented");break}case 208901:{err("glfwSetInputMode called with GLFW_RAW_MOUSE_MOTION mode not implemented");break}default:{err(`glfwSetInputMode called with unknown mode parameter value: ${mode}`);break}}},getKey:(winid,key)=>{var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:(winid,button)=>{var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<0},getCursorPos:(winid,x,y)=>{HEAPF64[x>>3]=Browser.mouseX;HEAPF64[y>>3]=Browser.mouseY},getMousePos:(winid,x,y)=>{HEAP32[x>>2]=Browser.mouseX;HEAP32[y>>2]=Browser.mouseY},setCursorPos:(winid,x,y)=>{},getWindowPos:(winid,x,y)=>{var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){HEAP32[x>>2]=wx}if(y){HEAP32[y>>2]=wy}},setWindowPos:(winid,x,y)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:(winid,width,height)=>{var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){HEAP32[width>>2]=ww}if(height){HEAP32[height>>2]=wh}},setWindowSize:(winid,width,height)=>{var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){Browser.setCanvasSize(width,height)}},defaultWindowHints:()=>{GLFW.hints={...GLFW.defaultHints}},createWindow:(width,height,title,monitor,share)=>{var i,id;for(i=0;i0)abort("glfwCreateWindow only supports one window at time currently");id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Browser.createContext(canvas,true,true,contextAttributes)}else{Browser.init()}}if(!Module["ctx"]&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,canvas.width,canvas.height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;GLFW.adjustCanvasDimensions();return win.id},destroyWindow:winid=>{var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc){getWasmTableEntry(win.windowCloseFunc)(win.id)}GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id){GLFW.active=null}for(win of GLFW.windows){if(win!==null)return}delete Module["ctx"]},swapBuffers:winid=>{},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=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if(getFullscreenElement()===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas);Browser.updateResizeListeners()}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas);Browser.updateResizeListeners()}}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()},updateCanvasDimensions(canvas,wNative,hNative){const scale=GLFW.getHiDPIScale();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"]&&Module["forcedAspectRatio"]>0){if(w/h{var win=GLFW.WindowFromId(winid);if(!win)return;const isHiDPIAware=GLFW.isHiDPIAware();win.attributes[attrib]=value;if(isHiDPIAware!==GLFW.isHiDPIAware())GLFW.adjustCanvasDimensions()},getDevicePixelRatio(){return typeof devicePixelRatio=="number"&&devicePixelRatio||1},isHiDPIAware(){if(GLFW.active)return GLFW.active.attributes[139276]>0;else return false},isCSSScalingEnabled(){return!GLFW.isHiDPIAware()},adjustCanvasDimensions(){if(GLFW.active){Browser.updateCanvasDimensions(Browser.getCanvas(),GLFW.active.width,GLFW.active.height);Browser.updateResizeListeners()}},getHiDPIScale(){return GLFW.isHiDPIAware()?GLFW.scale:1},onDevicePixelRatioChange(){GLFW.onWindowContentScaleChanged(GLFW.getDevicePixelRatio());GLFW.adjustCanvasDimensions()},GLFW2ParamToGLFW3Param:param=>{var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};var _glfwCreateWindow=(width,height,title,monitor,share)=>GLFW.createWindow(width,height,title,monitor,share);var _glfwGetKey=(winid,key)=>GLFW.getKey(winid,key);var _glfwGetTime=()=>GLFW.getTime()-GLFW.initialTime;var _glfwInit=()=>{if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.defaultWindowHints();GLFW.windows=new Array;GLFW.active=null;GLFW.scale=GLFW.getDevicePixelRatio();window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);GLFW.devicePixelRatioMQL=window.matchMedia("(resolution: "+GLFW.getDevicePixelRatio()+"dppx)");GLFW.devicePixelRatioMQL.addEventListener("change",GLFW.onDevicePixelRatioChange);var canvas=Browser.getCanvas();canvas.addEventListener("touchmove",GLFW.onMousemove,true);canvas.addEventListener("touchstart",GLFW.onMouseButtonDown,true);canvas.addEventListener("touchcancel",GLFW.onMouseButtonUp,true);canvas.addEventListener("touchend",GLFW.onMouseButtonUp,true);canvas.addEventListener("mousemove",GLFW.onMousemove,true);canvas.addEventListener("mousedown",GLFW.onMouseButtonDown,true);canvas.addEventListener("mouseup",GLFW.onMouseButtonUp,true);canvas.addEventListener("wheel",GLFW.onMouseWheel,true);canvas.addEventListener("mousewheel",GLFW.onMouseWheel,true);canvas.addEventListener("mouseenter",GLFW.onMouseenter,true);canvas.addEventListener("mouseleave",GLFW.onMouseleave,true);canvas.addEventListener("drop",GLFW.onDrop,true);canvas.addEventListener("dragover",GLFW.onDragover,true);Browser.requestFullscreen=GLFW.requestFullscreen;Browser.calculateMouseCoords=GLFW.calculateMouseCoords;Browser.updateCanvasDimensions=GLFW.updateCanvasDimensions;Browser.resizeListeners.push((width,height)=>{if(GLFW.isHiDPIAware()){var canvas=Browser.getCanvas();GLFW.onCanvasResize(canvas.clientWidth,canvas.clientHeight,width,height)}else{GLFW.onCanvasResize(width,height,width,height)}});return 1};var _glfwMakeContextCurrent=winid=>0;var _glfwPollEvents=()=>0;var _glfwSetKeyCallback=(winid,cbfun)=>GLFW.setKeyCallback(winid,cbfun);var _glfwSetWindowShouldClose=(winid,value)=>{var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value};var _glfwSwapBuffers=winid=>GLFW.swapBuffers(winid);var _glfwSwapInterval=interval=>{interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)};var _glfwTerminate=()=>{window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);var canvas=Browser.getCanvas();canvas.removeEventListener("touchmove",GLFW.onMousemove,true);canvas.removeEventListener("touchstart",GLFW.onMouseButtonDown,true);canvas.removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);canvas.removeEventListener("touchend",GLFW.onMouseButtonUp,true);canvas.removeEventListener("mousemove",GLFW.onMousemove,true);canvas.removeEventListener("mousedown",GLFW.onMouseButtonDown,true);canvas.removeEventListener("mouseup",GLFW.onMouseButtonUp,true);canvas.removeEventListener("wheel",GLFW.onMouseWheel,true);canvas.removeEventListener("mousewheel",GLFW.onMouseWheel,true);canvas.removeEventListener("mouseenter",GLFW.onMouseenter,true);canvas.removeEventListener("mouseleave",GLFW.onMouseleave,true);canvas.removeEventListener("drop",GLFW.onDrop,true);canvas.removeEventListener("dragover",GLFW.onDragover,true);if(GLFW.devicePixelRatioMQL)GLFW.devicePixelRatioMQL.removeEventListener("change",GLFW.onDevicePixelRatioChange);canvas.width=canvas.height=1;GLFW.windows=null;GLFW.active=null};var _glfwWindowHint=(target,hint)=>{GLFW.hints[target]=hint};registerPreMainLoop(()=>GL.newRenderingFrameStarted());GLImmediate.setupFuncs();Browser.moduleContextCreatedCallbacks.push(()=>GLImmediate.init());var _emscripten_glDrawArrays;var _emscripten_glDrawElements;var _emscripten_glActiveTexture;var _emscripten_glEnable;var _emscripten_glDisable;var _emscripten_glTexEnvf;var _emscripten_glTexEnvi;var _emscripten_glTexEnvfv;var _emscripten_glGetIntegerv;var _emscripten_glIsEnabled;var _emscripten_glGetBooleanv;var _emscripten_glGetString;var _emscripten_glCreateShader;var _emscripten_glShaderSource;var _emscripten_glCompileShader;var _emscripten_glAttachShader;var _emscripten_glDetachShader;var _emscripten_glUseProgram;var _emscripten_glDeleteProgram;var _emscripten_glBindAttribLocation;var _emscripten_glLinkProgram;var _emscripten_glBindBuffer;var _emscripten_glGetFloatv;var _emscripten_glHint;var _emscripten_glEnableVertexAttribArray;var _emscripten_glDisableVertexAttribArray;var _emscripten_glVertexAttribPointer;var _glTexEnvf;var _glTexEnvi;var _glTexEnvfv;var _glGetTexEnviv;var _glGetTexEnvfv;GLEmulation.init();for(let i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<=288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<=288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();FS.createPreloadedFile=FS_createPreloadedFile;FS.preloadFile=FS_preloadFile;FS.staticInit();{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}var _main,_malloc,_free,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current,memory,__indirect_function_table,wasmMemory,wasmTable;function assignWasmExports(wasmExports){_main=Module["_main"]=wasmExports["__main_argc_argv"];_malloc=wasmExports["malloc"];_free=wasmExports["free"];__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"];__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"];_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmTable=wasmExports["__indirect_function_table"]}var wasmImports={_localtime_js:__localtime_js,_tzset_js:__tzset_js,emscripten_date_now:_emscripten_date_now,emscripten_exit_fullscreen:_emscripten_exit_fullscreen,emscripten_get_canvas_element_size:_emscripten_get_canvas_element_size,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAlphaFunc:_emscripten_glAlphaFunc,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBegin:_emscripten_glBegin,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindProgram:_emscripten_glBindProgram,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glClientActiveTexture:_emscripten_glClientActiveTexture,emscripten_glClipControlEXT:_emscripten_glClipControlEXT,emscripten_glClipPlane:_emscripten_glClipPlane,emscripten_glColor3d:_emscripten_glColor3d,emscripten_glColor3f:_emscripten_glColor3f,emscripten_glColor3fv:_emscripten_glColor3fv,emscripten_glColor3ub:_emscripten_glColor3ub,emscripten_glColor3ubv:_emscripten_glColor3ubv,emscripten_glColor3ui:_emscripten_glColor3ui,emscripten_glColor3uiv:_emscripten_glColor3uiv,emscripten_glColor3us:_emscripten_glColor3us,emscripten_glColor3usv:_emscripten_glColor3usv,emscripten_glColor4d:_emscripten_glColor4d,emscripten_glColor4f:_emscripten_glColor4f,emscripten_glColor4fv:_emscripten_glColor4fv,emscripten_glColor4ub:_emscripten_glColor4ub,emscripten_glColor4ubv:_emscripten_glColor4ubv,emscripten_glColor4ui:_emscripten_glColor4ui,emscripten_glColor4us:_emscripten_glColor4us,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glColorPointer:_emscripten_glColorPointer,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteObject:_emscripten_glDeleteObject,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableClientState:_emscripten_glDisableClientState,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawBuffer:_emscripten_glDrawBuffer,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glDrawRangeElements:_emscripten_glDrawRangeElements,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableClientState:_emscripten_glEnableClientState,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEnd:_emscripten_glEnd,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glFrustum:_emscripten_glFrustum,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetInfoLog:_emscripten_glGetInfoLog,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetObjectParameteriv:_emscripten_glGetObjectParameteriv,emscripten_glGetPointerv:_emscripten_glGetPointerv,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetTexEnvfv:_emscripten_glGetTexEnvfv,emscripten_glGetTexEnviv:_emscripten_glGetTexEnviv,emscripten_glGetTexLevelParameteriv:_emscripten_glGetTexLevelParameteriv,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLightModelf:_emscripten_glLightModelf,emscripten_glLightModelfv:_emscripten_glLightModelfv,emscripten_glLightfv:_emscripten_glLightfv,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glLoadIdentity:_emscripten_glLoadIdentity,emscripten_glLoadMatrixd:_emscripten_glLoadMatrixd,emscripten_glLoadMatrixf:_emscripten_glLoadMatrixf,emscripten_glLoadTransposeMatrixd:_emscripten_glLoadTransposeMatrixd,emscripten_glLoadTransposeMatrixf:_emscripten_glLoadTransposeMatrixf,emscripten_glMaterialfv:_emscripten_glMaterialfv,emscripten_glMatrixMode:_emscripten_glMatrixMode,emscripten_glMultMatrixd:_emscripten_glMultMatrixd,emscripten_glMultMatrixf:_emscripten_glMultMatrixf,emscripten_glMultTransposeMatrixd:_emscripten_glMultTransposeMatrixd,emscripten_glMultTransposeMatrixf:_emscripten_glMultTransposeMatrixf,emscripten_glNormal3f:_emscripten_glNormal3f,emscripten_glNormalPointer:_emscripten_glNormalPointer,emscripten_glOrtho:_emscripten_glOrtho,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonMode:_emscripten_glPolygonMode,emscripten_glPolygonModeWEBGL:_emscripten_glPolygonModeWEBGL,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glPolygonOffsetClampEXT:_emscripten_glPolygonOffsetClampEXT,emscripten_glPopMatrix:_emscripten_glPopMatrix,emscripten_glPushMatrix:_emscripten_glPushMatrix,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadBuffer:_emscripten_glReadBuffer,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glRotated:_emscripten_glRotated,emscripten_glRotatef:_emscripten_glRotatef,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glScaled:_emscripten_glScaled,emscripten_glScalef:_emscripten_glScalef,emscripten_glScissor:_emscripten_glScissor,emscripten_glShadeModel:_emscripten_glShadeModel,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexCoord2f:_emscripten_glTexCoord2f,emscripten_glTexCoord2fv:_emscripten_glTexCoord2fv,emscripten_glTexCoord2i:_emscripten_glTexCoord2i,emscripten_glTexCoord3f:_emscripten_glTexCoord3f,emscripten_glTexCoord4f:_emscripten_glTexCoord4f,emscripten_glTexCoordPointer:_emscripten_glTexCoordPointer,emscripten_glTexGenfv:_emscripten_glTexGenfv,emscripten_glTexGeni:_emscripten_glTexGeni,emscripten_glTexImage1D:_emscripten_glTexImage1D,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glTranslated:_emscripten_glTranslated,emscripten_glTranslatef:_emscripten_glTranslatef,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertex2f:_emscripten_glVertex2f,emscripten_glVertex2fv:_emscripten_glVertex2fv,emscripten_glVertex2i:_emscripten_glVertex2i,emscripten_glVertex3f:_emscripten_glVertex3f,emscripten_glVertex3fv:_emscripten_glVertex3fv,emscripten_glVertex3i:_emscripten_glVertex3i,emscripten_glVertex4f:_emscripten_glVertex4f,emscripten_glVertex4fv:_emscripten_glVertex4fv,emscripten_glVertex4i:_emscripten_glVertex4i,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glVertexPointer:_emscripten_glVertexPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_request_fullscreen:_emscripten_request_fullscreen,emscripten_resize_heap:_emscripten_resize_heap,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,fd_close:_fd_close,fd_seek:_fd_seek,fd_write:_fd_write,glBegin:_glBegin,glBindTexture:_glBindTexture,glBlendFunc:_glBlendFunc,glClear:_glClear,glClearColor:_glClearColor,glColor3f:_glColor3f,glColor4f:_glColor4f,glCopyTexSubImage2D:_glCopyTexSubImage2D,glDeleteTextures:_glDeleteTextures,glDisable:_glDisable,glDisableClientState:_glDisableClientState,glDrawElements:_glDrawElements,glEnable:_glEnable,glEnableClientState:_glEnableClientState,glEnd:_glEnd,glGenTextures:_glGenTextures,glGetFloatv:_glGetFloatv,glGetIntegerv:_glGetIntegerv,glLineWidth:_glLineWidth,glLoadIdentity:_glLoadIdentity,glMatrixMode:_glMatrixMode,glMultMatrixf:_glMultMatrixf,glPopMatrix:_glPopMatrix,glPushMatrix:_glPushMatrix,glRotatef:_glRotatef,glScalef:_glScalef,glTexCoord2f:_glTexCoord2f,glTexImage2D:_glTexImage2D,glTexParameteri:_glTexParameteri,glTranslatef:_glTranslatef,glVertex2f:_glVertex2f,glVertex3f:_glVertex3f,glVertexPointer:_glVertexPointer,glViewport:_glViewport,glfwCreateWindow:_glfwCreateWindow,glfwGetKey:_glfwGetKey,glfwGetTime:_glfwGetTime,glfwInit:_glfwInit,glfwMakeContextCurrent:_glfwMakeContextCurrent,glfwPollEvents:_glfwPollEvents,glfwSetKeyCallback:_glfwSetKeyCallback,glfwSetWindowShouldClose:_glfwSetWindowShouldClose,glfwSwapBuffers:_glfwSwapBuffers,glfwSwapInterval:_glfwSwapInterval,glfwTerminate:_glfwTerminate,glfwWindowHint:_glfwWindowHint};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;for(var arg of args){HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4}HEAPU32[argv_ptr>>2]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=programArgs){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();var noInitialRun=Module["noInitialRun"]||false;if(!noInitialRun)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;createWasm();run(); diff --git a/web/vectorgons.wasm b/web/vectorgons.wasm new file mode 100755 index 0000000000000000000000000000000000000000..1c5500ca9bab6ec812605794f973d3c4d5e692fe GIT binary patch literal 508761 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

lXTyAjaPsIY;M>es5CEfddV96EQmju< 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

Lap@{dg^n=m={l8UjV= zQyr3PA}Uug#ZiX>5sx&*L1A5>FZWn^`W-U{FNu9UDzQ;`II6(W;B~z&h(Y;kv2vPNb!e0 zh!==e_~UIfhBiVsXXF^_sgRjdknG8;6_$~WQi?Nhk(FW@PF}5%%lf>!^A3#u12Z;B zE8kpPlMXj_uWS;8(~xlooGFw}0!W$%4QaA=v3XP!{c`3pFz2DPOxPW9nZ#fcR+Zg& zgWhdSh7)c;Us@fr0c~|8`F8gzm{#mx17}6q8X%8MQ-%-!*c!0jl{ElJ``nb)!1^jn zr#Ow_*1+|N`*VZnXdwP8#1-f$7{XFSP+&Z)tV}-%I;E&R#{D}yj)RIz>oQ}KA zIYS7kuzy!PQB7OZ#3fZj0p?mLH=rOK%C(s;BPlKI_oYJEkXvF`{?yntyu(mjeg_nZ zvT+r!msb_uQ;X-;fv zx>A9q&4F=?y&ary>8{9A+bSUVder4zUU${{3+{Q*vmWU_0AuSz!zu-+kHt@tjq zY?#c@mgx|yK&5$P98o4f0lJop)*$V|)`Nsb+wUqoh{W(lueXOt2HH>8 z%yV_{cEtia9V@bt%g@NtGl(W$z5ZUyr@nN}!oqy7?KTry>^Rs@GpxKB#00QP!_KPq zohnvo&1Q4~6@oVw-kHI^_c59Y#c1;J?j%OzByP0fg;BlFAQQ~lYc3ke%PTt~%fw6b zG2sR0X8W2x?3@$OqYW949)WKmcW1GQ;Di-SNoTPYs>WH;U#;W2%wibWBy%fZUT;SGKIQnQ!`~tZ*tyUgYBv*GE9J?0Ox3 zla|lhMtYNO7tXS+<^1sy`(W3Q#C?!~qvG_jLx$(8?bU6-IN1stI#+S|$PhHx$+mY~ zKOtU@WeN|*af{$VK^$QMmf|d0)`C))E`b(@*X z_@GGMHNTU9C=*z$_noEQ>_I?B8ixS9fA`3uy}xkwnMrW2X}MutRIZ8X7_RUt4qDhvwk4HJM2O(_3qNFABe9WH^Dn_&ZQTJIfuZF z?U!%fuiHQzwU98PQaP_uY;KQIilR5Ny7AM$$->4Tt(~srDa%Pm2v*Y3yWw_%-%*vW zSfoaZ!Y^@of&2#2NI_X6Mp*$^hKw6u{)9Jv(uSVJI|6wQ8zdsDRqS!aL7=k<2Z@Vu z#X%H1HX3)3uwFlTzUWMY_)V@jh}+~Md(Q}F*buOZ4IwTLvY@~+(x9#|2q7W&45`qf z+rck77y^ve2!TWvAH08D?!}CKn5Ym8OZIZW)#4WpH1iD1#yS!kYYH+_JgGI@Gzb(r z=ETX^x_5r#r{6OQMg0a*ZMl*mcoZG2kD7-dqp5kh^gCzR#XZ@8m{%CR%|)O*@wK|5E#?! z3v#8WbeK19h>j8Ci%T4K#)__xrT3&uB^=xb7MuadX#sBl)=_41s*JKiJCsl+?kUGz z-Ih;?MJT1ZU>L<3{2)cN&+VheVWPX@C5)c$wO%clY zD*IuL;D;^2RDGNQKK)084f9v?fx=H`wyx$T}dyw&sbH4B}K*mzn0 zwvYX6^?!NWx7Ng@m7EkCA1QhWm);T87uL-4c>AX#e1Lt_YA_A>TE=9aDvVIP+9&g@ z5gBb%p}deZ#K%QLhAf2>dMnmH&+Mx2Y5z9gBVVD5&8tX^Riw;qB{DGNpkr1`@P)o- zK@1D0VB<^=ccHY8m~}|hRT`|{7{rB}q^JNp#-Fp)*gC~~o2}0&1_B}vqtTQb)h3k7 zO3X|5xeX{R|LaC(Ut zJ(^V7Q_*3>koI~NAvTFrPSUpOn!MhpLMW(ceBnSyUyW@nzryVbN5`5yG3Q#K%=sna zhHz`f^&WVe13I$`@)t+)J%{v6uf{uKxK?jG;y}mK9R^%JX2bw#4Un$zfddde=bf!} zc>>xt(?AHq=|NR6*a(|O(EG(+D^F+;R`0$ zk_MtUq&=$i)ROJw6THW~za2(%tEnNJrU5Ko;8Gs$B?`Yn)b8F_yr$gJHAzWQz5ui_V2Y8zwf#G2tf{1(wBIlZ z_qKx08WjExH8z%|UMSU4Rw*SeE^Xch*=Ge>tZtkmnsB`&6DxAR7JLnIOOzco%wjR! z;j*zP&^tsnhIg23EWcy0ZZXa5_PrI?TNdiDSO=hPz`4~bvWgAc$j*;W#e^xEiYZTV zH>#NMj^(0}T^i6g(XST}80ZDW9RVfO1G{`ttgw+dS!zu;)*=xRp=?yd@3NaeOq|Tu zF!OmI^ouw&X`~I-nw%6%8oPt0km56!cG=>OQqmGk`63w`U4=As;>`w}EUso#!3wa5 zB4{BP!p>IAbsUiyObDdK98frNVfiy8o4{zXymGdbKrDkyBE%TL;X=U{+~TY?@UR`n zPs^gzC5jQIhOl(sJ&YmOh^ zGEwLfzz)t6zB$+VXYEXb!Gp7@eA8<%n>R4Y#@hV;8&VDwapGe8soNU%ADX=>hD6r# zh;>9K=cnDM2me=_%lSPwq)+D*(g@bdUG}rr;nKz1E@oUirC0{%h-a zy*%lT@n>#Lchvo9*+mA&zJ2>4ji<20Y+CbcKYkHI=GR_BKsuz6mG2z-wUwV*yXBC^ zfi{;cvGHy6ES))|@eIZb;B)mOhw|v^{C0<%2@cWx^_nf+$@~_FH)DpEbXPRBEPigv zk7Fk-wWadc+)I07ic-T5*+k>`qJwaDMmBOy{s{k!ZDh%m@;~-+67=#PU;gpWH@Z$_ zOzDB<5g33YUHg>J)C;DeVol(PExqy3pQt;%E~6I=b#-r5wrak&C(GV^RW`lh+HCx+ zt9zZSv%vp)d(7*{9{js%e*Qcz@0oFnYYV;3JWueiZd}m??IZ0i0P2-{E?!O3A`VJOA3h!cG}D z_oE4J8fYvTWU@5j{FXM$1=`e6M60&H`?kggL;w== zw>wWQO-(>QrQLogO`Dr?;${5bydhbt$6zj^!|)HZNz!0%pG&H&s6^6se(MKs6IObS z7l5MFnw{0*DnVpK-|g-ZlG|AKX1>EU4`WU8J7%&*=V|-_TW|OsNC}MaBR^5-e7dfm zcuSI>_?e`0kQ#I4#_MQ&_;n3;=cL%s@V3cj@3jnu5;&DNCcKP)nO@p?cKh3DqqQkz zlbu!VwFD}}ynXH4d+zU+?l|*D7(>G-Z$dCh{>@|~os;~IWHvwG@R|Invs`@c5!1=K z+a7*o4ta1LqWhxF7oY|>Uz#^X1K6Ic8y9Z0gr&qdLS!h7&A>=Y5mir#{j)0?Ndv|3 zRO{F3CeU;?w*9iKxrKZpa5cK&8A)Qz#u=S|qmei85R~3|sO~444g9U*v9bp73 zM}b@$NU@i$pGAyGfSjhk-+s&IZ-3y2_djGEbfGlkUR7@ z3<-p{svRDreT&*Wca#2>p4;xP8)1j*8n{B)x?rTu2=lcODio~;jih0P z>3&G5sqP1t+T8xrYV*iaQ%}FB);_w{{+m*p(Oy|?vfc$O8jkfYF7W)ZrKavfNtOFh zQl$+cRoc*Kr45Nz+E8dSE-&x9MeUp4dHzR#^7Z@fqkWUwP{H={a{}a^+Jig%gSVC+ zWB}N*7*HMW_YdwYKd2jUdi6^DUm!$lGfVUgaO$ zQGSpCZY@8jj<@&+?=L^78$0Vy-c!E7P^Ym8F1&5l-xADoY6tvkqznCn^R)-hDnH18 z+x>G_m7mi9my{pWgN4D7yrjI-NWt9`zrf$l3J>|oKs(l93UxAZ~6hU8Ic@3G-GVH*}!alS_bvxrG# zqy4d)LoB9$dCN~J@jD?Ss$HdEPVG8qFtffW(kzROHFd#|P~9e+G$XCoqJhLZG;tUE zPTs$XS z)EK@hT5-hbQBK_xnk&jHKd5!3U*4CkJ+DiUXmx{%z5k0ao_r(@3e8!Tbz^NrMAH)& z6iW_E)+|b7l#b!)6PDrVzmYa|4}5eE2>kcV@O@^xqmDeaC&?jjb~h)loc9p17-507 zFZf>%P!C$$D*llj9&h%^Ozn%-u8XnQBY+I%(0t}CL13efQb&E*Zb?)YMH@;~yw^=tQi((RhZx5V>qNVFEexWv&zvE{?F&xiv)$2aO2?sHYR$Ip#cjF9P zB29T!%ij%x(9;r$44;bIA!kqABDGfd&V)zxx|4L8h-2s_ghn4jn-odB6j5kT`PvixfaSD+)KK|t2YA*j_uz`latx&ym7Tt>Vp%!>+bvIg?yOy_MfW_U{-*F7?%lZ zw%1Ki%dwrJ9tY=ok$hsT>BvvzjF}!J3Yk*%M2Y?gz-G7YXvuPspe3Tc3S>yzth%DN zQoDlMwJE+FiK{K4iJ)`*))ebPpvntWsxCEcCissV)gt3?-KrvQ;)9T`VYy}rz z0E3OdA_SO{^!t+ORF!QsQoAeB=n}I`QXSKSW(+dLr-KwoeHJ@V{fdq@iccMe|A^9* zc!r%9143IVMSl|6S9kzOP-iNPGm<|fC;-LxUm-a{e|x|6*Cb-y3)DApUtoC9!9cD$ z1JS*ufkrf>&898qDxro7qk(l_y3FG_j;69nAY=sr91c@40Zl~v4&An>dpe)|U-`}( z5(_ver$i;NsJI~B<&T#>rVxA6K0AW|ok%3J?aW2C4vg@52XtY>5;fGY{8@C^zMy_h zK^DWd{IG2|Y`ZdSkeDR88niY_8CnI`!Jkw1o=pwfaT}Jz0S(KaMTa$JU)Hc48@A5| zak#BRYeJ>#0H&}M#ETQbfmRiLeJclIrry=M>-wkLkvnmOaZg;RZfIx)Sslgi)@ zS~J7~TtDgdPK=+7@7H?kMLJitSG>};7lq9>G^8b9BIWKhOr&Dlw|@1e$`@*!3iTa> z4wrR6{KQ7}HMmUaaex!4`E6qqlO!j9=%b;4I?$%O(BnCJ zMz*vNSBynC2-z=YY~%>`?-wxEXKd0=QmKjYho!=3%CNF;#9*mA0uBd>>u~mQM2*HO za3X6|?|KrG7qXK8a&UT^y}+e??DOo+w-(iM#as29;%Gl>u)0}Z2egmJYE$m z;;ifEcm8r`>-}<3KV2}wOzMxqmMcFa~NKsu4RYr=HuD@oa7$G&uElB+m|C*6vTnv+n zB{-jKQhXHZyZxEzkoHB=<|HZ2r4(c7*JFB9Bp8cKTfH&cD61wix(bbxzO!O2` z<)K^VFq<(U;8lLOjJSDxY`)r8jxK;9VV?qqoB)D&T1f8WT%(BDsN5+Dx$Rfcd!lUe;z)!hk}&&fK;F?YzA^q~?Pxn5kU^cs!5 zIGW5&laYPBhQEs-iIL&1y^FBOuD{CxSDuos0n(@a#RJK6ads8CXJ1u*X6O5a;(E>3 zvFr+02=X3Qzg6Z)%^z_*^&f9>{z`meqJnf=$!eMaq?qIdZXWESNY9N4+7 z1!M>0x2H6>?H`&S*WDi-5SpJ*^Q?IHlWP8Ozi{_PHE)hhHUN|S$~f|;)O`EC;o(oK zc|{!gW;HMR*WvDG)I582Xnt1B`{LbyQuDTW_n+0gJ2u%aO!6=65&C{k%{RsueO}GY z5e#LI6*cdBW_Xx=%OwBMvqFx`cRv@`_ii=6H6Eb)j+&p0tH91|lD{rO z^<6c;7W;lr&0od7-&gaLe-(zhSIviiBQ$@Y=B1I$eyHX(5zjwT^TvoewuqDbq&VOE z)I2>B!;jVcrwG+g)O>Gj{#4D+#=bvO^Tvp)pR0LJMEft)oR1H)SIq?Diylz(os(e- zzf|+*?a+Ks&0p;knh&Y@*@@8nm74F04?nEtTjEfUsCmOwcz8}??ZXjuC#rc{?E5-3 z-xnV~NzHe~hfh}X$A{ml=1(Fv-lpd3R)vSz;iqq;$v;(Z5&o$B_t03`p{i#-Ywu^OSh^95vqh7YLu$++AfRP)~Wq7SM0=17DWsrjxb z2`^UjAG!hN53Bje%FraQ0@)rBd#Rdli7&cL%{Rxsm#g{t*!Lr9em3^~2Q}wn-z(I- zISVhkQq3)~F9{x~r`Y$SYW^hB%Mk9R+z<`3d~KdI)A;uLOF zb8EbNlbY|1cR!`(tr4nEtNG)oLvL2|7xBGUNg}=T=>d$7s`$ zo7bp$ZftH-^V-<=S~V|70LGm@$P4Yt6L&epH=go*hCrW!Wnve zrrk@Y6D%~t=e<#S7(O3}O~dEgqChZwo*kQp&-cZq;d3D_oZ<8RlL2zW=UuUB`22Wm z8a_W0SK07+MQj>AZ;3B5d|nz=iQ)6y*fe}@j}IF@e-_oQ;q$9eh8sS2#wI4EF!~)y z#E7EX#3mOg?Dw6Zb2zX;#hMvH1-R^|RRgrkWpX2Ndm4^KDTH-l66x zQP6!$&2LYHhwoJLlzpv&eBQM{p=C302{y@!-#O4pxJR_=%AE|kLd@t#NsEpNNM)#?CN1X4E)%-pt(c=rr7?~P!bspdCgbBmh)93OtWniog=;T>w8 z7K#7w?QVS0S!#YNLUp#9pNn_TQFBMU`%X2lig(|o<`?4KcdPk{h`RTvITx+CbJcur zY|g8BVYC6Zs(DcyYC+BW;@$JqoQs5XzM2n3ihZw|Ux^RDPt9{;^8z)mh$MQUnxA}D zAeHy4`S+3cKcMDqk$*p^=C>jden`!;V)G(3zZqHMVm03qt&0ztFK6`sclC<`?t~17uD6wf>8TY`*rp zzr1kU!upS2`jKt#`C<3@JblrBc-P#^PdMY+`30U&vUFkV{CxZ2m5tVMD>jjFb_t)f z)5jPad2=@3?{CS);J{y=ym*EKa({DF#zw>*WC=Eo$>)EPCL8nVzb7lMYNjz&PKGpDPAej{= zZfASs`^{46S-DPp<3j&`vA!14%#)XNS2fo*)@G|(Ydr=NpTjkg?a2-leFAEA16XWk zmU$My${Mpi7i}RMnI~hd0SrAd4zxQ&jm0F77--1RPf~Evy7LG3Sg3ERJz#1?U6Q;t?1lB$&@%IRjc3ShtIYz z%v}%m&t7JztaZ7ifL-MxPGe}w>R^B|E}HRGn+4&R#scyVB;^$Z^xRy=A2v7?dS#= z;r|@U9D`w9kOLZZ<1t4jRz()A|vHV8xpCYgzo$B zRyvchqX{$Jl+$x*(jevSkw?-l87$>_Pi0fQIcscWaCb_S$#!zijV2zEFz5*Qv$;)b zYp1v_>~o7fFMlmb{+uK|O$6+M#p#z=bhho6A09Fq&>JUTt>w(7b#hYEOdz5a#sm

F)bW6CDEiF6QwuhOVGxb8;1 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