diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index 7efad8f..015ebff 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -15,6 +15,10 @@ concurrency: group: ${{ github.workflow }} cancel-in-progress: true +env: + # bump to move to a newer emulator build + JSSPECCY_RELEASE: v3.2.0-timex.1 + jobs: deploy: name: deploy browser player @@ -25,15 +29,45 @@ jobs: steps: - uses: actions/checkout@v5 - - name: Build the standard TAP - run: make standard + - name: Build both TAPs + run: make standard timex + + # The emulator is no longer vendored in this repository. JSSpeccy 3 has + # no Timex machines, so the hi-colour build had nowhere to run in a + # browser; this pulls a tagged build of the fork that adds them. + - name: Fetch the emulator build + env: + GH_TOKEN: ${{ github.token }} + run: | + set -eu + mkdir -p _emulator + gh release download "$JSSPECCY_RELEASE" \ + --repo dtz-labs/jsspeccy3 \ + --pattern jsspeccy-dist.zip \ + --output _emulator/jsspeccy-dist.zip + unzip -q _emulator/jsspeccy-dist.zip -d _emulator/dist - name: Assemble the site run: | set -eu mkdir -p _site cp -R site/. _site/ + cp -R _emulator/dist/jsspeccy _site/jsspeccy cp build/attribute-raid.tap _site/attribute-raid.tap + cp build/attribute-raid-timex.tap _site/attribute-raid-timex.tap + + - name: Check the pieces the page needs are all there + run: | + set -eu + test -f _site/index.html + test -f _site/attribute-raid.tap + test -f _site/attribute-raid-timex.tap + test -f _site/jsspeccy/jsspeccy.js + test -f _site/jsspeccy/jsspeccy-core.wasm + test -f _site/jsspeccy/roms/tc2048.rom + test -f _site/jsspeccy/roms/2068-home.rom + test -f _site/jsspeccy/tapeloaders/tape_2048.szx + test -f _site/jsspeccy/tapeloaders/tape_2068.szx - name: Upload Pages artifact uses: actions/upload-pages-artifact@v4 diff --git a/site/index.html b/site/index.html index 1cd2202..ad31b1e 100644 --- a/site/index.html +++ b/site/index.html @@ -22,6 +22,27 @@ justify-content: center; } .keys { color: #55ff55; } + .switch { + display: flex; + gap: 0.6rem; + justify-content: center; + flex-wrap: wrap; + margin: 1.1rem auto 0; + } + .switch a { + display: inline-block; + padding: 0.45rem 1rem; + border: 2px solid #55ffff; + color: #55ffff; + text-decoration: none; + letter-spacing: 0.05em; + } + .switch a[aria-current="true"] { + background: #55ffff; + color: #101010; + font-weight: bold; + } + .switch a:hover { background: #55ffff; color: #101010; } .sound-hint { color: #ffff55; } .sponsor { display: inline-block; @@ -43,7 +64,7 @@

ATTRIBUTE RAID

A River Raid-style game for the ZX Spectrum. This page always runs the latest TAP built from main -on an emulated Spectrum 128K, so the AY sound effects ported from the +on an emulated Spectrum 128K or Timex, so the AY sound effects ported from the Atari 2600 original are audible. Press the ▶ button on the display to start — the game boots with AY sound (browsers only allow audio after that click).

@@ -51,23 +72,43 @@

ATTRIBUTE RAID

SPACE — fire   R — new game

+
+ Spectrum 128K + Timex TC2048 + Timex TC2068 +
-

The dedicated Timex TC2048/TC2068/TS2068 hi-colour build is not playable -here (JSSpeccy has no Timex video modes) — grab it from the +

The Timex builds are the dedicated hi-colour version, playable here now — +the emulator below is our fork of +JSSpeccy 3, which adds the TC2048 and TC2068. Both TAPs are also in the releases.

+JSSpeccy 3 (GPL-3), in the +dtz-labs fork with Timex support.

