deadem
Version:
Deadlock (Source 2) demo and replay parser with playback support for Node.js and browsers
1 lines • 548 kB
JavaScript
(function(q,y){typeof exports=="object"&&typeof module<"u"?y(exports):typeof define=="function"&&define.amd?define(["exports"],y):(q=typeof globalThis<"u"?globalThis:q||self,y(q.deadem={}))})(this,function(q){"use strict";var th=Object.defineProperty;var rh=(q,y,M)=>y in q?th(q,y,{enumerable:!0,configurable:!0,writable:!0,value:M}):q[y]=M;var Vt=(q,y,M)=>rh(q,typeof y!="symbol"?y+"":y,M);class y{static isTrue(e,t="Assertion failed"){if(!e)throw new Error(t)}}class M{constructor(e,t,r,i){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(Number.isInteger(t)),y.isTrue(typeof r=="boolean"),y.isTrue(typeof i=="boolean"),this._code=e,this._id=t,this._heavy=r,this._bootstrap=i}get code(){return this._code}get id(){return this._id}get bootstrap(){return this._bootstrap}get heavy(){return this._heavy}static get DEM_ERROR(){return On}static get DEM_STOP(){return Rn}static get DEM_FILE_HEADER(){return Dn}static get DEM_FILE_INFO(){return kn}static get DEM_SYNC_TICK(){return Un}static get DEM_SEND_TABLES(){return Ln}static get DEM_CLASS_INFO(){return Bn}static get DEM_STRING_TABLES(){return Fn}static get DEM_PACKET(){return xn}static get DEM_SIGNON_PACKET(){return Vn}static get DEM_CONSOLE_CMD(){return Gn}static get DEM_CUSTOM_DATA(){return zn}static get DEM_CUSTOM_DATA_CALLBACKS(){return jn}static get DEM_USER_CMD(){return Hn}static get DEM_FULL_PACKET(){return qn}static get DEM_SAVE_GAME(){return Yn}static get DEM_SPAWN_GROUPS(){return $n}static get DEM_ANIMATION_DATA(){return Kn}static get DEM_ANIMATION_HEADER(){return Wn}static get DEM_RECOVERY(){return Jn}}const On=new M("DEM_Error",-1,!1,!1),Rn=new M("DEM_Stop",0,!1,!1),Dn=new M("DEM_FileHeader",1,!1,!0),kn=new M("DEM_FileInfo",2,!1,!1),Un=new M("DEM_SyncTick",3,!1,!1),Ln=new M("DEM_SendTables",4,!1,!0),Bn=new M("DEM_ClassInfo",5,!1,!0),Fn=new M("DEM_StringTables",6,!1,!0),xn=new M("DEM_Packet",7,!0,!1),Vn=new M("DEM_SignonPacket",8,!0,!0),Gn=new M("DEM_ConsoleCmd",9,!1,!1),zn=new M("DEM_CustomData",10,!1,!1),jn=new M("DEM_CustomDataCallbacks",11,!1,!1),Hn=new M("DEM_UserCmd",12,!1,!1),qn=new M("DEM_FullPacket",13,!0,!1),Yn=new M("DEM_SaveGame",14,!1,!1),$n=new M("DEM_SpawnGroups",15,!1,!1),Kn=new M("DEM_AnimationData",16,!1,!1),Wn=new M("DEM_AnimationHeader",17,!1,!1),Jn=new M("DEM_Recovery",18,!1,!1);let C=class{constructor(e,t){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(Number.isInteger(t)),this._code=e,this._id=t}get code(){return this._code}get id(){return this._id}static get NET_TICK(){return Zn}static get NET_SET_CON_VAR(){return Xn}static get NET_SIGNON_STATE(){return Qn}static get NET_SPAWN_GROUP_LOAD(){return eo}static get NET_SPAWN_GROUP_MANIFEST_UPDATE(){return to}static get NET_SPAWN_GROUP_SET_CREATION_TICK(){return ro}static get SVC_SERVER_INFO(){return io}static get SVC_CLASS_INFO(){return so}static get SVC_CREATE_STRING_TABLE(){return no}static get SVC_UPDATE_STRING_TABLE(){return oo}static get SVC_VOICE_INIT(){return ao}static get SVC_VOICE_DATA(){return lo}static get SVC_CLEAR_ALL_STRING_TABLES(){return uo}static get SVC_PACKET_ENTITIES(){return co}static get SVC_HLTV_STATUS(){return ho}static get SVC_USER_COMMANDS(){return _o}static get USER_MESSAGE_SAY_TEXT_2(){return po}static get USER_MESSAGE_TEXT_MSG(){return fo}static get USER_MESSAGE_VOICE_MASK(){return go}static get USER_MESSAGE_SEND_AUDIO(){return yo}static get USER_MESSAGE_PARTICLE_MANAGER(){return Eo}static get USER_MESSAGE_PLAY_RESPONSE_CONDITIONAL(){return mo}static get ENTITY_MESSAGE_REMOVE_ALL_DECALS(){return To}static get GE_PLACE_DECAL_EVENT(){return So}static get GE_SOURCE1_LEGACY_GAME_EVENT_LIST(){return Ao}static get GE_SOURCE1_LEGACY_GAME_EVENT(){return vo}static get GE_SOS_START_SOUND_EVENT(){return wo}static get GE_SOS_STOP_SOUND_EVENT(){return No}static get GE_SOS_SET_SOUND_EVENT_PARAMS(){return Co}static get GE_SOS_STOP_SOUND_EVENT_HASH(){return Io}static get TE_EFFECT_DISPATCH(){return bo}};const Zn=new C("net_Tick",4),Xn=new C("net_SetConVar",6),Qn=new C("net_SignonState",7),eo=new C("net_SpawnGroup_Load",8),to=new C("net_SpawnGroup_ManifestUpdate",9),ro=new C("net_SpawnGroup_SetCreationTick",11),io=new C("svc_ServerInfo",40),so=new C("svc_ClassInfo",42),no=new C("svc_CreateStringTable",44),oo=new C("svc_UpdateStringTable",45),ao=new C("svc_VoiceInit",46),lo=new C("svc_VoiceData",47),uo=new C("svc_ClearAllStringTables",51),co=new C("svc_PacketEntities",55),ho=new C("svc_HLTVStatus",62),_o=new C("svc_UserCmds",76),po=new C("UM_SayText2",118),fo=new C("UM_TextMsg",124),go=new C("UM_VoiceMask",128),yo=new C("UM_SendAudio",130),Eo=new C("UM_ParticleManager",145),mo=new C("UM_PlayResponseConditional",166),To=new C("EM_RemoveAllDecals",138),So=new C("GE_PlaceDecalEvent",201),Ao=new C("GE_Source1LegacyGameEventList",205),vo=new C("GE_Source1LegacyGameEvent",207),wo=new C("GE_SosStartSoundEvent",208),No=new C("GE_SosStopSoundEvent",209),Co=new C("GE_SosSetSoundEventParams",210),Io=new C("GE_SosStopSoundEventHash",212),bo=new C("TE_EffectDispatch",400);let x=class Pn{constructor(e,t,r=!1,i=!1){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(typeof t=="string"&&t.length>0),y.isTrue(typeof r=="boolean"),y.isTrue(typeof i=="boolean"),this._code=e,this._name=t,this._synthesized=r,this._lazy=i}get code(){return this._code}get name(){return this._name}get synthesized(){return this._synthesized}get lazy(){return this._lazy}static synthesize(e){return new Pn(e.toUpperCase(),e,!0)}static get DECAL_PRE_CACHE(){return Mo}static get EFFECT_DISPATCH(){return Po}static get ENTITY_NAMES(){return Oo}static get GENERIC_PRE_CACHE(){return Ro}static get INFO_PANEL(){return Do}static get INSTANCE_BASE_LINE(){return ko}static get LIGHT_STYLES(){return Uo}static get RESPONSE_KEYS(){return Lo}static get SCENES(){return Bo}static get SERVER_QUERY_INFO(){return Fo}static get USER_INFO(){return xo}static get V_GUI_SCREEN(){return Vo}static get ANIM_TASK_TYPES(){return Go}static get ANIM_ASSET_DATA(){return zo}};const Mo=new x("DECAL_PRE_CACHE","decalprecache"),Po=new x("EFFECT_DISPATCH","EffectDispatch"),Oo=new x("ENTITY_NAMES","EntityNames"),Ro=new x("GENERIC_PRE_CACHE","genericprecache"),Do=new x("INFO_PANEL","InfoPanel"),ko=new x("INSTANCE_BASE_LINE","instancebaseline"),Uo=new x("LIGHT_STYLES","lightstyles"),Lo=new x("RESPONSE_KEYS","ResponseKeys"),Bo=new x("SCENES","Scenes"),Fo=new x("SERVER_QUERY_INFO","server_query_info"),xo=new x("USER_INFO","userinfo"),Vo=new x("V_GUI_SCREEN","VguiScreen"),Go=new x("ANIM_TASK_TYPES","AnimTaskTypes"),zo=new x("ANIM_ASSET_DATA","AnimAssetData"),Gt=new Map;class P{constructor(e){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(!Gt.has(e),`Duplicated field decoder type [ ${e} ]`),this._code=e,Gt.set(e,this)}get code(){return this._code}static parse(e){y.isTrue(typeof e=="string"&&e.length>0);const t=Gt.get(e)||null;if(t===null)throw new Error(`Unknown field decoder type [ ${e} ]`);return t}static get BINARY_BLOCK(){return jo}static get BOOLEAN(){return Ho}static get COORDINATE(){return qo}static get DYNAMIC_FLOAT_32(){return Yo}static get DYNAMIC_UINT_64(){return $o}static get FIXED_UINT_64(){return Ko}static get GAME_MODE_RULES(){return Wo}static get NO_SCALE(){return Jo}static get NORMAL_VECTOR(){return Zo}static get QANGLE(){return Xo}static get QUANTIZED_FLOAT(){return Qo}static get SIMULATION_TIME(){return ea}static get STRING(){return ta}static get VAR_INT_32(){return ra}static get VAR_INT_64(){return ia}static get VAR_UINT_32(){return sa}static get VAR_UINT_64(){return na}static get VECTOR(){return oa}}const jo=new P("BINARY_BLOCK"),Ho=new P("BOOLEAN"),qo=new P("COORDINATE"),Yo=new P("DYNAMIC_FLOAT_32"),$o=new P("DYNAMIC_UINT_64"),Ko=new P("FIXED_UINT_64"),Wo=new P("GAME_MODE_RULES"),Jo=new P("NO_SCALE"),Zo=new P("NORMAL_VECTOR"),Xo=new P("QANGLE"),Qo=new P("QUANTIZED_FLOAT"),ea=new P("SIMULATION_TIME"),ta=new P("STRING"),ra=new P("VAR_INT_32"),ia=new P("VAR_INT_64"),sa=new P("VAR_UINT_32"),na=new P("VAR_UINT_64"),oa=new P("VECTOR");class O{constructor(e,t={}){y.isTrue(e instanceof P),y.isTrue(t!==null&&typeof t=="object"&&!Array.isArray(t)),this._type=e,this._options=t}get type(){return this._type}get options(){return this._options}export(){return{type:this._type.code,options:this._options}}static createVector(e){return y.isTrue(Number.isInteger(e)&&e>=2&&e<=4),new O(P.VECTOR,{dimension:e})}static reconstruct(e){return y.isTrue(e!==null&&typeof e=="object"),new O(P.parse(e.type),e.options||{})}static get BINARY_BLOCK(){return aa}static get BOOLEAN(){return la}static get COORDINATE(){return ua}static get DYNAMIC_FLOAT_32(){return da}static get DYNAMIC_UINT_64(){return ca}static get FIXED_UINT_64(){return ha}static get GAME_MODE_RULES(){return _a}static get NO_SCALE(){return pa}static get NORMAL_VECTOR(){return fa}static get QANGLE(){return ga}static get QUANTIZED_FLOAT(){return ya}static get SIMULATION_TIME(){return Ea}static get STRING(){return ma}static get VAR_INT_32(){return Ta}static get VAR_INT_64(){return Sa}static get VAR_UINT_32(){return Aa}static get VAR_UINT_64(){return va}}const aa=new O(P.BINARY_BLOCK),la=new O(P.BOOLEAN),ua=new O(P.COORDINATE),da=new O(P.DYNAMIC_FLOAT_32),ca=new O(P.DYNAMIC_UINT_64),ha=new O(P.FIXED_UINT_64),_a=new O(P.GAME_MODE_RULES),pa=new O(P.NO_SCALE),fa=new O(P.NORMAL_VECTOR),ga=new O(P.QANGLE),ya=new O(P.QUANTIZED_FLOAT),Ea=new O(P.SIMULATION_TIME),ma=new O(P.STRING),Ta=new O(P.VAR_INT_32),Sa=new O(P.VAR_INT_64),Aa=new O(P.VAR_UINT_32),va=new O(P.VAR_UINT_64);let wa=class _t{static run(e){_t._registerDemoPacketTypes(e),_t._registerFieldRules(e),_t._registerMessagePacketTypes(e),_t._registerStringTableTypes(e);const t=e.getProtoProvider();e.setSendTablesSerializerDecoder(t.NET_MESSAGES.lookupType("CSVCMsg_FlattenedSerializer"))}static _registerDemoPacketTypes(e){const t=e.getProtoProvider();e.registerDemoType(M.DEM_STOP,t.DEMO.lookupType("CDemoStop")),e.registerDemoType(M.DEM_FILE_HEADER,t.DEMO.lookupType("CDemoFileHeader")),e.registerDemoType(M.DEM_FILE_INFO,t.DEMO.lookupType("CDemoFileInfo")),e.registerDemoType(M.DEM_SYNC_TICK,t.DEMO.lookupType("CDemoSyncTick")),e.registerDemoType(M.DEM_SEND_TABLES,t.DEMO.lookupType("CDemoSendTables")),e.registerDemoType(M.DEM_CLASS_INFO,t.DEMO.lookupType("CDemoClassInfo")),e.registerDemoType(M.DEM_STRING_TABLES,t.DEMO.lookupType("CDemoStringTables")),e.registerDemoType(M.DEM_PACKET,t.DEMO.lookupType("CDemoPacket")),e.registerDemoType(M.DEM_SIGNON_PACKET,t.DEMO.lookupType("CDemoPacket")),e.registerDemoType(M.DEM_CONSOLE_CMD,t.DEMO.lookupType("CDemoConsoleCmd")),e.registerDemoType(M.DEM_CUSTOM_DATA,t.DEMO.lookupType("CDemoCustomData")),e.registerDemoType(M.DEM_CUSTOM_DATA_CALLBACKS,t.DEMO.lookupType("CDemoCustomDataCallbacks")),e.registerDemoType(M.DEM_USER_CMD,t.DEMO.lookupType("CDemoUserCmd")),e.registerDemoType(M.DEM_FULL_PACKET,t.DEMO.lookupType("CDemoFullPacket")),e.registerDemoType(M.DEM_SAVE_GAME,t.DEMO.lookupType("CDemoSaveGame")),e.registerDemoType(M.DEM_SPAWN_GROUPS,t.DEMO.lookupType("CDemoSpawnGroups")),e.registerDemoType(M.DEM_ANIMATION_DATA,t.DEMO.lookupType("CDemoAnimationData")),e.registerDemoType(M.DEM_ANIMATION_HEADER,t.DEMO.lookupType("CDemoAnimationHeader")),e.registerDemoType(M.DEM_RECOVERY,t.DEMO.lookupType("CDemoRecovery"))}static _registerFieldRules(e){e.registerFieldTypeDecoder("bool",O.BOOLEAN),e.registerFieldTypeDecoder("CBodyComponent",O.BOOLEAN),e.registerFieldTypeDecoder("CPhysicsComponent",O.BOOLEAN),e.registerFieldTypeDecoder("CRenderComponent",O.BOOLEAN),e.registerFieldTypeDecoder("GameTime_t",O.NO_SCALE),e.registerFieldTypeDecoder("char",O.STRING),e.registerFieldTypeDecoder("CUtlString",O.STRING),e.registerFieldTypeDecoder("CUtlSymbolLarge",O.STRING),e.registerFieldTypeDecoder("int8",O.VAR_INT_32),e.registerFieldTypeDecoder("int16",O.VAR_INT_32),e.registerFieldTypeDecoder("int32",O.VAR_INT_32),e.registerFieldTypeDecoder("int64",O.VAR_INT_64),e.registerFieldTypeDecoder("float32",O.DYNAMIC_FLOAT_32),e.registerFieldTypeDecoder("QAngle",O.QANGLE),e.registerFieldTypeDecoder("CNetworkedQuantizedFloat",O.QUANTIZED_FLOAT),e.registerFieldTypeDecoder("uint64",O.DYNAMIC_UINT_64),e.registerFieldTypeDecoder("CStrongHandle",O.DYNAMIC_UINT_64),e.registerFieldTypeDecoder("ResourceId_t",O.DYNAMIC_UINT_64),e.registerFieldTypeDecoder("Vector2D",O.createVector(2)),e.registerFieldTypeDecoder("Vector",O.createVector(3)),e.registerFieldTypeDecoder("VectorWS",O.createVector(3)),e.registerFieldTypeDecoder("Vector4D",O.createVector(4)),e.registerFixedTableType("CBodyComponent"),e.registerFixedTableType("CEntityComponent"),e.registerFixedTableType("CEntityIdentity"),e.registerFixedTableType("CEntityInstance"),e.registerFixedTableType("CPhysicsComponent"),e.registerFixedTableType("CPlayerLocalData"),e.registerFixedTableType("CRenderComponent"),e.registerFixedTableType("CScriptComponent"),e.registerVariableArrayType("CUtlVector"),e.registerVariableArrayType("CUtlVectorEmbeddedNetworkVar"),e.registerVariableArrayType("CNetworkUtlVectorBase"),e.registerFieldEncoderOverride("m_flSimulationTime","simtime"),e.registerFieldEncoderOverride("m_flAnimTime","simtime")}static _registerMessagePacketTypes(e){const t=e.getProtoProvider();e.registerMessageType(C.NET_TICK,t.NETWORK_BASE_TYPES.lookupType("CNETMsg_Tick")),e.registerMessageType(C.NET_SET_CON_VAR,t.NETWORK_BASE_TYPES.lookupType("CNETMsg_SetConVar")),e.registerMessageType(C.NET_SIGNON_STATE,t.NETWORK_BASE_TYPES.lookupType("CNETMsg_SignonState")),e.registerMessageType(C.NET_SPAWN_GROUP_LOAD,t.NET_MESSAGES.lookupType("CNETMsg_SpawnGroup_Load")),e.registerMessageType(C.NET_SPAWN_GROUP_MANIFEST_UPDATE,t.NET_MESSAGES.lookupType("CNETMsg_SpawnGroup_ManifestUpdate")),e.registerMessageType(C.NET_SPAWN_GROUP_SET_CREATION_TICK,t.NET_MESSAGES.lookupType("CNETMsg_SpawnGroup_SetCreationTick")),e.registerMessageType(C.SVC_SERVER_INFO,t.NET_MESSAGES.lookupType("CSVCMsg_ServerInfo")),e.registerMessageType(C.SVC_CLASS_INFO,t.NET_MESSAGES.lookupType("CSVCMsg_ClassInfo")),e.registerMessageType(C.SVC_CREATE_STRING_TABLE,t.NET_MESSAGES.lookupType("CSVCMsg_CreateStringTable")),e.registerMessageType(C.SVC_UPDATE_STRING_TABLE,t.NET_MESSAGES.lookupType("CSVCMsg_UpdateStringTable")),e.registerMessageType(C.SVC_VOICE_INIT,t.NET_MESSAGES.lookupType("CSVCMsg_VoiceInit")),e.registerMessageType(C.SVC_VOICE_DATA,t.NET_MESSAGES.lookupType("CSVCMsg_VoiceData")),e.registerMessageType(C.SVC_CLEAR_ALL_STRING_TABLES,t.NET_MESSAGES.lookupType("CSVCMsg_ClearAllStringTables")),e.registerMessageType(C.SVC_PACKET_ENTITIES,t.NET_MESSAGES.lookupType("CSVCMsg_PacketEntities")),e.registerMessageType(C.SVC_HLTV_STATUS,t.NET_MESSAGES.lookupType("CSVCMsg_HLTVStatus")),e.registerMessageType(C.SVC_USER_COMMANDS,t.NET_MESSAGES.lookupType("CSVCMsg_UserCommands")),e.registerMessageType(C.USER_MESSAGE_SAY_TEXT_2,t.USER_MESSAGES.lookupType("CUserMessageSayText2")),e.registerMessageType(C.USER_MESSAGE_TEXT_MSG,t.USER_MESSAGES.lookupType("CUserMessageTextMsg")),e.registerMessageType(C.USER_MESSAGE_VOICE_MASK,t.USER_MESSAGES.lookupType("CUserMessageVoiceMask")),e.registerMessageType(C.USER_MESSAGE_SEND_AUDIO,t.USER_MESSAGES.lookupType("CUserMessageSendAudio")),e.registerMessageType(C.USER_MESSAGE_PARTICLE_MANAGER,t.USER_MESSAGES.lookupType("CUserMsg_ParticleManager")),e.registerMessageType(C.USER_MESSAGE_PLAY_RESPONSE_CONDITIONAL,t.USER_MESSAGES.lookupType("CUserMessage_PlayResponseConditional")),e.registerMessageType(C.GE_PLACE_DECAL_EVENT,t.GAME_EVENTS.lookupType("CMsgPlaceDecalEvent")),e.registerMessageType(C.GE_SOURCE1_LEGACY_GAME_EVENT_LIST,t.GAME_EVENTS.lookupType("CMsgSource1LegacyGameEventList")),e.registerMessageType(C.GE_SOURCE1_LEGACY_GAME_EVENT,t.GAME_EVENTS.lookupType("CMsgSource1LegacyGameEvent")),e.registerMessageType(C.GE_SOS_START_SOUND_EVENT,t.GAME_EVENTS.lookupType("CMsgSosStartSoundEvent")),e.registerMessageType(C.GE_SOS_STOP_SOUND_EVENT,t.GAME_EVENTS.lookupType("CMsgSosStopSoundEvent")),e.registerMessageType(C.GE_SOS_SET_SOUND_EVENT_PARAMS,t.GAME_EVENTS.lookupType("CMsgSosSetSoundEventParams")),e.registerMessageType(C.GE_SOS_STOP_SOUND_EVENT_HASH,t.GAME_EVENTS.lookupType("CMsgSosStopSoundEventHash")),e.registerMessageType(C.TE_EFFECT_DISPATCH,t.TEMPORARY_ENTITIES.lookupType("CMsgTEEffectDispatch"))}static _registerStringTableTypes(e){const r=e.getProtoProvider().NETWORK_BASE_TYPES.lookupType("CMsgPlayerInfo");e.registerStringTableType(x.DECAL_PRE_CACHE),e.registerStringTableType(x.EFFECT_DISPATCH),e.registerStringTableType(x.ENTITY_NAMES),e.registerStringTableType(x.GENERIC_PRE_CACHE),e.registerStringTableType(x.INFO_PANEL),e.registerStringTableType(x.INSTANCE_BASE_LINE),e.registerStringTableType(x.LIGHT_STYLES),e.registerStringTableType(x.RESPONSE_KEYS),e.registerStringTableType(x.SCENES),e.registerStringTableType(x.SERVER_QUERY_INFO),e.registerStringTableType(x.USER_INFO,i=>r.decode(i)),e.registerStringTableType(x.V_GUI_SCREEN),e.registerStringTableType(x.ANIM_TASK_TYPES),e.registerStringTableType(x.ANIM_ASSET_DATA)}};class Na extends ReadableStream{constructor(e,t={}){y.isTrue(e instanceof yi),super({start(r){e.subscribe(i=>{i===null?r.close():r.enqueue(i)})}},t),this._agent=e}start(){this._agent.start()}stop(){this._agent.stop()}}class _e{constructor(e){this._logger=e}debug(...e){return this._logger.debug(...e)}error(...e){return this._logger.error(...e)}info(...e){return this._logger.info(...e)}trace(...e){return this._logger.trace(...e)}warn(...e){return this._logger.warn(...e)}static get CONSOLE_DEBUG(){return Ca}static get CONSOLE_INFO(){return Ia}static get CONSOLE_TRACE(){return ba}static get CONSOLE_WARN(){return Ma}static get NOOP(){return Pa}}const Ca=new _e({debug:hi,error:pt,info:zt,trace:Te,warn:ft}),Ia=new _e({debug:Te,error:pt,info:zt,trace:Te,warn:ft}),ba=new _e({debug:hi,error:pt,info:zt,trace:Oa,warn:ft}),Ma=new _e({debug:Te,error:pt,info:Te,trace:Te,warn:ft}),Pa=new _e({debug:Te,error:Te,info:Te,trace:Te,warn:Te}),Qe=(a,e)=>`\x1B[${a}m[${new Date().toISOString()}] [${e}]\x1B[0m -`;function hi(...a){console.debug(Qe(34,"DEBUG"),...a)}function pt(...a){console.error(Qe(31,"ERROR"),...a)}function zt(...a){console.info(Qe(32,"INFO"),...a)}function Oa(...a){console.trace(Qe(37,"TRACE"),...a)}function ft(...a){console.warn(Qe(33,"WARN"),...a)}function Te(){}class De{constructor(){this._fulfilled=!1,this._rejected=!1,this._settled=!1,this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}get fulfilled(){return this._fulfilled}get promise(){return this._promise}get rejected(){return this._rejected}get settled(){return this._settled}resolve(...e){this._fulfilled=!0,this._settled=!0,this._resolve(...e)}reject(...e){this._rejected=!0,this._settled=!0,this._reject(...e)}}const Ra=new Map;class ve{constructor(e,t){y.isTrue(typeof e=="string"),y.isTrue(typeof t=="string"),this._code=e,this._endpoint=t,Ra.set(e,this)}get code(){return this._code}get endpoint(){return this._endpoint}static get DELTA(){return Da}static get FULL(){return ka}static get START(){return Ua}}const Da=new ve("DELTA","delta"),ka=new ve("FULL","full"),Ua=new ve("START","start"),La=new Map;class et{constructor(e,t){y.isTrue(typeof e=="string"),y.isTrue(typeof t=="string"),this._code=e,this._scheme=t,La.set(e,this)}get code(){return this._code}get scheme(){return this._scheme}static get HTTP(){return Ba}static get HTTPS(){return Fa}}const Ba=new et("HTTP","http"),Fa=new et("HTTPS","https");class _i{constructor(e,t=et.HTTPS){y.isTrue(typeof e=="string"),y.isTrue(t instanceof et),this._baseUrl=e,this._protocol=t}async getFragment(e,t,r){y.isTrue(Number.isInteger(e)||typeof e=="string"),y.isTrue(t instanceof ve),y.isTrue(Number.isInteger(r)&&r>=0);const i=await fetch(`${this._protocol.scheme}://${this._baseUrl}/${e}/${r}/${t.endpoint}`);if(!i.ok)throw this._createHttpError(i);return new Uint8Array(await i.arrayBuffer())}async getSync(e){y.isTrue(Number.isInteger(e)||typeof e=="string");const t=await fetch(`${this._protocol.scheme}://${this._baseUrl}/${e}/sync`);if(!t.ok)throw this._createHttpError(t);return t.json()}_createHttpError(e){const t=new Error(`HTTP code [ ${e.status} ]`);return t.details={status:e.status,statusText:e.statusText,url:e.url},t}}const pi=1e3,fi=5,gi=30*1e3;class yi{constructor(e,t,r=_e.CONSOLE_DEBUG){y.isTrue(e instanceof _i),y.isTrue(Number.isInteger(t)||typeof t=="string"),y.isTrue(r instanceof _e),this._gateway=e,this._match=t,this._logger=r,this._listeners=[],this._finished=!1,this._paused=!1,this._started=!1,this._pause=new De,this._pause.resolve()}get finished(){return this._finished}get paused(){return this._paused}get started(){return this._started}pause(){if(this._finished)throw new Error("Unable to pause BroadcastAgent - it has been finished");if(!this._started)throw new Error("Unable to pause BroadcastAgent - it hasn't been started");this._paused||(this._pause=new De,this._paused=!0)}resume(){if(this._finished)throw new Error("Unable to resume BroadcastAgent - it has been finished");if(!this._started)throw new Error("Unable to resume BroadcastAgent - it hasn't been started");this._paused&&(this._pause.resolve(),this._paused=!1)}start(e=!1){if(this._finished)throw new Error("Unable to start BroadcastAgent - it has been already started");if(this._started)throw new Error("Unable to start BroadcastAgent - it has been already started");this._started=!0,(async()=>{this._logger.debug("Querying [ SYNC ]");let r=await this._getSync(),i;e?i=1:i=Math.max(1,r.fragment-4),this._logger.debug(`Querying [ ${ve.START.code} ] [ ${r.signup_fragment} ]`);const s=await this._getFragment(ve.START,r.signup_fragment);await this._pause.promise,this._send(s),this._logger.debug(`Querying [ ${ve.FULL.code} ] [ ${i} ]`);const n=await this._getFragment(ve.FULL,i);await this._pause.promise,this._send(n);let o=Date.now();for(;;){if(Date.now()-o>gi){this._logger.debug(`BroadcastAgent is inactive for [ ${gi} ] milliseconds. Finishing...`),this.stop();break}if(i>r.fragment){this._logger.debug("Querying [ SYNC ]"),r=await this._getSync(),await jt(pi);continue}this._logger.debug(`Querying [ ${ve.DELTA.code} ] [ ${i} ]`);const l=await this._getFragment(ve.DELTA,i);o=Date.now(),i+=1,await this._pause.promise,this._send(l),await jt(pi)}})()}stop(){if(this._finished)throw new Error("Unable to stop BroadcastAgent - it has been already finished");if(!this._started)throw new Error("Unable to stop BroadcastAgent - it hasn't been started");this._send(null),this._finished=!0}stream(e=!1,t={}){const r=new Na(this,t);return this.start(e),r}subscribe(e){this._listeners.push(e)}unsubscribe(e){const t=this._listeners.findIndex(r=>r===e);return t===-1?!1:(this._listeners.splice(t,1),!0)}_getFragment(e,t){return Ei.call(this,()=>this._gateway.getFragment(this._match,e,t),fi)}_getSync(){return Ei.call(this,()=>this._gateway.getSync(this._match),fi)}_send(e){this._listeners.forEach(t=>{t(e)})}}async function Ei(a,e,t=500){let r=0,i=t,s;for(let n=0;n<e;n++)try{return s=await a(),s}catch(o){if(r+=1,this._logger.debug(`Backoff [ ${r} / ${e} ]: [ ${o.message} ]`),r>=e)throw this._logger.error(o),this.stop(),o;await jt(i),i*=2}return s}async function jt(a){return new Promise(e=>{setTimeout(()=>{e()},a)})}const gt={byCode:new Map,byId:new Map};class fe{constructor(e,t){this._code=e,this._id=t,gt.byCode.set(e,this),gt.byId.set(t,this)}get code(){return this._code}get id(){return this._id}static parse(e){return gt.byCode.get(e)||null}static parseById(e){return gt.byId.get(e)||null}static get HTTP_BROADCAST(){return xa}static get REPLAY(){return Va}}const xa=new fe("HTTP_BROADCAST",0),Va=new fe("REPLAY",1),yt={byCode:new Map,byId:new Map};class re{constructor(e,t){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(Number.isInteger(t)),this._code=e,this._id=t,yt.byCode.set(e,this),yt.byId.set(t,this)}get code(){return this._code}get id(){return this._id}static parse(e){return yt.byCode.get(e)||null}static parseById(e){return yt.byId.get(e)||null}static get UPDATE(){return Ga}static get LEAVE(){return za}static get CREATE(){return ja}static get DELETE(){return Ha}}const Ga=new re("UPDATE",0),za=new re("LEAVE",1),ja=new re("CREATE",2),Ha=new re("DELETE",3);class W{constructor(e,t){this._code=e,this._id=t}get code(){return this._code}get id(){return this._id}static get DEMO_PACKET(){return qa}static get ENTITY_PACKET(){return $a}static get MESSAGE_PACKET(){return Ya}}const qa=new W("DEMO_PACKET",0),Ya=new W("MESSAGE_PACKET",1),$a=new W("ENTITY_PACKET",2),oe={BATCHER_CHUNK_SIZE:"batcherChunkSize",BATCHER_THRESHOLD_MILLISECONDS:"batcherThresholdMilliseconds",BREAK_INTERVAL:"breakInterval",ENTITY_CLASSES:"entityClasses",MESSAGE_PACKET_TYPES:"messagePacketTypes",MESSAGE_PACKET_TYPES_EXCLUDE:"messagePacketTypesExclude",PARSER_THREADS:"parserThreads",SPLITTER_CHUNK_SIZE:"splitterChunkSize",STREAM_HIGH_WATER_MARK:"streamHighWaterMark"},mi=new Set([C.SVC_SERVER_INFO,C.SVC_CREATE_STRING_TABLE,C.SVC_UPDATE_STRING_TABLE,C.SVC_CLEAR_ALL_STRING_TABLES]),Ti={[oe.BREAK_INTERVAL]:1e3,[oe.BATCHER_CHUNK_SIZE]:100*1024,[oe.BATCHER_THRESHOLD_MILLISECONDS]:50,[oe.ENTITY_CLASSES]:null,[oe.MESSAGE_PACKET_TYPES]:null,[oe.MESSAGE_PACKET_TYPES_EXCLUDE]:null,[oe.PARSER_THREADS]:0,[oe.SPLITTER_CHUNK_SIZE]:200*1024,[oe.STREAM_HIGH_WATER_MARK]:6};class qe{constructor(e){const t=h=>e&&e[h]?e[h]:Ti[h],r=t(oe.BATCHER_CHUNK_SIZE),i=t(oe.BATCHER_THRESHOLD_MILLISECONDS),s=t(oe.BREAK_INTERVAL),n=t(oe.ENTITY_CLASSES),o=t(oe.MESSAGE_PACKET_TYPES),l=t(oe.MESSAGE_PACKET_TYPES_EXCLUDE),d=t(oe.PARSER_THREADS),c=t(oe.SPLITTER_CHUNK_SIZE),u=t(oe.STREAM_HIGH_WATER_MARK);y.isTrue(Number.isInteger(r)&&r>0,"options.batcherChunkSize must be a positive integer"),y.isTrue(Number.isInteger(i)&&i>0,"options.batcherThresholdMilliseconds must be a positive integer"),y.isTrue(Number.isInteger(s)&&s>0,"options.breakInterval must be a positive integer"),y.isTrue(n===null||Array.isArray(n)&&n.every(h=>typeof h=="string"&&h.length>0),"options.entityClasses must be an array of non-empty strings or null"),y.isTrue(o===null||Array.isArray(o),"options.messagePacketTypes must be an array or null"),y.isTrue(l===null||Array.isArray(l),"options.messagePacketTypesExclude must be an array or null"),y.isTrue(o===null||l===null,"options.messagePacketTypes and options.messagePacketTypesExclude are mutually exclusive"),y.isTrue(Number.isInteger(d)&&d>=0,"options.parserThreads must be a not negative integer"),y.isTrue(Number.isInteger(c)&&c>0,"options.splitterChunkSize must be a positive integer"),y.isTrue(Number.isInteger(u)&&u>0,"options.streamHighWaterMark must be a positive integer"),this._batcherChunkSize=r,this._batcherThresholdMilliseconds=i,this._breakInterval=s,this._parserThreads=d,this._splitterChunkSize=c,this._streamHighWaterMark=u,this._entityClassFilter=Ka(n),this._messagePacketFilter=Wa(o,l),n!==null&&this._messagePacketFilter!==null&&y.isTrue(this._messagePacketFilter(C.SVC_PACKET_ENTITIES.id),"options.entityClasses requires MessagePacketType.SVC_PACKET_ENTITIES to be enabled by options.messagePacketTypes/options.messagePacketTypesExclude")}static get DEFAULT(){return Ja}get batcherChunkSize(){return this._batcherChunkSize}get batcherThresholdMilliseconds(){return this._batcherThresholdMilliseconds}get breakInterval(){return this._breakInterval}get parserThreads(){return this._parserThreads}get splitterChunkSize(){return this._splitterChunkSize}get streamHighWaterMark(){return this._streamHighWaterMark}getIsEntityClassAllowed(e){return this._entityClassFilter===null||this._entityClassFilter(e)}getIsMessagePacketTypeAllowed(e){return this._messagePacketFilter===null||this._messagePacketFilter(e)}}function Ka(a){if(a===null)return null;const e=new Set(a);return t=>e.has(t)}function Wa(a,e){if(a!==null){const t=new Set(a.map(r=>r.id));for(const r of mi)t.add(r.id);return r=>t.has(r)}if(e!==null){const t=new Set(e.map(r=>r.id));for(const r of mi)t.delete(r.id);return r=>!t.has(r)}return null}const Ja=new qe({...Ti});class Si extends WritableStream{constructor(e=null){super({write(t){e!==null&&e(t)}})}}class Ai{constructor(e,t,r=null){const i=new AbortController,s=r!==null?r:new Si;this._promise=t.reduce((n,o)=>n.pipeThrough(o),e).pipeTo(s,{signal:i.signal}),this._abortController=i,this._readable=e}get aborted(){return this._abortController.signal.aborted}abort(){this._abortController.abort(),typeof this._readable.destroy=="function"&&this._readable.destroy()}ready(){return this._promise}}class J{constructor(e){y.isTrue(typeof e=="string"),this._code=e}get code(){return this._code}static get ARRAY_FIXED(){return Za}static get ARRAY_VARIABLE(){return Xa}static get SCALAR(){return Qa}static get TABLE_FIXED(){return el}static get TABLE_VARIABLE(){return tl}}const Za=new J("ARRAY_FIXED"),Xa=new J("ARRAY_VARIABLE"),Qa=new J("SCALAR"),el=new J("TABLE_FIXED"),tl=new J("TABLE_VARIABLE"),rl=/(?<base>[^*< >\n[\]]+)(< (?<generic>.*) >)?(\[(?<count>\d+)?])?(?<pointer>\*)?/;class Fe{constructor(e,t,r,i){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(t===null||t instanceof Fe),y.isTrue(r===null||Number.isInteger(r)),y.isTrue(typeof i=="boolean"),this._baseType=e,this._generic=t,this._count=r,this._pointer=i}get baseType(){return this._baseType}get generic(){return this._generic}get count(){return this._count}get pointer(){return this._pointer}static parse(e){y.isTrue(typeof e=="string");const t=rl.exec(e).groups,r=t.base,i=t.generic?Fe.parse(t.generic):null,s=t.count?parseInt(t.count):null,n=t.pointer==="*";return new Fe(r,i,s,n)}toString(){let e=this._baseType;return this._generic!==null&&(e+=`<${this._generic.toString()}>`),this._count!==null&&(e+=`[${this._count}]`),this._pointer&&(e+="*"),e}}class Ye{constructor(e,t,r){y.isTrue(typeof e=="string"),y.isTrue(Array.isArray(t)&&t.every(i=>i.length>0)),y.isTrue(r instanceof Fe),this._name=e,this._sendNode=t,this._definition=r}get definition(){return this._definition}get model(){throw new Error("Abstract: get model()")}get name(){return this._name}get sendNode(){return this._sendNode}getDecoderForFieldPath(){throw new Error("Abstract: getDecoderForFieldPath()")}getDefinitionForFieldPath(){return this._definition}getIsContainerForFieldPath(){throw new Error("Abstract: getIsContainerForFieldPath()")}getNameForFieldPath(){throw new Error("Abstract: getNameForFieldPath()")}getStorageForFieldPath(){throw new Error("Abstract: getStorageForFieldPath()")}unpack(){throw new Error("Abstract: unpack()")}unpackElement(e,t){return this.unpack(e)}}const Ht=65536,vi=4294967296,wi=65535;class Ni{constructor(e,t,r){this._path=e,this._code=t,this._id=r;const i=e.length;i===1?this._transferCode=e[0]*Ht+1:i===2?this._transferCode=e[1]*vi+e[0]*Ht+2:this._transferCode=t}static decodeTransferCode(e){const t=e&wi,r=(e/Ht|0)&wi,i=e/vi|0;return{length:t,p0:r,p1:i}}get path(){return this._path}get code(){return this._code}get id(){return this._id}get length(){return this._path.length}get transferCode(){return this._transferCode}get(e){if(e>=this._path.length)throw new Error(`Unable to get path - index [ ${e} ] is out of bounds [ ${this._path.length} ]`);return this._path[e]}toString(){return this._path.join("|")}}const Ci=16,qt=BigInt(Ci),il=(1<<Ci)-1,Ii=BigInt(il),sl=7,Se={byId:[],byPath:new Map,bySingle:[],byPair:new Map};class ce{constructor(){this._path=[-1]}get length(){return this._path.length}static build(e){if(e.length===1){const r=Se.bySingle[e[0]];return r!==void 0?r:Et(e)}if(e.length===2){const r=Se.byPair.get(Yt(e[0],e[1]));return r!==void 0?r:Et(e)}const t=bi(e);return t!==void 0?t:Et(e)}static getById(e){return Se.byId[e]}static reconstruct(e){if(typeof e=="number"){const{length:i,p0:s,p1:n}=Ni.decodeTransferCode(e);if(i===1){const l=Se.bySingle[s];return l!==void 0?l:ce.build([s])}const o=Se.byPair.get(Yt(s,n));return o!==void 0?o:ce.build([s,n])}const t=ol(e),r=bi(t);return r!==void 0?r:Et(t)}add(e,t=this._path.length-1){if(this._path.length===0)throw new Error(`Unable to add value [ ${e} ] - path is empty`);if(t>=this._path.length)throw new Error(`Unable to add value [ ${e} ] - index [ ${t} ] is bigger than path length [ ${this._path.length} ]`);this._path[t]+=e}build(){return ce.build(this._path)}drop(e){if(e>this._path.length)throw new Error(`Unable to drop [ ${e} ] items - path has only [ ${this._path.length} ] items`);this._path.length-=e}push(e){if(this.length>=sl)throw new Error(`Unable to push value [ ${e} ] - path is full`);this._path.push(e)}reset(){this._path.length=1,this._path[0]=-1}set(e,t=this._path.length-1){this._path[t]=e}}function Yt(a,e){return a+e*65536}function Et(a){const e=new Ni(a.slice(),al(a),Se.byId.length);return Se.byId[e.id]=e,a.length===1?Se.bySingle[a[0]]=e:a.length===2?Se.byPair.set(Yt(a[0],a[1]),e):nl(a,e),e}function bi(a){let e=Se.byPath;for(let t=0;t<a.length;t++)if(e=e.get(a[t]),e===void 0)return;return e.fieldPath}function nl(a,e){let t=Se.byPath;for(let r=0;r<a.length;r++){const i=a[r];let s=t.get(i);s===void 0&&(s=new Map,t.set(i,s)),t=s}t.fieldPath=e}function ol(a){const e=[];let t=a;const r=t&Ii;for(let i=1;i<=r;i++)t=t>>qt,e.push(Number(t&Ii));return e}function al(a){let e=0n;for(let t=a.length-1;t>=0;t--)e=e<<qt|BigInt(a[t]);return e=e<<qt|BigInt(a.length),e}class ll{constructor(e,t){y.isTrue(typeof e=="function"),y.isTrue(Array.isArray(t)&&t.length>0),this._readField=e,this._builder=new ce,this._builder.set(t[0],0);for(let r=1;r<t.length;r++)this._builder.push(t[r])}at(e){this.enter(e);const t=this.read();return this.exit(),t}enter(e){this._builder.push(e)}exit(){this._builder.drop(1)}read(){return this._readField(this._builder.build())}}class $t{constructor(e,t,r=null){this._field=e,this._fieldPath=t,this._elementIndex=r}get field(){return this._field}get fieldPath(){return this._fieldPath}read(e){const t=new ll(e,this._fieldPath.path);return Number.isInteger(this._elementIndex)?this._field.unpackElement(t,this._elementIndex):this._field.unpack(t)}}class tt{constructor(e,t){y.isTrue(typeof e=="string"),y.isTrue(Number.isInteger(t)),this._name=e,this._version=t}get name(){return this._name}get version(){return this._version}toString(){return`${this._name}|${this._version}`}}const Mi=4;class Ee{constructor(e,t,r){y.isTrue(typeof e=="string"),y.isTrue(Number.isInteger(t)),y.isTrue(Array.isArray(r)&&r.every(i=>i instanceof Ye)),this._key=new tt(e,t),this._fields=r,this._decoderCache=[],this._definitionCache=[],this._nameCache=[],this._storageCache=[]}get key(){return this._key}get fields(){return this._fields}static getIsElementIndex(e){return e.length>=Mi&&/^\d+$/.test(e)}static formatElementIndex(e,t){return`${e}.${String(t).padStart(Mi,"0")}`}getDecoderForFieldPath(e,t=0){if(t===0){const s=this._decoderCache[e.id]??null;if(s!==null)return s}const i=this._fields[e.get(t)].getDecoderForFieldPath(e,t+1);return t===0&&(this._decoderCache[e.id]=i),i}getDecoderForFieldPathId(e){const t=this._decoderCache[e]??null;return t!==null?t:this.getDecoderForFieldPath(ce.getById(e))}getDefinitionForFieldPath(e,t=0){if(t===0){const s=this._definitionCache[e.id]??null;if(s!==null)return s}const i=this._fields[e.get(t)].getDefinitionForFieldPath(e,t+1);return t===0&&(this._definitionCache[e.id]=i),i}getDefinitionForFieldPathId(e){const t=this._definitionCache[e]??null;return t!==null?t:this.getDefinitionForFieldPath(ce.getById(e))}getFieldAccessorForName(e){const t=e.split("."),r=[];let i=this,s=null,n=0;for(;n<t.length;){const o=i.getFieldIndexForName(t[n]);if(o===null)return null;if(s=i.fields[o],r.push(o),n++,n===t.length)return new $t(s,ce.build(r));switch(s.model){case J.ARRAY_VARIABLE:case J.ARRAY_FIXED:{if(!Ee.getIsElementIndex(t[n]))return null;const l=parseInt(t[n],10);return n++,t.length!==n?null:new $t(s,ce.build(r),l)}case J.TABLE_VARIABLE:{if(!Ee.getIsElementIndex(t[n]))return null;const l=parseInt(t[n],10);if(n++,n===t.length)return new $t(s,ce.build(r),l);r.push(l),i=s.serializer;break}case J.TABLE_FIXED:{i=s.serializer;break}default:return null}}return null}getFieldIndexForName(e){const t=this._fields.findIndex(r=>r.name===e);return t===-1||this._fields.findIndex((r,i)=>i>t&&r.name===e)!==-1?null:t}getIsContainerForFieldPath(e,t){return this._fields[e.get(t)].getIsContainerForFieldPath(e,t+1)}getIsContainerForFieldPathId(e){const t=ce.getById(e);return this._fields[t.get(0)].getIsContainerForFieldPath(t,1)}getNameForFieldPath(e,t=0){if(t===0){const r=this._nameCache[e.id]??null;if(r!==null)return r;const i=this._fields[e.get(0)].getNameForFieldPath(e,1);return this._nameCache[e.id]=i,i}return this._fields[e.get(t)].getNameForFieldPath(e,t+1)}getNameForFieldPathId(e){const t=this._nameCache[e]??null;return t!==null?t:this.getNameForFieldPath(ce.getById(e))}getStorageForFieldPath(e,t=0){if(t===0){const s=this._storageCache[e.id]??null;if(s!==null)return s}const i=this._fields[e.get(t)].getStorageForFieldPath(e,t+1);return t===0&&(this._storageCache[e.id]=i),i}getStorageForFieldPathId(e){const t=this._storageCache[e]??null;return t!==null?t:this.getStorageForFieldPath(ce.getById(e))}unpack(e){let t=null;for(let r=0;r<this._fields.length;r++){e.enter(r);const i=this._fields[r].unpack(e);e.exit(),i!==void 0&&(t===null&&(t={}),t[this._fields[r].name]=i)}return t??void 0}push(e){this._fields.push(e)}}class Q{constructor(e){y.isTrue(typeof e=="string"),this._code=e}get code(){return this._code}static get FLOAT(){return ul}static get VECTOR(){return dl}static get INT(){return cl}static get MISC(){return hl}}const ul=new Q("FLOAT"),dl=new Q("VECTOR"),cl=new Q("INT"),hl=new Q("MISC");class _l{constructor(e){y.isTrue(e instanceof Ee),this._serializer=e,this._lengths={float:0,int:0,presence:0},this._metas={byId:new Map,order:[]}}getFloatLength(){return this._lengths.float}getIntLength(){return this._lengths.int}getMetas(){return this._metas.order}getPresenceLength(){return this._lengths.presence}peek(e){return this._metas.byId.get(e)||null}peekOrAssign(e){const t=this.peek(e);if(t!==null)return t;const r=this._classify(e);return this._metas.byId.set(e,r),this._metas.order.push(r),r}_classify(e){const t=this._serializer.getIsContainerForFieldPathId(e),r=this._serializer.getStorageForFieldPathId(e);switch(r.type){case Q.FLOAT:case Q.VECTOR:{const i=this._lengths.float;return this._lengths.float+=r.dim,Kt(e,r.type,i,r.dim,this._lengths.presence++,t,!1,!1)}case Q.INT:{const i=this._lengths.int;return this._lengths.int+=1,Kt(e,Q.INT,i,1,this._lengths.presence++,t,r.signed,r.bool)}default:return Kt(e,Q.MISC,-1,0,-1,t,!1,!1)}}}function Kt(a,e,t,r,i,s,n,o){return{id:a,storage:e,offset:t,dim:r,present:i,container:s,signed:n,bool:o}}class Wt{constructor(e,t,r){y.isTrue(Number.isInteger(e)),y.isTrue(typeof t=="string"&&t.length>0),y.isTrue(r instanceof Ee),this._id=e,this._name=t,this._serializer=r,this._accessors=new Map,this._layout=new _l(r)}get id(){return this._id}get name(){return this._name}get serializer(){return this._serializer}get layout(){return this._layout}getFieldAccessor(e){if(this._accessors.has(e))return this._accessors.get(e);const t=this._serializer.getFieldAccessorForName(e);return this._accessors.set(e,t),t}}const Pi=5;class Ne{constructor(e,t){this._value=e,this._size=t}get value(){return this._value}get size(){return this._size}static get MAXIMUM_SIZE_BYTES(){return Pi}static parse(e){let t=!0,r=0,i=0;for(;t&&r<Pi;){if(t&&r>=e.length)return null;const s=e[r];i|=(s&127)<<7*r,r+=1,t=(s&128)===128}return new Ne(i,r)}}class de{constructor(e){this._buffer=e,this._pByte=0,this._pBit=0,this._totalBits=e.length*ee}static get BITS_PER_BYTE(){return ee}static readUInt32LE(e){switch(e.byteLength){case 1:return e[0]>>>0;case 2:return(e[0]|e[1]<<8)>>>0;case 3:return(e[0]|e[1]<<8|e[2]<<16)>>>0;case 4:return(e[0]|e[1]<<8|e[2]<<16|e[3]<<24)>>>0;default:throw new Error(`Unexpected buffer size [ ${e.byteLength} ]`)}}getReadCount(){return this._pByte*ee+this._pBit}getUnreadCount(){return this._totalBits-(this._pByte*ee+this._pBit)}move(e){const t=Math.abs(e);if(t===0)return;if(e>0&&e>this.getUnreadCount())throw new Error(`Cannot move pointer forward by ${e} bits: only [ ${this.getUnreadCount()} ] bits unread`);if(e<0&&t>this.getReadCount())throw new Error(`Cannot move pointer backward by ${t} bits: only [ ${this.getReadCount()} ] bits read`);const r=Math.floor(t/ee),i=t%ee;e>0&&(this._pByte+=r,this._pBit+i<ee?this._pBit+=i:(this._pByte+=1,this._pBit=(this._pBit+i)%ee)),e<0&&(this._pByte-=r,this._pBit-i>=0?this._pBit-=i:(this._pByte-=1,this._pBit=ee-Math.abs(this._pBit-i)))}moveBack(e){if(e<0)return;const t=this._pByte*ee+this._pBit-e;this._pByte=t>>>3,this._pBit=t&7}read(e,t=!1){const r=Math.ceil(e/ee);return!t&&r<=Jt?this._read(e,Oi[r-1]):this._read(e,new Uint8Array(r))}readBitsAsUInt(e){const t=this._pBit+e;let r;if(t<=8)r=this._buffer[this._pByte];else if(t<=16)r=this._buffer[this._pByte]|this._buffer[this._pByte+1]<<8;else if(t<=24)r=this._buffer[this._pByte]|this._buffer[this._pByte+1]<<8|this._buffer[this._pByte+2]<<16;else if(t<=32)r=(this._buffer[this._pByte]|this._buffer[this._pByte+1]<<8|this._buffer[this._pByte+2]<<16|this._buffer[this._pByte+3]<<24)>>>0;else{const s=(this._buffer[this._pByte]|this._buffer[this._pByte+1]<<8|this._buffer[this._pByte+2]<<16|this._buffer[this._pByte+3]<<24)>>>0,n=this._buffer[this._pByte+4],o=this._pBit;return this._pByte+=t>>>3,this._pBit=t&7,((s>>>o|n<<32-o)&(1<<e)-1)>>>0}const i=this._pBit;return this._pByte+=t>>>3,this._pBit=t&7,(r>>>i&(1<<e)-1)>>>0}readInBuffer(e,t){return this._read(e,t)}readAngle(e){return this.readBitsAsUInt(e)*360/(1<<e)}readBit(){const e=(this._buffer[this._pByte]>>this._pBit&1)===1;return this._pBit<7?this._pBit++:(this._pByte++,this._pBit=0),e}readCoordinate(){let e=0;const t=this.readBit(),r=this.readBit();if(t||r){const i=this.readBit();let s=0;t&&(s=this.readBitsAsUInt(14)+1);let n=0;r&&(n=this.readBitsAsUInt(5)),e=s+n*(1/32),i&&(e=-e)}return e}readCoordinatePrecise(){return this.readBitsAsUInt(20)*(360/(1<<20))-180}readFloat32(){const e=this.readUInt32();return rt.setUint32(0,e,!0),rt.getFloat32(0,!0)}readNormal(){const e=this.readBit(),r=this.readBitsAsUInt(11)*(1/2047);return e?-r:r}readNormalVector(){const e=new Float32Array(3),t=this.readBit(),r=this.readBit();t&&(e[0]=this.readNormal()),r&&(e[1]=this.readNormal());const i=this.readBit(),s=Math.pow(e[0],2)+Math.pow(e[1],2);return s<1?e[2]=Math.sqrt(1-s):e[2]=0,i&&(e[2]=-e[2]),e}readString(e){const t=[];for(;!(Number.isInteger(e)&&t.length>=e);){const r=this.readBitsAsUInt(ee);if(r===0)break;t.push(r)}return gl.decode(new Uint8Array(t))}readUInt8(){return this._pBit===0?this._buffer[this._pByte++]>>>0:this.readBitsAsUInt(ee)}readUInt32(){const e=this._buffer,t=this._pBit,r=this._pByte;if(t===0)return this._pByte=r+4,(e[r]|e[r+1]<<8|e[r+2]<<16|e[r+3]<<24)>>>0;const i=(e[r]|e[r+1]<<8|e[r+2]<<16|e[r+3]<<24)>>>0,s=e[r+4];return this._pByte=r+4,(i>>>t|s<<32-t)>>>0}readUInt64(){const e=this.readUInt32(),t=this.readUInt32();return rt.setUint32(0,e,!0),rt.setUint32(4,t,!0),rt.getBigUint64(0,!0)}readUVarInt(){let e=this.readBitsAsUInt(6);switch(e&48){case 16:{e=e&15|this.readBitsAsUInt(4)<<4;break}case 32:{e=e&15|this.readBitsAsUInt(8)<<4;break}case 48:{e=e&15|this.readBitsAsUInt(28)<<4;break}}return e>>>0}readVarInt32(){const e=this.readUVarInt32();return e>>1^-(e&1)}readVarInt64(){const e=this.readUVarInt64();return e>>1n^-(e&1n)}readUVarInt32(){let e=0,t=0,r;for(let i=0;i<Ne.MAXIMUM_SIZE_BYTES;i++){if(r=this.readUInt8(),e|=(r&127)<<t*7,(r&128)===0)return e>>>0;t+=1}}readUVarInt64(){let e=!0,t=0n,r=0n;for(;e;){const i=BigInt(this.readUInt8());if(t>9n||t===9n&&i>1n)throw new Error("Overflow");r|=(i&127n)<<7n*t,e=(i&128n)===128n,t++}return r}readUVarIntFieldPath(){return this.readBit()?this.readBitsAsUInt(2):this.readBit()?this.readBitsAsUInt(4):this.readBit()?this.readBitsAsUInt(10):this.readBit()?this.readBitsAsUInt(17):this.readBitsAsUInt(31)}reset(){this._pByte=0,this._pBit=0}_read(e,t){const r=this.getUnreadCount();if(e>r)throw new Error(`Unable to read [ ${e} ] bit(s) - only [ ${r} ] bit(s) left`);const i=Math.ceil(e/ee);if(this._pBit===0&&e%ee===0)return t.set(this._buffer.subarray(this._pByte,this._pByte+i)),this._pByte+=i,t;if(e%ee===0){const d=mt[ee-this._pBit];for(let c=0;c<i;c++){const u=this._buffer[this._pByte+c],h=this._buffer[this._pByte+c+1];t[c]=u>>>this._pBit|(h&d)<<ee-this._pBit}return this._pByte+=i,t}const s=Math.ceil((this._pBit+e)/ee);let n;s>i?n=this._buffer[this._pByte+s-1]:n=0;for(let d=0;d<i;d++)t[d]=this._buffer[this._pByte+d];const o=s*ee-(this._pBit+e);if(t[0]&=pl[this._pBit],s>i?n&=mt[o]:t[t.length-1]&=mt[o],this._pBit>0){t[0]=t[0]>>>this._pBit;for(let d=0;d<i;d++){let c;d<i-1?c=t[d+1]:c=n,t[d]|=(c&mt[ee-this._pBit])<<ee-this._pBit,d<i&&(t[d+1]=t[d+1]>>>this._pBit)}}const l=this._pBit+e;return this._pByte+=l>>>3,this._pBit=l&7,t}}const ee=8,mt=[255,127,63,31,15,7,3,1],pl=[255,254,252,248,240,224,192,128],Jt=8,fl=new Uint8Array(Jt),Oi=[];for(let a=0;a<Jt;a++)Oi.push(fl.subarray(0,a+1));const gl=new TextDecoder,yl=new ArrayBuffer(8),rt=new DataView(yl);class Ce{constructor(e,t){y.isTrue(e instanceof Uint32Array),y.isTrue(Array.isArray(t)),y.isTrue(e.length===t.length),this._ids=e,this._values=t}get ids(){return this._ids}get length(){return this._ids.length}get values(){return this._values}static get EMPTY(){return El}static concat(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n]._ids.length;if(t===0)return Ce.EMPTY;const r=new Uint32Array(t),i=new Array(t);let s=0;for(let n=0;n<e.length;n++){const o=e[n];r.set(o._ids,s);for(let l=0;l<o._values.length;l++)i[s+l]=o._values[l];s+=o._ids.length}return new Ce(r,i)}}const El=new Ce(new Uint32Array(0),Object.freeze([])),Ri={byCode:new Map};class D{constructor(e,t,r,i,s){y.isTrue(typeof e=="string"&&e.length>0),y.isTrue(typeof t=="string"&&t.length>0),y.isTrue(Number.isInteger(r)),y.isTrue(Number.isInteger(i)),y.isTrue(s===null||typeof s=="function"),this._code=e,this._name=t,this._weight=r,this._sequence=i,this._executor=s,Ri.byCode.set(e,this)}static getAll(){const e=Array.from(Ri.byCode.values());return e.sort((t,r)=>t.sequence-r.sequence),e}get code(){return this._code}get name(){return this._name}get weight(){return this._weight}get sequence(){return this._sequence}get executor(){return this._executor}static get FINISH(){return ml}}const k=a=>a;new D("PLUS_1","PlusOne",36271,0,k((a,e)=>{e.add(1)})),new D("PLUS_2","PlusTwo",10334,1,k((a,e)=>{e.add(2)})),new D("PLUS_3","PlusThree",1375,2,k((a,e)=>{e.add(3)})),new D("PLUS_4","PlusFour",646,3,k((a,e)=>{e.add(4)})),new D("PLUS_N","PlusN",4128,4,k((a,e)=>{e.add(a.readUVarIntFieldPath()+5)})),new D("PUSH_1L_D0_R0","PushOneLeftDeltaZeroRightZero",35,5,k((a,e)=>{e.push(0)})),new D("PUSH_1L_D0_R!0","PushOneLeftDeltaZeroRightNonZero",3,6,k((a,e)=>{e.push(a.readUVarIntFieldPath())})),new D("PUSH_1L_D1_R0","PushOneLeftDeltaOneRightZero",521,7,k((a,e)=>{e.add(1),e.push(0)})),new D("PUSH_1L_D1_R!0","PushOneLeftDeltaOneRightNonZero",2942,8,k((a,e)=>{e.add(1),e.push(a.readUVarIntFieldPath())})),new D("PUSH_1L_DN_R0","PushOneLeftDeltaNRightZero",560,9,k((a,e)=>{e.add(a.readUVarIntFieldPath()),e.push(0)})),new D("PUSH_1L_DN_R!0","PushOneLeftDeltaNRightNonZero",471,10,k((a,e)=>{e.add(a.readUVarIntFieldPath()+2),e.push(a.readUVarIntFieldPath()+1)})),new D("PUSH_1L_DN_R!0_P6B","PushOneLeftDeltaNRightNonZeroPack6Bits",10530,11,k((a,e)=>{e.add(a.readBitsAsUInt(3)+2),e.push(a.readBitsAsUInt(3)+1)})),new D("PUSH_1L_DN_R!0_P8B","PushOneLeftDeltaNRightNonZeroPack8Bits",251,12,k((a,e)=>{e.add(a.readBitsAsUInt(4)+2),e.push(a.readBitsAsUInt(4)+1)})),new D("PUSH_2L_D0","PushTwoLeftDeltaZero",0,13,k((a,e)=>{e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath())})),new D("PUSH_2P5BL_D0","PushTwoPack5BitsLeftDeltaZero",0,14,k((a,e)=>{e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5))})),new D("PUSH_3L_D0","PushThreeLeftDeltaZero",0,15,k((a,e)=>{e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath())})),new D("PUSH_3P5BL_D0","PushThreePack5BitsLeftDeltaZero",0,16,k((a,e)=>{e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5))})),new D("PUSH_2L_D1","PushTwoLeftDeltaOne",0,17,k((a,e)=>{e.add(1),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath())})),new D("PUSH_2P5BL_D1","PushTwoPack5BitsLeftDeltaOne",0,18,k((a,e)=>{e.add(1),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5))})),new D("PUSH_3L_D1","PushThreeLeftDeltaOne",0,19,k((a,e)=>{e.add(1),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath())})),new D("PUSH_3P5BL_D1","PushThreePack5BitsLeftDeltaOne",0,20,k((a,e)=>{e.add(1),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5))})),new D("PUSH_2L_DN","PushTwoLeftDeltaN",0,21,k((a,e)=>{e.add(a.readUVarInt()+2),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath())})),new D("PUSH_2P5BL_DN","PushTwoPack5BitsLeftDeltaN",0,22,k((a,e)=>{e.add(a.readUVarInt()+2),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5))})),new D("PUSH_3L_DN","PushThreeLeftDeltaN",0,23,k((a,e)=>{e.add(a.readUVarInt()+2),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath()),e.push(a.readUVarIntFieldPath())})),new D("PUSH_3P5BL_DN","PushThreePack5BitsLeftDeltaN",0,24,k((a,e)=>{e.add(a.readUVarInt()+2),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5)),e.push(a.readBitsAsUInt(5))})),new D("PUSH_N","PushN",0,25,k((a,e)=>{const t=a.readUVarInt();e.add(a.readUVarInt());for(let r=0;r<t;r++)e.push(a.readUVarIntFieldPath())})),new D("PUSH_N_!N","PushNAndNonTopological",310,26,k((a,e)=>{for(let r=0;r<e.length;r++)a.readBit()&&e.add(a.readVarInt32()+1,r);const t=a.readUVarInt();for(let r=0;r<t;r++)e.push(a.readUVarIntFieldPath())})),new D("POP_1_PLUS_1","PopOnePlusOne",2,27,k((a,e)=>{e.drop(1),e.add(1)})),new D("POP_1_PLUS_N","PopOnePlusN",0,28,k((a,e)=>{e.drop(1),e.add(a.readUVarIntFieldPath()+1)})),new D("POP_ALL-1_PLUS_1","PopAllButOnePlusOne",1837,29,k((a,e)=>{e.drop(e.length-1),e.add(1)})),new D("POP_ALL-1_PLUS_N","PopAllButOnePlusN",149,30,k((a,e)=>{e.drop(e.length-1),e.add(a.readUVarIntFieldPath()+1)})),new D("POP_ALL-1_PLUS_N_P3B","PopAllButOnePlusNPack3Bits",300,31,k((a,e)=>{e.drop(e.length-1),e.add(a.readBitsAsUInt(3)+1)})),new D("POP_ALL-1_PLUS_N_P6B","PopAllBu