quake2ts 0.0.7 → 0.0.39
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/README.md +425 -0
- 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 +2097 -295
- package/apps/viewer/dist/cjs/index.cjs.map +1 -1
- package/apps/viewer/dist/esm/index.js +2097 -295
- package/apps/viewer/dist/esm/index.js.map +1 -1
- package/apps/viewer/dist/tsconfig.tsbuildinfo +1 -1
- package/apps/viewer/dist/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/packages/client/dist/browser/index.global.js +1 -1
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +1200 -13
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +1186 -12
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/index.d.ts +14 -6
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/client/dist/types/input/bindings.d.ts +18 -0
- package/packages/client/dist/types/input/bindings.d.ts.map +1 -0
- package/packages/client/dist/types/input/command-buffer.d.ts +15 -0
- package/packages/client/dist/types/input/command-buffer.d.ts.map +1 -0
- package/packages/client/dist/types/input/controller.d.ts +125 -0
- package/packages/client/dist/types/input/controller.d.ts.map +1 -0
- package/packages/client/dist/types/prediction.d.ts +38 -0
- package/packages/client/dist/types/prediction.d.ts.map +1 -0
- package/packages/client/dist/types/view-effects.d.ts +41 -0
- package/packages/client/dist/types/view-effects.d.ts.map +1 -0
- package/packages/engine/dist/browser/index.global.js +257 -1
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs +2408 -2
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js +2340 -2
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/assets/animation.d.ts +33 -0
- package/packages/engine/dist/types/assets/animation.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/audio.d.ts +21 -0
- package/packages/engine/dist/types/assets/audio.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/bsp.d.ts +1 -1
- package/packages/engine/dist/types/assets/bsp.d.ts.map +1 -1
- package/packages/engine/dist/types/assets/ingestion.d.ts +31 -0
- package/packages/engine/dist/types/assets/ingestion.d.ts.map +1 -1
- package/packages/engine/dist/types/assets/manager.d.ts +43 -0
- package/packages/engine/dist/types/assets/manager.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/md3.d.ts +69 -0
- package/packages/engine/dist/types/assets/md3.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/ogg.d.ts +12 -0
- package/packages/engine/dist/types/assets/ogg.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/pakIndexStore.d.ts +19 -0
- package/packages/engine/dist/types/assets/pakIndexStore.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/pakValidation.d.ts +28 -0
- package/packages/engine/dist/types/assets/pakValidation.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/pcx.d.ts +13 -0
- package/packages/engine/dist/types/assets/pcx.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/texture.d.ts +29 -0
- package/packages/engine/dist/types/assets/texture.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/wal.d.ts +21 -0
- package/packages/engine/dist/types/assets/wal.d.ts.map +1 -0
- package/packages/engine/dist/types/assets/wav.d.ts +11 -0
- package/packages/engine/dist/types/assets/wav.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/api.d.ts +29 -0
- package/packages/engine/dist/types/audio/api.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/channels.d.ts +15 -0
- package/packages/engine/dist/types/audio/channels.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/constants.d.ts +24 -0
- package/packages/engine/dist/types/audio/constants.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/context.d.ts +67 -0
- package/packages/engine/dist/types/audio/context.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/music.d.ts +42 -0
- package/packages/engine/dist/types/audio/music.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/precache.d.ts +28 -0
- package/packages/engine/dist/types/audio/precache.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/registry.d.ts +13 -0
- package/packages/engine/dist/types/audio/registry.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/spatialization.d.ts +14 -0
- package/packages/engine/dist/types/audio/spatialization.d.ts.map +1 -0
- package/packages/engine/dist/types/audio/system.d.ts +101 -0
- package/packages/engine/dist/types/audio/system.d.ts.map +1 -0
- package/packages/engine/dist/types/configstrings.d.ts +1 -0
- package/packages/engine/dist/types/configstrings.d.ts.map +1 -1
- package/packages/engine/dist/types/index.d.ts +26 -1
- package/packages/engine/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/types/render/bspPipeline.d.ts +42 -0
- package/packages/engine/dist/types/render/bspPipeline.d.ts.map +1 -0
- package/packages/engine/dist/types/render/bspTraversal.d.ts +11 -0
- package/packages/engine/dist/types/render/bspTraversal.d.ts.map +1 -0
- package/packages/engine/dist/types/render/culling.d.ts +8 -0
- package/packages/engine/dist/types/render/culling.d.ts.map +1 -0
- package/packages/engine/dist/types/render/md2Pipeline.d.ts +51 -0
- package/packages/engine/dist/types/render/md2Pipeline.d.ts.map +1 -0
- package/packages/engine/dist/types/render/resources.d.ts +10 -0
- package/packages/engine/dist/types/render/resources.d.ts.map +1 -1
- package/packages/engine/dist/types/render/skybox.d.ts +26 -0
- package/packages/engine/dist/types/render/skybox.d.ts.map +1 -0
- 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 +2926 -116
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +2863 -115
- 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 +13 -0
- package/packages/game/dist/types/ai/constants.d.ts.map +1 -0
- package/packages/game/dist/types/ai/index.d.ts +4 -0
- package/packages/game/dist/types/ai/index.d.ts.map +1 -0
- package/packages/game/dist/types/ai/movement.d.ts +20 -0
- package/packages/game/dist/types/ai/movement.d.ts.map +1 -0
- package/packages/game/dist/types/ai/perception.d.ts +21 -0
- package/packages/game/dist/types/ai/perception.d.ts.map +1 -0
- package/packages/game/dist/types/checksum.d.ts +3 -0
- package/packages/game/dist/types/checksum.d.ts.map +1 -0
- package/packages/game/dist/types/combat/armor.d.ts +39 -0
- package/packages/game/dist/types/combat/armor.d.ts.map +1 -0
- package/packages/game/dist/types/combat/damage.d.ts +52 -0
- package/packages/game/dist/types/combat/damage.d.ts.map +1 -0
- package/packages/game/dist/types/combat/damageFlags.d.ts +15 -0
- package/packages/game/dist/types/combat/damageFlags.d.ts.map +1 -0
- package/packages/game/dist/types/combat/damageMods.d.ts +79 -0
- package/packages/game/dist/types/combat/damageMods.d.ts.map +1 -0
- package/packages/game/dist/types/combat/index.d.ts +6 -0
- package/packages/game/dist/types/combat/index.d.ts.map +1 -0
- package/packages/game/dist/types/combat/specialDamage.d.ts +88 -0
- package/packages/game/dist/types/combat/specialDamage.d.ts.map +1 -0
- package/packages/game/dist/types/entities/entity.d.ts +46 -2
- package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
- package/packages/game/dist/types/entities/index.d.ts +6 -2
- package/packages/game/dist/types/entities/index.d.ts.map +1 -1
- package/packages/game/dist/types/entities/pool.d.ts +9 -0
- package/packages/game/dist/types/entities/pool.d.ts.map +1 -1
- package/packages/game/dist/types/entities/spawn.d.ts +27 -0
- package/packages/game/dist/types/entities/spawn.d.ts.map +1 -0
- package/packages/game/dist/types/entities/system.d.ts +32 -1
- package/packages/game/dist/types/entities/system.d.ts.map +1 -1
- package/packages/game/dist/types/entities/thinkScheduler.d.ts +6 -0
- package/packages/game/dist/types/entities/thinkScheduler.d.ts.map +1 -1
- package/packages/game/dist/types/entities/triggers.d.ts +3 -0
- package/packages/game/dist/types/entities/triggers.d.ts.map +1 -0
- package/packages/game/dist/types/entities/utils.d.ts +4 -0
- package/packages/game/dist/types/entities/utils.d.ts.map +1 -0
- package/packages/game/dist/types/index.d.ts +5 -0
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/game/dist/types/inventory/ammo.d.ts +17 -0
- package/packages/game/dist/types/inventory/ammo.d.ts.map +1 -0
- package/packages/game/dist/types/inventory/index.d.ts +2 -0
- package/packages/game/dist/types/inventory/index.d.ts.map +1 -0
- package/packages/game/dist/types/level.d.ts +1 -0
- package/packages/game/dist/types/level.d.ts.map +1 -1
- package/packages/game/dist/types/save/index.d.ts +4 -0
- package/packages/game/dist/types/save/index.d.ts.map +1 -0
- package/packages/game/dist/types/save/rerelease.d.ts +25 -0
- package/packages/game/dist/types/save/rerelease.d.ts.map +1 -0
- package/packages/game/dist/types/save/save.d.ts +49 -0
- package/packages/game/dist/types/save/save.d.ts.map +1 -0
- package/packages/game/dist/types/save/storage.d.ts +37 -0
- package/packages/game/dist/types/save/storage.d.ts.map +1 -0
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +638 -9
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +616 -9
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/bsp/collision.d.ts +56 -0
- package/packages/shared/dist/types/bsp/collision.d.ts.map +1 -1
- package/packages/shared/dist/types/bsp/contents.d.ts +1 -0
- package/packages/shared/dist/types/bsp/contents.d.ts.map +1 -1
- package/packages/shared/dist/types/index.d.ts +2 -0
- package/packages/shared/dist/types/index.d.ts.map +1 -1
- package/packages/shared/dist/types/math/random.d.ts +11 -0
- package/packages/shared/dist/types/math/random.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/contracts.d.ts +17 -0
- package/packages/shared/dist/types/protocol/contracts.d.ts.map +1 -0
- package/packages/shared/dist/types/protocol/usercmd.d.ts +30 -0
- package/packages/shared/dist/types/protocol/usercmd.d.ts.map +1 -0
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -1,2 +1,258 @@
|
|
|
1
|
-
"use strict";var Quake2Engine=(()=>{var $=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Fe=Object.prototype.hasOwnProperty;var Pe=(t,e)=>{for(var r in e)$(t,r,{get:e[r],enumerable:!0})},ke=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ce(e))!Fe.call(t,o)&&o!==r&&$(t,o,{get:()=>e[o],enumerable:!(n=Me(e,o))||n.enumerable});return t};var De=t=>ke($({},"__esModule",{value:!0}),t);var Et={};Pe(Et,{BSP_VERTEX_LAYOUT:()=>ce,ConfigStringRegistry:()=>U,Cvar:()=>F,CvarRegistry:()=>V,EngineHost:()=>T,EngineRuntime:()=>C,FixedTimestepLoop:()=>E,Framebuffer:()=>K,IndexBuffer:()=>L,LruCache:()=>X,Md2Loader:()=>Y,Md2ParseError:()=>y,PakArchive:()=>b,PakIngestionError:()=>w,PakParseError:()=>h,ShaderProgram:()=>k,Texture2D:()=>_,VertexArray:()=>R,VertexBuffer:()=>A,VirtualFileSystem:()=>W,buildBspGeometry:()=>Re,calculatePakChecksum:()=>ge,createEngine:()=>St,createEngineRuntime:()=>he,createProgramFromSources:()=>Le,createWebGLContext:()=>be,filesToPakSources:()=>ae,groupMd2Animations:()=>Te,ingestPakFiles:()=>ve,ingestPaks:()=>H,parseMd2:()=>se,wireDropTarget:()=>ze,wireFileInput:()=>Se});var Ne=()=>typeof performance<"u"?performance.now():Date.now(),Ie=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},E=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Ne,schedule:r.schedule??Ie}}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 r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){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:r}),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:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var T=class{constructor(e,r,n={}){this.game=e;this.client=r;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 E({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 Lt=Math.PI/180;var Rt=Math.PI/180,_t=180/Math.PI;var v=1,z=2;var Z=8,q=16,Oe=32;var Ge=16384;var N=65536,de=1<<17,Be=1<<18,Ue=1<<19,Ve=1<<20,We=1<<21,He=1<<22,Xe=1<<23,Mt=1<<24,I=1<<25,Ye=1<<26,Ct=1<<27,Ft=1<<28,Pt=1<<29,O=1<<30,kt=1<<31;var fe=0;var Dt=1<<25,Nt=1<<28,It=1<<29,Ot=1<<30,Gt=1<<31;var Bt=v|z,Ut=v|N|z|I|O,Vt=v|N|z,Wt=v|de|z|I|O,Ht=Oe|Z|q,Xt=v|q|Z,Ke=v|I|O|z|Ye,Yt=Be|Ue|Ve|We|He|Xe,Kt=v|Z|q|I|O,Jt=v|N|z,$t=v|z,jt=v|N|z|de,Zt=Ke|Ge;var G=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(G||{});var B=256;var Q=256,ee=8192,te=2048,re=512,ne=256,oe=B*2,ie=256,j=32,M=96;var m=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+ee]="Sounds",t[t.Images=t.Sounds+te]="Images",t[t.Lights=t.Images+re]="Lights",t[t.ShadowLights=t.Lights+Q]="ShadowLights",t[t.Items=t.ShadowLights+ie]="Items",t[t.PlayerSkins=t.Items+ne]="PlayerSkins",t[t.General=t.PlayerSkins+B]="General",t[t.WheelWeapons=t.General+oe]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+j]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+j]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+j]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(m||{}),me=m.MaxConfigStrings;function ye(t){return t>=5&&t<59?M*(59-t):t>=m.General&&t<m.WheelWeapons?M*(m.MaxConfigStrings-t):M}function Je(t){if(t<0||t>=m.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${m.MaxConfigStrings-1})`)}function pe(t,e){let r=ye(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${M} chars per slot`)}var U=class{constructor(){this.values=new Map;this.modelCursor=m.Models;this.soundCursor=m.Sounds;this.imageCursor=m.Images;this.lightCursor=m.Lights;this.shadowLightCursor=m.ShadowLights;this.itemCursor=m.Items;this.playerSkinCursor=m.PlayerSkins;this.generalCursor=m.General}set(e,r){return Je(e),pe(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(me).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,m.Models,ee,"modelCursor")}soundIndex(e){return this.register(e,m.Sounds,te,"soundCursor")}imageIndex(e){return this.register(e,m.Images,re,"imageCursor")}lightIndex(e){return this.register(e,m.Lights,Q,"lightCursor")}shadowLightIndex(e){return this.register(e,m.ShadowLights,ie,"shadowLightCursor")}itemIndex(e){return this.register(e,m.Items,ne,"itemCursor")}playerSkinIndex(e){return this.register(e,m.PlayerSkins,B,"playerSkinCursor")}generalIndex(e){return this.register(e,m.General,oe,"generalCursor")}register(e,r,n,o){for(let s=r;s<r+n;s+=1)if(this.values.get(s)===e)return s;let i=this[o],a=r+n;if(i>=a)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return pe(i,e),this.values.set(i,e),this[o]=i+1,i}};var C=class{constructor(e,r){this.engine=e;this.host=r;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 he(t,e,r,n){return new C(t,new T(e,r,n))}var F=class{constructor({name:e,defaultValue:r,description:n,flags:o=G.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,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&G.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 r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},V=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new F(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var $e="PACK";function je(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function S(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Ze(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var qe=Ze();function xe(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=qe[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var h=class extends Error{},b=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new h("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!==$e)throw new h(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),a=n.getInt32(8,!0);if(i<12)throw new h(`Invalid directory offset: ${i}`);if(a<=0||a%64!==0)throw new h(`Invalid directory length: ${a}`);if(i+a>r.byteLength)throw new h("Directory exceeds buffer length");let l=a/64,u=[],c=new Map;for(let d=0;d<l;d+=1){let f=i+d*64,p=je(n,f,56),x=S(p),g=n.getInt32(f+56,!0),D=n.getInt32(f+60,!0);if(g<0||D<0||g+D>r.byteLength)throw new h(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${g}, length=${D})`);if(!x)throw new h(`Entry ${d} has an empty name`);let _e={name:x,offset:g,length:D};c.set(x,_e)}return u.push(...c.values()),new t(e,r,u,xe(new Uint8Array(r)))}getEntry(e){return this.entries.get(S(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new h(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function ge(t){return xe(new Uint8Array(t))}var W=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=S(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(S(e))}stat(e){let r=this.files.get(S(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(S(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=S(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let a of this.files.values()){if(r&&!a.entry.name.startsWith(i))continue;let s=r?a.entry.name.slice(i.length):a.entry.name,l=s.indexOf("/");l===-1?n.push({path:a.entry.name,size:a.entry.length,sourcePak:a.archive.name}):o.add(s.slice(0,l))}return n.sort((a,s)=>a.path.localeCompare(s.path)),{files:n,directories:[...o].sort()}}findByExtension(e){let r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&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 w=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function Qe(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,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||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:s,value:l}=await r.read();if(s)break;if(!l)continue;let u=l;n.push(u),o+=u.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.size,state:"reading"})}let i=new Uint8Array(o),a=0;for(let s of n)i.set(s,a),a+=s.byteLength;return i.buffer}throw new w("blob",new Error("Unsupported Blob type"))}async function et(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return Qe(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function H(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},o=[];for(let i of e)try{let a=await et(i,n.onProgress),s=b.fromArrayBuffer(i.name,a);t.mountPak(s),n.onProgress?.({file:i.name,loadedBytes:a.byteLength,totalBytes:a.byteLength,state:"parsed"}),o.push({archive:s,mounted:!0})}catch(a){if(n.onProgress?.({file:i.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(i.name,a),n.stopOnError)throw new w(i.name,a)}return o}var X=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 r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),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,r])=>({key:e,value:r}))}};function tt(t){return Array.isArray(t)?t:Array.from(t)}function ae(t){return tt(t).map(e=>({name:e.name,data:e}))}async function ve(t,e,r){let n=ae(e);return H(t,n,r??{})}function ze(t,e){let r=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 t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function Se(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var rt=844121161,nt=8,Ee=68,ot=[{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}],y=class extends Error{},Y=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),se(n.buffer)}};function Ae(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function P(t,e,r,n){if(r!==0&&(e<Ee||e+r>t.byteLength))throw new y(`${n} section is out of bounds`)}function it(t){if(t.byteLength<Ee)throw new y("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==rt)throw new y(`Invalid MD2 ident: ${r}`);if(n!==nt)throw new y(`Unsupported MD2 version: ${n}`);let o={ident:r,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 y(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new y("MD2 offset_end exceeds buffer length");return o}function at(t,e){let r=e.numSkins*64;P(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:Ae(n,i*64,64)});return o}function st(t,e){let r=e.numTexCoords*4;P(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),o=[];for(let i=0;i<e.numTexCoords;i+=1){let a=i*4;o.push({s:n.getInt16(a,!0),t:n.getInt16(a+2,!0)})}return o}function lt(t,e){let r=e.numTriangles*12;P(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),o=[];for(let i=0;i<e.numTriangles;i+=1){let a=i*12,s=[n.getUint16(a,!0),n.getUint16(a+2,!0),n.getUint16(a+4,!0)],l=[n.getUint16(a+6,!0),n.getUint16(a+8,!0),n.getUint16(a+10,!0)];if(s.some(u=>u>=e.numVertices)||l.some(u=>u>=e.numTexCoords))throw new y("Triangle references out of range vertex or texcoord");o.push({vertexIndices:s,texCoordIndices:l})}return o}function ut(t,e){let r=e.numFrames*e.frameSize;P(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,a=new DataView(t,i,e.frameSize),s={x:a.getFloat32(0,!0),y:a.getFloat32(4,!0),z:a.getFloat32(8,!0)},l={x:a.getFloat32(12,!0),y:a.getFloat32(16,!0),z:a.getFloat32(20,!0)},u=Ae(a,24,16),c=[];for(let d=0;d<e.numVertices;d+=1){let f=40+d*4,p={x:a.getUint8(f)*s.x+l.x,y:a.getUint8(f+1)*s.y+l.y,z:a.getUint8(f+2)*s.z+l.z},x=a.getUint8(f+3),g=ot[x];if(!g)throw new y(`Invalid normal index ${x} in frame ${u}`);c.push({position:p,normalIndex:x,normal:g})}n.push({name:u,vertices:c})}return n}function ct(t,e){let r=e.numGlCommands*4;if(P(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new y("GL command list ended unexpectedly");let a=n.getInt32(i,!0);if(i+=4,a===0)break;let s=Math.abs(a),l=[],u=s*12;if(i+u>r)throw new y("GL command vertex block exceeds buffer");for(let c=0;c<s;c+=1){let d=n.getFloat32(i,!0),f=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new y("GL command references invalid vertex index");l.push({s:d,t:f,vertexIndex:p})}o.push({mode:a>0?"strip":"fan",vertices:l})}if(i!==r)throw new y("GL command list did not consume expected data");return o}function se(t){let e=it(t),r=at(t,e),n=st(t,e),o=lt(t,e),i=ut(t,e),a=ct(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:a}}function Te(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}function dt(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function ft(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function be(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");dt(i);let a=new Map;ft(i,n,o,a);let s=!1,l=new Set,u=new Set,c=f=>{s=!0,f.preventDefault();for(let p of l)p()},d=()=>{s=!1;for(let f of u)f()};return t.addEventListener("webglcontextlost",c),t.addEventListener("webglcontextrestored",d),{gl:i,extensions:a,isLost:()=>s,onLost(f){return l.add(f),()=>l.delete(f)},onRestored(f){return u.add(f),()=>u.delete(f)},dispose(){t.removeEventListener("webglcontextlost",c),t.removeEventListener("webglcontextrestored",d),l.clear(),u.clear(),a.clear()}}}function we(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function mt(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[a,s]of Object.entries(n))t.bindAttribLocation(o,s,a);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let a=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(a)}return o}var k=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=we(e,e.VERTEX_SHADER,r.vertex),i=we(e,e.FRAGMENT_SHADER,r.fragment);try{let a=mt(e,o,i,n);return new t(e,a)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function Le(t,e,r){return k.create(t,e,r)}var A=class{constructor(e,r=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,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},L=class extends A{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},R=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.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)}},_=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;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,r,n,o,i,a,s,l){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,a,s,l)}dispose(){this.gl.deleteTexture(this.texture)}},K=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var ue=4,le=7*ue,ce=[{index:0,size:3,type:5126,stride:le,offset:0},{index:1,size:2,type:5126,stride:le,offset:3*ue},{index:2,size:2,type:5126,stride:le,offset:5*ue}];function yt(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function pt(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function ht(t,e,r){let n=pt(r),o=t.width*4,i=e.x+t.padding,a=e.y+t.padding,s=0;for(let l=0;l<r.height;l++){let u=(a+l)*o+i*4;for(let c=0;c<r.width;c++){let d=u+c*4;t.data[d]=r.samples[s],t.data[d+1]=r.samples[s+1],t.data[d+2]=r.samples[s+2],t.data[d+3]=n===4?r.samples[s+3]:255,s+=n}}}function xt(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let s of t){if(s.cursorX+n>s.width&&(s.cursorX=0,s.cursorY+=s.rowHeight+r.lightmapPadding,s.rowHeight=0),s.cursorY+o>s.height)continue;let l={atlasIndex:t.indexOf(s),x:s.cursorX,y:s.cursorY,width:e.width,height:e.height};return s.cursorX+=n+r.lightmapPadding,s.rowHeight=Math.max(s.rowHeight,o),{placement:l,atlas:s}}let i=yt(r.atlasSize,r.lightmapPadding);t.push(i);let a={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:a,atlas:i}}function J(t){return t instanceof Float32Array?t:new Float32Array(t)}function gt(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function vt(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function zt(t,e){let r=J(t.vertices),n=J(t.textureCoords),o=e?vt(J(t.lightmapCoords??t.textureCoords),e):J(t.lightmapCoords??new Float32Array(n.length)),i=r.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 a=new Float32Array(i*7);for(let s=0;s<i;s++){let l=s*3,u=s*2,c=s*7;a[c]=r[l],a[c+1]=r[l+1],a[c+2]=r[l+2],a[c+3]=n[u],a[c+4]=n[u+1],a[c+5]=o[u],a[c+6]=o[u+1]}return a}function Re(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((l,u)=>{if(!l.lightmap)return;let{placement:c,atlas:d}=xt(o,l.lightmap,n);ht(d,c,l.lightmap),i.set(u,{atlasIndex:c.atlasIndex,offset:[(c.x+n.lightmapPadding)/n.atlasSize,(c.y+n.lightmapPadding)/n.atlasSize],scale:[c.width/n.atlasSize,c.height/n.atlasSize]})});let a=o.map(l=>{let u=new _(t);return u.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),u.uploadImage(0,t.RGBA,l.width,l.height,0,t.RGBA,t.UNSIGNED_BYTE,l.data),{texture:u,width:l.width,height:l.height,pixels:l.data}});return{surfaces:e.map((l,u)=>{let c=i.get(u),d=zt(l,c),f=gt(l.indices,d.length/7),p=new A(t,t.STATIC_DRAW,t.ARRAY_BUFFER);p.upload(d);let x=new L(t,t.STATIC_DRAW);x.upload(f);let g=new R(t);return g.configureAttributes(ce,p),{vao:g,vertexBuffer:p,indexBuffer:x,indexCount:f.length,texture:l.texture,surfaceFlags:l.surfaceFlags??fe,lightmap:c,vertexData:d,indexData:f}}),lightmaps:a}}function St(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new E(e,r)}}}return De(Et);})();
|
|
1
|
+
"use strict";var Quake2Engine=(()=>{var Ca=Object.create;var wn=Object.defineProperty;var Ea=Object.getOwnPropertyDescriptor;var Ta=Object.getOwnPropertyNames;var za=Object.getPrototypeOf,Pa=Object.prototype.hasOwnProperty;var Fa=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Ia=(t,e)=>{for(var r in e)wn(t,r,{get:e[r],enumerable:!0})},ji=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ta(e))!Pa.call(t,o)&&o!==r&&wn(t,o,{get:()=>e[o],enumerable:!(n=Ea(e,o))||n.enumerable});return t};var ka=(t,e,r)=>(r=t!=null?Ca(za(t)):{},ji(e||!t||!t.__esModule?wn(r,"default",{value:t,enumerable:!0}):r,t)),Ra=t=>ji(wn({},"__esModule",{value:!0}),t);var Cs=Fa((wu,Ls)=>{"use strict";Ls.exports=Worker});var dl={};Ia(dl,{ATTN_IDLE:()=>oa,ATTN_LOOP_NONE:()=>ra,ATTN_NONE:()=>So,ATTN_NORM:()=>na,ATTN_STATIC:()=>ia,AssetDependencyError:()=>kt,AssetDependencyTracker:()=>gn,AssetManager:()=>xo,AudioApi:()=>Po,AudioContextController:()=>_o,AudioRegistry:()=>cr,AudioRegistryError:()=>pn,AudioSystem:()=>To,BSP_SURFACE_FRAGMENT_SOURCE:()=>Fi,BSP_SURFACE_VERTEX_SOURCE:()=>Pi,BSP_VERTEX_LAYOUT:()=>Ei,BspSurfacePipeline:()=>ko,ConfigStringRegistry:()=>Bt,Cvar:()=>xr,CvarRegistry:()=>Pn,EngineHost:()=>Ot,EngineRuntime:()=>gr,FixedTimestepLoop:()=>gt,Framebuffer:()=>Fo,IndexBuffer:()=>yt,LruCache:()=>Qe,MAX_SOUND_CHANNELS:()=>wi,MD2_FRAGMENT_SHADER:()=>Oi,MD2_VERTEX_SHADER:()=>Ni,Md2Loader:()=>Ut,Md2MeshBuffers:()=>Ho,Md2ParseError:()=>K,Md2Pipeline:()=>Do,Md3Loader:()=>Gt,Md3ParseError:()=>pe,MusicSystem:()=>zo,PakArchive:()=>Vt,PakIndexStore:()=>go,PakIngestionError:()=>Je,PakParseError:()=>fe,PakValidationError:()=>xt,PakValidator:()=>In,RERELEASE_KNOWN_PAKS:()=>Qo,SKYBOX_FRAGMENT_SHADER:()=>Hi,SKYBOX_VERTEX_SHADER:()=>Ri,SOUND_FULLVOLUME:()=>lr,SOUND_LOOP_ATTENUATE:()=>sa,ShaderProgram:()=>Me,SkyboxPipeline:()=>Ro,SoundChannel:()=>bo,SoundPrecache:()=>Mo,SoundRegistry:()=>wo,Texture2D:()=>ur,TextureCache:()=>Wt,TextureCubeMap:()=>dr,VertexArray:()=>Re,VertexBuffer:()=>Le,VirtualFileSystem:()=>Fn,advanceAnimation:()=>bs,applySurfaceState:()=>xa,attenuationToDistanceMultiplier:()=>Rt,boxIntersectsFrustum:()=>bn,buildBspGeometry:()=>da,buildMd2Geometry:()=>Bi,buildMd2VertexData:()=>Vi,calculateMaxAudibleDistance:()=>vo,calculatePakChecksum:()=>ds,computeFrameBlend:()=>Ss,computeSkyScroll:()=>va,createAnimationState:()=>vs,createAudioGraph:()=>Ao,createEngine:()=>ul,createEngineRuntime:()=>ls,createInitialChannels:()=>Lo,createProgramFromSources:()=>ua,createWebGLContext:()=>ca,decodeOgg:()=>yo,deriveSurfaceRenderState:()=>ki,extractFrustumPlanes:()=>ma,filesToPakSources:()=>Zo,findLeafForPoint:()=>zi,gatherVisibleFaces:()=>ya,groupMd2Animations:()=>gs,ingestPakFiles:()=>ms,ingestPaks:()=>kn,interpolateVec3:()=>_s,parseMd2:()=>ei,parseMd3:()=>ti,parsePcx:()=>As,parseWal:()=>Hn,parseWalTexture:()=>Ms,parseWav:()=>Nn,pcxToRgba:()=>Dn,pickChannel:()=>Co,preparePcxTexture:()=>ws,removeViewTranslation:()=>Sa,resolveLightStyles:()=>Ii,spatializeOrigin:()=>Eo,walToRgba:()=>ri,wireDropTarget:()=>fs,wireFileInput:()=>ps});var Ha=()=>typeof performance<"u"?performance.now():Date.now(),Da=t=>{typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,25)},gt=class{constructor(e,r={}){this.callbacks=e;this.accumulatorMs=0;this.frame=0;this.running=!1;this.tick=()=>{if(!this.running)return;let e=this.options.now(),r=this.lastTimeMs===void 0?0:e-this.lastTimeMs;this.lastTimeMs=e,this.advance(r,e),this.running&&this.options.schedule(this.tick)};let n=r.fixedDeltaMs??25,o=r.maxSubSteps??5;this.options={fixedDeltaMs:n,maxSubSteps:o,maxDeltaMs:r.maxDeltaMs??n*o,startTimeMs:r.startTimeMs,now:r.now??Ha,schedule:r.schedule??Da}}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 r=(this.lastTimeMs??0)+e;this.lastTimeMs=r,this.advance(e,r)}isRunning(){return this.running}get frameNumber(){return this.frame}advance(e,r){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:r}),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:r,accumulatorMs:this.accumulatorMs,frame:this.frame})}};var Ot=class{constructor(e,r,n={}){this.game=e;this.client=r;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 gt({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 Ji={x:0,y:0,z:0};var yl=Math.PI/180;function Qi(t,e){return{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}function Na(t,e){return{x:t.x*e,y:t.y*e,z:t.z*e}}function Uo(t,e){return t.x*e.x+t.y*e.y+t.z*e.z}function Oa(t){return Uo(t,t)}function Go(t){return Math.sqrt(Oa(t))}function Zi(t){let e=Go(t);return e===0?t:Na(t,1/e)}var gl=Math.PI/180,xl=180/Math.PI;var Ce=1,je=2;var Wo=8,Xo=16,Ba=32;var Va=16384;var Mn=65536,es=1<<17,Ua=1<<18,Ga=1<<19,Wa=1<<20,Xa=1<<21,Ka=1<<22,qa=1<<23,bl=1<<24,Ln=1<<25,$a=1<<26,Sl=1<<27,vl=1<<28,_l=1<<29,Cn=1<<30,Al=1<<31;var yr=0;var ts=4,rs=8,ns=16,os=32,is=64;var wl=1<<25,Ml=1<<28,Ll=1<<29,Cl=1<<30,El=1<<31;var Tl=Ce|je,zl=Ce|Mn|je|Ln|Cn,Pl=Ce|Mn|je,Fl=Ce|es|je|Ln|Cn,Il=Ba|Wo|Xo,kl=Ce|Xo|Wo,Ya=Ce|Ln|Cn|je|$a,Rl=Ua|Ga|Wa|Xa|Ka|qa,Hl=Ce|Wo|Xo|Ln|Cn,Dl=Ce|Mn|je,Nl=Ce|je,Ol=Ce|Mn|je|es,Bl=Ya|Va;var Vl=Number.MAX_SAFE_INTEGER-1;var En=(t=>(t[t.None=0]="None",t[t.Archive=1]="Archive",t[t.UserInfo=2]="UserInfo",t[t.ServerInfo=4]="ServerInfo",t[t.Latch=8]="Latch",t[t.Cheat=16]="Cheat",t))(En||{});var Tn=256;var Ko=256,qo=8192,zn=2048,$o=512,Yo=256,jo=Tn*2,Jo=256,Vo=32,hr=96;var k=(t=>(t[t.Name=0]="Name",t[t.CdTrack=1]="CdTrack",t[t.Sky=2]="Sky",t[t.SkyAxis=3]="SkyAxis",t[t.SkyRotate=4]="SkyRotate",t[t.StatusBar=5]="StatusBar",t[t.AirAccel=59]="AirAccel",t[t.MaxClients=60]="MaxClients",t[t.MapChecksum=61]="MapChecksum",t[t.Models=62]="Models",t[t.Sounds=62+qo]="Sounds",t[t.Images=t.Sounds+zn]="Images",t[t.Lights=t.Images+$o]="Lights",t[t.ShadowLights=t.Lights+Ko]="ShadowLights",t[t.Items=t.ShadowLights+Jo]="Items",t[t.PlayerSkins=t.Items+Yo]="PlayerSkins",t[t.General=t.PlayerSkins+Tn]="General",t[t.WheelWeapons=t.General+jo]="WheelWeapons",t[t.WheelAmmo=t.WheelWeapons+Vo]="WheelAmmo",t[t.WheelPowerups=t.WheelAmmo+Vo]="WheelPowerups",t[t.CdLoopCount=t.WheelPowerups+Vo]="CdLoopCount",t[t.GameStyle=t.CdLoopCount+1]="GameStyle",t[t.MaxConfigStrings=t.GameStyle+1]="MaxConfigStrings",t))(k||{}),ss=k.MaxConfigStrings;function as(t){return t>=5&&t<59?hr*(59-t):t>=k.General&&t<k.WheelWeapons?hr*(k.MaxConfigStrings-t):hr}function ja(t){if(t<0||t>=k.MaxConfigStrings)throw new RangeError(`Configstring index ${t} is out of range (0-${k.MaxConfigStrings-1})`)}function cs(t,e){let r=as(t);if(e.length>r)throw new RangeError(`Configstring ${t} exceeds maximum length (${e.length} > ${r}); limit is ${hr} chars per slot`)}var Bt=class{constructor(){this.values=new Map;this.modelCursor=k.Models;this.soundCursor=k.Sounds;this.imageCursor=k.Images;this.lightCursor=k.Lights;this.shadowLightCursor=k.ShadowLights;this.itemCursor=k.Items;this.playerSkinCursor=k.PlayerSkins;this.generalCursor=k.General}set(e,r){return ja(e),cs(e,r),this.values.set(e,r),e}get(e){return this.values.get(e)}getAll(){let e=new Array(ss).fill("");for(let[r,n]of this.values.entries())e[r]=n;return e}modelIndex(e){return this.register(e,k.Models,qo,"modelCursor")}soundIndex(e){return this.register(e,k.Sounds,zn,"soundCursor")}findSoundIndex(e){for(let r=k.Sounds;r<k.Sounds+zn;r+=1)if(this.values.get(r)===e)return r}imageIndex(e){return this.register(e,k.Images,$o,"imageCursor")}lightIndex(e){return this.register(e,k.Lights,Ko,"lightCursor")}shadowLightIndex(e){return this.register(e,k.ShadowLights,Jo,"shadowLightCursor")}itemIndex(e){return this.register(e,k.Items,Yo,"itemCursor")}playerSkinIndex(e){return this.register(e,k.PlayerSkins,Tn,"playerSkinCursor")}generalIndex(e){return this.register(e,k.General,jo,"generalCursor")}register(e,r,n,o){for(let a=r;a<r+n;a+=1)if(this.values.get(a)===e)return a;let i=this[o],s=r+n;if(i>=s)throw new RangeError(`Out of configstring slots for range starting at ${r}`);return cs(i,e),this.values.set(i,e),this[o]=i+1,i}};var gr=class{constructor(e,r){this.engine=e;this.host=r;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 ls(t,e,r,n){return new gr(t,new Ot(e,r,n))}var xr=class{constructor({name:e,defaultValue:r,description:n,flags:o=En.None,onChange:i}){this.modifiedCount=0;this.name=e,this.defaultValue=r,this.description=n,this.flags=o,this._value=r,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&En.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 r=this._value;this._value=e,this.modifiedCount+=1,this.onChange?.(this,r)}},Pn=class{constructor(){this.cvars=new Map}register(e){let r=this.cvars.get(e.name);if(r)return r;let n=new xr(e);return this.cvars.set(e.name,n),n}get(e){return this.cvars.get(e)}setValue(e,r){let n=this.get(e);if(!n)throw new Error(`Unknown cvar: ${e}`);return n.set(r),n}resetAll(){for(let e of this.cvars.values())e.reset()}applyLatched(){let e=!1;for(let r of this.cvars.values())e=r.applyLatched()||e;return e}list(){return[...this.cvars.values()].sort((e,r)=>e.name.localeCompare(r.name))}};var Ja="PACK";function Qa(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function U(t){return t.replace(/\\/g,"/").replace(/^\/+/,"").toLowerCase()}function Za(){let t=new Uint32Array(256);for(let e=0;e<256;e+=1){let r=e;for(let n=0;n<8;n+=1)r=(r&1)!==0?3988292384^r>>>1:r>>>1;t[e]=r>>>0}return t}var ec=Za();function us(t){let e=4294967295;for(let r=0;r<t.length;r+=1){let n=t[r];e=ec[(e^n)&255]^e>>>8}return(e^4294967295)>>>0}var fe=class extends Error{},Vt=class t{constructor(e,r,n,o){this.name=e;this.buffer=r;this.entries=new Map(n.map(i=>[i.name,i])),this.checksum=o,this.size=r.byteLength}static fromArrayBuffer(e,r){let n=new DataView(r);if(r.byteLength<12)throw new fe("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!==Ja)throw new fe(`Invalid PAK header magic: ${o}`);let i=n.getInt32(4,!0),s=n.getInt32(8,!0);if(i<12)throw new fe(`Invalid directory offset: ${i}`);if(s<=0||s%64!==0)throw new fe(`Invalid directory length: ${s}`);if(i+s>r.byteLength)throw new fe("Directory exceeds buffer length");let c=s/64,l=[],u=new Map;for(let d=0;d<c;d+=1){let f=i+d*64,p=Qa(n,f,56),y=U(p),h=n.getInt32(f+56,!0),g=n.getInt32(f+60,!0);if(h<0||g<0||h+g>r.byteLength)throw new fe(`Invalid entry bounds for ${p||"<unnamed>"} (offset=${h}, length=${g})`);if(!y)throw new fe(`Entry ${d} has an empty name`);let b={name:y,offset:h,length:g};u.set(y,b)}return l.push(...u.values()),new t(e,r,l,us(new Uint8Array(r)))}getEntry(e){return this.entries.get(U(e))}listEntries(){return Array.from(this.entries.values())}readFile(e){let r=this.getEntry(e);if(!r)throw new fe(`File not found in PAK: ${e}`);return new Uint8Array(this.buffer,r.offset,r.length)}validate(){return{checksum:this.checksum,entries:this.listEntries()}}};function ds(t){return us(new Uint8Array(t))}var Fn=class{constructor(e=[]){this.mounts=[];this.files=new Map;e.forEach(r=>this.mountPak(r))}mountPak(e){this.mounts.push(e);for(let r of e.listEntries()){let n=U(r.name);this.files.set(n,{archive:e,entry:r})}}get mountedPaks(){return[...this.mounts]}hasFile(e){return this.files.has(U(e))}stat(e){let r=this.files.get(U(e));if(r)return{path:r.entry.name,size:r.entry.length,sourcePak:r.archive.name}}async readFile(e){let r=this.files.get(U(e));if(!r)throw new Error(`File not found in VFS: ${e}`);return r.archive.readFile(e)}list(e=""){let r=U(e).replace(/\/+$|^\//g,""),n=[],o=new Set,i=r?`${r}/`:"";for(let s of this.files.values()){if(r&&!s.entry.name.startsWith(i))continue;let a=r?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 r=e.startsWith(".")?e.toLowerCase():`.${e.toLowerCase()}`,n=[];for(let o of this.files.values())o.entry.name.toLowerCase().endsWith(r)&&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 Qo=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"}]),xt=class extends Error{constructor(r){super(r.status==="unknown"?`Unknown PAK not allowed: ${r.name}`:`PAK checksum mismatch for ${r.name}`);this.result=r;this.name="PakValidationError"}},In=class{constructor(e=Qo){this.known=new Map;e.forEach(r=>this.known.set(this.normalizePakName(r.name),r))}validateArchive(e,r){let n=this.normalizePakName(r??("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,r){let n=this.validateArchive(e,r);if(n.status==="mismatch")throw new xt(n);return n}normalizePakName(e){let r=U(e),n=r.split("/"),o=n.pop()??r,i=n.pop();return i?`${o}@${i}`:o}};var Je=class extends Error{constructor(r,n){super(`Failed to ingest PAK: ${r}`);this.file=r;this.name="PakIngestionError",n instanceof Error&&n.stack&&(this.stack=n.stack),this.cause=n}};async function tc(t,e){if(typeof t.arrayBuffer=="function"){let r=await t.arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof FileReader<"u")return new Promise((r,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||t.size,state:"reading"})},o.onload=()=>{let i=o.result;i instanceof ArrayBuffer?r(i):n(new Error("Unexpected FileReader result"))},o.readAsArrayBuffer(t)});if(typeof Response<"u"){let r=await new Response(t).arrayBuffer();return e?.({file:"blob",loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}if(typeof t.stream=="function"){let r=t.stream().getReader(),n=[],o=0;for(;;){let{done:a,value:c}=await r.read();if(a)break;if(!c)continue;let l=c;n.push(l),o+=l.byteLength,e?.({file:"blob",loadedBytes:o,totalBytes:t.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 Je("blob",new Error("Unsupported Blob type"))}async function rc(t,e){if(t.data instanceof ArrayBuffer)return e?.({file:t.name,loadedBytes:t.data.byteLength,totalBytes:t.data.byteLength,state:"reading"}),t.data;if(t.data instanceof Blob){let n=t.data.size;return tc(t.data,o=>e?.({...o,file:t.name,totalBytes:n}))}let r=t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength);return e?.({file:t.name,loadedBytes:r.byteLength,totalBytes:r.byteLength,state:"reading"}),r}async function kn(t,e,r){let n=typeof r=="function"?{onProgress:r}:r??{},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 rc(l,n.onProgress),d=Vt.fromArrayBuffer(l.name,u),f=n.validator?.validateArchive(d);if(f){n.onValidationResult?.(f);let p=f.status==="mismatch",y=f.status==="unknown";if(p&&i||y&&!s){let h=new xt(f);if(n.onError?.(l.name,h),a)throw new Je(l.name,h);c.push({archive:d,mounted:!1,validation:f});continue}}if(t.mountPak(d),o&&n.pakIndexStore)try{await n.pakIndexStore.persist(d)}catch(p){if(n.onError?.(l.name,p),a)throw new Je(l.name,p)}n.onProgress?.({file:l.name,loadedBytes:u.byteLength,totalBytes:u.byteLength,state:"parsed"}),c.push({archive:d,mounted:!0,validation:f})}catch(u){if(n.onProgress?.({file:l.name,loadedBytes:0,totalBytes:0,state:"error"}),n.onError?.(l.name,u),a)throw new Je(l.name,u)}return c}var Qe=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 r=this.map.get(e);if(r!==void 0)return this.map.delete(e),this.map.set(e,r),r}set(e,r){if(this.map.has(e)&&this.map.delete(e),this.map.set(e,r),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,r])=>({key:e,value:r}))}};function nc(t){return Array.isArray(t)?t:Array.from(t)}function Zo(t){return nc(t).map(e=>({name:e.name,data:e}))}async function ms(t,e,r){let n=Zo(e);return kn(t,n,r??{})}function fs(t,e){let r=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 t.addEventListener("dragover",r),t.addEventListener("drop",n),()=>{t.removeEventListener("dragover",r),t.removeEventListener("drop",n)}}function ps(t,e){let r=n=>{let o=n.target;!o||!o.files||o.files.length===0||(e(o.files),o.value="")};return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}var oc=844121161,ic=8,hs=68,sc=[{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}],K=class extends Error{},Ut=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e),n=new Uint8Array(r.byteLength);return n.set(r),ei(n.buffer)}};function ys(t,e,r){let n=[];for(let o=0;o<r;o+=1){let i=t.getUint8(e+o);if(i===0)break;n.push(i)}return String.fromCharCode(...n)}function br(t,e,r,n){if(r!==0&&(e<hs||e+r>t.byteLength))throw new K(`${n} section is out of bounds`)}function ac(t){if(t.byteLength<hs)throw new K("MD2 buffer too small to contain header");let e=new DataView(t),r=e.getInt32(0,!0),n=e.getInt32(4,!0);if(r!==oc)throw new K(`Invalid MD2 ident: ${r}`);if(n!==ic)throw new K(`Unsupported MD2 version: ${n}`);let o={ident:r,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 K(`Unexpected frame size ${o.frameSize}, expected ${i}`);if(o.offsetEnd>t.byteLength)throw new K("MD2 offset_end exceeds buffer length");return o}function cc(t,e){let r=e.numSkins*64;br(t,e.offsetSkins,r,"skins");let n=new DataView(t,e.offsetSkins,r),o=[];for(let i=0;i<e.numSkins;i+=1)o.push({name:ys(n,i*64,64)});return o}function lc(t,e){let r=e.numTexCoords*4;br(t,e.offsetTexCoords,r,"texcoords");let n=new DataView(t,e.offsetTexCoords,r),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 uc(t,e){let r=e.numTriangles*12;br(t,e.offsetTriangles,r,"triangles");let n=new DataView(t,e.offsetTriangles,r),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 K("Triangle references out of range vertex or texcoord");o.push({vertexIndices:a,texCoordIndices:c})}return o}function dc(t,e){let r=e.numFrames*e.frameSize;br(t,e.offsetFrames,r,"frames");let n=[];for(let o=0;o<e.numFrames;o+=1){let i=e.offsetFrames+o*e.frameSize,s=new DataView(t,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=ys(s,24,16),u=[];for(let d=0;d<e.numVertices;d+=1){let f=40+d*4,p={x:s.getUint8(f)*a.x+c.x,y:s.getUint8(f+1)*a.y+c.y,z:s.getUint8(f+2)*a.z+c.z},y=s.getUint8(f+3),h=sc[y];if(!h)throw new K(`Invalid normal index ${y} in frame ${l}`);u.push({position:p,normalIndex:y,normal:h})}n.push({name:l,vertices:u})}return n}function mc(t,e){let r=e.numGlCommands*4;if(br(t,e.offsetGlCommands,r,"gl commands"),r===0)return[];let n=new DataView(t,e.offsetGlCommands,r),o=[],i=0;for(;;){if(i+4>r)throw new K("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>r)throw new K("GL command vertex block exceeds buffer");for(let u=0;u<a;u+=1){let d=n.getFloat32(i,!0),f=n.getFloat32(i+4,!0),p=n.getInt32(i+8,!0);if(i+=12,p<0||p>=e.numVertices)throw new K("GL command references invalid vertex index");c.push({s:d,t:f,vertexIndex:p})}o.push({mode:s>0?"strip":"fan",vertices:c})}if(i!==r)throw new K("GL command list did not consume expected data");return o}function ei(t){let e=ac(t),r=cc(t,e),n=lc(t,e),o=uc(t,e),i=dc(t,e),s=mc(t,e);return{header:e,skins:r,texCoords:n,triangles:o,frames:i,glCommands:s}}function gs(t){let e=[],r=0;for(;r<t.length;){let n=t[r].name,o=n.replace(/\d+$/,"")||n,i=r;for(;i+1<t.length&&(t[i+1].name.replace(/\d+$/,"")||t[i+1].name)===o;)i+=1;e.push({name:o,firstFrame:r,lastFrame:i}),r=i+1}return e}var xs=860898377,fc=15,pe=class extends Error{constructor(e){super(e),this.name="Md3ParseError"}};function Sr(t,e,r){let n=new Uint8Array(t.buffer,t.byteOffset+e,r);return new TextDecoder("utf-8").decode(n).replace(/\0.*$/,"").trim()}function pc(t){let e=(t>>8&255)*(2*Math.PI/255),r=(t&255)*(2*Math.PI/255),n=Math.sin(r);return{x:Math.cos(e)*n,y:Math.sin(e)*n,z:Math.cos(r)}}function Rn(t,e,r,n){if(e<0||e+r>n)throw new pe(`${t} exceeds buffer bounds`)}function hc(t){let e=t.getInt32(0,!0);if(e!==xs)throw new pe(`Invalid MD3 ident: ${e}`);let r=t.getInt32(4,!0);if(r!==fc)throw new pe(`Unsupported MD3 version: ${r}`);let n=Sr(t,8,64),o=t.getInt32(72,!0),i=t.getInt32(76,!0),s=t.getInt32(80,!0),a=t.getInt32(84,!0),c=t.getInt32(88,!0),l=t.getInt32(92,!0),u=t.getInt32(96,!0),d=t.getInt32(100,!0),f=t.getInt32(104,!0);if(i<=0||a<0||s<0)throw new pe("Invalid MD3 counts");return{ident:e,version:r,name:n,flags:o,numFrames:i,numTags:s,numSurfaces:a,numSkins:c,ofsFrames:l,ofsTags:u,ofsSurfaces:d,ofsEnd:f}}function yc(t,e){let r=[];Rn("Frames",e.ofsFrames,e.numFrames*56,t.byteLength);for(let o=0;o<e.numFrames;o+=1){let i=e.ofsFrames+o*56;r.push({minBounds:{x:t.getFloat32(i,!0),y:t.getFloat32(i+4,!0),z:t.getFloat32(i+8,!0)},maxBounds:{x:t.getFloat32(i+12,!0),y:t.getFloat32(i+16,!0),z:t.getFloat32(i+20,!0)},localOrigin:{x:t.getFloat32(i+24,!0),y:t.getFloat32(i+28,!0),z:t.getFloat32(i+32,!0)},radius:t.getFloat32(i+36,!0),name:Sr(t,i+40,16)})}return r}function gc(t,e){let r=[],o=e.numFrames*e.numTags*112;Rn("Tags",e.ofsTags,o,t.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:Sr(t,c,64),origin:{x:t.getFloat32(l,!0),y:t.getFloat32(l+4,!0),z:t.getFloat32(l+8,!0)},axis:[{x:t.getFloat32(u,!0),y:t.getFloat32(u+4,!0),z:t.getFloat32(u+8,!0)},{x:t.getFloat32(u+12,!0),y:t.getFloat32(u+16,!0),z:t.getFloat32(u+20,!0)},{x:t.getFloat32(u+24,!0),y:t.getFloat32(u+28,!0),z:t.getFloat32(u+32,!0)}]})}r.push(s)}return r}function xc(t,e){let r=t.getInt32(e,!0);if(r!==xs)throw new pe(`Invalid surface ident at ${e}: ${r}`);let n=Sr(t,e+4,64),o=t.getInt32(e+68,!0),i=t.getInt32(e+72,!0),s=t.getInt32(e+76,!0),a=t.getInt32(e+80,!0),c=t.getInt32(e+84,!0),l=t.getInt32(e+88,!0),u=t.getInt32(e+92,!0),d=t.getInt32(e+96,!0),f=t.getInt32(e+100,!0),p=t.getInt32(e+104,!0);if(i<=0||a<=0||c<=0)throw new pe(`Invalid surface counts for ${n}`);let y=p;Rn(`Surface ${n}`,e,y,t.byteLength);let h=[],g=e+l;for(let X=0;X<c;X+=1){let oe=g+X*12;h.push({indices:[t.getInt32(oe,!0),t.getInt32(oe+4,!0),t.getInt32(oe+8,!0)]})}let b=[],T=e+u;for(let X=0;X<s;X+=1){let oe=T+X*68;b.push({name:Sr(t,oe,64),shaderIndex:t.getInt32(oe+64,!0)})}let P=[],ne=e+d;for(let X=0;X<a;X+=1){let oe=ne+X*8;P.push({s:t.getFloat32(oe,!0),t:t.getFloat32(oe+4,!0)})}let Y=[],Ht=e+f;for(let X=0;X<i;X+=1){let oe=[];for(let fr=0;fr<a;fr+=1){let Dt=Ht+(X*a+fr)*8,No=t.getInt16(Dt,!0)/64,Oo=t.getInt16(Dt+2,!0)/64,Bo=t.getInt16(Dt+4,!0)/64,Sn=t.getUint16(Dt+6,!0);oe.push({position:{x:No,y:Oo,z:Bo},latLng:Sn,normal:pc(Sn)})}Y.push(oe)}return{surface:{name:n,flags:o,numFrames:i,shaders:b,triangles:h,texCoords:P,vertices:Y},nextOffset:e+p}}function ti(t){if(t.byteLength<108)throw new pe("MD3 buffer too small for header");let e=new DataView(t),r=hc(e);Rn("MD3 end",r.ofsEnd,0,t.byteLength);let n=yc(e,r),o=gc(e,r),i=[],s=r.ofsSurfaces;for(let a=0;a<r.numSurfaces;a+=1){let{surface:c,nextOffset:l}=xc(e,s);i.push(c),s=l}if(s!==r.ofsEnd)throw new pe("Surface parsing did not reach ofsEnd");return{header:r,frames:n,tags:o,surfaces:i}}var Gt=class{constructor(e){this.vfs=e}async load(e){let r=await this.vfs.readFile(e);return ti(r.slice().buffer)}};function bs(t,e){let r=(t.sequence.end-t.sequence.start+1)/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time+e;return n?o=(o%r+r)%r:o>r&&(o=r),{...t,time:Math.max(0,Math.min(o,r))}}function Ss(t){let e=t.sequence.end-t.sequence.start+1,r=1/t.sequence.fps,n=t.sequence.loop!==!1,o=t.time/r;if(!n&&o>=e)return{frame:t.sequence.end,nextFrame:t.sequence.end,lerp:0};let i=n?o%e:Math.min(o,e-1),s=Math.floor(i),a=t.sequence.start+s,c=s+1>=e?n?t.sequence.start:t.sequence.end:a+1,l=!n&&s>=e-1?0:i-s;return{frame:a,nextFrame:c,lerp:l}}function vs(t){return{sequence:t,time:0}}function _s(t,e,r){return{x:t.x+(e.x-t.x)*r,y:t.y+(e.y-t.y)*r,z:t.z+(e.z-t.z)*r}}var vr=class extends Error{constructor(e){super(e),this.name="WalParseError"}};function Hn(t){if(t.byteLength<100)throw new vr("WAL buffer too small");let e=new DataView(t),r=new Uint8Array(t,0,32),n=new TextDecoder("utf-8").decode(r).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(t,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 vr("Invalid WAL dimensions");let f=[],p=o,y=i;for(let h=0;h<s.length;h+=1){let g=s[h],b=Math.max(1,p*y|0);if(g<=0||g+b>t.byteLength)throw new vr(`Invalid WAL mip offset for level ${h}`);let T=new Uint8Array(t,g,b);f.push({level:h,width:p,height:y,data:T}),p=Math.max(1,p>>1),y=Math.max(1,y>>1)}return{name:n,width:o,height:i,mipmaps:f,animName:c,flags:l,contents:u,value:d}}var bt=class extends Error{constructor(e){super(e),this.name="PcxParseError"}};function As(t){if(t.byteLength<128)throw new bt("PCX buffer too small for header");let e=new DataView(t),r=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(r!==10||n!==1)throw new bt("Unsupported PCX encoding");if(o!==8)throw new bt("Only 8bpp PCX files are supported");let l=a-i+1,u=c-s+1,d=e.getUint16(66,!0),f=t.byteLength-769;if(f<128||new DataView(t,f,1).getUint8(0)!==12)throw new bt("Missing PCX palette");let p=new Uint8Array(t,f+1,768),y=new Uint8Array(t,128,f-128),h=new Uint8Array(l*u),g=0,b=0;for(let T=0;T<u;T+=1){let P=0;for(;P<d&&g<y.length;){let ne=1,Y=y[g++];if((Y&192)===192){if(ne=Y&63,g>=y.length)throw new bt("Unexpected end of PCX RLE data");Y=y[g++]}for(let Ht=0;Ht<ne&&P<d;Ht+=1)P<l&&(h[b++]=Y),P+=1}}return{width:l,height:u,bitsPerPixel:o,pixels:h,palette:p}}function Dn(t){let e=new Uint8Array(t.width*t.height*4);for(let r=0;r<t.pixels.length;r+=1){let n=t.pixels[r],o=n*3,i=r*4;e[i]=t.palette[o],e[i+1]=t.palette[o+1],e[i+2]=t.palette[o+2],e[i+3]=n===255?0:255}return e}var Wt=class{constructor(e={}){this.cache=new Qe(e.capacity??128)}get size(){return this.cache.size}get(e){return this.cache.get(e.toLowerCase())}set(e,r){this.cache.set(e.toLowerCase(),r)}clear(){this.cache.clear()}};function ri(t,e){let r=[];for(let n of t.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}r.push({level:n.level,width:n.width,height:n.height,rgba:o})}return{width:t.width,height:t.height,levels:r,source:"wal"}}function ws(t){let e=Dn(t),r={level:0,width:t.width,height:t.height,rgba:e};return{width:t.width,height:t.height,levels:[r],source:"pcx"}}function Ms(t,e){return ri(Hn(t),e)}var St=class extends Error{constructor(e){super(e),this.name="WavParseError"}};function ni(t,e,r){return new TextDecoder("ascii").decode(new Uint8Array(t.buffer,t.byteOffset+e,r))}function Nn(t){if(t.byteLength<44)throw new St("WAV buffer too small");let e=new DataView(t);if(ni(e,0,4)!=="RIFF"||ni(e,8,4)!=="WAVE")throw new St("Invalid WAV header");let r=12,n=-1,o=-1,i=0,s=0;for(;r+8<=t.byteLength;){let y=ni(e,r,4),h=e.getUint32(r+4,!0),g=r+8;y==="fmt "?(n=g,i=h):y==="data"&&(o=g,s=h),r=g+h}if(n===-1||o===-1)throw new St("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 St("Only PCM WAV is supported");let d=u/8,f=s/(d*c),p=new Float32Array(f*c);for(let y=0;y<f;y+=1)for(let h=0;h<c;h+=1){let g=y*c+h,b=o+g*d,T=0;if(u===8)T=e.getUint8(b),p[g]=(T-128)/128;else if(u===16)T=e.getInt16(b,!0),p[g]=T/32768;else if(u===24){let P=e.getUint8(b),ne=e.getUint8(b+1),Y=e.getInt8(b+2);T=P|ne<<8|Y<<16,p[g]=T/8388608}else throw new St(`Unsupported bitsPerSample: ${u}`)}return{sampleRate:l,channels:c,bitsPerSample:u,samples:p}}var bc=(t,e=4294967295,r=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^r:s<<1;n[o]=s}for(o=0;o<t.length;o++)a=a<<8^n[255&(a>>24^t[o])];return a};var oi=(t,e=bc)=>{let r=g=>new Uint8Array(g.length/2).map(((b,T)=>parseInt(g.substring(2*T,2*(T+1)),16))),n=g=>r(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(t.length),s,a,c,l=!1,u=0,d=42,f=t.length>13&&t.substring(0,9)==="dynEncode",p=0;f&&(p=11,a=n(t.substring(9,p)),a<=1&&(p+=2,d=n(t.substring(11,p))),a===1&&(p+=8,c=(g=>new DataView(r(g).buffer).getInt32(0,!0))(t.substring(13,p))));let y=256-d;for(let g=p;g<t.length;g++)if(s=t.charCodeAt(g),s!==61||l){if(s===92&&g<t.length-5&&f){let b=t.charCodeAt(g+1);b!==117&&b!==85||(s=parseInt(t.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+y:s-d}else l=!0;let h=i.subarray(0,u);if(f&&a===1){let g=e(h);if(g!==c){let b="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",b+`
|
|
2
|
+
`,"Expected: "+c+"; Got: "+g+`
|
|
3
|
+
`,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(b)}}return h};function D(){let t=Uint8Array,e=Float32Array;D.modules||Object.defineProperties(D,{modules:{value:new WeakMap},setModule:{value(r,n){D.modules.set(r,Promise.resolve(n))}},getModule:{value(r,n){let o=D.modules.get(r);return o||(n?o=WebAssembly.compile(oi(n)):(n=r.wasm,o=D.inflateDynEncodeString(n).then(i=>WebAssembly.compile(i))),D.modules.set(r,o)),o}},concatFloat32:{value(r,n){let o=new e(n),i=0,s=0;for(;i<r.length;)o.set(r[i],s),s+=r[i++].length;return o}},getDecodedAudio:{value:(r,n,o,i,s)=>({errors:r,channelData:n,samplesDecoded:o,sampleRate:i,bitDepth:s})},getDecodedAudioMultiChannel:{value(r,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(D.concatFloat32(d,i))}return D.getDecodedAudio(r,c,i,s,a)}},inflateDynEncodeString:{value(r){return r=oi(r),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 `;D.getModule(D,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 t(c),u=new DataView(c),d=s.get("__heap_base"),f=r.length,p=d;d+=4,u.setInt32(p,f,!0);let y=d;d+=f,l.set(r,y);let h=d;d+=4,u.setInt32(h,l.byteLength-d,!0),a(d,h,y,p),n(l.slice(d,d+u.getInt32(h,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(r,n,o)=>{let i=[],s=0;for(;s<n;)i.push(r.slice(s*o,s++*o+o));return i},this.allocateTypedArray=(r,n,o=!0)=>{let i=this._wasm.malloc(n.BYTES_PER_ELEMENT*r);return o&&this._pointers.add(i),{ptr:i,len:r,buf:new n(this._wasm.HEAP,i,r)}},this.free=()=>{this._pointers.forEach(r=>{this._wasm.free(r)}),this._pointers.clear()},this.codeToString=r=>{let n=[],o=new Uint8Array(this._wasm.HEAP);for(let i=o[r];i!==0;i=o[++r])n.push(i);return String.fromCharCode.apply(null,n)},this.addError=(r,n,o,i,s,a)=>{r.push({message:n,frameLength:o,frameNumber:i,inputBytes:s,outputSamples:a})},this.instantiate=(r,n)=>(n&&D.setModule(r,n),this._wasm=new r(D).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var Es=ka(Cs(),1);var Sc=()=>globalThis.Worker||Es.default,Xt=class extends Sc(){constructor(e,r,n,o){D.modules||new D;let i=D.modules.get(n);if(!i){let s="text/javascript",a,c=`'use strict';(${((l,u,d)=>{let f,p,y=new Promise(h=>{p=h});self.onmessage=({data:{id:h,command:g,data:b}})=>{let T=y,P={id:h},ne;g==="init"?(Object.defineProperties(l,{WASMAudioDecoderCommon:{value:u},EmscriptenWASM:{value:d},module:{value:b.module},isWebWorker:{value:!0}}),f=new l(b.options),p()):g==="free"?f.free():g==="ready"?T=T.then(()=>f.ready):g==="reset"?T=T.then(()=>f.reset()):(Object.assign(P,f[g](Array.isArray(b)?b.map(Y=>new Uint8Array(Y)):new Uint8Array(b))),ne=P.channelData?P.channelData.map(Y=>Y.buffer):[]),T.then(()=>self.postMessage(P,ne))}}).toString()})(${n}, ${D}, ${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})),D.modules.set(n,i)}super(i,{name:r}),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(D).getModule().then(s=>{this.postToDecoder("init",{module:s,options:e})})}async postToDecoder(e,r){return new Promise(n=>{this.postMessage({command:e,id:this._id,data:r}),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 On=(t,e)=>{Object.defineProperty(t,"name",{value:e})};var N=Symbol,Ts=", ",_=(()=>{let t="front",e="side",r="rear",n="left",o="center",i="right";return["",t+" ",e+" ",r+" "].map(s=>[[n,i],[n,i,o],[n,o,i],[o,n,i],[o]].flatMap(a=>a.map(c=>s+c).join(Ts)))})(),Ee="LFE",Ze="monophonic (mono)",et="stereo",_r="surround",O=(t,...e)=>`${[Ze,et,`linear ${_r}`,"quadraphonic",`5.0 ${_r}`,`5.1 ${_r}`,`6.1 ${_r}`,`7.1 ${_r}`][t-1]} (${e.join(Ts)})`,Ar=[Ze,O(2,_[0][0]),O(3,_[0][2]),O(4,_[1][0],_[3][0]),O(5,_[1][2],_[3][0]),O(6,_[1][2],_[3][0],Ee),O(7,_[1][2],_[2][0],_[3][4],Ee),O(8,_[1][2],_[2][0],_[3][0],Ee)],zs=192e3,Ps=176400,Bn=96e3,Vn=88200,Fs=64e3,tt=48e3,Kt=44100,qt=32e3,$t=24e3,Yt=22050,jt=16e3,Un=12e3,Gn=11025,Jt=8e3,Is=7350,ve="absoluteGranulePosition",M="bandwidth",j="bitDepth",J="bitrate",wr=J+"Maximum",Mr=J+"Minimum",Lr=J+"Nominal",Te="buffer",Cr=Te+"Fullness",H="codec",Q=H+"Frames",Er="coupledStreamCount",Qt="crc",Tr=Qt+"16",zr=Qt+"32",R="data",v="description",ze="duration",Zt="emphasis",Pr="hasOpusPadding",ae="header",rt="isContinuedPacket",Fr="isCopyrighted",nt="isFirstPage",Ir="isHome",ce="isLastPage",De="isOriginal",Ne="isPrivate",kr="isVbr",ie="layer",m="length",w="mode",Oe=w+"Extension",Wn="mpeg",Be=Wn+"Version",Rr="numberAACFrames",Hr="outputGain",vt="preSkip",Dr="profile",Xn=N(),Ve="protection",ii="rawData",he="segments",L="subarray",ot="version",_t="vorbis",Nr=_t+"Comments",er=_t+"Setup",Kn="block",Or=Kn+"ingStrategy",qn=N(),Ue=Kn+"Size",it=Kn+"size0",st=Kn+"size1",Br=N(),$n="channel",Ge=$n+"MappingFamily",Vr=$n+"MappingTable",Z=$n+"Mode",Ur=N(),S=$n+"s",ks="copyright",Gr=ks+"Id",Wr=ks+"IdStart",We="frame",Xe=We+"Count",se=We+"Length",Yn="Number",Ke=We+Yn,Pe=We+"Padding",A=We+"Size",Rs="Rate",Xr="inputSample"+Rs,si="page",At=si+"Checksum",tr=N(),at=si+"SegmentTable",G=si+"Sequence"+Yn,ai="sample",Kr=ai+Yn,C=ai+Rs,Fe=N(),E=ai+"s",jn="stream",qr=jn+"Count",$r=jn+"Info",Ie=jn+"Serial"+Yn,ci=jn+"StructureVersion",li="total",wt=li+"BytesOut",Mt=li+"Duration",Lt=li+"Samples",z=N(),ye=N(),Yr=N(),ct=N(),_e=N(),Jn=N(),ui=N(),lt=N(),F=N(),ge=N(),xe=N(),ke=N(),ut=N(),Qn=N(),Ae=N(),we=N(),be=N(),Zn=N(),ee=Uint8Array,dt=DataView,I="reserved",te="bad",rr="free",jr="none",eo="16bit CRC";var di=(t,e,r)=>{for(let n=0;n<t[m];n++){let o=e(n);for(let i=8;i>0;i--)o=r(o);t[n]=o}return t},_c=di(new ee(256),t=>t,t=>t&128?7^t<<1:t<<1),B=[di(new Uint16Array(256),t=>t<<8,t=>t<<1^(t&32768?32773:0))],V=[di(new Uint32Array(256),t=>t,t=>t>>>1^(t&1)*3988292384)];for(let t=0;t<15;t++){B.push(new Uint16Array(256)),V.push(new Uint32Array(256));for(let e=0;e<=255;e++)B[t+1][e]=B[0][B[t][e]>>>8]^B[t][e]<<8,V[t+1][e]=V[t][e]>>>8^V[0][V[t][e]&255]}var Ds=t=>{let e=0,r=t[m];for(let n=0;n!==r;n++)e=_c[e^t[n]];return e},Ns=t=>{let e=t[m],r=e-16,n=0,o=0;for(;o<=r;)n^=t[o++]<<8|t[o++],n=B[15][n>>8]^B[14][n&255]^B[13][t[o++]]^B[12][t[o++]]^B[11][t[o++]]^B[10][t[o++]]^B[9][t[o++]]^B[8][t[o++]]^B[7][t[o++]]^B[6][t[o++]]^B[5][t[o++]]^B[4][t[o++]]^B[3][t[o++]]^B[2][t[o++]]^B[1][t[o++]]^B[0][t[o++]];for(;o!==e;)n=(n&255)<<8^B[0][n>>8^t[o++]];return n},Os=t=>{let e=t[m],r=e-16,n=0,o=0;for(;o<=r;)n=V[15][(t[o++]^n)&255]^V[14][(t[o++]^n>>>8)&255]^V[13][(t[o++]^n>>>16)&255]^V[12][t[o++]^n>>>24]^V[11][t[o++]]^V[10][t[o++]]^V[9][t[o++]]^V[8][t[o++]]^V[7][t[o++]]^V[6][t[o++]]^V[5][t[o++]]^V[4][t[o++]]^V[3][t[o++]]^V[2][t[o++]]^V[1][t[o++]]^V[0][t[o++]];for(;o!==e;)n=V[0][(n^t[o++])&255]^n>>>8;return n^-1},Qr=(...t)=>{let e=new ee(t.reduce((r,n)=>r+n[m],0));return t.reduce((r,n)=>(e.set(n,r),r+n[m]),0),e},le=t=>String.fromCharCode(...t),Hs=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Jr=t=>Hs[t&15]<<4|Hs[t>>4],to=class{constructor(e){this._data=e,this._pos=e[m]*8}set position(e){this._pos=e}get position(){return this._pos}read(e){let r=Math.floor(this._pos/8),n=this._pos%8;return this._pos-=e,(Jr(this._data[r-1])<<8)+Jr(this._data[r])>>7-n&255}},Bs=(t,e)=>{try{return t.getBigInt64(e,!0)}catch{let r=t.getUint8(e+7)&128?-1:1,n=t.getUint32(e,!0),o=t.getUint32(e+4,!0);return r===-1&&(n=~n+1,o=~o+1),o>1048575&&console.warn("This platform does not support BigInt"),r*(n+o*2**32)}};var Zr=class{constructor(e,r){this._onCodecHeader=e,this._onCodecUpdate=r,this[Ae]()}[we](){this._isEnabled=!0}[Ae](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[Qn](e,r){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},r),this._codecShouldUpdate=!1}}[F](e){let r=this._headerCache.get(e);return r&&this._updateCurrentHeader(e),r}[ge](e,r,n){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...r}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,r),this._codecUpdateData.set(r,n))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}};var W=new WeakMap,q=new WeakMap;var re=class{constructor(e,r){this._codecParser=e,this._headerCache=r}*[ui](){let e;do{if(e=yield*this.Frame[xe](this._codecParser,this._headerCache,0),e)return e;this._codecParser[ye](1)}while(!0)}*[lt](e){let r=yield*this[ui](),n=q.get(r)[m];if(e||this._codecParser._flushing||(yield*this.Header[F](this._codecParser,this._headerCache,n)))return this._headerCache[we](),this._codecParser[ye](n),this._codecParser[ct](r),r;this._codecParser[_e](`Missing ${We} at ${n} bytes from current position.`,`Dropping current ${We} and trying again.`),this._headerCache[Ae](),this._codecParser[ye](1)}};var Ct=class{constructor(e,r){q.set(this,{[ae]:e}),this[R]=r}};var ue=class extends Ct{static*[xe](e,r,n,o,i){let s=yield*e[F](n,o,i);if(s){let a=W.get(s)[se],c=W.get(s)[E],l=(yield*n[z](a,i))[L](0,a);return new r(s,l,c)}else return null}constructor(e,r,n){super(e,r),this[ae]=e,this[E]=n,this[ze]=n/e[C]*1e3,this[Ke]=null,this[wt]=null,this[Lt]=null,this[Mt]=null,q.get(this)[m]=r[m]}};var mi="unsynchronizationFlag",fi="extendedHeaderFlag",pi="experimentalFlag",hi="footerPresent",en=class t{static*getID3v2Header(e,r,n){let i={},s=yield*e[z](3,n);if(s[0]!==73||s[1]!==68||s[2]!==51||(s=yield*e[z](10,n),i[ot]=`id3v2.${s[3]}.${s[4]}`,s[5]&15)||(i[mi]=!!(s[5]&128),i[fi]=!!(s[5]&64),i[pi]=!!(s[5]&32),i[hi]=!!(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[m]=10+a,new t(i)}constructor(e){this[ot]=e[ot],this[mi]=e[mi],this[fi]=e[fi],this[pi]=e[pi],this[hi]=e[hi],this[m]=e[m]}};var de=class{constructor(e){W.set(this,e),this[j]=e[j],this[J]=null,this[S]=e[S],this[Z]=e[Z],this[C]=e[C]}};var Xs={0:[rr,rr,rr,rr,rr],16:[32,32,32,32,8],240:[te,te,te,te,te]},ro=(t,e,r)=>8*((t+r)%e+e)*(1<<(t+r)/e)-8*e*(e/8|0);for(let t=2;t<15;t++)Xs[t<<4]=[t*32,ro(t,4,0),ro(t,4,-1),ro(t,8,4),ro(t,8,0)];var Ac=0,wc=1,Mc=2,Lc=3,Vs=4,no="bands ",oo=" to 31",Us={0:no+4+oo,16:no+8+oo,32:no+12+oo,48:no+16+oo},Et="bitrateIndex",tn="v2",lo="v1",io="Intensity stereo ",so=", MS stereo ",ao="on",co="off",Cc={0:io+co+so+co,16:io+ao+so+co,32:io+co+so+ao,48:io+ao+so+ao},yi={0:{[v]:I},2:{[v]:"Layer III",[Pe]:1,[Oe]:Cc,[lo]:{[Et]:Mc,[E]:1152},[tn]:{[Et]:Vs,[E]:576}},4:{[v]:"Layer II",[Pe]:1,[Oe]:Us,[E]:1152,[lo]:{[Et]:wc},[tn]:{[Et]:Vs}},6:{[v]:"Layer I",[Pe]:4,[Oe]:Us,[E]:384,[lo]:{[Et]:Ac},[tn]:{[Et]:Lc}}},gi="MPEG Version ",Gs="ISO/IEC ",Ec={0:{[v]:`${gi}2.5 (later extension of MPEG 2)`,[ie]:tn,[C]:{0:Gn,4:Un,8:Jt,12:I}},8:{[v]:I},16:{[v]:`${gi}2 (${Gs}13818-3)`,[ie]:tn,[C]:{0:Yt,4:$t,8:jt,12:I}},24:{[v]:`${gi}1 (${Gs}11172-3)`,[ie]:lo,[C]:{0:Kt,4:tt,8:qt,12:I}},length:m},Tc={0:eo,1:jr},zc={0:jr,1:"50/15 ms",2:I,3:"CCIT J.17"},Ws={0:{[S]:2,[v]:et},64:{[S]:2,[v]:"joint "+et},128:{[S]:2,[v]:"dual channel"},192:{[S]:1,[v]:Ze}},Tt=class t extends de{static*[F](e,r,n){let o={},i=yield*en.getID3v2Header(e,r,n);i&&(yield*e[z](i[m],n),e[ye](i[m]));let s=yield*e[z](4,n),a=le(s[L](0,4)),c=r[F](a);if(c)return new t(c);if(s[0]!==255||s[1]<224)return null;let l=Ec[s[1]&24];if(l[v]===I)return null;let u=s[1]&6;if(yi[u][v]===I)return null;let d={...yi[u],...yi[u][l[ie]]};if(o[Be]=l[v],o[ie]=d[v],o[E]=d[E],o[Ve]=Tc[s[1]&1],o[m]=4,o[J]=Xs[s[2]&240][d[Et]],o[J]===te||(o[C]=l[C][s[2]&12],o[C]===I)||(o[Pe]=s[2]&2&&d[Pe],o[Ne]=!!(s[2]&1),o[se]=Math.floor(125*o[J]*o[E]/o[C]+o[Pe]),!o[se]))return null;let f=s[3]&192;if(o[Z]=Ws[f][v],o[S]=Ws[f][S],o[Oe]=d[Oe][s[3]&48],o[Fr]=!!(s[3]&8),o[De]=!!(s[3]&4),o[Zt]=zc[s[3]&3],o[Zt]===I)return null;o[j]=16;{let{length:p,frameLength:y,samples:h,...g}=o;r[ge](a,o,g)}return new t(o)}constructor(e){super(e),this[J]=e[J],this[Zt]=e[Zt],this[Pe]=e[Pe],this[Fr]=e[Fr],this[De]=e[De],this[Ne]=e[Ne],this[ie]=e[ie],this[Oe]=e[Oe],this[Be]=e[Be],this[Ve]=e[Ve]}};var rn=class t extends ue{static*[xe](e,r,n){return yield*super[xe](Tt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var nn=class extends re{constructor(e,r,n){super(e,r),this.Frame=rn,this.Header=Tt,n(this[H])}get[H](){return Wn}*[ke](){return yield*this[lt]()}};var Pc={0:"MPEG-4",8:"MPEG-2"},Fc={0:"valid",2:te,4:te,6:te},Ic={0:eo,1:jr},kc={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Rc={0:Bn,4:Vn,8:Fs,12:tt,16:Kt,20:qt,24:$t,28:Yt,32:jt,36:Un,40:Gn,44:Jt,48:Is,52:I,56:I,60:"frequency is written explicitly"},Ks={0:{[S]:0,[v]:"Defined in AOT Specific Config"},64:{[S]:1,[v]:Ze},128:{[S]:2,[v]:O(2,_[0][0])},192:{[S]:3,[v]:O(3,_[1][3])},256:{[S]:4,[v]:O(4,_[1][3],_[3][4])},320:{[S]:5,[v]:O(5,_[1][3],_[3][0])},384:{[S]:6,[v]:O(6,_[1][3],_[3][0],Ee)},448:{[S]:8,[v]:O(8,_[1][3],_[2][0],_[3][0],Ee)}},zt=class t extends de{static*[F](e,r,n){let o={},i=yield*e[z](7,n),s=le([i[0],i[1],i[2],i[3]&252|i[6]&3]),a=r[F](s);if(a)Object.assign(o,a);else{if(i[0]!==255||i[1]<240||(o[Be]=Pc[i[1]&8],o[ie]=Fc[i[1]&6],o[ie]===te))return null;let l=i[1]&1;o[Ve]=Ic[l],o[m]=l?7:9,o[Xn]=i[2]&192,o[Fe]=i[2]&60;let u=i[2]&2;if(o[Dr]=kc[o[Xn]],o[C]=Rc[o[Fe]],o[C]===I)return null;o[Ne]=!!u,o[Ur]=(i[2]<<8|i[3])&448,o[Z]=Ks[o[Ur]][v],o[S]=Ks[o[Ur]][S],o[De]=!!(i[3]&32),o[Ir]=!!(i[3]&8),o[Gr]=!!(i[3]&8),o[Wr]=!!(i[3]&4),o[j]=16,o[E]=1024,o[Rr]=i[6]&3;{let{length:d,channelModeBits:f,profileBits:p,sampleRateBits:y,frameLength:h,samples:g,numberAACFrames:b,...T}=o;r[ge](s,o,T)}}if(o[se]=(i[3]<<11|i[4]<<3|i[5]>>5)&8191,!o[se])return null;let c=(i[5]<<6|i[6]>>2)&2047;return o[Cr]=c===2047?"VBR":c,new t(o)}constructor(e){super(e),this[Gr]=e[Gr],this[Wr]=e[Wr],this[Cr]=e[Cr],this[Ir]=e[Ir],this[De]=e[De],this[Ne]=e[Ne],this[ie]=e[ie],this[m]=e[m],this[Be]=e[Be],this[Rr]=e[Rr],this[Dr]=e[Dr],this[Ve]=e[Ve]}get audioSpecificConfig(){let e=W.get(this),r=e[Xn]+64<<5|e[Fe]<<5|e[Ur]>>3,n=new ee(2);return new dt(n[Te]).setUint16(0,r,!1),n}};var on=class t extends ue{static*[xe](e,r,n){return yield*super[xe](zt,t,e,r,n)}constructor(e,r,n){super(e,r,n)}};var sn=class extends re{constructor(e,r,n){super(e,r),this.Frame=on,this.Header=zt,n(this[H])}get[H](){return"aac"}*[ke](){return yield*this[lt]()}};var mt=class t extends ue{static _getFrameFooterCrc16(e){return(e[e[m]-2]<<8)+e[e[m]-1]}static[Zn](e){let r=t._getFrameFooterCrc16(e),n=Ns(e[L](0,-2));return r===n}constructor(e,r,n){r[$r]=n,r[Tr]=t._getFrameFooterCrc16(e),super(r,e,W.get(r)[E])}};var qs="get from STREAMINFO metadata block",Hc={0:"Fixed",1:"Variable"},$s={0:I,16:192};for(let t=2;t<16;t++)$s[t<<4]=t<6?576*2**(t-2):2**t;var Dc={0:qs,1:Vn,2:Ps,3:zs,4:Jt,5:jt,6:Yt,7:$t,8:qt,9:Kt,10:tt,11:Bn,15:te},Nc={0:{[S]:1,[v]:Ze},16:{[S]:2,[v]:O(2,_[0][0])},32:{[S]:3,[v]:O(3,_[0][1])},48:{[S]:4,[v]:O(4,_[1][0],_[3][0])},64:{[S]:5,[v]:O(5,_[1][1],_[3][0])},80:{[S]:6,[v]:O(6,_[1][1],Ee,_[3][0])},96:{[S]:7,[v]:O(7,_[1][1],Ee,_[3][4],_[2][0])},112:{[S]:8,[v]:O(8,_[1][1],Ee,_[3][0],_[2][0])},128:{[S]:2,[v]:`${et} (left, diff)`},144:{[S]:2,[v]:`${et} (diff, right)`},160:{[S]:2,[v]:`${et} (avg, diff)`},176:I,192:I,208:I,224:I,240:I},Oc={0:qs,2:8,4:12,6:I,8:16,10:20,12:24,14:I},ft=class t extends de{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let r=1;for(let s=64;s&e[0];s>>=1)r++;let n=r-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>>r)<<i,{value:o,length:r}}static[be](e,r){let n={[z]:function*(){return e}};return t[F](n,r,0).next().value}static*[F](e,r,n){let o=yield*e[z](6,n);if(o[0]!==255||!(o[1]===248||o[1]===249))return null;let i={},s=le(o[L](0,4)),a=r[F](s);if(a)Object.assign(i,a);else{if(i[qn]=o[1]&1,i[Or]=Hc[i[qn]],i[Br]=o[2]&240,i[Fe]=o[2]&15,i[Ue]=$s[i[Br]],i[Ue]===I||(i[C]=Dc[i[Fe]],i[C]===te)||o[3]&1)return null;let l=Nc[o[3]&240];if(l===I||(i[S]=l[S],i[Z]=l[v],i[j]=Oc[o[3]&14],i[j]===I))return null}i[m]=5,o=yield*e[z](i[m]+8,n);let c=t._decodeUTF8Int(o[L](4));if(!c||(i[qn]?i[Kr]=c.value:i[Ke]=c.value,i[m]+=c[m],i[Br]===96?(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[Ue]=o[i[m]-1]+1,i[m]+=1):i[Br]===112&&(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[Ue]=(o[i[m]-1]<<8)+o[i[m]]+1,i[m]+=2),i[E]=i[Ue],i[Fe]===12?(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[C]=o[i[m]-1]*1e3,i[m]+=1):i[Fe]===13?(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[C]=(o[i[m]-1]<<8)+o[i[m]],i[m]+=2):i[Fe]===14&&(o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[C]=((o[i[m]-1]<<8)+o[i[m]])*10,i[m]+=2),o[m]<i[m]&&(o=yield*e[z](i[m],n)),i[Qt]=o[i[m]-1],i[Qt]!==Ds(o[L](0,i[m]-1))))return null;if(!a){let{blockingStrategyBits:l,frameNumber:u,sampleNumber:d,samples:f,sampleRateBits:p,blockSizeBits:y,crc:h,length:g,...b}=i;r[ge](s,i,b)}return new t(i)}constructor(e){super(e),this[Tr]=null,this[Or]=e[Or],this[Ue]=e[Ue],this[Ke]=e[Ke],this[Kr]=e[Kr],this[$r]=null}};var Bc=2,Vc=512*1024,Pt=class extends re{constructor(e,r,n){super(e,r),this.Frame=mt,this.Header=ft,n(this[H])}get[H](){return"flac"}*_getNextFrameSyncOffset(e){let r=yield*this._codecParser[z](2,0),n=r[m]-2;for(;e<n;){if(r[e]===255){let i=r[e+1];if(i===248||i===249)break;i!==255&&e++}e++}return e}*[ke](){do{let e=yield*ft[F](this._codecParser,this._headerCache,0);if(e){let r=W.get(e)[m]+Bc;for(;r<=Vc;){if(this._codecParser._flushing||(yield*ft[F](this._codecParser,this._headerCache,r))){let n=yield*this._codecParser[z](r);if(this._codecParser._flushing||(n=n[L](0,r)),mt[Zn](n)){let o=new mt(n,e);return this._headerCache[we](),this._codecParser[ye](r),this._codecParser[ct](o),o}}r=yield*this._getNextFrameSyncOffset(r+1)}this._codecParser[_e](`Unable to sync FLAC frame after searching ${r} bytes.`),this._codecParser[ye](r)}else this._codecParser[ye](yield*this._getNextFrameSyncOffset(1))}while(!0)}[ut](e){return e[G]===0?(this._headerCache[we](),this._streamInfo=e[R][L](13)):e[G]===1||(e[Q]=q.get(e)[he].map(r=>{let n=ft[be](r,this._headerCache);if(n)return new mt(r,n,this._streamInfo);this._codecParser[_e]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")}).filter(r=>!!r)),e}};var Ft=class t{static*[F](e,r,n){let o={},i=yield*e[z](28,n);if(i[0]!==79||i[1]!==103||i[2]!==103||i[3]!==83||(o[ci]=i[4],i[5]&248))return null;o[ce]=!!(i[5]&4),o[nt]=!!(i[5]&2),o[rt]=!!(i[5]&1);let a=new dt(ee.from(i[L](0,28))[Te]);o[ve]=Bs(a,6),o[Ie]=a.getInt32(14,!0),o[G]=a.getInt32(18,!0),o[At]=a.getInt32(22,!0);let c=i[26];o[m]=c+27,i=yield*e[z](o[m],n),o[se]=0,o[at]=[],o[tr]=ee.from(i[L](27,o[m]));for(let l=0,u=0;l<c;l++){let d=o[tr][l];o[se]+=d,u+=d,(d!==255||l===c-1)&&(o[at].push(u),u=0)}return new t(o)}constructor(e){W.set(this,e),this[ve]=e[ve],this[rt]=e[rt],this[nt]=e[nt],this[ce]=e[ce],this[at]=e[at],this[G]=e[G],this[At]=e[At],this[Ie]=e[Ie]}};var an=class t extends Ct{static*[xe](e,r,n){let o=yield*Ft[F](e,r,n);if(o){let i=W.get(o)[se],s=W.get(o)[m],a=s+i,c=(yield*e[z](a,0))[L](0,a),l=c[L](s,a);return new t(o,l,c)}else return null}constructor(e,r,n){super(e,r),q.get(this)[m]=n[m],this[Q]=[],this[ii]=n,this[ve]=e[ve],this[zr]=e[At],this[ze]=0,this[rt]=e[rt],this[nt]=e[nt],this[ce]=e[ce],this[G]=e[G],this[E]=0,this[Ie]=e[Ie]}};var nr=class extends ue{constructor(e,r,n){super(r,e,n)}};var Ys={0:Ar.slice(0,2),1:Ar},Se="SILK-only",$="CELT-only",uo="Hybrid",pt="narrowband",mo="medium-band",ht="wideband",or="super-wideband",ir="fullband",Uc={0:{[w]:Se,[M]:pt,[A]:10},8:{[w]:Se,[M]:pt,[A]:20},16:{[w]:Se,[M]:pt,[A]:40},24:{[w]:Se,[M]:pt,[A]:60},32:{[w]:Se,[M]:mo,[A]:10},40:{[w]:Se,[M]:mo,[A]:20},48:{[w]:Se,[M]:mo,[A]:40},56:{[w]:Se,[M]:mo,[A]:60},64:{[w]:Se,[M]:ht,[A]:10},72:{[w]:Se,[M]:ht,[A]:20},80:{[w]:Se,[M]:ht,[A]:40},88:{[w]:Se,[M]:ht,[A]:60},96:{[w]:uo,[M]:or,[A]:10},104:{[w]:uo,[M]:or,[A]:20},112:{[w]:uo,[M]:ir,[A]:10},120:{[w]:uo,[M]:ir,[A]:20},128:{[w]:$,[M]:pt,[A]:2.5},136:{[w]:$,[M]:pt,[A]:5},144:{[w]:$,[M]:pt,[A]:10},152:{[w]:$,[M]:pt,[A]:20},160:{[w]:$,[M]:ht,[A]:2.5},168:{[w]:$,[M]:ht,[A]:5},176:{[w]:$,[M]:ht,[A]:10},184:{[w]:$,[M]:ht,[A]:20},192:{[w]:$,[M]:or,[A]:2.5},200:{[w]:$,[M]:or,[A]:5},208:{[w]:$,[M]:or,[A]:10},216:{[w]:$,[M]:or,[A]:20},224:{[w]:$,[M]:ir,[A]:2.5},232:{[w]:$,[M]:ir,[A]:5},240:{[w]:$,[M]:ir,[A]:10},248:{[w]:$,[M]:ir,[A]:20}},sr=class t extends de{static[be](e,r,n){let o={};if(o[S]=e[9],o[Ge]=e[18],o[m]=o[Ge]!==0?21+o[S]:19,e[m]<o[m])throw new Error("Out of data while inside an Ogg Page");let i=r[0]&3,s=i===3?2:1,a=le(e[L](0,o[m]))+le(r[L](0,s)),c=n[F](a);if(c)return new t(c);if(a.substr(0,8)!=="OpusHead"||e[8]!==1)return null;o[R]=ee.from(e[L](0,o[m]));let l=new dt(o[R][Te]);if(o[j]=16,o[vt]=l.getUint16(10,!0),o[Xr]=l.getUint32(12,!0),o[C]=tt,o[Hr]=l.getInt16(16,!0),o[Ge]in Ys&&(o[Z]=Ys[o[Ge]][o[S]-1],!o[Z]))return null;o[Ge]!==0&&(o[qr]=e[19],o[Er]=e[20],o[Vr]=[...e[L](21,o[S]+21)]);let u=Uc[248&r[0]];switch(o[w]=u[w],o[M]=u[M],o[A]=u[A],i){case 0:o[Xe]=1;break;case 1:case 2:o[Xe]=2;break;case 3:o[kr]=!!(128&r[1]),o[Pr]=!!(64&r[1]),o[Xe]=63&r[1];break;default:return null}{let{length:d,data:f,channelMappingFamily:p,...y}=o;n[ge](a,o,y)}return new t(o)}constructor(e){super(e),this[R]=e[R],this[M]=e[M],this[Ge]=e[Ge],this[Vr]=e[Vr],this[Er]=e[Er],this[Xe]=e[Xe],this[A]=e[A],this[Pr]=e[Pr],this[Xr]=e[Xr],this[kr]=e[kr],this[w]=e[w],this[Hr]=e[Hr],this[vt]=e[vt],this[qr]=e[qr]}};var cn=class extends re{constructor(e,r,n){super(e,r),this.Frame=nr,this.Header=sr,n(this[H]),this._identificationHeader=null,this._preSkipRemaining=null}get[H](){return"opus"}[ut](e){return e[G]===0?(this._headerCache[we](),this._identificationHeader=e[R]):e[G]===1||(e[Q]=q.get(e)[he].map(r=>{let n=sr[be](this._identificationHeader,r,this._headerCache);if(n){this._preSkipRemaining===null&&(this._preSkipRemaining=n[vt]);let o=n[A]*n[Xe]/1e3*n[C];return this._preSkipRemaining>0&&(this._preSkipRemaining-=o,o=this._preSkipRemaining<0?-this._preSkipRemaining:0),new nr(r,n,o)}this._codecParser[Jn]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")})),e}};var ar=class extends ue{constructor(e,r,n){super(r,e,n)}};var xi={};for(let t=0;t<8;t++)xi[t+6]=2**(6+t);var ln=class t extends de{static[be](e,r,n,o){if(e[m]<30)throw new Error("Out of data while inside an Ogg Page");let i=le(e[L](0,30)),s=r[F](i);if(s)return new t(s);let a={[m]:30};if(i.substr(0,7)!=="vorbis")return null;a[R]=ee.from(e[L](0,30));let c=new dt(a[R][Te]);if(a[ot]=c.getUint32(7,!0),a[ot]!==0||(a[S]=e[11],a[Z]=Ar[a[S]-1]||"application defined",a[C]=c.getUint32(12,!0),a[wr]=c.getInt32(16,!0),a[Lr]=c.getInt32(20,!0),a[Mr]=c.getInt32(24,!0),a[st]=xi[(e[28]&240)>>4],a[it]=xi[e[28]&15],a[it]>a[st])||e[29]!==1)return null;a[j]=32,a[er]=o,a[Nr]=n;{let{length:l,data:u,version:d,vorbisSetup:f,vorbisComments:p,...y}=a;r[ge](i,a,y)}return new t(a)}constructor(e){super(e),this[wr]=e[wr],this[Mr]=e[Mr],this[Lr]=e[Lr],this[it]=e[it],this[st]=e[st],this[R]=e[R],this[Nr]=e[Nr],this[er]=e[er]}};var un=class extends re{constructor(e,r,n){super(e,r),this.Frame=ar,n(this[H]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[H](){return _t}[ut](e){e[Q]=[];for(let r of q.get(e)[he])if(r[0]===1)this._headerCache[we](),this._identificationHeader=e[R],this._setupComplete=!1;else if(r[0]===3)this._vorbisComments=r;else if(r[0]===5)this._vorbisSetup=r,this._mode=this._parseSetupHeader(r),this._setupComplete=!0;else if(this._setupComplete){let n=ln[be](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);n?e[Q].push(new ar(r,n,this._getSamples(r,n))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,r){let o=this._mode.blockFlags[e[0]>>1&this._mode.mask]?r[st]:r[it],i=this._prevBlockSize===null?0:(this._prevBlockSize+o)/4;return this._prevBlockSize=o,i}_parseSetupHeader(e){let r=new to(e),n={count:0,blockFlags:[]};for(;(r.read(1)&1)!==1;);let o;for(;n.count<64&&r.position>0;){Jr(r.read(8));let i=0;for(;r.read(8)===0&&i++<3;);if(i===4)o=r.read(7),n.blockFlags.unshift(o&1),r.position+=6,n.count++;else{((Jr(o)&126)>>1)+1!==n.count&&this._codecParser[_e]("vorbis derived mode count did not match actual mode count");break}}return n.mask=(1<<Math.log2(n.count))-1,n}};var bi=class{constructor(e,r,n){this._codecParser=e,this._headerCache=r,this._onCodec=n,this._continuedPacket=new ee,this._codec=null,this._isSupported=null,this._previousAbsoluteGranulePosition=null}get[H](){return this._codec||""}_updateCodec(e,r){this._codec!==e&&(this._headerCache[Ae](),this._parser=new r(this._codecParser,this._headerCache,this._onCodec),this._codec=e)}_checkCodecSupport({data:e}){let r=le(e[L](0,8));switch(r){case"fishead\0":return!1;case"OpusHead":return this._updateCodec("opus",cn),!0;case(/^\x7fFLAC/.test(r)&&r):return this._updateCodec("flac",Pt),!0;case(/^\x01vorbis/.test(r)&&r):return this._updateCodec(_t,un),!0;default:return!1}}_checkPageSequenceNumber(e){e[G]!==this._pageSequenceNumber+1&&this._pageSequenceNumber>1&&e[G]>1&&this._codecParser[_e]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[G]}`),this._pageSequenceNumber=e[G]}_parsePage(e){this._isSupported===null&&(this._pageSequenceNumber=e[G],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);let r=q.get(e),n=W.get(r[ae]),o=0;if(r[he]=n[at].map(i=>e[R][L](o,o+=i)),this._continuedPacket[m]&&(r[he][0]=Qr(this._continuedPacket,r[he][0]),this._continuedPacket=new ee),n[tr][n[tr][m]-1]===255&&(this._continuedPacket=Qr(this._continuedPacket,r[he].pop())),this._previousAbsoluteGranulePosition!==null&&(e[E]=Number(e[ve]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[ve],this._isSupported){let i=this._parser[ut](e);return this._codecParser[ct](i),i}else return e}},dn=class extends re{constructor(e,r,n){super(e,r),this._onCodec=n,this.Frame=an,this.Header=Ft,this._streams=new Map,this._currentSerialNumber=null}get[H](){let e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[ke](){let e=yield*this[lt](!0);this._currentSerialNumber=e[Ie];let r=this._streams.get(this._currentSerialNumber);return r||(r=new bi(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,r)),e[ce]&&this._streams.delete(this._currentSerialNumber),r._parsePage(e)}};var Si=()=>{},mn=class{constructor(e,{onCodec:r,onCodecHeader:n,onCodecUpdate:o,enableLogging:i=!1,enableFrameCRC32:s=!0}={}){this._inputMimeType=e,this._onCodec=r||Si,this._onCodecHeader=n||Si,this._onCodecUpdate=o,this._enableLogging=i,this._crc32=s?Os:Si,this[Ae]()}get[H](){return this._parser?this._parser[H]:""}[Ae](){this._headerCache=new Zr(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[Ae]()}*parseChunk(e){for(let r=this._generator.next(e);r.value;r=this._generator.next())yield r.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new sn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new nn(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Pt(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/ogg/))this._parser=new dn(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[ke]();e&&(yield e)}}*[z](e=0,r=0){let n;for(;this._rawData[m]<=e+r;){if(n=yield,this._flushing)return this._rawData[L](r);n&&(this._totalBytesIn+=n[m],this._rawData=Qr(this._rawData,n))}return this._rawData[L](r)}[ye](e){this._currentReadPosition+=e,this._rawData=this._rawData[L](e)}[Yr](e){this._sampleRate=e[ae][C],e[ae][J]=e[ze]>0?Math.round(e[R][m]/e[ze])*8:0,e[Ke]=this._frameNumber++,e[wt]=this._totalBytesOut,e[Lt]=this._totalSamples,e[Mt]=this._totalSamples/this._sampleRate*1e3,e[zr]=this._crc32(e[R]),this._headerCache[Qn](e[ae][J],e[Mt]),this._totalBytesOut+=e[R][m],this._totalSamples+=e[E]}[ct](e){if(e[Q]){if(e[ce]){let r=e[E];e[Q].forEach(n=>{let o=n[E];r<o&&(n[E]=r>0?r:0,n[ze]=n[E]/n[ae][C]*1e3),r-=o,this[Yr](n)})}else e[E]=0,e[Q].forEach(r=>{e[E]+=r[E],this[Yr](r)});e[ze]=e[E]/this._sampleRate*1e3||0,e[Lt]=this._totalSamples,e[Mt]=this._totalSamples/this._sampleRate*1e3||0,e[wt]=this._totalBytesOut}else this[Yr](e)}_log(e,r){if(this._enableLogging){let n=[`${H}: ${this[H]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${wt}: ${this._totalBytesOut}`],o=Math.max(...n.map(i=>i[m]));r.push(`--stats--${"-".repeat(o-9)}`,...n,"-".repeat(o)),e("codec-parser",r.reduce((i,s)=>i+`
|
|
4
|
+
`+s,""))}}[_e](...e){this._log(console.warn,e)}[Jn](...e){this._log(console.error,e)}};var js=mn;var fo=Q;var po=R;var Js=ae;var Qs=ce;var Zs=er;var ea=Lt;function qe(t){var e=e;function r(){}e={};function n(x){throw x}var o,i,s,a,c,l,u,d,f,p,y;function h(){var x=y.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),f=new BigInt64Array(x),p=new BigUint64Array(x)}for(var g=x=>{for(var me,pr,Nt=0,vn=0,_n=x.length,An=new Uint8Array((_n*3>>2)-(x[_n-2]=="=")-(x[_n-1]=="="));Nt<_n;Nt+=4,vn+=3)me=He[x.charCodeAt(Nt+1)],pr=He[x.charCodeAt(Nt+2)],An[vn]=He[x.charCodeAt(Nt)]<<2|me>>4,An[vn+1]=me<<4|pr>>2,An[vn+2]=pr<<6|He[x.charCodeAt(Nt+3)];return An},b=()=>n(""),T=()=>{},P={},ne=x=>x(),Y=()=>performance.now(),Ht=(x,me)=>{if(P[x]&&(clearTimeout(P[x].id),delete P[x]),!me)return 0;var pr=setTimeout(()=>{delete P[x],ne(()=>Yi(x,Y()))},me);return P[x]={id:pr,timeout_ms:me},0},X=Math.atan,oe=Math.cos,fr=Math.exp,Dt=Math.log,No=Math.pow,Oo=Math.sin,Bo=x=>{var me=a.length;return x>>>=0,!1},Sn=x=>{throw`exit(${x})`},He=new Uint8Array(123),Ye=25;Ye>=0;--Ye)He[48+Ye]=52+Ye,He[65+Ye]=Ye,He[97+Ye]=26+Ye;He[43]=62,He[47]=63;var Aa={e:b,d:T,f:Ht,b:X,a:oe,i:fr,h:Dt,g:No,c:Oo,k:Bo,j:Sn};function wa(x){Ui=x.n,Gi=x.o,Wi=x.p,Xi=x.q,Ki=x.r,qi=x.s,$i=x.t,Yi=x.v}var Ui,Gi,Wi,Xi,Ki,qi,$i,Yi;function Ma(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
|
+
¨¨%ý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
|
+
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
|
+
ó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ô^ö·%!É
|
|
8
|
+
w¬= Îôª«
Ùת
JIS;õa rx×£.6¤°>5²Åà,õ°°h6ûUp©²v#}%é= R¢hõ@ëQiJÙ\Ûp»©[vsiÙLE UG*sGÄ%V¸§;º_]cØp#¡:oZ{ãS5I¥]ÓaÎg+n×ýÿTxy]²ö°k¦kêju¼xÐTá©#h>Ù]u\EA+§
í¤u¦üØlQPdëNòzyÞ¼XÐ]ÝøÝg¸BI¿BÕð_Ël¶Cuyºr|<¾¨Támo5êÿú>Æ[ã±G¨²)ü&áòüåBFou!Íí.jÖìß½8¥YëìáÈÁi)qÀ:ÎüÐÖ¤Gͳô>°ú¯øâ?R£k~&ÑãÞ~A¢;Ð'àÆUÀ»L×)-!ÿkýíÙ
|
|
9
|
+
§Û\{¤ólW^næzk?G~?_5uÝñ7-ß«6YPðGßÚù\Êê -ûp¥èÓtM×hKȯÒBAê"ïx×HÍ0Ôcè+èçÛÅf (§¢õ®%K£7éÞQ'MxãxÐúÑ
2!8_6̶Ì6ÌrûùS¥ZóAIüå6¿jÿ_°(ÿä9©CCÄ!bq5Öô×x{ÍbÆÚmÒ@«µ××~ÒD;*ü ùeÀÞ·xv¾;¤7¾[W\ýüb@'qãµÙâÉE¾}}tq-g=}Üs¢5Ó=}$ħ£Ó~SFÎgÑnN>1§/¥¸G5àM8#Ò;2¢/K%xVÓ(XH>µ¬ü;_j~Æw<¾ô*»ô= fAËbM¼iÀIIp'c*:oY¡VÖ3ûIdû®4ÚûýÆð}ûN¥ûI
|
|
10
|
+
¥ÎÛK*]Ø=M>t×ý³MwEè®"Û4]]ÓgØ×EÈ.pN°¡»¤ç/I.ÿ+6r@«Âz@§Bz@¯ÂIê-tíÜ«°·GföjÏÕì:gÕUÖ=}÷¦|§EõÌ$a*¸s¬´«£¯JÞàãËt$ GSÚ³Ë1¯©&|±c!\åvçϷѸãßñ]á¸?ùää%6´= #e¬Â;IÚ¡õckCÀò*\ï0À¿<>ªÈåJA'ï´¾ME.@OüÐ0ex÷#2ÒùúµÇ½>o{«ó= Ôï;ǽ¶óÐ/ÔÍܤ±¢Ê
w>ÃâС¯®Üa£¹6Vý váÂhôàÍ8D!Æ!ÆI;¢áÜ!oÑÙ
OÏKôò=}w<0rT= 5J_±3×Ì;ôYÐ<aÞê¹¾7ßz\˼ÛÛ@>Â{å%K¯º'ÊmÚòÁjRÒ×úw@'( =}QU«ÐÁÑ,/?úYEyºQì¬ {ÇLÕæõNáð#f>_ò#Îv]/øÏ¾TUà/øÀAÔ'w]Ã]Ww]Ã]X÷Þnð·TbAåÉ r¨4?t²>1Ç[áüx $-ÒÂMÄ
§·µwsú>üÂ&³÷.dgA¦h²*G× öcG×µF5¸Êqª$ñ?¦vÿ<ã;ÿsÒiÇXòku®vUòõcuæÊ¦á«þ¸Í
|
|
11
|
+
ÑÊuãE"þ!6Ø Êæ}}onË:W½¶«ÊFuÃÝUS-1ÀÕHòzµö?ov»®¦
|
|
12
|
+
CyÈçaÆ
|
|
13
|
+
pÛ¢&{µ¨«±1EXÆÂu.7÷²ÛJÊÂy[å²µ»bL?·×øèìCp:æÕé§·rUèésÜ[o²ÛòDòDÞ]ªä#çN;Ïð)â´*z80Úèóª1çE¯´Rì,D4H(øË)gp=Mý«û»=Mþt8º-HxH}Æ3Rt?ïɤC
|
|
14
|
+
§ßìéõmõ,;æðk=M6ЦuSÝ^è´®Ù6=}æóO«>
|
|
15
|
+
yÒîÐ7a'ûLUöø>ò -6Y(¬ÀMZ¾ZHpu°c«à±[t*Ç*jwÇÍ$Áíqx©SwÑËR¥é®[XJÓ8=}üµnt9ÚÏ3z½¼¢[Q2Þ¸/=MP§Y&y=}ÚÛwëý¡àߥۧÃþòýÁÝÈìûê(±¹4'ïÌ:Ûùk=}eªãä ÒCKA¤Æy×nvȧmÿ;=M]¿ÕÕjÔª sF>úÔ©áÄ:cÀÆ<$|ê'!×Sb¢V¿oÇåGð¢UÊ u¤ZJýæÔÿÿ 2çì¯h£f¾QZãÁ ® ìÇ'ÎÅ[¸¨{?¢ÉhS5oU½c¢ÈÂÜ»JZmUí\áùµV6Bète
~Ãw÷0Õà®ísÆk,{ý¦ûiK+xvÅå
ºñ a[Sé»Û Nõòý¬ßà¨= 7på^ÿÃW,¿*M½áR±Ì³FcË<üiÏ2|ö^vKÏHò¹uYbk¿mZ¡O^ÿç©~ïj°È7 l©¨ç_ó¼'½ßªåÏn\ O,wòi,Ū-¿?ð}òÁá=MÍ®ÿ²EÍñÂ}¨³ô-ýƳúù56MÃ6ÓJz=}p³ûê9õàå«TM×Ve>G~Ù»Vü²öHByf<õ©+QWF+.ßAGÔ¦ÏèÚ½3âÏYÀ¿T¢¸6ÌéÉÐ*¸ÖªÏrÍëá=}6/U´Ã×ZþðóW.½ÞQ¼¾ÆqŽoâäB-ÓUJ¬má8øªK.y±>.Q¡a0Þ#!,¥BÞ¼S?Ìr^¿_Ö.¹ó{=}/äÈAt}Æè̼4¡Ôîgl]ÌUEý{}|DÏä:°-Ñÿ°=}àØéÕ}Êñøðº~¹¯4Yqm¹]!ºÿ=Mõ« :Nl"SÇps¸Gåȧá+'M¿ÓîÁ.î¤=}mÅ8)¶rrHá"ÈøÂìËøÍí4ô72bbߺq¿2ô=}A5.YV¬ÑÚã«Þ[F
|
|
16
|
+
)ºhXûÇÓ>È?p¤ðoUÊÓ(³FpÊi¡Ð}SÚ~E !|ðí,Ç9½Ãë¸Üì!¤ÓÃX%DBãu&dÔËôg¥á¾l¿AÉ)Á±ÑßÈßý¹ód;|¤Z»#ñscµ|¡
ÝOOe^ãÂxÝÍ]¯òbÏ£÷ð4½ïÖ³;û/ºsñÆðFØIn²q¢©*× kdO+÷åÒiÉݱîBr]LÜ|8~7vts÷9l|aë»EânÓ´GGò$ÍR,<e0i¿ª
|
|
17
|
+
±¾
àsÓZJ¨?&%Æ~-ǵªö±;ól"=MLgÿt#
|
|
18
|
+
ü2 <Àn¬ÉäÍôÿ®É1SÄà= ôñZ¥-@z;¯üà¹ìJÍ=}ÊSeBÞ¯´~¢smÿ-¨CozÀ/;Çël&uñZÖPV«¤¼´ÀïYÒ~=}DrâgC §ýçrÆ7âÃ$ÿ¤Ý~ÞÝo@°³Ùs;ozûÀ~R§ú"¶ü/ôcæ<°^Ôã/éow×ër¦_UgûÀøäâkHÈ{&ÏMëqÀYÈLÁÊGbÙé:·q]ä\PÔëÒ¤a£1è]á
^Y[Sw¶å²¹gÒ0ód^ÈT.WÄÜ[ÕÙ*Hi®z¹µu}ýuý}#ú=}ÇÌRSûçMø=}¹¹>±ÿì¨áØ[R?ÿ^¦ñê¾xZRS^PSSSç1ù}ÝZá4fffdf¨ÕËw&eÜ$hä'{»Moöyg8¹ê¶@ìÛª0-ó¯:¹ e{%<ÎÖ}Þ¤vª6¡Àõ÷Gh8= FºKVñ.ºHÅ)<Ñ= xs¥BE;;áF¡·!¡-ÀYÔå^Ö'l̯ßûç¥køÞ?[ë>" -9±/ÊÛGÇ 6OY4VÕ»º[öBÿ:B¡WÍ&½ÇÎç»Î= 0yæ§§5àÁFiAͲ®Ê\¿<î!xÞ³E =M¬U/þssæ¶µ·OÌ0§Gûúñò¯{^/~ä׫ÊB= ;4¤þû^Öï÷L÷ï_ñíx<õ;ó5ËÇ~¾V+ä
l¼Ñ°«Ôí¾)Âfżo¼ÖùWa1køìFvûëûRQø]q| ï0g
ºúîy["FÐþ7^ÒRµÚèæøÔyÚ
|
|
19
|
+
«ãi Þ@
U¾¸»* è#ò-ì¶HÛé¢ùL;}·O7
7ÅsLæþý8¿Óùñ£}.= <¾=M£ðQKTà^O|¸üggH«0³i£im¼_2ÿöúÕ¨LaO+&]L¤Þ+,k Þ¶Ñ~T¤ÂHì ÊèèÕÀíÒ³MÜô~J<¤0Yð¢´."»âèÄxqe%oÝyåæâ¹25UÐ/Þe.×´Øì_æ¯_zRÏíÑ@ÿôLc¥Íðy@YΦ}µZ:ÑÂgZÒÒ(©¢9ß Y«¦:vÙëÎZJâÀVsOtUÖ Ò¬¹1ûÚG´OÃóG©)niÇí
|
|
20
|
+
Ô}½3:.k]ý²ÂB=M~ ùÚYp95½qýãë ÐÞ/¡(ä'§úºE/ê«Ì9ý%Ú!<ÏJP&|[,gzű¡\o0Ôhûóþ¶[KêÍð= TjÃVñ¸D¼Ð_Ò
|
|
21
|
+
0Ø_1dPðt ýtZ¾rù àJf^;Ô2éÐ=}è¤B~Dñ7ûÓÁ9³ýbA6ZØ´èÃg½ñóø.:~ï ]bªZì¿Ö²2QÄßo¥-¼Öá5uu/u³òD;gjÀêÃÇ|eÁ9¬u$*ÐÁ'ÓDelÀëäì¥Ò¤Zí6OÂ@âF0-J÷¤=}_Õ߬ÒlÚM½Çôó~ð76DEÖ'ds´ÙïÝßøaÊbÑ «^Í}&àØå?¾ÍF\2HD5òèÁÆdËdÈ·6ÙPÑ|¬Ôq*Ê>0¸Cì(ÛXYV
²ýIpÑíM kÖů}Íóôc7ÅbrñÐeQXæ©Æ¯ü_Û»ÂÝMþ©.ckg fq ôo@qRL°ÅYÎÈ»d'<±+±î,Z-GG»ø$âGvÇû µA~YF5"§)ðfßÐé¸oJRRÅ¿ôXÝaú.QMw1 1þøiSo¾®È²¸hÌ/Î })fBr.G1£º×cÎ𥰹&WÈüAno#g ÃàLi²¥8ó=}dä¥$Å(³0h¢0OjfÀr¡6*#àæ"ãûQ?ñ±«²Xóä*hïx=}ÎÞ¬výÞV÷{u²cöê¡h¯QÏYaêL$¦ûÈçIGßþEýWöºýëÛßý×Ïði G´ì=M¦ßÁý'þºeâNÖ7Ï/Ñu·6rÛF¾¾aUÌÓiÜúÒ]¶éUY*= g[ 2-_ c:ðY)
|
|
22
|
+
¼9îK¨£8oSå¶K4U>+¯Ãî[H\wâRVê/÷~Ðnm¨s8CÏö©Ø%ÀaªS]ý¼§ r_¸k
|
|
23
|
+
ªµfÄéÒQæ2¹Ão¹&3Ç¢u c5ë6}Í:B£´1uièÑfa&]ävCOx·"³LTè.I.ÊÍzB!:FÏëxS´Q{ÊõZ7Uh8yÝfDÎ dÔX3Q± ½=MnØnÅc"@;f?ª¬nû0Lp´h,¸#Mà->+C= Ê¡±^Ù= ®Â¬QôÅùî
|
|
24
|
+
öqòbß=}±ÕAË/8RzT³
ÃÌ/_îMvÛ«;7S ìN4
|
|
25
|
+
ìo7è_¤ÀÜñÜ©è^U±A{ÉöìXtnÝÇvz
|
|
26
|
+
½½Ùo¨çaúâ?EHÄ»ë"±cÀÁEB]acgdck
|
|
27
|
+
ËÁEvÇÚM:¸2¼"ûc³Ï1mA]ø[à= Ý|«oÒ&¡® ¡K$ÚiPÚÛaº!ÊI#?3ÄLoxJò¹<$$»¢¸h.ÕY¡g Û30× ¶~ÃtéR0 ni6ôeìaz(¸9°Ù=}ocî#üR{¶ù*×<Ç\Èsa>#¿]¤(R F×X#¢¯mVRòºÃ 0ã51ïíDÅVst°YÎ=}ø´·ÇF ØÕÓ¡ð(B
|
|
28
|
+
YS= '0#×KB<rÔôþMz8ï³tíYS\¿©æ s¢3~ÏcÉÜ[öÝ-y£îu(´{©ueØÝª g×»c*5죡Ð>¢9®ïîêzr{½¢j|W¯Cú²"Ƽ¦Xçt,òYCIVµX#¥_æ)3è "9ûã)e
0߸Ûͤ³.¥>å*ÁpepQkîtÎÚ Å¶ïoÔ¸>³55Î= Á¿rà3S\ÌÒªs0 iæméQúR|ë²FAè Áç-ÚýFå3$qÏ3+wØ<üªUþvü£b)Ný¯j;0õ}áª[6k WÇíH® ¨{2Jþ!y+(-òÉýÎl SÆ_¼òu8¼z¸Rîùq_fGHî?{vTgeÒU<S^£(îl=MéáDÛ¶ùM·Ä7^õÿ
|
|
29
|
+
Ø£ $\ öv=M¦px6+ã*àÀìî{ølÊEy9² hϳ!ÕÑjú¸ò5pG£¸fëp N_::û\RQ[⣮M¿L#8¢ÑPk5]ý«¢zg»güåÐÒöí<ôâ~ÂÔîtýXÙñµE®:¼VBͼçtnHç|Ï0[óoûM>h}ìAö
":Vk=M©l\äÓröQR}8qeV<J"ÈFäíûI_Óã«DûëôzïåJNHeÛpµ
×8æÆPI¦û-t£sp£i¼äsç)ç%0eq#ôFør\ÃÁs×CP÷ú½ÿqH²}EéÏtjTi.Òþ¡=M%ä¸ÕÙe½_ëÝ;+ÏÁ9ó+ä·9:×´irxb@åÄä*Ý
|
|
30
|
+
²íCKÝ»@;ö4Päü
|
|
31
|
+
cãJ1«õãLPµêYàn12ȯÙI
r+= ¶/gýZ³#³}~å0´ú¾dÈwû{èÒYuvëNôºô[í&öõ¼[9Ø6
|
|
32
|
+
>ßNçRÆÛeíu?ìýhWõM^8<ã*lkê@uú.FzFë=M-ûhêlT±ÏÌÚ®Eã¾d¹P±¨à<ÛÉÊ6åÉìÎ7Qv¬ÎÊýì$ºÑzØ'¨mÐØÒº´ZM°o9=}óÃQ·»¾LW·:+¯©p §àÕ<Ïí2gþá1é9|RówàutHý8ºï@¬^¢W¶©ê ]ð½6ÏOô¼<±GãQ~V§xâü1éUM&CÞÍ|A<^ES¸34
|
|
33
|
+
Z!¡ÚÜa7Î0¤q1çÖ'©~É ÙWüã)¼ðÁê1
¡é)&n¬'eÚ!6¹¾P;<dm-T©ÂñPÿoà¿§Úì4¢Î³¬¬iTÑ9ËÀêIqþdiÉNì=MWH&¨rÅ«q,ì9C6/¤t«ô= ªK5Â#f¿%Î)¦k Aù4jFv7üÃ*-Ð\éÌ:IJ21 .¨½ü,= åÔ3VI¯¾¸þ¼¥ÂÆÏç^g°(QÿiÕ¬ª|ï
|
|
34
|
+
Êáu¹ÎÖ¥UUÁYE¸ã²öÌÐm®~wø%þzêÑ5\5oFn$»9³mi6zj1séGd¯ÉØå2(0¬>nE¥âVÇú°ÜéÕî£]þ´Ýs×7ãû<Þë§¶§V"íÙC'aÓXK£¯üYüúl^~¦¡Rû!=MÜPa´
_Cë.0£\}À±QP9woÙæQù§jKõ û@É+gI4
wÖü.Û_é4GÆ·#ÛxEh6;L]¥2¥á5üP4õuÅ >çò-ç»ëé;]÷ÑÑY¶ v
Pö%!̧8÷PÛ'rö§ÙßÏËí»kæ@æ{¨ËC4¬P¶ óÚÈsåÍý£Îx)ÜØNóÐ3õÜMüB¡Åø×½»#»Ã-á;Ì'Æz{ãMòÆ0в>v©Ø¯³û#iàBé]á¹F{srPZá:óöCܱÀÃÊõp^kñþv1_Lç9νdض+u¥æÌ·ól~«ÙîûµÕÔebyÞ«880L²5ìæôvZÉQ¦HV/ïF{8M*Áý¶ºÂØO~ü3|Øx¨>¹
çûÖú;ê$hÌz~ç1Hún41eÆOXØ&É¡:h'¢yÓSvðxåÊ:µÆ-Ð)ì_ä;k@%"w¨s
|
|
35
|
+
ËØJÂV+á~àé4È'QØÇÝøÄ|^ Ç)"¥0ǤÐñ kÂe\0¤|>ÿI÷äÒÝýÔ]¶;L qìÅR¥-bE]ÂrÊý#8n°»ØÑGø,RmâAê_Ãpá%/BU#tÎq>ò*öú(Â$âeò|=M)!Ð'¼¹¼R
ÐzsÑx
|
|
36
|
+
ß+.¼¢7â%²0ÿPàiÝPñ¸MÏå:Lå
-ügß=MÅ#MÚ+üfmi®= µ¬³ñ}$¨9<og"Ø[x«Æ¯+_Ð N׿jV¦¥#Dw$¢ø"ÂK**¨N]EB®°ËßSâ^í%Í(æé¸ÞögÝ¢´Q{Ý»b§Õ×±±hÙ^6«GàýQÃe]tÉ¡Q¯¡ñ⸸a·12À I¼Æ÷nZQ:bùh<c£5yÞ§è~xWÀÛý$õAXÁÓ4KóÝ×¼µ@ߺøz¶Ñ1s7=MÇ5ö¹k±R%×¶Hâð/
|
|
37
|
+
+Å»ºDó(=Mj$×JD ò¡Æÿ¼"@ºqJº&ÏþIÑKÍPçüzDjIö
|
|
38
|
+
¼ììoìì¯íì÷;#¶º8l¾k#:âõØ÷¢ ü_WNì¹tjÏuÐÆ>I¿y Hø@u¬BÄÃ5Ûy:LU&ùð£Rn̵5ZGù<§h¿ËhÙâ²zí¾¸?JàçªIx6ìÚËìV£áø¡h²'ºéÞXQÍÐSÝdÖ8ÙßM9S}À4To0ömeΦ\ܳtQÖç'Ñ"Á©là¿ö&.ÓÚçï±í¥£ds¿ý= ìZÔOäþr;Z©êÜÔÐó>B:½î-t®«d¶LÓ¨$QèÔDÏ:!ì Ûq*sª4xã´®X&(\À¾ÊØXA¸¨Åe2PB
*S{éÔce YÆBº©¦lÍX;O²:Àd¿fQCnMË-ÂÂðǣﶡSÚÁdC,KÂÍõÞ=}=}ß 2y3R¤Ö3=}cÐ'Z®¦}±)\(YàP8?ÈÚÂԺǶïiXEßÊè= êèÅDÐ&sÙ¦R÷_{Ù±4Ë2 ÆzãT!gU¯CÀ@¼û7"ÌfÆúX«à-öRÄêP$#¹oü³ãq¿«í³= sü§{ÿ«·=}ßÍ q?¡ÏÙ¨½Ãç×å?gÆôÝi,×¾Ö³G¾»= ÙM9jA¿¬R¶Æ'sÖæe4æ+6ªÀUùxGÂ+YbçÅÉM"äéÁZ]&ý¡9å(¡nn¶1Í^¡<ÞÍeæ:WæéÓ#4ÒªzBËÿ:°5G¬ÛÂÒ(âÄGÿö*ë¶.ï\¶l^Iì°ÔüZÖKXSý¨' M¾b]±>0lùX(^^¼òçHÂSîÃçàó+!mû¤Âp= w¢·nHµÔHÅ
pÈXw]©5"1ü>
|
|
39
|
+
±XZ^Î9â¦gþ=}oäíçY÷Wé[~Ñ;=M㪶&$óÅßah
|
|
40
|
+
ÂãtÛókÿ^Û7z¶#X@ùrÏ8FG"5ÄÐÄ~áUÒ8ÌËÌe3ÎñA´ºÌ=M¸óÆ~2Î,ô®dmÖ=}»u¸Æw:á!@
-¾ *ïr±F¿/Í;öMÅÂ1¨:4>&YÏ= ¬]ÜèÁ/4&øö0aMÞjR»5bãXq=}A%è9= i©¸¡l¥nô@ÃOPz»wÓÝlX
|
|
41
|
+
:ÎÛÝ(.Tɬ|©Î¾²ð¬ðÉçiå_*&F×[ oô8B¦Brþ=M¼-ò»ËÍF?<@üønÍ|ãxÔr6hÚpÌöç#5íl÷.à@]ð{¹ø÷ì<Î<ÂuwNLO"_u7°Ïa ÿ\ÌrîÔdðó¶§Ô67¤p£"ªCËu@ïfcOò¯x¸3 ²#lf1}U¬q±ýx¾jõ×»ó±ñ ÀR³.ÙýåÐéIcÎÿ;F? ÛÝkØýóÎóø6¸'áû=}t8Ô]&ã°¿|%BÆ<þ·ÎÜ«ëÍ>YUÐgæE¡ã(Á
|
|
42
|
+
8ÔXÀvÏʨ¿6bnµ¤GÔÁ¹§\)é«®~î¿w"Þñ£à/o¯ëOïr(ÿ
|
|
43
|
+
õOá4¥àyáz¼}·æÌ²ìB#Ùø }
JÏìN\]=}Înü4VáaÉlIA Í<â:^&q/nõ×n5;=}Ù,ìâ|0Bõ=}l;Á¶®äÓ=}a&¼½ó
ß@ÂU¨¯ÜüHÝØ¯Cþ6ýjÒX_16¿X]~Y~;×*½ÿÊí²2
|
|
44
|
+
=MQ·ämòjyÂbá]ÜÍl#à(Kð5ÅôIJßqE|sª±×ÿe¼SÐo^[ØÞôXYá4ô@1³¢[#ïQ½,CèoJ 9Û«ÐKvnC&Â0 »¼°SäcÑ07 »4NòÚhr/#ÉReÊø?°Oíÿójà!c³hziÕ§nËGY³ÿòò,8ä¹àø¸¡µ¨X[|.ôóv3<÷£Û1²a<>G¦»
=Mlf*-¨>9C1TQÂñ¬ì(*ø×d²¬p ?n=}ê{ÕÊd\ø\*·×RéÕR_Y>7Û!èc.¢V;$|òè¯+/UcMX?é9ÀÌéZm&
,ôvõÓé¶ZÍ<VÓü° Ti{êC§)ÐCU·RsV$gÖ¦îÁ ÖPö4fÃÑ>פkc1W\åÅ$Çp,%j1âÂ>¦¹Ð¨XþùïäRÜJ¿o{FúйÝÚ³ó£ëî¸QE@mj6¹e¢Ñír»{Sg½ÍRâl¦í"C÷Ö]§@¸±ë:Â(íQó9È«Ëîqw±º{i"ÁjêévVÏ¿KÐ÷±ñ´ìp¦o.è<wÕʾØ/iºdr2S£ú~&Oãè.¹
|
|
45
|
+
x*qT·gÀúÛx¢/Ã}ÜYñ-XlEìøöt¢Ù6ÀùG
|
|
46
|
+
;%eU àQ-ðÁÆô+wcq÷æÍ¸S©l¹¾!Û¬O ISüu9=MÊ- !²;ÅUº¿v¶å±ØÆá¾ @ë]Lke1³,#o¸òÄéξ$ê¯3eI Nö+ãsQøÙöá9¬Çì<= !#\
]ôÅvÉplñEÚt^ÍUMAϼÆüÓú}Sú",Ú}Î>P=M¡nOcùÀÑþQ{¹ËÂM{ppÝ5o;Úþ¨Wå7°S'1Ê= Eºg"¦^H m?P¾ æcà à°!£!f fT(Ø#ö%P!»3àc= ic ðü3p £"Øä¨3ðE= "( Íè±Sàçg>W 9μ5'¹ñ3!©Ý¬kD«êíSãEèí«òªý+Lo~EhÿÙ%á¸ÞÓ®©ÆPq²@¨Ø@ù£u/§>®\è¹'ÙÞ'ë>ϰcLX«züèCõNÃöq«OëÞk^ÁÞO}a=}¼eaþ²ï.5pf°²/²Ú±Ë=}lZOÁÐÊSy5xLQSSOwø¹¹Aìì¸;ÔZ$O0\6kÃÎrÉÅÆlØ2²_(z¤&ìL¥âð¼[¬ºIPN¬¸/3ö¸4=}s¦Sgù0ÆíÛàÆ¹(â¬Ôÿ²ÍÒ
ÁOøVSä®PþWì»9wx^Ôx<Ô¥KL¹ihx\ÜpÿÕ;<V³¨Ðòõ«çÛ®6¥ÃXF<ÿCà)Ss¼4n9ÁƤ%çÊe×X&¼1öÜe¯¢«.iXɾHù;%wìØJ|ûCàS-(Wú®{®û®Zñ¢0Zå¤Â,Yðu@lð T*¨%ëXæ¤%tÑM̾¨ÒsH*sHµ= ͨ_T5t|Ìö¯ö"XöNV£mYöÇzÿqovÕÀþ.V *z©æJ:ó4pÝH®qû§ÃE¬\Ú®T±*W¯2¦<Û¸àÄaxâPf<§PªQçhÐù*öÑXªìX»$vÐ
|
|
47
|
+
X©eL ؤóa³ÝÆõLÕæÔº¬ôô»ÿ4)D=}¯)3Èød;=}ýÐNÀ"=}{Ó¬IC¬¼õâh@±óRF¢òZbs9°ö§¦1³az8ì>+âTªH[Ql|¸ç6¶¥å@i§C˾LêËGdÔð3Ö¤]äp2ºþW¾d¿µ(H&b3Õ;ë°9Ûeôó®jdúQÂÑTÆûd7.uo{Ø<Züºæ:'!î»Ø:iÄ4ÓÂÀ,¬ôQÁ]v=}/·tæ5&06
,ø$ʸt¶ØMõô[ªVÓÆ=}Éæ¨@A¬K¢§«Kä>N¬È]w5øÚ®dC{¼æs ÿÛ3_Æ
OSLMÔkí¦
ú¿
{¦YæÕ»QÿEL$1îì4:6Æ=MrZ¾6Ày{øA<(Ål1 dbm7ÎN !¬Ûlî1_= ©néµÂåÅd¹¬Vk.d,4Þ3~LòôÞ1ú¦·½d=}q©7vzaY6én±Æó¯Ã=Mµ\^F>ÞªëàwÞ»ÏÂËþúækéy¡½ãyÝ÷¥³jp'ò
°;c9¡Zs&×]Ñ]ÝUî«>_<(¬Ov Q×*xuòRN*k;*0ä
«¦øÄ
üЩ{ÖÔYå!1è;å&ÜÃFUfmü&r3ÄèÄQñb)2ãT#À·ÿ¼%TqËZs>cU´zuÏ ¸ÚuQ=}óÐ-G»ªM(e²ZVꬽv¸ ͦOT·S°{@R0MðaÀfȵÌ_Òú|â<ñ¡îйAéÜb+!¡O#*¾ï3¨0âO"ÍxÔûÝ
|
|
48
|
+
ÃÝ'´Güír-|zþçWæ¯$×[ÙÉJuøAD!>'o0K¸5×=}þ\e8
|
|
49
|
+
?»þÆüÜ=M3íúPþræ M×Öq&@ýÑWnBÓ>7ÜÉTùÜQ¿^®ñ-,å!'9ìsùÃ4?BTu&éçãÃ,?(&ój /¤£Eà'â£= R(/¤¼=}Íf÷I³HZépôSGÅQ¦+^@]ñïGXg¶ò¤ssÀ /µ¨/6ÊbÏ´%°/³~å¨5|e¦U9¢$BFp´¢cë±²êÒý´f]ð®ÆÆÓÎa.$ªó=}´Y_óìõXó¢Ëï|3;-%ÏS
)÷ iTlWôáµa6m u¢Þ>q9 'I±N}ÞC>hïGÒ*Æ·¸Pب)Åéø¯Ë¡yèZ?1^B\püõôÞç¹Ã Ôð4ÚIsmQÚÆû¡u°|î(®±Ø¬$©+=M°8ggÒòCÆKâåþ6
Ä¬Ú \Yý°-дXÇÌíÁÚË2ñ=MdÑkhhÉÃd6ñ«Qt»|Z³ÜuÖUhϽçØÛ}½SýË}©)ÛÑÛÇwßC ¾ã't¡a.ÍJãpa/ ÁâÿTVÚ´ý·ñ¬?{«<
|
|
50
|
+
M2I©O}³&ÿ¬øu®:º}ëßGnêtF@1«=MÉØ &Õeî%~ïNõI'Oöz:?*<á°TEŲ{Ï¡xÔ©ä¬É®ò%}Iù$§ = s~;ÀíT/¢¤ö
ìpg ££»¬údl°yçðÖïfʶúÜÃï¸F÷ÌìÊÝ}}yÑ^Ö½Ì~HíÒÈÙ¥¶kmzkk£%&¡ËmsÖ>ÀA}Ô?ºRË%]\:&D¾[,¦Ñ$ÃÐÎìn´cÓ5ÆÑO[}=}áÖ(N¡ñígµâ9c&=}Ä®ÒξQ,öÔ?è³K'VL¡](ÂVÚCê0ø##{ºÿ3¡6®L(¡mÕ"ÕlÆzÉØÌÝ;Aª¸_ÛÕñXã0î|ò IUÂâwļÃú®[,ÊZH«§/nPäõ]eÿõuóuqú´Å³n=}¸@Ö,ñ«À7¸£Å½ïoàõ .®<òò£àzÏq=}þõaé¼ù^Ò\¡Êáä®ù!MGÓ& adePõUáßá=M tï¸
|
|
51
|
+
¿.Ç_ò$U+å¯
|
|
52
|
+
w§ÆËp;t'Q$2%$}¬ ^(f%e_0^ Ò¯°j¸kª2{m4c@U4N-LCæª!3gâùã¾Fm¬EÇtîÏ6Þ¤äxN8a©Y(O}=}ÔWñµÖê= W¹5(¹~o»%V´¼ÒJÓ°ú:Îų§0V÷zî!°¦¡øðÃL!¦]èd< ÛN´= C¤(Æý>ñmÇs=}ïû&NK<ë'»é_È!ôâ[õ³"¸ÐNV캪6°Â*v=}7%ÇHßDÌ/2Þ= 5ßK9'ën"?¿lØdmçþ¼S3µ¡BÁÞø|4ìX6!ôE¢z@ù}ï<|à@T¢#\âCËêéÙdUè®8ÂrãÚ·AÙvq¤A4ÌÈAäv¤ Ä,½ÛVq^ºÞéçÐ3'Á69÷[ÎxÈ»áTyþÎÍeúî<=}ÕØq¿ñ²9y×m²càSÀÌëxéc¢b9¤¡1c7ÈHD À!xÚÁáò-[xÚ¡xÚÁ¥Å;úxÚÁ¥Å;zxÚ¦Â:zÚÁ¥ÇëîAÓûäd¢í"äü;ö'¦&Úlvs¥æ~cQ±¡K¤ÐáXÕnIÆÛ!£à¿N;Ý&T,){lH:_}3 Ãø½óÿ{ÎÝxöD= eËjv)j-KtÚF7ÀÍãÃòeS³1Ð{!ëwH«1¬È¸Øýi¸0mOPüéyMmOXÂh
¡º<¡!øÎÀ+ÓÿÀU!4¹nð?4¬²Ôj FØ»ãw;pÃøÐ"ËT'b[[ݹ?°#O·Õ·O%·¹¾É³ä,}èÚöÝvýÝsÁÝÑ*z¼wôõÆãúÛ³~t±üOá±Ë2¸[
|
|
53
|
+
ÁÔ(û6ùé2oeÅê½úLÁVqR ÔI7ÐHh=M*àCY¬Ñp#¸ÞYvGà¹8 <co[³KiRGj&õÕu6:ÿ¹C;´ÕÝèÂËjÒOõ*W±[Åk¤íknXâ±vRa¢¯IC¶Ñh}£]ÆãZµ*StÂmÔkøòÖ¾Ö¯w<
|
|
54
|
+
¥ñͪÊw)*èÑ;fy>6z'ÚsFaãì(¶õêÁöcÔ@ni±c'ëA>QоñBù$JCv
b9|U3q³Ø8:Lw(ô¾îMàaSåÁ®bGÎβÖÍÞ=
|
|
55
|
+
<Ò!¯É."îRUéwºÌÊaq_Ë;e]¼.ã1ØÄ~qØ´¨
|
|
56
|
+
©pz½¬ÓsÐü¹Ø:2R%3§ü+ f=}?@Õ,zèz%øíaj*Mô
ÈÍ$w§îyfhEáeD¬
|
|
57
|
+
ÿtáоÁÚãèV¦eÖ>I[Bë+V(mÀ®TBã:ê{AÓà½WWºÎ.®yj{µ¶y/5kÙ×¹wð¾ÒäÄ-¦ pþ*-+i} Ë}}ÈiÅa<ûceÒ¢]ùá¾vÿ¡+øtÂçm=}qI7hyPÄH±ÒlظjuOÔ×ûÊ86
|
|
58
|
+
%W=MñàÎ{_bØÓçõÓÿ%$|Dì£ZL3F
8VãWu";¼×H°×kyPøÑâëp®=M1¿ëAp:U>2{íØíwK1-<êJÜÌùksöK&êB.3_g§%ÄÅBÆ_®Õ¡o8C@Ao= #±®Pïf|§áÓñØ)¿G4¦ÎïVYÿjMa9)õç[\Ã]= QßÃ\pn,ra7©ô35 õH¬mµ[ÁÏ¿¨îÂëqç¸ñïy>
°ã¨áP4ú¬Pi;Ò_çÂø^büZ°d!j©^/i¼CpÏb0üö¬FE´ôU$iÀâ´v+)ñ×"¢:Ë=M¦.Ur{ å=MÕ
|
|
59
|
+
IÝFÆFÄÄãç©Tùýl=}<Azào.ûy2£xá3yhUuj½ù¹c-¦&í-tüßùo¹ÊËElßµÕx¬îfFeþ|)¬æ«Ô¬æ=}f[8mí ÝÁ¡Þ¼]"dÃ>PÅß?F^ßÁVä¬Õ¾F ¶»,L±>4"=}8º¦Á
ØØJ:عJ%ãJÙ/WuØ©*ã¥<^|M½©S3
<sd#ÖXæ<@ÍÃNÚÿõú^úÑ]þ¦ÀÿÓ³ÜÃBåç¥ð òS,çT à@ àÖd"r°¦öFUlëü9Æ
[,óÒ=}¦ùîùƪÌ(@zØ[«+ì=}æý
ûÔQ9iÅí)X&7Ø%µ²´Ã_ @´ê>ìÎÝc {À·ÖdzC /zïç %ZzßÔ,NØ/Sw,¥¬$µ²*¬^S=}ÆØ ã:iÈ#eEȬÍþ õ{É;^c÷Ô§ìgÁ°^ºø»´ömìéÆxÿ%3&.·ÉƱl·Ó=}-p,Cóó£l[dNÆT¥R³=M¾¹5Ùýb6Ý
r¸MéWB$Á/í1ðm¿ÁOñÔXLþ4¾kK½É¢PgsáäÜðSö¤ö9ÍKzotõ= ó}O,LàænÐ6®=M^5;{°fÚ['[Ö^Äýª¯Í´M"&¸´¥øM½&}þýç;ÇȬvyÀÆV= mFyÖpc½o(±Òk.Óv%ÌôpÚvÜ¢®Â5?I].íý¹2RúHåÑ':ô¦ T°éåXñë(xj¬3B¦_×'~H>¶ãðy©'+XÅÜËXùêñ·w¹Ï- ¨ rF}tÐrJlxËã¶&¹Ð?Ðî±lqýànïm.^Î\RðÐÄÉ?ÒÔ]hûîqç¯WH÷CJvÞFñîBÙ®Ô|Z@ä}#Püt'-F:¿&
¨8§F"¶Q+à-æU|ÎÍ£ùu+y£¶ý.Ø¢Z\:
|
|
60
|
+
-ï*°s .ç$áås¦.
|
|
61
|
+
Á89¦cRY4Uh©Ñj|:èÑô½9®MY<¥<ÝX®W·cm#ôU
»UDaI ²ùlZùqä¨RͳΠ'SA¹g(ò©bÕÿKáFÒm¸\Å?˼â®E7g6ö3«úå6][éæLÁóöó]ct5Ëig×nò¦Ï ¦r·îêÆr= Ö´"6s´×QÙÇøñúõ^mÄDÏ)ûÈåRªÚFÅágéôIQ¨ÃæKÄ_¥Ì®ð¾=}y4äò-I¿= 9Õß»BrºÈùÁ=}ýôQ÷ÃKì|Õ0ó+öËÔq\@ªÕ§brZ"/Ob Xð iðÝQ53ï Ú>Úm¶= Ôpî<S e¨ö}ªJ=MEÖü|£gUáfÙY¤"kï|¯V{ôeøÃ~gøæhKw=}®G>Öâ±þZç7Ûй_õ'@bS(õzáh)f[9廊mH¦a^,Çxs®35ðúÃàí%*J6ÎdÆ2í<e<KìXãX<X©ö#®
|
|
62
|
+
\.«Ï<ÕÅ<SZ.3ç½6.ÃV®YYrtÊtúOêóð?H}ÿ[³´u>µ8[¶iä7Åï^¸iO¯°nزHõÒè·KÕ8øºB2RF;*gÚ(sW+ÿÒ(×½1ú9ý4W)¯_+g(¯ZÒe]yóÔAL÷XT«eEí±>ËxqÖ5¾Ü±¼Õt
£j¸öììYÒM©õþov
Ð7¹ù^«Pâ·Ò鸬Vó±~ jî]pz0%d¯À!Hù2 ½n2åŲhþ"Ò¬SÄ÷ð¿4sÑyo&Zñå"/ú²oϤòÍ;Hû+-ÊùnÎq1D»2c½þÆÜ H[lc»¯q¿Û²_±ù%¼²=
|
|
63
|
+
ýNóÈÒÄL¹"³óÈùà#Ú3¤íÁÄ-ï »5I{ºÙ CEj×B+Èo)U<ÉÀÇrb-9üÀKzhÿ~-§¼úg(½@¢n>ýàm3îýÑâÞGæzæhÞðV§ïT FÂaÐ<^$¯U¦AÐX<)íÚØTTµñR>NsFÛé8*F>1¦ý?]3_ÁùÝv?õÅhØL£9aö"H/復!Ì>ï§Ú¥(Ò(kÀI|L¶Á÷Óð
KÑìJLÒ&¦®ÑIí(åz¢aÑÆù,#L0Þì2ÞÁvÐZ5/öãË-DÖð/o'8¤
G=M¬gMî8}
|
|
64
|
+
¢ï|é-Bü¡×s]1û©ìû~еC¶/·!캧w_àV DG%Àª"Aî,düª@¸_sQ,æÝ¬¼¼E£9dýcðE@$WcÐfHêCcHB¦ÆP8¦áÉÏ<}mP]H§{Þ
|
|
65
|
+
ýc!éb%æ§J= *äÜs= o})ãIj48IQXd©îg´Ø³Â¤ {EJHÑs«ãT§Ý´CE§â®¶_çí<ÛXfå,ªÈÚîNg3.<fXpá±sÌj{îÑߺuMçî.ïf®ÚF.Ý6®ùÍ<=MúX®ÊëÌjEgÅpÅfÅeÿ¯ÀIóýÆA³¹NH¯
|
|
66
|
+
'µ wÅj;íDCºCDV3EZE=}ËiÌ O½Ë0iÕ;jÛ<±¶^ùL=MKùK9oÕ .ÃïøOòÀOUò¬ã¨~â[ñpA^ܾ¾PÞ°Áßf¸¹C?6lûÓïAx¬PÁaâ)áG¢ð_ªp÷Em3pÈFûnXºcÖÖjÎýHLú¾}^ó¹ÅÎ÷Ën³&ÒB:îÅÉ3ùÂQóyv¢¸ùÎ!ËÓ°¥~æ~vÎ
_õMxÊ䮨
}º¸õ69ûÂÝ¡Uö»ªÖÓ^%1LÖZ¦-
|
|
67
|
+
Ú·%«.Ò+®gùÉG¸¶¡Åüoëø5Öá-vºê~Tý
ÝO^'½R¹ÑI3îÂW
|
|
68
|
+
ç¯lWöppäI:CQýU}lSótC÷!=}È^s½2WÁÍð@ÿ.ýéE×Gù<cKñ¤µ#ÉdT¤#¦óG=}ûPªþ:k_G°ÂRí3±¿ölºÌS»l%)µxPÞ.¨SÀÀ+p¯ÅtØY]þÞªÎÏųm¨û¹3Î{qÞÆMmÀEyîÄIG¯ã~ùõ¯Ò¡´pCÃ^*å
|
|
69
|
+
fÚãW³åâÍôÑçÚ'¹½-Çú hrN¨ÆÒ[åNz±Ñ§.ÃÏ'êcU (-÷Xf»ê¯3ï]a:·oòÇ ÒLÅX¼ÇÉKNrwÂñ©ÈEúÿ*½µÊÞG§»ô6}ݽjÁwóò«é^ehZQ¯IZ\³Ò×
s|ªü¬z+:àÅR¿fWôâÿ± æ/TGù¥f#C°gAÉNÆ/jÉpY?ÏDdzõ´7ipbrMËGfZ½öl÷Õò'x¡:¾5Ö£üH Å=}Æl=}Ûë[aÓÂSuáªÎèJ¦^:xÆ©#Ezrô=}Û*À{oü+f?»^ÒOÒÕá¾£nf$Æ.à#<_(n-æãcpÑH"×-ãÐ>¡÷CÁTö¡ãB}2¯âËÃR,ô[¯å§ºÑèV.õÙQ
|
|
70
|
+
ö$¾º¨7±³PGRòLÇ &s¼(KÔÆATÌê»®÷Þ¹(-¸¥UXV*UäzDæÞð[Da¯4+%/{íU£@ú+Zìaà¬Ù¸ý>îca#Õ»¯37%Hj~¨Ãªe½Ó8½[LaEÞIZíUdËAþDOcÜÿ,¹Ø"ÞÏà#KñØ*¹ËPòÓy£ý÷
|
|
71
|
+
zàù(îݬQHå8÷h3Øæ¹ v¸ÕIQTù<¯ÒìQýé"CõLÑÀEÖmÕb#KVÕ¦ÙUaã&§Ð¬M¶}ÖeÆä.¯SЩ]6]Õgö'\ï ɱC<<qÓê)}½±Sÿ¦Ûø%§3}Ðf÷5ÛâÆ«;²
Xv¦¾æ³®Ó3]°Ý÷#{z\âî3÷>bTñ+ÃÜps ¥YëÝQAî;÷[»½/NǬÖO,\ñMã7äõ/ÉHóç+ݯzõ C"ð²7 #£#q;¨a"ñÅ\0 ³£Ðø[(ÑiaèÊ*bÄ:,ÃSáH2,¡R¼Mã=}RØKcï:9Tæ¥Àþ\$Bc°[$ªê0L92ªÞkc]H4÷o¦H¢
|
|
72
|
+
c^B,^«ã0=}¦´po-£·PôÖ·äY7éBç¾=}´¾³ã±<Â"YæÔsàÈ"¹%5têV%¤x%ütÝ¿J°|À= d³
|
|
73
|
+
ýc©Ã´¸DvbÈädE6H±Óq©¬ýj¬_ÅdçËjÌëpb¥ruß2ÓKµøüĤ®Ä^<§¾èñm¯ä<®üÅ<ÛX{t[d\-ØîY,ÖèÃYô?GYäYj3Xö~°E¸ÿix¨{6gàs®OYîôÜðÈê¹
|
|
74
|
+
Wu%ÊB®â2u¾R®ê*®ÔJ.÷¿<ßX<üÌÈÊðÈùàñÆÚ±h3çÒ®*5«JߪwKg¾êÄV®0µûJJ38ÉètËDÉüwésÊrÆkÅnÅiÅuÅ=MýMΧö =M:Óß
ÆïO
-gåÉÁ
!õìå=MB+ßE
|
|
75
|
+
»¾ì÷7fÊi&ø·D=M4iD9j~ý±äþL©QþK1]X(¢' Q¢H*ÕûVËûÖÖûÖûÖ[o2ÙÄrNgWÇ[¹)ý¿ï|íNoúáöN^ê4ìïQ[÷öÞ7Cê6ÆèRIÌ~h¯E=MSWWXÐO×]ùª°@s,{KÝàöuÑÛÍÌ 3»= ƱþYÔBÚÐ%MÜÔ®d´×°Nz@½~ìqoöIZ±Z}ð¡äôX YÍ®"RßrìÇßäÍ2ÄÉÜÔÇT±ÇLE
ÁnÕ§!*»ð´R+Zû¶Æ[rKWúY
|
|
76
|
+
e&nÔ(<ªÄehÛO©6Ödz.ïIÂÛ§êés-ZVrï;ßÁ´ajÖ9'3±êÆ óR3e9;R?¹«âIîÙÌ ÔÌ©{§y
;+êW= ôýý´û§ñ'Ñq<Ýçaâ&¸[T*~½ceüe\5fNW÷=}߯ìßï°5^î§þ?ñKJwdw?ÌQáËÏ"YA"õyØ\L!¥IüÌ·¡nµ<~tJàÖz)ÿ;uúŦUU;W¢¯QÁAöW¦Á®I"íqq)ÙVHX§ß=}ïö)%
NÐx=M®¾3Þ°X0 ax²>¢W»ãQaX2ýÙñXD.©Ú)Ð?jbÛt¼kkçð©LÛø¶¹4ª2ôO£êjìQϦZhW= |SbzÑ{'|FÍyOæ(¢' Ð" ¢ùÖûÝ|ÓûÖûÖ[ûÖ=M(
|
|
77
|
+
(,ì*<ßc(<ÀMj÷\QÞ©C8hRÅ4®©ò<±
aYI:Ìè¤j¬ösA
³J)
?Âaäm~ùÄ.ªòtÍôGÄâ )fnTÆÃ×I&ìØáÝ7¶Ø{sè&W7[Ò>ùsè7n$ÛÐÓKfÝýQl=MXOÜêÜ ×ü·×]:à5+ð9dn¿0úc¹ÒB<#ÅhìfÑ\ÄWù}ý/½!<Y°^Ã&3úQ¤õ§q7R¢ËÅCYTÜæÂ·W®çFÐî2*GtÄcÆÔ&Ïîâä<ÜQþN¨Û5Oûå
¬9Ó¢ÞzË8¾Øºu§÷ðÚuVT3óæâ+ÓµÖqßµMiû8[×ï=M½DïøåýÛ1ü0ÏÛ73ñ´·=MãI_uÏ/@.ñÔP'F?|ßÃ8<cõXKtnðÏ$§Jn2¶ªÉ_ns,Ewï2<Ê{ï3Ö"¹sO²Q2!±·1Ù¢Ýýu¾;|²êåØ&çKò¼«g©×.?ò>ÊÓò#Bn^¡gû¸¿ÐsÒ_ó¬Lº¢ÛÃ~\5}Ã:¦á±gÍÔ|_ÐáCvV¿pÔ¬Ûé7n8åc;*zÿQráLµ¿´KÂèÖúEÑvB:'8åñ1Ðh\ï¥b¥$ú2iiBÍG9ÁG¥ÞbJϤTÂdR6éË6åÒF¾cªdNÊrl·îGnÆ á¥´ê7hѸêEʶòÌvf¾fY z5trÅw¥ÄUöæU,TÍ
Ý=}¯LIÑàøÎ±q.m<·k+ýÍXÖQêÛ½Þ=}¼~7ï£Ú:òãõP¡ÏB)¢'àX4$ ¢Ñ{«øÑyûÞÊÛûÖû¾Á¹*3]t±ÍpEôkKõøÍnóT%:ì{á§p³eUQ0ÁöÓh»/íúب¨ñAyÌkt«N.]¾WÑ|ÄofÓ^w¤&ÏUÀsèõ¦¨¬hy
dÒ·Q¢5æÜW r3b}myªÆ³9)íÈÓSÇÖYÑv6¸á\skFyòïàªöÌøÏ
íÆy·ª-ãxõ&Ó!ÖÞÓÅʧ=}Iïð²ùÓÎ]fU.4À±CÇ<èçG¼±°+µMN8ÙR±K¯üð»
|
|
78
|
+
æo]ï½¼?Ì á7><±R¦Gvå~XåÄd¦æ_à§¶µ^Ü0Ê ZbÚ0ݰ*1ת¸tHfиâúgß¹òP¦ßgÕQ ´+!ÄÇ&Â×E°¢@®í-°PC§% eP^UAx½,lH>MÁDú§_V¬ÖOµ¥bXû3C¨ÀêQ2æfsD¢ÆH"ngBJººµñ¬QÁx,ï?å@N¨åLg]¿8gàX~õa=M1810oî®g}¾à£³)/iüd¶ÉD1OküD7°¬fRãÞFSÔF%ÝI¬hÄ2Lµ©ùlkCùD½eÝóyN½Â,zÆ
ð^£ªÂlz÷
ÒæT«¼~yì]µåDVÂÑù¼me.ï6S'µª|ú°k§>ÃÚ = >î¼;´oäÙ2e%Ü!IW*¨-I
|
|
79
|
+
Øb7CÒ¨mNÂ=Mq1cªQÅ8µçå®Ná)&/jx;~êÑżÚyjq= 9£ç´±Á¬6ïÖ,Hgؼ-ö5L·w0ÚÙ"¥vEñEµÔOËûj¦råÙu<Ýze£wUtówUOðNÉÿÂ:<¿õ3rëÕÜ^tëZòë°LÎãi=}C9ZÀ>»½´ÈW0¼ñ= ä&n¿¢mCOÊ;ÞØ±Ñ/:YýäúNm({»èý¤À¤¾DyOᣤê0I³Ý´7Ä(´øk¦»¬ï
Ø(8ëLzJMYë=M4øµJ(¼Â%zjrµ\:ÌdØ~©é+?&ä!ªÍM¨Â;ÕûæÎû®qûÖûÖûV®¹´Ñ;zøÔ;ÉÞ¸¯¢?¥ØågæwSwÙÚüïæûªE.ðÆ ¼JàÔ!öý,ä/Þ°{°ñ¢\Z7A¦7*Åc¨sb$§xRäìô*÷(zî/¸_âäî1Ã(eøØTbÅ+16Å®H:déý]jÂ%q6½¨c´,Bµ-V&-¶SÈÓõ£yºôéÒÜÞé6÷ä¹·ém®qC·¥ÌñâÐ^îÂàf«·MîÑè»êÆl»_zû¨>Vøÿ³¦mç߸êAei§!í<6Ù.æ[DxðôO^h8ãÅ6·}fÕéMNvÙÔY
|
|
80
|
+
ÞkÖÿ\RÇØqðÃM¯¡½]ü¾>¹F¬|Ñ °çÌ{>u^L¯KX»eÐÉÔÀmcá¿Oáå)¢^ë$Ï+ò}4DFX»Äbi²ÅEUiN´=McE h.β4üK ~òÁDëéú8ªrIÒväcÑ×ÖÂ;åÀÐo¥:ÉèRsQ¥åûªSw5]¿HÞrtwóJÑÆfí¯º¡õðäÆÇÓÌÁQ-õ¿ÄIWo³µvm£ºGTùj]öÇÙc³=M( b) PûìÖïÖûGûÖûÖûíU<Þëúy/¡ø'Òe-Ä®?R
æ= ü¡Îe"Kê&Öu+ìË?üB= ¡k#¬(ä¸0fü= ¡¿ö'º+Ìþ;ØDÅ= ß»¡/"¾Yï'ÂìWîoü?ÂùBa4Ñ[Æö©åiä§ÉdâB{±Y§¨¶wüIådÒòqo5q˦8g@V1{¨qÍd÷nw±ÒǸùgU= 49L,ýCåºQQ
²[u½A~ì=}SkLxDÂL5½¶«cKådΣÝiøBâVq§hÓkÕgûKz7±.ª5§¼¨øôçå3³sÂø÷f¼\KÞ_O²0eOªº·dóëÂ5qÊHíßÞÿ0þ4[ÌÿM±Ö®x5ª¯©ñ¶ÞxY?¨}¶Áx©>Yþ^LÊûF©=MÛǨ-ÓûS±ïZú2Û_]7ÉͲÑÖõNû§Oä¶ðÒziËMͧ-ÓiV÷vøfû'¸½Ñ«õø=}Û/=M±]ÑÇÏ=MÍ÷ÝD(> ã¦âP îÖûkþíÖûVúÆÖûÖûÖýÛ¸q×y+¼©*üwÙ}Ûîî ?u[÷&L,§|§èGkØótN @þl~pýä_[á-ê¯L1¿ýtl1û]ÊñÓúÎvþCXSÛ_¹)ßÓSöÐñR;ï£g>Z¶¬ã¶´ªSÍe*Ìs£½]èÄ/{QÛîìËê§y¦Ñb"®yL
I[3pïìmÚøËAi4]Û_¡®½½fsíÁ©eP%u]}(ýjFO9
ùgíS¯rüS4ÓRiÝeK*?²ý·ôù¡öÀQhQr¬þÅi²o³LÝ{Àdª÷ô®©6óÃço¬u¡Y½c.´jËqé2:ò1lBY1HA¶L²³yZ½<µkV1]~nBqUôÙÚ©ÂTúÉfOxM:¦°Ö1°l9nï¸^19úshZ
|
|
81
|
+
ìâ<«ÙÝ «È9,¶Î¢ñÅÕXFß!Ê)»AV[\N¨Ðé>xhgçA(®ÁÌDê_¼¥PBbõÎà-ìëØÂqÑQØx
|
|
82
|
+
*vÿA
|
|
83
|
+
G¨Ì¦Ôßç8/ÛWÂ0þ(xa"ÊÿÅ0KF£X5Y¸K½¿2DRtûÆ&ÍyºXÝ{;qoQ~u?Sã,qþ
¬{í°æ"½vèÖ¡DùÃ}äÊTì=M¦ô_>X»%9î7rzX^H(qïbPV],®fBöG:ÇÖçaæQ!²»³èU5Þè= 6êNbÕR?£6¼r¬H§éÕJõÔe]²NVâvèÖÛNÌ|ÿ+ÁÆ?#$á#5 = áûÖ=M·ûÓ=}^ÒÖûÖû±ÒæÍ7zS¾vÅ!$-áÚáÄ9.ääl[¼þÝgC8åÙñ$Ȭ
påXKnråduFÄ*¢]#Ù×SÙ^Vk0Ù>Û¢òbìÊ72ÎïxfÓDîÍdÛ5v÷ZÅÍGáfÆLøì®¸M0ÅáÞD=MÀN¶úã
|
|
84
|
+
êÝõÿ¯Å£¬9¸ñgØ8K/¿@èIg½áÓ\ß¾«SOò|©;®w:?oþ)ª;Dù1JÄÖLgèóÄBâÅêØ/rEÀdOÁ:LÔð çû8þÞë»bö?0Ø^5?>@A¡/>ñw¸Ùºo¸Ï´¡*ï(·®Êô+
|
|
85
|
+
E~~5E~C& ×8éÝc~ ]£õ_gjå¿xSÛþ¡9Ã0ó|a¸oFdwqçj¦ézw
|
|
86
|
+
¯N¢+\rög
|
|
87
|
+
©!Ó;äPdFºÂWñ<ñz+¶¿Ôämåª ÌÙ£z¤MwK=M¸]â!u®ÌYä¡Sú}9ªÙ;cç«GIr~ÝÆõõ§ðbtfsÒ] J¡|7äñèæ¥×B¬ù2h«D÷Û¸ØV&¥xåÑTM¾E2[²äÏ7é,o¯TN°î&&¥N¹hÔÙQ§aNöhsÒÓ°mï«X?~ìîqÅÔ¼OcÄ}nx%¥KË(7vC.ÌÁ
=}ûÎöìÌ¡eMdë6ô«zqÿðîÆw=}¤ÆRÒ» ,ba Ó{èV¶ëÖ]ûÖ=MºûÖÍÛ§i£¸=}\(£ÙW(.ácøHÛÆ,ãI8/¿.çö(æ¯= ýhÎM9åyÃxÄT:~Q&ãÑù[.ÉÎxØ(¢@Ï$¥/4B=MÉP+eî6ásc4¡=}d¨q?R÷æãÄ)ܪ¿ Ðdf»ä¥¶i(ÛnÖì4ÔÇnr
|
|
88
|
+
t´õÇAÒZ=M£Ð ,R¾ïD
õL¶öîÂðVmRØXN+Òÿ>ñ_!YI+ØÇÓ°Óç6IÜ8©äåõz¢öñŨ«LR|·ô*þl|i
öj\ív1UÛÎå:ÖÛÎãÍ{oh÷%¡fî?ødÙèBRWSÙ%»{Ü;Î=}ûø:ؽ¹ê@|¼êÉ2ä¶iPük2½Wr\ýÕ#G½Ìîý©ÀóNÖ»©]8)EHOû½Qå¶=M\ Åa«.æ0e?/(S¯Rð4·àX?Çú)ô÷½¨s
¾büT³_¼aøyî³cÇTÚÑÓZ¯+øßhìkHÖ}ì
LÍÏPõuÊ."90k³eðZGpFa;qA»Óu×1+ÙãDÛü¯¡I| ÑÃ>ÁA{">¡ t^éÇÌæláÈô\ô+öYÞÉKZ
~3J¦ÔùyV=}±¥)oÂõ'ÖhûÊo\Ôäxñïd¬së¼
ß0»%Á]K]«ÐQµÎ \G_êÑi>E9%²ó4øÞw±èª\{Τص2kä´yÇÀìÅN
¼É@rÈ¢)uDBt9Ñu:/U:ÈCÈîÑ:ôeË&q×T²Ç©M.g
»VºþúNð×¹.BÚ\vô
m¿Nâo8}ÅçÌë<oóç !¢-ðùèocz;1d°¸QiJæ.Va
|
|
89
|
+
Õ)ÖFìÜ
ª¡I÷ï¸ÑJá¬ìOà¼;MØ¡ûbkdÍLñ¾åKÒg{å:Å>¾ùtcø-{æ4úsú®ü[?ÔgPü¾'LZÀÜö1ug6Z±=MäôîÜVÆnø¥·ÊNl:jGwl|âmÙ®¥[÷\x²¡ºÔGcò\ñX
|
|
90
|
+
åªxOª2ÂØ/OÃOÞÞ$ÌÃÿõ¯Ã«×PæÉIÿ9½(Ñ?¸«àoþÊdOÌ1_W"?ÑW~uç?¾
Ê>ãÜ?÷&ÐÁJ IW#1L+ddF¨eaÞ<ìëܼ/(Òcij/àÉPrsâØ\<Äb®d@7?ác±L¯¡HæfgAÐOº ±ñú3ãõ8å²>:ë¼½Ü-©Ã= J¾CádkFLH¡©d^&FÒ= B©ì Dä³Y?°ìR4f&ÄpcJùriF´³nߤäSx?°¡¬FF!¹©QKP«g2ùd$Ó= R'ÕÀ<ÚE4¼kÍt>¯bþ±¯^508v b$C*ÛǨDZeÌøwlctQk8sâ±£Åì«KÅp9Y
[r®}Y:çJ¿|áã3µèÆvt5ò lUSËÙB}ãÍ:¾¼ÏcM
|
|
91
|
+
7ÐèÏã]Á¥ÀÉØ¡QÒìM¤;mhwTvSúuíØÿAÚÆ¥Í,Í
ãVÖVÖ[¯ºûqú¡'_¾2ÿþiëNz[Û8Æ;ñ¾Üq/K_ÒÀ·-¿xWØ¿uyT #¯@ # @xçÕÍøÓûÖûÖûåûÖWJà¯ßeVì¯ÇçÈ9喝gS¤_¡A!ÔJ9àù±!n%Pj0è£r¡Øf'R@¥aê$ñl0§î$1H.Æù¦®-ù^ªcèN7bÕA,ì-¥dàÉ"¾®3¿G@nJd}~¨Ü0¤4³ªHv~dî1Ö\1ɸè¬3Kw쩤éDT=}Gá¸KËxêÒrÚ¯µÂ]K¶hæèRRÔ¼]MÃÉP´OÅb9RJ4áÉpf¥¤wR¬ÎCâØ\¬aLI6î¯Á´Y:îT(Î4®@$E.eð$Ó*eÒÃDÙBÙS²'H>®ÎHnÓ]ºiýÃÕM:çç¸øÿI¦Î;h3ã)LmûæLc¾å2Ȩ= XþLãXÖÆåC8oÕìØ9oa"F°UC!NEpUB±Úµ2ÉSA±ªÙ©ØeiD´jD?mÀR®¼>k¾rßEÓþ¶¢Ñ*ËVÅ0F¥¾ºt*zŲØBµ/s¹²¶æüº³æÛË«j¾nhGZK$9K¾¡h&Ï.P&VFGÛ
rFG~qQÕe6o·Ø»e»äõìïô+ÒÙB¶Þļ£cL\HÇoYN§¢/}4LøÀàba~Ö²jµ¼¸ÇdméÈh5·JȨ<ÃÂ5MÉqSاºþ»õTÅFgÁaòdãù:~õ°<Á
sYMÖ±zö>ö2kk;ۮͽÜ~ÃCÑ.ʾâÕ4ºÊg»Çg<F&Qp»¡wÏ-w8ûèhYfN~T²MUñÒ¤©ù#mý
BݩչcmíL¾Æë
S¹¥'EL,>A·¥)LrzÉõøêÒùv¾×B4ùèLcóçfæ6;¢7VÅûytûnµé^¾ÒS¿½.'=M[ZXÙâa=}'ŽHèpGãX þiuÅ«ô¦NlQD÷e| »NWÒnúÏÓ¶»ï1>²kÐ,ÿaòcpÚ·Uܬ:eäëÏ~*cPëgå\?9*'àX ¨íÖûÖÖûÖ}íÖûÖh¦Æoy³$²úEÐ"sOG0ë±hu2ÙôM±®Ë3K±XB¥aÙ1Z\ ¡e$u)(/4ðLyà×ç"v47²È5аfÉbF_5ͤ¨üZ1Õ¦¨¶JÂs1%j¨ÙÇ1S°8aÒ¸¯ä«jhujèú¢Ã¤nD,K@
¸djç¾rDËÅÞAEIÇ,e¢¬3=}
T}Lò97Rèûpnñȼ2S[JþwYëÊIPZ5\?ÃÀý.%÷~HÈwriwÕ²¥´ÄÍ»j¶tñÓŪF=Mtü»ËÂ)5?ÞËuwÓáÁHU×ÊIdm©â:¨U¼
|
|
92
|
+
Ê2-uîhÿÕÕ¬YSfkÚzj]ñrÁ°®B=}OZ xß= §Ä®WÿÔÏÂÒyoµA¢;¬ÜÉzV#;;7Rð²¡Ç[-,@{CݤfîP²Î±g¬^8±·Qqk
g/3ikl8o»Øí¤Æ²¹µSOºIÒòlÍR³ßÊ¥f+{ÑêâÁ6ºÒPÕªµK&K9yIÖâj±ÓvÓÊ¢:;µúxßèf¹VÐÑÃĽç2[ÿZøTóîÕÝv\Óê{'#c.~@nPÆ£U9½Ï Déj_GÎ
n¾Ò£³êE|l2ÚØÿúeééN2×ÚpüñRÓ»BÕü|WÙ9ñçmÑåÆ?=Mµ;ia/Ý»¸P¤§±\ØïHõãr~tBO~jm2jR Ê·5ßÜLMÔì§Í½¯¼³ÌiqÚ¯%ßLÇÞì¯ÃÍ¿ød_¾_MÏiãïÆò!â §B!®.ð} í"¼?jÁ@§»&¹*:0D@³/$éXh\¨õcüv§üAäÇiAE¥xQd¨¬eã¬6ÇS¬Ù¸ãú=}ô½P§¦yyNbg¤Á(û§fÑLâ£1^_¬pWs4sÅH>i4}Djq~M«R´º/ÃÌê0C¥8¬¡8Ë'åøØPæÜýQÚüªq¬Kåd»åÙ
«óÒg¼óÄFX<À ê"@Ú»;'ùöíÖ^ûÖûÖûÖQ¾.¼Zó¡óÏZÐUÆãì.JX\ðÑß¾8ýû7§S©|îù|ý
¨rÈëÝ¥Ná^·[×|ª ³ä
>¯#õ]>ë&»±×çÅ>M_|¬³K»o*^«zÓÊï²-^ýn] ³FnÁ
|
|
93
|
+
$,-#,)Ø\Oæ® ·"Ý)5]Dæ°Yåbrö/ Gcî--©^_Dû®°b7cÒß*©5eQaaº¢å®@_¡¸FxÛn¸ýÝFØ>ÒJÓäKE©÷hRoir-µ½CYÓy2ÔDëCi¡¿²)5ÒHεt¬ÀèA4{'JÒîp,ÇXd1ÖBge¶8ºô Tÿuñ¸vºØ}T³gÂî÷ÔùÂyr¾ûíÑ,ó9îWlÉÈôâä:ôp㣹¦ò,C/9}Sü
ßaëÁì¶åMµy~×Õ
|
|
94
|
+
Zâò®
íëëc¶ä÷L¹¦å!pÈH&ãùÖû
ûÖË£
ûÖûÖûö»è=}çZ§%=}ºwþôÁ/§/#<n¸Ùô§¯G=}bÿöH·M|¼NI+ØËrÔ±ëÊîN±ÌkÍQNãÚÌxÒßëÆ+NÓ>Ú²G¼ç>FÝgø">a¯;]R¬>Ѻç²
>sÖ^qºç·Ç>Sß«ÓZÞo²^^¿]
^õiðúGsO¿¬®[ç¿ÎÛ½yýGíS¿~§-H8GÀgÊ ÉY"v6+x{Y~ã =M#ÊY!q&&97pnàÕµ!õ×'^20 r= õ!ÿ$ì9«Èx3oQKÕâïÁHst×¢}e vª³ýbÖvÌ8Ê(Uiq¾âÎrLøÆøhÑ|¨¶âSeûoªl4×ÂFðäjù´}3ÁÐÆsyí:ºUû
|
|
95
|
+
òÖº>ãTFJîñÄxÎÜqS¯Æíí«Aü=}í½º*?U+þfP´ô0ÄW¬è8yøë8zvSýòÐÉÓÁÉF¦aã,ÁG8îT|xh׿ðË^ãñ¦7,Ï:~^RüøåPÏÁdk¬x¶=}©Ls{¾ÖìÙ}ärƬ
5ëZ¶¬mM-ûzwëDçRçz,Ö¬8 RùrÖEë±u6³EáNë
|
|
96
|
+
£¶GMOxrýÐ,ÚÙì²½Åõwëä_¶¤q¥[bZÑAµÐCÃPU§ð^߰ŸÈÔPβ°ËÆÄÞpݹÚpÂÓÐÄÇ0ê7ªP°¤¼°Ê°ÖpÁpÙpͰÓ0ǿШð´0¢ÐÊðÖ¡¿)ß~+]_*Wß)e(âGí>"åh£@ Ï5ûÖtûÖ=MåÖûÖGïÖíÚMæÍûì¦Ïß:ÆRÔk6㼦K,¯*;¾µP\LØxéÐÃÚZ,Í:8ÒTUxþîpÝÓáÁÛr?ãO#ȯq&;¹^ýЯ¦ÐÙ¦«,³·9®ÎRx¨ùhßýp×Ác©ã¦ç-o;Bï9þ~R<Ü8ëp¾AÁàscû·Zxá°«È£Á´«ÀÛAÛ×¾¿áKðpOôÐ^â<H8³x#âWÇ´d®Tddl²µH±£èµ»M? |¸øq¬8y²Èt¦¨Lg¼ÌhÏbÄÉn¼ÏiÔ§¾ÍkìÀØæäÆdª6äüvô×/ñÛ]×C±Ï+QÕ;Ô'±ÅWñÃOÑÕ_À¦0µ§1]g0<Ũóô$]_©U¥Ymì@Î;6Ñ.Q
>ñ!q1ã2ryi|Íü¨å¨;(×äÂídñÍäÝd×=}
|
|
97
|
+
Çúmß·¸×¯ Xh¤>ò¬gtHqXÑ$1²ºX¦¨[kT]oÌÙ= ÜhÝlÜÂùÏʪßnÞiTÞe,ßmLÛc<Ú˨/)Ï'däcB 13÷ÇäOïôçõ± 7¤kíªXºø¦{Â[ÂæB'âwÎtíoºSq+Cçß2Cß1E<(/ùhÔòîä9 ÂÎä)f¤é:ÂÔ'pʹeFi?åjuÊôó~Ê3ÇÅx Ñsò'JnâÄo0lJ%Ë'^¤8H/ÄpHQw<Å8ÑjÜÄfXÑb¼Ä$Qc>i¦hÂÛ5?I5e¬¶ó2L
©1p|D¬³em¢ELñ~ê9¶´ºaê2YC¿Ei*æ3mØL·|"De"qt:j?¹N¤\4g©°´©d^ÉLíÄǬ±YÒnëÙOämbDqrD1yÅÀ´±:òpzkw OC¢ì°Òlöê6ùE'¸¼±«mëBOÕÜ·om¼äeüåsäo"Dh¢EtâDbBEjÂEfEn$Bh0aD'ÍO/PÅbßeIJÛr;¿zµOfË|¦Ra HV4e!Öûÿ]ÓûÖûÖûÖûl $Ïúgýñ|yÙC¹áÝS¢wQ¿¯ñüáï^ç©í_Ì0·^tK2MKî»7ö®Ô4®¢1y«¹¹r¶Ô3[Ô½açùÒËl3öS¸CäêÅøÌêЩVç¤É~Ò
>LËã¿xdÒ
|
|
98
|
+
éuNûÖÉ¢ÑôFÖÿÛ·M<e¬FðôoóäãYô1ÏÀKïùm÷d©ö¾]bí[n³Þkþmú *gÞ@ÑÔí*Og{jdÈÅh¢VêpezëtI§F-õEçÅf´Bf?g{³Ä¢]Mxb²]èfú·N'ñê-T,)®mÄdzóHeVÉ¿HÀ²_Å9pe
S:h{K¥wñËw#hè¼?#¥UìDdömaôÅì¢f|
Nàªå}& %˰Mªþ ©ñLíÿ¦KÝÈ-Ü2\$ô<eôݳ¸²&³= hé
=}WÇüæ~§¨ß(«æ]ãªà·H4«ËG^bîw\ɡ޸_XL iâ¸0Kªðüª³dªTë¢Ëµ'÷ϨyÓt0Õy-×î@Í6æIͯ>¶u:À
¾Q,ï¹ÍØYD£M1\â& ç=M0B ¹Gü*Óhäê^xǧQí!Ý9¬SAÁù>¡v³Hlz0«^µ¤ooâkµ44íkçnlüýº£¡øÍ0
åG}¦¸-µ8ªÏæ´?~ñ(Û<0£%Zqþù~¯^t>äPa 8$ = PûÖÓûÖýûÖûÖûÛkö;à¢Á£ØP_r¦@Ú8¦îhöê¬ÂÄT¿çRÕ<R¯Fp·S±ýWGQ*j÷ÇÁ»Y=}ÅÛSt\+~ïÁÞ
NR"¹RABÚ«èߤEakÙYO
|
|
99
|
+
vr5·7Ï¥zjÎgÊ#Ó,WÁ+mõ{ùÃÒ½B}Õ+%-O·ÛQé >¯/î1s®RXïî¾dïÏ.Ë7V2kOµCÎ
|
|
100
|
+
FCüx=M=}~%þ»#~Þä³o8Ú9V£= ñk<£SîM7þgÄfwîÂE_©º»»ã2ÿ¯=}ùöBàéfaî÷+Ân¸ÍBlÎ7ÅÄa,«ÕkPÂg2aò:I£$y¶î´c±\¥4xÓc±§µpÝÀ¬]5BþÊ2wYÌ-T0örØ63Ô)ôh]z6Ç!-7-Ùæ(g¬mø9êÓSdìq»©KÄ>znä¦ã6Ö¬ªÕCÀé¾7Ó<9ð)É·î,s£ÏKQ5ìºáÕc¾¨âhÿ;§?<&Áßù¿o#XÏ9è¤Ø@"¦¤H?ã5nq$§gÁSºDõ8&GçÒr\;ODÐaA±©ionAJBºìkGiFw
1¸í®Î</±J»ï¸ì"VLKðÇ®$´Ðb9s·s¡ÀJn}ÉÆøÜ¦÷]Õ4~ÌÈe#:#ºèÜþì(ç6¶®ãÓv&Pa7åÚQí*X[ïÞÞ¢!Ð- ûÖ´ÖûVûÖû<rûÖGÃO¶ÿíÙÑ)ã¨/ñ}ö/Ãülqïð£#E8è)¡x\:äY£i;ì#A>8êö^ãX[¬÷ãÉzQ¢§
CØV²¨ÃP¿ZºñâõæPxg®ÃL<Q[T¡ÕcGÒQBnÒ³PZ\¹Cư³X¥µJsZ]u³Æ³·Q½¡fSPÝ]3×åÓørS«-ÓÑT'|j'ïã[>ýúÞÙ ÒÅ+qz¨
BVèLë¹EØîzªqrOC}YoÍÀöjÆöÌDü5¥Ë-·ÍÅÝM5XؾåOVfVoøäÓÒmlÿìMäþùjê6XZ;ûª××½Ê[(س?â}Øm1Éaè»ØýÕ0Ã]ÚØ·û1\_êµ7 Y£\ä¹§Ù×(5ó®rø´9çx¼ÚG0²ïwnÑçä¿ÿÓÄ5¿ìYV[¼g}"×ÿ}äEN*Oñ5Æ®ÜêâËx}cSZ=MWhòØéÄ×V¢óPø7çåxS^«_= Ñ
|
|
101
|
+
!ó?:¨¯QTânµÇ¼,ñäá3O9AåÕÏ9_-â©é;®îÜÎïÝâ/äÆäX3EA¿Qb´ãwv½¦gW~?îãaÏ ?8é[ï¿hÎe²O®ÏíÿÔO1¾ÕX+E¸Aaý\iZlEùVw*o3I>ì±´©Tè°BãíÙÒLS³
Yyè±Öp¾¿öüzÊà%wJæe±)µ8ÅäÖÍê¸%HC4ÊPYb¥%'u¼ÀjùiUehvçNo½!TðÊôækmÖÂu«áÕ´õf¬.FúZtïò¥µNkw Qík/ѽ¸e Ó¤!#ó-8ë°µ¦ßQÆà8ÁÔQ7æºÁâ²eÆ4Ù¸Bú¦@ú¬ËÇíìQG±%ÁM6ÒéHKæ
|
|
102
|
+
{qÛøºÞ¾ö<1ÓA^ù¦ÿ÷~
«úG[Ê&ûeë>b'ÖX¯C=}û©ãn¼=M¬X7f¸ÛÓþ5(wüïÙñ×ì-ɯ(§Ðúà£Ë\)9O¦´Q³W»f#99=MëäK¼ÎCrü¿s"X8àÑ= Ìó"yL¨Ôá$$³ÓJ¤õ±A)Hãp¸3nÙX¿ndÐËL"d4iîq\X8íÆ¢Ö®x<Þ_®S|<¯á¤$æXGH1dLDqYM¹Û~é¬[½bkm*ãñd±Ý¯·ýpðoF1W«¸Zµ!ò¸´æ§Ã ÎjçoV#ÛE¹DfÒa6î£ÒµíYh¶°Gµëóą̊éîÃ.,KàìÞ Õç*ÌMÄlŨQ«BJÆc)!ój-LE9;'´3}®±*^÷uÊ~iJÓËX˺=M«Ø=}£ÿëzoÊ= = =}í×
|
|
103
|
+
¹\Ä¡n-Ô¼äÅË1cÓF"/USÚÁ9-½6.+{ùpþê)µV,ÖÔSÃÀ½Dù.üö2³õé8éNvÓIÝ;ù}¢Ê:¢5¢>¦á!@,%!ÀÙ
ûÖÍ·ûÖÍùÖ=MûÖû#O%¿Iè¢X$(Æ0\7BQp8ÏùßIlrÐ(í51¼ãdyÕ= ´ÀÂÜ©42Q6¼X&åùc<ñ´1L?ái1)òÓDÖv¢r²¬I´Ä
ËD=}jrìÈ´~IôÕÅ ²ëQF¹è= ¯,B7
ØGëqÒ\ÚM«¼·<QóN§È\7ée¾÷©*~Îà°ØB£ªøÊè5E¼
|
|
104
|
+
´¸d))3
Je¹ÏîJ¼¾Èâ®GJ-vöButÞɲ¿ÊæUéÊÖ|½¾
|
|
105
|
+
9ÀùÍ¡ô
-´}T¾ÌiõmÖ¦XÀåBA|ÕÙÓu»!=}öÁ ¬.]ÚL<ÇëåçÚ¸¥
|
|
106
|
+
QÞo/IA6
|
|
107
|
+
3Õ}?M#¾Ô9¢!¼-1¾¨cfæ:Ù1ÅòæÎPé*ìm?¢ #3L£m)SÅuø¬}%=MQÚ¡Y&ºÓ¶Y]6äNÒàuà2Ç\kâyòÀåú_̰ÚeÛßUÿ7{Skè¦b;ùâø¶[ú¡MR$-ûQyò¾µô<×§Í#kGY°æ!§DgTVXÂÆ¤u§3é÷¼¸¦So6Y³BâÅ7/ÙÀêíÎêÂ;ëVØÑã½}ýfÀ'£>¬·äÂæ³ËÇ]yeïO
|
|
108
|
+
Þñ¶íþ<Ôa¢/uر"E{axÿ·òø·¬8_B÷±Èo×_«PT !Ìu,äÃM°Ó÷#[P¨ð@,¢±.fP¶AÄ.¦P{F´wÁ~)Ê8Õ£è¦ÑI¼Ël*¨ü$Cùý:é÷;±¤§dÑ4¦JñLªF
|
|
109
|
+
~T"qQ<z;c¿vLó®
îóxöFæ<¦æÔ«ÛÓ3Ý_¡¹Ö©äïldo@)áD^¾nbàK9ýÞ
r¸þ²â«»I¦ÇmJúÈ·æù·LmoßÝ ùÿì,$SY¹©¥l:ÒØßLÒtÒù»íÔGùdGÀÙK§ï¶Ù\»¾ë;¡\ÄÊÛ¸g= ^g¶Çqàð_%XßJlA<LDüÉ(¥ehi5SÂÕ8Ûåå¶pßÕ¤MÅÈlK¡R¤Ëë¸Ù,°þÏI·~%çuP%³jJ _{éQßJävt±ÀuíÊqõ8ÈÆÏÐ&¯óUüƶYÏÅdÓ®ÀqXÈãÍȾèSôUPÜ¡×úäçfêºXÁ©æì÷UòÐ¥c³{xKðêêúvÖÿ;Òûû¨ÓÇ[²r=}õñ¡³.ò[©[ü©¬çO¦ã!Þ*f¡¿½íÕ
ïÖùÖÖ=MûÖûÖZ^IÔjàXJãÙ;/ßsµ½¹gäÙ Onñ)æ¿°¤Ì$úá2´kÐÕDE96hLw²
|
|
110
|
+
rü_Le«¤42rì°BÙThSýdºìLæèÀ,;å
¸Gc»,5ëéÙMkÆÑLyÒt¯±À<óDø Oç.Yìvèsw¾%"~ê3S~¡%g5p´vÀWh¡Ç]*ô«I±Bc6ª6IÒÊ2¹Ç´0wtcÄ2cjrfÅR=}´1Ër|5¦OÉðÊÉbÂ*ßËòÝkµ_^ËBÅêÎ6u>LucÖ:éF·Ëæù)
|
|
111
|
+
(¯ÉóMËî¹PÜ'ô1ýÈ¡+-æZÀ~Åá,1mÏÒgg³Ò4möãM
|
|
112
|
+
ß=MÏåÃÎ?l»_>sÅmÉVÖSðÛÀ£Ò¦.*©ZÈÁ«á>}<Þ
|
|
113
|
+
2 Ëk
§NÎöC]~x xÊgëlÖ|ôgis¿ªD
=M^#F©;@?àï]&hÍU¿¦8ú9Bv
h¨1ïÏ9Q}ÿ¨Ø,Cäç:ÓÈQßè9³<¬ø¸/{mØî¤=MFLVæRsFþsÆ7»Ò¦ í7$¼ö4Ry þÿbB/( ±4B6Bå 0Ïmæ¬ÎXUºr~þUÇðì¼3ådíÐe+ÔLX³aß¶XéykâMÙQé¸=Mvdл·5[ûÍÕU¯ÍÑÐÕkµUwdøý¦EæVlëÓßIÖö¶ßô9·ëß=Mxð®£òü-Ócø.´ÐÒ×]G[q5@É#<<v= bgd[BNÄÆè±SS½¨Øäv}GÜS¼øTþ¹3î<qÆ@î¹wØPß+N²N|(Ç7ü×ÙÃK+|ÉåÍ;ØÑÿù9NGÞ[^v¸uØÃVï#é>Rc᯾©äeot\QíäÜ7éGÝrÂ7{áA¬Ýi¯ìO^¼ü=M£?ª£xY£v_Òáç7ýN&÷µ?yÎ<CÅ_û¿3ï¾Z26'~ ¶!hv$P{T°À;¡ü0$@~Ó¢ØU¨9¦a&Á^U¸ó7¢¹Ê3lfPî3b0_=}â%0ärb8SF´öÁK¥2:?ª(/¥ÁK7¦8ÊߥÃÞO<=}É$X4aðÎ(òßgð0<á?ã1Lþ1éñO±Ü*¨äÔ_²ÄMq¬¨£4ïÂü8móûöeÉSºÈQl=}ã8¢ú¸ÒF¶÷Oé©
skLÆËy<¼È¬
|
|
114
|
+
ªò?çüA¾¤®Mk@=M"·=M2ÈÈm²d°¨ÎmBË2©}´äýi½¤}u2G7FóG9KëîuF¢4"ÇúB¥u5IT¨ÆKµÉHo
~:WóðSkay:ûÅSZ-âjóÑ2é= f&/¥9¼LíÓhFÂWR9GìÔD³Ùyô|ïÂx°ei6¹Óiß¾m¦@»²*p]§Fa.EYI²ë;ÙL7ÒËT·kBÜܱ§ÒP/ò\dرïxÓö·~!ÒW+SKÀÄÌ QÂ¥Úuèbë+I1Mú=MBîz4ÁvqdòÛsìiëÔJ«é}pâ¼ÛEü×JáÍʤÁ¥Å<Ùwª¡IõÅ{|¦úRJêøz{¦²:>´àÎ<Úf·vq%A5ìÈ= EÕ¯KYx©EÓvvAÔª6ÇJÎVw1Ûʺ-ïËÑÉrUÒUÞÈÑ{-EU¼{{kâËzôÿqëÚXÝÉÑw=}6}¨Ìç}]S
|
|
115
|
+
QÉæ&,_TPóÏ!³Þ&dÖVɱå!X,TBÖÝ)Om/BÈ©C[»iöìµ°JfºÒË¥6äãzvÔRoÊ5ç¨vVúfôÞVnëÔq<õæÿû ]ð®¬|[3ûQÓ£u§[(t'G}j½hGRßN¤çÛxÍúep7gç³Ò»
|
|
116
|
+
ýÅCYÞ§Pñyf/^3ùηt=M~Î
r[Ù¯W78ñ=McAǯióQÝôï£|ùR ÐK#<V:@Õ «Ó&IÚVèM³aª&\¨¶-jPdé0d¦ ÞQìÓ?}Vì{ñ1úü¤æª1O8ÅîHwÍféÌ:åoÛê÷¿ K! H8ûn~¬Í=MVû{ûÖûÖûÎûÖ=MY<1b1ÕÚ«¸R}äÑ=MBD7e4H»mìúüö0IÆâlQcªùiìÓoÜ.)µj8rkâÖ~2ï²ùMÁ5)}Þhx´B¿´OÕÅdhÉTgj¿$IkÏjYuê·,!9ôµñÒϬÑ
l´º¬/ÿø\7´sþ¼l½G²¼÷\N¯g¡Ë°¢5´ ÏÀñ%]²5¬ÙÁ/%»$E*IY{é½j~íw]y©Æ2ëoE~Ϫx|e&J-pq¡ªst4ÙÉÂo5EÜjäõ4ÀÆè U%ÅÈésm¦¿b~-îØ&}#-_ã£-7øcãFaëÜbzfö÷òÉß¶zÕä³Õ¤±ðäÃa=}
|
|
117
|
+
8õogÓZ*G ~÷»®C]+* rwoÑÞÌ\hðÓʾ¡´9PWÕÖ¡åÝ-T¿ßý&¾~VÐÓ¡¶.CÜfõTRËDZjSè:iØÄýgC¢íä|FtW1=MT3ÝÖ¹¾Wѽ©6Sª<vvQsÜ«¹[³íýææì
|
|
118
|
+
÷&+ÇÓx|ñâ.6oÐÀüê)+î766Ì$SzyvöjØÍµåÌ(Ìì\eäê¥OQ;júØúâfÉ1VÖM×A<ÐQÞ[5bV5ÑÃÇý[§6ù)Äù ëî¿~'=}+YhÉ= õïaÕÙ.FXØåa«£6.GëXÙsã©Ç§³ó½¬ùD¼³w½mNêñݲ«=}}»7ª3NÂï}4uÛÉ¿þmòæÔSÄ»KüD>Þ»ó/·¢>ÎfC/÷'ØÒàã/çÏøíãV·àÒ"s)Ið¦= Ù=M"yï+8ÿ)ÜRY¶õëÒª~rÜ·àZOÏ®i
ØâgÙ¸/c)?º¸Tÿ·°±ëgÇ¿^"¢¿s%ÍGüûïñ¹úÃÛý[_Em!
-ðÍ § Sæ%(Í-Ðh ¼¯#²%é?)Ò˰¼m¢Ì;4DØPè@òaÚ-ý1¾0K˧p+ñj¨]»bXo¥BdºZ¬^¸ÚÅâL1 ÐP¹¶¦ßGì
|
|
119
|
+
{(dH¿_bz1ö¨z¤{BîdHJb´~9ÂlL=}
ëH{§gùÓTêÑ]qîþªg´k8åXySæ¡QoѬ9Ç,1ë X Ð1àpÔÓÛÖîÓûÖûÖûÖûéWsIðtDÈ_];9Òko;*ó\«¡U>#=Mê;Ð×U´¡K,tZ@3#;29Éyàh"¬LÊ
dtCýV;iñè¼fLmѸ¨6WÑÏ©)&¹øYÿ¤Ï©×lxVS?ÜÊwPÓË͹üÃí}üqS¥?» ¼ðâ¡6rçLtÈrw+7GyhÛá¢öb×w6¶ÅÐi·Å= Kr?Kz Öíê¸ëvÐÒZ½v;ªûøÿäæþ¡VìÓÑ×åWlÃ[m}j¶ÑGùP[6ùùÔÿîÀ[êÔ³SÛ£[~'ë[Èõæa¶±.nLð°#'[²óiÖ ³m5½´áHG=}·[ñ=}R¡³Ô½¬éBuðåÀjNÞÕñÔ«Kë}䝨xàeâßN
|
|
120
|
+
ÓEF
EWUúÙyRêí
¼§ýÔÝåWè@uðʧ)C\z!/Oð°^»·\>OeêQÕïÁbOÙióëO~¾
æ})?ûRàg®¯t[|Ý?-òIkSÁ¾?Å·¿sìø§ÓÞóS ¬%#L®%v/ÐÇs | cK#¨g#0àGàÌ<a²¢ÔN7ë@öÁa&O(0@=}_%ù±NäO¨°6Âc0k¥ØRUd¢A¬b´>ÂP¥¹4.ÓиU=Mâ:9ë²P;§yKìüÏæ¬ðí6ÁnÑ(T¬°Ëo¤¯óB<þ8ò¹(Õ¿gH¸Xê£Üq§ÂtÊ4EiûH;¦gÉÙHê¿]q"¿Â¼j;ÃÖIæSYfûZQþ«ñ¬ÇËô\6£8¾ÿQÆ
«ý5ÇrÉXK»äõOn¹æ® ¼lO´j,âÚ@üÌ ÚöpHäcŽðR+]s(MDð[FðÅÊ= «"Uf*H«%ì%r~7aw±ñ±:¢h¡:B¯Zªì?MrÉhºB[¨TD²\Íär£¤Hj|ÉAñijäñ2}·jûGñ¦ä«¯2Uóè<õëX$¹õ
þ°qgél{L¯¬ºlRsJ\Kİ[ÆpÒªbÇÖ*ó§I»Ï§â³«*~I²ÊDé¿a5}µïíu¾,pY_s
ëFµÉÇuZ\qIwEgçnµåUzUðPôØSqJè'×U&ñè·ÎH{,eIJ4?£ eu0eñûÖ}kîlÖûÖûÖûÖëëõTÔ÷ØU|Ãú"Ó[Tê~ôxrC,½n9î·ðé=MÌØ×nIZî:½gþñeGc£Ù-:ð×ÊáÖ&k¦:Ì¿Ð]ÐÉáÒß&ór»,LòlSñº¬éñEF¸ÈKFIþ¸¼©Q@Ãeñ²6W«^LRÒø\ñb e=M;6þNÑñêøòUÕ õçú»bË>ÒYóFég;_¾ãèÌ.êXܼy§h?§ú³=}ÚÌ8ð
|
|
121
|
+
-§=}6æ¹·ù
I·®k·fNÕÚdFØÄ}ÏëÞKNC~ÛQ\2ÇX~ôÃ×±ßÎçÅî>}gÄ|ÑÛ'\n^(|lY|öÇu¿ÙÍ,XãZ¿Dg
|
|
122
|
+
üyñü |y"·*8'0ß{= ôÑ!96'4ù9p Tà=}E/ɰWÄDAùthü¶AO¥<¹2Ruhë#ÝA_~§¯N¿v°ÓÐbea:¢=M=d{'+¼¹¢[$í®(~ÿ4ÔO2kr]£qiAmRÞ¶i¥Á²iÓD÷kÒ?µTÜE¹~V¶eîÂ*ÍÒÂmeª1£5³HÆÏul[ĸ}QçÀX (µ= qWûÖ;ÿÖûÖûÖûª®q%´t"+ÄÊLv0øûj¡Ús$Î4XÜwÀE¡Ìï%n6½xD.±ù
dU0ù
|
|
123
|
+
ª´ NÒÔhá%B+רDXIòÎ赯±zl©áEN5´hwuâ´D×®EÂm±HØbÂù>©î7Dæ^±xc}¹¹
4·ùrkµNSË£ìðARMèô|C³ ìÇëR¿ë,MsC±b´*ûjJ$42º*;[JT8ʦb×U*q/H,ßÌ0Ùâ *¿3ÈXytn4wé{k
¸ÆÛ½jÞaJ}ÇÊ|Á×jáJCµQuVåöؼnaHuT2):ÉzÄ Í±¼f¥:V\_ÆÆæÊW:£ó1²
|
|
124
|
+
éÁ´îªZZ¾Á³Ê£îÑaZ=MÇ
|
|
125
|
+
DyÁÓ·nÓZ÷ø¿¾fWs9üíðÈÜáþ&&ù<£A½-/UH^ãJ£S,2½WÈP²Vø2ãJ³mÒµWIÿàÄÁÂR§¸$ól5FâN³l*üSiá}4«ÃéLÆÐjyÊlÕ¸ÿæÂ_«GxLqÓå³C6]ÏyäQ ÇeªV³óûäMóÇÂífV|»U½,ÕqÆùL{§mÁsVÍûLÏíϤ.9R[´KðÔª£ÿôÁ£ðÍ._ýá{ðÇc¹s. [=M¯ã¼$Nf·Ü¥|~tyðèÅ©ÏÃë²aNõFÛüò«k´ÃNCÏÚäR{FÆgt>WtH=MQǶçwùÃk¯I]]hWëc|Q·çîs>¯ä=M±×g¹^ò(ô±{÷ÇÉsÃÕoþ^ f½µïÚ}^oôÜ3µïé¿^#$4k3_àðò!Y%<°"ºU/ôMÀÐ ×s#zM-ØEÀé± Ý·#Ò^.8Iv´°"ib.YtHDå°ª-bÚ:Akû¤¼=}th²yAv¦´ÿ1rh$£ )5eñûÖ=MZûVÞ±]xûÖûÖû\~5ù°ùÕéN³ßc¢~3|dÐ)áèb¢eaAC?áúf¢=}%ù&(n®3ºKmFÛk0n*ÝAÀñ7DÍþ³üÍD±{ÌÄÄ-餿EoÄDÊ¥jWé}cEGkºL´ì}OÙØwö9iÁ{5eÓ75þw¬vQC×éìvwl«ªq)e¯ª&}4°B÷$å«4çwKFtD®KØÊØÏøóº|S@«FgAí¶:KU·÷D
|
|
126
|
+
ÔòýcÈÆòí¢%ºö:ö\ÁºF¿ó¦þTì7¦a%,ê:NöR\˳´AgcÑN¦#-5æ9êîV4yèÚõAã-ÓLøò%ëïzêkëâ¶_Jxþ³¶-ßy2ëËMLóÚxj,Ô;©ÓL7¶
»MÇ{¿ÑÌßé ÃS®ûÿ´ôQgçÕÜ®¼Å<-ÊYZçõß=}?V´h:¸VáÑ®ï*çM®S'R榾uoFß Ñß]EþMÙpéScòßhSïÀn¾r\÷flßðÓÇ.ï©ã¾ÿîîÿ:áà¡"
þ(ìXî¡fÙ"ª&ÞÉ8H"Ë)\½(´<õNPϰàk3"ù'ÊN+ÓQðoÀûà k¡Ad&]< |Ä»±Ú¿d±ÂÙB?7üsAÒÅv¬Ë&±ÓÍBãÚfÊ,¨\TZRÄ¢èÅu±ö{C>¨¬Y5RL.p= $!0íÖûοûíÖûÖûÖ=MÚ§p/§34«Iø¶x°Y½.aâ¢
$gÊ)²W4èö¢£}%±ÝÀú@áØQ¢ó$6(ÒÌ6ôûJÕPÄ
áÉÛ¢{ï%o_*~6Ü.G6cG±:éî²%D#kjºv¶ÍK)ÿ|Ù£¶,Ò^²äãD·æk¦î´y<÷h³D_@ùrrÒ=}iû²wE½j¾¦vT®ÊX=}oq@¥~fe¨üªFe4»ëHâusôÎϸýbÏÃBÉrôÃ8UtѼe䥪¬Ë4ÅWK:=Mq^Ê4ÎK&\(ÅârÍ0vsRºF}mØ4º'9T{¦5òôJÅityÛÖf3mÖºPýT»ÌÆmè1º3T¥NLôÔ|Å×i<.lÏzýõ|ÊInÓ»F(cÓ(¦ÍQ,12:
|
|
127
|
+
ÆTìë´ó°Ê°Áiã䪦cU-::ÕR44ÄÁOãa¦éÃ,G9¶ìRL}xÔêP³Nc¿c¦Ç,µO9ÒþRdØòÐÃÁocåp¶±LzfDÔ4o¸áR_§Å!ë;LÃëyòwÓÍÉöôÛÅm7ë+
ðû°ÅHë ©¶¢SM+7xâÍ(VM×y+gM{ïx}Ö´Þ9èÒÅ'kæ?¶A<#â[¶f<´äSÕCzg²|®%=}y«[ÒµÉ
|
|
128
|
+
hsç±ÐÑCKç.®{ý=}ͧ9È\ú±²,çÆ.Ûì±Íçª}®æ'=}±oXÖ¼TÚ
|
|
129
|
+
ûQ±CkçÑ®ÿ<¯XZ§Ü¯ 6óRÞÇeRïÅT¾²¹]Ë5Ⱦ+Å]¹Jõ¼ÏiúôóÆÕ
ç÷ý³îºl8YPâ¼GtoÞù¾Z+]ý·¦ÎìøyÖóÓßqïîó!,&è!+@&ãùÖûûÖ=M{ÖûÖûÖCàª!])Pu ?"ô6@ÿ¿ bXþ§<¸6óñRÞCrçt®M9<ýÒYR\H¸tìa9ç몮õ=}ù
|
|
130
|
+
ZîUÔûöQÞÓCoç ÏñÿѨÿgYv¬D¹
|
|
131
|
+
¸XëÞÃrçåu®|;<³×}®ò'<Ó®Z~½Ùõ¶C#gñÇ®àKçÚ®<±YT*E/OìB¨I¼¯G\nLjAkK¤éLdèAdìK¤KD$OFOEÜLO|ÏB<ÌIÌÈG¬LA´KD=MDF< Ml2Áá ApéhXÁAî,ô<áM4òN3NÌ2Ï71Ö0Ê8'%[FdYMì^OÄÚBÌÚAÞK̾))Qÿ+c^+¿Þ+-(§£IbKcãK¯BK%H3"E{rerJ§óJSI
ÓIãI'Iÿ+I9ªIkIãëI;JI÷ÊI_I
|
|
132
|
+
KÙ:KµºKí{K]ûK£[KÚKóKÓ½R׿ÿ'P^j9TîçmóþL¿_o©×hÙtÙÞrùÔv9ÙqÜuéÚsÛgY= 9dÉb©fÙ~9yI}kyoÉh)lyrÉva¹eéãv:wþ§P§QBfPÆdV2fWåR²äSGTGUæÄP¢ÅQÚÇW>RJSVTU|!CoQi9C%
¾8é9:;8;;yº;=M{9«ûÜ.fÄNfÍ·QÕÏÑw¬g¬p£¬tcÂC¬ÃάÁ3s¬Eó-Ó¬½+¬c«|<x~ÙÍWv×:Ã8;M9/:ù®8Q®;?o:î8Kï;#N9ÕÎ:8ÿ9g:>×çf¢æ½7æ¼÷fÝfì¯æ ï^»±Ç×%Q= n!= Q0ÌûÖýnûÖ=MûÖûÖûÞëçSÒSl_ aGáqÁ¬,ÓÖ±¬pqñ¼Ñ¬³¬Ú·)i¬é¬I¬Ñ ¬(9CdVÃ.NÃe~ÃAC~Qp)IÃy
CEÃ5wUCmÃy{}Ç¡qűQÇ©ÄÔÌÜÄ T=Mì|$<\</ÛC¬Rìö¬Á¬%3¬=}³¼ªÿ¹º$¹d¼ä¹DyÄzÄ{
|
|
133
|
+
^¶{ w;I÷:©ö;QWZÿ6V.ôNë>ïÛï9/XAÃô1CQïâ¼T¿VF½Uz½W}·[wüãUÃû-ÃMÞýÇ*/î3ìHâòxúöÝWO¿¬ø¬c½Û1 ÇÑ·q¯Ï÷*Bn&5£«?Aä¸pBq8ÑAÌH4~¼©@f2/B«vqåÛÂ,YÆ6{ªCZæ3Ï«Æ)åÍdÂ2XÉè±|LmAÂÅ2jM~Ç1õò©ý e²¬hF\ÓH¹uLëF¢0-ª=MÙdÄ\Â~ÑK¿¨pà+ªÕ¥ä1QÉÈ÷JF²¶0MkªõÅäûòByñÞ¼xu~\Ë@2w2ÕK«)uäñÊU±Î¦Èws¬ÎEö6oÝBñС8úðÿWæîûäWWíeÉ6îørEÆÖ6ú¨£åõîñþ0ÁZ©8½]w7±ÁËèùm4Nª0
ª*ÝdÅþÂ?ýu_qÎßS-0¥mµèRpÄ:D/|cd°ÁÃ×'ãäÙ¤=}Iæ¯2]gÛ»QÂøx±¼(_þS[WaÌ»Hæl2ÍF4±Ê=MüT_}¹ÚÃy³×cÓåäYÿ|½GÞ[P¬|¹7ªx«ä=}+6Û§EBåréROvÙ×KJ1ÕøÍç:ÍØZ%2/PÖ½! &ûÖ×ïÖûÖûÖûÖÑÖQÕ1³éf®ßT ×i3îY»Til»÷FmÁòDS
¡ÿOTwfNÒO«cEöØôÅêRÝüøÄy|:ÍÔ:éÛúÙpóÍ6v³Ü°¬Ú#´÷F§ðÃÙ
|
|
134
|
+
³ÿ½ÞðJÏBýV§ìûÕÎù_¹
|
|
135
|
+
ÜiÛk;ì:ÜÕçÏÑÙ¿(ÁÜÎ0¹/s}ÿ\¸{TîYm½B~XÂF¼gýW~_ÆE¬bçý¾^~ªðÃhÀøI=MPûe7ýºCÜöÞª¯ï9«sȳä1þôjW'oÆËÓ¬ûOã9g0|ÆùåZ
|
|
136
|
+
ÒlE¤ïÎìùà=}º
|
|
137
|
+
¼@¯Ë«Q¼3\ÃÑNé(®¤öÚP#øãýa¿ÌDºÕ÷u9ëq/VÔ>·ZôÝÂ]«ÙêsbKºâ=MAU9îvÂIâá±è±Qí8ï.BZê}Ç:xä)¨ö¢³zAg¨9´ÁMyçY¨î®rÔH«Y= HäGÄ,í9ä<Ö¡D>«×ÁLm ãv° lfÜcªp³Ö,JKùë%ÂÙCñ·TÃ\-è@FѸí<2±üÌA¨7¿èiQÊð°$syäZ¬«¤²àÚ'¦÷°Ïéd>ªq¾ºTÂU}ëpæQL=}ûøëqî¹@BiÆ4à\êóÜèÜëgá×@KÙèo1jr¶jtÃVlzó¾îÇW8äpfP¦lJS¸í|6иÅÌ5yïfVÓ=}/øïa.´¼DÇóñ¿"·Øì5Î$0h0áßã?Ý¿»¿äDG_©¤ÿhÄ_h;I±vn~>á;ò=Móýå¯7¯Éý#{} ·Zë´ÎÆNÏRǽûV«A¹³ìÖûÖyíû¼9g:&@*!e*$£vËbáª;Vpc,ÈåEUV!4yø Ô#Û%î%i[óX¢î¾Ù@àÀG!þ¨@ÝIÐNZ= Ýóá¤àYá /Vâ ÷6XH\Øü&ð8ûwâ6õ2@ý Êù.=M+ç-n¢ò|øM/<ýNÌSY¬Ý)z¿¥CoáÎã± ÐÁïXÙ£!õÜd?¯xðì
|
|
138
|
+
Ái;ªäÀ%n= =M+W= ÓÖc[aS
|
|
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
|
+
(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 La={a:Aa};this.setModule=x=>{t.setModule(qe,x)},this.getModule=()=>t.getModule(qe),this.instantiate=()=>(this.getModule().then(x=>WebAssembly.instantiate(x,La)).then(x=>{let me=x.exports;wa(me),y=me.l,h(),Ma(me),r()}),this.ready=new Promise(x=>{r=x}).then(()=>{this.HEAP=y.buffer,this.malloc=Gi,this.free=$i,this.create_decoder=Ui,this.send_setup=Wi,this.init_dsp=Xi,this.decode_packets=Ki,this.destroy_decoder=qi}),this)}function It(){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,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=t=>{this._input.buf.set(t),this._inputLen.buf[0]=t.length,this._common.wasm.send_setup(this._decoder,this._firstPage),this._firstPage=!1},this.initDsp=()=>{this._common.wasm.init_dsp(this._decoder)},this.decodePackets=t=>{let e=[],r=0,n=[];for(let o=0;o<t.length;o++){let i=t[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),r+=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],r,this._sampleRate.buf[0],16)},this._isWebWorker=It.isWebWorker,this._WASMAudioDecoderCommon=It.WASMAudioDecoderCommon||D,this._EmscriptenWASM=It.EmscriptenWASM||qe,this._module=It.module,this._inputSize=128*1024,this._ready=this._init(),this}var ho=Symbol(),$e=class{constructor(){this._onCodec=e=>{if(e!=="vorbis")throw new Error("@wasm-audio-decoders/ogg-vorbis does not support this codec "+e)},new D,this._init(),this._ready=this[ho](It)}_init(){this._vorbisSetupInProgress=!0,this._totalSamplesDecoded=0,this._codecParser=new js("audio/ogg",{onCodec:this._onCodec,enableFrameCRC32:!1})}async[ho](e){if(this._decoder){let r=this._decoder;await r.ready.then(()=>r.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 r=[];for(let i=0;i<e.length;i++){let s=e[i];if(this._vorbisSetupInProgress&&(s[po][0]===1&&this._decoder.sendSetupHeader(s[po]),s[fo].length)){let a=s[fo][0][Js];this._decoder.sendSetupHeader(a[Zs]),this._decoder.initDsp(),this._vorbisSetupInProgress=!1}r.push(...s[fo].map(a=>a[po]))}let n=await this._decoder.decodePackets(r);this._totalSamplesDecoded+=n.samplesDecoded;let o=e[e.length-1];if(o&&o[Qs]){let i=this._totalSamplesDecoded-o[ea];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 r=await this.decodeOggPages([...this._codecParser.parseAll(e)]);return await this.reset(),r}};var vi=class extends Xt{constructor(e){super(e,"ogg-vorbis-decoder",It,qe)}async sendSetupHeader(e){return this.postToDecoder("sendSetupHeader",e)}async initDsp(){return this.postToDecoder("initDsp")}async decodePackets(e){return this.postToDecoder("decodePackets",e)}},fn=class extends $e{constructor(){super(),this._ready=super[ho](vi)}async free(){await this._decoder.free()}terminate(){this._decoder.terminate()}};On($e,"OggVorbisDecoder");On(fn,"OggVorbisDecoderWebWorker");var _i=class extends Error{constructor(e){super(e),this.name="OggDecodeError"}};async function yo(t,e=new $e){await e.ready;let r=await e.decode(new Uint8Array(t)),n=r.errors;if(n&&n.length>0)throw new _i(n.map(o=>o.message).join("; "));return{sampleRate:r.sampleRate,channels:r.channelData.length,bitDepth:r.bitDepth,channelData:r.channelData}}var pn=class extends Error{constructor(e){super(e),this.name="AudioRegistryError"}},cr=class{constructor(e,r={}){this.vfs=e;this.refCounts=new Map;this.cache=new Qe(r.cacheSize??64)}get size(){return this.cache.size}async load(e){let r=e.toLowerCase(),n=this.cache.get(r);if(n)return this.refCounts.set(r,(this.refCounts.get(r)??0)+1),n;let i=(await this.vfs.readFile(e)).slice().buffer,s=await this.decodeByExtension(e,i);return this.cache.set(r,s),this.refCounts.set(r,1),s}release(e){let r=e.toLowerCase(),n=this.refCounts.get(r)??0;n<=1?(this.cache.delete(r),this.refCounts.delete(r)):this.refCounts.set(r,n-1)}clearAll(){this.cache.clear(),this.refCounts.clear()}async decodeByExtension(e,r){let n=e.toLowerCase();if(n.endsWith(".wav")){let o=Nn(r),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 yo(r);throw new pn(`Unsupported audio format: ${e}`)}};var Gc="quake2ts-pak-indexes",Wc="pak-indexes";function ta(){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 hn(t,e){let r=ta();return r?new Promise((n,o)=>{let i=r.open(t,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 yn(t,e,r,n){return new Promise((o,i)=>{let a=t.transaction(e,r).objectStore(e),c=n(a);c.onsuccess=()=>o(c.result),c.onerror=()=>i(c.error??new Error("IndexedDB transaction error"))})}function Ai(t,e){return`${U(t)}:${e.toString(16)}`}function Xc(t){return t.map(e=>({...e}))}var go=class{constructor(e=Gc,r=Wc){this.dbName=e;this.storeName=r}get isSupported(){return!!ta()}async persist(e){if(!this.isSupported)return;let r=e.validate(),n={...r,key:Ai(e.name,r.checksum),name:e.name,size:e.size,persistedAt:Date.now(),entries:Xc(r.entries)},o=await hn(this.dbName,this.storeName);return await yn(o,this.storeName,"readwrite",i=>i.put(n)),o.close(),n}async find(e,r){if(!this.isSupported)return;let n=await hn(this.dbName,this.storeName),o=r!==void 0?Ai(e,r):void 0,i=await yn(n,this.storeName,"readonly",s=>o?s.get(o):s.getAll());if(n.close(),!!i){if(Array.isArray(i)){let s=U(e),a=i.filter(c=>U(c.name)===s);return a.length===0?void 0:a.sort((c,l)=>l.persistedAt-c.persistedAt)[0]}return i}}async remove(e,r){if(!this.isSupported)return!1;let n=await hn(this.dbName,this.storeName),o=r!==void 0?Ai(e,r):void 0,i=await yn(n,this.storeName,"readwrite",s=>{if(o)return s.delete(o);let a=`${U(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 hn(this.dbName,this.storeName);await yn(e,this.storeName,"readwrite",r=>r.clear()),e.close()}async list(){if(!this.isSupported)return[];let e=await hn(this.dbName,this.storeName),r=await yn(e,this.storeName,"readonly",n=>n.getAll());return e.close(),r.sort((n,o)=>o.persistedAt-n.persistedAt)}};var kt=class extends Error{constructor(r,n){super(n??`Missing dependencies: ${r.join(", ")}`);this.missing=r;this.name="AssetDependencyError"}},gn=class{constructor(){this.nodes=new Map}register(e,r=[]){let n=this.nodes.get(e)??{dependencies:new Set,loaded:!1};r.forEach(o=>n.dependencies.add(o)),this.nodes.set(e,n),r.forEach(o=>{this.nodes.has(o)||this.nodes.set(o,{dependencies:new Set,loaded:!1})})}markLoaded(e){let r=this.nodes.get(e)??{dependencies:new Set,loaded:!1},n=this.getMissingDependencies(e,r);if(n.length>0)throw new kt(n,`Asset ${e} is missing dependencies: ${n.join(", ")}`);r.loaded=!0,this.nodes.set(e,r)}markUnloaded(e){let r=this.nodes.get(e);r&&(r.loaded=!1)}isLoaded(e){return this.nodes.get(e)?.loaded??!1}missingDependencies(e){let r=this.nodes.get(e);return r?this.getMissingDependencies(e,r):[]}reset(){this.nodes.clear()}getMissingDependencies(e,r){let n=[];for(let o of r.dependencies)this.nodes.get(o)?.loaded||n.push(o);return n}},xo=class{constructor(e,r={}){this.vfs=e;this.textures=new Wt({capacity:r.textureCacheCapacity??128}),this.audio=new cr(e,{cacheSize:r.audioCacheSize??64}),this.dependencyTracker=r.dependencyTracker??new gn,this.md2=new Ut(e),this.md3=new Gt(e)}isAssetLoaded(e,r){return this.dependencyTracker.isLoaded(this.makeKey(e,r))}registerTexture(e,r){this.textures.set(e,r);let n=this.makeKey("texture",e);this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n)}async loadSound(e){let r=await this.audio.load(e),n=this.makeKey("sound",e);return this.dependencyTracker.register(n),this.dependencyTracker.markLoaded(n),r}async loadMd2Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new kt(i,`Asset ${n} is missing dependencies: ${i.join(", ")}`);let s=await this.md2.load(e);return this.dependencyTracker.markLoaded(n),s}async loadMd3Model(e,r=[]){let n=this.makeKey("model",e),o=r.map(a=>this.makeKey("texture",a));this.dependencyTracker.register(n,o);let i=this.dependencyTracker.missingDependencies(n);if(i.length>0)throw new kt(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,r){return`${e}:${U(r)}`}};var wi=32,bo=(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))(bo||{}),ra=-1,So=0,na=1,oa=2,ia=3,lr=80,sa=.003;function Rt(t){return t===3?t*.001:t*5e-4}function vo(t){let e=Rt(t);return e<=0?Number.POSITIVE_INFINITY:80+1/e}var _o=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 Ao(t){let e=t.getContext(),r=e.createGain();r.gain.value=1;let n=e.createDynamicsCompressor(),o=e.createBiquadFilter?.();return o?(o.type="lowpass",o.frequency.value=2e4,o.Q.value=.707,r.connect(o),o.connect(n)):r.connect(n),n.connect(e.destination),{context:e,master:r,compressor:n,filter:o}}var wo=class{constructor(e=new Bt){this.configStrings=e;this.buffers=new Map}registerName(e){return this.configStrings.soundIndex(e)}register(e,r){let n=this.registerName(e);return this.buffers.set(n,r),n}find(e){return this.configStrings.findSoundIndex(e)}get(e){return this.buffers.get(e)}has(e){return this.buffers.has(e)}};var Mo=class{constructor(e){this.vfs=e.vfs,this.registry=e.registry,this.contextController=e.context,this.soundRoot=e.soundRoot??"sound/",this.decodeAudio=e.decodeAudio??((r,n)=>{if(!r.decodeAudioData)throw new Error("decodeAudioData is not available on the provided audio context");return r.decodeAudioData(n)})}async precache(e){let r=[...new Set(e.map(i=>this.normalize(i)))],n={loaded:[],skipped:[],missing:[],errors:{}},o=this.contextController.getContext();for(let i of r)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 r=U(e.replace(/^\//,""));return r.startsWith(this.soundRoot)?r:U(`${this.soundRoot}${r}`)}};var Kc=7,xn=t=>t&Kc;function Lo(t){return Array.from({length:32},()=>({entnum:0,entchannel:0,endTimeMs:0,isPlayer:!1,active:!1})).map(e=>({...e,isPlayer:e.entnum===t}))}function Co(t,e,r,n){if(r<0)throw new Error("pickChannel: entchannel must be non-negative");let o=xn(r),i=-1,s=Number.POSITIVE_INFINITY;for(let a=0;a<t.length;a+=1){let c=t[a],l=xn(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 Eo(t,e,r,n,o){if(o)return{left:r,right:r,distanceComponent:0};let i=Qi(t,e.origin),s=Go(i),a=Zi(i),c=s-80;c<0&&(c=0),c*=Rt(n);let l=Uo(e.right,a),u=e.mono??!1,d=u||n===0?1:.5*(1+l),f=u||n===0?1:.5*(1-l),p=Math.max(0,Math.floor(r*(1-c)*d));return{left:Math.max(0,Math.floor(r*(1-c)*f)),right:p,distanceComponent:c}}var To=class{constructor(e){this.activeSources=new Map;this.contextController=e.context,this.registry=e.registry,this.playerEntity=e.playerEntity,this.channels=Lo(e.playerEntity),this.listener=e.listener??{origin:Ji,right:{x:1,y:0,z:0}},this.sfxVolume=e.sfxVolume??1,this.masterVolume=e.masterVolume??1,this.resolveOcclusion=e.resolveOcclusion,this.graph=Ao(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 r=this.registry.get(e.soundIndex);if(!r)return;let n=this.graph.context,o=n.currentTime*1e3,i=Co(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=r,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),f=aa(d?.gainScale??1),p=this.resolveOcclusion?this.createOcclusionFilter(n,d?.lowpassHz??2e4):void 0;this.applyOriginToPanner(u,c);let y=e.entity===this.playerEntity,h=Eo(c,this.listener,e.volume,e.attenuation,y),b=(e.volume===0?0:Math.max(h.left,h.right)/Math.max(1,e.volume))*(e.volume/255)*this.masterVolume*this.sfxVolume;l.gain.value=b*f;let T=n.currentTime+(e.timeOffsetMs??0)/1e3,P=(e.looping?Number.POSITIVE_INFINITY:r.duration*1e3)+T*1e3;a.connect(u),p?(u.connect(p),p.connect(l)):u.connect(l),l.connect(this.graph.master),a.start(T),a.onended=()=>{this.channels[i].active=!1,this.activeSources.delete(i)};let ne={channelIndex:i,entnum:e.entity,entchannel:xn(e.channel),endTimeMs:P,source:a,panner:u,gain:l,baseGain:b,origin:c,attenuation:e.attenuation,occlusion:p?{scale:f,lowpassHz:d?.lowpassHz,filter:p}:d?{scale:f,lowpassHz:d.lowpassHz}:void 0};return this.channels[i]={entnum:e.entity,entchannel:xn(e.channel),endTimeMs:P,isPlayer:e.entity===this.playerEntity,active:!0},this.activeSources.set(i,ne),ne}stop(e){let r=this.activeSources.get(e);r&&(r.source.stop(),this.channels[e].active=!1,this.activeSources.delete(e))}stopEntitySounds(e){for(let[r,n]of[...this.activeSources.entries()])n.entnum===e&&(n.source.stop(),this.channels[r].active=!1,this.activeSources.delete(r))}updateEntityPosition(e,r){for(let n of this.activeSources.values())if(n.entnum===e&&(this.applyOriginToPanner(n.panner,r),n.origin=r,this.resolveOcclusion)){let o=this.resolveOcclusion(this.listener,r,n.attenuation);this.applyOcclusion(n,o)}}positionedSound(e,r,n,o){return this.play({entity:0,channel:0,soundIndex:r,volume:n,attenuation:o,origin:e})}ambientSound(e,r,n){return this.play({entity:0,channel:0,soundIndex:r,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,r=400){let n=this.graph.filter;n&&(n.type="lowpass",n.Q.value=.707,n.frequency.value=e?r:2e4)}createPanner(e,r){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,r)}configurePanner(e,r){let n=Rt(r);return e.refDistance=80,e.maxDistance=vo(r),e.rolloffFactor=n,e.distanceModel=r===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,r){e.positionX.value=r.x,e.positionY.value=r.y,e.positionZ.value=r.z}createOcclusionFilter(e,r){if(!e.createBiquadFilter)return;let n=e.createBiquadFilter();return n.type="lowpass",n.Q.value=.707,n.frequency.value=Mi(r,10,2e4),n}applyOcclusion(e,r){let n=aa(r?.gainScale??1);if(e.gain.gain.value=e.baseGain*n,e.occlusion?.filter){let o=r?.lowpassHz??2e4;e.occlusion.filter.frequency.value=Mi(o,10,2e4)}e.occlusion?(e.occlusion.scale=n,e.occlusion.lowpassHz=r?.lowpassHz):r&&(e.occlusion={scale:n,lowpassHz:r.lowpassHz})}},Mi=(t,e,r)=>Math.min(r,Math.max(e,t)),aa=t=>Mi(t,0,1);var zo=class{constructor(e){this.createElement=e.createElement,this.resolveSource=e.resolveSource??(async r=>r),this.volume=e.volume??1}async play(e,{loop:r=!0,restart:n=!1}={}){if(this.track===e&&this.element){this.element.loop=r,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=r,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),r=!!this.element?.paused;return{track:this.track,paused:r,playing:e,volume:this.volume}}};var Po=class{constructor(e){this.registry=e.registry,this.system=e.system,this.music=e.music}soundindex(e){return this.registry.registerName(e)}sound(e,r,n,o,i,s){this.system.play({entity:e,channel:r,soundIndex:n,volume:o,attenuation:i,timeOffsetMs:s})}positioned_sound(e,r,n,o){this.system.positionedSound(e,r,n,o)}loop_sound(e,r,n,o,i){this.system.play({entity:e,channel:r,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,r=!0){return this.music?this.music.play(e,{loop:r}):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,r,n){this.system.ambientSound(e,r,n)}play_channel(e){this.system.play({...e})}};function qc(t){t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),t.enable(t.CULL_FACE),t.cullFace(t.BACK),t.enable(t.BLEND),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)}function $c(t,e,r,n){for(let o of e){let i=t.getExtension(o);if(!i)throw new Error(`Missing required WebGL extension: ${o}`);n.set(o,i)}for(let o of r){let i=t.getExtension(o);i&&n.set(o,i)}}function ca(t,e={}){let{contextAttributes:r,requiredExtensions:n=[],optionalExtensions:o=[]}=e,i=t.getContext("webgl2",r??{antialias:!0});if(!i)throw new Error("WebGL2 not supported or failed to initialize");qc(i);let s=new Map;$c(i,n,o,s);let a=!1,c=new Set,l=new Set,u=f=>{a=!0,f.preventDefault();for(let p of c)p()},d=()=>{a=!1;for(let f of l)f()};return t.addEventListener("webglcontextlost",u),t.addEventListener("webglcontextrestored",d),{gl:i,extensions:s,isLost:()=>a,onLost(f){return c.add(f),()=>c.delete(f)},onRestored(f){return l.add(f),()=>l.delete(f)},dispose(){t.removeEventListener("webglcontextlost",u),t.removeEventListener("webglcontextrestored",d),c.clear(),l.clear(),s.clear()}}}function la(t,e,r){let n=t.createShader(e);if(!n)throw new Error("Failed to allocate shader");if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){let i=t.getShaderInfoLog(n)??"Unknown shader compile failure";throw t.deleteShader(n),new Error(i)}return n}function Yc(t,e,r,n){let o=t.createProgram();if(!o)throw new Error("Failed to allocate shader program");if(t.attachShader(o,e),t.attachShader(o,r),n)for(let[s,a]of Object.entries(n))t.bindAttribLocation(o,a,s);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){let s=t.getProgramInfoLog(o)??"Unknown shader link failure";throw t.deleteProgram(o),new Error(s)}return o}var Me=class t{constructor(e,r){this.uniformLocations=new Map;this.attributeLocations=new Map;this.gl=e,this.program=r}static create(e,r,n){let o=la(e,e.VERTEX_SHADER,r.vertex),i=la(e,e.FRAGMENT_SHADER,r.fragment);try{let s=Yc(e,o,i,n);return new t(e,s)}finally{e.deleteShader(o),e.deleteShader(i)}}use(){this.gl.useProgram(this.program)}getUniformLocation(e){if(!this.uniformLocations.has(e)){let r=this.gl.getUniformLocation(this.program,e);this.uniformLocations.set(e,r)}return this.uniformLocations.get(e)??null}getAttributeLocation(e){if(!this.attributeLocations.has(e)){let r=this.gl.getAttribLocation(this.program,e);this.attributeLocations.set(e,r)}return this.attributeLocations.get(e)??-1}dispose(){this.gl.deleteProgram(this.program),this.uniformLocations.clear(),this.attributeLocations.clear()}};function ua(t,e,r){return Me.create(t,e,r)}var Le=class{constructor(e,r=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,r)}bind(){this.gl.bindBuffer(this.target,this.buffer)}upload(e,r=this.gl.STATIC_DRAW){this.bind(),this.gl.bufferData(this.target,e,r)}update(e,r=0){this.bind(),this.gl.bufferSubData(this.target,r,e)}dispose(){this.gl.deleteBuffer(this.buffer)}},yt=class extends Le{constructor(e,r=e.STATIC_DRAW){super(e,r,e.ELEMENT_ARRAY_BUFFER)}},Re=class{constructor(e){this.gl=e;let r=e.createVertexArray();if(!r)throw new Error("Failed to allocate vertex array object");this.vao=r}bind(){this.gl.bindVertexArray(this.vao)}configureAttributes(e,r){this.bind(),r&&r.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)}},ur=class{constructor(e,r=e.TEXTURE_2D){this.gl=e,this.target=r;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,r,n,o,i,s,a,c){this.bind(),this.gl.texImage2D(this.target,e,r,n,o,i,s,a,c)}dispose(){this.gl.deleteTexture(this.texture)}},dr=class{constructor(e){this.gl=e,this.target=e.TEXTURE_CUBE_MAP;let r=e.createTexture();if(!r)throw new Error("Failed to allocate cubemap texture");this.texture=r}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,r,n,o,i,s,a,c,l){this.bind(),this.gl.texImage2D(e,r,n,o,i,s,a,c,l)}dispose(){this.gl.deleteTexture(this.texture)}},Fo=class{constructor(e){this.gl=e;let r=e.createFramebuffer();if(!r)throw new Error("Failed to allocate framebuffer");this.framebuffer=r}bind(e=this.gl.FRAMEBUFFER){this.gl.bindFramebuffer(e,this.framebuffer)}attachTexture2D(e,r,n=0){this.bind(),this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER,e,r.target,r.texture,n)}dispose(){this.gl.deleteFramebuffer(this.framebuffer)}};var Ci=4,Li=7*Ci,Ei=[{index:0,size:3,type:5126,stride:Li,offset:0},{index:1,size:2,type:5126,stride:Li,offset:3*Ci},{index:2,size:2,type:5126,stride:Li,offset:5*Ci}];function jc(t,e){return{width:t,height:t,padding:e,data:new Uint8Array(t*t*4),cursorX:0,cursorY:0,rowHeight:0}}function Jc(t){let e=t.width*t.height;if(e===0)throw new Error("Invalid lightmap with zero area");let r=t.samples.byteLength/e;if(!Number.isInteger(r)||r<3||r>4)throw new Error("Unsupported lightmap channel count");return r}function Qc(t,e,r){let n=Jc(r),o=t.width*4,i=e.x+t.padding,s=e.y+t.padding,a=0;for(let c=0;c<r.height;c++){let l=(s+c)*o+i*4;for(let u=0;u<r.width;u++){let d=l+u*4;t.data[d]=r.samples[a],t.data[d+1]=r.samples[a+1],t.data[d+2]=r.samples[a+2],t.data[d+3]=n===4?r.samples[a+3]:255,a+=n}}}function Zc(t,e,r){let n=e.width+r.lightmapPadding*2,o=e.height+r.lightmapPadding*2;if(n>r.atlasSize||o>r.atlasSize)throw new Error("Lightmap too large for atlas");for(let a of t){if(a.cursorX+n>a.width&&(a.cursorX=0,a.cursorY+=a.rowHeight+r.lightmapPadding,a.rowHeight=0),a.cursorY+o>a.height)continue;let c={atlasIndex:t.indexOf(a),x:a.cursorX,y:a.cursorY,width:e.width,height:e.height};return a.cursorX+=n+r.lightmapPadding,a.rowHeight=Math.max(a.rowHeight,o),{placement:c,atlas:a}}let i=jc(r.atlasSize,r.lightmapPadding);t.push(i);let s={atlasIndex:t.length-1,x:0,y:0,width:e.width,height:e.height};return i.cursorX=n+r.lightmapPadding,i.rowHeight=o,{placement:s,atlas:i}}function Io(t){return t instanceof Float32Array?t:new Float32Array(t)}function el(t,e){if(!t){let n=new Uint16Array(e);for(let o=0;o<e;o++)n[o]=o;return n}return t instanceof Uint16Array?t:new Uint16Array(t)}function tl(t,e){let r=new Float32Array(t.length);for(let n=0;n<t.length;n+=2)r[n]=e.offset[0]+t[n]*e.scale[0],r[n+1]=e.offset[1]+t[n+1]*e.scale[1];return r}function rl(t,e){let r=Io(t.vertices),n=Io(t.textureCoords),o=e?tl(Io(t.lightmapCoords??t.textureCoords),e):Io(t.lightmapCoords??new Float32Array(n.length)),i=r.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]=r[c],s[u+1]=r[c+1],s[u+2]=r[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 da(t,e,r={}){let n={atlasSize:r.atlasSize??1024,lightmapPadding:r.lightmapPadding??1},o=[],i=new Map;e.forEach((c,l)=>{if(!c.lightmap)return;let{placement:u,atlas:d}=Zc(o,c.lightmap,n);Qc(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 ur(t);return l.setParameters({wrapS:t.CLAMP_TO_EDGE,wrapT:t.CLAMP_TO_EDGE,minFilter:t.LINEAR,magFilter:t.LINEAR}),l.uploadImage(0,t.RGBA,c.width,c.height,0,t.RGBA,t.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=rl(c,u),f=el(c.indices,d.length/7),p=new Le(t,t.STATIC_DRAW,t.ARRAY_BUFFER);p.upload(d);let y=new yt(t,t.STATIC_DRAW);y.upload(f);let h=new Re(t);return h.configureAttributes(Ei,p),{vao:h,vertexBuffer:p,indexBuffer:y,indexCount:f.length,texture:c.texture,surfaceFlags:c.surfaceFlags??yr,lightmap:u,vertexData:d,indexData:f}}),lightmaps:s}}function mr(t){let{normal:e,distance:r}=t,n=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z);if(n===0)return t;let o=1/n;return{normal:{x:e.x*o,y:e.y*o,z:e.z*o},distance:r*o}}function ma(t){if(t.length!==16)throw new Error("View-projection matrix must contain 16 elements");let e=t[0],r=t[4],n=t[8],o=t[12],i=t[1],s=t[5],a=t[9],c=t[13],l=t[2],u=t[6],d=t[10],f=t[14],p=t[3],y=t[7],h=t[11],g=t[15];return[mr({normal:{x:p+e,y:y+r,z:h+n},distance:g+o}),mr({normal:{x:p-e,y:y-r,z:h-n},distance:g-o}),mr({normal:{x:p+i,y:y+s,z:h+a},distance:g+c}),mr({normal:{x:p-i,y:y-s,z:h-a},distance:g-c}),mr({normal:{x:p+l,y:y+u,z:h+d},distance:g+f}),mr({normal:{x:p-l,y:y-u,z:h-d},distance:g-f})]}function nl(t,e){return t.normal.x*e.x+t.normal.y*e.y+t.normal.z*e.z+t.distance}function bn(t,e,r){for(let n of r){let o=n.normal.x>=0?e.x:t.x,i=n.normal.y>=0?e.y:t.y,s=n.normal.z>=0?e.z:t.z;if(nl(n,{x:o,y:i,z:s})<0)return!1}return!0}function fa(t){return t<0}function pa(t){return-t-1}function ha(t,e){return t.normal[0]*e.x+t.normal[1]*e.y+t.normal[2]*e.z-t.dist}function ol(t,e,r){if(!t||e<0||r<0)return!0;let n=Math.ceil(t.numClusters/8),o=t.clusters[e].pvs,i=Math.floor(r/8),s=1<<r%8;return i<0||i>=n?!1:(o[i]&s)!==0}function il(t,e){let r={x:t.mins[0],y:t.mins[1],z:t.mins[2]},n={x:t.maxs[0],y:t.maxs[1],z:t.maxs[2]};return bn(r,n,e)}function zi(t,e){let r=0;for(;r>=0;){let n=t.nodes[r],o=t.planes[n.planeIndex],s=ha(o,e)>=0?0:1,a=n.children[s];if(fa(a))return pa(a);r=a}return-1}function sl(t,e){let r=t.leafs[e],n=[];for(let o=0;o<r.numLeafFaces;o+=1)n.push(t.leafLists.leafFaces[e][o]);return n}function Ti(t,e,r,n,o,i,s){if(fa(e)){let f=pa(e),p=t.leafs[f];if(!ol(t.visibility,o,p.cluster)||!il(p,n))return;let y={x:(p.mins[0]+p.maxs[0])*.5,y:(p.mins[1]+p.maxs[1])*.5,z:(p.mins[2]+p.maxs[2])*.5},h=y.x-r.x,g=y.y-r.y,b=y.z-r.z,T=-(h*h+g*g+b*b);for(let P of sl(t,f))s.has(P)||(s.add(P),i.push({faceIndex:P,leafIndex:f,sortKey:T}));return}let a=t.nodes[e],c=t.planes[a.planeIndex],l=ha(c,r),u=l>=0?a.children[0]:a.children[1],d=l>=0?a.children[1]:a.children[0];bn({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)&&(Ti(t,u,r,n,o,i,s),Ti(t,d,r,n,o,i,s))}function ya(t,e,r){let n=zi(t,e),o=n>=0?t.leafs[n].cluster:-1,i=[];return Ti(t,0,e,r,o,i,new Set),i}var Pi=`#version 300 es
|
|
142
|
+
precision highp float;
|
|
143
|
+
|
|
144
|
+
layout(location = 0) in vec3 a_position;
|
|
145
|
+
layout(location = 1) in vec2 a_texCoord;
|
|
146
|
+
layout(location = 2) in vec2 a_lightmapCoord;
|
|
147
|
+
|
|
148
|
+
uniform mat4 u_modelViewProjection;
|
|
149
|
+
uniform vec2 u_texScroll;
|
|
150
|
+
uniform vec2 u_lightmapScroll;
|
|
151
|
+
|
|
152
|
+
out vec2 v_texCoord;
|
|
153
|
+
out vec2 v_lightmapCoord;
|
|
154
|
+
|
|
155
|
+
vec2 applyScroll(vec2 uv, vec2 scroll) {
|
|
156
|
+
return uv + scroll;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
void main() {
|
|
160
|
+
v_texCoord = applyScroll(a_texCoord, u_texScroll);
|
|
161
|
+
v_lightmapCoord = applyScroll(a_lightmapCoord, u_lightmapScroll);
|
|
162
|
+
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
163
|
+
}`,Fi=`#version 300 es
|
|
164
|
+
precision highp float;
|
|
165
|
+
|
|
166
|
+
in vec2 v_texCoord;
|
|
167
|
+
in vec2 v_lightmapCoord;
|
|
168
|
+
|
|
169
|
+
uniform sampler2D u_diffuseMap;
|
|
170
|
+
uniform sampler2D u_lightmapAtlas;
|
|
171
|
+
uniform vec4 u_lightStyleFactors;
|
|
172
|
+
uniform float u_alpha;
|
|
173
|
+
uniform bool u_applyLightmap;
|
|
174
|
+
uniform bool u_warp;
|
|
175
|
+
uniform float u_time;
|
|
176
|
+
|
|
177
|
+
out vec4 o_color;
|
|
178
|
+
|
|
179
|
+
vec2 warpCoords(vec2 uv) {
|
|
180
|
+
// Quake II warp applies a subtle sinusoidal offset; we mirror the rerelease scale.
|
|
181
|
+
if (!u_warp) {
|
|
182
|
+
return uv;
|
|
183
|
+
}
|
|
184
|
+
float s = uv.x + sin(uv.y * 0.125 + u_time) * 0.125;
|
|
185
|
+
float t = uv.y + sin(uv.x * 0.125 + u_time) * 0.125;
|
|
186
|
+
return vec2(s, t);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
void main() {
|
|
190
|
+
vec2 warpedTex = warpCoords(v_texCoord);
|
|
191
|
+
vec4 base = texture(u_diffuseMap, warpedTex);
|
|
192
|
+
|
|
193
|
+
if (u_applyLightmap) {
|
|
194
|
+
vec3 light = texture(u_lightmapAtlas, warpCoords(v_lightmapCoord)).rgb;
|
|
195
|
+
float styleScale = dot(u_lightStyleFactors, vec4(1.0));
|
|
196
|
+
base.rgb *= light * styleScale;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
o_color = vec4(base.rgb, base.a * u_alpha);
|
|
200
|
+
}`,ga=[0,255,255,255];function Ii(t=ga,e=[]){let r=new Float32Array(4);for(let n=0;n<4;n+=1){let o=t[n]??255;if(o===255){r[n]=0;continue}let i=e[o];r[n]=i!==void 0?i:1}return r}function al(t){return[-(t*.25%1),0]}function ki(t=yr,e=0){let r=(t&is)!==0,n=(t&rs)!==0,o=(t&ts)!==0,i=(t&ns)!==0,s=(t&os)!==0,a=i?.33:s?.66:1,c=i||s,l=!c&&!o,u=r?al(e):[0,0];return{alpha:a,blend:c,depthWrite:l,warp:n,flowOffset:u,sky:o}}var ko=class{constructor(e){this.gl=e,this.program=Me.create(e,{vertex:Pi,fragment:Fi},{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:r,styleIndices:n=ga,styleValues:o=[],diffuseSampler:i=0,lightmapSampler:s=1,surfaceFlags:a=yr,timeSeconds:c=0}=e,l=ki(a,c),u=Ii(n,o);return this.program.use(),this.gl.uniformMatrix4fv(this.uniformMvp,!1,r),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 xa(t,e){t.depthMask(e.depthWrite),e.blend?(t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA)):t.disable(t.BLEND)}var ba=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]),Ri=`#version 300 es
|
|
201
|
+
precision highp float;
|
|
202
|
+
|
|
203
|
+
layout(location = 0) in vec3 a_position;
|
|
204
|
+
|
|
205
|
+
uniform mat4 u_viewProjectionNoTranslation;
|
|
206
|
+
uniform vec2 u_scroll;
|
|
207
|
+
|
|
208
|
+
out vec3 v_direction;
|
|
209
|
+
|
|
210
|
+
void main() {
|
|
211
|
+
vec3 dir = normalize(a_position);
|
|
212
|
+
dir.xy += u_scroll;
|
|
213
|
+
v_direction = dir;
|
|
214
|
+
gl_Position = u_viewProjectionNoTranslation * vec4(a_position, 1.0);
|
|
215
|
+
}`,Hi=`#version 300 es
|
|
216
|
+
precision highp float;
|
|
217
|
+
|
|
218
|
+
in vec3 v_direction;
|
|
219
|
+
uniform samplerCube u_skybox;
|
|
220
|
+
|
|
221
|
+
out vec4 o_color;
|
|
222
|
+
|
|
223
|
+
void main() {
|
|
224
|
+
o_color = texture(u_skybox, v_direction);
|
|
225
|
+
}`,Ro=class{constructor(e){this.gl=e,this.program=Me.create(e,{vertex:Ri,fragment:Hi},{a_position:0}),this.vao=new Re(e),this.vbo=new Le(e,e.STATIC_DRAW),this.vbo.upload(ba,e.STATIC_DRAW);let r=[{index:0,size:3,type:e.FLOAT,stride:12,offset:0}];this.vao.configureAttributes(r,this.vbo),this.uniformViewProj=this.program.getUniformLocation("u_viewProjectionNoTranslation"),this.uniformScroll=this.program.getUniformLocation("u_scroll"),this.uniformSampler=this.program.getUniformLocation("u_skybox"),this.cubemap=new dr(e),this.cubemap.setParameters({minFilter:e.LINEAR,magFilter:e.LINEAR,wrapS:e.CLAMP_TO_EDGE,wrapT:e.CLAMP_TO_EDGE})}bind(e){let{viewProjection:r,scroll:n,textureUnit:o=0}=e;this.program.use(),this.gl.depthMask(!1),this.gl.uniformMatrix4fv(this.uniformViewProj,!1,r),this.gl.uniform2f(this.uniformScroll,n[0],n[1]),this.gl.uniform1i(this.uniformSampler,o),this.cubemap.bind(o),this.vao.bind()}draw(){this.gl.drawArrays(this.gl.TRIANGLES,0,ba.length/3)}dispose(){this.vbo.dispose(),this.vao.dispose(),this.cubemap.dispose(),this.program.dispose()}};function Sa(t){let e=t.slice();return e[12]=0,e[13]=0,e[14]=0,e}function va(t,e=[.01,.02]){let[r,n]=e;return[r*t,n*t]}var Ni=`#version 300 es
|
|
226
|
+
precision highp float;
|
|
227
|
+
|
|
228
|
+
layout(location = 0) in vec3 a_position;
|
|
229
|
+
layout(location = 1) in vec3 a_normal;
|
|
230
|
+
layout(location = 2) in vec2 a_texCoord;
|
|
231
|
+
|
|
232
|
+
uniform mat4 u_modelViewProjection;
|
|
233
|
+
uniform vec3 u_lightDir;
|
|
234
|
+
|
|
235
|
+
out vec2 v_texCoord;
|
|
236
|
+
out float v_light;
|
|
237
|
+
|
|
238
|
+
void main() {
|
|
239
|
+
vec3 normal = normalize(a_normal);
|
|
240
|
+
v_light = max(dot(normal, normalize(u_lightDir)), 0.0);
|
|
241
|
+
v_texCoord = a_texCoord;
|
|
242
|
+
gl_Position = u_modelViewProjection * vec4(a_position, 1.0);
|
|
243
|
+
}`,Oi=`#version 300 es
|
|
244
|
+
precision highp float;
|
|
245
|
+
|
|
246
|
+
in vec2 v_texCoord;
|
|
247
|
+
in float v_light;
|
|
248
|
+
|
|
249
|
+
uniform sampler2D u_diffuseMap;
|
|
250
|
+
uniform vec4 u_tint;
|
|
251
|
+
|
|
252
|
+
out vec4 o_color;
|
|
253
|
+
|
|
254
|
+
void main() {
|
|
255
|
+
vec4 albedo = texture(u_diffuseMap, v_texCoord) * u_tint;
|
|
256
|
+
o_color = vec4(albedo.rgb * v_light, albedo.a);
|
|
257
|
+
}`;function cl(t){let e=t.x*t.x+t.y*t.y+t.z*t.z;if(e<=0)return{x:0,y:0,z:1};let r=1/Math.sqrt(e);return{x:t.x*r,y:t.y*r,z:t.z*r}}function Di(t,e,r){return t+(e-t)*r}function _a(t,e,r){return{x:Di(t.x,e.x,r),y:Di(t.y,e.y,r),z:Di(t.z,e.z,r)}}function ll(t,e,r){return[t/r.skinWidth,1-e/r.skinHeight]}function Bi(t){if(t.glCommands.length===0){let n=[],o=[];return t.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=t.texCoords[l];n.push({vertexIndex:c,texCoord:ll(u.s,u.t,t.header)})}o.push(s,s+1,s+2)}),{vertices:n,indices:new Uint16Array(o)}}let e=[],r=[];for(let n of t.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;r.push(a,c,l)}else for(let i=1;i<n.vertices.length-1;i+=1)r.push(o,o+i,o+i+1)}return{vertices:e,indices:new Uint16Array(r)}}function Vi(t,e,r){let{currentFrame:n,nextFrame:o,lerp:i}=r,s=t.frames[n],a=t.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],f=a.vertices[l.vertexIndex];if(!d||!f)throw new Error("MD2 vertex index out of range for frame");let p=_a(d.position,f.position,i),y=cl(_a(d.normal,f.normal,i)),h=u*8;c[h]=p.x,c[h+1]=p.y,c[h+2]=p.z,c[h+3]=y.x,c[h+4]=y.y,c[h+5]=y.z,c[h+6]=l.texCoord[0],c[h+7]=l.texCoord[1]}),c}var Ho=class{constructor(e,r,n){this.gl=e,this.geometry=Bi(r),this.vertexBuffer=new Le(e,e.STATIC_DRAW),this.indexBuffer=new yt(e,e.STATIC_DRAW),this.vertexArray=new Re(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(r,n)}update(e,r){let n=Vi(e,this.geometry,r);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()}},Do=class{constructor(e){this.gl=e,this.program=Me.create(e,{vertex:Ni,fragment:Oi},{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:r,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,r),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()}};function ul(t){return{init(){t.trace({x:0,y:0,z:0},{x:0,y:0,z:0})},shutdown(){},createMainLoop(e,r){return new gt(e,r)}}}return Ra(dl);})();
|
|
2
258
|
//# sourceMappingURL=index.global.js.map
|