diff --git a/site/jsspeccy/jsspeccy-core.wasm b/site/jsspeccy/jsspeccy-core.wasm deleted file mode 100644 index 04e5b36..0000000 Binary files a/site/jsspeccy/jsspeccy-core.wasm and /dev/null differ diff --git a/site/jsspeccy/jsspeccy-worker.js b/site/jsspeccy/jsspeccy-worker.js deleted file mode 100644 index c02d8cd..0000000 --- a/site/jsspeccy/jsspeccy-worker.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";class e{constructor(e,t){this.pulseLength=e,this.pulseCount=t,this.pulsesGenerated=0}isFinished(){return this.pulsesGenerated==this.pulseCount}getNextPulseLength(){return this.pulsesGenerated++,this.pulseLength}}class t{constructor(e){this.pulses=e,this.index=0}isFinished(){return this.index==this.pulses.length}getNextPulseLength(){return this.pulses[this.index++]}}class s{constructor(e,t,s,n){this.data=e,this.zeroPulseLength=t,this.onePulseLength=s,this.bitCount=8*(this.data.length-1)+n,this.pulsesOutput=0,this.lastPulseLength=null}isFinished(){return this.pulsesOutput==2*this.bitCount}getNextPulseLength(){if(1&this.pulsesOutput)return this.pulsesOutput++,this.lastPulseLength;{const e=this.pulsesOutput>>1,t=e>>3,s=1<<7-(7&e);return this.lastPulseLength=this.data[t]&s?this.onePulseLength:this.zeroPulseLength,this.pulsesOutput++,this.lastPulseLength}}}class n{constructor(e){this.duration=e,this.emitted=!1}isFinished(){return this.emitted}getNextPulseLength(){return this.emitted=!0,3500*this.duration}}class a{constructor(e){this.segments=[],this.getSegments=e,this.level=0,this.tapeIsFinished=!1,this.pendingCycles=0}addSegment(e){this.segments.push(e)}emitPulses(e,t,s){let n=0,a=t,i=!1;for(;n0)this.pendingCycles>=32768?(e[a++]=32767|this.level,n+=32767,this.pendingCycles-=32767):(e[a++]=this.level|this.pendingCycles,n+=this.pendingCycles,this.pendingCycles=0);else if(0===this.segments.length){if(this.tapeIsFinished){i=!0;break}this.tapeIsFinished=!this.getSegments(this)}else this.segments[0].isFinished()?this.segments.shift():(this.pendingCycles=this.segments[0].getNextPulseLength(),this.level^=32768);return[a,n,i]}}class i{constructor(i){let r=0;this.blocks=[];for(var o=new DataView(i);r+1{if(0===this.blocks.length)return!1;const i=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,128&i[0]?a.addSegment(new e(2168,3223)):a.addSegment(new e(2168,8063)),a.addSegment(new t([667,735])),a.addSegment(new s(i,855,1710,8)),a.addSegment(new n(1e3)),0!=this.nextBlockIndex}))}getNextLoadableBlock(){if(0===this.blocks.length)return null;const e=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,e}static isValid(e){let t=0;const s=new DataView(e);for(;t=e.byteLength)return!1;t+=s.getUint16(t,!0)+2}return t==e.byteLength}}class r{static isValid(e){const t=new DataView(e),s="ZXTape!";for(let e=0;e{const a=r.getUint16(o,!0);o+=2;const l=r.getUint16(o,!0);o+=2;const c=new Uint8Array(i,o,l);this.blocks.push({type:"StandardSpeedData",pause:a,data:c,generatePulses:i=>{128&c[0]?i.addSegment(new e(2168,3223)):i.addSegment(new e(2168,8063)),i.addSegment(new t([667,735])),i.addSegment(new s(c,855,1710,8)),a&&i.addSegment(new n(a))}}),o+=l})();break;case 17:(()=>{const a=r.getUint16(o,!0);o+=2;const l=r.getUint16(o,!0);o+=2;const c=r.getUint16(o,!0);o+=2;const h=r.getUint16(o,!0);o+=2;const u=r.getUint16(o,!0);o+=2;const d=r.getUint16(o,!0);o+=2;const g=r.getUint8(o);o+=1;const p=r.getUint16(o,!0);o+=2;const k=r.getUint16(o,!0)|r.getUint8(o+2)<<16;o+=3;const f=new Uint8Array(i,o,k);this.blocks.push({type:"TurboSpeedData",pilotPulseLength:a,syncPulse1Length:l,syncPulse2Length:c,zeroBitLength:h,oneBitLength:u,pilotPulseCount:d,lastByteMask:g,pause:p,data:f,generatePulses:i=>{i.addSegment(new e(a,d)),i.addSegment(new t([l,c])),i.addSegment(new s(f,h,u,g)),p&&i.addSegment(new n(p))}}),o+=k})();break;case 18:(()=>{const t=r.getUint16(o,!0);o+=2;const s=r.getUint16(o,!0);o+=2,this.blocks.push({type:"PureTone",pulseLength:t,pulseCount:s,generatePulses:n=>{n.addSegment(new e(t,s))}})})();break;case 19:(()=>{const e=r.getUint8(o);o+=1;const s=[];for(let t=0;t{e.addSegment(new t(s))}}),o+=2*e})();break;case 20:(()=>{const e=r.getUint16(o,!0);o+=2;const t=r.getUint16(o,!0);o+=2;const a=r.getUint8(o);o+=1;const l=r.getUint16(o,!0);o+=2;const c=r.getUint16(o,!0)|r.getUint8(o+2)<<16;o+=3;const h=new Uint8Array(i,o,c);this.blocks.push({type:"PureData",zeroBitLength:e,oneBitLength:t,lastByteMask:a,pause:l,data:h,generatePulses:i=>{i.addSegment(new s(h,e,t,a)),l&&i.addSegment(new n(l))}}),o+=c})();break;case 21:(()=>{const e=r.getUint16(o,!0);o+=2;const t=r.getUint16(o,!0);o+=2;const s=r.getUint8(o);o+=1;const n=r.getUint16(o,!0)|r.getUint8(o+2)<<16;o+=3,this.blocks.push({type:"DirectRecording",tstatesPerSample:e,lastByteMask:s,pause:t,data:new Uint8Array(i,o,n)}),o+=n})();break;case 32:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"Pause",pause:e,generatePulses:t=>{t.addSegment(new n(e))}})})();break;case 33:(()=>{const e=r.getUint8(o);o+=1;const t=new Uint8Array(i,o,e);o+=e;const s=String.fromCharCode.apply(null,t);this.blocks.push({type:"GroupStart",name:s})})();break;case 34:(()=>{this.blocks.push({type:"GroupEnd"})})();break;case 35:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"JumpToBlock",offset:e})})();break;case 36:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"LoopStart",repeatCount:e})})();break;case 37:(()=>{this.blocks.push({type:"LoopEnd"})})();break;case 38:(()=>{const e=r.getUint16(o,!0);o+=2;const t=[];for(let s=0;s{this.blocks.push({type:"ReturnFromSequence"})})();break;case 40:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"Select",data:new Uint8Array(i,o,e)}),o+=e})();break;case 48:(()=>{const e=r.getUint8(o);o+=1;const t=new Uint8Array(i,o,e);o+=e;const s=String.fromCharCode.apply(null,t);this.blocks.push({type:"TextDescription",text:s})})();break;case 49:(()=>{const e=r.getUint8(o);o+=1;const t=r.getUint8(o);o+=1;const s=new Uint8Array(i,o,t);o+=t;const n=String.fromCharCode.apply(null,s);this.blocks.push({type:"MessageBlock",displayTime:e,text:n})})();break;case 50:(()=>{const e=r.getUint16(o,!0);o+=2,this.blocks.push({type:"ArchiveInfo",data:new Uint8Array(i,o,e)}),o+=e})();break;case 51:(()=>{const e=3*r.getUint8(o);o+=1,this.blocks.push({type:"HardwareType",data:new Uint8Array(i,o,e)}),o+=e})();break;case 53:(()=>{const e=new Uint8Array(i,o,10);o+=10;const t=String.fromCharCode.apply(null,e),s=r.getUint32(o,!0);this.blocks.push({type:"CustomInfo",identifier:t,data:new Uint8Array(i,o,s)}),o+=s})();break;case 90:(()=>{o+=9,this.blocks.push({type:"Glue"})})();break;default:(()=>{const e=r.getUint32(o,!0);o+=4,this.blocks.push({type:"unknown",data:new Uint8Array(i,o,e)}),o+=e})()}}this.nextBlockIndex=0,this.loopToBlockIndex,this.repeatCount,this.callStack=[],this.pulseGenerator=new a((e=>{const t=this.getNextMeaningfulBlock(!1);return!!t&&(t.generatePulses(e),!0)}))}getNextMeaningfulBlock(e){let t=0===this.nextBlockIndex;for(;;){if(this.nextBlockIndex>=this.blocks.length){if(t||!e)return null;this.nextBlockIndex=0,t=!0}var s=this.blocks[this.nextBlockIndex];switch(s.type){case"StandardSpeedData":case"TurboSpeedData":case"PureTone":case"PulseSequence":case"PureData":case"DirectRecording":case"Pause":return this.nextBlockIndex++,s;case"JumpToBlock":this.nextBlockIndex+=s.offset;break;case"LoopStart":this.loopToBlockIndex=this.nextBlockIndex+1,this.repeatCount=s.repeatCount,this.nextBlockIndex++;break;case"LoopEnd":this.repeatCount--,this.repeatCount>0?this.nextBlockIndex=this.loopToBlockIndex:this.nextBlockIndex++;break;case"CallSequence":this.callStack.unshift(this.nextBlockIndex+1);for(var n=s.offsets.length-1;n>=0;n--)this.callStack.unshift(this.nextBlockIndex+s.offsets[n]);this.nextBlockIndex=this.callStack.shift();break;case"ReturnFromSequence":this.nextBlockIndex=this.callStack.shift();break;default:this.nextBlockIndex++}}}getNextLoadableBlock(){for(;;){var e=this.getNextMeaningfulBlock(!0);if(!e)return null;if("StandardSpeedData"==e.type||"TurboSpeedData"==e.type)return e.data}}}let o=null,l=null,c=null,h=null,u=null,d=null,g=!1,p=null,k=!1;const f=(e,t)=>{c.set(t,o.MACHINE_MEMORY+16384*e)},b=()=>{if(!p)return;const e=p.getNextLoadableBlock();if(!e)return;const t=u[4],s=t>>8,n=1&t;let a=u[8];const i=u[2],r=e[0];let l=!0;if(s!=r)l=!1;else if(n){let t=1,s=0,n=r;for(;s=e.length){l=!1;break}const i=e[t++];s++,o.poke(a,i),a=a+1&65535,n^=i}l&=t{switch(e.data.message){case"loadCore":t=e.data.baseUrl,WebAssembly.instantiateStreaming(fetch(new URL("jsspeccy-core.wasm",t),{})).then((e=>{o=e.instance.exports,l=o.memory,c=new Uint8Array(l.buffer),h=c.subarray(o.FRAME_BUFFER,26112),u=new Uint16Array(o.memory.buffer,o.REGISTERS,12),d=new Uint16Array(o.memory.buffer,o.TAPE_PULSES,o.TAPE_PULSES_LENGTH),postMessage({message:"ready"})}));break;case"runFrame":if(g)return;const s=e.data.frameBuffer,n=new Uint8Array(s);let a=null,m=null,y=0;if("audioBufferLeft"in e.data?(a=e.data.audioBufferLeft,m=e.data.audioBufferRight,y=a.byteLength/4,o.setAudioSamplesPerFrame(y)):o.setAudioSamplesPerFrame(0),p&&k){const e=o.getTapePulseBufferTstateCount(),t=o.getTapePulseWriteIndex(),[s,n,a]=p.pulseGenerator.emitPulses(d,t,8e4-e);o.setTapePulseBufferState(s,e+n),a&&(k=!1,postMessage({message:"stoppedTape"}))}let U=o.runFrame();for(;U;){switch(U){case 1:throw g=!0,"Unrecognised opcode!";case 2:b();break;default:throw g=!0,"runFrame returned unexpected result: "+U}U=o.resumeFrame()}if(n.set(h),y){const e=new Float32Array(o.memory.buffer,o.AUDIO_BUFFER_LEFT,y),t=new Float32Array(o.memory.buffer,o.AUDIO_BUFFER_RIGHT,y),n=new Float32Array(a),i=new Float32Array(m);n.set(e),i.set(t),postMessage({message:"frameCompleted",frameBuffer:s,audioBufferLeft:a,audioBufferRight:m},[s,a,m])}else postMessage({message:"frameCompleted",frameBuffer:s},[s]);break;case"keyDown":o.keyDown(e.data.row,e.data.mask);break;case"keyUp":o.keyUp(e.data.row,e.data.mask);break;case"setMachineType":o.setMachineType(e.data.type);break;case"reset":o.reset();break;case"loadMemory":f(e.data.page,e.data.data);break;case"loadSnapshot":(e=>{o.setMachineType(e.model);for(let t in e.memoryPages)f(t,e.memoryPages[t]);["AF","BC","DE","HL","AF_","BC_","DE_","HL_","IX","IY","SP","IR"].forEach(((t,s)=>{u[s]=e.registers[t]})),o.setPC(e.registers.PC),o.setIFF1(e.registers.iff1),o.setIFF2(e.registers.iff2),o.setIM(e.registers.im),o.setHalted(!!e.halted),o.writePort(254,e.ulaState.borderColour),48!=e.model&&o.writePort(32765,e.ulaState.pagingFlags),o.setTStates(e.tstates)})(e.data.snapshot),postMessage({message:"fileOpened",id:e.data.id,mediaType:"snapshot"});break;case"openTAPFile":p=new i(e.data.data),k=!1,postMessage({message:"fileOpened",id:e.data.id,mediaType:"tape"});break;case"openTZXFile":p=new r(e.data.data),k=!1,postMessage({message:"fileOpened",id:e.data.id,mediaType:"tape"});break;case"playTape":p&&!k&&(k=!0,postMessage({message:"playingTape"}));break;case"stopTape":p&&k&&(k=!1,postMessage({message:"stoppedTape"}));break;case"setTapeTraps":o.setTapeTraps(e.data.value);break;default:console.log("message received by worker:",e.data)}var t}})(); \ No newline at end of file diff --git a/site/jsspeccy/jsspeccy.js b/site/jsspeccy/jsspeccy.js deleted file mode 100644 index 19fb78a..0000000 --- a/site/jsspeccy/jsspeccy.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see jsspeccy.js.LICENSE.txt */ -(()=>{var e={187:e=>{"use strict";var t,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};t=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(r,n){function i(r){e.removeListener(t,s),n(r)}function s(){"function"==typeof e.removeListener&&e.removeListener("error",i),r([].slice.call(arguments))}m(e,t,s,{once:!0}),"error"!==t&&function(e,t,r){"function"==typeof e.on&&m(e,"error",t,{once:!0})}(e,i)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function o(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function h(e,t,r,n){var i,s,a,h;if(o(r),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),s=e._events),a=s[t]),void 0===a)a=s[t]=r,++e._eventsCount;else if("function"==typeof a?a=s[t]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),(i=l(e))>0&&a.length>i&&!a.warned){a.warned=!0;var d=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");d.name="MaxListenersExceededWarning",d.emitter=e,d.type=t,d.count=a.length,h=d,console&&console.warn&&console.warn(h)}return e}function d(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function u(e,t,r){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},i=d.bind(n);return i.listener=r,n.wrapFn=i,i}function c(e,t,r){var n=e._events;if(void 0===n)return[];var i=n[t];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(e){for(var t=new Array(e.length),r=0;r0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var l=s[e];if(void 0===l)return!1;if("function"==typeof l)n(l,this,t);else{var h=l.length,d=p(l,h);for(r=0;r=0;s--)if(r[s]===t||r[s].listener===t){a=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(e,t){for(;t+1=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return c(this,e,!0)},s.prototype.rawListeners=function(e){return c(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},s.prototype.listenerCount=f,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},171:(e,t,r)=>{"use strict";var n,i,s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};i=function(){for(var e=arguments.length,t=Array(e),r=0;r{e.exports=function e(t,r,n){function i(a,o){if(!r[a]){if(!t[a]){if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var h=r[a]={exports:{}};t[a][0].call(h.exports,(function(e){return i(t[a][1][e]||e)}),h,h.exports,e,t,r,n)}return r[a].exports}for(var s=void 0,a=0;a>2,o=(3&t)<<4|r>>4,l=1>6:64,h=2>4,r=(15&a)<<4|(o=s.indexOf(e.charAt(h++)))>>2,n=(3&o)<<6|(l=s.indexOf(e.charAt(h++))),c[d++]=t,64!==o&&(c[d++]=r),64!==l&&(c[d++]=n);return c}},{"./support":30,"./utils":32}],2:[function(e,t,r){"use strict";var n=e("./external"),i=e("./stream/DataWorker"),s=e("./stream/Crc32Probe"),a=e("./stream/DataLengthProbe");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a("uncompressedSize")).pipe(t.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",t)},t.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,r){"use strict";var n=e("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(e){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,r){"use strict";var n=e("./utils"),i=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==n.getTypeOf(e)?function(e,t,r,n){var s=i,a=0+r;e^=-1;for(var o=0;o>>8^s[255&(e^t[o])];return-1^e}(0|t,e,e.length):function(e,t,r,n){var s=i,a=0+r;e^=-1;for(var o=0;o>>8^s[255&(e^t.charCodeAt(o))];return-1^e}(0|t,e,e.length):0}},{"./utils":32}],5:[function(e,t,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){"use strict";var n;n="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),s=e("./utils"),a=e("./stream/GenericWorker"),o=n?"uint8array":"array";function l(e,t){a.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic="\b\0",s.inherits(l,a),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},l.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new l("Deflate",e)},r.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,r){"use strict";function n(e,t){var r,n="";for(r=0;r>>=8;return n}function i(e,t,r,i,a,d){var u,c,f=e.file,p=e.compression,m=d!==o.utf8encode,_=s.transformTo("string",d(f.name)),g=s.transformTo("string",o.utf8encode(f.name)),w=f.comment,b=s.transformTo("string",d(w)),y=s.transformTo("string",o.utf8encode(w)),v=g.length!==f.name.length,k=y.length!==w.length,x="",E="",S="",C=f.dir,A=f.date,z={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(z.crc32=e.crc32,z.compressedSize=e.compressedSize,z.uncompressedSize=e.uncompressedSize);var B=0;t&&(B|=8),m||!v&&!k||(B|=2048);var U=0,I=0;C&&(U|=16),"UNIX"===a?(I=798,U|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(f.unixPermissions,C)):(I=20,U|=function(e){return 63&(e||0)}(f.dosPermissions)),u=A.getUTCHours(),u<<=6,u|=A.getUTCMinutes(),u<<=5,u|=A.getUTCSeconds()/2,c=A.getUTCFullYear()-1980,c<<=4,c|=A.getUTCMonth()+1,c<<=5,c|=A.getUTCDate(),v&&(E=n(1,1)+n(l(_),4)+g,x+="up"+n(E.length,2)+E),k&&(S=n(1,1)+n(l(b),4)+y,x+="uc"+n(S.length,2)+S);var T="";return T+="\n\0",T+=n(B,2),T+=p.magic,T+=n(u,2),T+=n(c,2),T+=n(z.crc32,4),T+=n(z.compressedSize,4),T+=n(z.uncompressedSize,4),T+=n(_.length,2),T+=n(x.length,2),{fileRecord:h.LOCAL_FILE_HEADER+T+_+x,dirRecord:h.CENTRAL_FILE_HEADER+n(I,2)+T+n(b.length,2)+"\0\0\0\0"+n(U,4)+n(i,4)+_+x+b}}var s=e("../utils"),a=e("../stream/GenericWorker"),o=e("../utf8"),l=e("../crc32"),h=e("../signature");function d(e,t,r,n){a.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}s.inherits(d,a),d.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,a.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},d.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=i(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},d.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=i(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return h.DATA_DESCRIPTOR+n(e.crc32,4)+n(e.compressedSize,4)+n(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},d.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,r){"use strict";var n=e("./Uint8ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,r){"use strict";var n=e("./DataReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,r){"use strict";var n=e("./ArrayReader");function i(e){n.call(this,e)}e("../utils").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,r){"use strict";var n=e("../utils"),i=e("../support"),s=e("./ArrayReader"),a=e("./StringReader"),o=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new o(e):i.uint8array?new l(n.transformTo("uint8array",e)):new s(n.transformTo("array",e)):new a(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../utils");function s(e){n.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,r){"use strict";var n=e("./GenericWorker"),i=e("../crc32");function s(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./GenericWorker");function s(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,r){"use strict";function n(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r "+e:e}},t.exports=n},{}],29:[function(e,t,r){"use strict";var n=e("../utils"),i=e("./ConvertWorker"),s=e("./GenericWorker"),a=e("../base64"),o=e("../support"),l=e("../external"),h=null;if(o.nodestream)try{h=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function d(e,t,r){var a=t;switch(t){case"blob":case"arraybuffer":a="uint8array";break;case"base64":a="string"}try{this._internalType=a,this._outputType=t,this._mimeType=r,n.checkSupport(a),this._worker=e.pipe(new i(a)),e.lock()}catch(e){this._worker=new s("error"),this._worker.error(e)}}d.prototype={accumulate:function(e){return function(e,t){return new l.Promise((function(r,i){var s=[],o=e._internalType,l=e._outputType,h=e._mimeType;e.on("data",(function(e,r){s.push(e),t&&t(r)})).on("error",(function(e){s=[],i(e)})).on("end",(function(){try{var e=function(e,t,r){switch(e){case"blob":return n.newBlob(n.transformTo("arraybuffer",t),r);case"base64":return a.encode(t);default:return n.transformTo(e,t)}}(l,function(e,t){var r,n=0,i=null,s=0;for(r=0;r>>6:(r<65536?t[a++]=224|r>>>12:(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63),t[a++]=128|r>>>6&63),t[a++]=128|63&r);return t}(e)},r.utf8decode=function(e){return i.nodebuffer?n.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,r,i,s,a=e.length,l=new Array(2*a);for(t=r=0;t>10&1023,l[r++]=56320|1023&i)}return l.length!==r&&(l.subarray?l=l.subarray(0,r):l.length=r),n.applyFromCharCode(l)}(e=n.transformTo(i.uint8array?"uint8array":"array",e))},n.inherits(h,a),h.prototype.processChunk=function(e){var t=n.transformTo(i.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var s=t;(t=new Uint8Array(s.length+this.leftOver.length)).set(this.leftOver,0),t.set(s,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var a=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+o[e[r]]>t?r:t}(t),l=t;a!==t.length&&(i.uint8array?(l=t.subarray(0,a),this.leftOver=t.subarray(a,t.length)):(l=t.slice(0,a),this.leftOver=t.slice(a,t.length))),this.push({data:r.utf8decode(l),meta:e.meta})},h.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=h,n.inherits(d,a),d.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=d},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,r){"use strict";var n=e("./support"),i=e("./base64"),s=e("./nodejsUtils"),a=e("set-immediate-shim"),o=e("./external");function l(e){return e}function h(e,t){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=n(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(r<65536?t[a++]=224|r>>>12:(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63),t[a++]=128|r>>>6&63),t[a++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,i=t.length;r>10&1023,h[n++]=56320|1023&i)}return l(h,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},{"./common":41}],43:[function(e,t,r){"use strict";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,i){var s=n,a=i+r;e^=-1;for(var o=i;o>>8^s[255&(e^t[o])];return-1^e}},{}],46:[function(e,t,r){"use strict";var n,i=e("../utils/common"),s=e("./trees"),a=e("./adler32"),o=e("./crc32"),l=e("./messages"),h=-2,d=258,u=262,c=113;function f(e,t){return e.msg=l[t],t}function p(e){return(e<<1)-(4e.avail_out&&(r=e.avail_out),0!==r&&(i.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function g(e,t){s._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,_(e.strm)}function w(e,t){e.pending_buf[e.pending++]=t}function b(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function y(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-u?e.strstart-(e.w_size-u):0,h=e.window,c=e.w_mask,f=e.prev,p=e.strstart+d,m=h[s+a-1],_=h[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(h[(r=t)+a]===_&&h[r+a-1]===m&&h[r]===h[s]&&h[++r]===h[s+1]){s+=2,r++;do{}while(h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&sl&&0!=--i);return a<=e.lookahead?a:e.lookahead}function v(e){var t,r,n,s,l,h,d,c,f,p,m=e.w_size;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-u)){for(i.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=r=e.hash_size;n=e.head[--t],e.head[t]=m<=n?n-m:0,--r;);for(t=r=m;n=e.prev[--t],e.prev[t]=m<=n?n-m:0,--r;);s+=m}if(0===e.strm.avail_in)break;if(h=e.strm,d=e.window,c=e.strstart+e.lookahead,p=void 0,(f=s)<(p=h.avail_in)&&(p=f),r=0===p?0:(h.avail_in-=p,i.arraySet(d,h.input,h.next_in,p,c),1===h.state.wrap?h.adler=a(h.adler,d,p,c):2===h.state.wrap&&(h.adler=o(h.adler,d,p,c)),h.next_in+=p,h.total_in+=p,p),e.lookahead+=r,e.lookahead+e.insert>=3)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(n=s._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-3,n=s._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(v(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,g(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-u&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(g(e,!1),e.strm.avail_out),1)})),new E(4,4,8,4,k),new E(4,5,16,8,k),new E(4,6,32,32,k),new E(4,4,16,16,x),new E(8,16,32,32,x),new E(8,16,128,128,x),new E(8,32,128,256,x),new E(32,128,258,1024,x),new E(32,258,258,4096,x)],r.deflateInit=function(e,t){return z(e,t,8,15,8,0)},r.deflateInit2=z,r.deflateReset=A,r.deflateResetKeep=C,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?h:(e.state.gzhead=t,0):h},r.deflate=function(e,t){var r,i,a,l;if(!e||!e.state||5>8&255),w(i,i.gzhead.time>>16&255),w(i,i.gzhead.time>>24&255),w(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),w(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(w(i,255&i.gzhead.extra.length),w(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=o(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(w(i,0),w(i,0),w(i,0),w(i,0),w(i,0),w(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),w(i,3),i.status=c);else{var u=8+(i.w_bits-8<<4)<<8;u|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(u|=32),u+=31-u%31,i.status=c,b(i,u),0!==i.strstart&&(b(i,e.adler>>>16),b(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(a=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),_(e),a=i.pending,i.pending!==i.pending_buf_size));)w(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),_(e),a=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexa&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),0===l&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){a=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>a&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),_(e),a=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexa&&(e.adler=o(e.adler,i.pending_buf,i.pending-a,a)),0===l&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&_(e),i.pending+2<=i.pending_buf_size&&(w(i,255&e.adler),w(i,e.adler>>8&255),e.adler=0,i.status=c)):i.status=c),0!==i.pending){if(_(e),0===e.avail_out)return i.last_flush=-1,0}else if(0===e.avail_in&&p(t)<=p(r)&&4!==t)return f(e,-5);if(666===i.status&&0!==e.avail_in)return f(e,-5);if(0!==e.avail_in||0!==i.lookahead||0!==t&&666!==i.status){var y=2===i.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(v(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(g(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){for(var r,n,i,a,o=e.window;;){if(e.lookahead<=d){if(v(e),e.lookahead<=d&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=s._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=s._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(g(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(g(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(g(e,!1),0===e.strm.avail_out)?1:2}(i,t):n[i.level].func(i,t);if(3!==y&&4!==y||(i.status=666),1===y||3===y)return 0===e.avail_out&&(i.last_flush=-1),0;if(2===y&&(1===t?s._tr_align(i):5!==t&&(s._tr_stored_block(i,0,0,!1),3===t&&(m(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),_(e),0===e.avail_out))return i.last_flush=-1,0}return 4!==t?0:i.wrap<=0?1:(2===i.wrap?(w(i,255&e.adler),w(i,e.adler>>8&255),w(i,e.adler>>16&255),w(i,e.adler>>24&255),w(i,255&e.total_in),w(i,e.total_in>>8&255),w(i,e.total_in>>16&255),w(i,e.total_in>>24&255)):(b(i,e.adler>>>16),b(i,65535&e.adler)),_(e),0=r.w_size&&(0===o&&(m(r.head),r.strstart=0,r.block_start=0,r.insert=0),c=new i.Buf8(r.w_size),i.arraySet(c,t,f-r.w_size,r.w_size,0),t=c,f=r.w_size),l=e.avail_in,d=e.next_in,u=e.input,e.avail_in=f,e.next_in=0,e.input=t,v(r);r.lookahead>=3;){for(n=r.strstart,s=r.lookahead-2;r.ins_h=(r.ins_h<>>=y=b>>>24,p-=y,0==(y=b>>>16&255))C[s++]=65535&b;else{if(!(16&y)){if(0==(64&y)){b=m[(65535&b)+(f&(1<>>=y,p-=y),p<15&&(f+=S[n++]<>>=y=b>>>24,p-=y,!(16&(y=b>>>16&255))){if(0==(64&y)){b=_[(65535&b)+(f&(1<>>=y,p-=y,(y=s-a)>3,f&=(1<<(p-=v<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function d(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):l}function c(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,u(e)):l}function f(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(i<(s=a.wsize-a.wnext)&&(s=i),n.arraySet(a.window,t,r-i,s,a.wnext),(i-=s)?(n.arraySet(a.window,t,r-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=s,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=s(r.check,O,2,0),g=_=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&_)<<8)+(_>>8))%31){e.msg="incorrect header check",r.mode=30;break}if(8!=(15&_)){e.msg="unknown compression method",r.mode=30;break}if(g-=4,I=8+(15&(_>>>=4)),0===r.wbits)r.wbits=I;else if(I>r.wbits){e.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(O[0]=255&_,O[1]=_>>>8&255,r.check=s(r.check,O,2,0)),g=_=0,r.mode=3;case 3:for(;g<32;){if(0===p)break e;p--,_+=d[c++]<>>8&255,O[2]=_>>>16&255,O[3]=_>>>24&255,r.check=s(r.check,O,4,0)),g=_=0,r.mode=4;case 4:for(;g<16;){if(0===p)break e;p--,_+=d[c++]<>8),512&r.flags&&(O[0]=255&_,O[1]=_>>>8&255,r.check=s(r.check,O,2,0)),g=_=0,r.mode=5;case 5:if(1024&r.flags){for(;g<16;){if(0===p)break e;p--,_+=d[c++]<>>8&255,r.check=s(r.check,O,2,0)),g=_=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(p<(k=r.length)&&(k=p),k&&(r.head&&(I=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,d,c,k,I)),512&r.flags&&(r.check=s(r.check,d,k,c)),p-=k,c+=k,r.length-=k),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===p)break e;for(k=0;I=d[c+k++],r.head&&I&&r.length<65536&&(r.head.name+=String.fromCharCode(I)),I&&k>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;g<32;){if(0===p)break e;p--,_+=d[c++]<>>=7&g,g-=7&g,r.mode=27;break}for(;g<3;){if(0===p)break e;p--,_+=d[c++]<>>=1)){case 0:r.mode=14;break;case 1:if(w(r),r.mode=20,6!==t)break;_>>>=2,g-=2;break e;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=30}_>>>=2,g-=2;break;case 14:for(_>>>=7&g,g-=7&g;g<32;){if(0===p)break e;p--,_+=d[c++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&_,g=_=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(k=r.length){if(p>>=5,g-=5,r.ndist=1+(31&_),_>>>=5,g-=5,r.ncode=4+(15&_),_>>>=4,g-=4,286>>=3,g-=3}for(;r.have<19;)r.lens[P[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,F={bits:r.lenbits},T=o(0,r.lens,0,19,r.lencode,0,r.work,F),r.lenbits=F.bits,T){e.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,A=65535&L,!((S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>>=S,g-=S,r.lens[r.have++]=A;else{if(16===A){for(R=S+2;g>>=S,g-=S,0===r.have){e.msg="invalid bit length repeat",r.mode=30;break}I=r.lens[r.have-1],k=3+(3&_),_>>>=2,g-=2}else if(17===A){for(R=S+3;g>>=S)),_>>>=3,g-=3}else{for(R=S+7;g>>=S)),_>>>=7,g-=7}if(r.have+k>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=30;break}for(;k--;)r.lens[r.have++]=I}}if(30===r.mode)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,F={bits:r.lenbits},T=o(1,r.lens,0,r.nlen,r.lencode,0,r.work,F),r.lenbits=F.bits,T){e.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,F={bits:r.distbits},T=o(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,F),r.distbits=F.bits,T){e.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=p&&258<=m){e.next_out=f,e.avail_out=m,e.next_in=c,e.avail_in=p,r.hold=_,r.bits=g,a(e,v),f=e.next_out,u=e.output,m=e.avail_out,c=e.next_in,d=e.input,p=e.avail_in,_=r.hold,g=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;C=(L=r.lencode[_&(1<>>16&255,A=65535&L,!((S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>z)])>>>16&255,A=65535&L,!(z+(S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>>=z,g-=z,r.back+=z}if(_>>>=S,g-=S,r.back+=S,r.length=A,0===C){r.mode=26;break}if(32&C){r.back=-1,r.mode=12;break}if(64&C){e.msg="invalid literal/length code",r.mode=30;break}r.extra=15&C,r.mode=22;case 22:if(r.extra){for(R=r.extra;g>>=r.extra,g-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;C=(L=r.distcode[_&(1<>>16&255,A=65535&L,!((S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>z)])>>>16&255,A=65535&L,!(z+(S=L>>>24)<=g);){if(0===p)break e;p--,_+=d[c++]<>>=z,g-=z,r.back+=z}if(_>>>=S,g-=S,r.back+=S,64&C){e.msg="invalid distance code",r.mode=30;break}r.offset=A,r.extra=15&C,r.mode=24;case 24:if(r.extra){for(R=r.extra;g>>=r.extra,g-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===m)break e;if(k=v-m,r.offset>k){if((k=r.offset-k)>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=30;break}x=k>r.wnext?(k-=r.wnext,r.wsize-k):r.wnext-k,k>r.length&&(k=r.length),E=r.window}else E=u,x=f-r.offset,k=r.length;for(mw?(y=P[D+u[E]],F[R+u[E]]):(y=96,0),f=1<>B)+(p-=f)]=b<<24|y<<16|v|0,0!==p;);for(f=1<>=1;if(0!==f?(T&=f-1,T+=f):T=0,E++,0==--L[x]){if(x===C)break;x=t[r+u[E]]}if(A>>7)]}function S(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<>>=1,r<<=1,0<--t;);return r>>>1}function B(e,t,r){var n,i,s=new Array(16),a=0;for(n=1;n<=l;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=z(s[o]++,o))}}function U(e){var t;for(t=0;t>1;1<=r;r--)F(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],F(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,F(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,d=t.max_code,u=t.stat_desc.static_tree,c=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,m=t.stat_desc.max_length,_=0;for(s=0;s<=l;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)m<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=m,_++),h[2*n+1]=s,d>=7;n>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t>>3,(a=e.static_len+3+7>>>3)<=i&&(i=a)):i=a=r+5,r+4<=i&&-1!==t?N(e,t,r,n):4===e.strategy||a===i?(C(e,2+(n?1:0),3),R(e,f,p)):(C(e,4+(n?1:0),3),function(e,t,r,n){var i;for(C(e,t-257,5),C(e,r-1,5),C(e,n-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(_[r]+s+1)]++,e.dyn_dtree[2*E(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){C(e,2,3),A(e,256,f),function(e){16===e.bi_valid?(S(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,r){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){"use strict";t.exports="function"==typeof setImmediate?setImmediate:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}},{}]},{},[10])(10)},88:e=>{e.exports=''},27:e=>{e.exports=''},763:e=>{e.exports=''},535:e=>{e.exports=''},830:e=>{e.exports=''},917:e=>{e.exports=''},921:e=>{e.exports=''},911:e=>{e.exports=''},548:e=>{e.exports=''}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";var e=r(187),t=r(171),n=r(733);const i=26112;class s{constructor(e){if(this.canvas=e,this.ctx=this.canvas.getContext("2d"),this.imageData=this.ctx.getImageData(0,0,320,240),this.pixels=new Uint32Array(this.imageData.data.buffer),this.flashPhase=0,this.palette=new Uint32Array([255,540066047,3225424127,3225469183,1085280511,1354805503,3770683647,3233857791,255,809566207,4282396927,4285591807,1356861695,1356922879,4293415167,4294967295]),0===new Uint8Array(new Uint16Array([32768]).buffer)[0])for(let e=0;e<16;e++){const t=this.palette[e];this.palette[e]=t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255}}showFrame(e){const t=new Uint8Array(e);let r=0,n=0;for(let e=0;e<24;e++)for(let e=0;e<160;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}for(let e=0;e<192;e++){for(let e=0;e<16;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}for(let e=0;e<32;e++){let e=t[n++];const i=t[n++];let s,a;128&i&&16&this.flashPhase?(a=this.palette[(64&i)>>3|7&i],s=this.palette[(120&i)>>3]):(s=this.palette[(64&i)>>3|7&i],a=this.palette[(120&i)>>3]);for(let t=0;t<8;t++)this.pixels[r++]=128&e?s:a,e<<=1}for(let e=0;e<16;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}}for(let e=0;e<24;e++)for(let e=0;e<160;e++){let e=this.palette[t[n++]];this.pixels[r++]=e,this.pixels[r++]=e}this.ctx.putImageData(this.imageData,0,0),this.flashPhase=this.flashPhase+1&31}}class a{constructor(e){this.renderer=new s(e),this.frameBuffers=[new ArrayBuffer(i),new ArrayBuffer(i),new ArrayBuffer(i)],this.bufferBeingShown=null,this.bufferAwaitingShow=null,this.lockedBuffer=null}frameCompleted(e){this.frameBuffers[this.lockedBuffer]=e,this.bufferAwaitingShow=this.lockedBuffer,this.lockedBuffer=null}getNextFrameBufferIndex(){for(let e=0;e<3;e++)if(e!==this.bufferBeingShown&&e!==this.bufferAwaitingShow)return e}getNextFrameBuffer(){return this.lockedBuffer=this.getNextFrameBufferIndex(),this.frameBuffers[this.lockedBuffer]}readyToShow(){return null!==this.bufferAwaitingShow}show(){this.bufferBeingShown=this.bufferAwaitingShow,this.bufferAwaitingShow=null,this.renderer.showFrame(this.frameBuffers[this.bufferBeingShown]),this.bufferBeingShown=null}}var o=r(917),l=r(88);class h{constructor(e){this.elem=document.createElement("div"),this.elem.style.display="flow-root",this.elem.style.backgroundColor="#eee",this.elem.style.fontFamily="Arial, Helvetica, sans-serif",this.elem.style.top="0",this.elem.style.width="100%",e.appendChild(this.elem),this.currentMouseenterEvent=null,this.currentMouseoutEvent=null}addMenu(e){return new d(this.elem,e)}enterFullscreen(){this.elem.style.position="absolute"}exitFullscreen(){this.elem.style.position="static"}show(){this.elem.style.visibility="visible"}hide(){this.elem.style.visibility="hidden"}onmouseenter(e){this.currentMouseenterEvent&&this.elem.removeEventListener("mouseenter",this.currentMouseenterEvent),e&&this.elem.addEventListener("mouseenter",e),this.currentMouseenterEvent=e}onmouseout(e){this.currentMouseoutEvent&&this.elem.removeEventListener("mouseleave",this.currentMouseoutEvent),e&&this.elem.addEventListener("mouseleave",e),this.currentMouseoutEvent=e}}class d{constructor(e,t){const r=document.createElement("div");r.style.float="left",r.style.position="relative",e.appendChild(r);const n=document.createElement("button");n.style.margin="2px",n.innerText=t,r.appendChild(n),this.list=document.createElement("ul"),this.list.style.position="absolute",this.list.style.width="150px",this.list.style.backgroundColor="#eee",this.list.style.listStyleType="none",this.list.style.margin="0",this.list.style.padding="0",this.list.style.border="1px solid #888",this.list.style.display="none",r.appendChild(this.list),n.addEventListener("click",(()=>{this.isOpen()?this.close():this.open()})),document.addEventListener("click",(e=>{e.target!=n&&this.isOpen()&&this.close()}))}isOpen(){return"block"==this.list.style.display}open(){this.list.style.display="block"}close(){this.list.style.display="none"}addItem(e,t){const r=document.createElement("li");this.list.appendChild(r);const n=document.createElement("button");return n.innerText=e,n.style.width="100%",n.style.textAlign="left",n.style.borderWidth="0",n.style.paddingTop="4px",n.style.paddingBottom="4px",n.addEventListener("mouseenter",(()=>{n.style.backgroundColor="#ddd"})),n.addEventListener("mouseout",(()=>{n.style.backgroundColor="inherit"})),t&&n.addEventListener("click",t),r.appendChild(n),{setBullet:()=>{n.innerText=String.fromCharCode(8226)+" "+e},unsetBullet:()=>{n.innerText=e},setCheckbox:()=>{n.innerText=String.fromCharCode(10003)+" "+e},unsetCheckbox:()=>{n.innerText=e}}}}class u{constructor(e){this.elem=document.createElement("div"),this.elem.style.backgroundColor="#ccc",this.elem.style.bottom="0",this.elem.style.width="100%",e.appendChild(this.elem),this.currentMouseenterEvent=null,this.currentMouseoutEvent=null}addButton(e,t,r){const n=new c(e,t=t||{},r);return"right"==t.align&&(n.elem.style.float="right"),this.elem.appendChild(n.elem),n}enterFullscreen(){this.elem.style.position="absolute"}exitFullscreen(){this.elem.style.position="static"}show(){this.elem.style.visibility="visible"}hide(){this.elem.style.visibility="hidden"}onmouseenter(e){this.currentMouseenterEvent&&this.elem.removeEventListener("mouseenter",this.currentMouseenterEvent),e&&this.elem.addEventListener("mouseenter",e),this.currentMouseenterEvent=e}onmouseout(e){this.currentMouseoutEvent&&this.elem.removeEventListener("mouseleave",this.currentMouseoutEvent),e&&this.elem.addEventListener("mouseleave",e),this.currentMouseoutEvent=e}}class c{constructor(e,t,r){this.elem=document.createElement("button"),this.elem.style.margin="2px",this.setIcon(e),t.label&&this.setLabel(t.label),this.elem.addEventListener("click",r)}setIcon(e){this.elem.innerHTML=e,this.elem.firstChild.style.height="20px",this.elem.firstChild.style.verticalAlign="middle"}setLabel(e){this.elem.title=e}disable(){this.elem.disabled=!0,this.elem.firstChild.style.opacity="0.5"}enable(){this.elem.disabled=!1,this.elem.firstChild.style.opacity="1"}}class f extends e{constructor(e,t,r){if(super(),this.canvas=t.canvas,this.uiEnabled=!("uiEnabled"in r)||r.uiEnabled,this.uiEnabled){this.dialog=document.createElement("div"),this.dialog.style.display="none",e.appendChild(this.dialog);const t=document.createElement("button");t.innerHTML=l,t.style.float="right",t.style.border="none",t.firstChild.style.height="20px",t.firstChild.style.verticalAlign="middle",this.dialog.appendChild(t),t.addEventListener("click",(()=>{this.hideDialog()})),this.dialogBody=document.createElement("div"),this.dialogBody.style.clear="both",this.dialog.appendChild(this.dialogBody)}this.appContainer=document.createElement("div"),e.appendChild(this.appContainer),this.appContainer.style.position="relative",this.appContainer.style.outline="none",this.uiEnabled&&(this.menuBar=new h(this.appContainer)),this.appContainer.appendChild(this.canvas),this.canvas.style.objectFit="contain",this.canvas.style.display="block",this.uiEnabled&&(this.toolbar=new u(this.appContainer)),this.startButton=document.createElement("button"),this.startButton.innerHTML=o,this.appContainer.appendChild(this.startButton),this.startButton.style.position="absolute",this.startButton.style.top="50%",this.startButton.style.left="50%",this.startButton.style.width="96px",this.startButton.style.height="64px",this.startButton.style.marginLeft="-48px",this.startButton.style.marginTop="-32px",this.startButton.style.backgroundColor="rgba(160, 160, 160, 0.7)",this.startButton.style.border="none",this.startButton.style.borderRadius="4px",this.startButton.firstChild.style.height="56px",this.startButton.firstChild.style.verticalAlign="middle",this.startButton.addEventListener("mouseenter",(()=>{this.startButton.style.backgroundColor="rgba(128, 128, 128, 0.7)"})),this.startButton.addEventListener("mouseleave",(()=>{this.startButton.style.backgroundColor="rgba(160, 160, 160, 0.7)"})),this.startButton.addEventListener("click",(e=>{t.start()})),t.on("start",(()=>{this.startButton.style.display="none"})),t.on("pause",(()=>{this.startButton.style.display="block"})),this.zoom=null,this.isFullscreen=!1,this.uiIsHidden=!1,this.allowUIHiding=!0,this.hideUITimeout=null,this.ignoreNextMouseMove=!1;const n=()=>{this.ignoreNextMouseMove?this.ignoreNextMouseMove=!1:(this.showUI(),this.hideUITimeout&&clearTimeout(this.hideUITimeout),this.hideUITimeout=setTimeout((()=>{this.hideUI()}),3e3))};this.appContainer.addEventListener("fullscreenchange",(()=>{document.fullscreenElement?(this.isFullscreen=!0,this.canvas.style.width="100%",this.canvas.style.height="100%",this.uiEnabled&&(document.addEventListener("mousemove",n),this.ignoreNextMouseMove=!0,this.menuBar.enterFullscreen(),this.menuBar.onmouseenter((()=>{this.allowUIHiding=!1})),this.menuBar.onmouseout((()=>{this.allowUIHiding=!0})),this.toolbar.enterFullscreen(),this.toolbar.onmouseenter((()=>{this.allowUIHiding=!1})),this.toolbar.onmouseout((()=>{this.allowUIHiding=!0})),this.hideUI()),this.emit("setZoom","fullscreen"),t.focus()):(this.isFullscreen=!1,this.uiEnabled&&(this.hideUITimeout&&clearTimeout(this.hideUITimeout),this.showUI(),this.menuBar.exitFullscreen(),this.menuBar.onmouseenter(null),this.menuBar.onmouseout(null),this.toolbar.exitFullscreen(),this.toolbar.onmouseenter(null),this.toolbar.onmouseout(null),document.removeEventListener("mousemove",n)),this.setZoom(this.zoom))})),this.setZoom(r.zoom||1),r.sandbox||(this.appContainer.addEventListener("drop",(e=>{e.preventDefault();let r=Promise.resolve();if(e.dataTransfer.items){for(const n of e.dataTransfer.items)if("file"===n.kind){const e=n.getAsFile();r=r.then((()=>{t.openFile(e)}))}}else for(const n of e.dataTransfer.files)r=r.then((()=>{t.openFile(n)}));r.then((()=>{t.isInitiallyPaused&&t.start()}))})),this.appContainer.addEventListener("dragover",(e=>{e.preventDefault()})))}setZoom(e){if(this.zoom=e,this.isFullscreen)return void document.exitFullscreen();const t=320*this.zoom,r=240*this.zoom;this.canvas.style.width=t+"px",this.canvas.style.height=r+"px",this.appContainer.style.width=t+"px",this.emit("setZoom",e)}enterFullscreen(){this.appContainer.requestFullscreen()}exitFullscreen(){this.isFullscreen&&document.exitFullscreen()}toggleFullscreen(){this.isFullscreen?this.exitFullscreen():this.enterFullscreen()}hideUI(){this.uiEnabled&&this.allowUIHiding&&!this.uiIsHidden&&(this.uiIsHidden=!0,this.appContainer.style.cursor="none",this.menuBar.hide(),this.toolbar.hide())}showUI(){this.uiEnabled&&this.uiIsHidden&&(this.uiIsHidden=!1,this.appContainer.style.cursor="default",this.menuBar.show(),this.toolbar.show())}showDialog(){return this.dialog.style.display="block",this.dialog.style.position="absolute",this.dialog.style.backgroundColor="#eee",this.dialog.style.zIndex="100",this.dialog.style.width="75%",this.dialog.style.height="80%",this.dialog.style.left="12%",this.dialog.style.top="10%",this.dialog.style.overflow="scroll",this.dialogBody.style.paddingLeft="8px",this.dialogBody.style.paddingRight="8px",this.dialogBody.style.paddingBottom="8px",this.dialogBody}hideDialog(){this.dialog.style.display="none",this.dialogBody.innerHTML=""}unload(){this.uiEnabled&&this.dialog.remove(),this.appContainer.remove()}}function p(e){let t=e.length;for(;--t>=0;)e[t]=0}const m=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),_=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),g=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),w=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),b=new Array(576);p(b);const y=new Array(60);p(y);const v=new Array(512);p(v);const k=new Array(256);p(k);const x=new Array(29);p(x);const E=new Array(30);function S(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}let C,A,z;function B(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}p(E);const U=e=>e<256?v[e]:v[256+(e>>>7)],I=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},T=(e,t,r)=>{e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<{T(e,r[2*t],r[2*t+1])},R=(e,t)=>{let r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1},L=(e,t,r)=>{const n=new Array(16);let i,s,a=0;for(i=1;i<=15;i++)n[i]=a=a+r[i-1]<<1;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=R(n[t]++,t))}},O=e=>{let t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0},P=e=>{e.bi_valid>8?I(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},D=(e,t,r,n)=>{const i=2*t,s=2*r;return e[i]{const n=e.heap[r];let i=r<<1;for(;i<=e.heap_len&&(i{let n,i,s,a,o=0;if(0!==e.last_lit)do{n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?F(e,i,t):(s=k[i],F(e,s+256+1,t),a=m[s],0!==a&&(i-=x[s],T(e,i,a)),n--,s=U(n),F(e,s,r),a=_[s],0!==a&&(n-=E[s],T(e,n,a)))}while(o{const r=t.dyn_tree,n=t.stat_desc.static_tree,i=t.stat_desc.has_stree,s=t.stat_desc.elems;let a,o,l,h=-1;for(e.heap_len=0,e.heap_max=573,a=0;a>1;a>=1;a--)N(e,r,a);l=s;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],N(e,r,1),o=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=o,r[2*l]=r[2*a]+r[2*o],e.depth[l]=(e.depth[a]>=e.depth[o]?e.depth[a]:e.depth[o])+1,r[2*a+1]=r[2*o+1]=l,e.heap[1]=l++,N(e,r,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const r=t.dyn_tree,n=t.max_code,i=t.stat_desc.static_tree,s=t.stat_desc.has_stree,a=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,l=t.stat_desc.max_length;let h,d,u,c,f,p,m=0;for(c=0;c<=15;c++)e.bl_count[c]=0;for(r[2*e.heap[e.heap_max]+1]=0,h=e.heap_max+1;h<573;h++)d=e.heap[h],c=r[2*r[2*d+1]+1]+1,c>l&&(c=l,m++),r[2*d+1]=c,d>n||(e.bl_count[c]++,f=0,d>=o&&(f=a[d-o]),p=r[2*d],e.opt_len+=p*(c+f),s&&(e.static_len+=p*(i[2*d+1]+f)));if(0!==m){do{for(c=l-1;0===e.bl_count[c];)c--;e.bl_count[c]--,e.bl_count[c+1]+=2,e.bl_count[l]--,m-=2}while(m>0);for(c=l;0!==c;c--)for(d=e.bl_count[c];0!==d;)u=e.heap[--h],u>n||(r[2*u+1]!==c&&(e.opt_len+=(c-r[2*u+1])*r[2*u],r[2*u+1]=c),d--)}})(e,t),L(r,h,e.bl_count)},H=(e,t,r)=>{let n,i,s=-1,a=t[1],o=0,l=7,h=4;for(0===a&&(l=138,h=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o{let n,i,s=-1,a=t[1],o=0,l=7,h=4;for(0===a&&(l=138,h=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o{T(e,0+(n?1:0),3),((e,t,r,n)=>{P(e),I(e,r),I(e,~r),e.pending_buf.set(e.window.subarray(t,t+r),e.pending),e.pending+=r})(e,t,r)};var V={_tr_init:e=>{W||((()=>{let e,t,r,n,i;const s=new Array(16);for(r=0,n=0;n<28;n++)for(x[n]=r,e=0;e<1<>=7;n<30;n++)for(E[n]=i<<7,e=0;e<1<<_[n]-7;e++)v[256+i++]=n;for(t=0;t<=15;t++)s[t]=0;for(e=0;e<=143;)b[2*e+1]=8,e++,s[8]++;for(;e<=255;)b[2*e+1]=9,e++,s[9]++;for(;e<=279;)b[2*e+1]=7,e++,s[7]++;for(;e<=287;)b[2*e+1]=8,e++,s[8]++;for(L(b,287,s),e=0;e<30;e++)y[2*e+1]=5,y[2*e]=R(e,5);C=new S(b,m,257,286,15),A=new S(y,_,0,30,15),z=new S(new Array(0),g,0,19,7)})(),W=!0),e.l_desc=new B(e.dyn_ltree,C),e.d_desc=new B(e.dyn_dtree,A),e.bl_desc=new B(e.bl_tree,z),e.bi_buf=0,e.bi_valid=0,O(e)},_tr_stored_block:K,_tr_flush_block:(e,t,r,n)=>{let i,s,a=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0})(e)),Z(e,e.l_desc),Z(e,e.d_desc),a=(e=>{let t;for(H(e,e.dyn_ltree,e.l_desc.max_code),H(e,e.dyn_dtree,e.d_desc.max_code),Z(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*w[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),i=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?K(e,t,r,n):4===e.strategy||s===i?(T(e,2+(n?1:0),3),M(e,b,y)):(T(e,4+(n?1:0),3),((e,t,r,n)=>{let i;for(T(e,t-257,5),T(e,r-1,5),T(e,n-4,4),i=0;i(e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(k[r]+256+1)]++,e.dyn_dtree[2*U(t)]++),e.last_lit===e.lit_bufsize-1),_tr_align:e=>{T(e,2,3),F(e,256,b),(e=>{16===e.bi_valid?(I(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}},G=(e,t,r,n)=>{let i=65535&e|0,s=e>>>16&65535|0,a=0;for(;0!==r;){a=r>2e3?2e3:r,r-=a;do{i=i+t[n++]|0,s=s+i|0}while(--a);i%=65521,s%=65521}return i|s<<16|0};const X=new Uint32Array((()=>{let e,t=[];for(var r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t})());var Y=(e,t,r,n)=>{const i=X,s=n+r;e^=-1;for(let r=n;r>>8^i[255&(e^t[r])];return-1^e},q={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},J={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Q,_tr_stored_block:$,_tr_flush_block:ee,_tr_tally:te,_tr_align:re}=V,{Z_NO_FLUSH:ne,Z_PARTIAL_FLUSH:ie,Z_FULL_FLUSH:se,Z_FINISH:ae,Z_BLOCK:oe,Z_OK:le,Z_STREAM_END:he,Z_STREAM_ERROR:de,Z_DATA_ERROR:ue,Z_BUF_ERROR:ce,Z_DEFAULT_COMPRESSION:fe,Z_FILTERED:pe,Z_HUFFMAN_ONLY:me,Z_RLE:_e,Z_FIXED:ge,Z_DEFAULT_STRATEGY:we,Z_UNKNOWN:be,Z_DEFLATED:ye}=J,ve=258,ke=262,xe=103,Ee=113,Se=666,Ce=(e,t)=>(e.msg=q[t],t),Ae=e=>(e<<1)-(e>4?9:0),ze=e=>{let t=e.length;for(;--t>=0;)e[t]=0};let Be=(e,t,r)=>(t<{const t=e.state;let r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+r),e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))},Ie=(e,t)=>{ee(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,Ue(e.strm)},Te=(e,t)=>{e.pending_buf[e.pending++]=t},Fe=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},Re=(e,t,r,n)=>{let i=e.avail_in;return i>n&&(i=n),0===i?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),r),1===e.state.wrap?e.adler=G(e.adler,t,i,r):2===e.state.wrap&&(e.adler=Y(e.adler,t,i,r)),e.next_in+=i,e.total_in+=i,i)},Le=(e,t)=>{let r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match;const l=e.strstart>e.w_size-ke?e.strstart-(e.w_size-ke):0,h=e.window,d=e.w_mask,u=e.prev,c=e.strstart+ve;let f=h[s+a-1],p=h[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(r=t,h[r+a]===p&&h[r+a-1]===f&&h[r]===h[s]&&h[++r]===h[s+1]){s+=2,r++;do{}while(h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&h[++s]===h[++r]&&sa){if(e.match_start=t,a=n,n>=o)break;f=h[s+a-1],p=h[s+a]}}}while((t=u[t&d])>l&&0!=--i);return a<=e.lookahead?a:e.lookahead},Oe=e=>{const t=e.w_size;let r,n,i,s,a;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-ke)){e.window.set(e.window.subarray(t,t+t),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,r=n;do{i=e.head[--r],e.head[r]=i>=t?i-t:0}while(--n);n=t,r=n;do{i=e.prev[--r],e.prev[r]=i>=t?i-t:0}while(--n);s+=t}if(0===e.strm.avail_in)break;if(n=Re(e.strm,e.window,e.strstart+e.lookahead,s),e.lookahead+=n,e.lookahead+e.insert>=3)for(a=e.strstart-e.insert,e.ins_h=e.window[a],e.ins_h=Be(e,e.ins_h,e.window[a+1]);e.insert&&(e.ins_h=Be(e,e.ins_h,e.window[a+3-1]),e.prev[a&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=a,a++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead{let r,n;for(;;){if(e.lookahead=3&&(e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-ke&&(e.match_length=Le(e,r)),e.match_length>=3)if(n=te(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=Be(e,e.ins_h,e.window[e.strstart+1]);else n=te(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2},De=(e,t)=>{let r,n,i;for(;;){if(e.lookahead=3&&(e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==r&&e.prev_length4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-3,n=te(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=i&&(e.ins_h=Be(e,e.ins_h,e.window[e.strstart+3-1]),r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(Ie(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(n=te(e,0,e.window[e.strstart-1]),n&&Ie(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=te(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2};function Ne(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}const Me=[new Ne(0,0,0,0,((e,t)=>{let r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(Oe(e),0===e.lookahead&&t===ne)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;const n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,Ie(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-ke&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(Ie(e,!1),e.strm.avail_out),1)})),new Ne(4,4,8,4,Pe),new Ne(4,5,16,8,Pe),new Ne(4,6,32,32,Pe),new Ne(4,4,16,16,De),new Ne(8,16,32,32,De),new Ne(8,16,128,128,De),new Ne(8,32,128,256,De),new Ne(32,128,258,1024,De),new Ne(32,258,258,4096,De)];function Ze(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=ye,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),ze(this.dyn_ltree),ze(this.dyn_dtree),ze(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),ze(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),ze(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const He=e=>{if(!e||!e.state)return Ce(e,de);e.total_in=e.total_out=0,e.data_type=be;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:Ee,e.adler=2===t.wrap?0:1,t.last_flush=ne,Q(t),le},je=e=>{const t=He(e);var r;return t===le&&((r=e.state).window_size=2*r.w_size,ze(r.head),r.max_lazy_match=Me[r.level].max_lazy,r.good_match=Me[r.level].good_length,r.nice_match=Me[r.level].nice_length,r.max_chain_length=Me[r.level].max_chain,r.strstart=0,r.block_start=0,r.lookahead=0,r.insert=0,r.match_length=r.prev_length=2,r.match_available=0,r.ins_h=0),t},We=(e,t,r,n,i,s)=>{if(!e)return de;let a=1;if(t===fe&&(t=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),i<1||i>9||r!==ye||n<8||n>15||t<0||t>9||s<0||s>ge)return Ce(e,de);8===n&&(n=9);const o=new Ze;return e.state=o,o.strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<e&&e.state?2!==e.state.wrap?de:(e.state.gzhead=t,le):de,Ge=(e,t)=>{let r,n;if(!e||!e.state||t>oe||t<0)return e?Ce(e,de):de;const i=e.state;if(!e.output||!e.input&&0!==e.avail_in||i.status===Se&&t!==ae)return Ce(e,0===e.avail_out?ce:de);i.strm=e;const s=i.last_flush;if(i.last_flush=t,42===i.status)if(2===i.wrap)e.adler=0,Te(i,31),Te(i,139),Te(i,8),i.gzhead?(Te(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),Te(i,255&i.gzhead.time),Te(i,i.gzhead.time>>8&255),Te(i,i.gzhead.time>>16&255),Te(i,i.gzhead.time>>24&255),Te(i,9===i.level?2:i.strategy>=me||i.level<2?4:0),Te(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(Te(i,255&i.gzhead.extra.length),Te(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=Y(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(Te(i,0),Te(i,0),Te(i,0),Te(i,0),Te(i,0),Te(i,9===i.level?2:i.strategy>=me||i.level<2?4:0),Te(i,3),i.status=Ee);else{let t=ye+(i.w_bits-8<<4)<<8,r=-1;r=i.strategy>=me||i.level<2?0:i.level<6?1:6===i.level?2:3,t|=r<<6,0!==i.strstart&&(t|=32),t+=31-t%31,i.status=Ee,Fe(i,t),0!==i.strstart&&(Fe(i,e.adler>>>16),Fe(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(r=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),Ue(e),r=i.pending,i.pending!==i.pending_buf_size));)Te(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){r=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),Ue(e),r=i.pending,i.pending===i.pending_buf_size)){n=1;break}n=i.gzindexr&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),0===n&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){r=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>r&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),Ue(e),r=i.pending,i.pending===i.pending_buf_size)){n=1;break}n=i.gzindexr&&(e.adler=Y(e.adler,i.pending_buf,i.pending-r,r)),0===n&&(i.status=xe)}else i.status=xe;if(i.status===xe&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&Ue(e),i.pending+2<=i.pending_buf_size&&(Te(i,255&e.adler),Te(i,e.adler>>8&255),e.adler=0,i.status=Ee)):i.status=Ee),0!==i.pending){if(Ue(e),0===e.avail_out)return i.last_flush=-1,le}else if(0===e.avail_in&&Ae(t)<=Ae(s)&&t!==ae)return Ce(e,ce);if(i.status===Se&&0!==e.avail_in)return Ce(e,ce);if(0!==e.avail_in||0!==i.lookahead||t!==ne&&i.status!==Se){let r=i.strategy===me?((e,t)=>{let r;for(;;){if(0===e.lookahead&&(Oe(e),0===e.lookahead)){if(t===ne)return 1;break}if(e.match_length=0,r=te(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2})(i,t):i.strategy===_e?((e,t)=>{let r,n,i,s;const a=e.window;for(;;){if(e.lookahead<=ve){if(Oe(e),e.lookahead<=ve&&t===ne)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(i=e.strstart-1,n=a[i],n===a[++i]&&n===a[++i]&&n===a[++i])){s=e.strstart+ve;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=te(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=te(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(Ie(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===ae?(Ie(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(Ie(e,!1),0===e.strm.avail_out)?1:2})(i,t):Me[i.level].func(i,t);if(3!==r&&4!==r||(i.status=Se),1===r||3===r)return 0===e.avail_out&&(i.last_flush=-1),le;if(2===r&&(t===ie?re(i):t!==oe&&($(i,0,0,!1),t===se&&(ze(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),Ue(e),0===e.avail_out))return i.last_flush=-1,le}return t!==ae?le:i.wrap<=0?he:(2===i.wrap?(Te(i,255&e.adler),Te(i,e.adler>>8&255),Te(i,e.adler>>16&255),Te(i,e.adler>>24&255),Te(i,255&e.total_in),Te(i,e.total_in>>8&255),Te(i,e.total_in>>16&255),Te(i,e.total_in>>24&255)):(Fe(i,e.adler>>>16),Fe(i,65535&e.adler)),Ue(e),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?le:he)},Xe=e=>{if(!e||!e.state)return de;const t=e.state.status;return 42!==t&&69!==t&&73!==t&&91!==t&&t!==xe&&t!==Ee&&t!==Se?Ce(e,de):(e.state=null,t===Ee?Ce(e,ue):le)},Ye=(e,t)=>{let r=t.length;if(!e||!e.state)return de;const n=e.state,i=n.wrap;if(2===i||1===i&&42!==n.status||n.lookahead)return de;if(1===i&&(e.adler=G(e.adler,t,r,0)),n.wrap=0,r>=n.w_size){0===i&&(ze(n.head),n.strstart=0,n.block_start=0,n.insert=0);let e=new Uint8Array(n.w_size);e.set(t.subarray(r-n.w_size,r),0),t=e,r=n.w_size}const s=e.avail_in,a=e.next_in,o=e.input;for(e.avail_in=r,e.next_in=0,e.input=t,Oe(n);n.lookahead>=3;){let e=n.strstart,t=n.lookahead-2;do{n.ins_h=Be(n,n.ins_h,n.window[e+3-1]),n.prev[e&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=e,e++}while(--t);n.strstart=e,n.lookahead=2,Oe(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=a,e.input=o,e.avail_in=s,n.wrap=i,le};const qe=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Je=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const r=t.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(const t in r)qe(r,t)&&(e[t]=r[t])}}return e},Qe=e=>{let t=0;for(let r=0,n=e.length;r=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;et[254]=et[254]=1;var tt=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,r,n,i,s,a=e.length,o=0;for(i=0;i>>6,t[s++]=128|63&r):r<65536?(t[s++]=224|r>>>12,t[s++]=128|r>>>6&63,t[s++]=128|63&r):(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63,t[s++]=128|r>>>6&63,t[s++]=128|63&r);return t},rt=(e,t)=>{const r=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,i;const s=new Array(2*r);for(i=0,n=0;n4)s[i++]=65533,n+=a-1;else{for(t&=2===a?31:3===a?15:7;a>1&&n1?s[i++]=65533:t<65536?s[i++]=t:(t-=65536,s[i++]=55296|t>>10&1023,s[i++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&$e)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let r="";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let r=t-1;for(;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+et[e[r]]>t?r:t},it=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const st=Object.prototype.toString,{Z_NO_FLUSH:at,Z_SYNC_FLUSH:ot,Z_FULL_FLUSH:lt,Z_FINISH:ht,Z_OK:dt,Z_STREAM_END:ut,Z_DEFAULT_COMPRESSION:ct,Z_DEFAULT_STRATEGY:ft,Z_DEFLATED:pt}=J;function mt(e){this.options=Je({level:ct,method:pt,chunkSize:16384,windowBits:15,memLevel:8,strategy:ft},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new it,this.strm.avail_out=0;let r=Ke(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==dt)throw new Error(q[r]);if(t.header&&Ve(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?tt(t.dictionary):"[object ArrayBuffer]"===st.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,r=Ye(this.strm,e),r!==dt)throw new Error(q[r]);this._dict_set=!0}}function _t(e,t){const r=new mt(t);if(r.push(e,!0),r.err)throw r.msg||q[r.err];return r.result}mt.prototype.push=function(e,t){const r=this.strm,n=this.options.chunkSize;let i,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?ht:at,"string"==typeof e?r.input=tt(e):"[object ArrayBuffer]"===st.call(e)?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;)if(0===r.avail_out&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),(s===ot||s===lt)&&r.avail_out<=6)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else{if(i=Ge(r,s),i===ut)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=Xe(this.strm),this.onEnd(i),this.ended=!0,i===dt;if(0!==r.avail_out){if(s>0&&r.next_out>0)this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;else if(0===r.avail_in)break}else this.onData(r.output)}return!0},mt.prototype.onData=function(e){this.chunks.push(e)},mt.prototype.onEnd=function(e){e===dt&&(this.result=Qe(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var gt={Deflate:mt,deflate:_t,deflateRaw:function(e,t){return(t=t||{}).raw=!0,_t(e,t)},gzip:function(e,t){return(t=t||{}).gzip=!0,_t(e,t)},constants:J},wt=function(e,t){let r,n,i,s,a,o,l,h,d,u,c,f,p,m,_,g,w,b,y,v,k,x,E,S;const C=e.state;r=e.next_in,E=e.input,n=r+(e.avail_in-5),i=e.next_out,S=e.output,s=i-(t-e.avail_out),a=i+(e.avail_out-257),o=C.dmax,l=C.wsize,h=C.whave,d=C.wnext,u=C.window,c=C.hold,f=C.bits,p=C.lencode,m=C.distcode,_=(1<>>24,c>>>=b,f-=b,b=w>>>16&255,0===b)S[i++]=65535&w;else{if(!(16&b)){if(0==(64&b)){w=p[(65535&w)+(c&(1<>>=b,f-=b),f<15&&(c+=E[r++]<>>24,c>>>=b,f-=b,b=w>>>16&255,!(16&b)){if(0==(64&b)){w=m[(65535&w)+(c&(1<o){e.msg="invalid distance too far back",C.mode=30;break e}if(c>>>=b,f-=b,b=i-s,v>b){if(b=v-b,b>h&&C.sane){e.msg="invalid distance too far back",C.mode=30;break e}if(k=0,x=u,0===d){if(k+=l-b,b2;)S[i++]=x[k++],S[i++]=x[k++],S[i++]=x[k++],y-=3;y&&(S[i++]=x[k++],y>1&&(S[i++]=x[k++]))}else{k=i-v;do{S[i++]=S[k++],S[i++]=S[k++],S[i++]=S[k++],y-=3}while(y>2);y&&(S[i++]=S[k++],y>1&&(S[i++]=S[k++]))}break}}break}}while(r>3,r-=y,f-=y<<3,c&=(1<{const l=o.bits;let h,d,u,c,f,p,m=0,_=0,g=0,w=0,b=0,y=0,v=0,k=0,x=0,E=0,S=null,C=0;const A=new Uint16Array(16),z=new Uint16Array(16);let B,U,I,T=null,F=0;for(m=0;m<=15;m++)A[m]=0;for(_=0;_=1&&0===A[w];w--);if(b>w&&(b=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(g=1;g0&&(0===e||1!==w))return-1;for(z[1]=0,m=1;m<15;m++)z[m+1]=z[m]+A[m];for(_=0;_852||2===e&&x>592)return 1;for(;;){B=m-v,a[_]p?(U=T[F+a[_]],I=S[C+a[_]]):(U=96,I=0),h=1<>v)+d]=B<<24|U<<16|I|0}while(0!==d);for(h=1<>=1;if(0!==h?(E&=h-1,E+=h):E=0,_++,0==--A[m]){if(m===w)break;m=t[r+a[_]]}if(m>b&&(E&c)!==u){for(0===v&&(v=b),f+=g,y=m-v,k=1<852||2===e&&x>592)return 1;u=E&c,i[u]=b<<24|y<<16|f-s|0}}return 0!==E&&(i[f+E]=m-v<<24|64<<16|0),o.bits=b,0};const{Z_FINISH:Et,Z_BLOCK:St,Z_TREES:Ct,Z_OK:At,Z_STREAM_END:zt,Z_NEED_DICT:Bt,Z_STREAM_ERROR:Ut,Z_DATA_ERROR:It,Z_MEM_ERROR:Tt,Z_BUF_ERROR:Ft,Z_DEFLATED:Rt}=J,Lt=12,Ot=30,Pt=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function Dt(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Nt=e=>{if(!e||!e.state)return Ut;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,At},Mt=e=>{if(!e||!e.state)return Ut;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Nt(e)},Zt=(e,t)=>{let r;if(!e||!e.state)return Ut;const n=e.state;return t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?Ut:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,Mt(e))},Ht=(e,t)=>{if(!e)return Ut;const r=new Dt;e.state=r,r.window=null;const n=Zt(e,t);return n!==At&&(e.state=null),n};let jt,Wt,Kt=!0;const Vt=e=>{if(Kt){jt=new Int32Array(512),Wt=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(xt(1,e.lens,0,288,jt,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;xt(2,e.lens,0,32,Wt,0,e.work,{bits:5}),Kt=!1}e.lencode=jt,e.lenbits=9,e.distcode=Wt,e.distbits=5},Gt=(e,t,r,n)=>{let i;const s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(t.subarray(r-s.wsize,r),0),s.wnext=0,s.whave=s.wsize):(i=s.wsize-s.wnext,i>n&&(i=n),s.window.set(t.subarray(r-n,r-n+i),s.wnext),(n-=i)?(s.window.set(t.subarray(r-n,r),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave{let r,n,i,s,a,o,l,h,d,u,c,f,p,m,_,g,w,b,y,v,k,x,E=0;const S=new Uint8Array(4);let C,A;const z=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return Ut;r=e.state,r.mode===Lt&&(r.mode=13),a=e.next_out,i=e.output,l=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,h=r.hold,d=r.bits,u=o,c=l,x=At;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;d<16;){if(0===o)break e;o--,h+=n[s++]<>>8&255,r.check=Y(r.check,S,2,0),h=0,d=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&h)<<8)+(h>>8))%31){e.msg="incorrect header check",r.mode=Ot;break}if((15&h)!==Rt){e.msg="unknown compression method",r.mode=Ot;break}if(h>>>=4,d-=4,k=8+(15&h),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg="invalid window size",r.mode=Ot;break}r.dmax=1<>8&1),512&r.flags&&(S[0]=255&h,S[1]=h>>>8&255,r.check=Y(r.check,S,2,0)),h=0,d=0,r.mode=3;case 3:for(;d<32;){if(0===o)break e;o--,h+=n[s++]<>>8&255,S[2]=h>>>16&255,S[3]=h>>>24&255,r.check=Y(r.check,S,4,0)),h=0,d=0,r.mode=4;case 4:for(;d<16;){if(0===o)break e;o--,h+=n[s++]<>8),512&r.flags&&(S[0]=255&h,S[1]=h>>>8&255,r.check=Y(r.check,S,2,0)),h=0,d=0,r.mode=5;case 5:if(1024&r.flags){for(;d<16;){if(0===o)break e;o--,h+=n[s++]<>>8&255,r.check=Y(r.check,S,2,0)),h=0,d=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(f=r.length,f>o&&(f=o),f&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(n.subarray(s,s+f),k)),512&r.flags&&(r.check=Y(r.check,n,f,s)),o-=f,s+=f,r.length-=f),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;f=0;do{k=n[s+f++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k))}while(k&&f>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=Lt;break;case 10:for(;d<32;){if(0===o)break e;o--,h+=n[s++]<>>=7&d,d-=7&d,r.mode=27;break}for(;d<3;){if(0===o)break e;o--,h+=n[s++]<>>=1,d-=1,3&h){case 0:r.mode=14;break;case 1:if(Vt(r),r.mode=20,t===Ct){h>>>=2,d-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg="invalid block type",r.mode=Ot}h>>>=2,d-=2;break;case 14:for(h>>>=7&d,d-=7&d;d<32;){if(0===o)break e;o--,h+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",r.mode=Ot;break}if(r.length=65535&h,h=0,d=0,r.mode=15,t===Ct)break e;case 15:r.mode=16;case 16:if(f=r.length,f){if(f>o&&(f=o),f>l&&(f=l),0===f)break e;i.set(n.subarray(s,s+f),a),o-=f,s+=f,l-=f,a+=f,r.length-=f;break}r.mode=Lt;break;case 17:for(;d<14;){if(0===o)break e;o--,h+=n[s++]<>>=5,d-=5,r.ndist=1+(31&h),h>>>=5,d-=5,r.ncode=4+(15&h),h>>>=4,d-=4,r.nlen>286||r.ndist>30){e.msg="too many length or distance symbols",r.mode=Ot;break}r.have=0,r.mode=18;case 18:for(;r.have>>=3,d-=3}for(;r.have<19;)r.lens[z[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,C={bits:r.lenbits},x=xt(0,r.lens,0,19,r.lencode,0,r.work,C),r.lenbits=C.bits,x){e.msg="invalid code lengths set",r.mode=Ot;break}r.have=0,r.mode=19;case 19:for(;r.have>>24,g=E>>>16&255,w=65535&E,!(_<=d);){if(0===o)break e;o--,h+=n[s++]<>>=_,d-=_,r.lens[r.have++]=w;else{if(16===w){for(A=_+2;d>>=_,d-=_,0===r.have){e.msg="invalid bit length repeat",r.mode=Ot;break}k=r.lens[r.have-1],f=3+(3&h),h>>>=2,d-=2}else if(17===w){for(A=_+3;d>>=_,d-=_,k=0,f=3+(7&h),h>>>=3,d-=3}else{for(A=_+7;d>>=_,d-=_,k=0,f=11+(127&h),h>>>=7,d-=7}if(r.have+f>r.nlen+r.ndist){e.msg="invalid bit length repeat",r.mode=Ot;break}for(;f--;)r.lens[r.have++]=k}}if(r.mode===Ot)break;if(0===r.lens[256]){e.msg="invalid code -- missing end-of-block",r.mode=Ot;break}if(r.lenbits=9,C={bits:r.lenbits},x=xt(1,r.lens,0,r.nlen,r.lencode,0,r.work,C),r.lenbits=C.bits,x){e.msg="invalid literal/lengths set",r.mode=Ot;break}if(r.distbits=6,r.distcode=r.distdyn,C={bits:r.distbits},x=xt(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,C),r.distbits=C.bits,x){e.msg="invalid distances set",r.mode=Ot;break}if(r.mode=20,t===Ct)break e;case 20:r.mode=21;case 21:if(o>=6&&l>=258){e.next_out=a,e.avail_out=l,e.next_in=s,e.avail_in=o,r.hold=h,r.bits=d,wt(e,c),a=e.next_out,i=e.output,l=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,h=r.hold,d=r.bits,r.mode===Lt&&(r.back=-1);break}for(r.back=0;E=r.lencode[h&(1<>>24,g=E>>>16&255,w=65535&E,!(_<=d);){if(0===o)break e;o--,h+=n[s++]<>b)],_=E>>>24,g=E>>>16&255,w=65535&E,!(b+_<=d);){if(0===o)break e;o--,h+=n[s++]<>>=b,d-=b,r.back+=b}if(h>>>=_,d-=_,r.back+=_,r.length=w,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=Lt;break}if(64&g){e.msg="invalid literal/length code",r.mode=Ot;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(A=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;E=r.distcode[h&(1<>>24,g=E>>>16&255,w=65535&E,!(_<=d);){if(0===o)break e;o--,h+=n[s++]<>b)],_=E>>>24,g=E>>>16&255,w=65535&E,!(b+_<=d);){if(0===o)break e;o--,h+=n[s++]<>>=b,d-=b,r.back+=b}if(h>>>=_,d-=_,r.back+=_,64&g){e.msg="invalid distance code",r.mode=Ot;break}r.offset=w,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(A=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg="invalid distance too far back",r.mode=Ot;break}r.mode=25;case 25:if(0===l)break e;if(f=c-l,r.offset>f){if(f=r.offset-f,f>r.whave&&r.sane){e.msg="invalid distance too far back",r.mode=Ot;break}f>r.wnext?(f-=r.wnext,p=r.wsize-f):p=r.wnext-f,f>r.length&&(f=r.length),m=r.window}else m=i,p=a-r.offset,f=r.length;f>l&&(f=l),l-=f,r.length-=f;do{i[a++]=m[p++]}while(--f);0===r.length&&(r.mode=21);break;case 26:if(0===l)break e;i[a++]=r.length,l--,r.mode=21;break;case 27:if(r.wrap){for(;d<32;){if(0===o)break e;o--,h|=n[s++]<{if(!e||!e.state)return Ut;let t=e.state;return t.window&&(t.window=null),e.state=null,At},Qt=(e,t)=>{if(!e||!e.state)return Ut;const r=e.state;return 0==(2&r.wrap)?Ut:(r.head=t,t.done=!1,At)},$t=(e,t)=>{const r=t.length;let n,i,s;return e&&e.state?(n=e.state,0!==n.wrap&&11!==n.mode?Ut:11===n.mode&&(i=1,i=G(i,t,r,0),i!==n.check)?It:(s=Gt(e,t,r,r),s?(n.mode=31,Tt):(n.havedict=1,At))):Ut},er=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const tr=Object.prototype.toString,{Z_NO_FLUSH:rr,Z_FINISH:nr,Z_OK:ir,Z_STREAM_END:sr,Z_NEED_DICT:ar,Z_STREAM_ERROR:or,Z_DATA_ERROR:lr,Z_MEM_ERROR:hr}=J;function dr(e){this.options=Je({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new it,this.strm.avail_out=0;let r=Yt(this.strm,t.windowBits);if(r!==ir)throw new Error(q[r]);if(this.header=new er,Qt(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=tt(t.dictionary):"[object ArrayBuffer]"===tr.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=$t(this.strm,t.dictionary),r!==ir)))throw new Error(q[r])}function ur(e,t){const r=new dr(t);if(r.push(e),r.err)throw r.msg||q[r.err];return r.result}dr.prototype.push=function(e,t){const r=this.strm,n=this.options.chunkSize,i=this.options.dictionary;let s,a,o;if(this.ended)return!1;for(a=t===~~t?t:!0===t?nr:rr,"[object ArrayBuffer]"===tr.call(e)?r.input=new Uint8Array(e):r.input=e,r.next_in=0,r.avail_in=r.input.length;;){for(0===r.avail_out&&(r.output=new Uint8Array(n),r.next_out=0,r.avail_out=n),s=qt(r,a),s===ar&&i&&(s=$t(r,i),s===ir?s=qt(r,a):s===lr&&(s=ar));r.avail_in>0&&s===sr&&r.state.wrap>0&&0!==e[r.next_in];)Xt(r),s=qt(r,a);switch(s){case or:case lr:case ar:case hr:return this.onEnd(s),this.ended=!0,!1}if(o=r.avail_out,r.next_out&&(0===r.avail_out||s===sr))if("string"===this.options.to){let e=nt(r.output,r.next_out),t=r.next_out-e,i=rt(r.output,e);r.next_out=t,r.avail_out=n-t,t&&r.output.set(r.output.subarray(e,e+t),0),this.onData(i)}else this.onData(r.output.length===r.next_out?r.output:r.output.subarray(0,r.next_out));if(s!==ir||0!==o){if(s===sr)return s=Jt(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===r.avail_in)break}}return!0},dr.prototype.onData=function(e){this.chunks.push(e)},dr.prototype.onEnd=function(e){e===ir&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Qe(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var cr={Inflate:dr,inflate:ur,inflateRaw:function(e,t){return(t=t||{}).raw=!0,ur(e,t)},ungzip:ur,constants:J};const{Deflate:fr,deflate:pr,deflateRaw:mr,gzip:_r}=gt,{Inflate:gr,inflate:wr,inflateRaw:br,ungzip:yr}=cr;var vr={Deflate:fr,deflate:pr,deflateRaw:mr,gzip:_r,Inflate:gr,inflate:wr,inflateRaw:br,ungzip:yr,constants:J};function kr(e,t,r,n){if(r){const r=new Uint8Array(e,t),i=new Uint8Array(n);let s=0,a=0;for(;a=2&&237==r[s]&&237==r[s+1]){const e=r[s+2],t=r[s+3];for(let r=0;r>8)+String.fromCharCode((16711680&r)>>16)+String.fromCharCode(r>>24)}class Er{constructor(e,t){this.pulseLength=e,this.pulseCount=t,this.pulsesGenerated=0}isFinished(){return this.pulsesGenerated==this.pulseCount}getNextPulseLength(){return this.pulsesGenerated++,this.pulseLength}}class Sr{constructor(e){this.pulses=e,this.index=0}isFinished(){return this.index==this.pulses.length}getNextPulseLength(){return this.pulses[this.index++]}}class Cr{constructor(e,t,r,n){this.data=e,this.zeroPulseLength=t,this.onePulseLength=r,this.bitCount=8*(this.data.length-1)+n,this.pulsesOutput=0,this.lastPulseLength=null}isFinished(){return this.pulsesOutput==2*this.bitCount}getNextPulseLength(){if(1&this.pulsesOutput)return this.pulsesOutput++,this.lastPulseLength;{const e=this.pulsesOutput>>1,t=e>>3,r=1<<7-(7&e);return this.lastPulseLength=this.data[t]&r?this.onePulseLength:this.zeroPulseLength,this.pulsesOutput++,this.lastPulseLength}}}class Ar{constructor(e){this.duration=e,this.emitted=!1}isFinished(){return this.emitted}getNextPulseLength(){return this.emitted=!0,3500*this.duration}}class zr{constructor(e){this.segments=[],this.getSegments=e,this.level=0,this.tapeIsFinished=!1,this.pendingCycles=0}addSegment(e){this.segments.push(e)}emitPulses(e,t,r){let n=0,i=t,s=!1;for(;n0)this.pendingCycles>=32768?(e[i++]=32767|this.level,n+=32767,this.pendingCycles-=32767):(e[i++]=this.level|this.pendingCycles,n+=this.pendingCycles,this.pendingCycles=0);else if(0===this.segments.length){if(this.tapeIsFinished){s=!0;break}this.tapeIsFinished=!this.getSegments(this)}else this.segments[0].isFinished()?this.segments.shift():(this.pendingCycles=this.segments[0].getNextPulseLength(),this.level^=32768);return[i,n,s]}}const Br={ONE:{row:3,mask:1},TWO:{row:3,mask:2},THREE:{row:3,mask:4},FOUR:{row:3,mask:8},FIVE:{row:3,mask:16},SIX:{row:4,mask:16},SEVEN:{row:4,mask:8},EIGHT:{row:4,mask:4},NINE:{row:4,mask:2},ZERO:{row:4,mask:1},Q:{row:2,mask:1},W:{row:2,mask:2},E:{row:2,mask:4},R:{row:2,mask:8},T:{row:2,mask:16},Y:{row:5,mask:16},U:{row:5,mask:8},I:{row:5,mask:4},O:{row:5,mask:2},P:{row:5,mask:1},A:{row:1,mask:1},S:{row:1,mask:2},D:{row:1,mask:4},F:{row:1,mask:8},G:{row:1,mask:16},H:{row:6,mask:16},J:{row:6,mask:8},K:{row:6,mask:4},L:{row:6,mask:2},ENTER:{row:6,mask:1},CAPS_SHIFT:{row:0,mask:1,isCaps:!0},Z:{row:0,mask:2},X:{row:0,mask:4},C:{row:0,mask:8},V:{row:0,mask:16},B:{row:7,mask:16},N:{row:7,mask:8},M:{row:7,mask:4},SYMBOL_SHIFT:{row:7,mask:2,isSymbol:!0},BREAK_SPACE:{row:7,mask:1}};function Ur(e){return{...e,sym:!0}}function Ir(e){return{...e,caps:!0}}const Tr={49:Br.ONE,50:Br.TWO,51:Br.THREE,52:Br.FOUR,53:Br.FIVE,54:Br.SIX,55:Br.SEVEN,56:Br.EIGHT,57:Br.NINE,48:Br.ZERO,81:Br.Q,87:Br.W,69:Br.E,82:Br.R,84:Br.T,89:Br.Y,85:Br.U,73:Br.I,79:Br.O,80:Br.P,65:Br.A,83:Br.S,68:Br.D,70:Br.F,71:Br.G,72:Br.H,74:Br.J,75:Br.K,76:Br.L,13:Br.ENTER,16:Br.CAPS_SHIFT,192:Br.CAPS_SHIFT,90:Br.Z,88:Br.X,67:Br.C,86:Br.V,66:Br.B,78:Br.N,77:Br.M,17:Br.SYMBOL_SHIFT,32:Br.BREAK_SPACE,8:Ir(Br.ZERO),37:Ir(Br.FIVE),38:Ir(Br.SEVEN),39:Ir(Br.EIGHT),40:Ir(Br.SIX),"-":Ur(Br.J),_:Ur(Br.ZERO),"=":Ur(Br.L),"+":Ur(Br.K),";":Ur(Br.O),":":Ur(Br.Z),"'":Ur(Br.SEVEN),'"':Ur(Br.P),",":Ur(Br.N),"<":Ur(Br.R),".":Ur(Br.M),">":Ur(Br.T),"/":Ur(Br.V),"?":Ur(Br.C),"*":Ur(Br.B),"@":Ur(Br.TWO),"#":Ur(Br.THREE)};Tr[String.fromCharCode(8804)]=Ur(Br.Q),Tr[String.fromCharCode(8805)]=Ur(Br.E),Tr[String.fromCharCode(8800)]=Ur(Br.W);class Fr{constructor(e,t){this.worker=e,this.rootElement=t,this.eventsAreBound=!1,this.keypressHandler=e=>{e.metaKey||e.preventDefault()}}start(){this.rootElement.addEventListener("keydown",this.keydownHandler),this.rootElement.addEventListener("keyup",this.keyupHandler),this.rootElement.addEventListener("keypress",this.keypressHandler),this.eventsAreBound=!0}stop(){this.rootElement.removeEventListener("keydown",this.keydownHandler),this.rootElement.removeEventListener("keyup",this.keyupHandler),this.rootElement.removeEventListener("keypress",this.keypressHandler),this.eventsAreBound=!1}setRootElement(e){this.eventsAreBound?(this.stop(),this.rootElement=e,this.start()):this.rootElement=e}}class Rr extends Fr{constructor(e,t){super(e,t),this.symbolIsShifted=!1,this.capsIsShifted=!1,this.seenKeyCodes={},this.keydownHandler=e=>{let t=Tr[e.keyCode];if(t)this.keyDown(t);else if(t=Tr[e.key],t){const r=this.seenKeyCodes[e.keyCode];r&&r!==t&&this.keyUp(r),this.seenKeyCodes[e.keyCode]=t,this.keyDown(t)}e.metaKey||e.preventDefault()},this.keyupHandler=e=>{const t=Tr[e.keyCode];if(t)this.keyUp(t);else{const t=this.seenKeyCodes[e.keyCode];t&&(this.seenKeyCodes[e.keyCode]=null,this.keyUp(t))}e.metaKey||e.preventDefault()}}sendKeyMessage(e,t){this.worker.postMessage({message:t?"keyDown":"keyUp",row:e.row,mask:e.mask})}keyDown(e){this.sendKeyMessage(e,!0),"caps"in e||"sym"in e?(this.sendKeyMessage(Br.CAPS_SHIFT,"caps"in e),this.sendKeyMessage(Br.SYMBOL_SHIFT,"sym"in e)):e.isCaps?this.capsIsShifted=!0:e.isSymbol&&(this.symbolIsShifted=!0)}keyUp(e){this.sendKeyMessage(e,!1),"caps"in e||"sym"in e?(this.sendKeyMessage(Br.CAPS_SHIFT,this.capsIsShifted),this.sendKeyMessage(Br.SYMBOL_SHIFT,this.symbolIsShifted)):e.isCaps?this.capsIsShifted=!1:e.isSymbol&&(this.symbolIsShifted=!1)}}const Lr={ab:Br.ONE,cd:Br.TWO,ef:Br.THREE,gh:Br.FOUR,ij:Br.FIVE,kl:Br.SIX,mn:Br.SEVEN,op:Br.EIGHT,qr:Br.NINE,st:Br.ZERO,uv:Br.Q,wx:Br.W,yz:Br.E,AB:Br.R,CD:Br.T,EF:Br.Y,GH:Br.U,IJ:Br.I,KL:Br.O,MN:Br.P,OP:Br.A,QR:Br.S,ST:Br.D,UV:Br.F,WX:Br.G,YZ:Br.H,"01":Br.J,23:Br.K,45:Br.L,67:Br.ENTER,89:Br.CAPS_SHIFT,"<>":Br.Z,"-=":Br.X,"[]":Br.C,";:":Br.V,",.":Br.B,"/?":Br.N,"{}":Br.M,"!$":Br.SYMBOL_SHIFT,"%^":Br.BREAK_SPACE};let Or={};for(const[e,t]of Object.entries(Lr))Or[e.charAt(0)]={...t,message:"keyDown"},Or[e.charAt(1)]={...t,message:"keyUp"};class Pr extends Fr{constructor(e,t){super(e,t),this.keydownHandler=e=>{const t=Or[e.key];t&&this.worker.postMessage({message:t.message,row:t.row,mask:t.mask}),e.metaKey||e.preventDefault()},this.keyupHandler=e=>{e.metaKey||e.preventDefault()}}}const Dr=65536;class Nr{constructor(){this.isActive=!1}start(){const e=window.AudioContext||window.webkitAudioContext;this.audioContext=new e({latencyHint:"interactive"}),this.samplesPerFrame=this.audioContext.sampleRate/50,this.frameBuffers=[new ArrayBuffer(4*this.samplesPerFrame),new ArrayBuffer(4*this.samplesPerFrame)],this.leftBuffer=new Float32Array(Dr),this.rightBuffer=new Float32Array(Dr),this.readPtr=0,this.writePtr=0,this.scriptNode=this.audioContext.createScriptProcessor(0,0,2),this.scriptNode.onaudioprocess=e=>{const t=e.outputBuffer,r=t.getChannelData(0),n=t.getChannelData(1);let i=this.writePtr-this.readPtr;if(i<0&&(i+=Dr),i>=r.length)if(this.readPtr+r.length<=Dr)r.set(this.leftBuffer.slice(this.readPtr,this.readPtr+r.length)),n.set(this.rightBuffer.slice(this.readPtr,this.readPtr+n.length)),this.readPtr=(this.readPtr+r.length)%Dr;else{const e=Dr-this.readPtr,t=r.length-e;r.set(this.leftBuffer.slice(this.readPtr,this.readPtr+e)),n.set(this.rightBuffer.slice(this.readPtr,this.readPtr+e)),r.set(this.leftBuffer.slice(0,t),e),n.set(this.rightBuffer.slice(0,t),e),this.readPtr=t}},this.scriptNode.connect(this.audioContext.destination),this.isActive=!0}stop(){this.scriptNode.disconnect(this.audioContext.destination),this.audioContext.close()}frameCompleted(e,t){if(this.frameBuffers[0]=e,this.frameBuffers[1]=t,!this.isActive)return;const r=e.byteLength/4;if(this.writePtr+r<=Dr){const n=new Float32Array(e),i=new Float32Array(t);this.leftBuffer.set(n,this.writePtr),this.rightBuffer.set(i,this.writePtr),this.writePtr=(this.writePtr+r)%Dr}else{const n=Dr-this.writePtr,i=r-n,s=new Float32Array(e,0,n),a=new Float32Array(t,0,n);this.leftBuffer.set(s,this.writePtr),this.rightBuffer.set(a,this.writePtr);const o=new Float32Array(e,4*n,i),l=new Float32Array(t,4*n,i);this.leftBuffer.set(o,0),this.rightBuffer.set(l,0),this.writePtr=i}}drawOscilloscope(e,t){this.canvasCtx.fillStyle="#000",this.canvasCtx.strokeStyle="#0f0",this.canvasCtx.fillRect(0,0,this.samplesPerFrame,64);const r=new Float32Array(e);this.canvasCtx.beginPath(),this.canvasCtx.moveTo(0,16);for(let e=0;e{switch(e.data.message){case"ready":this.loadRoms().then((()=>{this.setMachine(t.machine||128),this.setTapeTraps(this.tapeTrapsEnabled),t.openUrl?this.openUrlList(t.openUrl).catch((e=>{alert(e)})).then((()=>{t.autoStart&&this.start()})):t.autoStart&&this.start(),this.isReady=!0;for(let e=0;ethis.nextFrameTime?(this.runFrame(),this.nextFrameTime=e+this.msPerFrame):this.isExecutingFrame=!1}else this.isExecutingFrame=!1;break;case"fileOpened":if("tape"==e.data.mediaType&&this.autoLoadTapes){const e={48:{default:"tapeloaders/tape_48.szx",usr0:"tapeloaders/tape_48.szx"},128:{default:"tapeloaders/tape_128.szx",usr0:"tapeloaders/tape_128_usr0.szx"},5:{default:"tapeloaders/tape_pentagon.szx",usr0:"tapeloaders/tape_pentagon_usr0.szx"}};this.openUrl(new URL(e[this.machineType][this.tapeAutoLoadMode],Gr)),this.tapeTrapsEnabled||this.playTape()}this.fileOpenPromiseResolutions[e.data.id]({mediaType:e.data.mediaType}),"tape"==e.data.mediaType&&this.emit("openedTapeFile");break;case"playingTape":this.tapeIsPlaying=!0,this.emit("playingTape");break;case"stoppedTape":this.tapeIsPlaying=!1,this.emit("stoppedTape");break;default:console.log("message received by host:",e.data)}},this.worker.postMessage({message:"loadCore",baseUrl:Gr})}start(){this.isRunning||(this.isRunning=!0,this.isInitiallyPaused=!1,this.nextFrameTime=performance.now(),this.keyboardEnabled&&this.keyboardHandler.start(),this.audioHandler.start(),this.focus(),this.emit("start"),window.requestAnimationFrame((e=>{this.runAnimationFrame(e)})))}focus(){this.keyboardEnabled&&this.keyboardHandler.rootElement.focus&&this.keyboardHandler.rootElement.focus()}setKeyboardEventRoot(e){this.keyboardEnabled&&this.keyboardHandler.setRootElement(e)}pause(){this.isRunning&&(this.isRunning=!1,this.keyboardEnabled&&this.keyboardHandler.stop(),this.audioHandler.stop(),this.emit("pause"))}async loadRom(e,t){const r=await fetch(new URL(e,Gr)),n=new Uint8Array(await r.arrayBuffer());this.worker.postMessage({message:"loadMemory",data:n,page:t})}async loadRoms(){await this.loadRom("roms/128-0.rom",8),await this.loadRom("roms/128-1.rom",9),await this.loadRom("roms/48.rom",10),await this.loadRom("roms/pentagon-0.rom",12),await this.loadRom("roms/trdos.rom",13)}runFrame(){this.isExecutingFrame=!0;const e=this.displayHandler.getNextFrameBuffer();if(this.audioHandler.isActive){const[t,r]=this.audioHandler.frameBuffers;this.worker.postMessage({message:"runFrame",frameBuffer:e,audioBufferLeft:t,audioBufferRight:r},[e,t,r])}else this.worker.postMessage({message:"runFrame",frameBuffer:e},[e])}runAnimationFrame(e){this.displayHandler.readyToShow()&&this.displayHandler.show(),this.isRunning&&(e>this.nextFrameTime&&!this.isExecutingFrame&&(this.runFrame(),this.nextFrameTime+=this.msPerFrame),window.requestAnimationFrame((e=>{this.runAnimationFrame(e)})))}setMachine(e){128!=e&&5!=e&&(e=48),this.worker.postMessage({message:"setMachineType",type:e}),this.machineType=e,this.emit("setMachine",e)}reset(){this.worker.postMessage({message:"reset"})}loadSnapshot(e){const t=this.nextFileOpenID++;return this.worker.postMessage({message:"loadSnapshot",id:t,snapshot:e}),this.emit("setMachine",e.model),new Promise(((e,r)=>{this.fileOpenPromiseResolutions[t]=e}))}openTAPFile(e){const t=this.nextFileOpenID++;return this.worker.postMessage({message:"openTAPFile",id:t,data:e}),new Promise(((e,r)=>{this.fileOpenPromiseResolutions[t]=e}))}openTZXFile(e){const t=this.nextFileOpenID++;return this.worker.postMessage({message:"openTZXFile",id:t,data:e}),new Promise(((e,r)=>{this.fileOpenPromiseResolutions[t]=e}))}getFileOpener(e){const t=e.toLowerCase();return t.endsWith(".z80")?e=>{const t=function(e){const t=new DataView(e),r=t.getUint8(10),n=t.getUint8(12),i=127&t.getUint8(11)|(1&n)<<7,s=t.getUint8(29),a={registers:{AF:t.getUint16(0,!1),BC:t.getUint16(2,!0),HL:t.getUint16(4,!0),PC:t.getUint16(6,!0),SP:t.getUint16(8,!0),IR:r<<8|i,DE:t.getUint16(13,!0),BC_:t.getUint16(15,!0),DE_:t.getUint16(17,!0),HL_:t.getUint16(19,!0),AF_:t.getUint16(21,!1),IY:t.getUint16(23,!0),IX:t.getUint16(25,!0),iff1:!!t.getUint8(27),iff2:!!t.getUint8(28),im:3&s},ulaState:{borderColour:(14&n)>>1},memoryPages:{}};if(0!==a.registers.PC){a.model=48;const t=kr(e,30,32&n,49152);a.memoryPages[5]=new Uint8Array(t.buffer,0,16384),a.memoryPages[2]=new Uint8Array(t.buffer,16384,16384),a.memoryPages[0]=new Uint8Array(t.buffer,32768,16384),a.tstates=0}else{const r=t.getUint16(30,!0),n=23==r;a.registers.PC=t.getUint16(32,!0);const i=t.getUint8(34),s=n?i<3:i<4;a.model=s?48:128,s||(a.ulaState.pagingFlags=t.getUint8(35));const o=(s?69888:70908)/4;a.tstates=((t.getUint8(57)+1)%4+1)*o-(t.getUint16(55,!0)+1),a.tstates>=4*o&&(a.tstates=0);let l,h=32+r;for(l=s?{4:2,5:0,8:5}:{3:0,4:1,5:2,6:3,7:4,8:5,9:6,10:7};h{const t=function(e){const t=new DataView(e),r=e.byteLength,n={memoryPages:{}};if("ZXST"!=xr(t,0))throw"Not a valid SZX file";const i=t.getUint8(6);switch(i){case 1:n.model=48;break;case 2:case 3:n.model=128;break;case 7:n.model=5;break;default:throw"Unsupported machine type: "+i}let s=8;for(;s{const t=function(e){let t=!1,r=null;const n=e.byteLength;let i;switch(n){case 131103:case 147487:t=!0;case 49179:if(i=new DataView(e,0,t?49182:n),r={model:t?128:48,registers:{},ulaState:{},memoryPages:{5:new Uint8Array(e,27,16384),2:new Uint8Array(e,16411,16384)},tstates:0},t){const t=7&i.getUint8(49181);r.memoryPages[t]=new Uint8Array(e,32795,16384);for(let t=0,n=49183;t<8;t++)void 0===r.memoryPages[t]&&(r.memoryPages[t]=new Uint8Array(e,n,16384),n+=16384)}else r.memoryPages[0]=new Uint8Array(e,32795,16384);if(r.registers.IR=i.getUint8(0)<<8|i.getUint8(20),r.registers.HL_=i.getUint16(1,!0),r.registers.DE_=i.getUint16(3,!0),r.registers.BC_=i.getUint16(5,!0),r.registers.AF_=i.getUint16(7,!0),r.registers.HL=i.getUint16(9,!0),r.registers.DE=i.getUint16(11,!0),r.registers.BC=i.getUint16(13,!0),r.registers.IY=i.getUint16(15,!0),r.registers.IX=i.getUint16(17,!0),r.registers.iff1=r.registers.iff2=(4&i.getUint8(19))>>2,r.registers.AF=i.getUint16(21,!0),t)r.registers.SP=i.getUint16(23,!0),r.registers.PC=i.getUint16(49179,!0),r.ulaState.pagingFlags=i.getUint8(49181);else{let e=i.getUint16(23,!0);const t=i.getUint8(e-16384+27);e=e+1&65535;const n=i.getUint8(e-16384+27);e=e+1&65535,r.registers.PC=n<<8|t,r.registers.SP=e}r.registers.im=i.getUint8(25),r.ulaState.borderColour=i.getUint8(26);break;default:throw"Cannot handle SNA snapshots of length "+n}return r}(e);return this.loadSnapshot(t)}:t.endsWith(".tap")?e=>{if(class{constructor(e){let t=0;this.blocks=[];for(var r=new DataView(e);t+1{if(0===this.blocks.length)return!1;const t=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,128&t[0]?e.addSegment(new Er(2168,3223)):e.addSegment(new Er(2168,8063)),e.addSegment(new Sr([667,735])),e.addSegment(new Cr(t,855,1710,8)),e.addSegment(new Ar(1e3)),0!=this.nextBlockIndex}))}getNextLoadableBlock(){if(0===this.blocks.length)return null;const e=this.blocks[this.nextBlockIndex];return this.nextBlockIndex=(this.nextBlockIndex+1)%this.blocks.length,e}static isValid(e){let t=0;const r=new DataView(e);for(;t=e.byteLength)return!1;t+=r.getUint16(t,!0)+2}return t==e.byteLength}}.isValid(e))return this.openTAPFile(e);alert("Invalid TAP file")}:t.endsWith(".tzx")?e=>{if(class{static isValid(e){const t=new DataView(e),r="ZXTape!";for(let e=0;e{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=new Uint8Array(e,r,i);this.blocks.push({type:"StandardSpeedData",pause:n,data:s,generatePulses:e=>{128&s[0]?e.addSegment(new Er(2168,3223)):e.addSegment(new Er(2168,8063)),e.addSegment(new Sr([667,735])),e.addSegment(new Cr(s,855,1710,8)),n&&e.addSegment(new Ar(n))}}),r+=i})();break;case 17:(()=>{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=t.getUint16(r,!0);r+=2;const a=t.getUint16(r,!0);r+=2;const o=t.getUint16(r,!0);r+=2;const l=t.getUint16(r,!0);r+=2;const h=t.getUint8(r);r+=1;const d=t.getUint16(r,!0);r+=2;const u=t.getUint16(r,!0)|t.getUint8(r+2)<<16;r+=3;const c=new Uint8Array(e,r,u);this.blocks.push({type:"TurboSpeedData",pilotPulseLength:n,syncPulse1Length:i,syncPulse2Length:s,zeroBitLength:a,oneBitLength:o,pilotPulseCount:l,lastByteMask:h,pause:d,data:c,generatePulses:e=>{e.addSegment(new Er(n,l)),e.addSegment(new Sr([i,s])),e.addSegment(new Cr(c,a,o,h)),d&&e.addSegment(new Ar(d))}}),r+=u})();break;case 18:(()=>{const e=t.getUint16(r,!0);r+=2;const n=t.getUint16(r,!0);r+=2,this.blocks.push({type:"PureTone",pulseLength:e,pulseCount:n,generatePulses:t=>{t.addSegment(new Er(e,n))}})})();break;case 19:(()=>{const e=t.getUint8(r);r+=1;const n=[];for(let i=0;i{e.addSegment(new Sr(n))}}),r+=2*e})();break;case 20:(()=>{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=t.getUint8(r);r+=1;const a=t.getUint16(r,!0);r+=2;const o=t.getUint16(r,!0)|t.getUint8(r+2)<<16;r+=3;const l=new Uint8Array(e,r,o);this.blocks.push({type:"PureData",zeroBitLength:n,oneBitLength:i,lastByteMask:s,pause:a,data:l,generatePulses:e=>{e.addSegment(new Cr(l,n,i,s)),a&&e.addSegment(new Ar(a))}}),r+=o})();break;case 21:(()=>{const n=t.getUint16(r,!0);r+=2;const i=t.getUint16(r,!0);r+=2;const s=t.getUint8(r);r+=1;const a=t.getUint16(r,!0)|t.getUint8(r+2)<<16;r+=3,this.blocks.push({type:"DirectRecording",tstatesPerSample:n,lastByteMask:s,pause:i,data:new Uint8Array(e,r,a)}),r+=a})();break;case 32:(()=>{const e=t.getUint16(r,!0);r+=2,this.blocks.push({type:"Pause",pause:e,generatePulses:t=>{t.addSegment(new Ar(e))}})})();break;case 33:(()=>{const n=t.getUint8(r);r+=1;const i=new Uint8Array(e,r,n);r+=n;const s=String.fromCharCode.apply(null,i);this.blocks.push({type:"GroupStart",name:s})})();break;case 34:(()=>{this.blocks.push({type:"GroupEnd"})})();break;case 35:(()=>{const e=t.getUint16(r,!0);r+=2,this.blocks.push({type:"JumpToBlock",offset:e})})();break;case 36:(()=>{const e=t.getUint16(r,!0);r+=2,this.blocks.push({type:"LoopStart",repeatCount:e})})();break;case 37:(()=>{this.blocks.push({type:"LoopEnd"})})();break;case 38:(()=>{const e=t.getUint16(r,!0);r+=2;const n=[];for(let i=0;i{this.blocks.push({type:"ReturnFromSequence"})})();break;case 40:(()=>{const n=t.getUint16(r,!0);r+=2,this.blocks.push({type:"Select",data:new Uint8Array(e,r,n)}),r+=n})();break;case 48:(()=>{const n=t.getUint8(r);r+=1;const i=new Uint8Array(e,r,n);r+=n;const s=String.fromCharCode.apply(null,i);this.blocks.push({type:"TextDescription",text:s})})();break;case 49:(()=>{const n=t.getUint8(r);r+=1;const i=t.getUint8(r);r+=1;const s=new Uint8Array(e,r,i);r+=i;const a=String.fromCharCode.apply(null,s);this.blocks.push({type:"MessageBlock",displayTime:n,text:a})})();break;case 50:(()=>{const n=t.getUint16(r,!0);r+=2,this.blocks.push({type:"ArchiveInfo",data:new Uint8Array(e,r,n)}),r+=n})();break;case 51:(()=>{const n=3*t.getUint8(r);r+=1,this.blocks.push({type:"HardwareType",data:new Uint8Array(e,r,n)}),r+=n})();break;case 53:(()=>{const n=new Uint8Array(e,r,10);r+=10;const i=String.fromCharCode.apply(null,n),s=t.getUint32(r,!0);this.blocks.push({type:"CustomInfo",identifier:i,data:new Uint8Array(e,r,s)}),r+=s})();break;case 90:(()=>{r+=9,this.blocks.push({type:"Glue"})})();break;default:(()=>{const n=t.getUint32(r,!0);r+=4,this.blocks.push({type:"unknown",data:new Uint8Array(e,r,n)}),r+=n})()}}this.nextBlockIndex=0,this.loopToBlockIndex,this.repeatCount,this.callStack=[],this.pulseGenerator=new zr((e=>{const t=this.getNextMeaningfulBlock(!1);return!!t&&(t.generatePulses(e),!0)}))}getNextMeaningfulBlock(e){let t=0===this.nextBlockIndex;for(;;){if(this.nextBlockIndex>=this.blocks.length){if(t||!e)return null;this.nextBlockIndex=0,t=!0}var r=this.blocks[this.nextBlockIndex];switch(r.type){case"StandardSpeedData":case"TurboSpeedData":case"PureTone":case"PulseSequence":case"PureData":case"DirectRecording":case"Pause":return this.nextBlockIndex++,r;case"JumpToBlock":this.nextBlockIndex+=r.offset;break;case"LoopStart":this.loopToBlockIndex=this.nextBlockIndex+1,this.repeatCount=r.repeatCount,this.nextBlockIndex++;break;case"LoopEnd":this.repeatCount--,this.repeatCount>0?this.nextBlockIndex=this.loopToBlockIndex:this.nextBlockIndex++;break;case"CallSequence":this.callStack.unshift(this.nextBlockIndex+1);for(var n=r.offsets.length-1;n>=0;n--)this.callStack.unshift(this.nextBlockIndex+r.offsets[n]);this.nextBlockIndex=this.callStack.shift();break;case"ReturnFromSequence":this.nextBlockIndex=this.callStack.shift();break;default:this.nextBlockIndex++}}}getNextLoadableBlock(){for(;;){var e=this.getNextMeaningfulBlock(!0);if(!e)return null;if("StandardSpeedData"==e.type||"TurboSpeedData"==e.type)return e.data}}}.isValid(e))return this.openTZXFile(e);alert("Invalid TZX file")}:t.endsWith(".zip")?async t=>{const r=await n.loadAsync(t),i=[];if(r.forEach(((e,t)=>{if(e.startsWith("__MACOSX/"))return;const r=this.getFileOpener(e);if(r){const e=async()=>{const e=await t.async("arraybuffer");return r(e)};i.push(e)}})),1==i.length)return i[0]();throw 0==i.length?"No loadable files found inside ZIP file: "+e:"Multiple loadable files found inside ZIP file: "+e}:void 0}async openFile(e){const t=this.getFileOpener(e.name);if(t)return t(await e.arrayBuffer()).catch((e=>{alert(e)}));throw"Unrecognised file type: "+e.name}async openUrl(e){const t=this.getFileOpener(e.toString());if(t){const r=await fetch(e);return t(await r.arrayBuffer())}throw"Unrecognised file type: "+e.split("/").pop()}async openUrlList(e){if("string"==typeof e)return await this.openUrl(e);for(const t of e)await this.openUrl(t)}setAutoLoadTapes(e){this.autoLoadTapes=e,this.emit("setAutoLoadTapes",e)}setTapeTraps(e){this.tapeTrapsEnabled=e,this.worker.postMessage({message:"setTapeTraps",value:e}),this.emit("setTapeTraps",e)}playTape(){this.worker.postMessage({message:"playTape"})}stopTape(){this.worker.postMessage({message:"stopTape"})}exit(){this.pause(),this.worker.terminate()}}window.JSSpeccy=(e,r)=>{r=r||{};const n=document.createElement("canvas");n.width=320,n.height=240;const i=!("keyboardEnabled"in r)||r.keyboardEnabled,s=!("uiEnabled"in r)||r.uiEnabled,a=new Xr(n,{machine:r.machine||128,autoStart:r.autoStart||!1,autoLoadTapes:r.autoLoadTapes||!1,tapeAutoLoadMode:r.tapeAutoLoadMode||"default",openUrl:r.openUrl,tapeTrapsEnabled:!("tapeTrapsEnabled"in r)||r.tapeTrapsEnabled,keyboardEnabled:i,keyboardMap:r.keyboardMap||"standard"}),l=new f(e,a,{zoom:r.zoom||1,sandbox:r.sandbox,uiEnabled:s});if(i&&(-1==l.appContainer.tabIndex&&(l.appContainer.tabIndex=0),a.setKeyboardEventRoot(l.appContainer)),s){const e=l.menuBar.addMenu("File");if(!r.sandbox){e.addItem("Open...",(()=>{h()})),e.addItem("Find games...",(()=>{d()}));const t=e.addItem("Auto-load tapes",(()=>{a.setAutoLoadTapes(!a.autoLoadTapes),a.focus()})),r=()=>{a.autoLoadTapes?t.setCheckbox():t.unsetCheckbox()};a.on("setAutoLoadTapes",r),r()}const t=e.addItem("Instant tape loading",(()=>{a.setTapeTraps(!a.tapeTrapsEnabled),a.focus()})),n=()=>{a.tapeTrapsEnabled?t.setCheckbox():t.unsetCheckbox()};a.on("setTapeTraps",n),n();const i=l.menuBar.addMenu("Machine"),s=i.addItem("Spectrum 48K",(()=>{a.setMachine(48),a.focus()})),u=i.addItem("Spectrum 128K",(()=>{a.setMachine(128),a.focus()})),c=i.addItem("Pentagon 128",(()=>{a.setMachine(5),a.focus()})),f=l.menuBar.addMenu("Display"),p={1:f.addItem("100%",(()=>{l.setZoom(1),a.focus()})),2:f.addItem("200%",(()=>{l.setZoom(2),a.focus()})),3:f.addItem("300%",(()=>{l.setZoom(3),a.focus()}))},m=f.addItem("Fullscreen",(()=>{l.enterFullscreen()})),_=e=>{if("fullscreen"==e){m.setBullet();for(let e in p)p[e].unsetBullet()}else{m.unsetBullet();for(let t in p)parseInt(t)==e?p[t].setBullet():p[t].unsetBullet()}};l.on("setZoom",_),_(l.zoom),a.on("setMachine",(e=>{48==e?(s.setBullet(),u.unsetBullet(),c.unsetBullet()):128==e?(s.unsetBullet(),u.setBullet(),c.unsetBullet()):(s.unsetBullet(),u.unsetBullet(),c.setBullet())})),r.sandbox||l.toolbar.addButton(Mr,{label:"Open file"},(()=>{h()})),l.toolbar.addButton(Zr,{label:"Reset"},(()=>{a.reset()}));const g=l.toolbar.addButton(o,{label:"Unpause"},(()=>{a.isRunning?a.pause():a.start()}));a.on("pause",(()=>{g.setIcon(o),g.setLabel("Unpause")})),a.on("start",(()=>{g.setIcon(Hr),g.setLabel("Pause")}));const w=l.toolbar.addButton(Kr,{label:"Start tape"},(()=>{a.tapeIsPlaying?a.stopTape():a.playTape()}));w.disable(),a.on("openedTapeFile",(()=>{w.enable()})),a.on("playingTape",(()=>{w.setIcon(Vr),w.setLabel("Stop tape")})),a.on("stoppedTape",(()=>{w.setIcon(Kr),w.setLabel("Start tape")}));const b=l.toolbar.addButton(jr,{label:"Enter full screen mode",align:"right"},(()=>{l.toggleFullscreen()}));l.on("setZoom",(e=>{"fullscreen"==e?(b.setIcon(Wr),b.setLabel("Exit full screen mode")):(b.setIcon(jr),b.setLabel("Enter full screen mode"))}))}const h=()=>{t().then((e=>{const t=e[0];a.openFile(t).then((()=>{a.isInitiallyPaused&&a.start(),a.focus()})).catch((e=>{alert(e)}))}))},d=()=>{a.pause();const e=l.showDialog();e.innerHTML='\n \n
\n \n \n
\n
\n
\n ';const t=e.querySelector("input"),r=e.querySelector("button"),n=e.querySelector("form"),i=e.querySelector(".results");n.addEventListener("submit",(e=>{e.preventDefault(),r.innerText="Searching...";const n=(e,t)=>encodeURIComponent(e)+"="+encodeURIComponent(t),s="https://archive.org/advancedsearch.php?"+n("q",'collection:softwarelibrary_zx_spectrum title:"'+t.value.replace(/[^\w\s\-\']/,"")+'"')+"&"+n("fl[]","creator")+"&"+n("fl[]","identifier")+"&"+n("fl[]","title")+"&"+n("rows","50")+"&"+n("page","1")+"&"+n("output","json");fetch(s).then((e=>(r.innerText="Search",e.json()))).then((e=>{i.innerHTML='

    - powered by Internet Archive

    ';const t=i.querySelector("ul");e.response.docs.forEach((e=>{const r=document.createElement("li");t.appendChild(r);const n=document.createElement("a");n.href="#",n.innerText=e.title;const i=document.createTextNode(" - "+e.creator);r.appendChild(n),r.appendChild(i),n.addEventListener("click",(t=>{t.preventDefault(),fetch("https://archive.org/metadata/"+e.identifier).then((e=>e.json())).then((t=>{let r=null;if(t.files.forEach((e=>{const t=e.name.split(".").pop().toLowerCase();"z80"!=t&&"sna"!=t&&"tap"!=t&&"tzx"!=t&&"szx"!=t||(r=e.name)})),r){const t="https://cors.archive.org/cors/"+e.identifier+"/"+r;a.openUrl(t).catch((e=>{alert(e)})).then((()=>{l.hideDialog(),a.focus(),a.start()}))}else alert("No loadable file found")}))}))}))}))})),t.focus()};return{setZoom:e=>{l.setZoom(e)},toggleFullscreen:()=>{l.toggleFullscreen()},enterFullscreen:()=>{l.enterFullscreen()},exitFullscreen:()=>{l.exitFullscreen()},setMachine:e=>{a.setMachine(e)},openFileDialog:()=>{h()},openUrl:e=>{a.openUrl(e).catch((e=>{alert(e)}))},loadSnapshotFromStruct:e=>{a.loadSnapshot(e)},onReady:e=>{a.isReady?e():a.onReadyHandlers.push(e)},exit:()=>{a.exit(),l.unload()}}}})()})(); \ No newline at end of file diff --git a/site/jsspeccy/jsspeccy.js.LICENSE.txt b/site/jsspeccy/jsspeccy.js.LICENSE.txt deleted file mode 100644 index 995b8bc..0000000 --- a/site/jsspeccy/jsspeccy.js.LICENSE.txt +++ /dev/null @@ -1,11 +0,0 @@ -/*! - -JSZip v3.7.1 - A JavaScript class for generating and reading zip files - - -(c) 2009-2016 Stuart Knightley -Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. - -JSZip uses the library pako released under the MIT license : -https://github.com/nodeca/pako/blob/master/LICENSE -*/ diff --git a/site/jsspeccy/roms/128-0.rom b/site/jsspeccy/roms/128-0.rom deleted file mode 100755 index c4a04e8..0000000 Binary files a/site/jsspeccy/roms/128-0.rom and /dev/null differ diff --git a/site/jsspeccy/roms/128-1.rom b/site/jsspeccy/roms/128-1.rom deleted file mode 100755 index 64c3e73..0000000 Binary files a/site/jsspeccy/roms/128-1.rom and /dev/null differ diff --git a/site/jsspeccy/roms/48.rom b/site/jsspeccy/roms/48.rom deleted file mode 100755 index 4d6895e..0000000 Binary files a/site/jsspeccy/roms/48.rom and /dev/null differ diff --git a/site/jsspeccy/roms/pentagon-0.rom b/site/jsspeccy/roms/pentagon-0.rom deleted file mode 100755 index 5c7a571..0000000 Binary files a/site/jsspeccy/roms/pentagon-0.rom and /dev/null differ diff --git a/site/jsspeccy/roms/trdos.rom b/site/jsspeccy/roms/trdos.rom deleted file mode 100755 index 65b24aa..0000000 Binary files a/site/jsspeccy/roms/trdos.rom and /dev/null differ diff --git a/site/jsspeccy/tapeloaders/tape_128.szx b/site/jsspeccy/tapeloaders/tape_128.szx deleted file mode 100755 index 0a3694f..0000000 Binary files a/site/jsspeccy/tapeloaders/tape_128.szx and /dev/null differ diff --git a/site/jsspeccy/tapeloaders/tape_128_usr0.szx b/site/jsspeccy/tapeloaders/tape_128_usr0.szx deleted file mode 100755 index 6f75a84..0000000 Binary files a/site/jsspeccy/tapeloaders/tape_128_usr0.szx and /dev/null differ diff --git a/site/jsspeccy/tapeloaders/tape_48.szx b/site/jsspeccy/tapeloaders/tape_48.szx deleted file mode 100755 index 786df95..0000000 Binary files a/site/jsspeccy/tapeloaders/tape_48.szx and /dev/null differ diff --git a/site/jsspeccy/tapeloaders/tape_pentagon.szx b/site/jsspeccy/tapeloaders/tape_pentagon.szx deleted file mode 100755 index cbb9446..0000000 Binary files a/site/jsspeccy/tapeloaders/tape_pentagon.szx and /dev/null differ diff --git a/site/jsspeccy/tapeloaders/tape_pentagon_usr0.szx b/site/jsspeccy/tapeloaders/tape_pentagon_usr0.szx deleted file mode 100755 index 3d647f2..0000000 Binary files a/site/jsspeccy/tapeloaders/tape_pentagon_usr0.szx and /dev/null differ