Files
microw8/v0.2.0-rc1/index.html
2022-05-04 06:48:55 +00:00

1 line
16 KiB
HTML

<!doctype html><html><head><meta charset="utf8"><title>MicroW8</title><link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@500&display=swap" rel="stylesheet"><style>body,canvas,html{margin:0;padding:0}html{background-color:#202024;color:#808070;font-family:Josefin Sans,Verdana,Arial Black,sans-serif}body,html{height:100%}body{display:grid;grid-template-rows:1fr 0fr}#uw8{position:absolute}#uw8 a{font-size:130%}#centered{align-self:center;justify-self:center}a{color:#303630}a:hover{color:#405040}.screen{background-color:#202428;border:4px solid #303040;box-shadow:5px 5px 20px #000;height:240px;image-rendering:pixelated;margin-bottom:8px;width:320px}#screen{cursor:none}#start{font-size:150%}#timer:before{background-color:red;border-radius:6px;content:"";display:inline-block;height:12px;margin-right:3px;width:12px}#message{margin-bottom:8px}.error{color:#e04030}button{background-color:#303440;border:1px solid #404040;border-radius:4px;color:#808070;font-family:inherit;padding:4px}button:hover{background-color:#202010}button:active{background-color:#504450}@media (min-width:680px) and (min-height:620px){.screen{height:480px;width:640px}}@media (min-width:1000px) and (min-height:800px){.screen{height:720px;width:960px}}@media (width:640px) and (height:480px){.screen{border:0;height:480px;margin:0;width:640px}body{overflow:hidden}}</style></head><body> <div id="uw8"> <a href="https://exoticorn.github.io/microw8">MicroW8</a> 0.2.0-rc1 </div> <div id="centered"> <canvas class="screen" id="screen" width="320" height="240"> </canvas> <button class="screen" id="start" style="display:none">Click to start</button> <div id="timer" hidden></div> <div id="message"></div> <button id="cartButton" style="visibility:hidden">Load cart...</button> </div> <div id="footer"> <a href="http://unlicense.org/" ref="license">Unlicense</a> </div> </body><script type="module">function e(e){return e&&e.__esModule?e.default:e}class t extends AudioWorkletNode{constructor(e){super(e,"apu",{outputChannelCount:[2]})}}let a=(...e)=>new Uint8Array(...e),A=(...e)=>new Uint32Array(...e);let r=function(r,s={}){s.setMessage||(s.setMessage=(e,t)=>{t&&console.log("error: "+t)});let n,B,o,i,l,d,c,u,f=r.getContext("2d"),F=f.createImageData(320,240),D=s.devkitMode,w=0,m=null==s.keyboardElement?r:s.keyboardElement;if(m){let e=e=>{let t,a="keydown"==e.type;switch(e.code){case"ArrowUp":t=1;break;case"ArrowDown":t=2;break;case"ArrowLeft":t=4;break;case"ArrowRight":t=8;break;case"KeyZ":t=16;break;case"KeyX":t=32;break;case"KeyA":t=64;break;case"KeyS":t=128;break;case"KeyR":a&&g(B,!0);break;case"F9":a&&r.toBlob((e=>{C(e,".png")})),e.preventDefault();break;case"F10":a&&function(){if(l)return l.stop(),l=null,c.disconnect(u),c=null,void(u=null);let e=r.captureStream();u=o.createMediaStreamDestination(),c=i,i.connect(u),e.addTrack(u.stream.getAudioTracks()[0]),l=new MediaRecorder(e,{mimeType:"video/webm",videoBitsPerSecond:25e6});let t=[];l.ondataavailable=e=>{t.push(e.data)};let a=s.timerElement;a&&(a.hidden=!1,a.innerText="00:00");function A(){if(d){if(a){let e=Math.floor((Date.now()-d)/1e3);a.innerText=Math.floor(e/60).toString().padStart(2,"0")+":"+(e%60).toString().padStart(2,"0")}setTimeout(A,1e3)}}l.onstop=()=>{a&&(a.hidden=!0),C(new Blob(t,{type:"video/webm"}),".webm")},l.start(),d=Date.now(),setTimeout(A,1e3)}(),e.preventDefault()}a?w|=t:w&=~t};m.onkeydown=e,m.onkeyup=e}async function g(l,d){n&&(n(),n=null),o=new AudioContext({sampleRate:44100});let c=!0,u=new AbortController;n=()=>{o.close(),c=!1,u.abort()};let m=l.byteLength;if(s.setMessage(m),0==m)return;await o.audioWorklet.addModule(e("data:application/javascript,let%20e%3D%28...e%29%3D%3Enew%20Uint8Array%28...e%29%3Bclass%20t%20extends%20AudioWorkletProcessor%7Bconstructor%28%29%7Bsuper%28%29%2Cthis.sampleIndex%3D0%2Cthis.port.onmessage%3Dt%3D%3E%7Bthis.memory%3FisNaN%28t.data%29%3Fe%28this.memory.buffer%2C80%2C32%29.set%28e%28t.data%29%29%3Athis.startTime%3Dt.data%3Athis.load%28t.data%5B0%5D%2Ct.data%5B1%5D%29%7D%7Dasync%20load%28e%2Ct%29%7Blet%20s%3Dnew%20WebAssembly.Memory%28%7Binitial%3A4%2Cmaximum%3A4%7D%29%2Ca%3D%7Benv%3A%7Bmemory%3As%7D%7D%3Bfor%28let%20e%20of%5B%22acos%22%2C%22asin%22%2C%22atan%22%2C%22atan2%22%2C%22cos%22%2C%22exp%22%2C%22log%22%2C%22sin%22%2C%22tan%22%2C%22pow%22%5D%29a.env%5Be%5D%3DMath%5Be%5D%3Bfor%28let%20e%3D9%3Be%3C64%3B%2B%2Be%29a.env%5B%22reserved%22%2Be%5D%3D%28%29%3D%3E%7B%7D%3Bfor%28let%20e%3D0%3Be%3C16%3B%2B%2Be%29a.env%5B%22g_reserved%22%2Be%5D%3D0%3Blet%20r%3Dasync%20e%3D%3E%28await%20WebAssembly.instantiate%28e%2Ca%29%29.instance%2Ci%3Dawait%20r%28e%29%3Bfor%28let%20e%20in%20i.exports%29a.env%5Be%5D%3Di.exports%5Be%5D%3Blet%20n%3Dawait%20r%28t%29%3Bthis.memory%3Ds%2Cthis.snd%3Dn.exports.snd%7C%7Ci.exports.gesSnd%2Cthis.port.postMessage%282%29%7Dprocess%28e%2Ct%2Cs%29%7Bif%28this.snd%26%26this.startTime%29%7Bnew%20Uint32Array%28this.memory.buffer%29%5B16%5D%3DDate.now%28%29-this.startTime%3Blet%20e%3Dt%5B0%5D%2Cs%3Dthis.sampleIndex%2Ca%3De%5B0%5D.length%3Bfor%28let%20t%3D0%3Bt%3Ca%3B%2B%2Bt%29e%5B0%5D%5Bt%5D%3Dthis.snd%28s%2B%2B%29%2Ce%5B1%5D%5Bt%5D%3Dthis.snd%28s%2B%2B%29%3Bthis.sampleIndex%3D4294967295%26s%7Dreturn%210%7D%7DregisterProcessor%28%22apu%22%2Ct%29%3B")),i=new t(o);let C,y=0,h=new Promise((e=>C=e)),Q=e=>{y|=e,3==y&&C&&(C(!0),C=null)},E=()=>{"suspended"==o.state?(s.startButton&&(s.startButton.style="",r.style="display:none"),(s.startButton||r).onclick=()=>{o.resume()}):(s.startButton&&(s.startButton.style="display:none",r.style=""),Q(1))};o.onstatechange=E,E(),B=l;let p=window.location.pathname;if(m<=1024&&!d){let e="";for(let t of a(l))e+=String.fromCharCode(t);p+="#"+btoa(e),p!=window.location.pathname+window.location.hash&&history.pushState(null,null,p)}r.width=r.width;try{let t={initial:4};D||(t.maximum=4);let r,n=new WebAssembly.Memory(t),d=a(n.buffer),C={env:{memory:n}},y=e=>{if(r&&(!D||0!=a(e)[0])){d.set(a(e));let t=r.exports.load_uw8(e.byteLength);e=new ArrayBuffer(t),a(e).set(d.slice(0,t))}return e},E=async e=>(await WebAssembly.instantiate(e,C)).instance,p=async e=>y(await(await fetch(e)).arrayBuffer());r=await E(await p(e("data:application/wasm;base64,AGFzbQEAAAABFQRgAX8Bf2ACf38Bf2ADf39%2FAGAAAAIPAQNlbnYGbWVtb3J5AgAEAwkIAAABAgEAAAMGEAN%2FAUEAC38BQQALfwFBAAsHGQIIbG9hZF91dzgAAAp1bmNvbXByZXNzAAQIAQcKngUIxwEBB39BAC0AAEEBayIBQQBIBEAgAA8LQYDAByAAaiECIAFBAXEEQEEBQYHABxAEIQIFQYDAB0EAIAAQAwtBAEGAhA9BCBADQYiEDyEDQQghBEGBwAchBQNAIAUgAkggAyMATiAFLQAAIAMtAABMcnEEQCAEIAQgBRACIgZqIQQgAyMASCAFLQAAIAMtAABGcQRAIAMgAxABaiEDCyAFIAZqIQUMAQsgAyMASARAIAQgBCADEAIiB2ohBCADIAdqIQMMAQsLIAQLPAEEfyAAIQEDQCACIAFBAWoiAS0AACIEQf8AcSADdHIhAiADQQdqIQMgBEEHdQ0ACyABQQFqIABrIAJqCxIBAX8gACABIAEQASICEAMgAgskAANAIAJBAEoEQCAAIAJBAWsiAmogASACai0AADoAAAwBCwsLqQEBBn8gACQBQQAkAgNAIANBgAE6AICADyADQQFqIgNBgQNIDQALAkADQEEAEAYiBQRAIAQEf0EBBUGAAhAGCwRAQYECEAVBAWsiAkUNAwtBwQIQBSEGA0AgASABIAJrLQAAOgAAIAFBAWohASAGQQFrIgYNAAsFQQEhBwNAIAdBAXQgBxAGciIHQYACSA0ACyABIAc6AAAgAUEBaiEBCyAFIQQMAAsLIAELNAECfwNAIAAgAmoQBgRAIAEgACACakEgahAGIAJ0ciEBIAJBAWohAgwBCwsgAUEBIAJ0cgtxAQR%2FA0AjAkGAIEgEQCMCQQh0IwEtAAByJAIjAUEBaiQBDAELCyMCQf8BcSICIAAtAICADyIBIwJBCHUiA2xBgAIgAWsgA2wgAWsgAiABSCIEG2okAiAAIAFBByAEQYECbGogAWtBBHVqOgCAgA8gBAsMAEEAQYCEDxAEJAALC98DAQBBAAvYA5efz3FZ0f5yFbUvithc%2FqHFfzojM7KVsEv7fSGG57W3091tBMQ3YrNZU2%2FjguFMMLW1a4URR2fHh86SJQlSzejWWM32zngHHWdNsU4kGrhmGgxUZIRAb6JLtW%2BQyuXIBssNN5IEWkb%2BrOGf8rSLasDdCc83RsuuCyL03791uwlwi0T8mJR%2BslH82ckKlC5TK6wnPyoB908kSeLY%2BEhunDhtWHA7EWwwdQvigYMhTQ6Cyi%2BXelkSq6CnCQnZrAqXrvEsSe7%2BYNt3Hg0MFycXedDIoFANBDyfPayKr1EeSiF%2FV%2F15gTYFDzZW11RK%2B8G36tFDe%2F0eS8UvRLzmz1%2BECmaHQy5Frnorhi3MJqKOrte8TbMZuNPBYJ2xxYJYAfb%2Fgv0WEsQcjrHzbYTdl%2FssybvXkXL5kX9wqIbmjfuuuWKQ5%2FKpFH8CVERpjQgbzuManrAJEwr9sqV4%2FshQkQfL84qfsILfEsCx%2FdaZxj1wCtbS9ooFIuU%2FeAVS6vj4%2F84MOrrGpzpn4n%2BPJbyQjmN1MWq8%2Bfa4JXif0gmICDJhvYf7gn4ki%2B5iAeDiO6yRuZ7QVL%2BXDeNX5w3VGjuJICdg%2FM0c6GQo39rUrMsdajtL0uVRQmeH33z5%2B%2Fo%3D")));for(let e of["acos","asin","atan","atan2","cos","exp","log","sin","tan","pow"])C.env[e]=Math[e];for(let e=9;e<64;++e)C.env["reserved"+e]=()=>{};for(let e=0;e<16;++e)C.env["g_reserved"+e]=0;l=y(l);let b=await p(e("data:;base64,AivfncPcObrH0dq3AlPISmKAaP%2BzxT0W83uq3jpWiIkM4nwVP4o6lFc6P8Jd0Z00%2BYgURTJF%2Fstws1xD5SOiNzt0pxcZ7mOIqQJSPbU%2Bp46gW2d6vxm1XJbAQxZjBr0%2FTKu8bBkuOYMq74t6powHDa0i97cXtBFM72f6TGxOKi%2BRQjyVJ2mCSDamBUsqGES3kfKzK%2F2saAqBFBLZm2VYOtNAYmho21e74yuQGOdfm8iISAWpTPz2Kdl5r2ZOB848S0h8OIIwcku22xz%2FRFwE0A81wa0fuYFdzOHJ0kIP5reroGsyrWAcfuDn4nXS5Uz0Ib9CGpk5uFwpRvgrCNCu9Fw8HqzqRhlkZ4CrgeNX9r9op%2FBr9PjhJgDTw%2Bez4F1P2AoRQpwaD410FNfQ2ps%2BeF7HVVuFDUr1LdLIv21NorGP8fnqO8xVhimkZwx5BGdhlVmbAvNpj2y68%2FT%2F8rXFKnOT9SbYhy%2F%2Fc%2B%2Bg89UgSBDKjgoRF%2BwtJ4j0yHDpqPzOcOr0SokDvONI69RA2%2BCdKuSgynxy9ofhYkTObFRbOD8yJLc5TOjz8ympqIXQaIIdZ9FBL29Zlw0k5obV8gm0eaoDXm54P4nuHH6pKM2DjchSc85SLj3CdtPFF9C6K5B%2B88O8HluDyBTVW%2Bdw3c%2BRblTB%2Fp%2BcYJThDans3VCF0vW05RjA2z9BUpvQ57gAviZ9rh%2BzCTEdPAlLwPqGRL%2BfZRTtc%2B0cUX95LBxNq4WDF7GuJ0y5EzDJjQ1Oxj1jGYILnBeD0vAp4ofHf9HxfA2JXOrGCXAK1CgecphwuxDg6BF0dK3XGoxbJUJ7qQ4Esq7PeOkH9ZRcRTQwBUG9GDB6uubxfHBGaOli9N0sRyEE7LUx4HHW5sznfOUG1t8a7u81c2ekZieRC4rU59Kl%2FtEPJ%2BJbjsdVAtjK4Q31WZpzTqOpnXtN0Kd1eaVmOOudaKmvMAVzdupU3e8xFNNJfXND%2B6mixN0O8BreKbeZkKrTNcDTqL9di02LS9qQsPO6KuvVdD19CGjdGJRKhhqhSaH%2B6JKrp82ZkgEDLBPNzelb5nqoZZ2vaLxwuIjyzGj1HXc%2BAG5O8odjrauoivUGUn%2BULh4i9LqYVv5RsaZBf3FwlnmiCYKKYkF9D6QBOKD4arvnJYnKHy%2FI8z6Z%2Bq8SiLQeG5RLAJ7d9b1eO%2BlX5mSVPLS0zJM2BQmmzW4nfDQVWfiKwe2gMa37X2ilYat0FAPP0Zp6fbk0Gyv4pDRv05p2JtBpTaIMt22LGd3zRPaGxyarwi%2FMeLf%2FHn%2FVZz4sQRErllmg5MYXulC65ozQV8yKaKIgeXiDKK0OQQAu7jjq2vvP4bqB7LEVgX4HmXIke7ZpIChyO7Bk%2FhsI5dGfVjZxg5akTKVv2%2BSOxQxJiY1iqRqrxCmmPKL2r8GvHQhS604Su4xmTYydB%2B%2BTVsClHz58fXLZMAIjV5uLLxrcFd7yA6ZEfR6vGMJvyHI8Y9YdaS2BWFe1biRjrrKBsNSwPc5ok2FilQY76HvzHW9C7docl4F8KODxJz2CtClWxj3mvXrZPxSZnFlwqZH7mGONd6mJxoIoAHnd31RlTgOGR6btY4lo7IaIpZo2mRyUP9Xu0%2B3jLLEWJEYlUSOqKA585V0uFNsiueAnkMwkjUhFFCMuLMtc3L3sVv9XVVNBm8ze7uXCzx8v0dllurjXNwdYHwYQhIZqGc0Jke2dDhd9bp35dAhm9FvO6iScsBeODE5J8fAf0WR2V3PFDofCUPUIlalbe%2F4YYnh2yFGthelq9y9%2BixEPriN22dYKMHINOzj0J76v4xEHr19R3%2BNQCrgJU8HAh46VXMF7N%2F2xmwHR0Dh%2FkK31xzvvUu5MKsH11vPWWs%2B8KfuAEKd3wOc3JKUnhNLMJTge%2FW18monqQwps6yNYvoatbFPUbEYsRZL956M3kNRRUzirxkqh6U7aAj6FY%2BMkLf2vHVabfnA2PBMsVi3AOirFRUPnwSbIYI9y3CN%2Fh5ZxQ5tmksmdmcEJ5jnrljh24G%2BjQM5Z9J9%2FmzXq6d8bzKd4OD%2FX330BkJLNNmdcvJgE8uwHvx84ZUdeZ%2Bp6yiSyPQ0anwKRYfYIqx4zvyg3a1ot4FwmCW2Az2%2By9HCv2BW5mxYv%2BLsix%2FdZcRhEZkH4to21JLbxSSGdTqi8yVGg7IzIssACYCBlPu94YawBROfM7t5DPv9fzYByjuTZDfHaOomI4nPmzhYsDmawqLghwOsfvzrlKSS2E8B3Prsb7DOcH0HCZ4PLmBm%2BZd8ZdcjAfBYfD3UtcqdyB8j6IpKQjranbEqz7oFmjRNu1DL8lJmHOCjkVOtDT0WFzDQYaLjbyaW7oKBb%2BKIwId39GGfDSe2gsulWZUTc8bHXPVJhBFdD8bVJBYjutHplxwmWFd9wfsriGUj%2BEaJCOJoGtyv8phqD7Fl731VoZiG7wjDSXtPsPwvXoaZRNkKPdLTKqGxc8QQh783JRIVt%2Ffj%2BwBqFrFFpOmEWlNrn5UFQZDt6njvwtuhooMqe%2BrRICa8kH1pILXJkHHaLnNlVxRthLPvtZ%2BVbbGDO7ncKIZoojG%2FwbKbNQFIOHbdxKjf34%2B%2F9g9l64b2BcXqEhVbHrpyhQEP6s6vre3wGRYIlkcURDd%2BnDJVsYod%2F%2FtrbR%2BXOsJ5CfxZigLVV77Cq2FdmR1KJk8MYydScwrLgppcXONRvdcw7Jo1G8HgMfF6zmbgEkHzfDfiYAzfAasJVo0nzALzbnxctHcvVW7SmtSh7axVZbNEJSDljFmrgZMoZHKJqyJeSrrjOvmoX4Xv%2FpCzwDejQmtELObol%2BqRnN64DFZBGMa4CGP%2Bx%2BxZyZEbguV%2BrjRlLa0d6jDG9opRCG4zu6qWz2hmy9AsxAyFvDvEJsSy0c3rVAhCqKZvSAYyvUO7XtyoVanznr6fHXskZuVAzQqTtpwp2wh0GCfiKkHk87W9DC8f1ymeEiQhOjlXR1CWtGkH%2BpaqXOj54CWywuBziwfQY6wLuqbCLgAFyVN%2B3skm5%2BmjfYVmfcHAcddxNEG8%2B3i2eSCp%2FVb9xyZVQRSbN5QMmTfH677KVXEsnQCmR3XSKwbkDi%2BFnWF7EgnKNhDSRf4NB5A34mDeHZXly7GpgcKS1o6i5%2B87IhJkFPz9jN8abA95prlGUZE4wft7kTQo8TX8Oj3o%2FLdZZW4NCuJD0EDnA9VlmD06neYKwd47IYospbPKwGEXyAvubm1St4NcsYhB0xA5Eg41fh6gw58UJRbfN%2FipaJAajWhpvj0dLrVfNarrgD5rbhVzIIoURLf9uf6xM8UGKiqeFavIJPlXYsRrLR38PEax84deykHAwLglOfodh7N0CtlAREza9X4917GEaUu8aiAWqkJ9bt0w%2FmgcVqZwJ%2Fb5AEfK%2Be6OU4wMaP3ptCncJjHraBWRrDHiZ%2BODWaKBkp2qz4jz66r2F8biN4Mvf8mB36xzBJ%2Fr2KsPbmfgKyqCGEkgoa6am71VXMMtJQVq2DJcMT2EyeK5w6JuN8%2BDRMUJFt%2BkkOfnVIJ02SGuq6WsGzZXS5AvX2JXKxzr34zlegHEUB%2BsS476f8U%2BfU0a2y4ijet5Hj59FxbuEICtJSvzMU6PFDi95PEB7pWH2sHyQD6F6MeP3gdNQjzI9O4ocN0sKlZOvgiMpHqRf0Mce%2BcH83yE4ev9DaXiL0TBZAyNR%2BpbFy2e8Nh0mpI8%2BilPNJO4Qfm%2Fo%2Ffm8kur%2FMzIB6JTfQwKkBoR9j1tR%2BvGXwwBbgAWFzN1z1wJE9pzpc24VFuQBGY%2FHGyLxSoCdiXJazyT3Nb6KTwK1I49ap%2B0TW1Oo4zW6PUH5R%2BheyX3oFIOHD4s5YkqtPPjEH7bo58swfKqa4w%2BeOjDU2Kb7yXXGTwwqMYrAUwivstm1B%2BAP74Y3TciddM2caEFXinx2NCIJeGKEUrk%2FKr%2FdorFCqAjFYbqunWfn20xub%2FUHJK8%2FqM3R%2FdVftY57Dr7SehgkrCVJ%2Bsno7IXu4Gf1KXfklc9RgwBe2nW7Yc9J4%2Bricm%2BS4zFXdrrrWAqF9edSLiBDm9rbmcpm46v64eZbSZaC7BDqAmLTveIgD7T0MgPV%2BG9LqRHDNwjQws4tkLAf7D%2BBRhYuF4o3sojXWOWidkOBSWYyYLOxHhCzxj5qYfPtLixgihY63hAvdwYzFiMtCiFedL7StNt2gDCNdPrp%2BfqJn72m22QGQ5dYhRaBmJcPNdnkdGEIP2DFTnq%2FendRw9LvZ4uRZbNogSo3cZLEEfAR5YGplHGAgJJhH7lXKACljCC2ixfi1VBrS7rcn8WDbSfv6xmsl4OZIu1Wd66B5gABJ69EZQ8L5YjsrXbxb%2FBk5v%2F3OfKbVbruhDD96YlnGW2wXL1w%2BWQRtcwZvK3nTAo7yMu%2BA9jf4eW8HyhGMl8LzN2G0MunNkCK1NQGCljg63xYdcDPw10dGeMQ7f3i0Vy8xTQde3%2F%2FuLPbpzG1w%2FWRGDgivI7OQJFFgT4%2B69xdw3cdMVFfftCQqDupkxh0xORQtiVi6ABS6sFN27Wwdb%2Bj504U7h3hM1T6Nt24u%2BbbGQ4QVoN5vi%2Fyp8zspppU42DxSfPYzaOqwKP7o1%2FU3lP%2FM0oQai4mJ6RSTqdJ2XLzPkbEKy8sM9kmfB8CaQ0CZo5NAmNhC2BI8iXQo%2FDurjTPVcocWa49q6cq0eF5Fd2if7n1eOStb9znsuHEwXaAgynmSbJEeMkTftcqt7pWKWkAo4Es7vU2MxuSNrnijHr%2BjygR8ZPqkN%2FHHRMPZ68Ky2Sv7%2BM8iprskNUryHlHvzK5cL2%2BvkM0iO6E8XkaTgUUCZzo5kWUevrC8psSU4ShiDAlxJYCFsDYgIRSLKjVC5QtxJO6cPIWBqQs9L6o52zPfLmZOScRuJ8FGsudjtUDMITpLb5MMPciqB%2BUgHTu9oPxF23sU%2FKg6kXZO%2B1GT1f3DRZlWdp5zB4Eety%2Fe7CB2ZSQ7muVv8rNqZYoj3DcKoy6v3dp084dqDeraoMrBqKIroZBlcvWRg%3D%3D"));i.port.onmessage=e=>Q(e.data),i.port.postMessage([b,l]);let I=await E(b);for(let e in I.exports)C.env[e]=I.exports[e];let M=await E(l),v=A(F.data.buffer);await h;let k=Date.now();const L=1e3/60;let R=k;i.connect(o.destination);let x=!1,J=k,S=e=>{let t=Date.now();e?(x=!1,o.resume(),k+=t-J,i.port.postMessage(k)):(x=!0,o.suspend(),J=t,i.port.postMessage(0))};window.addEventListener("focus",(()=>S(!0)),{signal:u.signal}),window.addEventListener("blur",(()=>S(!1)),{signal:u.signal}),S(document.hasFocus()),function e(){if(c)try{let t=!1;if(!x){let e=navigator.getGamepads(),r=0;for(let a=0;a<4;++a){let A=e[a];if(A){for(let e=0;e<8;++e){let t=(e+12)%16;A.buttons.length>t&&A.buttons[t].pressed&&(r|=1<<8*a+e)}if(A.axes.length>1)for(let e=0;e<4;++e){let t=A.axes[1-(e>>1)];(1&e?t:-t)>.5&&(r|=1<<8*a+e)}A.buttons.length>9&&A.buttons[9].pressed&&(t=!0)}}let s=A(n.buffer);s[16]=Date.now()-k,s[17]=w|r,M.exports.upd&&M.exports.upd(),I.exports.endFrame();let B=new ArrayBuffer(32);a(B).set(a(n.buffer,80,32)),i.port.postMessage(B,[B]);let o=A(n.buffer,77824,1024);for(let e=0;e<76800;++e)v[e]=4278190080|o[d[e+120]];f.putImageData(F,0,0)}let r=Date.now();R=Math.max(R+L,r),t?g(B):window.setTimeout(e,Math.round(R-r))}catch(e){s.setMessage(m,e.toString())}}()}catch(e){s.setMessage(m,e.toString())}}function C(e,t){let a=document.createElement("a");a.href=URL.createObjectURL(e),a.download="microw8_"+(new Date).toISOString()+t,a.click(),URL.revokeObjectURL(a.href)}return{runModule:g,runModuleFromURL:async function(e,t){let a=await fetch(e),A=a.headers.get("Content-Type");return!(A&&A.includes("html")||200!=a.status)&&(g(await a.arrayBuffer(),t||D),!0)},setDevkitMode:e=>D=e}}(document.getElementById("screen"),{setMessage:function(e,t){let a=e?`${e} bytes`:"Insert cart";t&&(a+=` - <span class="error">${t.replaceAll("<","&lt;")}</span>`),document.getElementById("message").innerHTML=a},keyboardElement:window,timerElement:document.getElementById("timer"),startButton:document.getElementById("start")});function s(){let e=window.location.hash.slice(1);"devkit"!=e?(r.setDevkitMode(!1),e.length>0?e.startsWith("url=")?r.runModuleFromURL(e.slice(4),!0):r.runModuleFromURL("data:;base64,"+e):r.runModule(new ArrayBuffer(0))):r.setDevkitMode(!0)}window.onhashchange=s;let n=()=>{let e=document.getElementById("cartButton");e.style="",e.onclick=()=>{let e=document.createElement("input");e.type="file",e.accept=".wasm,.uw8,application/wasm",e.onchange=()=>{e.files.length>0&&r.runModuleFromURL(URL.createObjectURL(e.files[0]))},e.click()},screen.ondragover=e=>{e.preventDefault()},screen.ondrop=e=>{let t=e.dataTransfer&&e.dataTransfer.files;t&&1==t.length&&(e.preventDefault(),r.runModuleFromURL(URL.createObjectURL(e.dataTransfer.files[0])))},s()},B=window.location;0!=B.hash.length?n():(async()=>{let e=B.href;e.endsWith(".html")?e=e.slice(0,e.length-4)+"uw8":(e.endsWith("/")||(e+="/"),e+="cart.uw8");try{await r.runModuleFromURL(e,!0)||n()}catch(e){n()}})();</script></html>