quake2ts 0.0.46 → 0.0.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/viewer/dist/browser/index.global.js +1 -1
- package/apps/viewer/dist/browser/index.global.js.map +1 -1
- package/apps/viewer/dist/cjs/index.cjs +14 -3
- package/apps/viewer/dist/cjs/index.cjs.map +1 -1
- package/apps/viewer/dist/esm/index.js +14 -3
- package/apps/viewer/dist/esm/index.js.map +1 -1
- package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/packages/engine/dist/browser/index.global.js +7 -7
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +3 -1
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +3 -1
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/render/md3Pipeline.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +1 -1
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +176 -3
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +172 -3
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/ai/constants.d.ts +16 -0
- package/packages/game/dist/types/ai/constants.d.ts.map +1 -1
- package/packages/game/dist/types/ai/index.d.ts +1 -0
- package/packages/game/dist/types/ai/index.d.ts.map +1 -1
- package/packages/game/dist/types/ai/targeting.d.ts +25 -0
- package/packages/game/dist/types/ai/targeting.d.ts.map +1 -0
- package/packages/game/dist/types/entities/entity.d.ts +11 -0
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Quake2Engine=(()=>{var $a=Object.create;var Fn=Object.defineProperty;var Ja=Object.getOwnPropertyDescriptor;var Qa=Object.getOwnPropertyNames;var Za=Object.getPrototypeOf,ec=Object.prototype.hasOwnProperty;var tc=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),rc=(r,e)=>{for(var t in e)Fn(r,t,{get:e[t],enumerable:!0})},ds=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Qa(e))!ec.call(r,o)&&o!==t&&Fn(r,o,{get:()=>e[o],enumerable:!(n=Ja(e,o))||n.enumerable});return r};var nc=(r,e,t)=>(t=r!=null?$a(Za(r)):{},ds(e||!r||!r.__esModule?Fn(t,"default",{value:r,enumerable:!0}):t,r)),oc=r=>ds(Fn({},"__esModule",{value:!0}),r);var Gs=tc((Zu,Us)=>{"use strict";Us.exports=Worker});var Nl={};rc(Nl,{ATTN_IDLE:()=>va,ATTN_LOOP_NONE:()=>xa,ATTN_NONE:()=>Co,ATTN_NORM:()=>ba,ATTN_STATIC:()=>Sa,AssetDependencyError:()=>Nt,AssetDependencyTracker:()=>An,AssetManager:()=>wo,AudioApi:()=>Oo,AudioContextController:()=>To,AudioRegistry:()=>fr,AudioRegistryError:()=>vn,AudioSystem:()=>Do,BSP_SURFACE_FRAGMENT_SOURCE:()=>Ni,BSP_SURFACE_VERTEX_SOURCE:()=>Bi,BSP_VERTEX_LAYOUT:()=>Di,BspSurfacePipeline:()=>Vo,ConfigStringRegistry:()=>Xt,Cvar:()=>Mr,CvarRegistry:()=>On,EngineHost:()=>Wt,EngineRuntime:()=>Ar,FixedTimestepLoop:()=>At,Framebuffer:()=>Bo,IndexBuffer:()=>we,LruCache:()=>it,MAX_SOUND_CHANNELS:()=>Pi,MD2_FRAGMENT_SHADER:()=>Ki,MD2_VERTEX_SHADER:()=>qi,MD3_FRAGMENT_SHADER:()=>es,MD3_VERTEX_SHADER:()=>Zi,Md2Loader:()=>Kt,Md2MeshBuffers:()=>Go,Md2ParseError:()=>j,Md2Pipeline:()=>Wo,Md3Loader:()=>Yt,Md3ModelMesh:()=>Xo,Md3ParseError:()=>xe,Md3Pipeline:()=>qo,Md3SurfaceMesh:()=>Cn,MusicSystem:()=>Ho,PARTICLE_FRAGMENT_SHADER:()=>rs,PARTICLE_VERTEX_SHADER:()=>ts,PakArchive:()=>qt,PakIndexStore:()=>Mo,PakIngestionError:()=>ot,PakParseError:()=>ge,PakValidationError:()=>Mt,PakValidator:()=>Nn,ParticleRenderer:()=>Yo,ParticleSystem:()=>Ko,RERELEASE_KNOWN_PAKS:()=>si,SKYBOX_FRAGMENT_SHADER:()=>Wi,SKYBOX_VERTEX_SHADER:()=>Gi,SOUND_FULLVOLUME:()=>pr,SOUND_LOOP_ATTENUATE:()=>_a,ShaderProgram:()=>ie,SkyboxPipeline:()=>Uo,SoundChannel:()=>Lo,SoundPrecache:()=>Po,SoundRegistry:()=>Fo,Texture2D:()=>hr,TextureCache:()=>jt,TextureCubeMap:()=>yr,VertexArray:()=>le,VertexBuffer:()=>se,VirtualFileSystem:()=>Bn,advanceAnimation:()=>ks,applySurfaceState:()=>Ra,attenuationToDistanceMultiplier:()=>Vt,boxIntersectsFrustum:()=>wn,buildBspGeometry:()=>Ca,buildMd2Geometry:()=>Yi,buildMd2VertexData:()=>ji,buildMd3SurfaceGeometry:()=>Ji,buildMd3VertexData:()=>Qi,calculateMaxAudibleDistance:()=>Eo,calculatePakChecksum:()=>Cs,computeFrameBlend:()=>Ds,computeSkyScroll:()=>Ha,createAnimationState:()=>Hs,createAudioGraph:()=>zo,createEngine:()=>Bl,createEngineRuntime:()=>ws,createInitialChannels:()=>Io,createProgramFromSources:()=>La,createWebGLContext:()=>Ma,decodeOgg:()=>Ao,deriveSurfaceRenderState:()=>Ui,extractFrustumPlanes:()=>Ea,filesToPakSources:()=>ai,findLeafForPoint:()=>Oi,gatherVisibleFaces:()=>Pa,groupMd2Animations:()=>Is,ingestPakFiles:()=>Es,ingestPaks:()=>Vn,interpolateMd3Tag:()=>Ba,interpolateVec3:()=>Os,parseMd2:()=>ci,parseMd3:()=>li,parsePcx:()=>Bs,parseWal:()=>Gn,parseWalTexture:()=>Vs,parseWav:()=>Xn,pcxToRgba:()=>Wn,pickChannel:()=>Ro,preparePcxTexture:()=>Ns,removeViewTranslation:()=>Da,resolveLightStyles:()=>Vi,spatializeOrigin:()=>ko,spawnBlood:()=>Ua,spawnBulletImpact:()=>Na,spawnExplosion:()=>Va,spawnMuzzleFlash:()=>Wa,spawnTeleportFlash:()=>Ga,spawnTrail:()=>Xa,walToRgba:()=>ui,wireDropTarget:()=>Ts,wireFileInput:()=>zs});var ic=()=>typeof performance<"u"?performance.now():Date.now(),sc=r=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>r()):setTimeout(r,25)},At=class{constructor(e,t={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),t=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(t,e),this.running&&this.options.schedule(this.tick)};let n=t.fixedDeltaMs??25,o=t.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:t.maxDeltaMs??n*o,startTimeMs:t.startTimeMs,now:t.now??ic,schedule:t.schedule??sc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let t=(this.lastTimeMs??0)+e;this.lastTimeMs=t,this.advance(e,t)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,t){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:t}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:t,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Wt=class{constructor(e,t,n={}){this.game=e;this.client=t;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e)};this.renderClient=e=>{this.client&&this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame})};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new At({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var ms={x:0,y:0,z:0};var Xl=Math.PI/180;function fs(r,e){return{x:r.x-e.x,y:r.y-e.y,z:r.z-e.z}}function ac(r,e){return{x:r.x*e,y:r.y*e,z:r.z*e}}function $o(r,e){return r.x*e.x+r.y*e.y+r.z*e.z}function cc(r){return $o(r,r)}function Jo(r){return Math.sqrt(cc(r))}function Ee(r){let e=Jo(r);return e===0?r:ac(r,1/e)}var ql=Math.PI/180,Kl=180/Math.PI;function lc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ps(r,e){let t=e.x,n=e.y,o=e.z;return{x:r[0]*t+r[4]*n+r[8]*o+r[12],y:r[1]*t+r[5]*n+r[9]*o+r[13],z:r[2]*t+r[6]*n+r[10]*o+r[14]}}function hs(r,e){let t=lc();return t[0]=e[0].x,t[1]=e[0].y,t[2]=e[0].z,t[4]=e[1].x,t[5]=e[1].y,t[6]=e[1].z,t[8]=e[2].x,t[9]=e[2].y,t[10]=e[2].z,t[12]=r.x,t[13]=r.y,t[14]=r.z,t}var Re=1,nt=2;var Qo=8,Zo=16,uc=32;var dc=16384;var Pn=65536,ys=1<<17,mc=1<<18,fc=1<<19,pc=1<<20,hc=1<<21,yc=1<<22,gc=1<<23,Yl=1<<24,In=1<<25,xc=1<<26,jl=1<<27,$l=1<<28,Jl=1<<29,Rn=1<<30,Ql=1<<31;var _r=0;var gs=4,xs=8,bs=16,vs=32,Ss=64;var Zl=1<<25,eu=1<<28,tu=1<<29,ru=1<<30,nu=1<<31;var ou=Re|nt,iu=Re|Pn|nt|In|Rn,su=Re|Pn|nt,au=Re|ys|nt|In|Rn,cu=uc|Qo|Zo,lu=Re|Zo|Qo,bc=Re|In|Rn|nt|xc,uu=mc|fc|pc|hc|yc|gc,du=Re|Qo|Zo|In|Rn,mu=Re|Pn|nt,fu=Re|nt,pu=Re|Pn|nt|ys,hu=bc|dc;var yu=Number.MAX_SAFE_INTEGER-1;var kn=(r=>(r[r.None=0]="None",r[r.Archive=1]="Archive",r[r.UserInfo=2]="UserInfo",r[r.ServerInfo=4]="ServerInfo",r[r.Latch=8]="Latch",r[r.Cheat=16]="Cheat",r))(kn||{});var Dn=256;var ei=256,ti=8192,Hn=2048,ri=512,ni=256,oi=Dn*2,ii=256,jo=32,Sr=96;var R=(r=>(r[r.Name=0]="Name",r[r.CdTrack=1]="CdTrack",r[r.Sky=2]="Sky",r[r.SkyAxis=3]="SkyAxis",r[r.SkyRotate=4]="SkyRotate",r[r.StatusBar=5]="StatusBar",r[r.AirAccel=59]="AirAccel",r[r.MaxClients=60]="MaxClients",r[r.MapChecksum=61]="MapChecksum",r[r.Models=62]="Models",r[r.Sounds=62+ti]="Sounds",r[r.Images=r.Sounds+Hn]="Images",r[r.Lights=r.Images+ri]="Lights",r[r.ShadowLights=r.Lights+ei]="ShadowLights",r[r.Items=r.ShadowLights+ii]="Items",r[r.PlayerSkins=r.Items+ni]="PlayerSkins",r[r.General=r.PlayerSkins+Dn]="General",r[r.WheelWeapons=r.General+oi]="WheelWeapons",r[r.WheelAmmo=r.WheelWeapons+jo]="WheelAmmo",r[r.WheelPowerups=r.WheelAmmo+jo]="WheelPowerups",r[r.CdLoopCount=r.WheelPowerups+jo]="CdLoopCount",r[r.GameStyle=r.CdLoopCount+1]="GameStyle",r[r.MaxConfigStrings=r.GameStyle+1]="MaxConfigStrings",r))(R||{}),_s=R.MaxConfigStrings;function As(r){return r>=5&&r<59?Sr*(59-r):r>=R.General&&r<R.WheelWeapons?Sr*(R.MaxConfigStrings-r):Sr}function vc(r){if(r<0||r>=R.MaxConfigStrings)throw new RangeError(`Configstring index ${r} is out of range (0-${R.MaxConfigStrings-1})`)}function Ms(r,e){let t=As(r);if(e.length>t)throw new RangeError(`Configstring ${r} exceeds maximum length (${e.length} > ${t}); limit is ${Sr} chars per slot`)}var Xt=class{constructor(){this.values=new Map;this.modelCursor=R.Models;this.soundCursor=R.Sounds;this.imageCursor=R.Images;this.lightCursor=R.Lights;this.shadowLightCursor=R.ShadowLights;this.itemCursor=R.Items;this.playerSkinCursor=R.PlayerSkins;this.generalCursor=R.General}set(e,t){return vc(e),Ms(e,t),this.values.set(e,t),e}get(e){return this.values.get(e)}getAll(){let e=new Array(_s).fill("");for(let[t,n]of this.values.entries())e[t]=n;return e}modelIndex(e){return this.register(e,R.Models,ti,"modelCursor")}soundIndex(e){return this.register(e,R.Sounds,Hn,"soundCursor")}findSoundIndex(e){for(let t=R.Sounds;t<R.Sounds+Hn;t+=1)if(this.values.get(t)===e)return t}imageIndex(e){return this.register(e,R.Images,ri,"imageCursor")}lightIndex(e){return this.register(e,R.Lights,ei,"lightCursor")}shadowLightIndex(e){return this.register(e,R.ShadowLights,ii,"shadowLightCursor")}itemIndex(e){return this.register(e,R.Items,ni,"itemCursor")}playerSkinIndex(e){return this.register(e,R.PlayerSkins,Dn,"playerSkinCursor")}generalIndex(e){return this.register(e,R.General,oi,"generalCursor")}register(e,t,n,o){for(let a=t;a<t+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=t+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${t}`);return Ms(i,e),this.values.set(i,e),this[o]=i+1,i}};var Ar=class{constructor(e,t){this.engine=e;this.host=t;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function ws(r,e,t,n){return new Ar(r,new Wt(e,t,n))}var Mr=class{constructor({name:e,defaultValue:t,description:n,flags:o=kn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=t,this.description=n,this.flags=o,this._value=t,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&kn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let t=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,t)}},On=class{constructor(){this.cvars=new Map}register(e){let t=this.cvars.get(e.name);if(t)return t;let n=new Mr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,t){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(t),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let t of this.cvars.values())e=t.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,t)=>e.name.localeCompare(t.name))}};var Sc="PACK";function _c(r,e,t){let n=[];for(let o=0;o<t;o+=1){let i=r.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function W(r){return r.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Ac(){let r=new Uint32Array(256);for(let e=0;e<256;e+=1){let t=e;for(let n=0;n<8;n+=1)t=(t&1)!==0?3988292384^t>>>1:t>>>1;r[e]=t>>>0}return r}var Mc=Ac();function Ls(r){let e=4294967295;for(let t=0;t<r.length;t+=1){let n=r[t];e=Mc[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var ge=class extends Error{},qt=class r{constructor(e,t,n,o){this.name=e;this.buffer=t;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=t.byteLength}static fromArrayBuffer(e,t){let n=new DataView(t);if(t.byteLength<12)throw new ge("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Sc)throw new ge(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new ge(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new ge(`Invalid directory length: ${s}`);if(i+s>t.byteLength)throw new ge("Directory exceeds buffer length");let c=s/64,l=[],u=new Map;for(let d=0;d<c;d+=1){let m=i+d*64,p=_c(n,m,56),h=W(p),y=n.getInt32(m+56,!0),g=n.getInt32(m+60,!0);if(y<0||g<0||y+g>t.byteLength)throw new ge(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${y}, length=${g})`);if(!h)throw new ge(`Entry ${d} has an empty name`);let b={name:h,offset:y,length:g};u.set(h,b)}return l.push(...u.values()),new r(e,t,l,Ls(new Uint8Array(t)))}getEntry(e){return this.entries.get(W(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let t=this.getEntry(e);if(!t)throw new ge(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,t.offset,t.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Cs(r){return Ls(new Uint8Array(r))}var Bn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(t=>this.mountPak(t))}mountPak(e){this.mounts.push(e);for(let t of e.listEntries()){let n=W(t.name);this.files.set(n,{archive:e,entry:t})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(W(e))}stat(e){let t=this.files.get(W(e));if(t)return{path:t.entry.name,size:t.entry.length,sourcePak:t.archive.name}}async readFile(e){let t=this.files.get(W(e));if(!t)throw new Error(`File not found in VFS: ${e}`);return t.archive.readFile(e)}list(e=""){let t=W(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=t?`${t}/`:"";for(let s of this.files.values()){if(t&&!s.entry.name.startsWith(i))continue;let a=t?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let t=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(t)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var si=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Mt=class extends Error{constructor(t){super(t.status==="unknown"?`Unknown PAK not allowed: ${t.name}`:`PAK checksum mismatch for ${t.name}`);this.result=t;this.name="PakValidationError"}},Nn=class{constructor(e=si){this.known=new Map;e.forEach(t=>this.known.set(this.normalizePakName(t.name),t))}validateArchive(e,t){let n=this.normalizePakName(t??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,t){let n=this.validateArchive(e,t);if(n.status==="mismatch")throw new Mt(n);return n}normalizePakName(e){let t=W(e),n=t.split("/"),o=n.pop()??t,i=n.pop();return i?`${o}@${i}`:o}};var ot=class extends Error{constructor(t,n){super(`Failed to ingest PAK: ${t}`);this.file=t;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function wc(r,e){if(typeof r.arrayBuffer=="function"){let t=await r.arrayBuffer();return e?.({file:"blob",loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}if(typeof FileReader<"u")return new Promise((t,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||r.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?t(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(r)});if(typeof Response<"u"){let t=await new Response(r).arrayBuffer();return e?.({file:"blob",loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}if(typeof r.stream=="function"){let t=r.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await t.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:r.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new ot("blob",new Error("Unsupported Blob type"))}async function Lc(r,e){if(r.data instanceof ArrayBuffer)return e?.({file:r.name,loadedBytes:r.data.byteLength,totalBytes:r.data.byteLength,state:"reading"}),r.data;if(r.data instanceof Blob){let n=r.data.size;return wc(r.data,o=>e?.({...o,file:r.name,totalBytes:n}))}let t=r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength);return e?.({file:r.name,loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}async function Vn(r,e,t){let n=typeof t=="function"?{onProgress:t}:t??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let u=await Lc(l,n.onProgress),d=qt.fromArrayBuffer(l.name,u),m=n.validator?.validateArchive(d);if(m){n.onValidationResult?.(m);let p=m.status==="mismatch",h=m.status==="unknown";if(p&&i||h&&!s){let y=new Mt(m);if(n.onError?.(l.name,y),a)throw new ot(l.name,y);c.push({archive:d,mounted:!1,validation:m});continue}}if(r.mountPak(d),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(d)}catch(p){if(n.onError?.(l.name,p),a)throw new ot(l.name,p)}n.onProgress?.({file:l.name,loadedBytes:u.byteLength,totalBytes:u.byteLength,state:"parsed"}),c.push({archive:d,mounted:!0,validation:m})}catch(u){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,u),a)throw new ot(l.name,u)}return c}var it=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}set(e,t){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,t),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,t])=>({key:e,value:t}))}};function Cc(r){return Array.isArray(r)?r:Array.from(r)}function ai(r){return Cc(r).map(e=>({name:e.name,data:e}))}async function Es(r,e,t){let n=ai(e);return Vn(r,n,t??{})}function Ts(r,e){let t=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return r.addEventListener("dragover",t),r.addEventListener("drop",n),()=>{r.removeEventListener("dragover",t),r.removeEventListener("drop",n)}}function zs(r,e){let t=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return r.addEventListener("change",t),()=>r.removeEventListener("change",t)}var Ec=844121161,Tc=8,Fs=68,zc=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],j=class extends Error{},Kt=class{constructor(e){this.vfs=e}async load(e){let t=await this.vfs.readFile(e),n=new Uint8Array(t.byteLength);return n.set(t),ci(n.buffer)}};function Ps(r,e,t){let n=[];for(let o=0;o<t;o+=1){let i=r.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function wr(r,e,t,n){if(t!==0&&(e<Fs||e+t>r.byteLength))throw new j(`${n} section is out of bounds`)}function Fc(r){if(r.byteLength<Fs)throw new j("MD2 buffer too small to contain header");let e=new DataView(r),t=e.getInt32(0,!0),n=e.getInt32(4,!0);if(t!==Ec)throw new j(`Invalid MD2 ident: ${t}`);if(n!==Tc)throw new j(`Unsupported MD2 version: ${n}`);let o={ident:t,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new j(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>r.byteLength)throw new j("MD2 offset_end exceeds buffer length");return o}function Pc(r,e){let t=e.numSkins*64;wr(r,e.offsetSkins,t,"skins");let n=new DataView(r,e.offsetSkins,t),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ps(n,i*64,64)});return o}function Ic(r,e){let t=e.numTexCoords*4;wr(r,e.offsetTexCoords,t,"texcoords");let n=new DataView(r,e.offsetTexCoords,t),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function Rc(r,e){let t=e.numTriangles*12;wr(r,e.offsetTriangles,t,"triangles");let n=new DataView(r,e.offsetTriangles,t),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new j("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function kc(r,e){let t=e.numFrames*e.frameSize;wr(r,e.offsetFrames,t,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(r,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ps(s,24,16),u=[];for(let d=0;d<e.numVertices;d+=1){let m=40+d*4,p={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=zc[h];if(!y)throw new j(`Invalid normal index ${h} in frame ${l}`);u.push({position:p,normalIndex:h,normal:y})}n.push({name:l,vertices:u})}return n}function Dc(r,e){let t=e.numGlCommands*4;if(wr(r,e.offsetGlCommands,t,"gl commands"),t===0)return[];let n=new DataView(r,e.offsetGlCommands,t),o=[],i=0;for(;;){if(i+4>t)throw new j("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>t)throw new j("GL command vertex block exceeds buffer");for(let u=0;u<a;u+=1){let d=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new j("GL command references invalid vertex index");c.push({s:d,t:m,vertexIndex:p})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==t)throw new j("GL command list did not consume expected data");return o}function ci(r){let e=Fc(r),t=Pc(r,e),n=Ic(r,e),o=Rc(r,e),i=kc(r,e),s=Dc(r,e);return{header:e,skins:t,texCoords:n,triangles:o,frames:i,glCommands:s}}function Is(r){let e=[],t=0;for(;t<r.length;){let n=r[t].name,o=n.replace(/\d+$/,"")||n,i=t;for(;i+1<r.length&&(r[i+1].name.replace(/\d+$/,"")||r[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:t,lastFrame:i}),t=i+1}return e}var Rs=860898377,Hc=15,xe=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Lr(r,e,t){let n=new Uint8Array(r.buffer,r.byteOffset+e,t);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function Oc(r){let e=(r>>8&255)*(2*Math.PI/255),t=(r&255)*(2*Math.PI/255),n=Math.sin(t);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(t)}}function Un(r,e,t,n){if(e<0||e+t>n)throw new xe(`${r} exceeds buffer bounds`)}function Bc(r){let e=r.getInt32(0,!0);if(e!==Rs)throw new xe(`Invalid MD3 ident: ${e}`);let t=r.getInt32(4,!0);if(t!==Hc)throw new xe(`Unsupported MD3 version: ${t}`);let n=Lr(r,8,64),o=r.getInt32(72,!0),i=r.getInt32(76,!0),s=r.getInt32(80,!0),a=r.getInt32(84,!0),c=r.getInt32(88,!0),l=r.getInt32(92,!0),u=r.getInt32(96,!0),d=r.getInt32(100,!0),m=r.getInt32(104,!0);if(i<=0||a<0||s<0)throw new xe("Invalid MD3 counts");return{ident:e,version:t,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:u,ofsSurfaces:d,ofsEnd:m}}function Nc(r,e){let t=[];Un("Frames",e.ofsFrames,e.numFrames*56,r.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;t.push({minBounds:{x:r.getFloat32(i,!0),y:r.getFloat32(i+4,!0),z:r.getFloat32(i+8,!0)},maxBounds:{x:r.getFloat32(i+12,!0),y:r.getFloat32(i+16,!0),z:r.getFloat32(i+20,!0)},localOrigin:{x:r.getFloat32(i+24,!0),y:r.getFloat32(i+28,!0),z:r.getFloat32(i+32,!0)},radius:r.getFloat32(i+36,!0),name:Lr(r,i+40,16)})}return t}function Vc(r,e){let t=[],o=e.numFrames*e.numTags*112;Un("Tags",e.ofsTags,o,r.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,u=l+12;s.push({name:Lr(r,c,64),origin:{x:r.getFloat32(l,!0),y:r.getFloat32(l+4,!0),z:r.getFloat32(l+8,!0)},axis:[{x:r.getFloat32(u,!0),y:r.getFloat32(u+4,!0),z:r.getFloat32(u+8,!0)},{x:r.getFloat32(u+12,!0),y:r.getFloat32(u+16,!0),z:r.getFloat32(u+20,!0)},{x:r.getFloat32(u+24,!0),y:r.getFloat32(u+28,!0),z:r.getFloat32(u+32,!0)}]})}t.push(s)}return t}function Uc(r,e){let t=r.getInt32(e,!0);if(t!==Rs)throw new xe(`Invalid surface ident at ${e}: ${t}`);let n=Lr(r,e+4,64),o=r.getInt32(e+68,!0),i=r.getInt32(e+72,!0),s=r.getInt32(e+76,!0),a=r.getInt32(e+80,!0),c=r.getInt32(e+84,!0),l=r.getInt32(e+88,!0),u=r.getInt32(e+92,!0),d=r.getInt32(e+96,!0),m=r.getInt32(e+100,!0),p=r.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new xe(`Invalid surface counts for ${n}`);let h=p;Un(`Surface ${n}`,e,h,r.byteLength);let y=[],g=e+l;for(let B=0;B<c;B+=1){let K=g+B*12;y.push({indices:[r.getInt32(K,!0),r.getInt32(K+4,!0),r.getInt32(K+8,!0)]})}let b=[],C=e+u;for(let B=0;B<s;B+=1){let K=C+B*68;b.push({name:Lr(r,K,64),shaderIndex:r.getInt32(K+64,!0)})}let L=[],q=e+d;for(let B=0;B<a;B+=1){let K=q+B*8;L.push({s:r.getFloat32(K,!0),t:r.getFloat32(K+4,!0)})}let G=[],Le=e+m;for(let B=0;B<i;B+=1){let K=[];for(let Ie=0;Ie<a;Ie+=1){let Ce=Le+(B*a+Ie)*8,et=r.getInt16(Ce,!0)/64,br=r.getInt16(Ce+2,!0)/64,Ut=r.getInt16(Ce+4,!0)/64,tt=r.getUint16(Ce+6,!0);K.push({position:{x:et,y:br,z:Ut},latLng:tt,normal:Oc(tt)})}G.push(K)}return{surface:{name:n,flags:o,numFrames:i,shaders:b,triangles:y,texCoords:L,vertices:G},nextOffset:e+p}}function li(r){if(r.byteLength<108)throw new xe("MD3 buffer too small for header");let e=new DataView(r),t=Bc(e);Un("MD3 end",t.ofsEnd,0,r.byteLength);let n=Nc(e,t),o=Vc(e,t),i=[],s=t.ofsSurfaces;for(let a=0;a<t.numSurfaces;a+=1){let{surface:c,nextOffset:l}=Uc(e,s);i.push(c),s=l}if(s!==t.ofsEnd)throw new xe("Surface parsing did not reach ofsEnd");return{header:t,frames:n,tags:o,surfaces:i}}var Yt=class{constructor(e){this.vfs=e}async load(e){let t=await this.vfs.readFile(e);return li(t.slice().buffer)}};function ks(r,e){let t=(r.sequence.end-r.sequence.start+1)/r.sequence.fps,n=r.sequence.loop!==!1,o=r.time+e;return n?o=(o%t+t)%t:o>t&&(o=t),{...r,time:Math.max(0,Math.min(o,t))}}function Ds(r){let e=r.sequence.end-r.sequence.start+1,t=1/r.sequence.fps,n=r.sequence.loop!==!1,o=r.time/t;if(!n&&o>=e)return{frame:r.sequence.end,nextFrame:r.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=r.sequence.start+s,c=s+1>=e?n?r.sequence.start:r.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Hs(r){return{sequence:r,time:0}}function Os(r,e,t){return{x:r.x+(e.x-r.x)*t,y:r.y+(e.y-r.y)*t,z:r.z+(e.z-r.z)*t}}var Cr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Gn(r){if(r.byteLength<100)throw new Cr("WAL buffer too small");let e=new DataView(r),t=new Uint8Array(r,0,32),n=new TextDecoder("utf-8").decode(t).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(r,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),u=e.getInt32(92,!0),d=e.getInt32(96,!0);if(o<=0||i<=0)throw new Cr("Invalid WAL dimensions");let m=[],p=o,h=i;for(let y=0;y<s.length;y+=1){let g=s[y],b=Math.max(1,p*h|0);if(g<=0||g+b>r.byteLength)throw new Cr(`Invalid WAL mip offset for level ${y}`);let C=new Uint8Array(r,g,b);m.push({level:y,width:p,height:h,data:C}),p=Math.max(1,p>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:u,value:d}}var wt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Bs(r){if(r.byteLength<128)throw new wt("PCX buffer too small for header");let e=new DataView(r),t=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(t!==10||n!==1)throw new wt("Unsupported PCX encoding");if(o!==8)throw new wt("Only 8bpp PCX files are supported");let l=a-i+1,u=c-s+1,d=e.getUint16(66,!0),m=r.byteLength-769;if(m<128||new DataView(r,m,1).getUint8(0)!==12)throw new wt("Missing PCX palette");let p=new Uint8Array(r,m+1,768),h=new Uint8Array(r,128,m-128),y=new Uint8Array(l*u),g=0,b=0;for(let C=0;C<u;C+=1){let L=0;for(;L<d&&g<h.length;){let q=1,G=h[g++];if((G&192)===192){if(q=G&63,g>=h.length)throw new wt("Unexpected end of PCX RLE data");G=h[g++]}for(let Le=0;Le<q&&L<d;Le+=1)L<l&&(y[b++]=G),L+=1}}return{width:l,height:u,bitsPerPixel:o,pixels:y,palette:p}}function Wn(r){let e=new Uint8Array(r.width*r.height*4);for(let t=0;t<r.pixels.length;t+=1){let n=r.pixels[t],o=n*3,i=t*4;e[i]=r.palette[o],e[i+1]=r.palette[o+1],e[i+2]=r.palette[o+2],e[i+3]=n===255?0:255}return e}var jt=class{constructor(e={}){this.cache=new it(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,t){this.cache.set(e.toLowerCase(),t)}clear(){this.cache.clear()}};function ui(r,e){let t=[];for(let n of r.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}t.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:r.width,height:r.height,levels:t,source:"wal"}}function Ns(r){let e=Wn(r),t={level:0,width:r.width,height:r.height,rgba:e};return{width:r.width,height:r.height,levels:[t],source:"pcx"}}function Vs(r,e){return ui(Gn(r),e)}var Lt=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function di(r,e,t){return new TextDecoder("ascii").decode(new Uint8Array(r.buffer,r.byteOffset+e,t))}function Xn(r){if(r.byteLength<44)throw new Lt("WAV buffer too small");let e=new DataView(r);if(di(e,0,4)!=="RIFF"||di(e,8,4)!=="WAVE")throw new Lt("Invalid WAV header");let t=12,n=-1,o=-1,i=0,s=0;for(;t+8<=r.byteLength;){let h=di(e,t,4),y=e.getUint32(t+4,!0),g=t+8;h==="fmt "?(n=g,i=y):h==="data"&&(o=g,s=y),t=g+y}if(n===-1||o===-1)throw new Lt("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),u=e.getUint16(n+14,!0);if(a!==1)throw new Lt("Only PCM WAV is supported");let d=u/8,m=s/(d*c),p=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let g=h*c+y,b=o+g*d,C=0;if(u===8)C=e.getUint8(b),p[g]=(C-128)/128;else if(u===16)C=e.getInt16(b,!0),p[g]=C/32768;else if(u===24){let L=e.getUint8(b),q=e.getUint8(b+1),G=e.getInt8(b+2);C=L|q<<8|G<<16,p[g]=C/8388608}else throw new Lt(`Unsupported bitsPerSample: ${u}`)}return{sampleRate:l,channels:c,bitsPerSample:u,samples:p}}var Gc=(r,e=4294967295,t=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^t:s<<1;n[o]=s}for(o=0;o<r.length;o++)a=a<<8^n[255&(a>>24^r[o])];return a};var mi=(r,e=Gc)=>{let t=g=>new Uint8Array(g.length/2).map(((b,C)=>parseInt(g.substring(2*C,2*(C+1)),16))),n=g=>t(g)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((g,b)=>o.set(g,b)));let i=new Uint8Array(r.length),s,a,c,l=!1,u=0,d=42,m=r.length>13&&r.substring(0,9)==="dynEncode",p=0;m&&(p=11,a=n(r.substring(9,p)),a<=1&&(p+=2,d=n(r.substring(11,p))),a===1&&(p+=8,c=(g=>new DataView(t(g).buffer).getInt32(0,!0))(r.substring(13,p))));let h=256-d;for(let g=p;g<r.length;g++)if(s=r.charCodeAt(g),s!==61||l){if(s===92&&g<r.length-5&&m){let b=r.charCodeAt(g+1);b!==117&&b!==85||(s=parseInt(r.substring(g+2,g+6),16),g+=5)}if(s>255){let b=o.get(s);b&&(s=b+127)}l&&(l=!1,s-=64),i[u++]=s<d&&s>0?s+h:s-d}else l=!0;let y=i.subarray(0,u);if(m&&a===1){let g=e(y);if(g!==c){let b="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",b+`
|
|
1
|
+
"use strict";var Quake2Engine=(()=>{var $a=Object.create;var Fn=Object.defineProperty;var Ja=Object.getOwnPropertyDescriptor;var Qa=Object.getOwnPropertyNames;var Za=Object.getPrototypeOf,ec=Object.prototype.hasOwnProperty;var tc=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),rc=(r,e)=>{for(var t in e)Fn(r,t,{get:e[t],enumerable:!0})},ds=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Qa(e))!ec.call(r,o)&&o!==t&&Fn(r,o,{get:()=>e[o],enumerable:!(n=Ja(e,o))||n.enumerable});return r};var nc=(r,e,t)=>(t=r!=null?$a(Za(r)):{},ds(e||!r||!r.__esModule?Fn(t,"default",{value:r,enumerable:!0}):t,r)),oc=r=>ds(Fn({},"__esModule",{value:!0}),r);var Gs=tc((Zu,Us)=>{"use strict";Us.exports=Worker});var Nl={};rc(Nl,{ATTN_IDLE:()=>va,ATTN_LOOP_NONE:()=>xa,ATTN_NONE:()=>Co,ATTN_NORM:()=>ba,ATTN_STATIC:()=>Sa,AssetDependencyError:()=>Nt,AssetDependencyTracker:()=>Mn,AssetManager:()=>wo,AudioApi:()=>Oo,AudioContextController:()=>To,AudioRegistry:()=>fr,AudioRegistryError:()=>Sn,AudioSystem:()=>Do,BSP_SURFACE_FRAGMENT_SOURCE:()=>Ni,BSP_SURFACE_VERTEX_SOURCE:()=>Bi,BSP_VERTEX_LAYOUT:()=>Di,BspSurfacePipeline:()=>Vo,ConfigStringRegistry:()=>Xt,Cvar:()=>wr,CvarRegistry:()=>On,EngineHost:()=>Wt,EngineRuntime:()=>Mr,FixedTimestepLoop:()=>At,Framebuffer:()=>Bo,IndexBuffer:()=>we,LruCache:()=>it,MAX_SOUND_CHANNELS:()=>Pi,MD2_FRAGMENT_SHADER:()=>Ki,MD2_VERTEX_SHADER:()=>qi,MD3_FRAGMENT_SHADER:()=>es,MD3_VERTEX_SHADER:()=>Zi,Md2Loader:()=>Kt,Md2MeshBuffers:()=>Go,Md2ParseError:()=>j,Md2Pipeline:()=>Wo,Md3Loader:()=>Yt,Md3ModelMesh:()=>Xo,Md3ParseError:()=>xe,Md3Pipeline:()=>qo,Md3SurfaceMesh:()=>Cn,MusicSystem:()=>Ho,PARTICLE_FRAGMENT_SHADER:()=>rs,PARTICLE_VERTEX_SHADER:()=>ts,PakArchive:()=>qt,PakIndexStore:()=>Mo,PakIngestionError:()=>ot,PakParseError:()=>ge,PakValidationError:()=>Mt,PakValidator:()=>Nn,ParticleRenderer:()=>Yo,ParticleSystem:()=>Ko,RERELEASE_KNOWN_PAKS:()=>si,SKYBOX_FRAGMENT_SHADER:()=>Wi,SKYBOX_VERTEX_SHADER:()=>Gi,SOUND_FULLVOLUME:()=>pr,SOUND_LOOP_ATTENUATE:()=>_a,ShaderProgram:()=>ie,SkyboxPipeline:()=>Uo,SoundChannel:()=>Lo,SoundPrecache:()=>Po,SoundRegistry:()=>Fo,Texture2D:()=>hr,TextureCache:()=>jt,TextureCubeMap:()=>yr,VertexArray:()=>le,VertexBuffer:()=>se,VirtualFileSystem:()=>Bn,advanceAnimation:()=>ks,applySurfaceState:()=>Ra,attenuationToDistanceMultiplier:()=>Vt,boxIntersectsFrustum:()=>Ln,buildBspGeometry:()=>Ca,buildMd2Geometry:()=>Yi,buildMd2VertexData:()=>ji,buildMd3SurfaceGeometry:()=>Ji,buildMd3VertexData:()=>Qi,calculateMaxAudibleDistance:()=>Eo,calculatePakChecksum:()=>Cs,computeFrameBlend:()=>Ds,computeSkyScroll:()=>Ha,createAnimationState:()=>Hs,createAudioGraph:()=>zo,createEngine:()=>Bl,createEngineRuntime:()=>ws,createInitialChannels:()=>Io,createProgramFromSources:()=>La,createWebGLContext:()=>Ma,decodeOgg:()=>Ao,deriveSurfaceRenderState:()=>Ui,extractFrustumPlanes:()=>Ea,filesToPakSources:()=>ai,findLeafForPoint:()=>Oi,gatherVisibleFaces:()=>Pa,groupMd2Animations:()=>Is,ingestPakFiles:()=>Es,ingestPaks:()=>Vn,interpolateMd3Tag:()=>Ba,interpolateVec3:()=>Os,parseMd2:()=>ci,parseMd3:()=>li,parsePcx:()=>Bs,parseWal:()=>Gn,parseWalTexture:()=>Vs,parseWav:()=>Xn,pcxToRgba:()=>Wn,pickChannel:()=>Ro,preparePcxTexture:()=>Ns,removeViewTranslation:()=>Da,resolveLightStyles:()=>Vi,spatializeOrigin:()=>ko,spawnBlood:()=>Ua,spawnBulletImpact:()=>Na,spawnExplosion:()=>Va,spawnMuzzleFlash:()=>Wa,spawnTeleportFlash:()=>Ga,spawnTrail:()=>Xa,walToRgba:()=>ui,wireDropTarget:()=>Ts,wireFileInput:()=>zs});var ic=()=>typeof performance<"u"?performance.now():Date.now(),sc=r=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>r()):setTimeout(r,25)},At=class{constructor(e,t={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),t=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(t,e),this.running&&this.options.schedule(this.tick)};let n=t.fixedDeltaMs??25,o=t.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:t.maxDeltaMs??n*o,startTimeMs:t.startTimeMs,now:t.now??ic,schedule:t.schedule??sc}}start(){this.running||(this.running=!0,this.lastTimeMs=this.options.startTimeMs??this.options.now(),this.options.schedule(this.tick))}stop(){this.running=!1}pump(e){let t=(this.lastTimeMs??0)+e;this.lastTimeMs=t,this.advance(e,t)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,t){let n=Math.min(Math.max(e,0),this.options.maxDeltaMs);this.accumulatorMs=Math.min(this.accumulatorMs+n,this.options.fixedDeltaMs*this.options.maxSubSteps);let o=0;for(;this.accumulatorMs>=this.options.fixedDeltaMs&&o<this.options.maxSubSteps;)this.frame+=1,this.callbacks.simulate({frame:this.frame,deltaMs:this.options.fixedDeltaMs,nowMs:t}),this.accumulatorMs-=this.options.fixedDeltaMs,o+=1;let i=this.options.fixedDeltaMs===0?0:this.accumulatorMs/this.options.fixedDeltaMs;this.callbacks.render?.({alpha:i,nowMs:t,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Wt=class{constructor(e,t,n={}){this.game=e;this.client=t;this.started=!1;this.stepSimulation=e=>{this.previousFrame=this.latestFrame,this.latestFrame=this.game.frame(e)};this.renderClient=e=>{this.client&&this.client.render({...e,previous:this.previousFrame,latest:this.latestFrame})};let o=n.loop?.now?.()??Date.now();this.startTimeMs=n.startTimeMs??n.loop?.startTimeMs??o,this.loop=new At({simulate:this.stepSimulation,render:this.renderClient},{...n.loop,startTimeMs:this.startTimeMs})}start(){this.started||(this.latestFrame=this.game.init(this.startTimeMs)??this.latestFrame,this.client?.init(this.latestFrame),this.started=!0,this.loop.start())}stop(){this.started&&(this.loop.stop(),this.client?.shutdown(),this.game.shutdown(),this.previousFrame=void 0,this.latestFrame=void 0,this.started=!1)}pump(e){this.loop.pump(e)}getLatestFrame(){return this.latestFrame}isRunning(){return this.loop.isRunning()}};var ms={x:0,y:0,z:0};var Xl=Math.PI/180;function fs(r,e){return{x:r.x-e.x,y:r.y-e.y,z:r.z-e.z}}function ac(r,e){return{x:r.x*e,y:r.y*e,z:r.z*e}}function $o(r,e){return r.x*e.x+r.y*e.y+r.z*e.z}function cc(r){return $o(r,r)}function Jo(r){return Math.sqrt(cc(r))}function Ee(r){let e=Jo(r);return e===0?r:ac(r,1/e)}var ql=Math.PI/180,Kl=180/Math.PI;function lc(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function ps(r,e){let t=e.x,n=e.y,o=e.z;return{x:r[0]*t+r[4]*n+r[8]*o+r[12],y:r[1]*t+r[5]*n+r[9]*o+r[13],z:r[2]*t+r[6]*n+r[10]*o+r[14]}}function hs(r,e){let t=lc();return t[0]=e[0].x,t[1]=e[0].y,t[2]=e[0].z,t[4]=e[1].x,t[5]=e[1].y,t[6]=e[1].z,t[8]=e[2].x,t[9]=e[2].y,t[10]=e[2].z,t[12]=r.x,t[13]=r.y,t[14]=r.z,t}var Re=1,nt=2;var Qo=8,Zo=16,uc=32;var dc=16384;var Pn=65536,ys=1<<17,mc=1<<18,fc=1<<19,pc=1<<20,hc=1<<21,yc=1<<22,gc=1<<23,Yl=1<<24,In=1<<25,xc=1<<26,jl=1<<27,$l=1<<28,Jl=1<<29,Rn=1<<30,Ql=1<<31;var Ar=0;var gs=4,xs=8,bs=16,vs=32,Ss=64;var Zl=1<<25,eu=1<<28,tu=1<<29,ru=1<<30,nu=1<<31;var ou=Re|nt,iu=Re|Pn|nt|In|Rn,su=Re|Pn|nt,au=Re|ys|nt|In|Rn,cu=uc|Qo|Zo,lu=Re|Zo|Qo,bc=Re|In|Rn|nt|xc,uu=mc|fc|pc|hc|yc|gc,du=Re|Qo|Zo|In|Rn,mu=Re|Pn|nt,fu=Re|nt,pu=Re|Pn|nt|ys,hu=bc|dc;var yu=Number.MAX_SAFE_INTEGER-1;var kn=(r=>(r[r.None=0]="None",r[r.Archive=1]="Archive",r[r.UserInfo=2]="UserInfo",r[r.ServerInfo=4]="ServerInfo",r[r.Latch=8]="Latch",r[r.Cheat=16]="Cheat",r))(kn||{});var Dn=256;var ei=256,ti=8192,Hn=2048,ri=512,ni=256,oi=Dn*2,ii=256,jo=32,_r=96;var R=(r=>(r[r.Name=0]="Name",r[r.CdTrack=1]="CdTrack",r[r.Sky=2]="Sky",r[r.SkyAxis=3]="SkyAxis",r[r.SkyRotate=4]="SkyRotate",r[r.StatusBar=5]="StatusBar",r[r.AirAccel=59]="AirAccel",r[r.MaxClients=60]="MaxClients",r[r.MapChecksum=61]="MapChecksum",r[r.Models=62]="Models",r[r.Sounds=62+ti]="Sounds",r[r.Images=r.Sounds+Hn]="Images",r[r.Lights=r.Images+ri]="Lights",r[r.ShadowLights=r.Lights+ei]="ShadowLights",r[r.Items=r.ShadowLights+ii]="Items",r[r.PlayerSkins=r.Items+ni]="PlayerSkins",r[r.General=r.PlayerSkins+Dn]="General",r[r.WheelWeapons=r.General+oi]="WheelWeapons",r[r.WheelAmmo=r.WheelWeapons+jo]="WheelAmmo",r[r.WheelPowerups=r.WheelAmmo+jo]="WheelPowerups",r[r.CdLoopCount=r.WheelPowerups+jo]="CdLoopCount",r[r.GameStyle=r.CdLoopCount+1]="GameStyle",r[r.MaxConfigStrings=r.GameStyle+1]="MaxConfigStrings",r))(R||{}),_s=R.MaxConfigStrings;function As(r){return r>=5&&r<59?_r*(59-r):r>=R.General&&r<R.WheelWeapons?_r*(R.MaxConfigStrings-r):_r}function vc(r){if(r<0||r>=R.MaxConfigStrings)throw new RangeError(`Configstring index ${r} is out of range (0-${R.MaxConfigStrings-1})`)}function Ms(r,e){let t=As(r);if(e.length>t)throw new RangeError(`Configstring ${r} exceeds maximum length (${e.length} > ${t}); limit is ${_r} chars per slot`)}var Xt=class{constructor(){this.values=new Map;this.modelCursor=R.Models;this.soundCursor=R.Sounds;this.imageCursor=R.Images;this.lightCursor=R.Lights;this.shadowLightCursor=R.ShadowLights;this.itemCursor=R.Items;this.playerSkinCursor=R.PlayerSkins;this.generalCursor=R.General}set(e,t){return vc(e),Ms(e,t),this.values.set(e,t),e}get(e){return this.values.get(e)}getAll(){let e=new Array(_s).fill("");for(let[t,n]of this.values.entries())e[t]=n;return e}modelIndex(e){return this.register(e,R.Models,ti,"modelCursor")}soundIndex(e){return this.register(e,R.Sounds,Hn,"soundCursor")}findSoundIndex(e){for(let t=R.Sounds;t<R.Sounds+Hn;t+=1)if(this.values.get(t)===e)return t}imageIndex(e){return this.register(e,R.Images,ri,"imageCursor")}lightIndex(e){return this.register(e,R.Lights,ei,"lightCursor")}shadowLightIndex(e){return this.register(e,R.ShadowLights,ii,"shadowLightCursor")}itemIndex(e){return this.register(e,R.Items,ni,"itemCursor")}playerSkinIndex(e){return this.register(e,R.PlayerSkins,Dn,"playerSkinCursor")}generalIndex(e){return this.register(e,R.General,oi,"generalCursor")}register(e,t,n,o){for(let a=t;a<t+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=t+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${t}`);return Ms(i,e),this.values.set(i,e),this[o]=i+1,i}};var Mr=class{constructor(e,t){this.engine=e;this.host=t;this.started=!1}start(){this.started||(this.engine.init(),this.host.start(),this.started=!0)}stop(){this.started&&(this.host.stop(),this.engine.shutdown(),this.started=!1)}pump(e){this.host.pump(e)}getLatestFrame(){return this.host.getLatestFrame()}isRunning(){return this.started&&this.host.isRunning()}};function ws(r,e,t,n){return new Mr(r,new Wt(e,t,n))}var wr=class{constructor({name:e,defaultValue:t,description:n,flags:o=kn.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=t,this.description=n,this.flags=o,this._value=t,this.onChange=i}get string(){return this._value}get number(){return Number(this._value)}get integer(){return Math.trunc(this.number)}get boolean(){return!!this.integer}set(e){if(this.flags&kn.Latch){if(e===this._value){this.latched=void 0;return}if(this.latched===e)return;this.latched!==e&&(this.latched=e);return}this.apply(e)}reset(){this.latched=void 0,this.apply(this.defaultValue)}applyLatched(){if(this.latched===void 0)return!1;let e=this.latched;return this.latched=void 0,e===this._value?!1:(this.apply(e),!0)}apply(e){if(this._value===e)return;let t=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,t)}},On=class{constructor(){this.cvars=new Map}register(e){let t=this.cvars.get(e.name);if(t)return t;let n=new wr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,t){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(t),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let t of this.cvars.values())e=t.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,t)=>e.name.localeCompare(t.name))}};var Sc="PACK";function _c(r,e,t){let n=[];for(let o=0;o<t;o+=1){let i=r.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function X(r){return r.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Ac(){let r=new Uint32Array(256);for(let e=0;e<256;e+=1){let t=e;for(let n=0;n<8;n+=1)t=(t&1)!==0?3988292384^t>>>1:t>>>1;r[e]=t>>>0}return r}var Mc=Ac();function Ls(r){let e=4294967295;for(let t=0;t<r.length;t+=1){let n=r[t];e=Mc[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var ge=class extends Error{},qt=class r{constructor(e,t,n,o){this.name=e;this.buffer=t;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=t.byteLength}static fromArrayBuffer(e,t){let n=new DataView(t);if(t.byteLength<12)throw new ge("PAK buffer too small to contain header");let o=String.fromCharCode(n.getUint8(0),n.getUint8(1),n.getUint8(2),n.getUint8(3));if(o!==Sc)throw new ge(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new ge(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new ge(`Invalid directory length: ${s}`);if(i+s>t.byteLength)throw new ge("Directory exceeds buffer length");let c=s/64,l=[],u=new Map;for(let d=0;d<c;d+=1){let m=i+d*64,p=_c(n,m,56),h=X(p),y=n.getInt32(m+56,!0),g=n.getInt32(m+60,!0);if(y<0||g<0||y+g>t.byteLength)throw new ge(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${y}, length=${g})`);if(!h)throw new ge(`Entry ${d} has an empty name`);let b={name:h,offset:y,length:g};u.set(h,b)}return l.push(...u.values()),new r(e,t,l,Ls(new Uint8Array(t)))}getEntry(e){return this.entries.get(X(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let t=this.getEntry(e);if(!t)throw new ge(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,t.offset,t.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function Cs(r){return Ls(new Uint8Array(r))}var Bn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(t=>this.mountPak(t))}mountPak(e){this.mounts.push(e);for(let t of e.listEntries()){let n=X(t.name);this.files.set(n,{archive:e,entry:t})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(X(e))}stat(e){let t=this.files.get(X(e));if(t)return{path:t.entry.name,size:t.entry.length,sourcePak:t.archive.name}}async readFile(e){let t=this.files.get(X(e));if(!t)throw new Error(`File not found in VFS: ${e}`);return t.archive.readFile(e)}list(e=""){let t=X(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=t?`${t}/`:"";for(let s of this.files.values()){if(t&&!s.entry.name.startsWith(i))continue;let a=t?s.entry.name.slice(i.length):s.entry.name,c=a.indexOf("/");c===-1?n.push({path:s.entry.name,size:s.entry.length,sourcePak:s.archive.name}):o.add(a.slice(0,c))}return n.sort((s,a)=>s.path.localeCompare(a.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let t=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(t)&&n.push({path:o.entry.name,size:o.entry.length,sourcePak:o.archive.name});return n.sort((o,i)=>o.path.localeCompare(i.path))}};var si=Object.freeze([{name:"pak0.pak",checksum:2378051181,description:"Base game assets"},{name:"pak0.pak@baseq2",checksum:2378051181,description:"Base game assets (baseq2)"},{name:"pak0.pak@rogue",checksum:3373211245,description:"Ground Zero (rogue) mission pack"},{name:"pak0.pak@xatrix",checksum:1358269824,description:"The Reckoning (xatrix) mission pack"}]),Mt=class extends Error{constructor(t){super(t.status==="unknown"?`Unknown PAK not allowed: ${t.name}`:`PAK checksum mismatch for ${t.name}`);this.result=t;this.name="PakValidationError"}},Nn=class{constructor(e=si){this.known=new Map;e.forEach(t=>this.known.set(this.normalizePakName(t.name),t))}validateArchive(e,t){let n=this.normalizePakName(t??("name"in e?e.name:"unknown")),o=e.checksum,i="size"in e?e.size:void 0,s=this.known.get(n);return s?s.checksum!==o?{name:n,checksum:o,expectedChecksum:s.checksum,status:"mismatch",size:i,description:s.description}:{name:n,checksum:o,expectedChecksum:s.checksum,status:"valid",size:i,description:s.description}:{name:n,checksum:o,status:"unknown",size:i}}assertValid(e,t){let n=this.validateArchive(e,t);if(n.status==="mismatch")throw new Mt(n);return n}normalizePakName(e){let t=X(e),n=t.split("/"),o=n.pop()??t,i=n.pop();return i?`${o}@${i}`:o}};var ot=class extends Error{constructor(t,n){super(`Failed to ingest PAK: ${t}`);this.file=t;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function wc(r,e){if(typeof r.arrayBuffer=="function"){let t=await r.arrayBuffer();return e?.({file:"blob",loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}if(typeof FileReader<"u")return new Promise((t,n)=>{let o=new FileReader;o.onerror=()=>n(o.error??new Error("Unknown FileReader error")),o.onprogress=i=>{e?.({file:"blob",loadedBytes:i.loaded,totalBytes:i.total||r.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?t(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(r)});if(typeof Response<"u"){let t=await new Response(r).arrayBuffer();return e?.({file:"blob",loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}if(typeof r.stream=="function"){let t=r.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await t.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:r.size,state:"reading"})}let i=new Uint8Array(o),s=0;for(let a of n)i.set(a,s),s+=a.byteLength;return i.buffer}throw new ot("blob",new Error("Unsupported Blob type"))}async function Lc(r,e){if(r.data instanceof ArrayBuffer)return e?.({file:r.name,loadedBytes:r.data.byteLength,totalBytes:r.data.byteLength,state:"reading"}),r.data;if(r.data instanceof Blob){let n=r.data.size;return wc(r.data,o=>e?.({...o,file:r.name,totalBytes:n}))}let t=r.data.buffer.slice(r.data.byteOffset,r.data.byteOffset+r.data.byteLength);return e?.({file:r.name,loadedBytes:t.byteLength,totalBytes:t.byteLength,state:"reading"}),t}async function Vn(r,e,t){let n=typeof t=="function"?{onProgress:t}:t??{},o=n.persistIndexes??!!n.pakIndexStore,i=n.enforceValidation??!!n.validator,s=n.allowUnknownPaks??!0,a=n.stopOnError??!1,c=[];for(let l of e)try{let u=await Lc(l,n.onProgress),d=qt.fromArrayBuffer(l.name,u),m=n.validator?.validateArchive(d);if(m){n.onValidationResult?.(m);let p=m.status==="mismatch",h=m.status==="unknown";if(p&&i||h&&!s){let y=new Mt(m);if(n.onError?.(l.name,y),a)throw new ot(l.name,y);c.push({archive:d,mounted:!1,validation:m});continue}}if(r.mountPak(d),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(d)}catch(p){if(n.onError?.(l.name,p),a)throw new ot(l.name,p)}n.onProgress?.({file:l.name,loadedBytes:u.byteLength,totalBytes:u.byteLength,state:"parsed"}),c.push({archive:d,mounted:!0,validation:m})}catch(u){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,u),a)throw new ot(l.name,u)}return c}var it=class{constructor(e){this.capacity=e;this.map=new Map;if(e<=0)throw new RangeError("LRU cache capacity must be greater than zero")}get size(){return this.map.size}has(e){return this.map.has(e)}get(e){let t=this.map.get(e);if(t!==void 0)return this.map.delete(e),this.map.set(e,t),t}set(e,t){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,t),this.map.size>this.capacity){let n=this.map.keys().next();n.done||this.map.delete(n.value)}}delete(e){return this.map.delete(e)}clear(){this.map.clear()}entries(){return Array.from(this.map.entries()).reverse().map(([e,t])=>({key:e,value:t}))}};function Cc(r){return Array.isArray(r)?r:Array.from(r)}function ai(r){return Cc(r).map(e=>({name:e.name,data:e}))}async function Es(r,e,t){let n=ai(e);return Vn(r,n,t??{})}function Ts(r,e){let t=o=>{o.preventDefault(),o.dataTransfer?.dropEffect&&(o.dataTransfer.dropEffect="copy")},n=o=>{o.preventDefault();let i=o.dataTransfer?.files;i&&i.length>0&&e(Array.from(i))};return r.addEventListener("dragover",t),r.addEventListener("drop",n),()=>{r.removeEventListener("dragover",t),r.removeEventListener("drop",n)}}function zs(r,e){let t=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return r.addEventListener("change",t),()=>r.removeEventListener("change",t)}var Ec=844121161,Tc=8,Fs=68,zc=[{x:-.525731,y:0,z:.850651},{x:-.442863,y:.238856,z:.864188},{x:-.295242,y:0,z:.955423},{x:-.309017,y:.5,z:.809017},{x:-.16246,y:.262866,z:.951056},{x:0,y:0,z:1},{x:0,y:.850651,z:.525731},{x:-.147621,y:.716567,z:.681718},{x:.147621,y:.716567,z:.681718},{x:0,y:.525731,z:.850651},{x:.309017,y:.5,z:.809017},{x:.525731,y:0,z:.850651},{x:.295242,y:0,z:.955423},{x:.442863,y:.238856,z:.864188},{x:.16246,y:.262866,z:.951056},{x:-.681718,y:.147621,z:.716567},{x:-.809017,y:.309017,z:.5},{x:-.587785,y:.425325,z:.688191},{x:-.850651,y:.525731,z:0},{x:-.864188,y:.442863,z:.238856},{x:-.716567,y:.681718,z:.147621},{x:-.688191,y:.587785,z:.425325},{x:-.5,y:.809017,z:.309017},{x:-.238856,y:.864188,z:.442863},{x:-.425325,y:.688191,z:.587785},{x:-.716567,y:.681718,z:-.147621},{x:-.5,y:.809017,z:-.309017},{x:-.525731,y:.850651,z:0},{x:0,y:.850651,z:-.525731},{x:-.238856,y:.864188,z:-.442863},{x:0,y:.955423,z:-.295242},{x:-.262866,y:.951056,z:-.16246},{x:0,y:1,z:0},{x:0,y:.955423,z:.295242},{x:-.262866,y:.951056,z:.16246},{x:.238856,y:.864188,z:.442863},{x:.262866,y:.951056,z:.16246},{x:.5,y:.809017,z:.309017},{x:.238856,y:.864188,z:-.442863},{x:.262866,y:.951056,z:-.16246},{x:.5,y:.809017,z:-.309017},{x:.850651,y:.525731,z:0},{x:.716567,y:.681718,z:.147621},{x:.716567,y:.681718,z:-.147621},{x:.525731,y:.850651,z:0},{x:.425325,y:.688191,z:.587785},{x:.864188,y:.442863,z:.238856},{x:.688191,y:.587785,z:.425325},{x:.809017,y:.309017,z:.5},{x:.681718,y:.147621,z:.716567},{x:.587785,y:.425325,z:.688191},{x:.955423,y:.295242,z:0},{x:1,y:0,z:0},{x:.951056,y:.16246,z:.262866},{x:.850651,y:-.525731,z:0},{x:.955423,y:-.295242,z:0},{x:.864188,y:-.442863,z:.238856},{x:.951056,y:-.16246,z:.262866},{x:.809017,y:-.309017,z:.5},{x:.681718,y:-.147621,z:.716567},{x:.850651,y:0,z:.525731},{x:.864188,y:.442863,z:-.238856},{x:.809017,y:.309017,z:-.5},{x:.951056,y:.16246,z:-.262866},{x:.525731,y:0,z:-.850651},{x:.681718,y:.147621,z:-.716567},{x:.681718,y:-.147621,z:-.716567},{x:.850651,y:0,z:-.525731},{x:.809017,y:-.309017,z:-.5},{x:.864188,y:-.442863,z:-.238856},{x:.951056,y:-.16246,z:-.262866},{x:.147621,y:.716567,z:-.681718},{x:.309017,y:.5,z:-.809017},{x:.425325,y:.688191,z:-.587785},{x:.442863,y:.238856,z:-.864188},{x:.587785,y:.425325,z:-.688191},{x:.688191,y:.587785,z:-.425325},{x:-.147621,y:.716567,z:-.681718},{x:-.309017,y:.5,z:-.809017},{x:0,y:.525731,z:-.850651},{x:-.525731,y:0,z:-.850651},{x:-.442863,y:.238856,z:-.864188},{x:-.295242,y:0,z:-.955423},{x:-.16246,y:.262866,z:-.951056},{x:0,y:0,z:-1},{x:.295242,y:0,z:-.955423},{x:.16246,y:.262866,z:-.951056},{x:-.442863,y:-.238856,z:-.864188},{x:-.309017,y:-.5,z:-.809017},{x:-.16246,y:-.262866,z:-.951056},{x:0,y:-.850651,z:-.525731},{x:-.147621,y:-.716567,z:-.681718},{x:.147621,y:-.716567,z:-.681718},{x:0,y:-.525731,z:-.850651},{x:.309017,y:-.5,z:-.809017},{x:.442863,y:-.238856,z:-.864188},{x:.16246,y:-.262866,z:-.951056},{x:.238856,y:-.864188,z:-.442863},{x:.5,y:-.809017,z:-.309017},{x:.425325,y:-.688191,z:-.587785},{x:.716567,y:-.681718,z:-.147621},{x:.688191,y:-.587785,z:-.425325},{x:.587785,y:-.425325,z:-.688191},{x:0,y:-.955423,z:-.295242},{x:0,y:-1,z:0},{x:.262866,y:-.951056,z:-.16246},{x:0,y:-.850651,z:.525731},{x:0,y:-.955423,z:.295242},{x:.238856,y:-.864188,z:.442863},{x:.262866,y:-.951056,z:.16246},{x:.5,y:-.809017,z:.309017},{x:.716567,y:-.681718,z:.147621},{x:.525731,y:-.850651,z:0},{x:-.238856,y:-.864188,z:-.442863},{x:-.5,y:-.809017,z:-.309017},{x:-.262866,y:-.951056,z:-.16246},{x:-.850651,y:-.525731,z:0},{x:-.716567,y:-.681718,z:-.147621},{x:-.716567,y:-.681718,z:.147621},{x:-.525731,y:-.850651,z:0},{x:-.5,y:-.809017,z:.309017},{x:-.238856,y:-.864188,z:.442863},{x:-.262866,y:-.951056,z:.16246},{x:-.864188,y:-.442863,z:.238856},{x:-.809017,y:-.309017,z:.5},{x:-.688191,y:-.587785,z:.425325},{x:-.681718,y:-.147621,z:.716567},{x:-.442863,y:-.238856,z:.864188},{x:-.587785,y:-.425325,z:.688191},{x:-.309017,y:-.5,z:.809017},{x:-.147621,y:-.716567,z:.681718},{x:-.425325,y:-.688191,z:.587785},{x:-.16246,y:-.262866,z:.951056},{x:.442863,y:-.238856,z:.864188},{x:.16246,y:-.262866,z:.951056},{x:.309017,y:-.5,z:.809017},{x:.147621,y:-.716567,z:.681718},{x:0,y:-.525731,z:.850651},{x:.425325,y:-.688191,z:.587785},{x:.587785,y:-.425325,z:.688191},{x:.688191,y:-.587785,z:.425325},{x:-.955423,y:.295242,z:0},{x:-.951056,y:.16246,z:.262866},{x:-1,y:0,z:0},{x:-.850651,y:0,z:.525731},{x:-.955423,y:-.295242,z:0},{x:-.951056,y:-.16246,z:.262866},{x:-.864188,y:.442863,z:-.238856},{x:-.951056,y:.16246,z:-.262866},{x:-.809017,y:.309017,z:-.5},{x:-.864188,y:-.442863,z:-.238856},{x:-.951056,y:-.16246,z:-.262866},{x:-.809017,y:-.309017,z:-.5},{x:-.681718,y:.147621,z:-.716567},{x:-.681718,y:-.147621,z:-.716567},{x:-.850651,y:0,z:-.525731},{x:-.688191,y:.587785,z:-.425325},{x:-.587785,y:.425325,z:-.688191},{x:-.425325,y:.688191,z:-.587785},{x:-.425325,y:-.688191,z:-.587785},{x:-.587785,y:-.425325,z:-.688191},{x:-.688191,y:-.587785,z:-.425325}],j=class extends Error{},Kt=class{constructor(e){this.vfs=e}async load(e){let t=await this.vfs.readFile(e),n=new Uint8Array(t.byteLength);return n.set(t),ci(n.buffer)}};function Ps(r,e,t){let n=[];for(let o=0;o<t;o+=1){let i=r.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function Lr(r,e,t,n){if(t!==0&&(e<Fs||e+t>r.byteLength))throw new j(`${n} section is out of bounds`)}function Fc(r){if(r.byteLength<Fs)throw new j("MD2 buffer too small to contain header");let e=new DataView(r),t=e.getInt32(0,!0),n=e.getInt32(4,!0);if(t!==Ec)throw new j(`Invalid MD2 ident: ${t}`);if(n!==Tc)throw new j(`Unsupported MD2 version: ${n}`);let o={ident:t,version:n,skinWidth:e.getInt32(8,!0),skinHeight:e.getInt32(12,!0),frameSize:e.getInt32(16,!0),numSkins:e.getInt32(20,!0),numVertices:e.getInt32(24,!0),numTexCoords:e.getInt32(28,!0),numTriangles:e.getInt32(32,!0),numGlCommands:e.getInt32(36,!0),numFrames:e.getInt32(40,!0),offsetSkins:e.getInt32(44,!0),offsetTexCoords:e.getInt32(48,!0),offsetTriangles:e.getInt32(52,!0),offsetFrames:e.getInt32(56,!0),offsetGlCommands:e.getInt32(60,!0),offsetEnd:e.getInt32(64,!0)},i=40+o.numVertices*4;if(o.frameSize!==i)throw new j(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>r.byteLength)throw new j("MD2 offset_end exceeds buffer length");return o}function Pc(r,e){let t=e.numSkins*64;Lr(r,e.offsetSkins,t,"skins");let n=new DataView(r,e.offsetSkins,t),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ps(n,i*64,64)});return o}function Ic(r,e){let t=e.numTexCoords*4;Lr(r,e.offsetTexCoords,t,"texcoords");let n=new DataView(r,e.offsetTexCoords,t),o=[];for(let i=0;i<e.numTexCoords;i+=1){let s=i*4;o.push({s:n.getInt16(s,!0),t:n.getInt16(s+2,!0)})}return o}function Rc(r,e){let t=e.numTriangles*12;Lr(r,e.offsetTriangles,t,"triangles");let n=new DataView(r,e.offsetTriangles,t),o=[];for(let i=0;i<e.numTriangles;i+=1){let s=i*12,a=[n.getUint16(s,!0),n.getUint16(s+2,!0),n.getUint16(s+4,!0)],c=[n.getUint16(s+6,!0),n.getUint16(s+8,!0),n.getUint16(s+10,!0)];if(a.some(l=>l>=e.numVertices)||c.some(l=>l>=e.numTexCoords))throw new j("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function kc(r,e){let t=e.numFrames*e.frameSize;Lr(r,e.offsetFrames,t,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(r,i,e.frameSize),a={x:s.getFloat32(0,!0),y:s.getFloat32(4,!0),z:s.getFloat32(8,!0)},c={x:s.getFloat32(12,!0),y:s.getFloat32(16,!0),z:s.getFloat32(20,!0)},l=Ps(s,24,16),u=[];for(let d=0;d<e.numVertices;d+=1){let m=40+d*4,p={x:s.getUint8(m)*a.x+c.x,y:s.getUint8(m+1)*a.y+c.y,z:s.getUint8(m+2)*a.z+c.z},h=s.getUint8(m+3),y=zc[h];if(!y)throw new j(`Invalid normal index ${h} in frame ${l}`);u.push({position:p,normalIndex:h,normal:y})}n.push({name:l,vertices:u})}return n}function Dc(r,e){let t=e.numGlCommands*4;if(Lr(r,e.offsetGlCommands,t,"gl commands"),t===0)return[];let n=new DataView(r,e.offsetGlCommands,t),o=[],i=0;for(;;){if(i+4>t)throw new j("GL command list ended unexpectedly");let s=n.getInt32(i,!0);if(i+=4,s===0)break;let a=Math.abs(s),c=[],l=a*12;if(i+l>t)throw new j("GL command vertex block exceeds buffer");for(let u=0;u<a;u+=1){let d=n.getFloat32(i,!0),m=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new j("GL command references invalid vertex index");c.push({s:d,t:m,vertexIndex:p})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==t)throw new j("GL command list did not consume expected data");return o}function ci(r){let e=Fc(r),t=Pc(r,e),n=Ic(r,e),o=Rc(r,e),i=kc(r,e),s=Dc(r,e);return{header:e,skins:t,texCoords:n,triangles:o,frames:i,glCommands:s}}function Is(r){let e=[],t=0;for(;t<r.length;){let n=r[t].name,o=n.replace(/\d+$/,"")||n,i=t;for(;i+1<r.length&&(r[i+1].name.replace(/\d+$/,"")||r[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:t,lastFrame:i}),t=i+1}return e}var Rs=860898377,Hc=15,xe=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Cr(r,e,t){let n=new Uint8Array(r.buffer,r.byteOffset+e,t);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function Oc(r){let e=(r>>8&255)*(2*Math.PI/255),t=(r&255)*(2*Math.PI/255),n=Math.sin(t);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(t)}}function Un(r,e,t,n){if(e<0||e+t>n)throw new xe(`${r} exceeds buffer bounds`)}function Bc(r){let e=r.getInt32(0,!0);if(e!==Rs)throw new xe(`Invalid MD3 ident: ${e}`);let t=r.getInt32(4,!0);if(t!==Hc)throw new xe(`Unsupported MD3 version: ${t}`);let n=Cr(r,8,64),o=r.getInt32(72,!0),i=r.getInt32(76,!0),s=r.getInt32(80,!0),a=r.getInt32(84,!0),c=r.getInt32(88,!0),l=r.getInt32(92,!0),u=r.getInt32(96,!0),d=r.getInt32(100,!0),m=r.getInt32(104,!0);if(i<=0||a<0||s<0)throw new xe("Invalid MD3 counts");return{ident:e,version:t,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:u,ofsSurfaces:d,ofsEnd:m}}function Nc(r,e){let t=[];Un("Frames",e.ofsFrames,e.numFrames*56,r.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;t.push({minBounds:{x:r.getFloat32(i,!0),y:r.getFloat32(i+4,!0),z:r.getFloat32(i+8,!0)},maxBounds:{x:r.getFloat32(i+12,!0),y:r.getFloat32(i+16,!0),z:r.getFloat32(i+20,!0)},localOrigin:{x:r.getFloat32(i+24,!0),y:r.getFloat32(i+28,!0),z:r.getFloat32(i+32,!0)},radius:r.getFloat32(i+36,!0),name:Cr(r,i+40,16)})}return t}function Vc(r,e){let t=[],o=e.numFrames*e.numTags*112;Un("Tags",e.ofsTags,o,r.byteLength);for(let i=0;i<e.numFrames;i+=1){let s=[];for(let a=0;a<e.numTags;a+=1){let c=e.ofsTags+(i*e.numTags+a)*112,l=c+64,u=l+12;s.push({name:Cr(r,c,64),origin:{x:r.getFloat32(l,!0),y:r.getFloat32(l+4,!0),z:r.getFloat32(l+8,!0)},axis:[{x:r.getFloat32(u,!0),y:r.getFloat32(u+4,!0),z:r.getFloat32(u+8,!0)},{x:r.getFloat32(u+12,!0),y:r.getFloat32(u+16,!0),z:r.getFloat32(u+20,!0)},{x:r.getFloat32(u+24,!0),y:r.getFloat32(u+28,!0),z:r.getFloat32(u+32,!0)}]})}t.push(s)}return t}function Uc(r,e){let t=r.getInt32(e,!0);if(t!==Rs)throw new xe(`Invalid surface ident at ${e}: ${t}`);let n=Cr(r,e+4,64),o=r.getInt32(e+68,!0),i=r.getInt32(e+72,!0),s=r.getInt32(e+76,!0),a=r.getInt32(e+80,!0),c=r.getInt32(e+84,!0),l=r.getInt32(e+88,!0),u=r.getInt32(e+92,!0),d=r.getInt32(e+96,!0),m=r.getInt32(e+100,!0),p=r.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new xe(`Invalid surface counts for ${n}`);let h=p;Un(`Surface ${n}`,e,h,r.byteLength);let y=[],g=e+l;for(let N=0;N<c;N+=1){let K=g+N*12;y.push({indices:[r.getInt32(K,!0),r.getInt32(K+4,!0),r.getInt32(K+8,!0)]})}let b=[],L=e+u;for(let N=0;N<s;N+=1){let K=L+N*68;b.push({name:Cr(r,K,64),shaderIndex:r.getInt32(K+64,!0)})}let C=[],W=e+d;for(let N=0;N<a;N+=1){let K=W+N*8;C.push({s:r.getFloat32(K,!0),t:r.getFloat32(K+4,!0)})}let H=[],Le=e+m;for(let N=0;N<i;N+=1){let K=[];for(let Ie=0;Ie<a;Ie+=1){let Ce=Le+(N*a+Ie)*8,et=r.getInt16(Ce,!0)/64,vr=r.getInt16(Ce+2,!0)/64,Ut=r.getInt16(Ce+4,!0)/64,tt=r.getUint16(Ce+6,!0);K.push({position:{x:et,y:vr,z:Ut},latLng:tt,normal:Oc(tt)})}H.push(K)}return{surface:{name:n,flags:o,numFrames:i,shaders:b,triangles:y,texCoords:C,vertices:H},nextOffset:e+p}}function li(r){if(r.byteLength<108)throw new xe("MD3 buffer too small for header");let e=new DataView(r),t=Bc(e);Un("MD3 end",t.ofsEnd,0,r.byteLength);let n=Nc(e,t),o=Vc(e,t),i=[],s=t.ofsSurfaces;for(let a=0;a<t.numSurfaces;a+=1){let{surface:c,nextOffset:l}=Uc(e,s);i.push(c),s=l}if(s!==t.ofsEnd)throw new xe("Surface parsing did not reach ofsEnd");return{header:t,frames:n,tags:o,surfaces:i}}var Yt=class{constructor(e){this.vfs=e}async load(e){let t=await this.vfs.readFile(e);return li(t.slice().buffer)}};function ks(r,e){let t=(r.sequence.end-r.sequence.start+1)/r.sequence.fps,n=r.sequence.loop!==!1,o=r.time+e;return n?o=(o%t+t)%t:o>t&&(o=t),{...r,time:Math.max(0,Math.min(o,t))}}function Ds(r){let e=r.sequence.end-r.sequence.start+1,t=1/r.sequence.fps,n=r.sequence.loop!==!1,o=r.time/t;if(!n&&o>=e)return{frame:r.sequence.end,nextFrame:r.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=r.sequence.start+s,c=s+1>=e?n?r.sequence.start:r.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function Hs(r){return{sequence:r,time:0}}function Os(r,e,t){return{x:r.x+(e.x-r.x)*t,y:r.y+(e.y-r.y)*t,z:r.z+(e.z-r.z)*t}}var Er=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Gn(r){if(r.byteLength<100)throw new Er("WAL buffer too small");let e=new DataView(r),t=new Uint8Array(r,0,32),n=new TextDecoder("utf-8").decode(t).replace(/\0.*$/,"").trim(),o=e.getInt32(32,!0),i=e.getInt32(36,!0),s=[e.getInt32(40,!0),e.getInt32(44,!0),e.getInt32(48,!0),e.getInt32(52,!0)],a=new Uint8Array(r,56,32),c=new TextDecoder("utf-8").decode(a).replace(/\0.*$/,"").trim(),l=e.getInt32(88,!0),u=e.getInt32(92,!0),d=e.getInt32(96,!0);if(o<=0||i<=0)throw new Er("Invalid WAL dimensions");let m=[],p=o,h=i;for(let y=0;y<s.length;y+=1){let g=s[y],b=Math.max(1,p*h|0);if(g<=0||g+b>r.byteLength)throw new Er(`Invalid WAL mip offset for level ${y}`);let L=new Uint8Array(r,g,b);m.push({level:y,width:p,height:h,data:L}),p=Math.max(1,p>>1),h=Math.max(1,h>>1)}return{name:n,width:o,height:i,mipmaps:m,animName:c,flags:l,contents:u,value:d}}var wt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function Bs(r){if(r.byteLength<128)throw new wt("PCX buffer too small for header");let e=new DataView(r),t=e.getUint8(0),n=e.getUint8(2),o=e.getUint8(3),i=e.getUint16(4,!0),s=e.getUint16(6,!0),a=e.getUint16(8,!0),c=e.getUint16(10,!0);if(t!==10||n!==1)throw new wt("Unsupported PCX encoding");if(o!==8)throw new wt("Only 8bpp PCX files are supported");let l=a-i+1,u=c-s+1,d=e.getUint16(66,!0),m=r.byteLength-769;if(m<128||new DataView(r,m,1).getUint8(0)!==12)throw new wt("Missing PCX palette");let p=new Uint8Array(r,m+1,768),h=new Uint8Array(r,128,m-128),y=new Uint8Array(l*u),g=0,b=0;for(let L=0;L<u;L+=1){let C=0;for(;C<d&&g<h.length;){let W=1,H=h[g++];if((H&192)===192){if(W=H&63,g>=h.length)throw new wt("Unexpected end of PCX RLE data");H=h[g++]}for(let Le=0;Le<W&&C<d;Le+=1)C<l&&(y[b++]=H),C+=1}}return{width:l,height:u,bitsPerPixel:o,pixels:y,palette:p}}function Wn(r){let e=new Uint8Array(r.width*r.height*4);for(let t=0;t<r.pixels.length;t+=1){let n=r.pixels[t],o=n*3,i=t*4;e[i]=r.palette[o],e[i+1]=r.palette[o+1],e[i+2]=r.palette[o+2],e[i+3]=n===255?0:255}return e}var jt=class{constructor(e={}){this.cache=new it(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,t){this.cache.set(e.toLowerCase(),t)}clear(){this.cache.clear()}};function ui(r,e){let t=[];for(let n of r.mipmaps){let o=new Uint8Array(n.width*n.height*4);for(let i=0;i<n.data.length;i+=1){let s=n.data[i],a=s*3,c=i*4;o[c]=e[a],o[c+1]=e[a+1],o[c+2]=e[a+2],o[c+3]=s===255?0:255}t.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:r.width,height:r.height,levels:t,source:"wal"}}function Ns(r){let e=Wn(r),t={level:0,width:r.width,height:r.height,rgba:e};return{width:r.width,height:r.height,levels:[t],source:"pcx"}}function Vs(r,e){return ui(Gn(r),e)}var Lt=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function di(r,e,t){return new TextDecoder("ascii").decode(new Uint8Array(r.buffer,r.byteOffset+e,t))}function Xn(r){if(r.byteLength<44)throw new Lt("WAV buffer too small");let e=new DataView(r);if(di(e,0,4)!=="RIFF"||di(e,8,4)!=="WAVE")throw new Lt("Invalid WAV header");let t=12,n=-1,o=-1,i=0,s=0;for(;t+8<=r.byteLength;){let h=di(e,t,4),y=e.getUint32(t+4,!0),g=t+8;h==="fmt "?(n=g,i=y):h==="data"&&(o=g,s=y),t=g+y}if(n===-1||o===-1)throw new Lt("Missing fmt or data chunk");let a=e.getUint16(n,!0),c=e.getUint16(n+2,!0),l=e.getUint32(n+4,!0),u=e.getUint16(n+14,!0);if(a!==1)throw new Lt("Only PCM WAV is supported");let d=u/8,m=s/(d*c),p=new Float32Array(m*c);for(let h=0;h<m;h+=1)for(let y=0;y<c;y+=1){let g=h*c+y,b=o+g*d,L=0;if(u===8)L=e.getUint8(b),p[g]=(L-128)/128;else if(u===16)L=e.getInt16(b,!0),p[g]=L/32768;else if(u===24){let C=e.getUint8(b),W=e.getUint8(b+1),H=e.getInt8(b+2);L=C|W<<8|H<<16,p[g]=L/8388608}else throw new Lt(`Unsupported bitsPerSample: ${u}`)}return{sampleRate:l,channels:c,bitsPerSample:u,samples:p}}var Gc=(r,e=4294967295,t=79764919)=>{let n=new Int32Array(256),o,i,s,a=e;for(o=0;o<256;o++){for(s=o<<24,i=8;i>0;--i)s=2147483648&s?s<<1^t:s<<1;n[o]=s}for(o=0;o<r.length;o++)a=a<<8^n[255&(a>>24^r[o])];return a};var mi=(r,e=Gc)=>{let t=g=>new Uint8Array(g.length/2).map(((b,L)=>parseInt(g.substring(2*L,2*(L+1)),16))),n=g=>t(g)[0],o=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((g,b)=>o.set(g,b)));let i=new Uint8Array(r.length),s,a,c,l=!1,u=0,d=42,m=r.length>13&&r.substring(0,9)==="dynEncode",p=0;m&&(p=11,a=n(r.substring(9,p)),a<=1&&(p+=2,d=n(r.substring(11,p))),a===1&&(p+=8,c=(g=>new DataView(t(g).buffer).getInt32(0,!0))(r.substring(13,p))));let h=256-d;for(let g=p;g<r.length;g++)if(s=r.charCodeAt(g),s!==61||l){if(s===92&&g<r.length-5&&m){let b=r.charCodeAt(g+1);b!==117&&b!==85||(s=parseInt(r.substring(g+2,g+6),16),g+=5)}if(s>255){let b=o.get(s);b&&(s=b+127)}l&&(l=!1,s-=64),i[u++]=s<d&&s>0?s+h:s-d}else l=!0;let y=i.subarray(0,u);if(m&&a===1){let g=e(y);if(g!==c){let b="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",b+`
|
|
2
2
|
`,"Expected: "+c+"; Got: "+g+`
|
|
3
|
-
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(b)}}return y};function H(){let r=Uint8Array,e=Float32Array;H.modules||Object.defineProperties(H,{modules:{value:new WeakMap},setModule:{value(t,n){H.modules.set(t,Promise.resolve(n))}},getModule:{value(t,n){let o=H.modules.get(t);return o||(n?o=WebAssembly.compile(mi(n)):(n=t.wasm,o=H.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),H.modules.set(t,o)),o}},concatFloat32:{value(t,n){let o=new e(n),i=0,s=0;for(;i<t.length;)o.set(t[i],s),s+=t[i++].length;return o}},getDecodedAudio:{value:(t,n,o,i,s)=>({errors:t,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(t,n,o,i,s,a){let c=[],l,u;for(l=0;l<o;l++){let d=[];for(u=0;u<n.length;)d.push(n[u++][l]||[]);c.push(H.concatFloat32(d,i))}return H.getDecodedAudio(t,c,i,s,a)}},inflateDynEncodeString:{value(t){return t=mi(t),new Promise(n=>{let o=String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;H.getModule(H,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new r(c),u=new DataView(c),d=s.get("__heap_base"),m=t.length,p=d;d+=4,u.setInt32(p,m,!0);let h=d;d+=m,l.set(t,h);let y=d;d+=4,u.setInt32(y,l.byteLength-d,!0),a(d,y,h,p),n(l.slice(d,d+u.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(t,n,o)=>{let i=[],s=0;for(;s<n;)i.push(t.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(t,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*t);return o&&this._pointers.add(i),{ptr:i,len:t,buf:new n(this._wasm.HEAP,i,t)}},this.free=()=>{this._pointers.forEach(t=>{this._wasm.free(t)}),this._pointers.clear()},this.codeToString=t=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[t];i!==0;i=o[++t])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(t,n,o,i,s,a)=>{t.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(t,n)=>(n&&H.setModule(t,n),this._wasm=new t(H).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Ws=nc(Gs(),1);var Wc=()=>globalThis.Worker||Ws.default,$t=class extends Wc(){constructor(e,t,n,o){H.modules||new H;let i=H.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,u,d)=>{let m,p,h=new Promise(y=>{p=y});self.onmessage=({data:{id:y,command:g,data:b}})=>{let C=h,L={id:y},q;g==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:u},EmscriptenWASM:{value:d},module:{value:b.module},isWebWorker:{value:!0}}),m=new l(b.options),p()):g==="free"?m.free():g==="ready"?C=C.then(()=>m.ready):g==="reset"?C=C.then(()=>m.reset()):(Object.assign(L,m[g](Array.isArray(b)?b.map(G=>new Uint8Array(G)):new Uint8Array(b))),q=L.channelData?L.channelData.map(G=>G.buffer):[]),C.then(()=>self.postMessage(L,q))}}).toString()})(${n}, ${H}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),H.modules.set(n,i)}super(i,{name:t}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o(H).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,t){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:t}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var qn=(r,e)=>{Object.defineProperty(r,"name",{value:e})};var O=Symbol,Xs=", ",_=(()=>{let r="front",e="side",t="rear",n="left",o="center",i="right";return["",r+" ",e+" ",t+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(Xs)))})(),ke="LFE",st="monophonic (mono)",at="stereo",Er="surround",N=(r,...e)=>`${[st,at,`linear ${Er}`,"quadraphonic",`5.0 ${Er}`,`5.1 ${Er}`,`6.1 ${Er}`,`7.1 ${Er}`][r-1]} (${e.join(Xs)})`,Tr=[st,N(2,_[0][0]),N(3,_[0][2]),N(4,_[1][0],_[3][0]),N(5,_[1][2],_[3][0]),N(6,_[1][2],_[3][0],ke),N(7,_[1][2],_[2][0],_[3][4],ke),N(8,_[1][2],_[2][0],_[3][0],ke)],qs=192e3,Ks=176400,Kn=96e3,Yn=88200,Ys=64e3,ct=48e3,Jt=44100,Qt=32e3,Zt=24e3,er=22050,tr=16e3,jn=12e3,$n=11025,rr=8e3,js=7350,Te="absoluteGranulePosition",w="bandwidth",Q="bitDepth",Z="bitrate",zr=Z+"Maximum",Fr=Z+"Minimum",Pr=Z+"Nominal",De="buffer",Ir=De+"Fullness",D="codec",ee=D+"Frames",Rr="coupledStreamCount",nr="crc",kr=nr+"16",Dr=nr+"32",k="data",S="description",He="duration",or="emphasis",Hr="hasOpusPadding",ue="header",lt="isContinuedPacket",Or="isCopyrighted",ut="isFirstPage",Br="isHome",de="isLastPage",Ue="isOriginal",Ge="isPrivate",Nr="isVbr",ae="layer",f="length",M="mode",We=M+"Extension",Jn="mpeg",Xe=Jn+"Version",Vr="numberAACFrames",Ur="outputGain",Ct="preSkip",Gr="profile",Qn=O(),qe="protection",fi="rawData",be="segments",E="subarray",dt="version",Et="vorbis",Wr=Et+"Comments",ir=Et+"Setup",Zn="block",Xr=Zn+"ingStrategy",eo=O(),Ke=Zn+"Size",mt=Zn+"size0",ft=Zn+"size1",qr=O(),to="channel",Ye=to+"MappingFamily",Kr=to+"MappingTable",te=to+"Mode",Yr=O(),v=to+"s",$s="copyright",jr=$s+"Id",$r=$s+"IdStart",je="frame",$e=je+"Count",ce=je+"Length",ro="Number",Je=je+ro,Oe=je+"Padding",A=je+"Size",Js="Rate",Jr="inputSample"+Js,pi="page",Tt=pi+"Checksum",sr=O(),pt=pi+"SegmentTable",X=pi+"Sequence"+ro,hi="sample",Qr=hi+ro,T=hi+Js,Be=O(),z=hi+"s",no="stream",Zr=no+"Count",en=no+"Info",Ne=no+"Serial"+ro,yi=no+"StructureVersion",gi="total",zt=gi+"BytesOut",Ft=gi+"Duration",Pt=gi+"Samples",F=O(),ve=O(),tn=O(),ht=O(),ze=O(),oo=O(),xi=O(),yt=O(),P=O(),Se=O(),_e=O(),Ve=O(),gt=O(),io=O(),Fe=O(),Pe=O(),Ae=O(),so=O(),re=Uint8Array,xt=DataView,I="reserved",ne="bad",ar="free",rn="none",ao="16bit CRC";var bi=(r,e,t)=>{for(let n=0;n<r[f];n++){let o=e(n);for(let i=8;i>0;i--)o=t(o);r[n]=o}return r},qc=bi(new re(256),r=>r,r=>r&128?7^r<<1:r<<1),V=[bi(new Uint16Array(256),r=>r<<8,r=>r<<1^(r&32768?32773:0))],U=[bi(new Uint32Array(256),r=>r,r=>r>>>1^(r&1)*3988292384)];for(let r=0;r<15;r++){V.push(new Uint16Array(256)),U.push(new Uint32Array(256));for(let e=0;e<=255;e++)V[r+1][e]=V[0][V[r][e]>>>8]^V[r][e]<<8,U[r+1][e]=U[r][e]>>>8^U[0][U[r][e]&255]}var Zs=r=>{let e=0,t=r[f];for(let n=0;n!==t;n++)e=qc[e^r[n]];return e},ea=r=>{let e=r[f],t=e-16,n=0,o=0;for(;o<=t;)n^=r[o++]<<8|r[o++],n=V[15][n>>8]^V[14][n&255]^V[13][r[o++]]^V[12][r[o++]]^V[11][r[o++]]^V[10][r[o++]]^V[9][r[o++]]^V[8][r[o++]]^V[7][r[o++]]^V[6][r[o++]]^V[5][r[o++]]^V[4][r[o++]]^V[3][r[o++]]^V[2][r[o++]]^V[1][r[o++]]^V[0][r[o++]];for(;o!==e;)n=(n&255)<<8^V[0][n>>8^r[o++]];return n},ta=r=>{let e=r[f],t=e-16,n=0,o=0;for(;o<=t;)n=U[15][(r[o++]^n)&255]^U[14][(r[o++]^n>>>8)&255]^U[13][(r[o++]^n>>>16)&255]^U[12][r[o++]^n>>>24]^U[11][r[o++]]^U[10][r[o++]]^U[9][r[o++]]^U[8][r[o++]]^U[7][r[o++]]^U[6][r[o++]]^U[5][r[o++]]^U[4][r[o++]]^U[3][r[o++]]^U[2][r[o++]]^U[1][r[o++]]^U[0][r[o++]];for(;o!==e;)n=U[0][(n^r[o++])&255]^n>>>8;return n^-1},on=(...r)=>{let e=new re(r.reduce((t,n)=>t+n[f],0));return r.reduce((t,n)=>(e.set(n,t),t+n[f]),0),e},me=r=>String.fromCharCode(...r),Qs=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],nn=r=>Qs[r&15]<<4|Qs[r>>4],co=class{constructor(e){this._data=e,this._pos=e[f]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let t=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(nn(this._data[t-1])<<8)+nn(this._data[t])>>7-n&255}},ra=(r,e)=>{try{return r.getBigInt64(e,!0)}catch{let t=r.getUint8(e+7)&128?-1:1,n=r.getUint32(e,!0),o=r.getUint32(e+4,!0);return t===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),t*(n+o*2**32)}};var sn=class{constructor(e,t){this._onCodecHeader=e,this._onCodecUpdate=t,this[Fe]()}[Pe](){this._isEnabled=!0}[Fe](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[io](e,t){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},t),this._codecShouldUpdate=!1}}[P](e){let t=this._headerCache.get(e);return t&&this._updateCurrentHeader(e),t}[Se](e,t,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...t}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,t),this._codecUpdateData.set(t,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var Y=new WeakMap,$=new WeakMap;var oe=class{constructor(e,t){this._codecParser=e,this._headerCache=t}*[xi](){let e;do{if(e=yield*this.Frame[_e](this._codecParser,this._headerCache,0),e)return e;this._codecParser[ve](1)}while(!0)}*[yt](e){let t=yield*this[xi](),n=$.get(t)[f];if(e||this._codecParser._flushing||(yield*this.Header[P](this._codecParser,this._headerCache,n)))return this._headerCache[Pe](),this._codecParser[ve](n),this._codecParser[ht](t),t;this._codecParser[ze](`Missing ${je} at ${n} bytes from current position.`,`Dropping current ${je} and trying again.`),this._headerCache[Fe](),this._codecParser[ve](1)}};var It=class{constructor(e,t){$.set(this,{[ue]:e}),this[k]=t}};var fe=class extends It{static*[_e](e,t,n,o,i){let s=yield*e[P](n,o,i);if(s){let a=Y.get(s)[ce],c=Y.get(s)[z],l=(yield*n[F](a,i))[E](0,a);return new t(s,l,c)}else return null}constructor(e,t,n){super(e,t),this[ue]=e,this[z]=n,this[He]=n/e[T]*1e3,this[Je]=null,this[zt]=null,this[Pt]=null,this[Ft]=null,$.get(this)[f]=t[f]}};var vi="unsynchronizationFlag",Si="extendedHeaderFlag",_i="experimentalFlag",Ai="footerPresent",an=class r{static*getID3v2Header(e,t,n){let i={},s=yield*e[F](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[F](10,n),i[dt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[vi]=!!(s[5]&128),i[Si]=!!(s[5]&64),i[_i]=!!(s[5]&32),i[Ai]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[f]=10+a,new r(i)}constructor(e){this[dt]=e[dt],this[vi]=e[vi],this[Si]=e[Si],this[_i]=e[_i],this[Ai]=e[Ai],this[f]=e[f]}};var pe=class{constructor(e){Y.set(this,e),this[Q]=e[Q],this[Z]=null,this[v]=e[v],this[te]=e[te],this[T]=e[T]}};var aa={0:[ar,ar,ar,ar,ar],16:[32,32,32,32,8],240:[ne,ne,ne,ne,ne]},lo=(r,e,t)=>8*((r+t)%e+e)*(1<<(r+t)/e)-8*e*(e/8|0);for(let r=2;r<15;r++)aa[r<<4]=[r*32,lo(r,4,0),lo(r,4,-1),lo(r,8,4),lo(r,8,0)];var Kc=0,Yc=1,jc=2,$c=3,na=4,uo="bands ",mo=" to 31",oa={0:uo+4+mo,16:uo+8+mo,32:uo+12+mo,48:uo+16+mo},Rt="bitrateIndex",cn="v2",go="v1",fo="Intensity stereo ",po=", MS stereo ",ho="on",yo="off",Jc={0:fo+yo+po+yo,16:fo+ho+po+yo,32:fo+yo+po+ho,48:fo+ho+po+ho},Mi={0:{[S]:I},2:{[S]:"Layer III",[Oe]:1,[We]:Jc,[go]:{[Rt]:jc,[z]:1152},[cn]:{[Rt]:na,[z]:576}},4:{[S]:"Layer II",[Oe]:1,[We]:oa,[z]:1152,[go]:{[Rt]:Yc},[cn]:{[Rt]:na}},6:{[S]:"Layer I",[Oe]:4,[We]:oa,[z]:384,[go]:{[Rt]:Kc},[cn]:{[Rt]:$c}}},wi="MPEG Version ",ia="ISO/IEC ",Qc={0:{[S]:`${wi}2.5 (later extension of MPEG 2)`,[ae]:cn,[T]:{0:$n,4:jn,8:rr,12:I}},8:{[S]:I},16:{[S]:`${wi}2 (${ia}13818-3)`,[ae]:cn,[T]:{0:er,4:Zt,8:tr,12:I}},24:{[S]:`${wi}1 (${ia}11172-3)`,[ae]:go,[T]:{0:Jt,4:ct,8:Qt,12:I}},length:f},Zc={0:ao,1:rn},el={0:rn,1:"50/15 ms",2:I,3:"CCIT J.17"},sa={0:{[v]:2,[S]:at},64:{[v]:2,[S]:"joint "+at},128:{[v]:2,[S]:"dual channel"},192:{[v]:1,[S]:st}},kt=class r extends pe{static*[P](e,t,n){let o={},i=yield*an.getID3v2Header(e,t,n);i&&(yield*e[F](i[f],n),e[ve](i[f]));let s=yield*e[F](4,n),a=me(s[E](0,4)),c=t[P](a);if(c)return new r(c);if(s[0]!==255||s[1]<224)return null;let l=Qc[s[1]&24];if(l[S]===I)return null;let u=s[1]&6;if(Mi[u][S]===I)return null;let d={...Mi[u],...Mi[u][l[ae]]};if(o[Xe]=l[S],o[ae]=d[S],o[z]=d[z],o[qe]=Zc[s[1]&1],o[f]=4,o[Z]=aa[s[2]&240][d[Rt]],o[Z]===ne||(o[T]=l[T][s[2]&12],o[T]===I)||(o[Oe]=s[2]&2&&d[Oe],o[Ge]=!!(s[2]&1),o[ce]=Math.floor(125*o[Z]*o[z]/o[T]+o[Oe]),!o[ce]))return null;let m=s[3]&192;if(o[te]=sa[m][S],o[v]=sa[m][v],o[We]=d[We][s[3]&48],o[Or]=!!(s[3]&8),o[Ue]=!!(s[3]&4),o[or]=el[s[3]&3],o[or]===I)return null;o[Q]=16;{let{length:p,frameLength:h,samples:y,...g}=o;t[Se](a,o,g)}return new r(o)}constructor(e){super(e),this[Z]=e[Z],this[or]=e[or],this[Oe]=e[Oe],this[Or]=e[Or],this[Ue]=e[Ue],this[Ge]=e[Ge],this[ae]=e[ae],this[We]=e[We],this[Xe]=e[Xe],this[qe]=e[qe]}};var ln=class r extends fe{static*[_e](e,t,n){return yield*super[_e](kt,r,e,t,n)}constructor(e,t,n){super(e,t,n)}};var un=class extends oe{constructor(e,t,n){super(e,t),this.Frame=ln,this.Header=kt,n(this[D])}get[D](){return Jn}*[Ve](){return yield*this[yt]()}};var tl={0:"MPEG-4",8:"MPEG-2"},rl={0:"valid",2:ne,4:ne,6:ne},nl={0:ao,1:rn},ol={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},il={0:Kn,4:Yn,8:Ys,12:ct,16:Jt,20:Qt,24:Zt,28:er,32:tr,36:jn,40:$n,44:rr,48:js,52:I,56:I,60:"frequency is written explicitly"},ca={0:{[v]:0,[S]:"Defined in AOT Specific Config"},64:{[v]:1,[S]:st},128:{[v]:2,[S]:N(2,_[0][0])},192:{[v]:3,[S]:N(3,_[1][3])},256:{[v]:4,[S]:N(4,_[1][3],_[3][4])},320:{[v]:5,[S]:N(5,_[1][3],_[3][0])},384:{[v]:6,[S]:N(6,_[1][3],_[3][0],ke)},448:{[v]:8,[S]:N(8,_[1][3],_[2][0],_[3][0],ke)}},Dt=class r extends pe{static*[P](e,t,n){let o={},i=yield*e[F](7,n),s=me([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=t[P](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[Xe]=tl[i[1]&8],o[ae]=rl[i[1]&6],o[ae]===ne))return null;let l=i[1]&1;o[qe]=nl[l],o[f]=l?7:9,o[Qn]=i[2]&192,o[Be]=i[2]&60;let u=i[2]&2;if(o[Gr]=ol[o[Qn]],o[T]=il[o[Be]],o[T]===I)return null;o[Ge]=!!u,o[Yr]=(i[2]<<8|i[3])&448,o[te]=ca[o[Yr]][S],o[v]=ca[o[Yr]][v],o[Ue]=!!(i[3]&32),o[Br]=!!(i[3]&8),o[jr]=!!(i[3]&8),o[$r]=!!(i[3]&4),o[Q]=16,o[z]=1024,o[Vr]=i[6]&3;{let{length:d,channelModeBits:m,profileBits:p,sampleRateBits:h,frameLength:y,samples:g,numberAACFrames:b,...C}=o;t[Se](s,o,C)}}if(o[ce]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[ce])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Ir]=c===2047?"VBR":c,new r(o)}constructor(e){super(e),this[jr]=e[jr],this[$r]=e[$r],this[Ir]=e[Ir],this[Br]=e[Br],this[Ue]=e[Ue],this[Ge]=e[Ge],this[ae]=e[ae],this[f]=e[f],this[Xe]=e[Xe],this[Vr]=e[Vr],this[Gr]=e[Gr],this[qe]=e[qe]}get audioSpecificConfig(){let e=Y.get(this),t=e[Qn]+64<<5|e[Be]<<5|e[Yr]>>3,n=new re(2);return new xt(n[De]).setUint16(0,t,!1),n}};var dn=class r extends fe{static*[_e](e,t,n){return yield*super[_e](Dt,r,e,t,n)}constructor(e,t,n){super(e,t,n)}};var mn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=dn,this.Header=Dt,n(this[D])}get[D](){return"aac"}*[Ve](){return yield*this[yt]()}};var bt=class r extends fe{static _getFrameFooterCrc16(e){return(e[e[f]-2]<<8)+e[e[f]-1]}static[so](e){let t=r._getFrameFooterCrc16(e),n=ea(e[E](0,-2));return t===n}constructor(e,t,n){t[en]=n,t[kr]=r._getFrameFooterCrc16(e),super(t,e,Y.get(t)[z])}};var la="get from STREAMINFO metadata block",sl={0:"Fixed",1:"Variable"},ua={0:I,16:192};for(let r=2;r<16;r++)ua[r<<4]=r<6?576*2**(r-2):2**r;var al={0:la,1:Yn,2:Ks,3:qs,4:rr,5:tr,6:er,7:Zt,8:Qt,9:Jt,10:ct,11:Kn,15:ne},cl={0:{[v]:1,[S]:st},16:{[v]:2,[S]:N(2,_[0][0])},32:{[v]:3,[S]:N(3,_[0][1])},48:{[v]:4,[S]:N(4,_[1][0],_[3][0])},64:{[v]:5,[S]:N(5,_[1][1],_[3][0])},80:{[v]:6,[S]:N(6,_[1][1],ke,_[3][0])},96:{[v]:7,[S]:N(7,_[1][1],ke,_[3][4],_[2][0])},112:{[v]:8,[S]:N(8,_[1][1],ke,_[3][0],_[2][0])},128:{[v]:2,[S]:`${at} (left, diff)`},144:{[v]:2,[S]:`${at} (diff, right)`},160:{[v]:2,[S]:`${at} (avg, diff)`},176:I,192:I,208:I,224:I,240:I},ll={0:la,2:8,4:12,6:I,8:16,10:20,12:24,14:I},vt=class r extends pe{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let t=1;for(let s=64;s&e[0];s>>=1)t++;let n=t-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>t)<<i,{value:o,length:t}}static[Ae](e,t){let n={[F]:function*(){return e}};return r[P](n,t,0).next().value}static*[P](e,t,n){let o=yield*e[F](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=me(o[E](0,4)),a=t[P](s);if(a)Object.assign(i,a);else{if(i[eo]=o[1]&1,i[Xr]=sl[i[eo]],i[qr]=o[2]&240,i[Be]=o[2]&15,i[Ke]=ua[i[qr]],i[Ke]===I||(i[T]=al[i[Be]],i[T]===ne)||o[3]&1)return null;let l=cl[o[3]&240];if(l===I||(i[v]=l[v],i[te]=l[S],i[Q]=ll[o[3]&14],i[Q]===I))return null}i[f]=5,o=yield*e[F](i[f]+8,n);let c=r._decodeUTF8Int(o[E](4));if(!c||(i[eo]?i[Qr]=c.value:i[Je]=c.value,i[f]+=c[f],i[qr]===96?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[Ke]=o[i[f]-1]+1,i[f]+=1):i[qr]===112&&(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[Ke]=(o[i[f]-1]<<8)+o[i[f]]+1,i[f]+=2),i[z]=i[Ke],i[Be]===12?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=o[i[f]-1]*1e3,i[f]+=1):i[Be]===13?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=(o[i[f]-1]<<8)+o[i[f]],i[f]+=2):i[Be]===14&&(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=((o[i[f]-1]<<8)+o[i[f]])*10,i[f]+=2),o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[nr]=o[i[f]-1],i[nr]!==Zs(o[E](0,i[f]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:u,sampleNumber:d,samples:m,sampleRateBits:p,blockSizeBits:h,crc:y,length:g,...b}=i;t[Se](s,i,b)}return new r(i)}constructor(e){super(e),this[kr]=null,this[Xr]=e[Xr],this[Ke]=e[Ke],this[Je]=e[Je],this[Qr]=e[Qr],this[en]=null}};var ul=2,dl=512*1024,Ht=class extends oe{constructor(e,t,n){super(e,t),this.Frame=bt,this.Header=vt,n(this[D])}get[D](){return"flac"}*_getNextFrameSyncOffset(e){let t=yield*this._codecParser[F](2,0),n=t[f]-2;for(;e<n;){if(t[e]===255){let i=t[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[Ve](){do{let e=yield*vt[P](this._codecParser,this._headerCache,0);if(e){let t=Y.get(e)[f]+ul;for(;t<=dl;){if(this._codecParser._flushing||(yield*vt[P](this._codecParser,this._headerCache,t))){let n=yield*this._codecParser[F](t);if(this._codecParser._flushing||(n=n[E](0,t)),bt[so](n)){let o=new bt(n,e);return this._headerCache[Pe](),this._codecParser[ve](t),this._codecParser[ht](o),o}}t=yield*this._getNextFrameSyncOffset(t+1)}this._codecParser[ze](`Unable to sync FLAC frame after searching ${t} bytes.`),this._codecParser[ve](t)}else this._codecParser[ve](yield*this._getNextFrameSyncOffset(1))}while(!0)}[gt](e){return e[X]===0?(this._headerCache[Pe](),this._streamInfo=e[k][E](13)):e[X]===1||(e[ee]=$.get(e)[be].map(t=>{let n=vt[Ae](t,this._headerCache);if(n)return new bt(t,n,this._streamInfo);this._codecParser[ze]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(t=>!!t)),e}};var Ot=class r{static*[P](e,t,n){let o={},i=yield*e[F](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[yi]=i[4],i[5]&248))return null;o[de]=!!(i[5]&4),o[ut]=!!(i[5]&2),o[lt]=!!(i[5]&1);let a=new xt(re.from(i[E](0,28))[De]);o[Te]=ra(a,6),o[Ne]=a.getInt32(14,!0),o[X]=a.getInt32(18,!0),o[Tt]=a.getInt32(22,!0);let c=i[26];o[f]=c+27,i=yield*e[F](o[f],n),o[ce]=0,o[pt]=[],o[sr]=re.from(i[E](27,o[f]));for(let l=0,u=0;l<c;l++){let d=o[sr][l];o[ce]+=d,u+=d,(d!==255||l===c-1)&&(o[pt].push(u),u=0)}return new r(o)}constructor(e){Y.set(this,e),this[Te]=e[Te],this[lt]=e[lt],this[ut]=e[ut],this[de]=e[de],this[pt]=e[pt],this[X]=e[X],this[Tt]=e[Tt],this[Ne]=e[Ne]}};var fn=class r extends It{static*[_e](e,t,n){let o=yield*Ot[P](e,t,n);if(o){let i=Y.get(o)[ce],s=Y.get(o)[f],a=s+i,c=(yield*e[F](a,0))[E](0,a),l=c[E](s,a);return new r(o,l,c)}else return null}constructor(e,t,n){super(e,t),$.get(this)[f]=n[f],this[ee]=[],this[fi]=n,this[Te]=e[Te],this[Dr]=e[Tt],this[He]=0,this[lt]=e[lt],this[ut]=e[ut],this[de]=e[de],this[X]=e[X],this[z]=0,this[Ne]=e[Ne]}};var cr=class extends fe{constructor(e,t,n){super(t,e,n)}};var da={0:Tr.slice(0,2),1:Tr},Me="SILK-only",J="CELT-only",xo="Hybrid",St="narrowband",bo="medium-band",_t="wideband",lr="super-wideband",ur="fullband",ml={0:{[M]:Me,[w]:St,[A]:10},8:{[M]:Me,[w]:St,[A]:20},16:{[M]:Me,[w]:St,[A]:40},24:{[M]:Me,[w]:St,[A]:60},32:{[M]:Me,[w]:bo,[A]:10},40:{[M]:Me,[w]:bo,[A]:20},48:{[M]:Me,[w]:bo,[A]:40},56:{[M]:Me,[w]:bo,[A]:60},64:{[M]:Me,[w]:_t,[A]:10},72:{[M]:Me,[w]:_t,[A]:20},80:{[M]:Me,[w]:_t,[A]:40},88:{[M]:Me,[w]:_t,[A]:60},96:{[M]:xo,[w]:lr,[A]:10},104:{[M]:xo,[w]:lr,[A]:20},112:{[M]:xo,[w]:ur,[A]:10},120:{[M]:xo,[w]:ur,[A]:20},128:{[M]:J,[w]:St,[A]:2.5},136:{[M]:J,[w]:St,[A]:5},144:{[M]:J,[w]:St,[A]:10},152:{[M]:J,[w]:St,[A]:20},160:{[M]:J,[w]:_t,[A]:2.5},168:{[M]:J,[w]:_t,[A]:5},176:{[M]:J,[w]:_t,[A]:10},184:{[M]:J,[w]:_t,[A]:20},192:{[M]:J,[w]:lr,[A]:2.5},200:{[M]:J,[w]:lr,[A]:5},208:{[M]:J,[w]:lr,[A]:10},216:{[M]:J,[w]:lr,[A]:20},224:{[M]:J,[w]:ur,[A]:2.5},232:{[M]:J,[w]:ur,[A]:5},240:{[M]:J,[w]:ur,[A]:10},248:{[M]:J,[w]:ur,[A]:20}},dr=class r extends pe{static[Ae](e,t,n){let o={};if(o[v]=e[9],o[Ye]=e[18],o[f]=o[Ye]!==0?21+o[v]:19,e[f]<o[f])throw new Error("Out of data while inside an Ogg Page");let i=t[0]&3,s=i===3?2:1,a=me(e[E](0,o[f]))+me(t[E](0,s)),c=n[P](a);if(c)return new r(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[k]=re.from(e[E](0,o[f]));let l=new xt(o[k][De]);if(o[Q]=16,o[Ct]=l.getUint16(10,!0),o[Jr]=l.getUint32(12,!0),o[T]=ct,o[Ur]=l.getInt16(16,!0),o[Ye]in da&&(o[te]=da[o[Ye]][o[v]-1],!o[te]))return null;o[Ye]!==0&&(o[Zr]=e[19],o[Rr]=e[20],o[Kr]=[...e[E](21,o[v]+21)]);let u=ml[248&t[0]];switch(o[M]=u[M],o[w]=u[w],o[A]=u[A],i){case 0:o[$e]=1;break;case 1:case 2:o[$e]=2;break;case 3:o[Nr]=!!(128&t[1]),o[Hr]=!!(64&t[1]),o[$e]=63&t[1];break;default:return null}{let{length:d,data:m,channelMappingFamily:p,...h}=o;n[Se](a,o,h)}return new r(o)}constructor(e){super(e),this[k]=e[k],this[w]=e[w],this[Ye]=e[Ye],this[Kr]=e[Kr],this[Rr]=e[Rr],this[$e]=e[$e],this[A]=e[A],this[Hr]=e[Hr],this[Jr]=e[Jr],this[Nr]=e[Nr],this[M]=e[M],this[Ur]=e[Ur],this[Ct]=e[Ct],this[Zr]=e[Zr]}};var pn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=cr,this.Header=dr,n(this[D]),this._identificationHeader=null,this._preSkipRemaining=null}get[D](){return"opus"}[gt](e){return e[X]===0?(this._headerCache[Pe](),this._identificationHeader=e[k]):e[X]===1||(e[ee]=$.get(e)[be].map(t=>{let n=dr[Ae](this._identificationHeader,t,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Ct]);let o=n[A]*n[$e]/1e3*n[T];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new cr(t,n,o)}this._codecParser[oo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var mr=class extends fe{constructor(e,t,n){super(t,e,n)}};var Li={};for(let r=0;r<8;r++)Li[r+6]=2**(6+r);var hn=class r extends pe{static[Ae](e,t,n,o){if(e[f]<30)throw new Error("Out of data while inside an Ogg Page");let i=me(e[E](0,30)),s=t[P](i);if(s)return new r(s);let a={[f]:30};if(i.substr(0,7)!=="vorbis")return null;a[k]=re.from(e[E](0,30));let c=new xt(a[k][De]);if(a[dt]=c.getUint32(7,!0),a[dt]!==0||(a[v]=e[11],a[te]=Tr[a[v]-1]||"application defined",a[T]=c.getUint32(12,!0),a[zr]=c.getInt32(16,!0),a[Pr]=c.getInt32(20,!0),a[Fr]=c.getInt32(24,!0),a[ft]=Li[(e[28]&240)>>4],a[mt]=Li[e[28]&15],a[mt]>a[ft])||e[29]!==1)return null;a[Q]=32,a[ir]=o,a[Wr]=n;{let{length:l,data:u,version:d,vorbisSetup:m,vorbisComments:p,...h}=a;t[Se](i,a,h)}return new r(a)}constructor(e){super(e),this[zr]=e[zr],this[Fr]=e[Fr],this[Pr]=e[Pr],this[mt]=e[mt],this[ft]=e[ft],this[k]=e[k],this[Wr]=e[Wr],this[ir]=e[ir]}};var yn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=mr,n(this[D]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[D](){return Et}[gt](e){e[ee]=[];for(let t of $.get(e)[be])if(t[0]===1)this._headerCache[Pe](),this._identificationHeader=e[k],this._setupComplete=!1;else if(t[0]===3)this._vorbisComments=t;else if(t[0]===5)this._vorbisSetup=t,this._mode=this._parseSetupHeader(t),this._setupComplete=!0;else if(this._setupComplete){let n=hn[Ae](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[ee].push(new mr(t,n,this._getSamples(t,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,t){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?t[ft]:t[mt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let t=new co(e),n={count:0,blockFlags:[]};for(;(t.read(1)&1)!==1;);let o;for(;n.count<64&&t.position>0;){nn(t.read(8));let i=0;for(;t.read(8)===0&&i++<3;);if(i===4)o=t.read(7),n.blockFlags.unshift(o&1),t.position+=6,n.count++;else{((nn(o)&126)>>1)+1!==n.count&&this._codecParser[ze]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Ci=class{constructor(e,t,n){this._codecParser=e,this._headerCache=t,this._onCodec=n,this._continuedPacket=new re,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[D](){return this._codec||""}_updateCodec(e,t){this._codec!==e&&(this._headerCache[Fe](),this._parser=new t(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let t=me(e[E](0,8));switch(t){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",pn),!0;case(/^\x7fFLAC/.test(t)&&t):return this._updateCodec("flac",Ht),!0;case(/^\x01vorbis/.test(t)&&t):return this._updateCodec(Et,yn),!0;default:return!1}}_checkPageSequenceNumber(e){e[X]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[X]>1&&this._codecParser[ze]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[X]}`),this._pageSequenceNumber=e[X]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[X],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let t=$.get(e),n=Y.get(t[ue]),o=0;if(t[be]=n[pt].map(i=>e[k][E](o,o+=i)),this._continuedPacket[f]&&(t[be][0]=on(this._continuedPacket,t[be][0]),this._continuedPacket=new re),n[sr][n[sr][f]-1]===255&&(this._continuedPacket=on(this._continuedPacket,t[be].pop())),this._previousAbsoluteGranulePosition!==null&&(e[z]=Number(e[Te]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Te],this._isSupported){let i=this._parser[gt](e);return this._codecParser[ht](i),i}else return e}},gn=class extends oe{constructor(e,t,n){super(e,t),this._onCodec=n,this.Frame=fn,this.Header=Ot,this._streams=new Map,this._currentSerialNumber=null}get[D](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Ve](){let e=yield*this[yt](!0);this._currentSerialNumber=e[Ne];let t=this._streams.get(this._currentSerialNumber);return t||(t=new Ci(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,t)),e[de]&&this._streams.delete(this._currentSerialNumber),t._parsePage(e)}};var Ei=()=>{},xn=class{constructor(e,{onCodec:t,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=t||Ei,this._onCodecHeader=n||Ei,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?ta:Ei,this[Fe]()}get[D](){return this._parser?this._parser[D]:""}[Fe](){this._headerCache=new sn(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Fe]()}*parseChunk(e){for(let t=this._generator.next(e);t.value;t=this._generator.next())yield t.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new mn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new un(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Ht(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new gn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[Ve]();e&&(yield e)}}*[F](e=0,t=0){let n;for(;this._rawData[f]<=e+t;){if(n=yield,this._flushing)return this._rawData[E](t);n&&(this._totalBytesIn+=n[f],this._rawData=on(this._rawData,n))}return this._rawData[E](t)}[ve](e){this._currentReadPosition+=e,this._rawData=this._rawData[E](e)}[tn](e){this._sampleRate=e[ue][T],e[ue][Z]=e[He]>0?Math.round(e[k][f]/e[He])*8:0,e[Je]=this._frameNumber++,e[zt]=this._totalBytesOut,e[Pt]=this._totalSamples,e[Ft]=this._totalSamples/this._sampleRate*1e3,e[Dr]=this._crc32(e[k]),this._headerCache[io](e[ue][Z],e[Ft]),this._totalBytesOut+=e[k][f],this._totalSamples+=e[z]}[ht](e){if(e[ee]){if(e[de]){let t=e[z];e[ee].forEach(n=>{let o=n[z];t<o&&(n[z]=t>0?t:0,n[He]=n[z]/n[ue][T]*1e3),t-=o,this[tn](n)})}else e[z]=0,e[ee].forEach(t=>{e[z]+=t[z],this[tn](t)});e[He]=e[z]/this._sampleRate*1e3||0,e[Pt]=this._totalSamples,e[Ft]=this._totalSamples/this._sampleRate*1e3||0,e[zt]=this._totalBytesOut}else this[tn](e)}_log(e,t){if(this._enableLogging){let n=[`${D}: ${this[D]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${zt}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[f]));t.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",t.reduce((i,s)=>i+`
|
|
4
|
-
`+s,""))}}[ze](...e){this._log(console.warn,e)}[oo](...e){this._log(console.error,e)}};var ma=
|
|
3
|
+
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(b)}}return y};function O(){let r=Uint8Array,e=Float32Array;O.modules||Object.defineProperties(O,{modules:{value:new WeakMap},setModule:{value(t,n){O.modules.set(t,Promise.resolve(n))}},getModule:{value(t,n){let o=O.modules.get(t);return o||(n?o=WebAssembly.compile(mi(n)):(n=t.wasm,o=O.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),O.modules.set(t,o)),o}},concatFloat32:{value(t,n){let o=new e(n),i=0,s=0;for(;i<t.length;)o.set(t[i],s),s+=t[i++].length;return o}},getDecodedAudio:{value:(t,n,o,i,s)=>({errors:t,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(t,n,o,i,s,a){let c=[],l,u;for(l=0;l<o;l++){let d=[];for(u=0;u<n.length;)d.push(n[u++][l]||[]);c.push(O.concatFloat32(d,i))}return O.getDecodedAudio(t,c,i,s,a)}},inflateDynEncodeString:{value(t){return t=mi(t),new Promise(n=>{let o=String.raw`dynEncode012804c7886d()((()>+*§§)§,§§§§)§+§§§)§+.-()(*)-+)(.7*§)i¸¸,3§(i¸¸,3/G+.¡*(,(,3+)2å:-),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)^*<H,H(P*4U((I-H(H*i0J,^*DH+H-H*I+H,I*4)33H(H*H)^*DH(H+H)^*@H+i§H)i§3æ*).§K(iHI/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)J.H.W)(i)c)(H,i)I,H-i*I-4)33i(I.*hH(V)(H+n5(H(i*I-i(I,i)I.+hH,i*J+iHn,hi(I-i*I,+hH,H/H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)J(H(V)(J(i)c)(H)H(i)H,c)(3H*i*I*H,i)I,4(3(-H(H,W)(H-I-H,i*I,4)3(3(3H,H-I1H+I,H.i)H1V)(J.i(v5(33H.-H(H,i(c)(H,i*I,4)333)-§i*I*+§H*iHn,hi73H,H(i)8(H+J+H)P*(H*V)(J-r,§H)P*,H.i)H+H,i)V)(-H*i*I*H+i)I+H-H.I.H,H-i)I,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7H,c)(i)H+i´8W)(H,I,H+i*I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,H-b((3H(P*0i)I.4)3H-i¨*n5*H-iÅ*s,hi73H-i)J+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)J+i¸7V)(H(H+iø7V)(8(J/H(P*0J+s,hi73H+H,H.J,I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+H.H+H/U((b((H(H(P*0i)J+^*0H,i)I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)c)(H,i*I,H+i)I+4)33i)I-3H-3!2)0§K(i2J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,J(H,P*8J/s50H,H.i+J0^*<i¦I*H.H,P*4J1J.U(*H.U((J2i')o5/H.U()I.H,H(^*<H0H1U((H.i0J.i§i0i')o5/H/H.H2J*H(J.q50H,P*0J/H*I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0H(H1U((b((H/i)I/H(i)I(H*i)I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-H(i0c)(H(i*I(4)33iè1i1H,i-iÈ*8)Bi(I(+hH(ido,hH,i-H(i-c)(H(i*I(4)33iÈ6iè6H,i-iF8)BiØ1i)b((41-H,i-H(i/c)(H(i*I(4)3(3(-H,i-H(i1c)(H(i*I(4)3(3(-H,i-H(i0c)(H(i*I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)^*TH,H,iø-^*PH,H,iX^*LH,H,i(^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iEr5)H(i©*I1H-i)I0i(i;H.i,J(i(H(i(rCJ(J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-H-V)(i)H,i+8(c)(H/i)I/H-i*I-H*i)I*4)-H(i)i¨1I/+hH(H*o,hH,i-H/V)(i)i(c)(H/i*I/H(i)I(4)33i¤I*H,iø-H,i¸)H,i-i;8)5+H0H1I2i(I-+hH-H2p,hH,H,iP8*J*i(p5-H*i7u,hH,i-H-i)H*c)(H-i)I-4*3i(I/i+I.i+I(*h*h*hH*i86*(*)3H-m,hi£I*403H-i)H,W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.J(H-J.p,hi¢I*4.3H,i-H-i)I*+hH(,hH*H/c)(H*i*I*H(i)I(4)-H.I-4+3(3(33H,W)1m,hiI*4,3H,iø-H,i¸)H,i-H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-o5,3H,i(H,iXH,i-H1i)H08)J(,hi I*H(i(p5,H0H,V)H,V)o5,3H,H,iPH,iH8+I*4+3(3(3H,i$6i¬78+I*3H*H3m5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(((«(Ë(ë((*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7*S7US0U `;O.getModule(O,o).then(i=>WebAssembly.instantiate(i,{})).then(({exports:i})=>{let s=new Map(Object.entries(i)),a=s.get("puff"),c=s.get("memory").buffer,l=new r(c),u=new DataView(c),d=s.get("__heap_base"),m=t.length,p=d;d+=4,u.setInt32(p,m,!0);let h=d;d+=m,l.set(t,h);let y=d;d+=4,u.setInt32(y,l.byteLength-d,!0),a(d,y,h,p),n(l.slice(d,d+u.getInt32(y,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(t,n,o)=>{let i=[],s=0;for(;s<n;)i.push(t.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(t,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*t);return o&&this._pointers.add(i),{ptr:i,len:t,buf:new n(this._wasm.HEAP,i,t)}},this.free=()=>{this._pointers.forEach(t=>{this._wasm.free(t)}),this._pointers.clear()},this.codeToString=t=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[t];i!==0;i=o[++t])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(t,n,o,i,s,a)=>{t.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(t,n)=>(n&&O.setModule(t,n),this._wasm=new t(O).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Ws=nc(Gs(),1);var Wc=()=>globalThis.Worker||Ws.default,$t=class extends Wc(){constructor(e,t,n,o){O.modules||new O;let i=O.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,u,d)=>{let m,p,h=new Promise(y=>{p=y});self.onmessage=({data:{id:y,command:g,data:b}})=>{let L=h,C={id:y},W;g==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:u},EmscriptenWASM:{value:d},module:{value:b.module},isWebWorker:{value:!0}}),m=new l(b.options),p()):g==="free"?m.free():g==="ready"?L=L.then(()=>m.ready):g==="reset"?L=L.then(()=>m.reset()):(Object.assign(C,m[g](Array.isArray(b)?b.map(H=>new Uint8Array(H)):new Uint8Array(b))),W=C.channelData?C.channelData.map(H=>H.buffer):[]),L.then(()=>self.postMessage(C,W))}}).toString()})(${n}, ${O}, ${o})`;try{a=typeof process.versions.node<"u"}catch{}i=a?`data:${s};base64,${Buffer.from(c).toString("base64")}`:URL.createObjectURL(new Blob([c],{type:s})),O.modules.set(n,i)}super(i,{name:t}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:s})=>{let{id:a,...c}=s;this._enqueuedOperations.get(a)(c),this._enqueuedOperations.delete(a)},new o(O).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,t){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:t}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}};var qn=(r,e)=>{Object.defineProperty(r,"name",{value:e})};var B=Symbol,Xs=", ",_=(()=>{let r="front",e="side",t="rear",n="left",o="center",i="right";return["",r+" ",e+" ",t+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(Xs)))})(),ke="LFE",st="monophonic (mono)",at="stereo",Tr="surround",V=(r,...e)=>`${[st,at,`linear ${Tr}`,"quadraphonic",`5.0 ${Tr}`,`5.1 ${Tr}`,`6.1 ${Tr}`,`7.1 ${Tr}`][r-1]} (${e.join(Xs)})`,zr=[st,V(2,_[0][0]),V(3,_[0][2]),V(4,_[1][0],_[3][0]),V(5,_[1][2],_[3][0]),V(6,_[1][2],_[3][0],ke),V(7,_[1][2],_[2][0],_[3][4],ke),V(8,_[1][2],_[2][0],_[3][0],ke)],qs=192e3,Ks=176400,Kn=96e3,Yn=88200,Ys=64e3,ct=48e3,Jt=44100,Qt=32e3,Zt=24e3,er=22050,tr=16e3,jn=12e3,$n=11025,rr=8e3,js=7350,Te="absoluteGranulePosition",w="bandwidth",Q="bitDepth",Z="bitrate",Fr=Z+"Maximum",Pr=Z+"Minimum",Ir=Z+"Nominal",De="buffer",Rr=De+"Fullness",D="codec",ee=D+"Frames",kr="coupledStreamCount",nr="crc",Dr=nr+"16",Hr=nr+"32",k="data",S="description",He="duration",or="emphasis",Or="hasOpusPadding",ue="header",lt="isContinuedPacket",Br="isCopyrighted",ut="isFirstPage",Nr="isHome",de="isLastPage",Ue="isOriginal",Ge="isPrivate",Vr="isVbr",ae="layer",f="length",M="mode",We=M+"Extension",Jn="mpeg",Xe=Jn+"Version",Ur="numberAACFrames",Gr="outputGain",Ct="preSkip",Wr="profile",Qn=B(),qe="protection",fi="rawData",be="segments",E="subarray",dt="version",Et="vorbis",Xr=Et+"Comments",ir=Et+"Setup",Zn="block",qr=Zn+"ingStrategy",eo=B(),Ke=Zn+"Size",mt=Zn+"size0",ft=Zn+"size1",Kr=B(),to="channel",Ye=to+"MappingFamily",Yr=to+"MappingTable",te=to+"Mode",jr=B(),v=to+"s",$s="copyright",$r=$s+"Id",Jr=$s+"IdStart",je="frame",$e=je+"Count",ce=je+"Length",ro="Number",Je=je+ro,Oe=je+"Padding",A=je+"Size",Js="Rate",Qr="inputSample"+Js,pi="page",Tt=pi+"Checksum",sr=B(),pt=pi+"SegmentTable",q=pi+"Sequence"+ro,hi="sample",Zr=hi+ro,T=hi+Js,Be=B(),z=hi+"s",no="stream",en=no+"Count",tn=no+"Info",Ne=no+"Serial"+ro,yi=no+"StructureVersion",gi="total",zt=gi+"BytesOut",Ft=gi+"Duration",Pt=gi+"Samples",F=B(),ve=B(),rn=B(),ht=B(),ze=B(),oo=B(),xi=B(),yt=B(),P=B(),Se=B(),_e=B(),Ve=B(),gt=B(),io=B(),Fe=B(),Pe=B(),Ae=B(),so=B(),re=Uint8Array,xt=DataView,I="reserved",ne="bad",ar="free",nn="none",ao="16bit CRC";var bi=(r,e,t)=>{for(let n=0;n<r[f];n++){let o=e(n);for(let i=8;i>0;i--)o=t(o);r[n]=o}return r},qc=bi(new re(256),r=>r,r=>r&128?7^r<<1:r<<1),U=[bi(new Uint16Array(256),r=>r<<8,r=>r<<1^(r&32768?32773:0))],G=[bi(new Uint32Array(256),r=>r,r=>r>>>1^(r&1)*3988292384)];for(let r=0;r<15;r++){U.push(new Uint16Array(256)),G.push(new Uint32Array(256));for(let e=0;e<=255;e++)U[r+1][e]=U[0][U[r][e]>>>8]^U[r][e]<<8,G[r+1][e]=G[r][e]>>>8^G[0][G[r][e]&255]}var Zs=r=>{let e=0,t=r[f];for(let n=0;n!==t;n++)e=qc[e^r[n]];return e},ea=r=>{let e=r[f],t=e-16,n=0,o=0;for(;o<=t;)n^=r[o++]<<8|r[o++],n=U[15][n>>8]^U[14][n&255]^U[13][r[o++]]^U[12][r[o++]]^U[11][r[o++]]^U[10][r[o++]]^U[9][r[o++]]^U[8][r[o++]]^U[7][r[o++]]^U[6][r[o++]]^U[5][r[o++]]^U[4][r[o++]]^U[3][r[o++]]^U[2][r[o++]]^U[1][r[o++]]^U[0][r[o++]];for(;o!==e;)n=(n&255)<<8^U[0][n>>8^r[o++]];return n},ta=r=>{let e=r[f],t=e-16,n=0,o=0;for(;o<=t;)n=G[15][(r[o++]^n)&255]^G[14][(r[o++]^n>>>8)&255]^G[13][(r[o++]^n>>>16)&255]^G[12][r[o++]^n>>>24]^G[11][r[o++]]^G[10][r[o++]]^G[9][r[o++]]^G[8][r[o++]]^G[7][r[o++]]^G[6][r[o++]]^G[5][r[o++]]^G[4][r[o++]]^G[3][r[o++]]^G[2][r[o++]]^G[1][r[o++]]^G[0][r[o++]];for(;o!==e;)n=G[0][(n^r[o++])&255]^n>>>8;return n^-1},sn=(...r)=>{let e=new re(r.reduce((t,n)=>t+n[f],0));return r.reduce((t,n)=>(e.set(n,t),t+n[f]),0),e},me=r=>String.fromCharCode(...r),Qs=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],on=r=>Qs[r&15]<<4|Qs[r>>4],co=class{constructor(e){this._data=e,this._pos=e[f]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let t=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(on(this._data[t-1])<<8)+on(this._data[t])>>7-n&255}},ra=(r,e)=>{try{return r.getBigInt64(e,!0)}catch{let t=r.getUint8(e+7)&128?-1:1,n=r.getUint32(e,!0),o=r.getUint32(e+4,!0);return t===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),t*(n+o*2**32)}};var an=class{constructor(e,t){this._onCodecHeader=e,this._onCodecUpdate=t,this[Fe]()}[Pe](){this._isEnabled=!0}[Fe](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[io](e,t){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);let n=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&n&&this._onCodecUpdate({bitrate:e,...n},t),this._codecShouldUpdate=!1}}[P](e){let t=this._headerCache.get(e);return t&&this._updateCurrentHeader(e),t}[Se](e,t,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...t}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,t),this._codecUpdateData.set(t,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var Y=new WeakMap,$=new WeakMap;var oe=class{constructor(e,t){this._codecParser=e,this._headerCache=t}*[xi](){let e;do{if(e=yield*this.Frame[_e](this._codecParser,this._headerCache,0),e)return e;this._codecParser[ve](1)}while(!0)}*[yt](e){let t=yield*this[xi](),n=$.get(t)[f];if(e||this._codecParser._flushing||(yield*this.Header[P](this._codecParser,this._headerCache,n)))return this._headerCache[Pe](),this._codecParser[ve](n),this._codecParser[ht](t),t;this._codecParser[ze](`Missing ${je} at ${n} bytes from current position.`,`Dropping current ${je} and trying again.`),this._headerCache[Fe](),this._codecParser[ve](1)}};var It=class{constructor(e,t){$.set(this,{[ue]:e}),this[k]=t}};var fe=class extends It{static*[_e](e,t,n,o,i){let s=yield*e[P](n,o,i);if(s){let a=Y.get(s)[ce],c=Y.get(s)[z],l=(yield*n[F](a,i))[E](0,a);return new t(s,l,c)}else return null}constructor(e,t,n){super(e,t),this[ue]=e,this[z]=n,this[He]=n/e[T]*1e3,this[Je]=null,this[zt]=null,this[Pt]=null,this[Ft]=null,$.get(this)[f]=t[f]}};var vi="unsynchronizationFlag",Si="extendedHeaderFlag",_i="experimentalFlag",Ai="footerPresent",cn=class r{static*getID3v2Header(e,t,n){let i={},s=yield*e[F](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[F](10,n),i[dt]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[vi]=!!(s[5]&128),i[Si]=!!(s[5]&64),i[_i]=!!(s[5]&32),i[Ai]=!!(s[5]&16),s[6]&128||s[7]&128||s[8]&128||s[9]&128))return null;let a=s[6]<<21|s[7]<<14|s[8]<<7|s[9];return i[f]=10+a,new r(i)}constructor(e){this[dt]=e[dt],this[vi]=e[vi],this[Si]=e[Si],this[_i]=e[_i],this[Ai]=e[Ai],this[f]=e[f]}};var pe=class{constructor(e){Y.set(this,e),this[Q]=e[Q],this[Z]=null,this[v]=e[v],this[te]=e[te],this[T]=e[T]}};var aa={0:[ar,ar,ar,ar,ar],16:[32,32,32,32,8],240:[ne,ne,ne,ne,ne]},lo=(r,e,t)=>8*((r+t)%e+e)*(1<<(r+t)/e)-8*e*(e/8|0);for(let r=2;r<15;r++)aa[r<<4]=[r*32,lo(r,4,0),lo(r,4,-1),lo(r,8,4),lo(r,8,0)];var Kc=0,Yc=1,jc=2,$c=3,na=4,uo="bands ",mo=" to 31",oa={0:uo+4+mo,16:uo+8+mo,32:uo+12+mo,48:uo+16+mo},Rt="bitrateIndex",ln="v2",go="v1",fo="Intensity stereo ",po=", MS stereo ",ho="on",yo="off",Jc={0:fo+yo+po+yo,16:fo+ho+po+yo,32:fo+yo+po+ho,48:fo+ho+po+ho},Mi={0:{[S]:I},2:{[S]:"Layer III",[Oe]:1,[We]:Jc,[go]:{[Rt]:jc,[z]:1152},[ln]:{[Rt]:na,[z]:576}},4:{[S]:"Layer II",[Oe]:1,[We]:oa,[z]:1152,[go]:{[Rt]:Yc},[ln]:{[Rt]:na}},6:{[S]:"Layer I",[Oe]:4,[We]:oa,[z]:384,[go]:{[Rt]:Kc},[ln]:{[Rt]:$c}}},wi="MPEG Version ",ia="ISO/IEC ",Qc={0:{[S]:`${wi}2.5 (later extension of MPEG 2)`,[ae]:ln,[T]:{0:$n,4:jn,8:rr,12:I}},8:{[S]:I},16:{[S]:`${wi}2 (${ia}13818-3)`,[ae]:ln,[T]:{0:er,4:Zt,8:tr,12:I}},24:{[S]:`${wi}1 (${ia}11172-3)`,[ae]:go,[T]:{0:Jt,4:ct,8:Qt,12:I}},length:f},Zc={0:ao,1:nn},el={0:nn,1:"50/15 ms",2:I,3:"CCIT J.17"},sa={0:{[v]:2,[S]:at},64:{[v]:2,[S]:"joint "+at},128:{[v]:2,[S]:"dual channel"},192:{[v]:1,[S]:st}},kt=class r extends pe{static*[P](e,t,n){let o={},i=yield*cn.getID3v2Header(e,t,n);i&&(yield*e[F](i[f],n),e[ve](i[f]));let s=yield*e[F](4,n),a=me(s[E](0,4)),c=t[P](a);if(c)return new r(c);if(s[0]!==255||s[1]<224)return null;let l=Qc[s[1]&24];if(l[S]===I)return null;let u=s[1]&6;if(Mi[u][S]===I)return null;let d={...Mi[u],...Mi[u][l[ae]]};if(o[Xe]=l[S],o[ae]=d[S],o[z]=d[z],o[qe]=Zc[s[1]&1],o[f]=4,o[Z]=aa[s[2]&240][d[Rt]],o[Z]===ne||(o[T]=l[T][s[2]&12],o[T]===I)||(o[Oe]=s[2]&2&&d[Oe],o[Ge]=!!(s[2]&1),o[ce]=Math.floor(125*o[Z]*o[z]/o[T]+o[Oe]),!o[ce]))return null;let m=s[3]&192;if(o[te]=sa[m][S],o[v]=sa[m][v],o[We]=d[We][s[3]&48],o[Br]=!!(s[3]&8),o[Ue]=!!(s[3]&4),o[or]=el[s[3]&3],o[or]===I)return null;o[Q]=16;{let{length:p,frameLength:h,samples:y,...g}=o;t[Se](a,o,g)}return new r(o)}constructor(e){super(e),this[Z]=e[Z],this[or]=e[or],this[Oe]=e[Oe],this[Br]=e[Br],this[Ue]=e[Ue],this[Ge]=e[Ge],this[ae]=e[ae],this[We]=e[We],this[Xe]=e[Xe],this[qe]=e[qe]}};var un=class r extends fe{static*[_e](e,t,n){return yield*super[_e](kt,r,e,t,n)}constructor(e,t,n){super(e,t,n)}};var dn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=un,this.Header=kt,n(this[D])}get[D](){return Jn}*[Ve](){return yield*this[yt]()}};var tl={0:"MPEG-4",8:"MPEG-2"},rl={0:"valid",2:ne,4:ne,6:ne},nl={0:ao,1:nn},ol={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},il={0:Kn,4:Yn,8:Ys,12:ct,16:Jt,20:Qt,24:Zt,28:er,32:tr,36:jn,40:$n,44:rr,48:js,52:I,56:I,60:"frequency is written explicitly"},ca={0:{[v]:0,[S]:"Defined in AOT Specific Config"},64:{[v]:1,[S]:st},128:{[v]:2,[S]:V(2,_[0][0])},192:{[v]:3,[S]:V(3,_[1][3])},256:{[v]:4,[S]:V(4,_[1][3],_[3][4])},320:{[v]:5,[S]:V(5,_[1][3],_[3][0])},384:{[v]:6,[S]:V(6,_[1][3],_[3][0],ke)},448:{[v]:8,[S]:V(8,_[1][3],_[2][0],_[3][0],ke)}},Dt=class r extends pe{static*[P](e,t,n){let o={},i=yield*e[F](7,n),s=me([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=t[P](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[Xe]=tl[i[1]&8],o[ae]=rl[i[1]&6],o[ae]===ne))return null;let l=i[1]&1;o[qe]=nl[l],o[f]=l?7:9,o[Qn]=i[2]&192,o[Be]=i[2]&60;let u=i[2]&2;if(o[Wr]=ol[o[Qn]],o[T]=il[o[Be]],o[T]===I)return null;o[Ge]=!!u,o[jr]=(i[2]<<8|i[3])&448,o[te]=ca[o[jr]][S],o[v]=ca[o[jr]][v],o[Ue]=!!(i[3]&32),o[Nr]=!!(i[3]&8),o[$r]=!!(i[3]&8),o[Jr]=!!(i[3]&4),o[Q]=16,o[z]=1024,o[Ur]=i[6]&3;{let{length:d,channelModeBits:m,profileBits:p,sampleRateBits:h,frameLength:y,samples:g,numberAACFrames:b,...L}=o;t[Se](s,o,L)}}if(o[ce]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[ce])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Rr]=c===2047?"VBR":c,new r(o)}constructor(e){super(e),this[$r]=e[$r],this[Jr]=e[Jr],this[Rr]=e[Rr],this[Nr]=e[Nr],this[Ue]=e[Ue],this[Ge]=e[Ge],this[ae]=e[ae],this[f]=e[f],this[Xe]=e[Xe],this[Ur]=e[Ur],this[Wr]=e[Wr],this[qe]=e[qe]}get audioSpecificConfig(){let e=Y.get(this),t=e[Qn]+64<<5|e[Be]<<5|e[jr]>>3,n=new re(2);return new xt(n[De]).setUint16(0,t,!1),n}};var mn=class r extends fe{static*[_e](e,t,n){return yield*super[_e](Dt,r,e,t,n)}constructor(e,t,n){super(e,t,n)}};var fn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=mn,this.Header=Dt,n(this[D])}get[D](){return"aac"}*[Ve](){return yield*this[yt]()}};var bt=class r extends fe{static _getFrameFooterCrc16(e){return(e[e[f]-2]<<8)+e[e[f]-1]}static[so](e){let t=r._getFrameFooterCrc16(e),n=ea(e[E](0,-2));return t===n}constructor(e,t,n){t[tn]=n,t[Dr]=r._getFrameFooterCrc16(e),super(t,e,Y.get(t)[z])}};var la="get from STREAMINFO metadata block",sl={0:"Fixed",1:"Variable"},ua={0:I,16:192};for(let r=2;r<16;r++)ua[r<<4]=r<6?576*2**(r-2):2**r;var al={0:la,1:Yn,2:Ks,3:qs,4:rr,5:tr,6:er,7:Zt,8:Qt,9:Jt,10:ct,11:Kn,15:ne},cl={0:{[v]:1,[S]:st},16:{[v]:2,[S]:V(2,_[0][0])},32:{[v]:3,[S]:V(3,_[0][1])},48:{[v]:4,[S]:V(4,_[1][0],_[3][0])},64:{[v]:5,[S]:V(5,_[1][1],_[3][0])},80:{[v]:6,[S]:V(6,_[1][1],ke,_[3][0])},96:{[v]:7,[S]:V(7,_[1][1],ke,_[3][4],_[2][0])},112:{[v]:8,[S]:V(8,_[1][1],ke,_[3][0],_[2][0])},128:{[v]:2,[S]:`${at} (left, diff)`},144:{[v]:2,[S]:`${at} (diff, right)`},160:{[v]:2,[S]:`${at} (avg, diff)`},176:I,192:I,208:I,224:I,240:I},ll={0:la,2:8,4:12,6:I,8:16,10:20,12:24,14:I},vt=class r extends pe{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let t=1;for(let s=64;s&e[0];s>>=1)t++;let n=t-1,o=0,i=0;for(;n>0;i+=6,n--){if((e[n]&192)!==128)return null;o|=(e[n]&63)<<i}return o|=(e[n]&127>>t)<<i,{value:o,length:t}}static[Ae](e,t){let n={[F]:function*(){return e}};return r[P](n,t,0).next().value}static*[P](e,t,n){let o=yield*e[F](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=me(o[E](0,4)),a=t[P](s);if(a)Object.assign(i,a);else{if(i[eo]=o[1]&1,i[qr]=sl[i[eo]],i[Kr]=o[2]&240,i[Be]=o[2]&15,i[Ke]=ua[i[Kr]],i[Ke]===I||(i[T]=al[i[Be]],i[T]===ne)||o[3]&1)return null;let l=cl[o[3]&240];if(l===I||(i[v]=l[v],i[te]=l[S],i[Q]=ll[o[3]&14],i[Q]===I))return null}i[f]=5,o=yield*e[F](i[f]+8,n);let c=r._decodeUTF8Int(o[E](4));if(!c||(i[eo]?i[Zr]=c.value:i[Je]=c.value,i[f]+=c[f],i[Kr]===96?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[Ke]=o[i[f]-1]+1,i[f]+=1):i[Kr]===112&&(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[Ke]=(o[i[f]-1]<<8)+o[i[f]]+1,i[f]+=2),i[z]=i[Ke],i[Be]===12?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=o[i[f]-1]*1e3,i[f]+=1):i[Be]===13?(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=(o[i[f]-1]<<8)+o[i[f]],i[f]+=2):i[Be]===14&&(o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[T]=((o[i[f]-1]<<8)+o[i[f]])*10,i[f]+=2),o[f]<i[f]&&(o=yield*e[F](i[f],n)),i[nr]=o[i[f]-1],i[nr]!==Zs(o[E](0,i[f]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:u,sampleNumber:d,samples:m,sampleRateBits:p,blockSizeBits:h,crc:y,length:g,...b}=i;t[Se](s,i,b)}return new r(i)}constructor(e){super(e),this[Dr]=null,this[qr]=e[qr],this[Ke]=e[Ke],this[Je]=e[Je],this[Zr]=e[Zr],this[tn]=null}};var ul=2,dl=512*1024,Ht=class extends oe{constructor(e,t,n){super(e,t),this.Frame=bt,this.Header=vt,n(this[D])}get[D](){return"flac"}*_getNextFrameSyncOffset(e){let t=yield*this._codecParser[F](2,0),n=t[f]-2;for(;e<n;){if(t[e]===255){let i=t[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[Ve](){do{let e=yield*vt[P](this._codecParser,this._headerCache,0);if(e){let t=Y.get(e)[f]+ul;for(;t<=dl;){if(this._codecParser._flushing||(yield*vt[P](this._codecParser,this._headerCache,t))){let n=yield*this._codecParser[F](t);if(this._codecParser._flushing||(n=n[E](0,t)),bt[so](n)){let o=new bt(n,e);return this._headerCache[Pe](),this._codecParser[ve](t),this._codecParser[ht](o),o}}t=yield*this._getNextFrameSyncOffset(t+1)}this._codecParser[ze](`Unable to sync FLAC frame after searching ${t} bytes.`),this._codecParser[ve](t)}else this._codecParser[ve](yield*this._getNextFrameSyncOffset(1))}while(!0)}[gt](e){return e[q]===0?(this._headerCache[Pe](),this._streamInfo=e[k][E](13)):e[q]===1||(e[ee]=$.get(e)[be].map(t=>{let n=vt[Ae](t,this._headerCache);if(n)return new bt(t,n,this._streamInfo);this._codecParser[ze]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(t=>!!t)),e}};var Ot=class r{static*[P](e,t,n){let o={},i=yield*e[F](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[yi]=i[4],i[5]&248))return null;o[de]=!!(i[5]&4),o[ut]=!!(i[5]&2),o[lt]=!!(i[5]&1);let a=new xt(re.from(i[E](0,28))[De]);o[Te]=ra(a,6),o[Ne]=a.getInt32(14,!0),o[q]=a.getInt32(18,!0),o[Tt]=a.getInt32(22,!0);let c=i[26];o[f]=c+27,i=yield*e[F](o[f],n),o[ce]=0,o[pt]=[],o[sr]=re.from(i[E](27,o[f]));for(let l=0,u=0;l<c;l++){let d=o[sr][l];o[ce]+=d,u+=d,(d!==255||l===c-1)&&(o[pt].push(u),u=0)}return new r(o)}constructor(e){Y.set(this,e),this[Te]=e[Te],this[lt]=e[lt],this[ut]=e[ut],this[de]=e[de],this[pt]=e[pt],this[q]=e[q],this[Tt]=e[Tt],this[Ne]=e[Ne]}};var pn=class r extends It{static*[_e](e,t,n){let o=yield*Ot[P](e,t,n);if(o){let i=Y.get(o)[ce],s=Y.get(o)[f],a=s+i,c=(yield*e[F](a,0))[E](0,a),l=c[E](s,a);return new r(o,l,c)}else return null}constructor(e,t,n){super(e,t),$.get(this)[f]=n[f],this[ee]=[],this[fi]=n,this[Te]=e[Te],this[Hr]=e[Tt],this[He]=0,this[lt]=e[lt],this[ut]=e[ut],this[de]=e[de],this[q]=e[q],this[z]=0,this[Ne]=e[Ne]}};var cr=class extends fe{constructor(e,t,n){super(t,e,n)}};var da={0:zr.slice(0,2),1:zr},Me="SILK-only",J="CELT-only",xo="Hybrid",St="narrowband",bo="medium-band",_t="wideband",lr="super-wideband",ur="fullband",ml={0:{[M]:Me,[w]:St,[A]:10},8:{[M]:Me,[w]:St,[A]:20},16:{[M]:Me,[w]:St,[A]:40},24:{[M]:Me,[w]:St,[A]:60},32:{[M]:Me,[w]:bo,[A]:10},40:{[M]:Me,[w]:bo,[A]:20},48:{[M]:Me,[w]:bo,[A]:40},56:{[M]:Me,[w]:bo,[A]:60},64:{[M]:Me,[w]:_t,[A]:10},72:{[M]:Me,[w]:_t,[A]:20},80:{[M]:Me,[w]:_t,[A]:40},88:{[M]:Me,[w]:_t,[A]:60},96:{[M]:xo,[w]:lr,[A]:10},104:{[M]:xo,[w]:lr,[A]:20},112:{[M]:xo,[w]:ur,[A]:10},120:{[M]:xo,[w]:ur,[A]:20},128:{[M]:J,[w]:St,[A]:2.5},136:{[M]:J,[w]:St,[A]:5},144:{[M]:J,[w]:St,[A]:10},152:{[M]:J,[w]:St,[A]:20},160:{[M]:J,[w]:_t,[A]:2.5},168:{[M]:J,[w]:_t,[A]:5},176:{[M]:J,[w]:_t,[A]:10},184:{[M]:J,[w]:_t,[A]:20},192:{[M]:J,[w]:lr,[A]:2.5},200:{[M]:J,[w]:lr,[A]:5},208:{[M]:J,[w]:lr,[A]:10},216:{[M]:J,[w]:lr,[A]:20},224:{[M]:J,[w]:ur,[A]:2.5},232:{[M]:J,[w]:ur,[A]:5},240:{[M]:J,[w]:ur,[A]:10},248:{[M]:J,[w]:ur,[A]:20}},dr=class r extends pe{static[Ae](e,t,n){let o={};if(o[v]=e[9],o[Ye]=e[18],o[f]=o[Ye]!==0?21+o[v]:19,e[f]<o[f])throw new Error("Out of data while inside an Ogg Page");let i=t[0]&3,s=i===3?2:1,a=me(e[E](0,o[f]))+me(t[E](0,s)),c=n[P](a);if(c)return new r(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[k]=re.from(e[E](0,o[f]));let l=new xt(o[k][De]);if(o[Q]=16,o[Ct]=l.getUint16(10,!0),o[Qr]=l.getUint32(12,!0),o[T]=ct,o[Gr]=l.getInt16(16,!0),o[Ye]in da&&(o[te]=da[o[Ye]][o[v]-1],!o[te]))return null;o[Ye]!==0&&(o[en]=e[19],o[kr]=e[20],o[Yr]=[...e[E](21,o[v]+21)]);let u=ml[248&t[0]];switch(o[M]=u[M],o[w]=u[w],o[A]=u[A],i){case 0:o[$e]=1;break;case 1:case 2:o[$e]=2;break;case 3:o[Vr]=!!(128&t[1]),o[Or]=!!(64&t[1]),o[$e]=63&t[1];break;default:return null}{let{length:d,data:m,channelMappingFamily:p,...h}=o;n[Se](a,o,h)}return new r(o)}constructor(e){super(e),this[k]=e[k],this[w]=e[w],this[Ye]=e[Ye],this[Yr]=e[Yr],this[kr]=e[kr],this[$e]=e[$e],this[A]=e[A],this[Or]=e[Or],this[Qr]=e[Qr],this[Vr]=e[Vr],this[M]=e[M],this[Gr]=e[Gr],this[Ct]=e[Ct],this[en]=e[en]}};var hn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=cr,this.Header=dr,n(this[D]),this._identificationHeader=null,this._preSkipRemaining=null}get[D](){return"opus"}[gt](e){return e[q]===0?(this._headerCache[Pe](),this._identificationHeader=e[k]):e[q]===1||(e[ee]=$.get(e)[be].map(t=>{let n=dr[Ae](this._identificationHeader,t,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[Ct]);let o=n[A]*n[$e]/1e3*n[T];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new cr(t,n,o)}this._codecParser[oo]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var mr=class extends fe{constructor(e,t,n){super(t,e,n)}};var Li={};for(let r=0;r<8;r++)Li[r+6]=2**(6+r);var yn=class r extends pe{static[Ae](e,t,n,o){if(e[f]<30)throw new Error("Out of data while inside an Ogg Page");let i=me(e[E](0,30)),s=t[P](i);if(s)return new r(s);let a={[f]:30};if(i.substr(0,7)!=="vorbis")return null;a[k]=re.from(e[E](0,30));let c=new xt(a[k][De]);if(a[dt]=c.getUint32(7,!0),a[dt]!==0||(a[v]=e[11],a[te]=zr[a[v]-1]||"application defined",a[T]=c.getUint32(12,!0),a[Fr]=c.getInt32(16,!0),a[Ir]=c.getInt32(20,!0),a[Pr]=c.getInt32(24,!0),a[ft]=Li[(e[28]&240)>>4],a[mt]=Li[e[28]&15],a[mt]>a[ft])||e[29]!==1)return null;a[Q]=32,a[ir]=o,a[Xr]=n;{let{length:l,data:u,version:d,vorbisSetup:m,vorbisComments:p,...h}=a;t[Se](i,a,h)}return new r(a)}constructor(e){super(e),this[Fr]=e[Fr],this[Pr]=e[Pr],this[Ir]=e[Ir],this[mt]=e[mt],this[ft]=e[ft],this[k]=e[k],this[Xr]=e[Xr],this[ir]=e[ir]}};var gn=class extends oe{constructor(e,t,n){super(e,t),this.Frame=mr,n(this[D]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[D](){return Et}[gt](e){e[ee]=[];for(let t of $.get(e)[be])if(t[0]===1)this._headerCache[Pe](),this._identificationHeader=e[k],this._setupComplete=!1;else if(t[0]===3)this._vorbisComments=t;else if(t[0]===5)this._vorbisSetup=t,this._mode=this._parseSetupHeader(t),this._setupComplete=!0;else if(this._setupComplete){let n=yn[Ae](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[ee].push(new mr(t,n,this._getSamples(t,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,t){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?t[ft]:t[mt],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let t=new co(e),n={count:0,blockFlags:[]};for(;(t.read(1)&1)!==1;);let o;for(;n.count<64&&t.position>0;){on(t.read(8));let i=0;for(;t.read(8)===0&&i++<3;);if(i===4)o=t.read(7),n.blockFlags.unshift(o&1),t.position+=6,n.count++;else{((on(o)&126)>>1)+1!==n.count&&this._codecParser[ze]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var Ci=class{constructor(e,t,n){this._codecParser=e,this._headerCache=t,this._onCodec=n,this._continuedPacket=new re,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[D](){return this._codec||""}_updateCodec(e,t){this._codec!==e&&(this._headerCache[Fe](),this._parser=new t(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let t=me(e[E](0,8));switch(t){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",hn),!0;case(/^\x7fFLAC/.test(t)&&t):return this._updateCodec("flac",Ht),!0;case(/^\x01vorbis/.test(t)&&t):return this._updateCodec(Et,gn),!0;default:return!1}}_checkPageSequenceNumber(e){e[q]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[q]>1&&this._codecParser[ze]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[q]}`),this._pageSequenceNumber=e[q]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[q],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let t=$.get(e),n=Y.get(t[ue]),o=0;if(t[be]=n[pt].map(i=>e[k][E](o,o+=i)),this._continuedPacket[f]&&(t[be][0]=sn(this._continuedPacket,t[be][0]),this._continuedPacket=new re),n[sr][n[sr][f]-1]===255&&(this._continuedPacket=sn(this._continuedPacket,t[be].pop())),this._previousAbsoluteGranulePosition!==null&&(e[z]=Number(e[Te]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[Te],this._isSupported){let i=this._parser[gt](e);return this._codecParser[ht](i),i}else return e}},xn=class extends oe{constructor(e,t,n){super(e,t),this._onCodec=n,this.Frame=pn,this.Header=Ot,this._streams=new Map,this._currentSerialNumber=null}get[D](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[Ve](){let e=yield*this[yt](!0);this._currentSerialNumber=e[Ne];let t=this._streams.get(this._currentSerialNumber);return t||(t=new Ci(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,t)),e[de]&&this._streams.delete(this._currentSerialNumber),t._parsePage(e)}};var Ei=()=>{},bn=class{constructor(e,{onCodec:t,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=t||Ei,this._onCodecHeader=n||Ei,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?ta:Ei,this[Fe]()}get[D](){return this._parser?this._parser[D]:""}[Fe](){this._headerCache=new an(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[Fe]()}*parseChunk(e){for(let t=this._generator.next(e);t.value;t=this._generator.next())yield t.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new fn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new dn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Ht(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new xn(this,this._headerCache,this._onCodec);else throw new Error(`Unsupported Codec ${mimeType}`);for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){let e=yield*this._parser[Ve]();e&&(yield e)}}*[F](e=0,t=0){let n;for(;this._rawData[f]<=e+t;){if(n=yield,this._flushing)return this._rawData[E](t);n&&(this._totalBytesIn+=n[f],this._rawData=sn(this._rawData,n))}return this._rawData[E](t)}[ve](e){this._currentReadPosition+=e,this._rawData=this._rawData[E](e)}[rn](e){this._sampleRate=e[ue][T],e[ue][Z]=e[He]>0?Math.round(e[k][f]/e[He])*8:0,e[Je]=this._frameNumber++,e[zt]=this._totalBytesOut,e[Pt]=this._totalSamples,e[Ft]=this._totalSamples/this._sampleRate*1e3,e[Hr]=this._crc32(e[k]),this._headerCache[io](e[ue][Z],e[Ft]),this._totalBytesOut+=e[k][f],this._totalSamples+=e[z]}[ht](e){if(e[ee]){if(e[de]){let t=e[z];e[ee].forEach(n=>{let o=n[z];t<o&&(n[z]=t>0?t:0,n[He]=n[z]/n[ue][T]*1e3),t-=o,this[rn](n)})}else e[z]=0,e[ee].forEach(t=>{e[z]+=t[z],this[rn](t)});e[He]=e[z]/this._sampleRate*1e3||0,e[Pt]=this._totalSamples,e[Ft]=this._totalSamples/this._sampleRate*1e3||0,e[zt]=this._totalBytesOut}else this[rn](e)}_log(e,t){if(this._enableLogging){let n=[`${D}: ${this[D]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${zt}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[f]));t.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",t.reduce((i,s)=>i+`
|
|
4
|
+
`+s,""))}}[ze](...e){this._log(console.warn,e)}[oo](...e){this._log(console.error,e)}};var ma=bn;var vo=ee;var So=k;var fa=ue;var pa=de;var ha=ir;var ya=Pt;function Qe(r){var e=e;function t(){}e={};function n(x){throw x}var o,i,s,a,c,l,u,d,m,p,h;function y(){var x=h.buffer;o=new Int8Array(x),i=new Int16Array(x),a=new Uint8Array(x),c=new Uint16Array(x),s=new Int32Array(x),l=new Uint32Array(x),u=new Float32Array(x),d=new Float64Array(x),m=new BigInt64Array(x),p=new BigUint64Array(x)}for(var g=x=>{for(var ye,Sr,Gt=0,En=0,Tn=x.length,zn=new Uint8Array((Tn*3>>2)-(x[Tn-2]=="=")-(x[Tn-1]=="="));Gt<Tn;Gt+=4,En+=3)ye=he[x.charCodeAt(Gt+1)],Sr=he[x.charCodeAt(Gt+2)],zn[En]=he[x.charCodeAt(Gt)]<<2|ye>>4,zn[En+1]=ye<<4|Sr>>2,zn[En+2]=Sr<<6|he[x.charCodeAt(Gt+3)];return zn},b=()=>n(""),L=()=>{},C={},W=x=>x(),H=()=>performance.now(),Le=(x,ye)=>{if(C[x]&&(clearTimeout(C[x].id),delete C[x]),!ye)return 0;var Sr=setTimeout(()=>{delete C[x],W(()=>us(x,H()))},ye);return C[x]={id:Sr,timeout_ms:ye},0},N=Math.atan,K=Math.cos,Ie=Math.exp,Ce=Math.log,et=Math.pow,vr=Math.sin,Ut=x=>{var ye=a.length;return x>>>=0,!1},tt=x=>{throw`exit(${x})`},he=new Uint8Array(123),rt=25;rt>=0;--rt)he[48+rt]=52+rt,he[65+rt]=rt,he[97+rt]=26+rt;he[43]=62,he[47]=63;var qa={e:b,d:L,f:Le,b:N,a:K,i:Ie,h:Ce,g:et,c:vr,k:Ut,j:tt};function Ka(x){ns=x.n,os=x.o,is=x.p,ss=x.q,as=x.r,cs=x.s,ls=x.t,us=x.v}var ns,os,is,ss,as,cs,ls,us;function Ya(x){x.m()}Qe.wasm||Object.defineProperty(Qe,"wasm",{get:()=>String.raw`dynEncode012091253f87dì%nä= 4&¿nÝØäÂLÚªã9ÚØ[äº\ ¼¡³R=}L]Èÿ2 ÿù¶J1jj¡é,zäV|i¸Qk¹=
|
|
5
5
|
¨¨%ýv²±»oúâLa:ê±ÊäÌÓ.÷Øý×>àW>z¯°8¯ñ\Ñós9\§ôÊ@Ü (tÃø4° ¢7fqÓg²Jè6x[zç®&4=} p.(°tÍÞã¾>÷CõË"*k?¿~7~H2ÛÜâ.ÏQä;6{ÜãFÑá'DD¤±°HQ>MínÎÏÎöʵÑÓ
ÞÌP¼P¨Þ*X²E=M¦qíxMñ=MÌë4/<gNO/¢ ¢>a~Ï®ììììì0ìa笡çëOÓÇM Q9tùµyuéµµÞÏ/±Óõò}E{òÓJ¹Û|·ôfÒ c¬Wêaûÿlʽp¹|)ÖEL¦ }ypÕSϹI]¢ºãæ°ÿo¶7ÛRq¾ÔÅEߨ]æËwÚ{óçVwó1¾EØpàe"Æùû¡Áª Ààð´LõÎxEÓ¢N¦
9ëùi& Ò§Ø!ÇFçS=MbäO?߷縪7ùa}5ðûÕtsUþ£KïgN¾)ø§\V0uSIö:ÌU4ж¯´Õn9ÔèE£ZƼ{hµmÙ¾6ÆÑ+xñ´«þ¸=Mߤ·å®«ïÆGFÝì|H?äE"þ!9«Æïpæ'][¯ù·£W÷O§&#ax$qf=}ø ô bÏ×W÷LôoÝWQÕÓ)u÷½èV|¥Gà¨Ö¸@ê|ÇK5ò A·Â9CS2¸¼¿,äÝÑÝy!ÑR%ÆÝÎ0Âv§ qTcó±hØÉã=}Z=}Ælüën¯ð(-°ÜwVÏï.th¥íS~SÏ»ZZÔZ
|
|
6
6
|
3BÌÛ¬<éæO)ÎyÚ¯O*®uìÛ$öI¥Ý9ôø³\¤ò³Ù¹ÇP¸J×y@ÔyOÇmô½ü¾|S?2àú¤F?½ûoo3ô;<àáûÜ8ì²7ïë¨RäY¹|ÓºÌF,Ð-¸*\P!FJÒ8= o6HwLrúº¶ÐÛ\Ù¬o¢9IqÝ.ôf¶ÎÈ{Ī×N|Mfs
¤ÉÝàâ§*+ã§ô¯î¬7ç×§ä)!Z¨É,Äp~ý·wsSGóäsE\ýïé§Ö:Ò'Cç(_X$\¦½eÒ8$XF|eíÙÓ¡¤Û<ØÞÛ¸9¿ðÃÎ#b~× 4éîÿÏq
|
|
7
7
|
ód|0wU&®è·vh6¨{ÚçÚ18Ó(ÓY\0¦= çèíß)Ø=}[xü-v?N(Kkg0}âÚ´ð¬ÕQNÍ¢usѳ=}. ëg
û= ÍMBp'²¨ x4è@9t§eݵ¾âð½ z?Z¹FH'̯¿<K,üµ<{ ¶JãývåàÆeù0Ð"F¥ÃÒÞþÔÉvCzl}ðN£ Í^P%²¸FX»WÎêô¶
äÉJ^g×SÃã.Ät*'ªG«ÒB<ÜÓ
¿ºp\àuV¯£ÅݽáÞ ùß=}ÎÚ^ÿí>¥!¨ â=M·?*/¤"å)â·ÿîÿî*(%*2[½"üríÔ4l½»a}¯CwpCÓèìGc-ã6®=M32k?Êg
!So-x>³G+ã@ò, ÁïáåN0þÙè.~È÷¡vTr¶Ã[üB±º»ávëw¹{pܺû"Aæ±9Æ^¹³òïRIAy5GÂwÉf4@Tù|qý7ðªwBL|Ôqv!ª°|]KiÐJVQ5¸åõ§å"H¼0e¬<óBîÚSÏUìHPÙA+çÉ'seÌNf°@ÈM,ð½egÖ¬x©û½2~«Ò1;Ö«
¯°4&90èE»Ó׺çʧJ<Æ¿&~Nu¼ãÙµ¢.UÇä(qQô^ö·%!É
|
|
@@ -138,7 +138,7 @@ KÙ:KµºKí{K]ûK£[KÚKóKÓ½R׿ÿ'P^j9TîçmóþL¿_o©×hÙtÙ
|
|
|
138
138
|
Ái;ªäÀ%n= =M+W= ÓÖc[aS
|
|
139
139
|
FÁð]NôÝ'= qr(¶ù¤nü«òÿ¿d&ÿÈõT4Þ=}z|ö ¿OW×SMtdH.ÏãRX&§o3ØÜXÍ^ÊMí£W´iâ]NüOå£S£Å·ç÷ݧ½GÑUy¹¦ß§/6P0(Cúýb"þ¥°VÙÄá£ÓÙ@¾YýòD{òÃv?EP©=MBé\ĽYäýRò øfâëEEf¼D+gC×úDZGÅÿ±Ç?TzÙ¡±ÏÁÕ¯¦ðvZmT}3xËz×cºrÑM=Mc-É©Ô7½wæc§Î»cû¾yfÙWòÆÝÔc¥³ôØf«Äñ·9ø%g:y^+{U]¤þ
[&fÓÏYë«Gªõ¹¦Öðþ¬moÛø?/ÛS.[S9ÛùC
/û2²Y£ÎÑ%/sy¢×ÌùJW6Oí\g0^JùêßÏ0í[Ü'ÏÔ>À-¿[ÔW?Y]±ØÙÃî<~ÎëR~Ìf¾Z/×¼_á¾Þê+îoÐñ{Þ\e3K%©¹§íB¹§(c=}ËÈ·SzÔnf§èx}o\9öf|%Ýå¥~©IÇüñY8}Ffú@Rú1éþ3÷ËótQøvû|³Îaá,Óé>BG6Òê}ÃJ|¶=}°öf6õk¶ÌºHgNjÒ{æ¾M;9·é§WèO±Ä3ÒËÒyt ;ù´à©a|Ó^!ÝøûÂÄ
|
|
140
140
|
(VV¸ÇÙcÏ>yoçzÃvòG{3Þ£½c×ôíÅé;°OÛGØ<wÜW> rU]q{û'ùÝír{*øï?t-ígùWÿ
&§]m}×ût¥Ë~ß&>&Õv!b#ÅÌq¢µ|jÍüùÉ^Æ&ôþ~sIµ"]d)uâ´ºvk Å\<Íÿöê½Â
|
|
141
|
-
ïBçϧmÙIólÜoëVb¦¯éWÇû3`});var ja={a:qa};this.setModule=x=>{r.setModule(Qe,x)},this.getModule=()=>r.getModule(Qe),this.instantiate=()=>(this.getModule().then(x=>WebAssembly.instantiate(x,ja)).then(x=>{let ye=x.exports;Ka(ye),h=ye.l,y(),Ya(ye),t()}),this.ready=new Promise(x=>{t=x}).then(()=>{this.HEAP=h.buffer,this.malloc=os,this.free=ls,this.create_decoder=ns,this.send_setup=is,this.init_dsp=ss,this.decode_packets=as,this.destroy_decoder=cs}),this)}function Bt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(r=>{this._common=r,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=r=>{this._input.buf.set(r),this._inputLen.buf[0]=r.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=r=>{let e=[],t=0,n=[];for(let o=0;o<r.length;o++){let i=r[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let u=new Float32Array(s);s&&u.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(u)}e.push(a),t+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let u=this._common.codeToString(this._errors.buf[l]),d=this._common.codeToString(this._errors.buf[l+1]);n.push({message:u+" vorbis_synthesis"+d,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],t,this._sampleRate.buf[0],16)},this._isWebWorker=Bt.isWebWorker,this._WASMAudioDecoderCommon=Bt.WASMAudioDecoderCommon||H,this._EmscriptenWASM=Bt.EmscriptenWASM||Qe,this._module=Bt.module,this._inputSize=128*1024,this._ready=this._init(),this}var _o=Symbol(),Ze=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new H,this._init(),this._ready=this[_o](Bt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new ma("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[_o](e){if(this._decoder){let t=this._decoder;await t.ready.then(()=>t.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let t=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[So][0]===1&&this._decoder.sendSetupHeader(s[So]),s[vo].length)){let a=s[vo][0][fa];this._decoder.sendSetupHeader(a[ha]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}t.push(...s[vo].map(a=>a[So]))}let n=await this._decoder.decodePackets(t);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[pa]){let i=this._totalSamplesDecoded-o[ya];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let t=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),t}};var Ti=class extends $t{constructor(e){super(e,"ogg-vorbis-decoder",Bt,Qe)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},bn=class extends Ze{constructor(){super(),this._ready=super[_o](Ti)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};qn(Ze,"OggVorbisDecoder");qn(bn,"OggVorbisDecoderWebWorker");var zi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Ao(r,e=new Ze){await e.ready;let t=await e.decode(new Uint8Array(r)),n=t.errors;if(n&&n.length>0)throw new zi(n.map(o=>o.message).join("; "));return{sampleRate:t.sampleRate,channels:t.channelData.length,bitDepth:t.bitDepth,channelData:t.channelData}}var vn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},fr=class{constructor(e,t={}){this.vfs=e;this.refCounts=new Map;this.cache=new it(t.cacheSize??64)}get size(){return this.cache.size}async load(e){let t=e.toLowerCase(),n=this.cache.get(t);if(n)return this.refCounts.set(t,(this.refCounts.get(t)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(t,s),this.refCounts.set(t,1),s}release(e){let t=e.toLowerCase(),n=this.refCounts.get(t)??0;n<=1?(this.cache.delete(t),this.refCounts.delete(t)):this.refCounts.set(t,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,t){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Xn(t),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Ao(t);throw new vn(`Unsupported audio format: ${e}`)}};var fl="quake2ts-pak-indexes",pl="pak-indexes";function ga(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function Sn(r,e){let t=ga();return t?new Promise((n,o)=>{let i=t.open(r,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function _n(r,e,t,n){return new Promise((o,i)=>{let a=r.transaction(e,t).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Fi(r,e){return`${W(r)}:${e.toString(16)}`}function hl(r){return r.map(e=>({...e}))}var Mo=class{constructor(e=fl,t=pl){this.dbName=e;this.storeName=t}get isSupported(){return!!ga()}async persist(e){if(!this.isSupported)return;let t=e.validate(),n={...t,key:Fi(e.name,t.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:hl(t.entries)},o=await Sn(this.dbName,this.storeName);return await _n(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,t){if(!this.isSupported)return;let n=await Sn(this.dbName,this.storeName),o=t!==void 0?Fi(e,t):void 0,i=await _n(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=W(e),a=i.filter(c=>W(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,t){if(!this.isSupported)return!1;let n=await Sn(this.dbName,this.storeName),o=t!==void 0?Fi(e,t):void 0,i=await _n(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${W(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await Sn(this.dbName,this.storeName);await _n(e,this.storeName,"readwrite",t=>t.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await Sn(this.dbName,this.storeName),t=await _n(e,this.storeName,"readonly",n=>n.getAll());return e.close(),t.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Nt=class extends Error{constructor(t,n){super(n??`Missing dependencies: ${t.join(", ")}`);this.missing=t;this.name="AssetDependencyError"}},An=class{constructor(){this.nodes=new Map}register(e,t=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};t.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),t.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let t=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,t);if(n.length>0)throw new Nt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);t.loaded=!0,this.nodes.set(e,t)}markUnloaded(e){let t=this.nodes.get(e);t&&(t.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let t=this.nodes.get(e);return t?this.getMissingDependencies(e,t):[]}reset(){this.nodes.clear()}getMissingDependencies(e,t){let n=[];for(let o of t.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},wo=class{constructor(e,t={}){this.vfs=e;this.textures=new jt({capacity:t.textureCacheCapacity??128}),this.audio=new fr(e,{cacheSize:t.audioCacheSize??64}),this.dependencyTracker=t.dependencyTracker??new An,this.md2=new Kt(e),this.md3=new Yt(e)}isAssetLoaded(e,t){return this.dependencyTracker.isLoaded(this.makeKey(e,t))}registerTexture(e,t){this.textures.set(e,t);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let t=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),t}async loadMd2Model(e,t=[]){let n=this.makeKey("model",e),o=t.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Nt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,t=[]){let n=this.makeKey("model",e),o=t.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Nt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,t){return`${e}:${W(t)}`}};var Pi=32,Lo=(d=>(d[d.Auto=0]="Auto",d[d.Weapon=1]="Weapon",d[d.Voice=2]="Voice",d[d.Item=3]="Item",d[d.Body=4]="Body",d[d.Aux=5]="Aux",d[d.Footstep=6]="Footstep",d[d.Aux3=7]="Aux3",d[d.NoPhsAdd=8]="NoPhsAdd",d[d.Reliable=16]="Reliable",d[d.ForcePos=32]="ForcePos",d))(Lo||{}),xa=-1,Co=0,ba=1,va=2,Sa=3,pr=80,_a=.003;function Vt(r){return r===3?r*.001:r*5e-4}function Eo(r){let e=Vt(r);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var To=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function zo(r){let e=r.getContext(),t=e.createGain();t.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,t.connect(o),o.connect(n)):t.connect(n),n.connect(e.destination),{context:e,master:t,compressor:n,filter:o}}var Fo=class{constructor(e=new Xt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,t){let n=this.registerName(e);return this.buffers.set(n,t),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Po=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((t,n)=>{if(!t.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return t.decodeAudioData(n)})}async precache(e){let t=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of t)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,u=await this.decodeAudio(o,l);this.registry.register(i,u),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let t=W(e.replace(/^\//,""));return t.startsWith(this.soundRoot)?t:W(`${this.soundRoot}${t}`)}};var yl=7,Mn=r=>r&yl;function Io(r){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===r}))}function Ro(r,e,t,n){if(t<0)throw new Error("pickChannel: entchannel must be non-negative");let o=Mn(t),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<r.length;a+=1){let c=r[a],l=Mn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let u=c.endTimeMs-n.nowMs;(i===-1||u<s)&&(s=u,i=a)}return i===-1?void 0:i}function ko(r,e,t,n,o){if(o)return{left:t,right:t,distanceComponent:0};let i=fs(r,e.origin),s=Jo(i),a=Ee(i),c=s-80;c<0&&(c=0),c*=Vt(n);let l=$o(e.right,a),u=e.mono??!1,d=u||n===0?1:.5*(1+l),m=u||n===0?1:.5*(1-l),p=Math.max(0,Math.floor(t*(1-c)*d));return{left:Math.max(0,Math.floor(t*(1-c)*m)),right:p,distanceComponent:c}}var Do=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Io(e.playerEntity),this.listener=e.listener??{origin:ms,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=zo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let t=this.registry.get(e.soundIndex);if(!t)return;let n=this.graph.context,o=n.currentTime*1e3,i=Ro(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=t,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),u=this.createPanner(n,e.attenuation),d=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=Aa(d?.gainScale??1),p=this.resolveOcclusion?this.createOcclusionFilter(n,d?.lowpassHz??2e4):void 0;this.applyOriginToPanner(u,c);let h=e.entity===this.playerEntity,y=ko(c,this.listener,e.volume,e.attenuation,h),b=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=b*m;let C=n.currentTime+(e.timeOffsetMs??0)/1e3,L=(e.looping?Number.POSITIVE_INFINITY:t.duration*1e3)+C*1e3;a.connect(u),p?(u.connect(p),p.connect(l)):u.connect(l),l.connect(this.graph.master),a.start(C),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let q={channelIndex:i,entnum:e.entity,entchannel:Mn(e.channel),endTimeMs:L,source:a,panner:u,gain:l,baseGain:b,origin:c,attenuation:e.attenuation,occlusion:p?{scale:m,lowpassHz:d?.lowpassHz,filter:p}:d?{scale:m,lowpassHz:d.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:Mn(e.channel),endTimeMs:L,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,q),q}stop(e){let t=this.activeSources.get(e);t&&(t.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[t,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[t].active=!1,this.activeSources.delete(t))}updateEntityPosition(e,t){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,t),n.origin=t,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,t,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,t,n,o){return this.play({entity:0,channel:0,soundIndex:t,volume:n,attenuation:o,origin:e})}ambientSound(e,t,n){return this.play({entity:0,channel:0,soundIndex:t,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,t=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?t:2e4)}createPanner(e,t){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,t)}configurePanner(e,t){let n=Vt(t);return e.refDistance=80,e.maxDistance=Eo(t),e.rolloffFactor=n,e.distanceModel=t===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,t){e.positionX.value=t.x,e.positionY.value=t.y,e.positionZ.value=t.z}createOcclusionFilter(e,t){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Ii(t,10,2e4),n}applyOcclusion(e,t){let n=Aa(t?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=t?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Ii(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=t?.lowpassHz):t&&(e.occlusion={scale:n,lowpassHz:t.lowpassHz})}},Ii=(r,e,t)=>Math.min(t,Math.max(e,r)),Aa=r=>Ii(r,0,1);var Ho=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async t=>t),this.volume=e.volume??1}async play(e,{loop:t=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=t,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=t,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),t=!!this.element?.paused;return{track:this.track,paused:t,playing:e,volume:this.volume}}};var Oo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,t,n,o,i,s){this.system.play({entity:e,channel:t,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,t,n,o){this.system.positionedSound(e,t,n,o)}loop_sound(e,t,n,o,i){this.system.play({entity:e,channel:t,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,t=!0){return this.music?this.music.play(e,{loop:t}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,t,n){this.system.ambientSound(e,t,n)}play_channel(e){this.system.play({...e})}};function gl(r){r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.enable(r.CULL_FACE),r.cullFace(r.BACK),r.enable(r.BLEND),r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA)}function xl(r,e,t,n){for(let o of e){let i=r.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of t){let i=r.getExtension(o);i&&n.set(o,i)}}function Ma(r,e={}){let{contextAttributes:t,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=r.getContext("webgl2",t??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");gl(i);let s=new Map;xl(i,n,o,s);let a=!1,c=new Set,l=new Set,u=m=>{a=!0,m.preventDefault();for(let p of c)p()},d=()=>{a=!1;for(let m of l)m()};return r.addEventListener("webglcontextlost",u),r.addEventListener("webglcontextrestored",d),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){r.removeEventListener("webglcontextlost",u),r.removeEventListener("webglcontextrestored",d),c.clear(),l.clear(),s.clear()}}}function wa(r,e,t){let n=r.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(r.shaderSource(n,t),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS)){let i=r.getShaderInfoLog(n)??"Unknown shader compile failure";throw r.deleteShader(n),new Error(i)}return n}function bl(r,e,t,n){let o=r.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(r.attachShader(o,e),r.attachShader(o,t),n)for(let[s,a]of Object.entries(n))r.bindAttribLocation(o,a,s);if(r.linkProgram(o),!r.getProgramParameter(o,r.LINK_STATUS)){let s=r.getProgramInfoLog(o)??"Unknown shader link failure";throw r.deleteProgram(o),new Error(s)}return o}var ie=class r{constructor(e,t){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=t}static create(e,t,n){let o=wa(e,e.VERTEX_SHADER,t.vertex),i=wa(e,e.FRAGMENT_SHADER,t.fragment);try{let s=bl(e,o,i,n);return new r(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let t=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,t)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let t=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,t)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function La(r,e,t){return ie.create(r,e,t)}var se=class{constructor(e,t=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,t)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,t=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,t)}update(e,t=0){this.bind(),this.gl.bufferSubData(this.target,t,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},we=class extends se{constructor(e,t=e.STATIC_DRAW){super(e,t,e.ELEMENT_ARRAY_BUFFER)}},le=class{constructor(e){this.gl=e;let t=e.createVertexArray();if(!t)throw new Error("Failed to allocate vertex array object");this.vao=t}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,t){this.bind(),t&&t.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},hr=class{constructor(e,t=e.TEXTURE_2D){this.gl=e,this.target=t;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,t,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,t,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},yr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let t=e.createTexture();if(!t)throw new Error("Failed to allocate cubemap texture");this.texture=t}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,t,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,t,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Bo=class{constructor(e){this.gl=e;let t=e.createFramebuffer();if(!t)throw new Error("Failed to allocate framebuffer");this.framebuffer=t}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,t,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,t.target,t.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var ki=4,Ri=7*ki,Di=[{index:0,size:3,type:5126,stride:Ri,offset:0},{index:1,size:2,type:5126,stride:Ri,offset:3*ki},{index:2,size:2,type:5126,stride:Ri,offset:5*ki}];function vl(r,e){return{width:r,height:r,padding:e,data:new Uint8Array(r*r*4),cursorX:0,cursorY:0,rowHeight:0}}function Sl(r){let e=r.width*r.height;if(e===0)throw new Error("Invalid lightmap with zero area");let t=r.samples.byteLength/e;if(!Number.isInteger(t)||t<3||t>4)throw new Error("Unsupported lightmap channel count");return t}function _l(r,e,t){let n=Sl(t),o=r.width*4,i=e.x+r.padding,s=e.y+r.padding,a=0;for(let c=0;c<t.height;c++){let l=(s+c)*o+i*4;for(let u=0;u<t.width;u++){let d=l+u*4;r.data[d]=t.samples[a],r.data[d+1]=t.samples[a+1],r.data[d+2]=t.samples[a+2],r.data[d+3]=n===4?t.samples[a+3]:255,a+=n}}}function Al(r,e,t){let n=e.width+t.lightmapPadding*2,o=e.height+t.lightmapPadding*2;if(n>t.atlasSize||o>t.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of r){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+t.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:r.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+t.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=vl(t.atlasSize,t.lightmapPadding);r.push(i);let s={atlasIndex:r.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+t.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function No(r){return r instanceof Float32Array?r:new Float32Array(r)}function Ml(r,e){if(!r){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return r instanceof Uint16Array?r:new Uint16Array(r)}function wl(r,e){let t=new Float32Array(r.length);for(let n=0;n<r.length;n+=2)t[n]=e.offset[0]+r[n]*e.scale[0],t[n+1]=e.offset[1]+r[n+1]*e.scale[1];return t}function Ll(r,e){let t=No(r.vertices),n=No(r.textureCoords),o=e?wl(No(r.lightmapCoords??r.textureCoords),e):No(r.lightmapCoords??new Float32Array(n.length)),i=t.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,u=a*7;s[u]=t[c],s[u+1]=t[c+1],s[u+2]=t[c+2],s[u+3]=n[l],s[u+4]=n[l+1],s[u+5]=o[l],s[u+6]=o[l+1]}return s}function Ca(r,e,t={}){let n={atlasSize:t.atlasSize??1024,lightmapPadding:t.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:u,atlas:d}=Al(o,c.lightmap,n);_l(d,u,c.lightmap),i.set(l,{atlasIndex:u.atlasIndex,offset:[(u.x+n.lightmapPadding)/n.atlasSize,(u.y+n.lightmapPadding)/n.atlasSize],scale:[u.width/n.atlasSize,u.height/n.atlasSize]})});let s=o.map(c=>{let l=new hr(r);return l.setParameters({wrapS:r.CLAMP_TO_EDGE,wrapT:r.CLAMP_TO_EDGE,minFilter:r.LINEAR,magFilter:r.LINEAR}),l.uploadImage(0,r.RGBA,c.width,c.height,0,r.RGBA,r.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let u=i.get(l),d=Ll(c,u),m=Ml(c.indices,d.length/7),p=new se(r,r.STATIC_DRAW,r.ARRAY_BUFFER);p.upload(d);let h=new we(r,r.STATIC_DRAW);h.upload(m);let y=new le(r);return y.configureAttributes(Di,p),{vao:y,vertexBuffer:p,indexBuffer:h,indexCount:m.length,texture:c.texture,surfaceFlags:c.surfaceFlags??_r,lightmap:u,vertexData:d,indexData:m}}),lightmaps:s}}function gr(r){let{normal:e,distance:t}=r,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return r;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:t*o}}function Ea(r){if(r.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=r[0],t=r[4],n=r[8],o=r[12],i=r[1],s=r[5],a=r[9],c=r[13],l=r[2],u=r[6],d=r[10],m=r[14],p=r[3],h=r[7],y=r[11],g=r[15];return[gr({normal:{x:p+e,y:h+t,z:y+n},distance:g+o}),gr({normal:{x:p-e,y:h-t,z:y-n},distance:g-o}),gr({normal:{x:p+i,y:h+s,z:y+a},distance:g+c}),gr({normal:{x:p-i,y:h-s,z:y-a},distance:g-c}),gr({normal:{x:p+l,y:h+u,z:y+d},distance:g+m}),gr({normal:{x:p-l,y:h-u,z:y-d},distance:g-m})]}function Cl(r,e){return r.normal.x*e.x+r.normal.y*e.y+r.normal.z*e.z+r.distance}function wn(r,e,t){for(let n of t){let o=n.normal.x>=0?e.x:r.x,i=n.normal.y>=0?e.y:r.y,s=n.normal.z>=0?e.z:r.z;if(Cl(n,{x:o,y:i,z:s})<0)return!1}return!0}function Ta(r){return r<0}function za(r){return-r-1}function Fa(r,e){return r.normal[0]*e.x+r.normal[1]*e.y+r.normal[2]*e.z-r.dist}function El(r,e,t){if(!r||e<0||t<0)return!0;let n=Math.ceil(r.numClusters/8),o=r.clusters[e].pvs,i=Math.floor(t/8),s=1<<t%8;return i<0||i>=n?!1:(o[i]&s)!==0}function Tl(r,e){let t={x:r.mins[0],y:r.mins[1],z:r.mins[2]},n={x:r.maxs[0],y:r.maxs[1],z:r.maxs[2]};return wn(t,n,e)}function Oi(r,e){let t=0;for(;t>=0;){let n=r.nodes[t],o=r.planes[n.planeIndex],s=Fa(o,e)>=0?0:1,a=n.children[s];if(Ta(a))return za(a);t=a}return-1}function zl(r,e){let t=r.leafs[e],n=[];for(let o=0;o<t.numLeafFaces;o+=1)n.push(r.leafLists.leafFaces[e][o]);return n}function Hi(r,e,t,n,o,i,s){if(Ta(e)){let m=za(e),p=r.leafs[m];if(!El(r.visibility,o,p.cluster)||!Tl(p,n))return;let h={x:(p.mins[0]+p.maxs[0])*.5,y:(p.mins[1]+p.maxs[1])*.5,z:(p.mins[2]+p.maxs[2])*.5},y=h.x-t.x,g=h.y-t.y,b=h.z-t.z,C=-(y*y+g*g+b*b);for(let L of zl(r,m))s.has(L)||(s.add(L),i.push({faceIndex:L,leafIndex:m,sortKey:C}));return}let a=r.nodes[e],c=r.planes[a.planeIndex],l=Fa(c,t),u=l>=0?a.children[0]:a.children[1],d=l>=0?a.children[1]:a.children[0];wn({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(Hi(r,u,t,n,o,i,s),Hi(r,d,t,n,o,i,s))}function Pa(r,e,t){let n=Oi(r,e),o=n>=0?r.leafs[n].cluster:-1,i=[];return Hi(r,0,e,t,o,i,new Set),i}var Bi=`#version 300 es
|
|
141
|
+
ïBçϧmÙIólÜoëVb¦¯éWÇû3`});var ja={a:qa};this.setModule=x=>{r.setModule(Qe,x)},this.getModule=()=>r.getModule(Qe),this.instantiate=()=>(this.getModule().then(x=>WebAssembly.instantiate(x,ja)).then(x=>{let ye=x.exports;Ka(ye),h=ye.l,y(),Ya(ye),t()}),this.ready=new Promise(x=>{t=x}).then(()=>{this.HEAP=h.buffer,this.malloc=os,this.free=ls,this.create_decoder=ns,this.send_setup=is,this.init_dsp=ss,this.decode_packets=as,this.destroy_decoder=cs}),this)}function Bt(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(r=>{this._common=r,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._firstPage=!0,this._inputLen=this._common.allocateTypedArray(1,Uint32Array),this._outputBufferPtr=this._common.allocateTypedArray(1,Uint32Array),this._channels=this._common.allocateTypedArray(1,Uint32Array),this._sampleRate=this._common.allocateTypedArray(1,Uint32Array),this._samplesDecoded=this._common.allocateTypedArray(1,Uint32Array);let e=256;this._errors=this._common.allocateTypedArray(e,Uint32Array),this._errorsLength=this._common.allocateTypedArray(1,Int32Array),this._frameNumber=0,this._inputBytes=0,this._outputSamples=0,this._decoder=this._common.wasm.create_decoder(this._input.ptr,this._inputLen.ptr,this._outputBufferPtr.ptr,this._channels.ptr,this._sampleRate.ptr,this._samplesDecoded.ptr,this._errors.ptr,this._errorsLength.ptr,e)}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.destroy_decoder(this._decoder),this._common.free()},this.sendSetupHeader=r=>{this._input.buf.set(r),this._inputLen.buf[0]=r.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=r=>{let e=[],t=0,n=[];for(let o=0;o<r.length;o++){let i=r[o];this._input.buf.set(i),this._inputLen.buf[0]=i.length,this._common.wasm.decode_packets(this._decoder);let s=this._samplesDecoded.buf[0],a=[],c=new Uint32Array(this._common.wasm.HEAP,this._outputBufferPtr.buf[0],this._channels.buf[0]);for(let l=0;l<this._channels.buf[0];l++){let u=new Float32Array(s);s&&u.set(new Float32Array(this._common.wasm.HEAP,c[l],s)),a.push(u)}e.push(a),t+=s,this._frameNumber++,this._inputBytes+=i.length,this._outputSamples+=s;for(let l=0;l<this._errorsLength.buf;l+=2){let u=this._common.codeToString(this._errors.buf[l]),d=this._common.codeToString(this._errors.buf[l+1]);n.push({message:u+" vorbis_synthesis"+d,frameLength:i.length,frameNumber:this._frameNumber,inputBytes:this._inputBytes,outputSamples:this._outputSamples})}this._errorsLength.buf[0]=0}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,e,this._channels.buf[0],t,this._sampleRate.buf[0],16)},this._isWebWorker=Bt.isWebWorker,this._WASMAudioDecoderCommon=Bt.WASMAudioDecoderCommon||O,this._EmscriptenWASM=Bt.EmscriptenWASM||Qe,this._module=Bt.module,this._inputSize=128*1024,this._ready=this._init(),this}var _o=Symbol(),Ze=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new O,this._init(),this._ready=this[_o](Bt)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new ma("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[_o](e){if(this._decoder){let t=this._decoder;await t.ready.then(()=>t.free())}return this._decoder=new e,this._decoder.ready}get ready(){return this._ready}async reset(){return this._init(),this._decoder.reset()}free(){this._decoder.free()}async decodeOggPages(e){let t=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[So][0]===1&&this._decoder.sendSetupHeader(s[So]),s[vo].length)){let a=s[vo][0][fa];this._decoder.sendSetupHeader(a[ha]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}t.push(...s[vo].map(a=>a[So]))}let n=await this._decoder.decodePackets(t);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[pa]){let i=this._totalSamplesDecoded-o[ya];if(i>0){for(let s=0;s<n.channelData.length;s++)n.channelData[s]=n.channelData[s].subarray(0,n.samplesDecoded-i);n.samplesDecoded-=i,this._totalSamplesDecoded-=i}}return n}async decode(e){return this.decodeOggPages([...this._codecParser.parseChunk(e)])}async flush(){let e=await this.decodeOggPages([...this._codecParser.flush()]);return await this.reset(),e}async decodeFile(e){let t=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),t}};var Ti=class extends $t{constructor(e){super(e,"ogg-vorbis-decoder",Bt,Qe)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},vn=class extends Ze{constructor(){super(),this._ready=super[_o](Ti)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};qn(Ze,"OggVorbisDecoder");qn(vn,"OggVorbisDecoderWebWorker");var zi=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function Ao(r,e=new Ze){await e.ready;let t=await e.decode(new Uint8Array(r)),n=t.errors;if(n&&n.length>0)throw new zi(n.map(o=>o.message).join("; "));return{sampleRate:t.sampleRate,channels:t.channelData.length,bitDepth:t.bitDepth,channelData:t.channelData}}var Sn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},fr=class{constructor(e,t={}){this.vfs=e;this.refCounts=new Map;this.cache=new it(t.cacheSize??64)}get size(){return this.cache.size}async load(e){let t=e.toLowerCase(),n=this.cache.get(t);if(n)return this.refCounts.set(t,(this.refCounts.get(t)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(t,s),this.refCounts.set(t,1),s}release(e){let t=e.toLowerCase(),n=this.refCounts.get(t)??0;n<=1?(this.cache.delete(t),this.refCounts.delete(t)):this.refCounts.set(t,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,t){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Xn(t),i=o.channels,s=Array.from({length:i},()=>new Float32Array(o.samples.length/i));for(let a=0;a<o.samples.length;a+=1)s[a%i][Math.floor(a/i)]=o.samples[a];return{sampleRate:o.sampleRate,channels:i,bitDepth:o.bitsPerSample,channelData:s}}if(n.endsWith(".ogg")||n.endsWith(".oga"))return Ao(t);throw new Sn(`Unsupported audio format: ${e}`)}};var fl="quake2ts-pak-indexes",pl="pak-indexes";function ga(){if(typeof indexedDB<"u")return indexedDB;if(typeof window<"u"&&"indexedDB"in window)return window.indexedDB;if(typeof globalThis<"u"&&"indexedDB"in globalThis)return globalThis.indexedDB}function _n(r,e){let t=ga();return t?new Promise((n,o)=>{let i=t.open(r,1);i.onupgradeneeded=()=>{let{result:s}=i;s.objectStoreNames.contains(e)||s.createObjectStore(e,{keyPath:"key"})},i.onerror=()=>o(i.error??new Error("Unknown IndexedDB error")),i.onsuccess=()=>n(i.result)}):Promise.reject(new Error("IndexedDB is not available in this environment"))}function An(r,e,t,n){return new Promise((o,i)=>{let a=r.transaction(e,t).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Fi(r,e){return`${X(r)}:${e.toString(16)}`}function hl(r){return r.map(e=>({...e}))}var Mo=class{constructor(e=fl,t=pl){this.dbName=e;this.storeName=t}get isSupported(){return!!ga()}async persist(e){if(!this.isSupported)return;let t=e.validate(),n={...t,key:Fi(e.name,t.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:hl(t.entries)},o=await _n(this.dbName,this.storeName);return await An(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,t){if(!this.isSupported)return;let n=await _n(this.dbName,this.storeName),o=t!==void 0?Fi(e,t):void 0,i=await An(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=X(e),a=i.filter(c=>X(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,t){if(!this.isSupported)return!1;let n=await _n(this.dbName,this.storeName),o=t!==void 0?Fi(e,t):void 0,i=await An(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${X(e)}:`;return s.delete(IDBKeyRange.bound(a,`${a}\uFFFF`,!1,!0))});return n.close(),typeof i=="number"?i>0:!0}async clear(){if(!this.isSupported)return;let e=await _n(this.dbName,this.storeName);await An(e,this.storeName,"readwrite",t=>t.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await _n(this.dbName,this.storeName),t=await An(e,this.storeName,"readonly",n=>n.getAll());return e.close(),t.sort((n,o)=>o.persistedAt-n.persistedAt)}};var Nt=class extends Error{constructor(t,n){super(n??`Missing dependencies: ${t.join(", ")}`);this.missing=t;this.name="AssetDependencyError"}},Mn=class{constructor(){this.nodes=new Map}register(e,t=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};t.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),t.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let t=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,t);if(n.length>0)throw new Nt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);t.loaded=!0,this.nodes.set(e,t)}markUnloaded(e){let t=this.nodes.get(e);t&&(t.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let t=this.nodes.get(e);return t?this.getMissingDependencies(e,t):[]}reset(){this.nodes.clear()}getMissingDependencies(e,t){let n=[];for(let o of t.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},wo=class{constructor(e,t={}){this.vfs=e;this.textures=new jt({capacity:t.textureCacheCapacity??128}),this.audio=new fr(e,{cacheSize:t.audioCacheSize??64}),this.dependencyTracker=t.dependencyTracker??new Mn,this.md2=new Kt(e),this.md3=new Yt(e)}isAssetLoaded(e,t){return this.dependencyTracker.isLoaded(this.makeKey(e,t))}registerTexture(e,t){this.textures.set(e,t);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let t=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),t}async loadMd2Model(e,t=[]){let n=this.makeKey("model",e),o=t.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Nt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,t=[]){let n=this.makeKey("model",e),o=t.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new Nt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md3.load(e);return this.dependencyTracker.markLoaded(n),s}resetForLevelChange(){this.textures.clear(),this.audio.clearAll(),this.dependencyTracker.reset()}makeKey(e,t){return`${e}:${X(t)}`}};var Pi=32,Lo=(d=>(d[d.Auto=0]="Auto",d[d.Weapon=1]="Weapon",d[d.Voice=2]="Voice",d[d.Item=3]="Item",d[d.Body=4]="Body",d[d.Aux=5]="Aux",d[d.Footstep=6]="Footstep",d[d.Aux3=7]="Aux3",d[d.NoPhsAdd=8]="NoPhsAdd",d[d.Reliable=16]="Reliable",d[d.ForcePos=32]="ForcePos",d))(Lo||{}),xa=-1,Co=0,ba=1,va=2,Sa=3,pr=80,_a=.003;function Vt(r){return r===3?r*.001:r*5e-4}function Eo(r){let e=Vt(r);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var To=class{constructor(e){this.factory=e}getContext(){return this.context||(this.context=this.factory()),this.context}async resume(){let e=this.getContext();e.state==="suspended"&&await e.resume()}getState(){return this.context?.state??"suspended"}};function zo(r){let e=r.getContext(),t=e.createGain();t.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,t.connect(o),o.connect(n)):t.connect(n),n.connect(e.destination),{context:e,master:t,compressor:n,filter:o}}var Fo=class{constructor(e=new Xt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,t){let n=this.registerName(e);return this.buffers.set(n,t),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Po=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((t,n)=>{if(!t.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return t.decodeAudioData(n)})}async precache(e){let t=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of t)try{let s=this.registry.find(i);if(s!==void 0&&this.registry.has(s)){n.skipped.push(i);continue}if(!this.vfs.stat(i)){n.missing.push(i);continue}let l=(await this.vfs.readFile(i)).slice().buffer,u=await this.decodeAudio(o,l);this.registry.register(i,u),n.loaded.push(i)}catch(s){let a=s instanceof Error?s:new Error(String(s));n.errors[i]=a}return n}normalize(e){let t=X(e.replace(/^\//,""));return t.startsWith(this.soundRoot)?t:X(`${this.soundRoot}${t}`)}};var yl=7,wn=r=>r&yl;function Io(r){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===r}))}function Ro(r,e,t,n){if(t<0)throw new Error("pickChannel: entchannel must be non-negative");let o=wn(t),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<r.length;a+=1){let c=r[a],l=wn(c.entchannel);if(o!==0&&c.entnum===e&&l===o){i=a;break}if(c.active&&c.entnum===n.playerEntity&&e!==n.playerEntity)continue;let u=c.endTimeMs-n.nowMs;(i===-1||u<s)&&(s=u,i=a)}return i===-1?void 0:i}function ko(r,e,t,n,o){if(o)return{left:t,right:t,distanceComponent:0};let i=fs(r,e.origin),s=Jo(i),a=Ee(i),c=s-80;c<0&&(c=0),c*=Vt(n);let l=$o(e.right,a),u=e.mono??!1,d=u||n===0?1:.5*(1+l),m=u||n===0?1:.5*(1-l),p=Math.max(0,Math.floor(t*(1-c)*d));return{left:Math.max(0,Math.floor(t*(1-c)*m)),right:p,distanceComponent:c}}var Do=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Io(e.playerEntity),this.listener=e.listener??{origin:ms,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=zo(this.contextController),this.graph.master.gain.value=this.masterVolume}setListener(e){this.listener=e}setMasterVolume(e){this.masterVolume=e,this.graph.master.gain.value=e}setSfxVolume(e){this.sfxVolume=e}async ensureRunning(){await this.contextController.resume()}play(e){let t=this.registry.get(e.soundIndex);if(!t)return;let n=this.graph.context,o=n.currentTime*1e3,i=Ro(this.channels,e.entity,e.channel,{nowMs:o,playerEntity:this.playerEntity});if(i===void 0)return;let s=this.activeSources.get(i);s&&(s.source.onended=null,s.source.stop(),this.activeSources.delete(i));let a=n.createBufferSource();a.buffer=t,a.loop=e.looping??!1;let c=e.origin??this.listener.origin,l=n.createGain(),u=this.createPanner(n,e.attenuation),d=this.resolveOcclusion?.(this.listener,c,e.attenuation),m=Aa(d?.gainScale??1),p=this.resolveOcclusion?this.createOcclusionFilter(n,d?.lowpassHz??2e4):void 0;this.applyOriginToPanner(u,c);let h=e.entity===this.playerEntity,y=ko(c,this.listener,e.volume,e.attenuation,h),b=(e.volume===0?0:Math.max(y.left,y.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=b*m;let L=n.currentTime+(e.timeOffsetMs??0)/1e3,C=(e.looping?Number.POSITIVE_INFINITY:t.duration*1e3)+L*1e3;a.connect(u),p?(u.connect(p),p.connect(l)):u.connect(l),l.connect(this.graph.master),a.start(L),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let W={channelIndex:i,entnum:e.entity,entchannel:wn(e.channel),endTimeMs:C,source:a,panner:u,gain:l,baseGain:b,origin:c,attenuation:e.attenuation,occlusion:p?{scale:m,lowpassHz:d?.lowpassHz,filter:p}:d?{scale:m,lowpassHz:d.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:wn(e.channel),endTimeMs:C,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,W),W}stop(e){let t=this.activeSources.get(e);t&&(t.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[t,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[t].active=!1,this.activeSources.delete(t))}updateEntityPosition(e,t){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,t),n.origin=t,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,t,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,t,n,o){return this.play({entity:0,channel:0,soundIndex:t,volume:n,attenuation:o,origin:e})}ambientSound(e,t,n){return this.play({entity:0,channel:0,soundIndex:t,volume:n,attenuation:0,origin:e,looping:!0})}getChannelState(e){return this.channels[e]}getDiagnostics(){return{activeChannels:this.activeSources.size,masterVolume:this.masterVolume,sfxVolume:this.sfxVolume,channels:[...this.channels],activeSounds:[...this.activeSources.values()].map(e=>({entnum:e.entnum,entchannel:e.entchannel,channelIndex:e.channelIndex,origin:e.origin,gain:e.gain.gain.value,baseGain:e.baseGain,attenuation:e.attenuation,maxDistance:e.panner.maxDistance,distanceModel:e.panner.distanceModel,occlusion:e.occlusion?{scale:e.occlusion.scale,lowpassHz:e.occlusion.lowpassHz}:void 0}))}}setUnderwater(e,t=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?t:2e4)}createPanner(e,t){let n=e.createPanner?e.createPanner():Object.assign(e.createGain(),{positionX:{value:this.listener.origin.x},positionY:{value:this.listener.origin.y},positionZ:{value:this.listener.origin.z}});return this.configurePanner(n,t)}configurePanner(e,t){let n=Vt(t);return e.refDistance=80,e.maxDistance=Eo(t),e.rolloffFactor=n,e.distanceModel=t===0?"linear":"inverse",e.positionX.value=this.listener.origin.x,e.positionY.value=this.listener.origin.y,e.positionZ.value=this.listener.origin.z,e}applyOriginToPanner(e,t){e.positionX.value=t.x,e.positionY.value=t.y,e.positionZ.value=t.z}createOcclusionFilter(e,t){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Ii(t,10,2e4),n}applyOcclusion(e,t){let n=Aa(t?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=t?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Ii(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=t?.lowpassHz):t&&(e.occlusion={scale:n,lowpassHz:t.lowpassHz})}},Ii=(r,e,t)=>Math.min(t,Math.max(e,r)),Aa=r=>Ii(r,0,1);var Ho=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async t=>t),this.volume=e.volume??1}async play(e,{loop:t=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=t,this.element.volume=this.volume,n&&(this.element.currentTime=0),(this.element.paused||n)&&await this.element.play();return}let o=await this.resolveSource(e),i=this.createElement();i.src=o,i.loop=t,i.volume=this.volume,i.currentTime=0,i.load(),await i.play(),this.element=i,this.track=e}pause(){!this.element||this.element.paused||this.element.pause()}async resume(){!this.element||!this.element.paused||await this.element.play()}stop(){this.element&&(this.element.pause(),this.element.currentTime=0,this.element=void 0,this.track=void 0)}setVolume(e){this.volume=e,this.element&&(this.element.volume=e)}getState(){let e=!!(this.element&&!this.element.paused&&!this.element.ended),t=!!this.element?.paused;return{track:this.track,paused:t,playing:e,volume:this.volume}}};var Oo=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,t,n,o,i,s){this.system.play({entity:e,channel:t,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,t,n,o){this.system.positionedSound(e,t,n,o)}loop_sound(e,t,n,o,i){this.system.play({entity:e,channel:t,soundIndex:n,volume:o,attenuation:i,looping:!0})}stop_entity_sounds(e){this.system.stopEntitySounds(e)}set_listener(e){this.system.setListener(e)}play_music(e,t=!0){return this.music?this.music.play(e,{loop:t}):Promise.resolve()}pause_music(){this.music?.pause()}resume_music(){return this.music?.resume()??Promise.resolve()}stop_music(){this.music?.stop()}set_music_volume(e){this.music?.setVolume(e)}play_ambient(e,t,n){this.system.ambientSound(e,t,n)}play_channel(e){this.system.play({...e})}};function gl(r){r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.enable(r.CULL_FACE),r.cullFace(r.BACK),r.enable(r.BLEND),r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA)}function xl(r,e,t,n){for(let o of e){let i=r.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of t){let i=r.getExtension(o);i&&n.set(o,i)}}function Ma(r,e={}){let{contextAttributes:t,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=r.getContext("webgl2",t??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");gl(i);let s=new Map;xl(i,n,o,s);let a=!1,c=new Set,l=new Set,u=m=>{a=!0,m.preventDefault();for(let p of c)p()},d=()=>{a=!1;for(let m of l)m()};return r.addEventListener("webglcontextlost",u),r.addEventListener("webglcontextrestored",d),{gl:i,extensions:s,isLost:()=>a,onLost(m){return c.add(m),()=>c.delete(m)},onRestored(m){return l.add(m),()=>l.delete(m)},dispose(){r.removeEventListener("webglcontextlost",u),r.removeEventListener("webglcontextrestored",d),c.clear(),l.clear(),s.clear()}}}function wa(r,e,t){let n=r.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(r.shaderSource(n,t),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS)){let i=r.getShaderInfoLog(n)??"Unknown shader compile failure";throw r.deleteShader(n),new Error(i)}return n}function bl(r,e,t,n){let o=r.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(r.attachShader(o,e),r.attachShader(o,t),n)for(let[s,a]of Object.entries(n))r.bindAttribLocation(o,a,s);if(r.linkProgram(o),!r.getProgramParameter(o,r.LINK_STATUS)){let s=r.getProgramInfoLog(o)??"Unknown shader link failure";throw r.deleteProgram(o),new Error(s)}return o}var ie=class r{constructor(e,t){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=t}static create(e,t,n){let o=wa(e,e.VERTEX_SHADER,t.vertex),i=wa(e,e.FRAGMENT_SHADER,t.fragment);try{let s=bl(e,o,i,n);return new r(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let t=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,t)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let t=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,t)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function La(r,e,t){return ie.create(r,e,t)}var se=class{constructor(e,t=e.STATIC_DRAW,n){this.gl=e,this.target=n??e.ARRAY_BUFFER;let o=e.createBuffer();if(!o)throw new Error("Failed to allocate buffer");this.buffer=o,e.bindBuffer(this.target,this.buffer),e.bufferData(this.target,0,t)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,t=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,t)}update(e,t=0){this.bind(),this.gl.bufferSubData(this.target,t,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},we=class extends se{constructor(e,t=e.STATIC_DRAW){super(e,t,e.ELEMENT_ARRAY_BUFFER)}},le=class{constructor(e){this.gl=e;let t=e.createVertexArray();if(!t)throw new Error("Failed to allocate vertex array object");this.vao=t}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,t){this.bind(),t&&t.bind();for(let n of e)this.gl.enableVertexAttribArray(n.index),this.gl.vertexAttribPointer(n.index,n.size,n.type,n.normalized??!1,n.stride??0,n.offset??0),n.divisor!==void 0&&this.gl.vertexAttribDivisor(n.index,n.divisor)}dispose(){this.gl.deleteVertexArray(this.vao)}},hr=class{constructor(e,t=e.TEXTURE_2D){this.gl=e,this.target=t;let n=e.createTexture();if(!n)throw new Error("Failed to allocate texture");this.texture=n}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadImage(e,t,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,t,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},yr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let t=e.createTexture();if(!t)throw new Error("Failed to allocate cubemap texture");this.texture=t}bind(e=0){this.gl.activeTexture(this.gl.TEXTURE0+e),this.gl.bindTexture(this.target,this.texture)}setParameters(e){this.bind(),e.wrapS!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_S,e.wrapS),e.wrapT!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_WRAP_T,e.wrapT),e.minFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MIN_FILTER,e.minFilter),e.magFilter!==void 0&&this.gl.texParameteri(this.target,this.gl.TEXTURE_MAG_FILTER,e.magFilter)}uploadFace(e,t,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,t,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Bo=class{constructor(e){this.gl=e;let t=e.createFramebuffer();if(!t)throw new Error("Failed to allocate framebuffer");this.framebuffer=t}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,t,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,t.target,t.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var ki=4,Ri=7*ki,Di=[{index:0,size:3,type:5126,stride:Ri,offset:0},{index:1,size:2,type:5126,stride:Ri,offset:3*ki},{index:2,size:2,type:5126,stride:Ri,offset:5*ki}];function vl(r,e){return{width:r,height:r,padding:e,data:new Uint8Array(r*r*4),cursorX:0,cursorY:0,rowHeight:0}}function Sl(r){let e=r.width*r.height;if(e===0)throw new Error("Invalid lightmap with zero area");let t=r.samples.byteLength/e;if(!Number.isInteger(t)||t<3||t>4)throw new Error("Unsupported lightmap channel count");return t}function _l(r,e,t){let n=Sl(t),o=r.width*4,i=e.x+r.padding,s=e.y+r.padding,a=0;for(let c=0;c<t.height;c++){let l=(s+c)*o+i*4;for(let u=0;u<t.width;u++){let d=l+u*4;r.data[d]=t.samples[a],r.data[d+1]=t.samples[a+1],r.data[d+2]=t.samples[a+2],r.data[d+3]=n===4?t.samples[a+3]:255,a+=n}}}function Al(r,e,t){let n=e.width+t.lightmapPadding*2,o=e.height+t.lightmapPadding*2;if(n>t.atlasSize||o>t.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of r){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+t.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:r.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+t.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=vl(t.atlasSize,t.lightmapPadding);r.push(i);let s={atlasIndex:r.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+t.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function No(r){return r instanceof Float32Array?r:new Float32Array(r)}function Ml(r,e){if(!r){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return r instanceof Uint16Array?r:new Uint16Array(r)}function wl(r,e){let t=new Float32Array(r.length);for(let n=0;n<r.length;n+=2)t[n]=e.offset[0]+r[n]*e.scale[0],t[n+1]=e.offset[1]+r[n+1]*e.scale[1];return t}function Ll(r,e){let t=No(r.vertices),n=No(r.textureCoords),o=e?wl(No(r.lightmapCoords??r.textureCoords),e):No(r.lightmapCoords??new Float32Array(n.length)),i=t.length/3;if(n.length/2!==i)throw new Error("Texture coordinates count mismatch");if(o.length/2!==i)throw new Error("Lightmap coordinates count mismatch");let s=new Float32Array(i*7);for(let a=0;a<i;a++){let c=a*3,l=a*2,u=a*7;s[u]=t[c],s[u+1]=t[c+1],s[u+2]=t[c+2],s[u+3]=n[l],s[u+4]=n[l+1],s[u+5]=o[l],s[u+6]=o[l+1]}return s}function Ca(r,e,t={}){let n={atlasSize:t.atlasSize??1024,lightmapPadding:t.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:u,atlas:d}=Al(o,c.lightmap,n);_l(d,u,c.lightmap),i.set(l,{atlasIndex:u.atlasIndex,offset:[(u.x+n.lightmapPadding)/n.atlasSize,(u.y+n.lightmapPadding)/n.atlasSize],scale:[u.width/n.atlasSize,u.height/n.atlasSize]})});let s=o.map(c=>{let l=new hr(r);return l.setParameters({wrapS:r.CLAMP_TO_EDGE,wrapT:r.CLAMP_TO_EDGE,minFilter:r.LINEAR,magFilter:r.LINEAR}),l.uploadImage(0,r.RGBA,c.width,c.height,0,r.RGBA,r.UNSIGNED_BYTE,c.data),{texture:l,width:c.width,height:c.height,pixels:c.data}});return{surfaces:e.map((c,l)=>{let u=i.get(l),d=Ll(c,u),m=Ml(c.indices,d.length/7),p=new se(r,r.STATIC_DRAW,r.ARRAY_BUFFER);p.upload(d);let h=new we(r,r.STATIC_DRAW);h.upload(m);let y=new le(r);return y.configureAttributes(Di,p),{vao:y,vertexBuffer:p,indexBuffer:h,indexCount:m.length,texture:c.texture,surfaceFlags:c.surfaceFlags??Ar,lightmap:u,vertexData:d,indexData:m}}),lightmaps:s}}function gr(r){let{normal:e,distance:t}=r,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return r;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:t*o}}function Ea(r){if(r.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=r[0],t=r[4],n=r[8],o=r[12],i=r[1],s=r[5],a=r[9],c=r[13],l=r[2],u=r[6],d=r[10],m=r[14],p=r[3],h=r[7],y=r[11],g=r[15];return[gr({normal:{x:p+e,y:h+t,z:y+n},distance:g+o}),gr({normal:{x:p-e,y:h-t,z:y-n},distance:g-o}),gr({normal:{x:p+i,y:h+s,z:y+a},distance:g+c}),gr({normal:{x:p-i,y:h-s,z:y-a},distance:g-c}),gr({normal:{x:p+l,y:h+u,z:y+d},distance:g+m}),gr({normal:{x:p-l,y:h-u,z:y-d},distance:g-m})]}function Cl(r,e){return r.normal.x*e.x+r.normal.y*e.y+r.normal.z*e.z+r.distance}function Ln(r,e,t){for(let n of t){let o=n.normal.x>=0?e.x:r.x,i=n.normal.y>=0?e.y:r.y,s=n.normal.z>=0?e.z:r.z;if(Cl(n,{x:o,y:i,z:s})<0)return!1}return!0}function Ta(r){return r<0}function za(r){return-r-1}function Fa(r,e){return r.normal[0]*e.x+r.normal[1]*e.y+r.normal[2]*e.z-r.dist}function El(r,e,t){if(!r||e<0||t<0)return!0;let n=Math.ceil(r.numClusters/8),o=r.clusters[e].pvs,i=Math.floor(t/8),s=1<<t%8;return i<0||i>=n?!1:(o[i]&s)!==0}function Tl(r,e){let t={x:r.mins[0],y:r.mins[1],z:r.mins[2]},n={x:r.maxs[0],y:r.maxs[1],z:r.maxs[2]};return Ln(t,n,e)}function Oi(r,e){let t=0;for(;t>=0;){let n=r.nodes[t],o=r.planes[n.planeIndex],s=Fa(o,e)>=0?0:1,a=n.children[s];if(Ta(a))return za(a);t=a}return-1}function zl(r,e){let t=r.leafs[e],n=[];for(let o=0;o<t.numLeafFaces;o+=1)n.push(r.leafLists.leafFaces[e][o]);return n}function Hi(r,e,t,n,o,i,s){if(Ta(e)){let m=za(e),p=r.leafs[m];if(!El(r.visibility,o,p.cluster)||!Tl(p,n))return;let h={x:(p.mins[0]+p.maxs[0])*.5,y:(p.mins[1]+p.maxs[1])*.5,z:(p.mins[2]+p.maxs[2])*.5},y=h.x-t.x,g=h.y-t.y,b=h.z-t.z,L=-(y*y+g*g+b*b);for(let C of zl(r,m))s.has(C)||(s.add(C),i.push({faceIndex:C,leafIndex:m,sortKey:L}));return}let a=r.nodes[e],c=r.planes[a.planeIndex],l=Fa(c,t),u=l>=0?a.children[0]:a.children[1],d=l>=0?a.children[1]:a.children[0];Ln({x:a.mins[0],y:a.mins[1],z:a.mins[2]},{x:a.maxs[0],y:a.maxs[1],z:a.maxs[2]},n)&&(Hi(r,u,t,n,o,i,s),Hi(r,d,t,n,o,i,s))}function Pa(r,e,t){let n=Oi(r,e),o=n>=0?r.leafs[n].cluster:-1,i=[];return Hi(r,0,e,t,o,i,new Set),i}var Bi=`#version 300 es
|
|
142
142
|
precision highp float;
|
|
143
143
|
|
|
144
144
|
layout(location = 0) in vec3 a_position;
|
|
@@ -197,7 +197,7 @@ void main() {
|
|
|
197
197
|
}
|
|
198
198
|
|
|
199
199
|
o_color = vec4(base.rgb, base.a * u_alpha);
|
|
200
|
-
}`,Ia=[0,255,255,255];function Vi(r=Ia,e=[]){let t=new Float32Array(4);for(let n=0;n<4;n+=1){let o=r[n]??255;if(o===255){t[n]=0;continue}let i=e[o];t[n]=i!==void 0?i:1}return t}function Fl(r){return[-(r*.25%1),0]}function Ui(r=
|
|
200
|
+
}`,Ia=[0,255,255,255];function Vi(r=Ia,e=[]){let t=new Float32Array(4);for(let n=0;n<4;n+=1){let o=r[n]??255;if(o===255){t[n]=0;continue}let i=e[o];t[n]=i!==void 0?i:1}return t}function Fl(r){return[-(r*.25%1),0]}function Ui(r=Ar,e=0){let t=(r&Ss)!==0,n=(r&xs)!==0,o=(r&gs)!==0,i=(r&bs)!==0,s=(r&vs)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,u=t?Fl(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:u,sky:o}}var Vo=class{constructor(e){this.gl=e,this.program=ie.create(e,{vertex:Bi,fragment:Ni},{a_position:0,a_texCoord:1,a_lightmapCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTexScroll=this.program.getUniformLocation("u_texScroll"),this.uniformLmScroll=this.program.getUniformLocation("u_lightmapScroll"),this.uniformLightStyles=this.program.getUniformLocation("u_lightStyleFactors"),this.uniformAlpha=this.program.getUniformLocation("u_alpha"),this.uniformApplyLightmap=this.program.getUniformLocation("u_applyLightmap"),this.uniformWarp=this.program.getUniformLocation("u_warp"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap"),this.uniformLightmap=this.program.getUniformLocation("u_lightmapAtlas"),this.uniformTime=this.program.getUniformLocation("u_time")}bind(e){let{modelViewProjection:t,styleIndices:n=Ia,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s=1,surfaceFlags:a=Ar,timeSeconds:c=0}=e,l=Ui(a,c),u=Vi(n,o);return this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,t),this.gl.uniform2f(this.uniformTexScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform2f(this.uniformLmScroll,l.flowOffset[0],l.flowOffset[1]),this.gl.uniform4fv(this.uniformLightStyles,u),this.gl.uniform1f(this.uniformAlpha,l.alpha),this.gl.uniform1i(this.uniformApplyLightmap,l.sky?0:1),this.gl.uniform1i(this.uniformWarp,l.warp?1:0),this.gl.uniform1f(this.uniformTime,c),this.gl.uniform1i(this.uniformDiffuse,i),this.gl.uniform1i(this.uniformLightmap,s),l}dispose(){this.program.dispose()}};function Ra(r,e){r.depthMask(e.depthWrite),e.blend?(r.enable(r.BLEND),r.blendFunc(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA)):r.disable(r.BLEND)}var ka=new Float32Array([-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,1]),Gi=`#version 300 es
|
|
201
201
|
precision highp float;
|
|
202
202
|
|
|
203
203
|
layout(location = 0) in vec3 a_position;
|
|
@@ -254,7 +254,7 @@ out vec4 o_color;
|
|
|
254
254
|
void main() {
|
|
255
255
|
vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
|
|
256
256
|
o_color = vec4(albedo.rgb * v_light, albedo.a);
|
|
257
|
-
}`;function Pl(r){let e=r.x*r.x+r.y*r.y+r.z*r.z;if(e<=0)return{x:0,y:0,z:1};let t=1/Math.sqrt(e);return{x:r.x*t,y:r.y*t,z:r.z*t}}function Xi(r,e,t){return r+(e-r)*t}function Oa(r,e,t){return{x:Xi(r.x,e.x,t),y:Xi(r.y,e.y,t),z:Xi(r.z,e.z,t)}}function Il(r,e,t){return[r/t.skinWidth,1-e/t.skinHeight]}function Yi(r){if(r.glCommands.length===0){let n=[],o=[];return r.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],u=r.texCoords[l];n.push({vertexIndex:c,texCoord:Il(u.s,u.t,r.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],t=[];for(let n of r.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;t.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)t.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(t)}}function ji(r,e,t){let{currentFrame:n,nextFrame:o,lerp:i}=t,s=r.frames[n],a=r.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,u)=>{let d=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!d||!m)throw new Error("MD2 vertex index out of range for frame");let p=Oa(d.position,m.position,i),h=Pl(Oa(d.normal,m.normal,i)),y=u*8;c[y]=p.x,c[y+1]=p.y,c[y+2]=p.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Go=class{constructor(e,t,n){this.gl=e,this.geometry=Yi(t),this.vertexBuffer=new se(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(t,n)}update(e,t){let n=ji(e,this.geometry,t);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Wo=class{constructor(e){this.gl=e,this.program=ie.create(e,{vertex:qi,fragment:Ki},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:t,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,t),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Rl=[.2,.2,.2],kl={x:0,y:0,z:1},Dl=[.8,.8,.8];function $i(r,e,t){return r+(e-r)*t}function
|
|
257
|
+
}`;function Pl(r){let e=r.x*r.x+r.y*r.y+r.z*r.z;if(e<=0)return{x:0,y:0,z:1};let t=1/Math.sqrt(e);return{x:r.x*t,y:r.y*t,z:r.z*t}}function Xi(r,e,t){return r+(e-r)*t}function Oa(r,e,t){return{x:Xi(r.x,e.x,t),y:Xi(r.y,e.y,t),z:Xi(r.z,e.z,t)}}function Il(r,e,t){return[r/t.skinWidth,1-e/t.skinHeight]}function Yi(r){if(r.glCommands.length===0){let n=[],o=[];return r.triangles.forEach(i=>{let s=n.length;for(let a=0;a<3;a+=1){let c=i.vertexIndices[a],l=i.texCoordIndices[a],u=r.texCoords[l];n.push({vertexIndex:c,texCoord:Il(u.s,u.t,r.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],t=[];for(let n of r.glCommands){let o=e.length;if(e.push(...n.vertices.map(i=>({vertexIndex:i.vertexIndex,texCoord:[i.s,1-i.t]}))),n.mode==="strip")for(let i=0;i<n.vertices.length-2;i+=1){let s=i%2===0,a=o+i+(s?0:1),c=o+i+(s?1:0),l=o+i+2;t.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)t.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(t)}}function ji(r,e,t){let{currentFrame:n,nextFrame:o,lerp:i}=t,s=r.frames[n],a=r.frames[o];if(!s||!a)throw new Error("Requested MD2 frames are out of range");let c=new Float32Array(e.vertices.length*8);return e.vertices.forEach((l,u)=>{let d=s.vertices[l.vertexIndex],m=a.vertices[l.vertexIndex];if(!d||!m)throw new Error("MD2 vertex index out of range for frame");let p=Oa(d.position,m.position,i),h=Pl(Oa(d.normal,m.normal,i)),y=u*8;c[y]=p.x,c[y+1]=p.y,c[y+2]=p.z,c[y+3]=h.x,c[y+4]=h.y,c[y+5]=h.z,c[y+6]=l.texCoord[0],c[y+7]=l.texCoord[1]}),c}var Go=class{constructor(e,t,n){this.gl=e,this.geometry=Yi(t),this.vertexBuffer=new se(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:32,offset:0},{index:1,size:3,type:e.FLOAT,stride:32,offset:12},{index:2,size:2,type:e.FLOAT,stride:32,offset:24}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(t,n)}update(e,t){let n=ji(e,this.geometry,t);this.vertexBuffer.upload(n,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Wo=class{constructor(e){this.gl=e,this.program=ie.create(e,{vertex:qi,fragment:Ki},{a_position:0,a_normal:1,a_texCoord:2}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformLightDir=this.program.getUniformLocation("u_lightDir"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e){let{modelViewProjection:t,lightDirection:n=[0,0,1],tint:o=[1,1,1,1],diffuseSampler:i=0}=e,s=new Float32Array(n),a=new Float32Array(o);this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,t),this.gl.uniform3fv(this.uniformLightDir,s),this.gl.uniform4fv(this.uniformTint,a),this.gl.uniform1i(this.uniformDiffuse,i)}draw(e){e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Rl=[.2,.2,.2],kl={x:0,y:0,z:1},Dl=[.8,.8,.8];function $i(r,e,t){return r+(e-r)*t}function br(r,e,t){return{x:$i(r.x,e.x,t),y:$i(r.y,e.y,t),z:$i(r.z,e.z,t)}}function xr(r){return r<0?0:r>1?1:r}function Ji(r){let e=[],t=[];for(let n of r.triangles){let o=e.length,[i,s,a]=n.indices,c=r.texCoords[i],l=r.texCoords[s],u=r.texCoords[a];if(!c||!l||!u)throw new Error(`Missing texCoord for triangle in surface ${r.name}`);e.push({vertexIndex:i,texCoord:[c.s,1-c.t]},{vertexIndex:s,texCoord:[l.s,1-l.t]},{vertexIndex:a,texCoord:[u.s,1-u.t]}),t.push(o,o+1,o+2)}return{vertices:e,indices:new Uint16Array(t)}}function Hl(r,e,t){let n=t?.ambient??Rl,o=t?.directional??{direction:kl,color:Dl},i=Ee(r),s=Ee(o.direction),a=xr(i.x*s.x+i.y*s.y+i.z*s.z),c=n[0]+o.color[0]*a,l=n[1]+o.color[1]*a,u=n[2]+o.color[2]*a;if(t?.dynamicLights){let d=t.modelMatrix?ps(t.modelMatrix,e):e;for(let m of t.dynamicLights){let p=d.x-m.origin.x,h=d.y-m.origin.y,y=d.z-m.origin.z,g=p*p+h*h+y*y,b=m.radius*m.radius;if(g<b&&b>0){let L=1-Math.sqrt(g)/m.radius,C=Math.sqrt(g),W=C>0?xr(-(p*i.x+h*i.y+y*i.z)/C):0,H=xr(L*W);c+=m.color[0]*H,l+=m.color[1]*H,u+=m.color[2]*H}}}return[xr(c),xr(l),xr(u)]}function Qi(r,e,t,n){let o=r.vertices[t.currentFrame],i=r.vertices[t.nextFrame];if(!o||!i)throw new Error("Requested MD3 frames are out of range");let s=new Float32Array(e.vertices.length*12);return e.vertices.forEach((a,c)=>{let l=o[a.vertexIndex],u=i[a.vertexIndex];if(!l||!u)throw new Error(`Vertex index ${a.vertexIndex} missing for frame`);let d=br(l.position,u.position,t.lerp),m=Ee(br(l.normal,u.normal,t.lerp)),p=Hl(m,d,n),h=c*12;s[h]=d.x,s[h+1]=d.y,s[h+2]=d.z,s[h+3]=m.x,s[h+4]=m.y,s[h+5]=m.z,s[h+6]=a.texCoord[0],s[h+7]=a.texCoord[1],s[h+8]=p[0],s[h+9]=p[1],s[h+10]=p[2],s[h+11]=1}),s}function Ba(r,e,t){let n=r.tags[0];if(!n)return null;let o=n.findIndex(y=>y.name===t);if(o===-1)return null;let i=r.tags[e.currentFrame]?.[o],s=r.tags[e.nextFrame]?.[o];if(!i||!s)throw new Error(`Tag ${t} is missing for one of the interpolated frames`);let a=br(i.origin,s.origin,e.lerp),c=Ee(br(i.axis[0],s.axis[0],e.lerp)),l=Ee(br(i.axis[1],s.axis[1],e.lerp)),u=Ee(br(i.axis[2],s.axis[2],e.lerp)),d=c,m=Ee({x:l.x-d.x*(d.x*l.x+d.y*l.y+d.z*l.z),y:l.y-d.y*(d.x*l.x+d.y*l.y+d.z*l.z),z:l.z-d.z*(d.x*l.x+d.y*l.y+d.z*l.z)}),p=Ee({x:d.y*m.z-d.z*m.y,y:d.z*m.x-d.x*m.z,z:d.x*m.y-d.y*m.x}),h=[d,m,p];return{origin:a,axis:h,matrix:hs(a,h)}}var Zi=`#version 300 es
|
|
258
258
|
precision highp float;
|
|
259
259
|
|
|
260
260
|
layout(location = 0) in vec3 a_position;
|
|
@@ -285,7 +285,7 @@ out vec4 o_color;
|
|
|
285
285
|
void main() {
|
|
286
286
|
vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
|
|
287
287
|
o_color = vec4(albedo.rgb * v_color.rgb, albedo.a * v_color.a);
|
|
288
|
-
}`,Cn=class{constructor(e,t,n,o){this.gl=e,this.geometry=Ji(t),this.vertexBuffer=new se(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(t,n,o)}update(e,t,n){let o=Qi(e,this.geometry,t,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Xo=class{constructor(e,t,n,o){this.surfaces=new Map;this.gl=e,this.model=t,this.blend=n,this.lighting=o,t.surfaces.forEach(i=>{this.surfaces.set(i.name,new Cn(e,i,n,o))})}update(e,t){this.blend=e,this.lighting=t??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},qo=class{constructor(e){this.gl=e,this.program=ie.create(e,{vertex:Zi,fragment:es},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,t=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(t)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,t){let n=t?.diffuseSampler??0,o=t?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Ol=[1,1,1,1],Ko=class{constructor(e,t=Math.random){this.maxParticles=e,this.random=t,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let t=this.findFreeSlot();if(t===-1)return null;let n=e.color??Ol,o=e.velocity??{x:0,y:0,z:0};return this.alive[t]=1,this.positionX[t]=e.position.x,this.positionY[t]=e.position.y,this.positionZ[t]=e.position.z,this.velocityX[t]=o.x,this.velocityY[t]=o.y,this.velocityZ[t]=o.z,this.colorR[t]=n[0],this.colorG[t]=n[1],this.colorB[t]=n[2],this.colorA[t]=n[3],this.size[t]=e.size??2.5,this.lifetime[t]=e.lifetime,this.remaining[t]=e.lifetime,this.gravity[t]=e.gravity??800,this.damping[t]=e.damping??0,this.bounce[t]=e.bounce??.25,this.fade[t]=e.fade?1:0,this.blendMode[t]=e.blendMode==="additive"?1:0,t}update(e,t={}){let n=t.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let t=0;t<this.maxParticles;t+=1)this.alive[t]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,t){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let u=0;u<this.maxParticles;u+=1){if(!this.alive[u]||(a==="additive"?1:0)!==this.blendMode[u])continue;l+=1;let d=n.length/9,m=this.size[u]*.5,p=this.fade[u]?Math.max(this.remaining[u]/this.lifetime[u],0):1,h=this.blendMode[u]===1?1.2:1,y=this.colorR[u]*h,g=this.colorG[u]*h,b=this.colorB[u]*h,
|
|
288
|
+
}`,Cn=class{constructor(e,t,n,o){this.gl=e,this.geometry=Ji(t),this.vertexBuffer=new se(e,e.STATIC_DRAW),this.indexBuffer=new we(e,e.STATIC_DRAW),this.vertexArray=new le(e),this.indexCount=this.geometry.indices.length,this.vertexArray.configureAttributes([{index:0,size:3,type:e.FLOAT,stride:48,offset:0},{index:1,size:3,type:e.FLOAT,stride:48,offset:12},{index:2,size:2,type:e.FLOAT,stride:48,offset:24},{index:3,size:4,type:e.FLOAT,stride:48,offset:32}],this.vertexBuffer),this.vertexArray.bind(),this.indexBuffer.bind(),this.indexBuffer.upload(this.geometry.indices,e.STATIC_DRAW),this.update(t,n,o)}update(e,t,n){let o=Qi(e,this.geometry,t,n);this.vertexBuffer.upload(o,this.gl.STATIC_DRAW)}bind(){this.vertexArray.bind(),this.indexBuffer.bind()}dispose(){this.vertexBuffer.dispose(),this.indexBuffer.dispose(),this.vertexArray.dispose()}},Xo=class{constructor(e,t,n,o){this.surfaces=new Map;this.gl=e,this.model=t,this.blend=n,this.lighting=o,t.surfaces.forEach(i=>{this.surfaces.set(i.name,new Cn(e,i,n,o))})}update(e,t){this.blend=e,this.lighting=t??this.lighting;for(let n of this.model.surfaces)this.surfaces.get(n.name)?.update(n,e,this.lighting)}dispose(){for(let e of this.surfaces.values())e.dispose();this.surfaces.clear()}},qo=class{constructor(e){this.gl=e,this.program=ie.create(e,{vertex:Zi,fragment:es},{a_position:0,a_normal:1,a_texCoord:2,a_color:3}),this.uniformMvp=this.program.getUniformLocation("u_modelViewProjection"),this.uniformTint=this.program.getUniformLocation("u_tint"),this.uniformDiffuse=this.program.getUniformLocation("u_diffuseMap")}bind(e,t=[1,1,1,1],n=0){this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,e),this.gl.uniform4fv(this.uniformTint,new Float32Array(t)),this.gl.uniform1i(this.uniformDiffuse,n)}drawSurface(e,t){let n=t?.diffuseSampler??0,o=t?.tint??[1,1,1,1];this.gl.uniform4fv(this.uniformTint,new Float32Array(o)),this.gl.uniform1i(this.uniformDiffuse,n),e.bind(),this.gl.drawElements(this.gl.TRIANGLES,e.indexCount,this.gl.UNSIGNED_SHORT,0)}dispose(){this.program.dispose()}};var Ol=[1,1,1,1],Ko=class{constructor(e,t=Math.random){this.maxParticles=e,this.random=t,this.alive=new Uint8Array(e),this.positionX=new Float32Array(e),this.positionY=new Float32Array(e),this.positionZ=new Float32Array(e),this.velocityX=new Float32Array(e),this.velocityY=new Float32Array(e),this.velocityZ=new Float32Array(e),this.colorR=new Float32Array(e),this.colorG=new Float32Array(e),this.colorB=new Float32Array(e),this.colorA=new Float32Array(e),this.size=new Float32Array(e),this.lifetime=new Float32Array(e),this.remaining=new Float32Array(e),this.gravity=new Float32Array(e),this.damping=new Float32Array(e),this.bounce=new Float32Array(e),this.fade=new Uint8Array(e),this.blendMode=new Uint8Array(e)}spawn(e){let t=this.findFreeSlot();if(t===-1)return null;let n=e.color??Ol,o=e.velocity??{x:0,y:0,z:0};return this.alive[t]=1,this.positionX[t]=e.position.x,this.positionY[t]=e.position.y,this.positionZ[t]=e.position.z,this.velocityX[t]=o.x,this.velocityY[t]=o.y,this.velocityZ[t]=o.z,this.colorR[t]=n[0],this.colorG[t]=n[1],this.colorB[t]=n[2],this.colorA[t]=n[3],this.size[t]=e.size??2.5,this.lifetime[t]=e.lifetime,this.remaining[t]=e.lifetime,this.gravity[t]=e.gravity??800,this.damping[t]=e.damping??0,this.bounce[t]=e.bounce??.25,this.fade[t]=e.fade?1:0,this.blendMode[t]=e.blendMode==="additive"?1:0,t}update(e,t={}){let n=t.floorZ??-1/0;for(let o=0;o<this.maxParticles;o+=1){if(!this.alive[o])continue;if(this.remaining[o]-=e,this.remaining[o]<=0){this.alive[o]=0;continue}let i=Math.max(0,1-this.damping[o]*e);this.velocityX[o]*=i,this.velocityY[o]*=i,this.velocityZ[o]=this.velocityZ[o]*i-this.gravity[o]*e,this.positionX[o]+=this.velocityX[o]*e,this.positionY[o]+=this.velocityY[o]*e,this.positionZ[o]+=this.velocityZ[o]*e,this.positionZ[o]<n&&(this.positionZ[o]=n,this.velocityZ[o]=-this.velocityZ[o]*this.bounce[o],this.velocityX[o]*=.7,this.velocityY[o]*=.7)}}killAll(){this.alive.fill(0)}aliveCount(){let e=0;for(let t=0;t<this.maxParticles;t+=1)this.alive[t]&&(e+=1);return e}getState(e){return{alive:this.alive[e]===1,position:{x:this.positionX[e],y:this.positionY[e],z:this.positionZ[e]},velocity:{x:this.velocityX[e],y:this.velocityY[e],z:this.velocityZ[e]},remaining:this.remaining[e],color:[this.colorR[e],this.colorG[e],this.colorB[e],this.colorA[e]],size:this.size[e],blendMode:this.blendMode[e]===1?"additive":"alpha"}}buildMesh(e,t){let n=[],o=[],i=[],s=a=>{let c=o.length,l=0;for(let u=0;u<this.maxParticles;u+=1){if(!this.alive[u]||(a==="additive"?1:0)!==this.blendMode[u])continue;l+=1;let d=n.length/9,m=this.size[u]*.5,p=this.fade[u]?Math.max(this.remaining[u]/this.lifetime[u],0):1,h=this.blendMode[u]===1?1.2:1,y=this.colorR[u]*h,g=this.colorG[u]*h,b=this.colorB[u]*h,L=this.colorA[u]*p,C=this.positionX[u],W=this.positionY[u],H=this.positionZ[u],Le=e.x*m,N=e.y*m,K=e.z*m,Ie=t.x*m,Ce=t.y*m,et=t.z*m,vr=[{x:C-Le-Ie,y:W-N-Ce,z:H-K-et},{x:C+Le-Ie,y:W+N-Ce,z:H+K-et},{x:C-Le+Ie,y:W-N+Ce,z:H-K+et},{x:C+Le+Ie,y:W+N+Ce,z:H+K+et}],Ut=[[0,1],[1,1],[0,0],[1,0]];vr.forEach((tt,he)=>{n.push(tt.x,tt.y,tt.z,Ut[he]?.[0]??0,Ut[he]?.[1]??0,y,g,b,L)}),o.push(d,d+1,d+2,d+2,d+1,d+3)}l>0&&i.push({blendMode:a,start:c,count:o.length-c})};return s("alpha"),s("additive"),{vertices:new Float32Array(n),indices:new Uint16Array(o),batches:i}}findFreeSlot(){for(let e=0;e<this.maxParticles;e+=1)if(!this.alive[e])return e;return-1}},ts=`#version 300 es
|
|
289
289
|
precision highp float;
|
|
290
290
|
|
|
291
291
|
layout(location = 0) in vec3 a_position;
|