t2-demo-parser 2.0.0 → 2.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DataBlockParsers.js","sourceRoot":"","sources":["../src/DataBlockParsers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BitStream } from \"./BitStream.js\";\nimport type { ClassRegistry } from \"./ClassRegistry.js\";\nimport type {\n SimDataBlock,\n GameBaseDataBlock,\n ShapeBaseDataBlock,\n ShapeBaseImageDataBlock,\n PlayerDataBlock,\n VehicleDataBlock,\n FlyingVehicleDataBlock,\n HoverVehicleDataBlock,\n WheeledVehicleDataBlock,\n StaticShapeDataBlock,\n TurretDataBlock,\n TurretImageDataBlock,\n ItemDataBlock,\n ProjectileDataBlock,\n LinearProjectileDataBlock,\n GrenadeProjectileDataBlock,\n SeekerProjectileDataBlock,\n SniperProjectileDataBlock,\n ShockLanceProjectileDataBlock,\n ELFProjectileDataBlock,\n RepairProjectileDataBlock,\n TargetProjectileDataBlock,\n TracerProjectileDataBlock,\n EnergyProjectileDataBlock,\n LinearFlareProjectileDataBlock,\n BombProjectileDataBlock,\n FlareProjectileDataBlock,\n ExplosionDataBlock,\n DebrisDataBlock,\n SplashDataBlock,\n ShockwaveDataBlock,\n ParticleEmitterDataBlock,\n ParticleDataBlock,\n AudioDescriptionDataBlock,\n AudioProfileDataBlock,\n AudioEnvironmentDataBlock,\n AudioSampleEnvironmentDataBlock,\n DecalDataBlock,\n CameraDataBlock,\n SensorDataBlock,\n TriggerDataBlock,\n ForceFieldBareDataBlock,\n ParticleEmissionDummyDataBlock,\n CommanderIconDataBlock,\n PrecipitationDataBlock,\n FireballAtmosphereDataBlock,\n LightningDataBlock,\n StationFXVehicleDataBlock,\n StationFXPersonalDataBlock,\n CannedChatItemDataBlock,\n MissionMarkerDataBlock,\n TSShapeConstructorDataBlock,\n EffectProfileDataBlock,\n JetEffectDataBlock,\n RunningLightDataBlock,\n HudImageEntry,\n ImageState,\n ParticleKey,\n} from \"./dataBlockDataTypes.js\";\n\n// ============================================================\n// Helper functions\n// ============================================================\n\n/**\n * Read a DataBlock reference: flag(1b) + readClassId (11 bits).\n * From decompiled binary: uses FUN_00436d10 (readClassId) which reads\n * getBitCount(getNextPow2(0x800)) = 11 bits.\n * If flag is false, sets objectId to -1 (0xFFFFFFFF).\n */\nfunction readDataBlockRef(bs: BitStream): number | null {\n return bs.readFlag() ? bs.readInt(11) : null;\n}\n\n/**\n * Read a ranged signed 32-bit integer.\n * Encodes value as unsigned offset from min.\n */\nfunction readRangedS32(bs: BitStream, min: number, max: number): number {\n return bs.readRangedU32(0, max - min) + min;\n}\n\n/**\n * Read a packed ColorF: 4 bytes (32 bits total), each converted to [0..1] float.\n * From decompiled binary: FUN_0043f040 calls FUN_0043efe0 which reads 4 × stream->read(1, &byte).\n * Each byte is multiplied by 1/255.0 to produce the float value.\n * NOTE: This is NOT 4×F32 (128 bits) — it's 4×U8 (32 bits).\n */\nfunction readColorF(\n bs: BitStream\n): { r: number; g: number; b: number; a: number } {\n return {\n r: bs.readInt(8) / 255,\n g: bs.readInt(8) / 255,\n b: bs.readInt(8) / 255,\n a: bs.readInt(8) / 255,\n };\n}\n\n/**\n * Read a DataBlock boolean field: 8 bits (1 byte), as written by stream->write(sizeof(bool), &val).\n * NOTE: This is different from readFlag() which reads 1 bit via BitStream::readFlag().\n * Many DataBlock fields use write(sizeof(bool)) instead of writeFlag().\n */\nfunction readBool(bs: BitStream): boolean {\n return bs.readInt(8) !== 0;\n}\n\n/**\n * Read a ranged float: min + readInt(bits) / ((1 << bits) - 1) * (max - min).\n */\nfunction readRangedF32(\n bs: BitStream,\n min: number,\n max: number,\n bits: number\n): number {\n return min + (bs.readInt(bits) / ((1 << bits) - 1)) * (max - min);\n}\n\n// ============================================================\n// Base class parsers (inheritance chain)\n// ============================================================\n\n// SimDataBlock → GameBaseData: 0 bits on wire (no-op)\n\n/**\n * ShapeBaseData::unpackData — critical base class for most game objects.\n *\n * Verified against decompiled binary FUN_005e63e0 (Tribes2.exe).\n * NOTE: The field order differs from V12 engine reference source.\n * The Tribes 2 binary groups booleans and DataBlock refs differently,\n * and the sensor color uses 4×U8 (not 4×F32), among other differences.\n */\nfunction shapeBaseDataUnpack(bs: BitStream): ShapeBaseDataBlock {\n const result: ShapeBaseDataBlock = {};\n\n // computeCRC — flag; if true: U32 mCRC\n // Binary: readFlag → this+0xc0; if true: read(4) → this+0xbc\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName — readString → this+0x44\n result.shapeName = bs.readString();\n\n // 9 conditional F32 fields (flag + F32 if non-default)\n // Binary: each is readFlag, if true: read(4) → field offset\n if (bs.readFlag()) result.mass = bs.readF32(); // → 0x74\n if (bs.readFlag()) result.drag = bs.readF32(); // → 0x78\n if (bs.readFlag()) result.density = bs.readF32(); // → 0x7c\n if (bs.readFlag()) result.maxEnergy = bs.readF32(); // → 0x80\n if (bs.readFlag()) result.cameraMaxDist = bs.readF32(); // → 0xa4\n if (bs.readFlag()) result.cameraMinDist = bs.readF32(); // → 0xa8\n if (bs.readFlag()) result.cameraDefaultFov = bs.readF32(); // → 0xac\n if (bs.readFlag()) result.cameraMinFov = bs.readF32(); // → 0xb0\n if (bs.readFlag()) result.cameraMaxFov = bs.readF32(); // → 0xb4\n\n // debrisShapeName — readString → this+0x48\n result.debrisShapeName = bs.readString();\n\n // sensorRadius — flag; if true: readInt(10) + 4×U8 (RGBA bytes)\n // Binary: readInt(10) → this+0x15c (cast to float), then 4 × read(1) → 0x160-0x163\n if (bs.readFlag()) {\n result.sensorRadius = bs.readInt(10);\n result.sensorColor = {\n r: bs.readInt(8),\n g: bs.readInt(8),\n b: bs.readInt(8),\n a: bs.readInt(8),\n };\n }\n\n // heat — flag; if true: F32 → this+0x50\n if (bs.readFlag()) result.heat = bs.readF32();\n\n // cmdCategory — readString → this+0x164\n result.cmdCategory = bs.readString();\n\n // cmdMiniIconName — readString → this+0x168\n // NOTE: V12 has cmdIcon (DataBlockRef) here, but binary has readString.\n result.cmdMiniIconName = bs.readString();\n\n // 3 boolean flags: canControl, canObserve, observeThroughObject\n // Binary: 3 readFlags → this+0x16c, 0x16d, 0x16e\n result.canControl = bs.readFlag();\n result.canObserve = bs.readFlag();\n result.observeThroughObject = bs.readFlag();\n\n // 3 more boolean flags (grouped together in binary, different from V12)\n // Binary: this+0x325, 0x329, 0x32a\n result.emap = bs.readFlag(); // 0x325\n result.isInvincible = bs.readFlag(); // 0x329\n result.renderWhenDestroyed = bs.readFlag(); // 0x32a\n\n // 4 DataBlock refs using readClassId (FUN_00436d10 = readInt(11))\n // Binary: each is readFlag + readClassId → this+0x70, 0x60, 0x68, 0x58\n result.cmdIcon = readDataBlockRef(bs); // 0x6c/0x70\n result.explosion = readDataBlockRef(bs); // 0x5c/0x60\n result.underwaterExplosion = readDataBlockRef(bs); // 0x64/0x68\n result.debris = readDataBlockRef(bs); // 0x54/0x58\n\n // 3 more boolean flags\n // Binary: this+0x32b, 0x326, 0x327\n result.inheritEnergyFromMount = bs.readFlag(); // 0x32b\n result.firstPersonOnly = bs.readFlag(); // 0x326\n result.useEyePoint = bs.readFlag(); // 0x327\n\n // shieldEffectLifetimeMS — U32 → this+0x94\n result.shieldEffectLifetimeMS = bs.readU32();\n\n // shieldEffectScale — flag; if true: 3×F32\n // Binary: readFlag, if true: read(4) × 3 → this+0x98, 0x9c, 0xa0\n // NOTE: This field is NOT in the V12 reference source — Tribes 2 addition.\n if (bs.readFlag()) {\n result.shieldEffectScale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n }\n\n // HUD images loop (8 iterations, NumHudRenderImages=8)\n // Binary: do-while uVar4 < 8 at offset this + uVar4*4 + 0x174\n const hudImages: HudImageEntry[] = [];\n for (let i = 0; i < 8; i++) {\n const hasFriendly = bs.readFlag();\n if (!hasFriendly) continue;\n const friendlyName = bs.readString(); // → this + i*4 + 0x174\n const hasEnemy = bs.readFlag();\n const enemyName = hasEnemy ? bs.readString() : undefined; // → this + i*4 + 0x194\n const img: HudImageEntry = {\n friendlyName,\n enemyName,\n renderCenter: bs.readFlag(), // → this + i + 0x1f4\n renderModulated: bs.readFlag(), // → this + i + 0x1fc\n renderAlways: bs.readFlag(), // → this + i + 0x204\n renderDistance: bs.readFlag(), // → this + i + 0x20c\n renderName: bs.readFlag(), // → this + i + 0x214\n };\n hudImages.push(img);\n }\n if (hudImages.length > 0) result.hudImages = hudImages;\n\n return result;\n}\n\n// ============================================================\n// ShapeBaseImageData (weapon mount data — 31 states)\n// ============================================================\n\nfunction shapeBaseImageDataUnpack(bs: BitStream): ShapeBaseImageDataBlock {\n // Extends GameBaseData directly (0 parent bits)\n const result: ShapeBaseImageDataBlock = {};\n\n // computeCRC — flag; if true: U32\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName\n result.shapeName = bs.readString();\n\n // mountPoint — U32\n result.mountPoint = bs.readU32();\n\n // offsetTransform — flag(isIdentity); if NOT identity: readAffineTransform\n if (!bs.readFlag()) {\n result.offset = bs.readAffineTransform();\n }\n\n // firstPerson — flag\n result.firstPerson = bs.readFlag();\n\n // mass — F32\n result.mass = bs.readF32();\n\n // usesEnergy — flag\n result.usesEnergy = bs.readFlag();\n\n // minEnergy — F32\n result.minEnergy = bs.readF32();\n\n // hasFlash — flag\n result.hasFlash = bs.readFlag();\n\n // projectile — readDataBlockRef\n result.projectile = readDataBlockRef(bs);\n\n // muzzleFlash — readDataBlockRef (confirmed at offset 0xce4 in binary)\n result.muzzleFlash = readDataBlockRef(bs);\n\n // isSeeker — flag; if true: 4×F32 + flag + F32\n result.isSeeker = bs.readFlag();\n if (result.isSeeker) {\n result.seekerRadius = bs.readF32();\n result.maxSeekAngle = bs.readF32();\n result.seekerLockTime = bs.readF32();\n result.seekerFreeTime = bs.readF32();\n result.isTargetLockRequired = bs.readFlag();\n result.maxLockRange = bs.readF32();\n }\n\n // cloakable — flag\n result.cloakable = bs.readFlag();\n\n // lightType — readRangedU32(0, 3); if != 0: F32 + S32 + 4×writeFloat(7)\n result.lightType = bs.readRangedU32(0, 3);\n if (result.lightType !== 0) {\n result.lightRadius = bs.readF32();\n result.lightTime = bs.readS32();\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n }\n\n // shellExitDir — 3×F32 (mathWrite Point3F)\n result.shellExitDir = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // shellExitVariance — F32\n result.shellExitVariance = bs.readF32();\n\n // shellVelocity — F32\n result.shellVelocity = bs.readF32();\n\n // casing — readDataBlockRef\n result.casing = readDataBlockRef(bs);\n\n // accuFire flag (confirmed at offset 0xc88 in binary, before state loop)\n result.accuFire = bs.readFlag();\n\n // State loop (31 iterations, MaxStates=31)\n const states: ImageState[] = [];\n for (let i = 0; i < 31; i++) {\n const hasName = bs.readFlag();\n if (!hasName) continue;\n\n const name = bs.readString();\n\n // 11 transition values: each readInt(5)\n const transitionOnAmmo = bs.readInt(5);\n const transitionOnNoAmmo = bs.readInt(5);\n const transitionOnTarget = bs.readInt(5);\n const transitionOnNoTarget = bs.readInt(5);\n const transitionOnWet = bs.readInt(5);\n const transitionOnNotWet = bs.readInt(5);\n const transitionOnTriggerUp = bs.readInt(5);\n const transitionOnTriggerDown = bs.readInt(5);\n const transitionOnTimeout = bs.readInt(5);\n const transitionGeneric0In = bs.readInt(5);\n const transitionGeneric0Out = bs.readInt(5);\n\n // timeoutValue — flag(!=default) then F32\n const timeoutValue = bs.readFlag() ? bs.readF32() : undefined;\n // waitForTimeout — flag\n const waitForTimeout = bs.readFlag();\n // fire — flag\n const fire = bs.readFlag();\n // ejectShell — flag\n const ejectShell = bs.readFlag();\n // scaleAnimation — flag\n const scaleAnimation = bs.readFlag();\n // direction — flag\n const direction = bs.readFlag();\n // reload — flag (confirmed at offset 0xe2a in binary, between direction and energyDrain)\n const reload = bs.readFlag();\n // energyDrain — flag(!=default) then F32\n const energyDrain = bs.readFlag() ? bs.readF32() : undefined;\n // loaded — readInt(3)\n const loaded = bs.readInt(3);\n // spin — readInt(3)\n const spin = bs.readInt(3);\n // recoil — readInt(3)\n const recoil = bs.readInt(3);\n // sequence — flag(!=default) then readSignedInt(16)\n const sequence = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // sequenceVis — flag(!=default) then readSignedInt(16)\n const sequenceVis = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // flashSequence — flag\n const flashSequence = bs.readFlag();\n // ignoreLoadedForReady — flag\n const ignoreLoadedForReady = bs.readFlag();\n // emitter — readDataBlockRef; if present: F32 + S32\n const emitter = readDataBlockRef(bs);\n const emitterTime = emitter !== null ? bs.readF32() : undefined;\n const emitterNode = emitter !== null ? bs.readS32() : undefined;\n // sound — readDataBlockRef\n const sound = readDataBlockRef(bs);\n\n const state: ImageState = {\n name,\n transitionOnAmmo,\n transitionOnNoAmmo,\n transitionOnTarget,\n transitionOnNoTarget,\n transitionOnWet,\n transitionOnNotWet,\n transitionOnTriggerUp,\n transitionOnTriggerDown,\n transitionOnTimeout,\n transitionGeneric0In,\n transitionGeneric0Out,\n timeoutValue,\n waitForTimeout,\n fire,\n ejectShell,\n scaleAnimation,\n direction,\n reload,\n energyDrain,\n loaded,\n spin,\n recoil,\n sequence,\n sequenceVis,\n flashSequence,\n ignoreLoadedForReady,\n emitter,\n emitterTime,\n emitterNode,\n sound,\n };\n states.push(state);\n }\n result.states = states;\n\n return result;\n}\n\n// ============================================================\n// PlayerData (extends ShapeBaseData)\n// ============================================================\n\nfunction playerDataUnpack(bs: BitStream): PlayerDataBlock {\n const result: PlayerDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_005cfa40 (Tribes2.exe).\n // Binary layout: flag + 13 F32s + 2 optional DB refs + 9 F32s + 1 F32 +\n // 8 F32s + readInt(7) + 6 F32s + 9 F32s + 1 F32 + 32 sounds +\n // boxSize(3) + DB refs + F32s + 11 ground impact F32s\n\n // 1. readFlag → 0x340 (renderFirstPerson — NOT F32!)\n result.renderFirstPerson = bs.readFlag();\n\n // Field names for sections 2-10 are binary-verified against the retail\n // initPersistFields (FUN_005ce7e0 region): each read's struct offset\n // (from the FUN_005cfa40 unpack decompile) is mapped to the name the\n // engine registers at that offset. Earlier names were guessed from the\n // SVN source, whose layout differs from retail.\n\n // 2. 13× F32 (offsets 0x334-0x360)\n result.minLookAngle = bs.readF32(); // 0x334\n result.maxLookAngle = bs.readF32(); // 0x338\n result.maxFreelookAngle = bs.readF32(); // 0x33c\n result.maxTimeScale = bs.readF32(); // 0x330\n result.maxStepHeight = bs.readF32(); // 0x398\n result.jetForce = bs.readF32(); // 0x344\n result.underwaterJetForce = bs.readF32(); // 0x348\n result.underwaterVertJetFactor = bs.readF32(); // 0x34c\n result.jetEnergyDrain = bs.readF32(); // 0x350\n result.underwaterJetEnergyDrain = bs.readF32(); // 0x354\n result.minJetEnergy = bs.readF32(); // 0x358\n result.maxJetForwardSpeed = bs.readF32(); // 0x35c\n result.maxJetHorizontalPercentage = bs.readF32(); // 0x360\n // [0x364 hardcoded to 0, not from stream]\n\n // 3. 2 optional DataBlock refs (readClassId pattern)\n result.jetEmitter = readDataBlockRef(bs); // 0x368 (jetEmitter @0x364)\n if (bs.readFlag()) {\n result.jetEffect = bs.readInt(11); // 0x370 (jetEffect @0x36c; no else/-1)\n }\n\n // 4. 9× F32 (offsets 0x374-0x394)\n result.runForce = bs.readF32(); // 0x374\n result.runEnergyDrain = bs.readF32(); // 0x378\n result.minRunEnergy = bs.readF32(); // 0x37c\n result.maxForwardSpeed = bs.readF32(); // 0x380\n result.maxBackwardSpeed = bs.readF32(); // 0x384\n result.maxSideSpeed = bs.readF32(); // 0x388\n result.maxUnderwaterForwardSpeed = bs.readF32(); // 0x38c\n result.maxUnderwaterBackwardSpeed = bs.readF32(); // 0x390\n result.maxUnderwaterSideSpeed = bs.readF32(); // 0x394\n\n // 5. 1× F32 (offset 0x39c)\n result.runSurfaceAngle = bs.readF32(); // 0x39c\n\n // 6. 8× F32 (offsets 0x3b8-0x3d4)\n result.recoverDelay = bs.readF32(); // 0x3b8\n result.recoverRunForceScale = bs.readF32(); // 0x3bc\n result.jumpForce = bs.readF32(); // 0x3c0\n result.jumpEnergyDrain = bs.readF32(); // 0x3c4\n result.minJumpEnergy = bs.readF32(); // 0x3c8\n result.minJumpSpeed = bs.readF32(); // 0x3cc\n result.maxJumpSpeed = bs.readF32(); // 0x3d0\n result.jumpSurfaceAngle = bs.readF32(); // 0x3d4\n\n // 7. readInt(7) → jumpDelay (offset 0x3d8)\n result.jumpDelay = bs.readInt(7);\n\n // 8. 6× F32 (offsets 0x3a0-0x3b4)\n result.horizMaxSpeed = bs.readF32(); // 0x3a0\n result.horizResistSpeed = bs.readF32(); // 0x3a4\n result.horizResistFactor = bs.readF32(); // 0x3a8\n result.upMaxSpeed = bs.readF32(); // 0x3ac\n result.upResistSpeed = bs.readF32(); // 0x3b0\n result.upResistFactor = bs.readF32(); // 0x3b4\n\n // 9. 9× F32 (offsets 0xd14-0xd34, far offsets = Tribes 2-specific fields)\n result.splashVelocity = bs.readF32(); // 0xd14\n result.splashAngle = bs.readF32(); // 0xd18\n result.splashFreqMod = bs.readF32(); // 0xd1c\n result.splashVelEpsilon = bs.readF32(); // 0xd20\n result.bubbleEmitTime = bs.readF32(); // 0xd24\n result.mediumSplashSoundVelocity = bs.readF32(); // 0xd28\n result.hardSplashSoundVelocity = bs.readF32(); // 0xd2c\n result.exitSplashSoundVelocity = bs.readF32(); // 0xd30\n result.footstepSplashHeight = bs.readF32(); // 0xd34\n\n // 10. 1× F32 (offset 0x3f4)\n result.minImpactSpeed = bs.readF32(); // 0x3f4\n\n // 11. Sound loop: 32 iterations (MaxSounds=0x20 in binary)\n // Binary: zeros 0x428+i*4, then flag + readClassId → 0x4a8+i*4\n const sounds: (number | null)[] = [];\n for (let i = 0; i < 32; i++) {\n if (bs.readFlag()) {\n sounds.push(bs.readInt(11));\n } else {\n sounds.push(null);\n }\n }\n result.sounds = sounds;\n\n // 12. boxSize 3×F32 (offsets 0x528, 0x52c, 0x530)\n result.boxSize = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // 13. footPuffEmitter + 2 F32s (offset 0xcf0, 0xcf4, 0xcf8)\n result.footPuffEmitter = readDataBlockRef(bs);\n result.footPuffNumParts = bs.readF32();\n result.footPuffRadius = bs.readF32();\n\n // 14. decalData + 1 F32 (offset 0xd00, 0x3f8)\n result.decalData = readDataBlockRef(bs);\n result.decalOffset = bs.readF32();\n\n // 15. dustEmitter + splash (offsets 0xd08, 0xd10)\n result.dustEmitter = readDataBlockRef(bs);\n result.splash = readDataBlockRef(bs);\n\n // 16. 3 splashEmitters (offsets 0xd44 + i*4)\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 17. 11× F32 (offsets 0x3fc-0x424). Names binary-verified against\n // initPersistFields: the two leading fields are the Tribes 2 heat\n // signature rates (retail player.cs: 1/4 and 1/3), then the ground\n // impact shake block. Demo values confirm: 0.25, 0.333…\n result.heatDecayPerSec = bs.readF32(); // 0x3fc\n result.heatIncreasePerSec = bs.readF32(); // 0x400\n result.groundImpactMinSpeed = bs.readF32(); // 0x404\n result.groundImpactShakeFreq = {\n x: bs.readF32(), // 0x408\n y: bs.readF32(), // 0x40c\n z: bs.readF32(), // 0x410\n };\n result.groundImpactShakeAmp = {\n x: bs.readF32(), // 0x414\n y: bs.readF32(), // 0x418\n z: bs.readF32(), // 0x41c\n };\n result.groundImpactShakeDuration = bs.readF32(); // 0x420\n result.groundImpactShakeFalloff = bs.readF32(); // 0x424\n\n return result;\n}\n\n// ============================================================\n// VehicleData (extends ShapeBaseData)\n// ============================================================\n\nfunction vehicleDataUnpack(bs: BitStream): VehicleDataBlock {\n const result: VehicleDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00609450 (Tribes2.exe).\n\n // 1. 2×F32 (body restitution/friction) → offsets 0x33c, 0x340\n result.bodyRestitution = bs.readF32();\n result.bodyFriction = bs.readF32();\n\n // 2. Loop of 2: impact sound DataBlock refs → offsets 0x334+i*4\n const impactSounds: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n impactSounds.push(readDataBlockRef(bs));\n }\n result.impactSounds = impactSounds;\n\n // 3. ~20 F32s for vehicle physics\n result.minImpactSpeed = bs.readF32(); // 0x37c\n result.softImpactSpeed = bs.readF32(); // 0x380\n result.hardImpactSpeed = bs.readF32(); // 0x384 (900 dec)\n result.minRollSpeed = bs.readF32(); // 0x388\n // Registered in the retail binary as \"maxSteerinAngle\" (engine typo);\n // we keep the corrected spelling.\n result.maxSteeringAngle = bs.readF32(); // 0x38c\n result.maxDrag = bs.readF32(); // 0x3a4\n result.minDrag = bs.readF32(); // 0x3a0\n result.jetForce = bs.readF32(); // 0x3a8\n result.jetEnergyDrain = bs.readF32(); // 0x3ac\n result.minJetEnergy = bs.readF32(); // 0x3b0\n result.cameraOffset = bs.readF32(); // 0x39c\n result.cameraLag = bs.readF32(); // 0x398\n result.triggerDustHeight = bs.readF32(); // 0x3c8\n result.dustHeight = bs.readF32(); // 0x3cc\n result.numDmgEmitterAreas = bs.readF32(); // 0x408\n result.exitSplashSoundVelocity = bs.readF32(); // 0x36c\n result.softSplashSoundVelocity = bs.readF32(); // 0x370\n result.mediumSplashSoundVelocity = bs.readF32(); // 0x374\n result.hardSplashSoundVelocity = bs.readF32(); // 0x378\n\n // 4. Loop of 5: water impact sound DataBlock refs → offsets 0x358+i*4\n const waterSounds: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n waterSounds.push(readDataBlockRef(bs));\n }\n result.waterSounds = waterSounds;\n\n // 5. dustEmitter DataBlock ref → offset 0x3c4\n result.dustEmitter = readDataBlockRef(bs);\n\n // 6. Loop of 3: damage emitter DataBlock refs → offsets 0x3dc+i*4\n const damageEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n damageEmitters.push(readDataBlockRef(bs));\n }\n result.damageEmitters = damageEmitters;\n\n // 7. Loop of 2: splash emitter DataBlock refs → offsets 0x414+i*4\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 8. 2×3 F32 damage emitter offsets (2 sets of x,y,z) → offsets 0x3e8-0x3f4\n result.damageEmitterOffset0 = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.damageEmitterOffset1 = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // 9. 2 F32 damage level tolerance → offsets 0x400, 0x404\n result.damageLevelTolerance0 = bs.readF32();\n result.damageLevelTolerance1 = bs.readF32();\n\n // 10. 2 F32 splash params → offsets 0x41c, 0x420\n result.splashFreqMod = bs.readF32();\n result.splashVelEpsilon = bs.readF32();\n\n // 11. 2 F32 collision damage → offsets 0x390, 0x394\n result.collDamageThresholdVel = bs.readF32();\n result.collDamageMultiplier = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FlyingVehicleData (extends VehicleData)\n// ============================================================\n\nfunction flyingVehicleDataUnpack(bs: BitStream): FlyingVehicleDataBlock {\n const result: FlyingVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 2 sound refs\n result.jetActivateSound = readDataBlockRef(bs);\n result.jetDeactivateSound = readDataBlockRef(bs);\n\n // 4 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // Verified against decompiled binary FUN_0060fc40 — 16 F32s\n result.maneuveringForce = bs.readF32();\n result.horizontalSurfaceForce = bs.readF32();\n result.verticalSurfaceForce = bs.readF32();\n result.autoInputDamping = bs.readF32();\n result.steeringForce = bs.readF32();\n result.steeringRollForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.autoAngularForce = bs.readF32();\n result.rotationalDrag = bs.readF32();\n result.maxAutoSpeed = bs.readF32();\n result.autoLinearForce = bs.readF32();\n result.hoverHeight = bs.readF32();\n result.createHoverHeight = bs.readF32();\n result.minTrailSpeed = bs.readF32();\n result.vertThrustMultiple = bs.readF32();\n result.maxForwardSpeed = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// HoverVehicleData (extends VehicleData)\n// ============================================================\n\nfunction hoverVehicleDataUnpack(bs: BitStream): HoverVehicleDataBlock {\n const result: HoverVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 17 F32s\n result.dragForce = bs.readF32();\n result.mainThrustForce = bs.readF32();\n result.reverseThrustForce = bs.readF32();\n result.strafeThrustForce = bs.readF32();\n result.turboFactor = bs.readF32();\n result.stabLenMin = bs.readF32();\n result.stabLenMax = bs.readF32();\n result.stabSpringConstant = bs.readF32();\n result.stabDampingConstant = bs.readF32();\n result.gyroDrag = bs.readF32();\n result.normalForce = bs.readF32();\n result.restorativeForce = bs.readF32();\n result.steeringForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.pitchForce = bs.readF32();\n result.floatingThrustFactor = bs.readF32();\n result.brakingForce = bs.readF32();\n\n // 3×F32 (dustTrailOffset)\n result.dustTrailOffset = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // 2 F32s\n result.dustTrailFreqMod = bs.readF32();\n result.triggerTrailHeight = bs.readF32();\n\n // 3 sound refs\n result.floatSound = readDataBlockRef(bs);\n result.thrustSound = readDataBlockRef(bs);\n result.turboSound = readDataBlockRef(bs);\n\n // 3 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // dustTrailEmitter ref\n result.dustTrailEmitter = readDataBlockRef(bs);\n\n // 3 F32s\n result.mainThrustEmitterFactor = bs.readF32();\n result.strafeThrustEmitterFactor = bs.readF32();\n result.reverseThrustEmitterFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// WheeledVehicleData (extends VehicleData)\n// ============================================================\n\nfunction wheeledVehicleDataUnpack(bs: BitStream): WheeledVehicleDataBlock {\n const result: WheeledVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 9 tire F32s\n result.tireRadius = bs.readF32();\n result.tireStaticFriction = bs.readF32();\n result.tireKineticFriction = bs.readF32();\n result.tireRestitution = bs.readF32();\n result.tireLateralForce = bs.readF32();\n result.tireLateralDamping = bs.readF32();\n result.tireLateralRelaxation = bs.readF32();\n result.tireLongitudinalForce = bs.readF32();\n result.tireLongitudinalDamping = bs.readF32();\n\n // tire emitter ref\n result.tireEmitter = readDataBlockRef(bs);\n\n // 4 sound refs\n result.jetSound = readDataBlockRef(bs);\n result.engineSound = readDataBlockRef(bs);\n result.squealSound = readDataBlockRef(bs);\n result.wadeSound = readDataBlockRef(bs);\n\n // 11 F32s\n result.spring = bs.readF32();\n result.springDamping = bs.readF32();\n result.springLength = bs.readF32();\n result.brakeTorque = bs.readF32();\n result.engineTorque = bs.readF32();\n result.engineBrake = bs.readF32();\n result.maxWheelSpeed = bs.readF32();\n result.steeringAngle = bs.readF32();\n result.steeringReturn = bs.readF32();\n result.steeringDamping = bs.readF32();\n result.powerSteeringFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// StaticShapeData (extends ShapeBaseData)\n// ============================================================\n\nfunction staticShapeDataUnpack(bs: BitStream): StaticShapeDataBlock {\n const result: StaticShapeDataBlock = shapeBaseDataUnpack(bs);\n result.noIndividualDamage = bs.readFlag();\n result.dynamicTypeField = bs.readS32();\n return result;\n}\n\n// ============================================================\n// TurretData (extends StaticShapeData)\n// ============================================================\n\nfunction turretDataUnpack(bs: BitStream): TurretDataBlock {\n const result: TurretDataBlock = staticShapeDataUnpack(bs);\n // Verified against decompiled binary FUN_00654190\n result.thetaMin = bs.readF32(); // 0x33c\n result.thetaMax = bs.readF32(); // 0x340\n result.thetaNull = bs.readF32(); // 0x344\n result.neverUpdateControl = bs.readFlag(); // 0x34c\n result.primaryAxis = bs.readRangedU32(0, 3); // 0x348 (FUN_0043f120(4) = 2 bits)\n result.maxCapacitorEnergy = bs.readF32(); // 0x35c\n result.capacitorRechargeRate = bs.readF32(); // 0x360\n return result;\n}\n\n// ============================================================\n// TurretImageData (extends ShapeBaseImageData)\n// ============================================================\n\nfunction turretImageDataUnpack(bs: BitStream): TurretImageDataBlock {\n const result: TurretImageDataBlock = shapeBaseImageDataUnpack(bs);\n // Verified against decompiled binary FUN_00654850\n result.activationMS = bs.readInt(8); // << 5 on store (0x1c04)\n result.deactivateDelayMS = bs.readInt(8); // << 5 on store (0x1c08)\n result.degPerSecTheta = bs.readRangedU32(0, 1080); // 0x1c10 (FUN_0043f120(0x439))\n result.degPerSecPhi = bs.readRangedU32(0, 1080); // 0x1c14\n result.dontFireInsideDamageRadius = bs.readFlag(); // 0x1c1c\n result.damageRadius = bs.readF32(); // 0x1c20\n result.useCapacitor = bs.readFlag(); // 0x1c24 (NOT a DataBlockRef)\n return result;\n}\n\n// ============================================================\n// ItemData (extends ShapeBaseData)\n// ============================================================\n\nfunction itemDataUnpack(bs: BitStream): ItemDataBlock {\n const result: ItemDataBlock = shapeBaseDataUnpack(bs);\n\n // 2×readFloat(10)\n result.friction = bs.readFloat(10);\n result.elasticity = bs.readFloat(10);\n\n // flag(sticky)\n result.sticky = bs.readFlag();\n\n // flag(gravityMod!=1) then readFloat(10)\n if (bs.readFlag()) result.gravityMod = bs.readFloat(10);\n\n // flag(maxVelocity!=-1) then F32\n if (bs.readFlag()) result.maxVelocity = bs.readF32();\n\n // flag(hasLight); if true: readInt(2) + 4×readFloat(7) + S32 + F32 + flag\n if (bs.readFlag()) {\n result.lightType = bs.readInt(2);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n result.lightTime = bs.readS32();\n result.lightRadius = bs.readF32();\n result.lightOnlyStatic = bs.readFlag();\n }\n\n return result;\n}\n\n// ============================================================\n// ProjectileData (extends GameBaseData — 0 parent bits)\n// ============================================================\n\nfunction projectileDataUnpack(bs: BitStream): ProjectileDataBlock {\n const result: ProjectileDataBlock = {};\n\n // readString (projectileName)\n result.projectileShapeName = bs.readString();\n\n // 2×S32\n result.faceViewerLinkTime = bs.readS32();\n result.lifetime = bs.readS32();\n\n // flag(faceViewer)\n result.faceViewer = bs.readFlag();\n\n // flag(nonDefaultScale); if true: 3×F32\n if (bs.readFlag()) {\n result.scale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n }\n\n // 9 readDataBlockRef fields in pack order (verified against decompiled\n // Tribes2.exe FUN_00631010 / FUN_006303f0 struct offsets).\n result.baseEmitter = readDataBlockRef(bs); // 0xe8 ParticleEmitterData\n result.delayEmitter = readDataBlockRef(bs); // 0xec ParticleEmitterData\n result.bubbleEmitter = readDataBlockRef(bs); // 0xf0 ParticleEmitterData\n result.explosion = readDataBlockRef(bs); // 0xf4 ExplosionData\n result.underwaterExplosion = readDataBlockRef(bs); // 0xf8 ExplosionData\n result.splash = readDataBlockRef(bs); // 0xfc SplashData\n result.sound = readDataBlockRef(bs); // 0x100 AudioProfile (in-flight)\n result.wetFireSound = readDataBlockRef(bs); // 0x104 AudioProfile\n result.fireSound = readDataBlockRef(bs); // 0x108 AudioProfile\n\n // 6 decal refs (loop)\n const decals: (number | null)[] = [];\n for (let i = 0; i < 6; i++) {\n decals.push(readDataBlockRef(bs));\n }\n result.decals = decals;\n\n // flag(hasLight); if true: readFloat(8) + 3×readFloat(7)\n if (bs.readFlag()) {\n result.lightRadius = bs.readFloat(8);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // flag(hasUnderwaterColor); if true: 3×readFloat(7)\n if (bs.readFlag()) {\n result.underwaterLightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // explodeOnWaterImpact: 8-bit bool via stream->write(sizeof(bool))\n // (confirmed in decompiled binary FUN_00631360: read(1,&var) at offset 0xcc)\n result.explodeOnWaterImpact = readBool(bs);\n // depthTolerance: F32\n result.depthTolerance = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// LinearProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction linearProjectileDataUnpack(bs: BitStream): LinearProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_0062bea0 (reads in struct-offset order), and initPersistFields\n // FUN_0062b3c0 maps names to those offsets:\n // 0x138 dryVelocity, 0x13c wetVelocity, 0x140 fizzleTimeMS,\n // 0x144 lifetimeMS, 0x148 explodeOnDeath,\n // 0x14c reflectOnWaterImpactAngle, 0x150 deflectionOnWaterImpact,\n // 0x154 fizzleUnderwaterMS, 0x158 activateDelayMS,\n // 0x15c doDynamicClientHits\n const result: LinearProjectileDataBlock = projectileDataUnpack(bs);\n\n // 2×F32 (0x138, 0x13c)\n result.dryVelocity = bs.readF32();\n result.wetVelocity = bs.readF32();\n\n // 2×U32 in milliseconds, tick-rounded by onAdd (0x140, 0x144)\n result.fizzleTimeMS = bs.readU32();\n result.lifetimeMS = bs.readU32();\n\n // flag (0x148)\n result.explodeOnDeath = bs.readFlag();\n\n // 2×readRangedU32(0,90) in degrees (0x14c, 0x150)\n result.reflectOnWaterImpactAngle = bs.readRangedU32(0, 90);\n result.deflectionOnWaterImpact = bs.readRangedU32(0, 90);\n\n // 2×U32 (0x154, 0x158)\n result.fizzleUnderwaterMS = bs.readU32();\n result.activateDelayMS = bs.readU32();\n\n // flag (0x15c)\n result.doDynamicClientHits = bs.readFlag();\n\n return result;\n}\n\n// ============================================================\n// GrenadeProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction grenadeProjectileDataUnpack(bs: BitStream): GrenadeProjectileDataBlock {\n const result: GrenadeProjectileDataBlock = projectileDataUnpack(bs);\n\n result.armingDelayMS = bs.readS32();\n result.muzzleVelocity = bs.readF32();\n result.grenadeElasticity = bs.readF32();\n result.grenadeFriction = bs.readF32();\n result.drag = bs.readF32();\n result.density = bs.readF32();\n result.gravityMod = bs.readF32();\n result.lifetimeMS = bs.readS32();\n\n return result;\n}\n\n// ============================================================\n// SeekerProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction seekerProjectileDataUnpack(bs: BitStream): SeekerProjectileDataBlock {\n const result: SeekerProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary (lines 430494-430580)\n // 10 F32/S32 (offsets 0x138-0x164)\n result.lifetimeMS = bs.readS32(); // 0x138\n result.muzzleVelocity = bs.readF32(); // 0x13c\n result.turningSpeed = bs.readF32(); // 0x140\n result.proximityRadius = bs.readF32(); // 0x14c\n result.terrainAvoidanceSpeed = bs.readF32(); // 0x150\n result.terrainScanAhead = bs.readF32(); // 0x154\n result.terrainHeightFail = bs.readF32(); // 0x158\n result.terrainAvoidanceRadius = bs.readF32(); // 0x15c\n result.flareDistance = bs.readF32(); // 0x160\n result.flareAngle = bs.readF32(); // 0x164\n\n // useFlechette — 8-bit bool via stream->read(1, &var) at offset 0x168\n // (confirmed: read(1, &cStack_21) = 1 BYTE = 8 bits, NOT readF32)\n result.useFlechette = readBool(bs);\n\n // 2 F32 (offsets 0x144, 0x148)\n result.maxVelocity = bs.readF32();\n result.acceleration = bs.readF32();\n\n // 2 S32 (offsets 0x16c, 0x180)\n result.flechetteDelayMs = bs.readS32();\n result.exhaustTimeMs = bs.readS32();\n\n // 2 readString (offsets 0x184, 0x190)\n result.exhaustNodeName = bs.readString();\n result.casingShapeName = bs.readString();\n\n // 3 conditional DataBlock refs (offsets 0x18c, 0x174, 0x17c)\n result.casingDebris = readDataBlockRef(bs);\n result.puffEmitter = readDataBlockRef(bs);\n result.exhaustEmitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SniperProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction sniperProjectileDataUnpack(bs: BitStream): SniperProjectileDataBlock {\n const result: SniperProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00641d40\n // 2×F32 (offsets 0x138, 0x13c)\n result.maxRifleRange = bs.readF32();\n result.rifleHeadMultiplier = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x140)\n result.beamColor = readColorF(bs);\n\n // 9×F32 (offsets 0x150, 0x154, 0x158, 0x168, 0x15c, 0x160, 0x164, 0x16c, 0x170)\n result.fadeTime = bs.readF32();\n result.startBeamWidth = bs.readF32();\n result.endBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x178)\n result.lightColor = readColorF(bs);\n\n // F32 (offset 0x174)\n result.lightRadius = bs.readF32();\n\n // 12 readString (ST_NUM_TEX=0xc)\n const textures: string[] = [];\n for (let i = 0; i < 12; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// ShockLanceProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction shockLanceProjectileDataUnpack(\n bs: BitStream\n): ShockLanceProjectileDataBlock {\n // Verified against decompiled binary FUN_0064e840\n const result: ShockLanceProjectileDataBlock = projectileDataUnpack(bs);\n\n // 7 F32 (offsets 0x138, 0x13c, 0x160, 0x164, 0x168, 0x16c, 0x170)\n result.zapDuration = bs.readF32();\n result.boltLength = bs.readF32();\n result.numParts = bs.readF32();\n result.lightningFreq = bs.readF32();\n result.lightningDensity = bs.readF32();\n result.lightningAmp = bs.readF32();\n result.lightningWidth = bs.readF32();\n\n // DataBlockRef (shockwave at offset 0x190)\n result.shockwave = readDataBlockRef(bs);\n\n // 2×4 loop: startWidth[2], endWidth[2], boltSpeed[2], texWrap[2]\n // (offsets 0x140+i*4, 0x148+i*4, 0x150+i*4, 0x158+i*4)\n const startWidth: number[] = [];\n const endWidth: number[] = [];\n const boltSpeed: number[] = [];\n const texWrap: number[] = [];\n for (let i = 0; i < 2; i++) {\n startWidth.push(bs.readF32());\n endWidth.push(bs.readF32());\n boltSpeed.push(bs.readF32());\n texWrap.push(bs.readF32());\n }\n result.startWidth = startWidth;\n result.endWidth = endWidth;\n result.boltSpeed = boltSpeed;\n result.texWrap = texWrap;\n\n // 4 readString (texture[4] at offset 0x174)\n const slTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n slTextures.push(bs.readString());\n }\n result.textures = slTextures;\n\n // DataBlockRef (emitter at offset 0x188)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// ELFProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction elfProjectileDataUnpack(bs: BitStream): ELFProjectileDataBlock {\n const result: ELFProjectileDataBlock = projectileDataUnpack(bs);\n\n // 6×F32\n result.beamRange = bs.readF32();\n result.beamDrainRate = bs.readF32();\n result.muzzleVelocity = bs.readF32();\n result.proximityRadius = bs.readF32();\n result.startWidth = bs.readF32();\n result.endWidth = bs.readF32();\n\n // 3 readString\n result.mainBeamTexture = bs.readString();\n result.innerBeamTexture = bs.readString();\n result.flareTexture = bs.readString();\n\n // 1 readDataBlockRef\n result.hitEmitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// RepairProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction repairProjectileDataUnpack(bs: BitStream): RepairProjectileDataBlock {\n const result: RepairProjectileDataBlock = projectileDataUnpack(bs);\n\n // 8×F32\n result.beamRange = bs.readF32();\n result.beamRepairRate = bs.readF32();\n result.muzzleVelocity = bs.readF32();\n result.proximityRadius = bs.readF32();\n result.startWidth = bs.readF32();\n result.endWidth = bs.readF32();\n result.startBeamWidth = bs.readF32();\n result.endBeamWidth = bs.readF32();\n\n // 2 readString\n result.mainBeamTexture = bs.readString();\n result.innerBeamTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// TargetProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction targetProjectileDataUnpack(bs: BitStream): TargetProjectileDataBlock {\n const result: TargetProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_006477f0\n // F32 (offset 0x138)\n result.maxRifleRange = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x13c)\n result.beamColor = readColorF(bs);\n\n // 7×F32 (offsets 0x14c, 0x15c, 0x150, 0x154, 0x158, 0x160, 0x164)\n result.startBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // 4 readString (textureName[4] at offset 0x16c)\n const targetTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n targetTextures.push(bs.readString());\n }\n result.textures = targetTextures;\n\n return result;\n}\n\n// ============================================================\n// TracerProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction tracerProjectileDataUnpack(bs: BitStream): TracerProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_00640160 (reads in struct-offset order), and initPersistFields\n // FUN_0063fcb0 maps names to those offsets:\n // 0x168 tracerLength, 0x16c tracerAlpha (bool), 0x170 tracerMinPixels,\n // 0x174 tracerColor, 0x184 tracerWidth, 0x188 crossViewAng,\n // 0x18c crossSize, 0x190 renderCross, 0x194[2] tracerTex\n const result: TracerProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // 3 F32 (offsets 0x168, 0x184, 0x170)\n result.tracerLength = bs.readF32();\n result.tracerWidth = bs.readF32();\n result.tracerMinPixels = bs.readF32();\n\n // readBool 8-bit (offset 0x16c)\n result.tracerAlpha = readBool(bs);\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x174)\n result.tracerColor = readColorF(bs);\n\n // 2 F32 (offsets 0x188, 0x18c)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n\n // readBool 8-bit (offset 0x190)\n result.renderCross = readBool(bs);\n\n // 2 readString (loop count=2 at offset 0x194)\n result.tracerTex0 = bs.readString();\n result.tracerTex1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// EnergyProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction energyProjectileDataUnpack(bs: BitStream): EnergyProjectileDataBlock {\n // Verified against decompiled binary FUN_00694d80 — parent is FUN_00633cf0 (GrenadeProjectileData)\n const result: EnergyProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 7×F32\n result.energyDrainPerSecond = bs.readF32();\n result.energyMinDrain = bs.readF32();\n result.beamWidth = bs.readF32();\n result.beamRange = bs.readF32();\n result.numSegments = bs.readF32();\n result.texRepeat = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n\n // 2 readString\n result.beamTexture = bs.readString();\n result.flareTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// LinearFlareProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction linearFlareProjectileDataUnpack(\n bs: BitStream\n): LinearFlareProjectileDataBlock {\n // Verified against decompiled binary FUN_0063dc80\n const result: LinearFlareProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // F32 (offset 0x168)\n result.numFlares = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x178)\n result.flareColor = readColorF(bs);\n\n // 2 readString (offsets 0x188, 0x18c)\n result.flareTexture = bs.readString();\n result.smokeTexture = bs.readString();\n\n // 3×F32 loop (offset 0x16c, count=3)\n result.size = bs.readF32();\n result.flareModTexture = bs.readF32();\n result.smokeSize = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// BombProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction bombProjectileDataUnpack(bs: BitStream): BombProjectileDataBlock {\n const result: BombProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 6×F32\n result.smokeDist = bs.readF32();\n result.noSmoke = bs.readF32();\n result.boomTime = bs.readF32();\n result.casingDist = bs.readF32();\n result.smokeCushion = bs.readF32();\n result.noSmokeCounter = bs.readF32();\n\n // 2 readString\n result.smokeTexture = bs.readString();\n result.bombTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// FlareProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction flareProjectileDataUnpack(bs: BitStream): FlareProjectileDataBlock {\n // Verified against decompiled binary FUN_006872f0\n const result: FlareProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // F32 (offset 0x158)\n result.size = bs.readF32();\n\n // readBool 8-bit (offset 0x160, read(1,...))\n result.useLensFlare = readBool(bs);\n\n // 2 readString loop (offset 0x164, count=2)\n result.flareTexture = bs.readString();\n result.lensFlareTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ExplosionData (extends GameBaseData)\n// ============================================================\n\nfunction explosionDataUnpack(bs: BitStream): ExplosionDataBlock {\n const result: ExplosionDataBlock = {};\n\n // readString\n result.dtsFileName = bs.readString();\n\n // 2 readDataBlockRef\n result.soundProfile = readDataBlockRef(bs);\n result.particleEmitter = readDataBlockRef(bs);\n\n // readInt(14) + F32 + flag\n result.particleDensity = bs.readInt(14);\n result.particleRadius = bs.readF32();\n result.faceViewer = bs.readFlag();\n\n // flag(scale); if true: 3×readInt(16)\n if (bs.readFlag()) {\n result.explosionScale = {\n x: bs.readInt(16),\n y: bs.readInt(16),\n z: bs.readInt(16),\n };\n }\n\n // readInt(14) + 4×readRangedU32 + 2×readRangedU32(0,1000) + readInt(14) + readRangedU32(0,10000)\n result.playSpeed = bs.readInt(14);\n result.debrisThetaMin = bs.readRangedU32(0, 180);\n result.debrisThetaMax = bs.readRangedU32(0, 180);\n result.debrisPhiMin = bs.readRangedU32(0, 360);\n result.debrisPhiMax = bs.readRangedU32(0, 360);\n result.debrisMinVelocity = bs.readRangedU32(0, 1000);\n result.debrisMaxVelocity = bs.readRangedU32(0, 1000);\n result.debrisNum = bs.readInt(14);\n result.debrisVariance = bs.readRangedU32(0, 10000);\n\n // 4×readInt(16) + F32 + 2 flags\n result.delayMS = bs.readInt(16);\n result.delayVariance = bs.readInt(16);\n result.lifetimeMS = bs.readInt(16);\n result.lifetimeVariance = bs.readInt(16);\n result.offset = bs.readF32();\n result.shakeCamera = bs.readFlag();\n result.hasLight = bs.readFlag();\n\n // 9×F32\n result.camShakeFreq = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.camShakeAmp = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.camShakeDuration = bs.readF32();\n result.camShakeRadius = bs.readF32();\n result.camShakeFalloff = bs.readF32();\n\n // readDataBlockRef(shockwave) + 1 debris ref + 4 emitter refs + 5 sub-explosion refs\n result.shockwave = readDataBlockRef(bs);\n result.debris = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n const subExplosions: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n subExplosions.push(readDataBlockRef(bs));\n }\n result.subExplosions = subExplosions;\n\n // readRangedU32(0,4) count; loop: readFloat(8) times + 3×readRangedU32(0,16000) sizes\n const timeCount = bs.readRangedU32(0, 4);\n const times: number[] = [];\n for (let i = 0; i < timeCount; i++) {\n times.push(bs.readFloat(8));\n }\n result.times = times;\n const sizes: { x: number; y: number; z: number }[] = [];\n for (let i = 0; i < timeCount; i++) {\n sizes.push({\n x: bs.readRangedU32(0, 16000),\n y: bs.readRangedU32(0, 16000),\n z: bs.readRangedU32(0, 16000),\n });\n }\n result.sizes = sizes;\n\n return result;\n}\n\n// ============================================================\n// DebrisData (extends GameBaseData)\n// ============================================================\n\nfunction debrisDataUnpack(bs: BitStream): DebrisDataBlock {\n // Field order confirmed from decompiled binary FUN_006844d0\n const result: DebrisDataBlock = {};\n\n result.elasticity = bs.readF32(); // 0x50\n result.friction = bs.readF32(); // 0x4c\n result.numBounces = bs.readS32(); // 0x5c\n result.bounceVariance = bs.readS32(); // 0x60\n result.minSpinSpeed = bs.readF32(); // 0x64\n result.maxSpinSpeed = bs.readF32(); // 0x68\n\n // 4 bools via stream->write(sizeof(bool)) = 8 bits each (0x6c-0x6f)\n result.render2D = readBool(bs);\n result.explodeOnMaxBounce = readBool(bs);\n result.staticOnMaxBounce = readBool(bs);\n result.snapOnMaxBounce = readBool(bs);\n\n result.lifetime = bs.readF32(); // 0x54\n result.lifetimeVariance = bs.readF32(); // 0x58\n\n // \"Written twice\" bug: same offsets 0x64/0x68 written again\n result.minSpinSpeed_dup = bs.readF32();\n result.maxSpinSpeed_dup = bs.readF32();\n\n result.velocity = bs.readF32(); // 0x44\n result.velocityVariance = bs.readF32(); // 0x48\n\n // 2 bools via stream->write(sizeof(bool)) = 8 bits each (0x70, 0x71)\n result.useRadiusMass = readBool(bs);\n result.fade = readBool(bs);\n\n result.baseRadius = bs.readF32(); // 0x74\n result.gravModifier = bs.readF32(); // 0x78\n result.terminalVelocity = bs.readF32(); // 0x7c\n\n result.ignoreWater = readBool(bs); // 0x80 (8-bit bool)\n\n // 2 readString — names binary-verified: 0x8c is registered as\n // `texture`, 0x84 as `shapeName` (read in that wire order)\n result.texture = bs.readString(); // 0x8c\n result.shapeName = bs.readString(); // 0x84\n\n // 2 emitter refs (loop at 0xa4, 0xa8) + 1 explosion ref (0x94)\n result.emitter0 = readDataBlockRef(bs);\n result.emitter1 = readDataBlockRef(bs);\n result.explosion = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SplashData (extends GameBaseData)\n// ============================================================\n\nfunction splashDataUnpack(bs: BitStream): SplashDataBlock {\n const result: SplashDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // ~15 F32/S32 values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n result.texFactor = bs.readF32();\n result.ejectionFreq = bs.readF32();\n result.ejectionAngle = bs.readF32();\n result.ringLifetime = bs.readF32();\n result.startRadius = bs.readF32();\n\n // explosion ref + 3 emitter refs\n result.explosion = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.foamTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ShockwaveData (extends GameBaseData)\n// ============================================================\n\nfunction shockwaveDataUnpack(bs: BitStream): ShockwaveDataBlock {\n const result: ShockwaveDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // ~17 F32/S32/bool values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.numVertSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.verticalCurve = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n // 5 bools via stream->write(sizeof(bool)) = 8 bits each\n // (confirmed at offsets 0x98-0x9c in binary, using read(1,&var) pattern)\n result.is2D = readBool(bs);\n result.orientToNormal = readBool(bs);\n result.mapToTerrain = readBool(bs);\n result.renderBottom = readBool(bs);\n result.renderSquare = readBool(bs);\n\n // 3 emitter refs\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.mapToTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmitterData (extends GameBaseData)\n// ============================================================\n\nfunction particleEmitterDataUnpack(bs: BitStream): ParticleEmitterDataBlock {\n const result: ParticleEmitterDataBlock = {};\n\n // 4 readInt(various)\n result.ejectionPeriodMS = bs.readInt(10);\n result.periodVarianceMS = bs.readInt(10);\n result.ejectionVelocity = bs.readInt(16);\n result.velocityVariance = bs.readInt(14);\n\n // flag then readInt(16)\n if (bs.readFlag()) {\n result.ejectionOffset = bs.readInt(16);\n }\n\n // 2×readRangedU32(0,180)\n result.thetaMin = bs.readRangedU32(0, 180);\n result.thetaMax = bs.readRangedU32(0, 180);\n\n // 2 conditional readRangedU32(0,360)\n if (bs.readFlag()) result.phiReferenceVel = bs.readRangedU32(0, 360);\n if (bs.readFlag()) result.phiVariance = bs.readRangedU32(0, 360);\n\n // 3 flags\n result.overrideAdvances = bs.readFlag();\n result.orientParticles = bs.readFlag();\n result.orientOnVelocity = bs.readFlag();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // 2 flags\n result.useEmitterSizes = bs.readFlag();\n result.useEmitterColors = bs.readFlag();\n\n // U32 count (4 bytes) + per-particle: flag(1b) + conditional readClassId(11b)\n // Verified against decompiled binary FUN_006222a0:\n // read(4, &count) → U32 count\n // for each: readFlag → if true: FUN_00436d10 (readClassId, 11 bits); else: 0xFFFFFFFF\n const particleCount = bs.readU32();\n const particles: (number | null)[] = [];\n for (let i = 0; i < particleCount && i < 16; i++) {\n particles.push(readDataBlockRef(bs));\n }\n result.particles = particles;\n\n return result;\n}\n\n// ============================================================\n// ParticleData (extends GameBaseData)\n// ============================================================\n\nfunction particleDataUnpack(bs: BitStream): ParticleDataBlock {\n const result: ParticleDataBlock = {};\n\n // readFloat(10) + flag then F32\n result.dragCoefficient = bs.readFloat(10);\n if (bs.readFlag()) result.windCoefficient = bs.readF32();\n\n // readSignedFloat(12)\n result.gravityCoefficient = bs.readSignedFloat(12);\n\n // readFloat(9) + flag then F32\n result.inheritedVelFactor = bs.readFloat(9);\n if (bs.readFlag()) result.constantAcceleration = bs.readF32();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // flag then F32 (spinSpeed at offset 0x58, conditional)\n if (bs.readFlag()) result.spinSpeed = bs.readF32();\n\n // flag then 2×readInt(11) (spinRandomMin/Max at 0x5c/0x60)\n // Verified against decompiled binary FUN_006232d0:\n // spinRandom conditional checks BOTH defaults, reads 11-bit values (subtract 1000)\n if (bs.readFlag()) {\n result.spinRandomMin = bs.readInt(11);\n result.spinRandomMax = bs.readInt(11);\n }\n\n // useInvAlpha — always read (1-bit flag at offset 0x64)\n // NOT inside the spinRandom conditional (confirmed in binary: separate readFlag at line 416229)\n result.useInvAlpha = bs.readFlag();\n\n // readInt(2) count(+1); per key: 4×readFloat(7) + readFloat(14) + readFloat(8)\n const numKeys = bs.readInt(2) + 1;\n const keys: ParticleKey[] = [];\n for (let i = 0; i < numKeys; i++) {\n keys.push({\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n size: bs.readFloat(14),\n time: bs.readFloat(8),\n });\n }\n result.keys = keys;\n\n // readInt(6) texCount; per tex: readString\n const texCount = bs.readInt(6);\n const textures: string[] = [];\n for (let i = 0; i < texCount && i < 50; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// AudioDescription (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioDescriptionUnpack(bs: BitStream): AudioDescriptionDataBlock {\n const result: AudioDescriptionDataBlock = {};\n\n // readFloat(6)\n result.volume = bs.readFloat(6);\n\n // flag(looping); if true: 3×S32\n result.isLooping = bs.readFlag();\n if (result.isLooping) {\n result.loopCount = bs.readS32();\n result.minLoopGap = bs.readS32();\n result.maxLoopGap = bs.readS32();\n }\n\n // flag(is3D); if true: 2×F32 + 2×readInt(9) + readFloat(6) + readNormalVector(8) + F32\n // Verified: decompiled FUN_0040c1a0 has NO isStreaming flag between isLooping and is3D.\n // Offsets: isLooping=0x40, is3D=0x41 — consecutive with no gap.\n result.is3D = bs.readFlag();\n if (result.is3D) {\n result.referenceDistance = bs.readF32();\n result.maxDistance = bs.readF32();\n result.coneInsideAngle = bs.readInt(9);\n result.coneOutsideAngle = bs.readInt(9);\n result.coneOutsideVolume = bs.readFloat(6);\n result.coneVector = bs.readNormalVector(8);\n result.environmentLevel = bs.readF32();\n }\n\n // readInt(3) — type\n result.type = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// AudioProfile (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioProfileUnpack(bs: BitStream): AudioProfileDataBlock {\n const result: AudioProfileDataBlock = {};\n\n // Verified: decompiled FUN_0040c7f0 reads 3 DataBlock refs + 1 string.\n // Offsets: 0x48 (description), 0x4c (effect/environment), 0x50 (sampleEnvironment)\n result.description = readDataBlockRef(bs);\n result.environment = readDataBlockRef(bs);\n result.sampleEnvironment = readDataBlockRef(bs);\n\n // readString (filename, .wav appended on read)\n result.filename = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// AudioEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioEnvironmentUnpack(bs: BitStream): AudioEnvironmentDataBlock {\n // Verified against decompiled binary FUN_0040b530\n const result: AudioEnvironmentDataBlock = {};\n\n // flag(useRoom) → offset 0x3c\n result.useRoom = bs.readFlag();\n if (result.useRoom) {\n // readRangedU32(0, 26) → offset 0x40 (FUN_0043f120(0x1b=27), rangeSize=27, max=26)\n result.room = bs.readRangedU32(0, 26);\n } else {\n // 13 fields inside !useRoom branch (binary offsets 0x44-0x7c)\n result.roomHF = readRangedS32(bs, -10000, 0); // 0x44\n result.reflections = readRangedS32(bs, -10000, 10000); // 0x48\n result.reverb = readRangedS32(bs, -10000, 2000); // 0x4c\n result.roomRolloffFactor = readRangedF32(bs, 0.1, 10, 8); // 0x50\n result.decayTime = readRangedF32(bs, 0.1, 20, 8); // 0x54\n result.decayHFRatio = readRangedF32(bs, 0.1, 20, 8); // 0x58\n result.reflectionsDelay = readRangedF32(bs, 0, 0.3, 9); // 0x5c\n result.reverbDelay = readRangedF32(bs, 0, 0.1, 7); // 0x60\n result.roomVolume = readRangedS32(bs, -10000, 0); // 0x64\n // Names binary-verified: initPersistFields maps 0x6c damping,\n // 0x70 environmentSize, 0x74 environmentDiffusion, 0x78 airAbsorption.\n result.damping = readRangedF32(bs, 0, 1, 9); // 0x6c (9 bits, confirmed in binary)\n result.environmentSize = readRangedF32(bs, 0, 2, 10); // 0x70 (10 bits, confirmed in binary)\n result.environmentDiffusion = readRangedF32(bs, 1, 100, 8); // 0x74 (8 bits, confirmed in binary)\n result.airAbsorption = readRangedF32(bs, 0, 1, 10); // 0x78 (10 bits, confirmed in binary)\n result.flags = bs.readInt(6); // 0x7c\n }\n\n // Trailing field: always present after both branches (offset 0x68 =\n // effectVolume per initPersistFields)\n result.effectVolume = readRangedF32(bs, 0, 1, 8);\n\n return result;\n}\n\n// ============================================================\n// AudioSampleEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioSampleEnvironmentUnpack(bs: BitStream): AudioSampleEnvironmentDataBlock {\n const result: AudioSampleEnvironmentDataBlock = {};\n\n // Series of rangedS32 and rangedF32 values + readInt(3)\n result.direct = readRangedS32(bs, -10000, 1000);\n result.directHF = readRangedS32(bs, -10000, 0);\n result.room = readRangedS32(bs, -10000, 1000);\n result.roomHF = readRangedS32(bs, -10000, 0);\n result.obstruction = readRangedF32(bs, 0, 1, 9);\n result.obstructionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusion = readRangedF32(bs, 0, 1, 9);\n result.occlusionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusionRoomRatio = readRangedF32(bs, 0, 10, 9);\n result.roomRolloff = readRangedF32(bs, 0, 10, 9);\n result.airAbsorption = readRangedF32(bs, 0, 10, 9);\n result.outsideVolumeHF = readRangedS32(bs, -10000, 0);\n result.flags = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// DecalData (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction decalDataUnpack(bs: BitStream): DecalDataBlock {\n return {\n sizeX: bs.readF32(),\n sizeY: bs.readF32(),\n textureName: bs.readString(),\n };\n}\n\n// ============================================================\n// CameraData (extends ShapeBaseData) — no additional fields\n// ============================================================\n\nfunction cameraDataUnpack(bs: BitStream): CameraDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// SensorData — empty body\n// ============================================================\n\nfunction sensorDataUnpack(_bs: BitStream): SensorDataBlock {\n return {};\n}\n\n// ============================================================\n// TriggerData — S32(tickPeriodMS)\n// ============================================================\n\nfunction triggerDataUnpack(bs: BitStream): TriggerDataBlock {\n return { tickPeriodMS: bs.readS32() };\n}\n\n// ============================================================\n// ForceFieldBareData\n// ============================================================\n\nfunction forceFieldBareDataUnpack(bs: BitStream): ForceFieldBareDataBlock {\n // Verified against decompiled binary FUN_00675580\n const result: ForceFieldBareDataBlock = {};\n\n // 3 S32/F32 (offsets 0x44, 0x48, 0x4c)\n result.fadeMS = bs.readS32();\n result.baseTranslucency = bs.readF32();\n result.powerOffTranslucency = bs.readF32();\n\n // 2 readFlag (offsets 0x8c, 0x8d — 1-bit flags, inline bit extraction)\n result.fadeInOnly = bs.readFlag();\n result.triggerEnable = bs.readFlag();\n\n // 2 ColorF via FUN_0043f040 (packed 4×U8 = 32 bits each, offsets 0x90, 0xa0)\n result.color1 = readColorF(bs);\n result.color2 = readColorF(bs);\n\n // Offsets 0x84, 0x88, 0x80, 0x78, 0x7c — named to match TorqueScript fields.\n // framesPerSec and numFrames are S32 (integers); the rest are F32.\n result.framesPerSec = bs.readS32(); // 0x84\n result.numFrames = bs.readS32(); // 0x88\n result.scrollSpeed = bs.readF32(); // 0x80\n result.umapping = bs.readF32(); // 0x78\n result.vmapping = bs.readF32(); // 0x7c\n\n // 5 readString (loop at 0x50+i*4)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n result.texture2 = bs.readString();\n result.texture3 = bs.readString();\n result.texture4 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmissionDummyData — F32(timeMultiple)\n// ============================================================\n\nfunction particleEmissionDummyDataUnpack(\n bs: BitStream\n): ParticleEmissionDummyDataBlock {\n return { timeMultiple: bs.readF32() };\n}\n\n// ============================================================\n// CommanderIconData — 5 readString (NumImages=5)\n// ============================================================\n\nfunction commanderIconDataUnpack(bs: BitStream): CommanderIconDataBlock {\n return {\n baseImage: bs.readString(),\n activeImage: bs.readString(),\n inactiveImage: bs.readString(),\n selectImage: bs.readString(),\n hilightImage: bs.readString(),\n };\n}\n\n// ============================================================\n// PrecipitationData\n// ============================================================\n\nfunction precipitationDataUnpack(bs: BitStream): PrecipitationDataBlock {\n // Verified against decompiled binary FUN_006805d0\n const result: PrecipitationDataBlock = {};\n\n // DataBlockRef (soundProfile at offset 0x48)\n result.soundProfile = readDataBlockRef(bs);\n\n // S32 (offset 0x4c)\n result.numDrops = bs.readS32();\n\n // F32 (maxSize at offset 0x50 — before string)\n result.maxSize = bs.readF32();\n\n // readString (materialList at offset 0x5c)\n result.materialList = bs.readString();\n\n // 13×F32 (offsets 0x54, 0x58, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88)\n result.sizeX = bs.readF32();\n result.sizeY = bs.readF32();\n result.movingBoxPer = bs.readF32();\n result.divHeightVal = bs.readF32();\n result.sizeBigBox = bs.readF32();\n result.topBoxSpeed = bs.readF32();\n result.frontBoxSpeed = bs.readF32();\n result.topBoxDrawPer = bs.readF32();\n result.bottomDrawHeight = bs.readF32();\n result.skipIfPer = bs.readF32();\n result.bottomSpeedPer = bs.readF32();\n result.frontSpeedPer = bs.readF32();\n result.frontRadiusPer = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FireballAtmosphereData\n// ============================================================\n\nfunction fireballAtmosphereDataUnpack(bs: BitStream): FireballAtmosphereDataBlock {\n return { emitter: readDataBlockRef(bs) };\n}\n\n// ============================================================\n// LightningData\n// ============================================================\n\nfunction lightningDataUnpack(bs: BitStream): LightningDataBlock {\n const result: LightningDataBlock = {};\n\n // 8 readDataBlockRef (strikeSound profiles)\n const strikeSounds: (number | null)[] = [];\n for (let i = 0; i < 8; i++) {\n strikeSounds.push(readDataBlockRef(bs));\n }\n result.strikeSounds = strikeSounds;\n\n // 8 readString (strikeTextures)\n const strikeTextures: string[] = [];\n for (let i = 0; i < 8; i++) {\n strikeTextures.push(bs.readString());\n }\n result.strikeTextures = strikeTextures;\n\n // readDataBlockRef (thunder sound)\n result.thunderSound = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// StationFXVehicleData\n// ============================================================\n\nfunction stationFXVehicleDataUnpack(bs: BitStream): StationFXVehicleDataBlock {\n // Field order confirmed from decompiled binary FUN_0069d570\n const result: StationFXVehicleDataBlock = {};\n\n // 11 F32 fields (offsets 0x44-0x6c)\n result.glowTopHeight = bs.readF32(); // 0x44\n result.glowBottomHeight = bs.readF32(); // 0x48\n result.glowTopRadius = bs.readF32(); // 0x4c\n result.glowBottomRadius = bs.readF32(); // 0x50\n result.numGlowSegments = bs.readF32(); // 0x54\n result.glowFadeTime = bs.readF32(); // 0x58\n result.armLightDelay = bs.readF32(); // 0x5c\n result.armLightLifetime = bs.readF32(); // 0x60\n result.armLightFadeTime = bs.readF32(); // 0x64\n result.lifetime = bs.readF32(); // 0x68\n result.numArcSegments = bs.readF32(); // 0x6c\n\n // ColorF via FUN_0043f040 (4×U8 = 32 bits at offset 0x70)\n result.sphereColor = readColorF(bs);\n\n // 6 F32 fields (offsets 0x80-0x94)\n result.spherePhiSegments = bs.readF32(); // 0x80\n result.sphereThetaSegments = bs.readF32(); // 0x84\n result.sphereRadius = bs.readF32(); // 0x88\n result.scale = {\n x: bs.readF32(), // 0x8c\n y: bs.readF32(), // 0x90\n z: bs.readF32(), // 0x94\n };\n\n // 11 strings — names binary-verified (initPersistFields: 0x98\n // glowNodeName, 0x9c leftNodeName[4], 0xac rightNodeName[4], 0xbc\n // texture[2]) and demo-verified (\"GLOWFX\", LFX1/RFX1…, stationGlow).\n result.glowNodeName = bs.readString(); // 0x98\n\n // 4×(left, right) node name pairs, interleaved on the wire\n result.leftNodeName0 = bs.readString();\n result.rightNodeName0 = bs.readString();\n result.leftNodeName1 = bs.readString();\n result.rightNodeName1 = bs.readString();\n result.leftNodeName2 = bs.readString();\n result.rightNodeName2 = bs.readString();\n result.leftNodeName3 = bs.readString();\n result.rightNodeName3 = bs.readString();\n\n // 2 readString\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// StationFXPersonalData\n// ============================================================\n\nfunction stationFXPersonalDataUnpack(bs: BitStream): StationFXPersonalDataBlock {\n const result: StationFXPersonalDataBlock = {};\n\n // ~10 F32\n result.glowTopRadius = bs.readF32();\n result.glowBottomRadius = bs.readF32();\n result.glowTopHeight = bs.readF32();\n result.glowBottomHeight = bs.readF32();\n result.numGlowSegments = bs.readF32();\n result.numGlowPanels = bs.readF32();\n result.topAlpha = bs.readF32();\n result.bottomAlpha = bs.readF32();\n result.glowSpeed = bs.readF32();\n result.scrollSpeed = bs.readF32();\n\n // 4 strings — demo-verified (\"FX1\", \"FX2\", \"special/stationLight\"):\n // the two attach node names, then texture[2]\n result.leftNodeName = bs.readString();\n result.rightNodeName = bs.readString();\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// CannedChatItem (game-specific, Tribes 2 only)\n// From Tribes 2 script reference: single readString (chatText)\n// ============================================================\n\nfunction cannedChatItemUnpack(bs: BitStream): CannedChatItemDataBlock {\n return { chatText: bs.readString() };\n}\n\n// ============================================================\n// MissionMarkerData (extends ShapeBaseData — no additional fields)\n// ============================================================\n\nfunction missionMarkerDataUnpack(bs: BitStream): MissionMarkerDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// GameBaseData (extends SimDataBlock — 0 bits on wire)\n// ============================================================\n\nfunction gameBaseDataUnpack(_bs: BitStream): GameBaseDataBlock {\n return {};\n}\n\n// ============================================================\n// SimDataBlock — 0 bits on wire (base class)\n// ============================================================\n\nfunction simDataBlockUnpack(_bs: BitStream): SimDataBlock {\n return {};\n}\n\n// ============================================================\n// TSShapeConstructor (extends SimDataBlock)\n// readString(shape) + readInt(7) count + count × readString\n// NumSequenceBits = 7\n// ============================================================\n\nfunction tsShapeConstructorUnpack(bs: BitStream): TSShapeConstructorDataBlock {\n const result: TSShapeConstructorDataBlock = {};\n result.shape = bs.readString();\n const count = bs.readInt(7);\n const sequences: string[] = [];\n for (let i = 0; i < count && i < 128; i++) {\n sequences.push(bs.readString());\n }\n result.sequences = sequences;\n return result;\n}\n\n// ============================================================\n// EffectProfile (classId 139)\n// From decompiled binary FUN_0050dde0.\n// Parent: SimDataBlock (no-op)\n// ============================================================\n\nfunction effectProfileUnpack(bs: BitStream): EffectProfileDataBlock {\n const result: EffectProfileDataBlock = {};\n result.minDistance = bs.readF32(); // 0x40\n result.maxDistance = bs.readF32(); // 0x44\n result.audioScale = bs.readF32(); // 0x48\n result.directional = readBool(bs); // 0x4c, _read(1) = 8-bit bool\n result.effectName = bs.readString(); // 0x3c\n return result;\n}\n\n// ============================================================\n// JetEffectData (classId 150)\n// From decompiled binary FUN_0069fe60.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction jetEffectDataUnpack(bs: BitStream): JetEffectDataBlock {\n const result: JetEffectDataBlock = {};\n result.coolColor = readColorF(bs); // 0x44, FUN_0043f040 = packed 4×U8\n result.hotColor = readColorF(bs); // 0x54, FUN_0043f040 = packed 4×U8\n result.activateTime = bs.readF32(); // 0x64\n result.deactivateTime = bs.readF32(); // 0x68\n result.length = bs.readF32(); // 0x6c\n result.width = bs.readF32(); // 0x70\n result.speed = bs.readF32(); // 0x74\n result.stretch = bs.readF32(); // 0x78\n result.yOffset = bs.readF32(); // 0x7c\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x80\n }\n return result;\n}\n\n// ============================================================\n// RunningLightData (classId 162)\n// From decompiled binary FUN_006a0af0.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction runningLightDataUnpack(bs: BitStream): RunningLightDataBlock {\n const result: RunningLightDataBlock = {};\n result.radius = bs.readF32(); // 0x48\n result.color = readColorF(bs); // 0x4c, FUN_0043f040 = packed 4×U8\n result.type = bs.readF32(); // 0x44, stored as F32 (bool/int on wire)\n result.length = bs.readF32(); // 0x78\n result.nodeName = bs.readString(); // 0x5c\n result.direction = { // 0x60-0x68\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.offset = { // 0x6c-0x74\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x7c\n }\n return result;\n}\n\n// ============================================================\n// Registration\n// ============================================================\n\nexport function registerDataBlockParsers(registry: ClassRegistry): void {\n // Base types\n registry.catalogDataBlock({\n name: \"ShapeBaseData\",\n unpackData: shapeBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShapeBaseImageData\",\n unpackData: shapeBaseImageDataUnpack,\n });\n\n // Player/Vehicle types\n registry.catalogDataBlock({ name: \"PlayerData\", unpackData: playerDataUnpack });\n registry.catalogDataBlock({\n name: \"VehicleData\",\n unpackData: vehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlyingVehicleData\",\n unpackData: flyingVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"HoverVehicleData\",\n unpackData: hoverVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"WheeledVehicleData\",\n unpackData: wheeledVehicleDataUnpack,\n });\n\n // Static/Turret types\n registry.catalogDataBlock({\n name: \"StaticShapeData\",\n unpackData: staticShapeDataUnpack,\n });\n registry.catalogDataBlock({ name: \"TurretData\", unpackData: turretDataUnpack });\n registry.catalogDataBlock({\n name: \"TurretImageData\",\n unpackData: turretImageDataUnpack,\n });\n\n // Item\n registry.catalogDataBlock({ name: \"ItemData\", unpackData: itemDataUnpack });\n\n // Projectile types\n registry.catalogDataBlock({\n name: \"ProjectileData\",\n unpackData: projectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearProjectileData\",\n unpackData: linearProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GrenadeProjectileData\",\n unpackData: grenadeProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SeekerProjectileData\",\n unpackData: seekerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SniperProjectileData\",\n unpackData: sniperProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockLanceProjectileData\",\n unpackData: shockLanceProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ELFProjectileData\",\n unpackData: elfProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RepairProjectileData\",\n unpackData: repairProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TargetProjectileData\",\n unpackData: targetProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TracerProjectileData\",\n unpackData: tracerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"EnergyProjectileData\",\n unpackData: energyProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearFlareProjectileData\",\n unpackData: linearFlareProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"BombProjectileData\",\n unpackData: bombProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlareProjectileData\",\n unpackData: flareProjectileDataUnpack,\n });\n\n // Effects\n registry.catalogDataBlock({\n name: \"ExplosionData\",\n unpackData: explosionDataUnpack,\n });\n registry.catalogDataBlock({ name: \"DebrisData\", unpackData: debrisDataUnpack });\n registry.catalogDataBlock({ name: \"SplashData\", unpackData: splashDataUnpack });\n registry.catalogDataBlock({\n name: \"ShockwaveData\",\n unpackData: shockwaveDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmitterData\",\n unpackData: particleEmitterDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleData\",\n unpackData: particleDataUnpack,\n });\n\n // Audio\n registry.catalogDataBlock({\n name: \"AudioDescription\",\n unpackData: audioDescriptionUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioProfile\",\n unpackData: audioProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioEnvironment\",\n unpackData: audioEnvironmentUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioSampleEnvironment\",\n unpackData: audioSampleEnvironmentUnpack,\n });\n\n // Misc\n registry.catalogDataBlock({ name: \"DecalData\", unpackData: decalDataUnpack });\n registry.catalogDataBlock({\n name: \"CameraData\",\n unpackData: cameraDataUnpack,\n });\n registry.catalogDataBlock({ name: \"SensorData\", unpackData: sensorDataUnpack });\n registry.catalogDataBlock({\n name: \"TriggerData\",\n unpackData: triggerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ForceFieldBareData\",\n unpackData: forceFieldBareDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmissionDummyData\",\n unpackData: particleEmissionDummyDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"CommanderIconData\",\n unpackData: commanderIconDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"PrecipitationData\",\n unpackData: precipitationDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FireballAtmosphereData\",\n unpackData: fireballAtmosphereDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LightningData\",\n unpackData: lightningDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXVehicleData\",\n unpackData: stationFXVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXPersonalData\",\n unpackData: stationFXPersonalDataUnpack,\n });\n\n // Classes added from game-specific analysis\n registry.catalogDataBlock({\n name: \"CannedChatItem\",\n unpackData: cannedChatItemUnpack,\n });\n registry.catalogDataBlock({\n name: \"MissionMarkerData\",\n unpackData: missionMarkerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GameBaseData\",\n unpackData: gameBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SimDataBlock\",\n unpackData: simDataBlockUnpack,\n });\n registry.catalogDataBlock({\n name: \"TSShapeConstructor\",\n unpackData: tsShapeConstructorUnpack,\n });\n\n // Previously missing parsers (verified against decompiled binary)\n registry.catalogDataBlock({\n name: \"EffectProfile\",\n unpackData: effectProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"JetEffectData\",\n unpackData: jetEffectDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RunningLightData\",\n unpackData: runningLightDataUnpack,\n });\n}\n"]}
1
+ {"version":3,"file":"DataBlockParsers.js","sourceRoot":"","sources":["../src/DataBlockParsers.ts"],"names":[],"mappings":"AA+DA,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAE/D;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,EAAa;IACrC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,EAAa,EAAE,GAAW,EAAE,GAAW;IAC5D,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,EAAa;IAM/B,OAAO;QACL,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;QACtB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;QACtB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;QACtB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;KACvB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,EAAa;IAC7B,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,EAAa,EACb,GAAW,EACX,GAAW,EACX,IAAY;IAEZ,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,+DAA+D;AAC/D,yCAAyC;AACzC,+DAA+D;AAE/D,sDAAsD;AAEtD;;;;;;;GAOG;AACH,SAAS,mBAAmB,CAAC,EAAa;IACxC,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,uCAAuC;IACvC,6DAA6D;IAC7D,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEnC,uDAAuD;IACvD,4DAA4D;IAC5D,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IACxD,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IACxD,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IAC3D,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IAC7D,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IACjE,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IACjE,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IACpE,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IAChE,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IAEhE,2CAA2C;IAC3C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEzC,gEAAgE;IAChE,mFAAmF;IACnF,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,WAAW,GAAG;YACnB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE9C,wCAAwC;IACxC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAErC,4CAA4C;IAC5C,wEAAwE;IACxE,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEzC,gEAAgE;IAChE,iDAAiD;IACjD,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE5C,wEAAwE;IACxE,mCAAmC;IACnC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IACrC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IAEpD,kEAAkE;IAClE,uEAAuE;IACvE,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;IACnD,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;IACrD,MAAM,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;IAC/D,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;IAElD,uBAAuB;IACvB,mCAAmC;IACnC,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IACvD,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IAE5C,2CAA2C;IAC3C,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE7C,2CAA2C;IAC3C,iEAAiE;IACjE,2EAA2E;IAC3E,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,iBAAiB,GAAG;YACzB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;YACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;YACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,uDAAuD;IACvD,8DAA8D;IAC9D,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW;YAAE,SAAS;QAC3B,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,uBAAuB;QAC7D,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,uBAAuB;QACjF,MAAM,GAAG,GAAkB;YACzB,YAAY;YACZ,SAAS;YACT,YAAY,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,qBAAqB;YAClD,eAAe,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,qBAAqB;YACrD,YAAY,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,qBAAqB;YAClD,cAAc,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,qBAAqB;YACpD,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,qBAAqB;SACjD,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAEvD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,qDAAqD;AACrD,+DAA+D;AAE/D,SAAS,wBAAwB,CAAC,EAAa;IAC7C,gDAAgD;IAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,kCAAkC;IAClC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAED,YAAY;IACZ,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEnC,mBAAmB;IACnB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEjC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAC3C,CAAC;IAED,qBAAqB;IACrB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEnC,aAAa;IACb,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3B,oBAAoB;IACpB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAElC,kBAAkB;IAClB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEhC,kBAAkB;IAClB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEhC,gCAAgC;IAChC,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEzC,uEAAuE;IACvE,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE1C,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAChC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEjC,wEAAwE;IACxE,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,CAAC,YAAY,GAAG;QACpB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAExC,sBAAsB;IACtB,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEpC,4BAA4B;IAC5B,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAErC,yEAAyE;IACzE,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEhC,2CAA2C;IAC3C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAE7B,iEAAiE;QACjE,iEAAiE;QACjE,8DAA8D;QAC9D,kEAAkE;QAClE,iEAAiE;QACjE,eAAe;QACf,MAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,oBAAoB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,uBAAuB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,mBAAmB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE1C,0CAA0C;QAC1C,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,wBAAwB;QACxB,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QACrC,cAAc;QACd,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3B,oBAAoB;QACpB,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QACjC,wBAAwB;QACxB,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QACrC,mBAAmB;QACnB,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAChC,yFAAyF;QACzF,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC7B,yCAAyC;QACzC,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,sBAAsB;QACtB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7B,oBAAoB;QACpB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3B,sBAAsB;QACtB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7B,oDAAoD;QACpD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClE,uDAAuD;QACvD,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,uBAAuB;QACvB,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QACpC,8BAA8B;QAC9B,MAAM,oBAAoB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3C,oDAAoD;QACpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,MAAM,WAAW,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,2BAA2B;QAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM,KAAK,GAAe;YACxB,IAAI;YACJ,qBAAqB;YACrB,kBAAkB;YAClB,gBAAgB;YAChB,kBAAkB;YAClB,kBAAkB;YAClB,oBAAoB;YACpB,eAAe;YACf,kBAAkB;YAClB,qBAAqB;YACrB,uBAAuB;YACvB,mBAAmB;YACnB,YAAY;YACZ,cAAc;YACd,IAAI;YACJ,UAAU;YACV,cAAc;YACd,SAAS;YACT,MAAM;YACN,WAAW;YACX,MAAM;YACN,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,WAAW;YACX,aAAa;YACb,oBAAoB;YACpB,OAAO;YACP,WAAW;YACX,WAAW;YACX,KAAK;SACN,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,qCAAqC;AACrC,+DAA+D;AAE/D,SAAS,gBAAgB,CAAC,EAAa;IACrC,MAAM,MAAM,GAAoB,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAExD,iEAAiE;IACjE,wEAAwE;IACxE,gEAAgE;IAChE,wDAAwD;IAExD,qDAAqD;IACrD,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEzC,uEAAuE;IACvE,qEAAqE;IACrE,qEAAqE;IACrE,uEAAuE;IACvE,gDAAgD;IAEhD,mCAAmC;IACnC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACxC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAClD,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvD,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,wBAAwB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACxD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAClD,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC1D,0CAA0C;IAE1C,qDAAqD;IACrD,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;IACtE,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,uCAAuC;IAC5E,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACxC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC/C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzD,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC1D,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAEtD,2BAA2B;IAC3B,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAE/C,kCAAkC;IAClC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACpD,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC/C,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAEhD,2CAA2C;IAC3C,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjC,kCAAkC;IAClC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACjD,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC1C,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAE9C,0EAA0E;IAC1E,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC3C,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzD,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvD,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvD,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAEpD,4BAA4B;IAC5B,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAE9C,2DAA2D;IAC3D,+DAA+D;IAC/D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,kDAAkD;IAClD,MAAM,CAAC,OAAO,GAAG;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IAEF,4DAA4D;IAC5D,MAAM,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAErC,8CAA8C;IAC9C,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,kDAAkD;IAClD,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAErC,6CAA6C;IAC7C,MAAM,cAAc,GAAsB,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IAEvC,mEAAmE;IACnE,kEAAkE;IAClE,mEAAmE;IACnE,wDAAwD;IACxD,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC/C,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAClD,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACpD,MAAM,CAAC,qBAAqB,GAAG;QAC7B,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ;QACzB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ;QACzB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ;KAC1B,CAAC;IACF,MAAM,CAAC,oBAAoB,GAAG;QAC5B,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ;QACzB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ;QACzB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ;KAC1B,CAAC;IACF,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzD,MAAM,CAAC,wBAAwB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAExD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,sCAAsC;AACtC,+DAA+D;AAE/D,SAAS,iBAAiB,CAAC,EAAa;IACtC,MAAM,MAAM,GAAqB,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAEzD,iEAAiE;IAEjE,8DAA8D;IAC9D,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEnC,gEAAgE;IAChE,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,kCAAkC;IAClC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC/C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,kBAAkB;IACzD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,sEAAsE;IACtE,kCAAkC;IAClC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACxC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACjD,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC1C,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAClD,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvD,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACvD,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzD,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAEvD,sEAAsE;IACtE,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAEjC,8CAA8C;IAC9C,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE1C,kEAAkE;IAClE,MAAM,cAAc,GAAsB,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IAEvC,kEAAkE;IAClE,MAAM,cAAc,GAAsB,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IAEvC,4EAA4E;IAC5E,MAAM,CAAC,oBAAoB,GAAG;QAC5B,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IACF,MAAM,CAAC,oBAAoB,GAAG;QAC5B,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IAEF,yDAAyD;IACzD,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE5C,iDAAiD;IACjD,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEvC,oDAAoD;IACpD,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7C,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,0CAA0C;AAC1C,+DAA+D;AAE/D,SAAS,uBAAuB,CAAC,EAAa;IAC5C,MAAM,MAAM,GAA2B,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAE7D,eAAe;IACf,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEjD,qBAAqB;IACrB,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAEjC,4DAA4D;IAC5D,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7C,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,yCAAyC;AACzC,+DAA+D;AAE/D,SAAS,sBAAsB,CAAC,EAAa;IAC3C,MAAM,MAAM,GAA0B,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAE5D,UAAU;IACV,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEnC,0BAA0B;IAC1B,MAAM,CAAC,eAAe,GAAG;QACvB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IAEF,SAAS;IACT,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEzC,eAAe;IACf,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,UAAU,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEzC,qBAAqB;IACrB,MAAM,WAAW,GAAsB,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAEjC,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE/C,SAAS;IACT,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,2CAA2C;AAC3C,+DAA+D;AAE/D,SAAS,wBAAwB,CAAC,EAAa;IAC7C,MAAM,MAAM,GAA4B,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAE9D,cAAc;IACd,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE9C,mBAAmB;IACnB,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE1C,eAAe;IACf,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAExC,UAAU;IACV,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,0CAA0C;AAC1C,+DAA+D;AAE/D,SAAS,qBAAqB,CAAC,EAAa;IAC1C,MAAM,MAAM,GAAyB,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC1C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,uCAAuC;AACvC,+DAA+D;AAE/D,SAAS,gBAAgB,CAAC,EAAa;IACrC,MAAM,MAAM,GAAoB,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1D,kDAAkD;IAClD,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACxC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACxC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACzC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ;IACnD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mCAAmC;IAChF,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAClD,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,+CAA+C;AAC/C,+DAA+D;AAE/D,SAAS,qBAAqB,CAAC,EAAa;IAC1C,MAAM,MAAM,GAAyB,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAClE,kDAAkD;IAClD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;IAC9D,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB;IACnE,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B;IAClF,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;IAC1D,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS;IAC5D,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS;IAC7C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,8BAA8B;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAE/D,SAAS,cAAc,CAAC,EAAa;IACnC,MAAM,MAAM,GAAkB,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAEtD,kBAAkB;IAClB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAErC,eAAe;IACf,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE9B,yCAAyC;IACzC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAExD,iCAAiC;IACjC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAErD,0EAA0E;IAC1E,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,GAAG;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;SACnB,CAAC;QACF,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,wDAAwD;AACxD,+DAA+D;AAE/D,SAAS,oBAAoB,CAAC,EAAa;IACzC,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,8BAA8B;IAC9B,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAE7C,QAAQ;IACR,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE/B,mBAAmB;IACnB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAElC,wCAAwC;IACxC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,GAAG;YACb,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;YACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;YACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,2DAA2D;IAC3D,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B;IACtE,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B;IACvE,MAAM,CAAC,aAAa,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B;IACxE,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAC9D,MAAM,CAAC,mBAAmB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;IACxE,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB;IACxD,MAAM,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,iCAAiC;IACtE,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;IACjE,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAE9D,sBAAsB;IACtB,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,yDAAyD;IACzD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,UAAU,GAAG;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,oBAAoB,GAAG;YAC5B,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,6EAA6E;IAC7E,MAAM,CAAC,oBAAoB,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,sBAAsB;IACtB,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,gEAAgE;IAChE,qEAAqE;IACrE,4CAA4C;IAC5C,8DAA8D;IAC9D,4CAA4C;IAC5C,oEAAoE;IACpE,qDAAqD;IACrD,8BAA8B;IAC9B,MAAM,MAAM,GAA8B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEnE,uBAAuB;IACvB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,8DAA8D;IAC9D,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEjC,eAAe;IACf,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEtC,kDAAkD;IAClD,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,uBAAuB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,uBAAuB;IACvB,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEtC,eAAe;IACf,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAE3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,iDAAiD;AACjD,+DAA+D;AAE/D,SAAS,2BAA2B,CAClC,EAAa;IAEb,MAAM,MAAM,GAA+B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEpE,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,MAAM,MAAM,GAA8B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEnE,2DAA2D;IAC3D,mCAAmC;IACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC1C,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC9C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC5C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC/C,MAAM,CAAC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACrD,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAChD,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACjD,MAAM,CAAC,sBAAsB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IACtD,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAC7C,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ;IAE1C,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnC,+BAA+B;IAC/B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEpC,sCAAsC;IACtC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEzC,6DAA6D;IAC7D,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,MAAM,MAAM,GAA8B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEnE,kDAAkD;IAClD,+BAA+B;IAC/B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE1C,kEAAkE;IAClE,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAElC,gFAAgF;IAChF,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,kEAAkE;IAClE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAEnC,qBAAqB;IACrB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,iCAAiC;IACjC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,oDAAoD;AACpD,+DAA+D;AAE/D,SAAS,8BAA8B,CACrC,EAAa;IAEb,kDAAkD;IAClD,MAAM,MAAM,GAAkC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEvE,kEAAkE;IAClE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAErC,2CAA2C;IAC3C,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAExC,iEAAiE;IACjE,uDAAuD;IACvD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEzB,4CAA4C;IAC5C,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;IAE7B,yCAAyC;IACzC,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,SAAS,uBAAuB,CAAC,EAAa;IAC5C,sEAAsE;IACtE,qEAAqE;IACrE,qEAAqE;IACrE,+DAA+D;IAC/D,kDAAkD;IAClD,MAAM,MAAM,GAA2B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEhE,2DAA2D;IAC3D,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEpC,yCAAyC;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,wCAAwC;IACxC,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,sEAAsE;IACtE,kEAAkE;IAClE,iEAAiE;IACjE,oEAAoE;IACpE,qEAAqE;IACrE,iDAAiD;IACjD,MAAM,MAAM,GAA8B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEnE,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,6DAA6D;IAC7D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,MAAM,MAAM,GAA8B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAEnE,kDAAkD;IAClD,qBAAqB;IACrB,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEpC,kEAAkE;IAClE,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAElC,kEAAkE;IAClE,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,gDAAgD;IAChD,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC;IAEjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,gEAAgE;IAChE,qEAAqE;IACrE,4CAA4C;IAC5C,yEAAyE;IACzE,8DAA8D;IAC9D,2DAA2D;IAC3D,MAAM,MAAM,GAA8B,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAEzE,sCAAsC;IACtC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEtC,gCAAgC;IAChC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAElC,wDAAwD;IACxD,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAEpC,+BAA+B;IAC/B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEhC,gCAAgC;IAChC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAElC,8CAA8C;IAC9C,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACpC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,uDAAuD;AACvD,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,2EAA2E;IAC3E,mEAAmE;IACnE,0EAA0E;IAC1E,MAAM,MAAM,GAA8B,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAE1E,mEAAmE;IACnE,gDAAgD;IAChD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,SAAS,GAAG;QACjB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,CAAC;KACL,CAAC;IAEF,sCAAsC;IACtC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;AAE/D,SAAS,+BAA+B,CACtC,EAAa;IAEb,kDAAkD;IAClD,MAAM,MAAM,GAAmC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IAE9E,qBAAqB;IACrB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEhC,wDAAwD;IACxD,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAEnC,sCAAsC;IACtC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACtC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEtC,qCAAqC;IACrC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEhC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,qDAAqD;AACrD,+DAA+D;AAE/D,SAAS,wBAAwB,CAAC,EAAa;IAC7C,MAAM,MAAM,GAA4B,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAExE,QAAQ;IACR,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAErC,eAAe;IACf,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACtC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAE/D,SAAS,yBAAyB,CAAC,EAAa;IAC9C,kDAAkD;IAClD,MAAM,MAAM,GAA6B,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAEzE,qBAAqB;IACrB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3B,6CAA6C;IAC7C,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnC,4CAA4C;IAC5C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACtC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAE1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,uCAAuC;AACvC,+DAA+D;AAE/D,SAAS,mBAAmB,CAAC,EAAa;IACxC,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,aAAa;IACb,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAErC,qBAAqB;IACrB,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,eAAe,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE9C,2BAA2B;IAC3B,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAElC,sCAAsC;IACtC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,cAAc,GAAG;YACtB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACjB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACjB,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;IAED,iGAAiG;IACjG,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnD,gCAAgC;IAChC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEhC,QAAQ;IACR,MAAM,CAAC,YAAY,GAAG;QACpB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IACF,MAAM,CAAC,WAAW,GAAG;QACnB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IACF,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEtC,qFAAqF;IACrF,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,MAAM,aAAa,GAAsB,EAAE,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IAErC,sFAAsF;IACtF,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,KAAK,GAA0C,EAAE,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC;YACT,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC;YAC7B,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC;YAC7B,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,oCAAoC;AACpC,+DAA+D;AAE/D,SAAS,gBAAgB,CAAC,EAAa;IACrC,4DAA4D;IAC5D,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACzC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACvC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACzC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC7C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC3C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAE3C,oEAAoE;IACpE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,kBAAkB,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,iBAAiB,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACvC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAE/C,4DAA4D;IAC5D,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEvC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACvC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAE/C,qEAAqE;IACrE,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE3B,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACzC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC3C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAE/C,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;IAEvD,8DAA8D;IAC9D,2DAA2D;IAC3D,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IACzC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IAE3C,+DAA+D;IAC/D,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAExC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,oCAAoC;AACpC,+DAA+D;AAE/D,SAAS,gBAAgB,CAAC,EAAa;IACrC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,gBAAgB;IAChB,MAAM,CAAC,KAAK,GAAG;QACb,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,iCAAiC;IACjC,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,oDAAoD;IACpD,MAAM,MAAM,GAAqD,EAAE,CAAC;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,cAAc;IACd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,eAAe;IACf,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,uCAAuC;AACvC,+DAA+D;AAE/D,SAAS,mBAAmB,CAAC,EAAa;IACxC,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,gBAAgB;IAChB,MAAM,CAAC,KAAK,GAAG;QACb,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9B,wDAAwD;IACxD,yEAAyE;IACzE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnC,iBAAiB;IACjB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,oDAAoD;IACpD,MAAM,MAAM,GAAqD,EAAE,CAAC;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,cAAc;IACd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,eAAe;IACf,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,SAAS,yBAAyB,CAAC,EAAa;IAC9C,MAAM,MAAM,GAA6B,EAAE,CAAC;IAE5C,qBAAqB;IACrB,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAEzC,wBAAwB;IACxB,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE3C,qCAAqC;IACrC,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjE,UAAU;IACV,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAExC,gBAAgB;IAChB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE3C,UAAU;IACV,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAExC,8EAA8E;IAC9E,mDAAmD;IACnD,gCAAgC;IAChC,wFAAwF;IACxF,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,sCAAsC;AACtC,+DAA+D;AAE/D,SAAS,kBAAkB,CAAC,EAAa;IACvC,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,gCAAgC;IAChC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEzD,sBAAsB;IACtB,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE9D,gBAAgB;IAChB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAE3C,wDAAwD;IACxD,IAAI,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAEnD,2DAA2D;IAC3D,mDAAmD;IACnD,mFAAmF;IACnF,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,wDAAwD;IACxD,gGAAgG;IAChG,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAEnC,+EAA+E;IAC/E,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC;YACR,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YACtB,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;SACtB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAEnB,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,0DAA0D;AAC1D,+DAA+D;AAE/D,SAAS,sBAAsB,CAAC,EAAa;IAC3C,MAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,eAAe;IACf,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEhC,gCAAgC;IAChC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACjC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,uFAAuF;IACvF,wFAAwF;IACxF,gEAAgE;IAChE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,sDAAsD;AACtD,+DAA+D;AAE/D,SAAS,kBAAkB,CAAC,EAAa;IACvC,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,uEAAuE;IACvE,mFAAmF;IACnF,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAEhD,+CAA+C;IAC/C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,0DAA0D;AAC1D,+DAA+D;AAE/D,SAAS,sBAAsB,CAAC,EAAa;IAC3C,kDAAkD;IAClD,MAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,mFAAmF;QACnF,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,8DAA8D;QAC9D,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QACrD,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO;QAC9D,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO;QACxD,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QACjE,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QACzD,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QAC5D,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QAC/D,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QAC1D,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;QACzD,8DAA8D;QAC9D,uEAAuE;QACvE,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;QAClF,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;QAC5F,MAAM,CAAC,oBAAoB,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,qCAAqC;QACjG,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;QAC1F,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;IACvC,CAAC;IAED,oEAAoE;IACpE,sCAAsC;IACtC,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gEAAgE;AAChE,+DAA+D;AAE/D,SAAS,4BAA4B,CACnC,EAAa;IAEb,MAAM,MAAM,GAAoC,EAAE,CAAC;IAEnD,wDAAwD;IACxD,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,kBAAkB,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,gBAAgB,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,kBAAkB,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,mDAAmD;AACnD,+DAA+D;AAE/D,SAAS,eAAe,CAAC,EAAa;IACpC,OAAO;QACL,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE;QACnB,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE;QACnB,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,4DAA4D;AAC5D,+DAA+D;AAE/D,SAAS,gBAAgB,CAAC,EAAa;IACrC,OAAO,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D,SAAS,gBAAgB,CAAC,GAAc;IACtC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+DAA+D;AAC/D,kCAAkC;AAClC,+DAA+D;AAE/D,SAAS,iBAAiB,CAAC,EAAa;IACtC,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AACxC,CAAC;AAED,+DAA+D;AAC/D,qBAAqB;AACrB,+DAA+D;AAE/D,SAAS,wBAAwB,CAAC,EAAa;IAC7C,kDAAkD;IAClD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,uCAAuC;IACvC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE3C,uEAAuE;IACvE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAClC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAErC,6EAA6E;IAC7E,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAE/B,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC3C,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACxC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC1C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACvC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAEvC,kCAAkC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAE/D,SAAS,+BAA+B,CACtC,EAAa;IAEb,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AACxC,CAAC;AAED,+DAA+D;AAC/D,iDAAiD;AACjD,+DAA+D;AAE/D,SAAS,uBAAuB,CAAC,EAAa;IAC5C,OAAO;QACL,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE;QAC1B,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE;QAC5B,aAAa,EAAE,EAAE,CAAC,UAAU,EAAE;QAC9B,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE;QAC5B,YAAY,EAAE,EAAE,CAAC,UAAU,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D,SAAS,uBAAuB,CAAC,EAAa;IAC5C,kDAAkD;IAClD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,6CAA6C;IAC7C,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE3C,oBAAoB;IACpB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE/B,+CAA+C;IAC/C,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE9B,2CAA2C;IAC3C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAEtC,gGAAgG;IAChG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,yBAAyB;AACzB,+DAA+D;AAE/D,SAAS,4BAA4B,CACnC,EAAa;IAEb,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,+DAA+D;AAC/D,gBAAgB;AAChB,+DAA+D;AAE/D,SAAS,mBAAmB,CAAC,EAAa;IACxC,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,4CAA4C;IAC5C,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,gCAAgC;IAChC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;IAEvC,mCAAmC;IACnC,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,uBAAuB;AACvB,+DAA+D;AAE/D,SAAS,0BAA0B,CAAC,EAAa;IAC/C,4DAA4D;IAC5D,MAAM,MAAM,GAA8B,EAAE,CAAC;IAE7C,oCAAoC;IACpC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC5C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC/C,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC5C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC/C,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC9C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC3C,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC5C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC/C,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC/C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAE7C,0DAA0D;IAC1D,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAEpC,mCAAmC;IACnC,MAAM,CAAC,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAChD,MAAM,CAAC,mBAAmB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAClD,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC3C,MAAM,CAAC,KAAK,GAAG;QACb,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO;QACxB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO;QACxB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO;KACzB,CAAC;IAEF,8DAA8D;IAC9D,kEAAkE;IAClE,qEAAqE;IACrE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IAE9C,2DAA2D;IAC3D,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAExC,eAAe;IACf,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,wBAAwB;AACxB,+DAA+D;AAE/D,SAAS,2BAA2B,CAClC,EAAa;IAEb,MAAM,MAAM,GAA+B,EAAE,CAAC;IAE9C,UAAU;IACV,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAElC,oEAAoE;IACpE,6CAA6C;IAC7C,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACtC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IACvC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAElC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,gDAAgD;AAChD,+DAA+D;AAC/D,+DAA+D;AAE/D,SAAS,oBAAoB,CAAC,EAAa;IACzC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC;AACvC,CAAC;AAED,+DAA+D;AAC/D,mEAAmE;AACnE,+DAA+D;AAE/D,SAAS,uBAAuB,CAAC,EAAa;IAC5C,OAAO,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,+DAA+D;AAC/D,uDAAuD;AACvD,+DAA+D;AAE/D,SAAS,kBAAkB,CAAC,GAAc;IACxC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+DAA+D;AAC/D,6CAA6C;AAC7C,+DAA+D;AAE/D,SAAS,kBAAkB,CAAC,GAAc;IACxC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+DAA+D;AAC/D,4CAA4C;AAC5C,4DAA4D;AAC5D,sBAAsB;AACtB,+DAA+D;AAE/D,SAAS,wBAAwB,CAAC,EAAa;IAC7C,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,8BAA8B;AAC9B,uCAAuC;AACvC,+BAA+B;AAC/B,+DAA+D;AAE/D,SAAS,mBAAmB,CAAC,EAAa;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC1C,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC1C,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACzC,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,8BAA8B;IACjE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,8BAA8B;AAC9B,uCAAuC;AACvC,oDAAoD;AACpD,+DAA+D;AAE/D,SAAS,mBAAmB,CAAC,EAAa;IACxC,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC;IACtE,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC;IACrE,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC3C,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IAC7C,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACrC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACpC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACpC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACtC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACtC,6DAA6D;IAC7D,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,iCAAiC;AACjC,uCAAuC;AACvC,oDAAoD;AACpD,+DAA+D;AAE/D,SAAS,sBAAsB,CAAC,EAAa;IAC3C,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACrC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,mCAAmC;IAClE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,yCAAyC;IACrE,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO;IACrC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IAC1C,MAAM,CAAC,SAAS,GAAG;QACjB,YAAY;QACZ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IACF,MAAM,CAAC,MAAM,GAAG;QACd,YAAY;QACZ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;QACf,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;KAChB,CAAC;IACF,6DAA6D;IAC7D,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+DAA+D;AAC/D,eAAe;AACf,+DAA+D;AAE/D,MAAM,UAAU,wBAAwB,CAAC,QAAuB;IAC9D,aAAa;IACb,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,wBAAwB;KACrC,CAAC,CAAC;IAEH,uBAAuB;IACvB,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,iBAAiB;KAC9B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,uBAAuB;KACpC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,sBAAsB;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,wBAAwB;KACrC,CAAC,CAAC;IAEH,sBAAsB;IACtB,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,iBAAiB;QACvB,UAAU,EAAE,qBAAqB;KAClC,CAAC,CAAC;IAEH,OAAO;IACP,QAAQ,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;IAE5E,mBAAmB;IACnB,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE,oBAAoB;KACjC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,uBAAuB;QAC7B,UAAU,EAAE,2BAA2B;KACxC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,0BAA0B;QAChC,UAAU,EAAE,8BAA8B;KAC3C,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,uBAAuB;KACpC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,2BAA2B;QACjC,UAAU,EAAE,+BAA+B;KAC5C,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,wBAAwB;KACrC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,yBAAyB;KACtC,CAAC,CAAC;IAEH,UAAU;IACV,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,qBAAqB;QAC3B,UAAU,EAAE,yBAAyB;KACtC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,kBAAkB;KAC/B,CAAC,CAAC;IAEH,QAAQ;IACR,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,sBAAsB;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,kBAAkB;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,sBAAsB;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,4BAA4B;KACzC,CAAC,CAAC;IAEH,OAAO;IACP,QAAQ,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;IAC9E,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,iBAAiB;KAC9B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,wBAAwB;KACrC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,2BAA2B;QACjC,UAAU,EAAE,+BAA+B;KAC5C,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,uBAAuB;KACpC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,uBAAuB;KACpC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,wBAAwB;QAC9B,UAAU,EAAE,4BAA4B;KACzC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,0BAA0B;KACvC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,uBAAuB;QAC7B,UAAU,EAAE,2BAA2B;KACxC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,UAAU,EAAE,oBAAoB;KACjC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,uBAAuB;KACpC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,kBAAkB;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,kBAAkB;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE,wBAAwB;KACrC,CAAC,CAAC;IAEH,kEAAkE;IAClE,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,eAAe;QACrB,UAAU,EAAE,mBAAmB;KAChC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC;QACxB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,sBAAsB;KACnC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { BitStream } from \"./BitStream.js\";\nimport type { ClassRegistry } from \"./ClassRegistry.js\";\nimport type {\n SimDataBlock,\n GameBaseDataBlock,\n ShapeBaseDataBlock,\n ShapeBaseImageDataBlock,\n PlayerDataBlock,\n VehicleDataBlock,\n FlyingVehicleDataBlock,\n HoverVehicleDataBlock,\n WheeledVehicleDataBlock,\n StaticShapeDataBlock,\n TurretDataBlock,\n TurretImageDataBlock,\n ItemDataBlock,\n ProjectileDataBlock,\n LinearProjectileDataBlock,\n GrenadeProjectileDataBlock,\n SeekerProjectileDataBlock,\n SniperProjectileDataBlock,\n ShockLanceProjectileDataBlock,\n ELFProjectileDataBlock,\n RepairProjectileDataBlock,\n TargetProjectileDataBlock,\n TracerProjectileDataBlock,\n EnergyProjectileDataBlock,\n LinearFlareProjectileDataBlock,\n BombProjectileDataBlock,\n FlareProjectileDataBlock,\n ExplosionDataBlock,\n DebrisDataBlock,\n SplashDataBlock,\n ShockwaveDataBlock,\n ParticleEmitterDataBlock,\n ParticleDataBlock,\n AudioDescriptionDataBlock,\n AudioProfileDataBlock,\n AudioEnvironmentDataBlock,\n AudioSampleEnvironmentDataBlock,\n DecalDataBlock,\n CameraDataBlock,\n SensorDataBlock,\n TriggerDataBlock,\n ForceFieldBareDataBlock,\n ParticleEmissionDummyDataBlock,\n CommanderIconDataBlock,\n PrecipitationDataBlock,\n FireballAtmosphereDataBlock,\n LightningDataBlock,\n StationFXVehicleDataBlock,\n StationFXPersonalDataBlock,\n CannedChatItemDataBlock,\n MissionMarkerDataBlock,\n TSShapeConstructorDataBlock,\n EffectProfileDataBlock,\n JetEffectDataBlock,\n RunningLightDataBlock,\n HudImageEntry,\n ImageState,\n ParticleKey,\n} from \"./dataBlockDataTypes.js\";\n\n// ============================================================\n// Helper functions\n// ============================================================\n\n/**\n * Read a DataBlock reference: flag(1b) + readClassId (11 bits).\n * From decompiled binary: uses FUN_00436d10 (readClassId) which reads\n * getBitCount(getNextPow2(0x800)) = 11 bits.\n * If flag is false, sets objectId to -1 (0xFFFFFFFF).\n */\nfunction readDataBlockRef(bs: BitStream): number | null {\n return bs.readFlag() ? bs.readInt(11) : null;\n}\n\n/**\n * Read a ranged signed 32-bit integer.\n * Encodes value as unsigned offset from min.\n */\nfunction readRangedS32(bs: BitStream, min: number, max: number): number {\n return bs.readRangedU32(0, max - min) + min;\n}\n\n/**\n * Read a packed ColorF: 4 bytes (32 bits total), each converted to [0..1] float.\n * From decompiled binary: FUN_0043f040 calls FUN_0043efe0 which reads 4 × stream->read(1, &byte).\n * Each byte is multiplied by 1/255.0 to produce the float value.\n * NOTE: This is NOT 4×F32 (128 bits) — it's 4×U8 (32 bits).\n */\nfunction readColorF(bs: BitStream): {\n r: number;\n g: number;\n b: number;\n a: number;\n} {\n return {\n r: bs.readInt(8) / 255,\n g: bs.readInt(8) / 255,\n b: bs.readInt(8) / 255,\n a: bs.readInt(8) / 255,\n };\n}\n\n/**\n * Read a DataBlock boolean field: 8 bits (1 byte), as written by stream->write(sizeof(bool), &val).\n * NOTE: This is different from readFlag() which reads 1 bit via BitStream::readFlag().\n * Many DataBlock fields use write(sizeof(bool)) instead of writeFlag().\n */\nfunction readBool(bs: BitStream): boolean {\n return bs.readInt(8) !== 0;\n}\n\n/**\n * Read a ranged float: min + readInt(bits) / ((1 << bits) - 1) * (max - min).\n */\nfunction readRangedF32(\n bs: BitStream,\n min: number,\n max: number,\n bits: number,\n): number {\n return min + (bs.readInt(bits) / ((1 << bits) - 1)) * (max - min);\n}\n\n// ============================================================\n// Base class parsers (inheritance chain)\n// ============================================================\n\n// SimDataBlock → GameBaseData: 0 bits on wire (no-op)\n\n/**\n * ShapeBaseData::unpackData — critical base class for most game objects.\n *\n * Verified against decompiled binary FUN_005e63e0 (Tribes2.exe).\n * NOTE: The field order differs from V12 engine reference source.\n * The Tribes 2 binary groups booleans and DataBlock refs differently,\n * and the sensor color uses 4×U8 (not 4×F32), among other differences.\n */\nfunction shapeBaseDataUnpack(bs: BitStream): ShapeBaseDataBlock {\n const result: ShapeBaseDataBlock = {};\n\n // computeCRC — flag; if true: U32 mCRC\n // Binary: readFlag → this+0xc0; if true: read(4) → this+0xbc\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName — readString → this+0x44\n result.shapeName = bs.readString();\n\n // 9 conditional F32 fields (flag + F32 if non-default)\n // Binary: each is readFlag, if true: read(4) → field offset\n if (bs.readFlag()) result.mass = bs.readF32(); // → 0x74\n if (bs.readFlag()) result.drag = bs.readF32(); // → 0x78\n if (bs.readFlag()) result.density = bs.readF32(); // → 0x7c\n if (bs.readFlag()) result.maxEnergy = bs.readF32(); // → 0x80\n if (bs.readFlag()) result.cameraMaxDist = bs.readF32(); // → 0xa4\n if (bs.readFlag()) result.cameraMinDist = bs.readF32(); // → 0xa8\n if (bs.readFlag()) result.cameraDefaultFov = bs.readF32(); // → 0xac\n if (bs.readFlag()) result.cameraMinFov = bs.readF32(); // → 0xb0\n if (bs.readFlag()) result.cameraMaxFov = bs.readF32(); // → 0xb4\n\n // debrisShapeName — readString → this+0x48\n result.debrisShapeName = bs.readString();\n\n // sensorRadius — flag; if true: readInt(10) + 4×U8 (RGBA bytes)\n // Binary: readInt(10) → this+0x15c (cast to float), then 4 × read(1) → 0x160-0x163\n if (bs.readFlag()) {\n result.sensorRadius = bs.readInt(10);\n result.sensorColor = {\n r: bs.readInt(8),\n g: bs.readInt(8),\n b: bs.readInt(8),\n a: bs.readInt(8),\n };\n }\n\n // heat — flag; if true: F32 → this+0x50\n if (bs.readFlag()) result.heat = bs.readF32();\n\n // cmdCategory — readString → this+0x164\n result.cmdCategory = bs.readString();\n\n // cmdMiniIconName — readString → this+0x168\n // NOTE: V12 has cmdIcon (DataBlockRef) here, but binary has readString.\n result.cmdMiniIconName = bs.readString();\n\n // 3 boolean flags: canControl, canObserve, observeThroughObject\n // Binary: 3 readFlags → this+0x16c, 0x16d, 0x16e\n result.canControl = bs.readFlag();\n result.canObserve = bs.readFlag();\n result.observeThroughObject = bs.readFlag();\n\n // 3 more boolean flags (grouped together in binary, different from V12)\n // Binary: this+0x325, 0x329, 0x32a\n result.emap = bs.readFlag(); // 0x325\n result.isInvincible = bs.readFlag(); // 0x329\n result.renderWhenDestroyed = bs.readFlag(); // 0x32a\n\n // 4 DataBlock refs using readClassId (FUN_00436d10 = readInt(11))\n // Binary: each is readFlag + readClassId → this+0x70, 0x60, 0x68, 0x58\n result.cmdIcon = readDataBlockRef(bs); // 0x6c/0x70\n result.explosion = readDataBlockRef(bs); // 0x5c/0x60\n result.underwaterExplosion = readDataBlockRef(bs); // 0x64/0x68\n result.debris = readDataBlockRef(bs); // 0x54/0x58\n\n // 3 more boolean flags\n // Binary: this+0x32b, 0x326, 0x327\n result.inheritEnergyFromMount = bs.readFlag(); // 0x32b\n result.firstPersonOnly = bs.readFlag(); // 0x326\n result.useEyePoint = bs.readFlag(); // 0x327\n\n // shieldEffectLifetimeMS — U32 → this+0x94\n result.shieldEffectLifetimeMS = bs.readU32();\n\n // shieldEffectScale — flag; if true: 3×F32\n // Binary: readFlag, if true: read(4) × 3 → this+0x98, 0x9c, 0xa0\n // NOTE: This field is NOT in the V12 reference source — Tribes 2 addition.\n if (bs.readFlag()) {\n result.shieldEffectScale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n }\n\n // HUD images loop (8 iterations, NumHudRenderImages=8)\n // Binary: do-while uVar4 < 8 at offset this + uVar4*4 + 0x174\n const hudImages: HudImageEntry[] = [];\n for (let i = 0; i < 8; i++) {\n const hasFriendly = bs.readFlag();\n if (!hasFriendly) continue;\n const friendlyName = bs.readString(); // → this + i*4 + 0x174\n const hasEnemy = bs.readFlag();\n const enemyName = hasEnemy ? bs.readString() : undefined; // → this + i*4 + 0x194\n const img: HudImageEntry = {\n friendlyName,\n enemyName,\n renderCenter: bs.readFlag(), // → this + i + 0x1f4\n renderModulated: bs.readFlag(), // → this + i + 0x1fc\n renderAlways: bs.readFlag(), // → this + i + 0x204\n renderDistance: bs.readFlag(), // → this + i + 0x20c\n renderName: bs.readFlag(), // → this + i + 0x214\n };\n hudImages.push(img);\n }\n if (hudImages.length > 0) result.hudImages = hudImages;\n\n return result;\n}\n\n// ============================================================\n// ShapeBaseImageData (weapon mount data — 31 states)\n// ============================================================\n\nfunction shapeBaseImageDataUnpack(bs: BitStream): ShapeBaseImageDataBlock {\n // Extends GameBaseData directly (0 parent bits)\n const result: ShapeBaseImageDataBlock = {};\n\n // computeCRC — flag; if true: U32\n if (bs.readFlag()) {\n result.crc = bs.readU32();\n }\n\n // shapeName\n result.shapeName = bs.readString();\n\n // mountPoint — U32\n result.mountPoint = bs.readU32();\n\n // offsetTransform — flag(isIdentity); if NOT identity: readAffineTransform\n if (!bs.readFlag()) {\n result.offset = bs.readAffineTransform();\n }\n\n // firstPerson — flag\n result.firstPerson = bs.readFlag();\n\n // mass — F32\n result.mass = bs.readF32();\n\n // usesEnergy — flag\n result.usesEnergy = bs.readFlag();\n\n // minEnergy — F32\n result.minEnergy = bs.readF32();\n\n // hasFlash — flag\n result.hasFlash = bs.readFlag();\n\n // projectile — readDataBlockRef\n result.projectile = readDataBlockRef(bs);\n\n // muzzleFlash — readDataBlockRef (confirmed at offset 0xce4 in binary)\n result.muzzleFlash = readDataBlockRef(bs);\n\n // isSeeker — flag; if true: 4×F32 + flag + F32\n result.isSeeker = bs.readFlag();\n if (result.isSeeker) {\n result.seekerRadius = bs.readF32();\n result.maxSeekAngle = bs.readF32();\n result.seekerLockTime = bs.readF32();\n result.seekerFreeTime = bs.readF32();\n result.isTargetLockRequired = bs.readFlag();\n result.maxLockRange = bs.readF32();\n }\n\n // cloakable — flag\n result.cloakable = bs.readFlag();\n\n // lightType — readRangedU32(0, 3); if != 0: F32 + S32 + 4×writeFloat(7)\n result.lightType = bs.readRangedU32(0, 3);\n if (result.lightType !== 0) {\n result.lightRadius = bs.readF32();\n result.lightTime = bs.readS32();\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n }\n\n // shellExitDir — 3×F32 (mathWrite Point3F)\n result.shellExitDir = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // shellExitVariance — F32\n result.shellExitVariance = bs.readF32();\n\n // shellVelocity — F32\n result.shellVelocity = bs.readF32();\n\n // casing — readDataBlockRef\n result.casing = readDataBlockRef(bs);\n\n // accuFire flag (confirmed at offset 0xc88 in binary, before state loop)\n result.accuFire = bs.readFlag();\n\n // State loop (31 iterations, MaxStates=31)\n const states: ImageState[] = [];\n for (let i = 0; i < 31; i++) {\n const hasName = bs.readFlag();\n if (!hasName) continue;\n\n const name = bs.readString();\n\n // 11 transition values, each readInt(5), in the ENGINE's packing\n // order (binary-verified; the old names here were rotated by two\n // slots and consumers had to carry a remap table): NotLoaded,\n // Loaded, NoAmmo, Ammo, NoTarget, Target, NotWet, Wet, TriggerUp,\n // TriggerDown, Timeout. Values are 1-based state indices (0 = no\n // transition).\n const transitionOnNotLoaded = bs.readInt(5);\n const transitionOnLoaded = bs.readInt(5);\n const transitionOnNoAmmo = bs.readInt(5);\n const transitionOnAmmo = bs.readInt(5);\n const transitionOnNoTarget = bs.readInt(5);\n const transitionOnTarget = bs.readInt(5);\n const transitionOnNotWet = bs.readInt(5);\n const transitionOnWet = bs.readInt(5);\n const transitionOnTriggerUp = bs.readInt(5);\n const transitionOnTriggerDown = bs.readInt(5);\n const transitionOnTimeout = bs.readInt(5);\n\n // timeoutValue — flag(!=default) then F32\n const timeoutValue = bs.readFlag() ? bs.readF32() : undefined;\n // waitForTimeout — flag\n const waitForTimeout = bs.readFlag();\n // fire — flag\n const fire = bs.readFlag();\n // ejectShell — flag\n const ejectShell = bs.readFlag();\n // scaleAnimation — flag\n const scaleAnimation = bs.readFlag();\n // direction — flag\n const direction = bs.readFlag();\n // reload — flag (confirmed at offset 0xe2a in binary, between direction and energyDrain)\n const reload = bs.readFlag();\n // energyDrain — flag(!=default) then F32\n const energyDrain = bs.readFlag() ? bs.readF32() : undefined;\n // loaded — readInt(3)\n const loaded = bs.readInt(3);\n // spin — readInt(3)\n const spin = bs.readInt(3);\n // recoil — readInt(3)\n const recoil = bs.readInt(3);\n // sequence — flag(!=default) then readSignedInt(16)\n const sequence = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // sequenceVis — flag(!=default) then readSignedInt(16)\n const sequenceVis = bs.readFlag() ? bs.readSignedInt(16) : undefined;\n // flashSequence — flag\n const flashSequence = bs.readFlag();\n // ignoreLoadedForReady — flag\n const ignoreLoadedForReady = bs.readFlag();\n // emitter — readDataBlockRef; if present: F32 + S32\n const emitter = readDataBlockRef(bs);\n const emitterTime = emitter !== null ? bs.readF32() : undefined;\n const emitterNode = emitter !== null ? bs.readS32() : undefined;\n // sound — readDataBlockRef\n const sound = readDataBlockRef(bs);\n\n const state: ImageState = {\n name,\n transitionOnNotLoaded,\n transitionOnLoaded,\n transitionOnAmmo,\n transitionOnNoAmmo,\n transitionOnTarget,\n transitionOnNoTarget,\n transitionOnWet,\n transitionOnNotWet,\n transitionOnTriggerUp,\n transitionOnTriggerDown,\n transitionOnTimeout,\n timeoutValue,\n waitForTimeout,\n fire,\n ejectShell,\n scaleAnimation,\n direction,\n reload,\n energyDrain,\n loaded,\n spin,\n recoil,\n sequence,\n sequenceVis,\n flashSequence,\n ignoreLoadedForReady,\n emitter,\n emitterTime,\n emitterNode,\n sound,\n };\n states.push(state);\n }\n result.states = states;\n\n return result;\n}\n\n// ============================================================\n// PlayerData (extends ShapeBaseData)\n// ============================================================\n\nfunction playerDataUnpack(bs: BitStream): PlayerDataBlock {\n const result: PlayerDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_005cfa40 (Tribes2.exe).\n // Binary layout: flag + 13 F32s + 2 optional DB refs + 9 F32s + 1 F32 +\n // 8 F32s + readInt(7) + 6 F32s + 9 F32s + 1 F32 + 32 sounds +\n // boxSize(3) + DB refs + F32s + 11 ground impact F32s\n\n // 1. readFlag → 0x340 (renderFirstPerson — NOT F32!)\n result.renderFirstPerson = bs.readFlag();\n\n // Field names for sections 2-10 are binary-verified against the retail\n // initPersistFields (FUN_005ce7e0 region): each read's struct offset\n // (from the FUN_005cfa40 unpack decompile) is mapped to the name the\n // engine registers at that offset. Earlier names were guessed from the\n // SVN source, whose layout differs from retail.\n\n // 2. 13× F32 (offsets 0x334-0x360)\n result.minLookAngle = bs.readF32(); // 0x334\n result.maxLookAngle = bs.readF32(); // 0x338\n result.maxFreelookAngle = bs.readF32(); // 0x33c\n result.maxTimeScale = bs.readF32(); // 0x330\n result.maxStepHeight = bs.readF32(); // 0x398\n result.jetForce = bs.readF32(); // 0x344\n result.underwaterJetForce = bs.readF32(); // 0x348\n result.underwaterVertJetFactor = bs.readF32(); // 0x34c\n result.jetEnergyDrain = bs.readF32(); // 0x350\n result.underwaterJetEnergyDrain = bs.readF32(); // 0x354\n result.minJetEnergy = bs.readF32(); // 0x358\n result.maxJetForwardSpeed = bs.readF32(); // 0x35c\n result.maxJetHorizontalPercentage = bs.readF32(); // 0x360\n // [0x364 hardcoded to 0, not from stream]\n\n // 3. 2 optional DataBlock refs (readClassId pattern)\n result.jetEmitter = readDataBlockRef(bs); // 0x368 (jetEmitter @0x364)\n if (bs.readFlag()) {\n result.jetEffect = bs.readInt(11); // 0x370 (jetEffect @0x36c; no else/-1)\n }\n\n // 4. 9× F32 (offsets 0x374-0x394)\n result.runForce = bs.readF32(); // 0x374\n result.runEnergyDrain = bs.readF32(); // 0x378\n result.minRunEnergy = bs.readF32(); // 0x37c\n result.maxForwardSpeed = bs.readF32(); // 0x380\n result.maxBackwardSpeed = bs.readF32(); // 0x384\n result.maxSideSpeed = bs.readF32(); // 0x388\n result.maxUnderwaterForwardSpeed = bs.readF32(); // 0x38c\n result.maxUnderwaterBackwardSpeed = bs.readF32(); // 0x390\n result.maxUnderwaterSideSpeed = bs.readF32(); // 0x394\n\n // 5. 1× F32 (offset 0x39c)\n result.runSurfaceAngle = bs.readF32(); // 0x39c\n\n // 6. 8× F32 (offsets 0x3b8-0x3d4)\n result.recoverDelay = bs.readF32(); // 0x3b8\n result.recoverRunForceScale = bs.readF32(); // 0x3bc\n result.jumpForce = bs.readF32(); // 0x3c0\n result.jumpEnergyDrain = bs.readF32(); // 0x3c4\n result.minJumpEnergy = bs.readF32(); // 0x3c8\n result.minJumpSpeed = bs.readF32(); // 0x3cc\n result.maxJumpSpeed = bs.readF32(); // 0x3d0\n result.jumpSurfaceAngle = bs.readF32(); // 0x3d4\n\n // 7. readInt(7) → jumpDelay (offset 0x3d8)\n result.jumpDelay = bs.readInt(7);\n\n // 8. 6× F32 (offsets 0x3a0-0x3b4)\n result.horizMaxSpeed = bs.readF32(); // 0x3a0\n result.horizResistSpeed = bs.readF32(); // 0x3a4\n result.horizResistFactor = bs.readF32(); // 0x3a8\n result.upMaxSpeed = bs.readF32(); // 0x3ac\n result.upResistSpeed = bs.readF32(); // 0x3b0\n result.upResistFactor = bs.readF32(); // 0x3b4\n\n // 9. 9× F32 (offsets 0xd14-0xd34, far offsets = Tribes 2-specific fields)\n result.splashVelocity = bs.readF32(); // 0xd14\n result.splashAngle = bs.readF32(); // 0xd18\n result.splashFreqMod = bs.readF32(); // 0xd1c\n result.splashVelEpsilon = bs.readF32(); // 0xd20\n result.bubbleEmitTime = bs.readF32(); // 0xd24\n result.mediumSplashSoundVelocity = bs.readF32(); // 0xd28\n result.hardSplashSoundVelocity = bs.readF32(); // 0xd2c\n result.exitSplashSoundVelocity = bs.readF32(); // 0xd30\n result.footstepSplashHeight = bs.readF32(); // 0xd34\n\n // 10. 1× F32 (offset 0x3f4)\n result.minImpactSpeed = bs.readF32(); // 0x3f4\n\n // 11. Sound loop: 32 iterations (MaxSounds=0x20 in binary)\n // Binary: zeros 0x428+i*4, then flag + readClassId → 0x4a8+i*4\n const sounds: (number | null)[] = [];\n for (let i = 0; i < 32; i++) {\n if (bs.readFlag()) {\n sounds.push(bs.readInt(11));\n } else {\n sounds.push(null);\n }\n }\n result.sounds = sounds;\n\n // 12. boxSize 3×F32 (offsets 0x528, 0x52c, 0x530)\n result.boxSize = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // 13. footPuffEmitter + 2 F32s (offset 0xcf0, 0xcf4, 0xcf8)\n result.footPuffEmitter = readDataBlockRef(bs);\n result.footPuffNumParts = bs.readF32();\n result.footPuffRadius = bs.readF32();\n\n // 14. decalData + 1 F32 (offset 0xd00, 0x3f8)\n result.decalData = readDataBlockRef(bs);\n result.decalOffset = bs.readF32();\n\n // 15. dustEmitter + splash (offsets 0xd08, 0xd10)\n result.dustEmitter = readDataBlockRef(bs);\n result.splash = readDataBlockRef(bs);\n\n // 16. 3 splashEmitters (offsets 0xd44 + i*4)\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 17. 11× F32 (offsets 0x3fc-0x424). Names binary-verified against\n // initPersistFields: the two leading fields are the Tribes 2 heat\n // signature rates (retail player.cs: 1/4 and 1/3), then the ground\n // impact shake block. Demo values confirm: 0.25, 0.333…\n result.heatDecayPerSec = bs.readF32(); // 0x3fc\n result.heatIncreasePerSec = bs.readF32(); // 0x400\n result.groundImpactMinSpeed = bs.readF32(); // 0x404\n result.groundImpactShakeFreq = {\n x: bs.readF32(), // 0x408\n y: bs.readF32(), // 0x40c\n z: bs.readF32(), // 0x410\n };\n result.groundImpactShakeAmp = {\n x: bs.readF32(), // 0x414\n y: bs.readF32(), // 0x418\n z: bs.readF32(), // 0x41c\n };\n result.groundImpactShakeDuration = bs.readF32(); // 0x420\n result.groundImpactShakeFalloff = bs.readF32(); // 0x424\n\n return result;\n}\n\n// ============================================================\n// VehicleData (extends ShapeBaseData)\n// ============================================================\n\nfunction vehicleDataUnpack(bs: BitStream): VehicleDataBlock {\n const result: VehicleDataBlock = shapeBaseDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00609450 (Tribes2.exe).\n\n // 1. 2×F32 (body restitution/friction) → offsets 0x33c, 0x340\n result.bodyRestitution = bs.readF32();\n result.bodyFriction = bs.readF32();\n\n // 2. Loop of 2: impact sound DataBlock refs → offsets 0x334+i*4\n const impactSounds: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n impactSounds.push(readDataBlockRef(bs));\n }\n result.impactSounds = impactSounds;\n\n // 3. ~20 F32s for vehicle physics\n result.minImpactSpeed = bs.readF32(); // 0x37c\n result.softImpactSpeed = bs.readF32(); // 0x380\n result.hardImpactSpeed = bs.readF32(); // 0x384 (900 dec)\n result.minRollSpeed = bs.readF32(); // 0x388\n // Registered in the retail binary as \"maxSteerinAngle\" (engine typo);\n // we keep the corrected spelling.\n result.maxSteeringAngle = bs.readF32(); // 0x38c\n result.maxDrag = bs.readF32(); // 0x3a4\n result.minDrag = bs.readF32(); // 0x3a0\n result.jetForce = bs.readF32(); // 0x3a8\n result.jetEnergyDrain = bs.readF32(); // 0x3ac\n result.minJetEnergy = bs.readF32(); // 0x3b0\n result.cameraOffset = bs.readF32(); // 0x39c\n result.cameraLag = bs.readF32(); // 0x398\n result.triggerDustHeight = bs.readF32(); // 0x3c8\n result.dustHeight = bs.readF32(); // 0x3cc\n result.numDmgEmitterAreas = bs.readF32(); // 0x408\n result.exitSplashSoundVelocity = bs.readF32(); // 0x36c\n result.softSplashSoundVelocity = bs.readF32(); // 0x370\n result.mediumSplashSoundVelocity = bs.readF32(); // 0x374\n result.hardSplashSoundVelocity = bs.readF32(); // 0x378\n\n // 4. Loop of 5: water impact sound DataBlock refs → offsets 0x358+i*4\n const waterSounds: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n waterSounds.push(readDataBlockRef(bs));\n }\n result.waterSounds = waterSounds;\n\n // 5. dustEmitter DataBlock ref → offset 0x3c4\n result.dustEmitter = readDataBlockRef(bs);\n\n // 6. Loop of 3: damage emitter DataBlock refs → offsets 0x3dc+i*4\n const damageEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n damageEmitters.push(readDataBlockRef(bs));\n }\n result.damageEmitters = damageEmitters;\n\n // 7. Loop of 2: splash emitter DataBlock refs → offsets 0x414+i*4\n const splashEmitters: (number | null)[] = [];\n for (let i = 0; i < 2; i++) {\n splashEmitters.push(readDataBlockRef(bs));\n }\n result.splashEmitters = splashEmitters;\n\n // 8. 2×3 F32 damage emitter offsets (2 sets of x,y,z) → offsets 0x3e8-0x3f4\n result.damageEmitterOffset0 = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.damageEmitterOffset1 = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // 9. 2 F32 damage level tolerance → offsets 0x400, 0x404\n result.damageLevelTolerance0 = bs.readF32();\n result.damageLevelTolerance1 = bs.readF32();\n\n // 10. 2 F32 splash params → offsets 0x41c, 0x420\n result.splashFreqMod = bs.readF32();\n result.splashVelEpsilon = bs.readF32();\n\n // 11. 2 F32 collision damage → offsets 0x390, 0x394\n result.collDamageThresholdVel = bs.readF32();\n result.collDamageMultiplier = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FlyingVehicleData (extends VehicleData)\n// ============================================================\n\nfunction flyingVehicleDataUnpack(bs: BitStream): FlyingVehicleDataBlock {\n const result: FlyingVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 2 sound refs\n result.jetActivateSound = readDataBlockRef(bs);\n result.jetDeactivateSound = readDataBlockRef(bs);\n\n // 4 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // Verified against decompiled binary FUN_0060fc40 — 16 F32s\n result.maneuveringForce = bs.readF32();\n result.horizontalSurfaceForce = bs.readF32();\n result.verticalSurfaceForce = bs.readF32();\n result.autoInputDamping = bs.readF32();\n result.steeringForce = bs.readF32();\n result.steeringRollForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.autoAngularForce = bs.readF32();\n result.rotationalDrag = bs.readF32();\n result.maxAutoSpeed = bs.readF32();\n result.autoLinearForce = bs.readF32();\n result.hoverHeight = bs.readF32();\n result.createHoverHeight = bs.readF32();\n result.minTrailSpeed = bs.readF32();\n result.vertThrustMultiple = bs.readF32();\n result.maxForwardSpeed = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// HoverVehicleData (extends VehicleData)\n// ============================================================\n\nfunction hoverVehicleDataUnpack(bs: BitStream): HoverVehicleDataBlock {\n const result: HoverVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 17 F32s\n result.dragForce = bs.readF32();\n result.mainThrustForce = bs.readF32();\n result.reverseThrustForce = bs.readF32();\n result.strafeThrustForce = bs.readF32();\n result.turboFactor = bs.readF32();\n result.stabLenMin = bs.readF32();\n result.stabLenMax = bs.readF32();\n result.stabSpringConstant = bs.readF32();\n result.stabDampingConstant = bs.readF32();\n result.gyroDrag = bs.readF32();\n result.normalForce = bs.readF32();\n result.restorativeForce = bs.readF32();\n result.steeringForce = bs.readF32();\n result.rollForce = bs.readF32();\n result.pitchForce = bs.readF32();\n result.floatingThrustFactor = bs.readF32();\n result.brakingForce = bs.readF32();\n\n // 3×F32 (dustTrailOffset)\n result.dustTrailOffset = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // 2 F32s\n result.dustTrailFreqMod = bs.readF32();\n result.triggerTrailHeight = bs.readF32();\n\n // 3 sound refs\n result.floatSound = readDataBlockRef(bs);\n result.thrustSound = readDataBlockRef(bs);\n result.turboSound = readDataBlockRef(bs);\n\n // 3 jet emitter refs\n const jetEmitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n jetEmitters.push(readDataBlockRef(bs));\n }\n result.jetEmitters = jetEmitters;\n\n // dustTrailEmitter ref\n result.dustTrailEmitter = readDataBlockRef(bs);\n\n // 3 F32s\n result.mainThrustEmitterFactor = bs.readF32();\n result.strafeThrustEmitterFactor = bs.readF32();\n result.reverseThrustEmitterFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// WheeledVehicleData (extends VehicleData)\n// ============================================================\n\nfunction wheeledVehicleDataUnpack(bs: BitStream): WheeledVehicleDataBlock {\n const result: WheeledVehicleDataBlock = vehicleDataUnpack(bs);\n\n // 9 tire F32s\n result.tireRadius = bs.readF32();\n result.tireStaticFriction = bs.readF32();\n result.tireKineticFriction = bs.readF32();\n result.tireRestitution = bs.readF32();\n result.tireLateralForce = bs.readF32();\n result.tireLateralDamping = bs.readF32();\n result.tireLateralRelaxation = bs.readF32();\n result.tireLongitudinalForce = bs.readF32();\n result.tireLongitudinalDamping = bs.readF32();\n\n // tire emitter ref\n result.tireEmitter = readDataBlockRef(bs);\n\n // 4 sound refs\n result.jetSound = readDataBlockRef(bs);\n result.engineSound = readDataBlockRef(bs);\n result.squealSound = readDataBlockRef(bs);\n result.wadeSound = readDataBlockRef(bs);\n\n // 11 F32s\n result.spring = bs.readF32();\n result.springDamping = bs.readF32();\n result.springLength = bs.readF32();\n result.brakeTorque = bs.readF32();\n result.engineTorque = bs.readF32();\n result.engineBrake = bs.readF32();\n result.maxWheelSpeed = bs.readF32();\n result.steeringAngle = bs.readF32();\n result.steeringReturn = bs.readF32();\n result.steeringDamping = bs.readF32();\n result.powerSteeringFactor = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// StaticShapeData (extends ShapeBaseData)\n// ============================================================\n\nfunction staticShapeDataUnpack(bs: BitStream): StaticShapeDataBlock {\n const result: StaticShapeDataBlock = shapeBaseDataUnpack(bs);\n result.noIndividualDamage = bs.readFlag();\n result.dynamicTypeField = bs.readS32();\n return result;\n}\n\n// ============================================================\n// TurretData (extends StaticShapeData)\n// ============================================================\n\nfunction turretDataUnpack(bs: BitStream): TurretDataBlock {\n const result: TurretDataBlock = staticShapeDataUnpack(bs);\n // Verified against decompiled binary FUN_00654190\n result.thetaMin = bs.readF32(); // 0x33c\n result.thetaMax = bs.readF32(); // 0x340\n result.thetaNull = bs.readF32(); // 0x344\n result.neverUpdateControl = bs.readFlag(); // 0x34c\n result.primaryAxis = bs.readRangedU32(0, 3); // 0x348 (FUN_0043f120(4) = 2 bits)\n result.maxCapacitorEnergy = bs.readF32(); // 0x35c\n result.capacitorRechargeRate = bs.readF32(); // 0x360\n return result;\n}\n\n// ============================================================\n// TurretImageData (extends ShapeBaseImageData)\n// ============================================================\n\nfunction turretImageDataUnpack(bs: BitStream): TurretImageDataBlock {\n const result: TurretImageDataBlock = shapeBaseImageDataUnpack(bs);\n // Verified against decompiled binary FUN_00654850\n result.activationMS = bs.readInt(8); // << 5 on store (0x1c04)\n result.deactivateDelayMS = bs.readInt(8); // << 5 on store (0x1c08)\n result.degPerSecTheta = bs.readRangedU32(0, 1080); // 0x1c10 (FUN_0043f120(0x439))\n result.degPerSecPhi = bs.readRangedU32(0, 1080); // 0x1c14\n result.dontFireInsideDamageRadius = bs.readFlag(); // 0x1c1c\n result.damageRadius = bs.readF32(); // 0x1c20\n result.useCapacitor = bs.readFlag(); // 0x1c24 (NOT a DataBlockRef)\n return result;\n}\n\n// ============================================================\n// ItemData (extends ShapeBaseData)\n// ============================================================\n\nfunction itemDataUnpack(bs: BitStream): ItemDataBlock {\n const result: ItemDataBlock = shapeBaseDataUnpack(bs);\n\n // 2×readFloat(10)\n result.friction = bs.readFloat(10);\n result.elasticity = bs.readFloat(10);\n\n // flag(sticky)\n result.sticky = bs.readFlag();\n\n // flag(gravityMod!=1) then readFloat(10)\n if (bs.readFlag()) result.gravityMod = bs.readFloat(10);\n\n // flag(maxVelocity!=-1) then F32\n if (bs.readFlag()) result.maxVelocity = bs.readF32();\n\n // flag(hasLight); if true: readInt(2) + 4×readFloat(7) + S32 + F32 + flag\n if (bs.readFlag()) {\n result.lightType = bs.readInt(2);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n };\n result.lightTime = bs.readS32();\n result.lightRadius = bs.readF32();\n result.lightOnlyStatic = bs.readFlag();\n }\n\n return result;\n}\n\n// ============================================================\n// ProjectileData (extends GameBaseData — 0 parent bits)\n// ============================================================\n\nfunction projectileDataUnpack(bs: BitStream): ProjectileDataBlock {\n const result: ProjectileDataBlock = {};\n\n // readString (projectileName)\n result.projectileShapeName = bs.readString();\n\n // 2×S32\n result.faceViewerLinkTime = bs.readS32();\n result.lifetime = bs.readS32();\n\n // flag(faceViewer)\n result.faceViewer = bs.readFlag();\n\n // flag(nonDefaultScale); if true: 3×F32\n if (bs.readFlag()) {\n result.scale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n }\n\n // 9 readDataBlockRef fields in pack order (verified against decompiled\n // Tribes2.exe FUN_00631010 / FUN_006303f0 struct offsets).\n result.baseEmitter = readDataBlockRef(bs); // 0xe8 ParticleEmitterData\n result.delayEmitter = readDataBlockRef(bs); // 0xec ParticleEmitterData\n result.bubbleEmitter = readDataBlockRef(bs); // 0xf0 ParticleEmitterData\n result.explosion = readDataBlockRef(bs); // 0xf4 ExplosionData\n result.underwaterExplosion = readDataBlockRef(bs); // 0xf8 ExplosionData\n result.splash = readDataBlockRef(bs); // 0xfc SplashData\n result.sound = readDataBlockRef(bs); // 0x100 AudioProfile (in-flight)\n result.wetFireSound = readDataBlockRef(bs); // 0x104 AudioProfile\n result.fireSound = readDataBlockRef(bs); // 0x108 AudioProfile\n\n // 6 decal refs (loop)\n const decals: (number | null)[] = [];\n for (let i = 0; i < 6; i++) {\n decals.push(readDataBlockRef(bs));\n }\n result.decals = decals;\n\n // flag(hasLight); if true: readFloat(8) + 3×readFloat(7)\n if (bs.readFlag()) {\n result.lightRadius = bs.readFloat(8);\n result.lightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // flag(hasUnderwaterColor); if true: 3×readFloat(7)\n if (bs.readFlag()) {\n result.underwaterLightColor = {\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n };\n }\n\n // explodeOnWaterImpact: 8-bit bool via stream->write(sizeof(bool))\n // (confirmed in decompiled binary FUN_00631360: read(1,&var) at offset 0xcc)\n result.explodeOnWaterImpact = readBool(bs);\n // depthTolerance: F32\n result.depthTolerance = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// LinearProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction linearProjectileDataUnpack(bs: BitStream): LinearProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_0062bea0 (reads in struct-offset order), and initPersistFields\n // FUN_0062b3c0 maps names to those offsets:\n // 0x138 dryVelocity, 0x13c wetVelocity, 0x140 fizzleTimeMS,\n // 0x144 lifetimeMS, 0x148 explodeOnDeath,\n // 0x14c reflectOnWaterImpactAngle, 0x150 deflectionOnWaterImpact,\n // 0x154 fizzleUnderwaterMS, 0x158 activateDelayMS,\n // 0x15c doDynamicClientHits\n const result: LinearProjectileDataBlock = projectileDataUnpack(bs);\n\n // 2×F32 (0x138, 0x13c)\n result.dryVelocity = bs.readF32();\n result.wetVelocity = bs.readF32();\n\n // 2×U32 in milliseconds, tick-rounded by onAdd (0x140, 0x144)\n result.fizzleTimeMS = bs.readU32();\n result.lifetimeMS = bs.readU32();\n\n // flag (0x148)\n result.explodeOnDeath = bs.readFlag();\n\n // 2×readRangedU32(0,90) in degrees (0x14c, 0x150)\n result.reflectOnWaterImpactAngle = bs.readRangedU32(0, 90);\n result.deflectionOnWaterImpact = bs.readRangedU32(0, 90);\n\n // 2×U32 (0x154, 0x158)\n result.fizzleUnderwaterMS = bs.readU32();\n result.activateDelayMS = bs.readU32();\n\n // flag (0x15c)\n result.doDynamicClientHits = bs.readFlag();\n\n return result;\n}\n\n// ============================================================\n// GrenadeProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction grenadeProjectileDataUnpack(\n bs: BitStream,\n): GrenadeProjectileDataBlock {\n const result: GrenadeProjectileDataBlock = projectileDataUnpack(bs);\n\n result.armingDelayMS = bs.readS32();\n result.muzzleVelocity = bs.readF32();\n result.grenadeElasticity = bs.readF32();\n result.grenadeFriction = bs.readF32();\n result.drag = bs.readF32();\n result.density = bs.readF32();\n result.gravityMod = bs.readF32();\n result.lifetimeMS = bs.readS32();\n\n return result;\n}\n\n// ============================================================\n// SeekerProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction seekerProjectileDataUnpack(bs: BitStream): SeekerProjectileDataBlock {\n const result: SeekerProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary (lines 430494-430580)\n // 10 F32/S32 (offsets 0x138-0x164)\n result.lifetimeMS = bs.readS32(); // 0x138\n result.muzzleVelocity = bs.readF32(); // 0x13c\n result.turningSpeed = bs.readF32(); // 0x140\n result.proximityRadius = bs.readF32(); // 0x14c\n result.terrainAvoidanceSpeed = bs.readF32(); // 0x150\n result.terrainScanAhead = bs.readF32(); // 0x154\n result.terrainHeightFail = bs.readF32(); // 0x158\n result.terrainAvoidanceRadius = bs.readF32(); // 0x15c\n result.flareDistance = bs.readF32(); // 0x160\n result.flareAngle = bs.readF32(); // 0x164\n\n // useFlechette — 8-bit bool via stream->read(1, &var) at offset 0x168\n // (confirmed: read(1, &cStack_21) = 1 BYTE = 8 bits, NOT readF32)\n result.useFlechette = readBool(bs);\n\n // 2 F32 (offsets 0x144, 0x148)\n result.maxVelocity = bs.readF32();\n result.acceleration = bs.readF32();\n\n // 2 S32 (offsets 0x16c, 0x180)\n result.flechetteDelayMs = bs.readS32();\n result.exhaustTimeMs = bs.readS32();\n\n // 2 readString (offsets 0x184, 0x190)\n result.exhaustNodeName = bs.readString();\n result.casingShapeName = bs.readString();\n\n // 3 conditional DataBlock refs (offsets 0x18c, 0x174, 0x17c)\n result.casingDebris = readDataBlockRef(bs);\n result.puffEmitter = readDataBlockRef(bs);\n result.exhaustEmitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SniperProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction sniperProjectileDataUnpack(bs: BitStream): SniperProjectileDataBlock {\n const result: SniperProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_00641d40\n // 2×F32 (offsets 0x138, 0x13c)\n result.maxRifleRange = bs.readF32();\n result.rifleHeadMultiplier = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x140)\n result.beamColor = readColorF(bs);\n\n // 9×F32 (offsets 0x150, 0x154, 0x158, 0x168, 0x15c, 0x160, 0x164, 0x16c, 0x170)\n result.fadeTime = bs.readF32();\n result.startBeamWidth = bs.readF32();\n result.endBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x178)\n result.lightColor = readColorF(bs);\n\n // F32 (offset 0x174)\n result.lightRadius = bs.readF32();\n\n // 12 readString (ST_NUM_TEX=0xc)\n const textures: string[] = [];\n for (let i = 0; i < 12; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// ShockLanceProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction shockLanceProjectileDataUnpack(\n bs: BitStream,\n): ShockLanceProjectileDataBlock {\n // Verified against decompiled binary FUN_0064e840\n const result: ShockLanceProjectileDataBlock = projectileDataUnpack(bs);\n\n // 7 F32 (offsets 0x138, 0x13c, 0x160, 0x164, 0x168, 0x16c, 0x170)\n result.zapDuration = bs.readF32();\n result.boltLength = bs.readF32();\n result.numParts = bs.readF32();\n result.lightningFreq = bs.readF32();\n result.lightningDensity = bs.readF32();\n result.lightningAmp = bs.readF32();\n result.lightningWidth = bs.readF32();\n\n // DataBlockRef (shockwave at offset 0x190)\n result.shockwave = readDataBlockRef(bs);\n\n // 2×4 loop: startWidth[2], endWidth[2], boltSpeed[2], texWrap[2]\n // (offsets 0x140+i*4, 0x148+i*4, 0x150+i*4, 0x158+i*4)\n const startWidth: number[] = [];\n const endWidth: number[] = [];\n const boltSpeed: number[] = [];\n const texWrap: number[] = [];\n for (let i = 0; i < 2; i++) {\n startWidth.push(bs.readF32());\n endWidth.push(bs.readF32());\n boltSpeed.push(bs.readF32());\n texWrap.push(bs.readF32());\n }\n result.startWidth = startWidth;\n result.endWidth = endWidth;\n result.boltSpeed = boltSpeed;\n result.texWrap = texWrap;\n\n // 4 readString (texture[4] at offset 0x174)\n const slTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n slTextures.push(bs.readString());\n }\n result.textures = slTextures;\n\n // DataBlockRef (emitter at offset 0x188)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// ELFProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction elfProjectileDataUnpack(bs: BitStream): ELFProjectileDataBlock {\n // Verified against decompiled binary: initPersistFields FUN_0064a860,\n // unpackData FUN_0064ae00. 6×F32 into offsets 0x138 (beamRange) then\n // 0x154..0x164 (the beam/lightning fields), 3 readString (textures),\n // then flag + ranged id (emitter). Field names were previously\n // fabricated; the bit layout was already correct.\n const result: ELFProjectileDataBlock = projectileDataUnpack(bs);\n\n // 6×F32 (offsets 0x138, 0x154, 0x158, 0x15c, 0x160, 0x164)\n result.beamRange = bs.readF32();\n result.mainBeamWidth = bs.readF32();\n result.mainBeamSpeed = bs.readF32();\n result.mainBeamRepeat = bs.readF32();\n result.lightningWidth = bs.readF32();\n result.lightningDist = bs.readF32();\n\n // 3 readString (textures[0..2] at 0x140)\n const textures: string[] = [];\n for (let i = 0; i < 3; i++) textures.push(bs.readString());\n result.textures = textures;\n\n // 1 readDataBlockRef (emitter at 0x150)\n result.emitter = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// RepairProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction repairProjectileDataUnpack(bs: BitStream): RepairProjectileDataBlock {\n // Verified against decompiled binary: initPersistFields FUN_00644910,\n // unpackData FUN_00644c40 — 8×32-bit reads in struct-offset order\n // 0x138, 0x13c, 0x140, 0x148, 0x144, 0x14c, 0x150, 0x154, then 2\n // readString (textures at 0x158). numSegments (0x140) is registered\n // as an S32 (persist type 1) — the old decode read its raw bits as a\n // float. Field names were previously fabricated.\n const result: RepairProjectileDataBlock = projectileDataUnpack(bs);\n\n result.beamRange = bs.readF32();\n result.beamWidth = bs.readF32();\n result.numSegments = bs.readS32();\n result.beamSpeed = bs.readF32();\n result.texRepeat = bs.readF32();\n result.blurFreq = bs.readF32();\n result.blurLifetime = bs.readF32();\n result.cutoffAngle = bs.readF32();\n\n // 2 readString (textures[0..1]; retail: redbump2 / redflare)\n const textures: string[] = [];\n for (let i = 0; i < 2; i++) textures.push(bs.readString());\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// TargetProjectileData (extends ProjectileData)\n// ============================================================\n\nfunction targetProjectileDataUnpack(bs: BitStream): TargetProjectileDataBlock {\n const result: TargetProjectileDataBlock = projectileDataUnpack(bs);\n\n // Verified against decompiled binary FUN_006477f0\n // F32 (offset 0x138)\n result.maxRifleRange = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 = 32 bits at offset 0x13c)\n result.beamColor = readColorF(bs);\n\n // 7×F32 (offsets 0x14c, 0x15c, 0x150, 0x154, 0x158, 0x160, 0x164)\n result.startBeamWidth = bs.readF32();\n result.pulseBeamWidth = bs.readF32();\n result.beamFlareAngle = bs.readF32();\n result.minFlareSize = bs.readF32();\n result.maxFlareSize = bs.readF32();\n result.pulseSpeed = bs.readF32();\n result.pulseLength = bs.readF32();\n\n // 4 readString (textureName[4] at offset 0x16c)\n const targetTextures: string[] = [];\n for (let i = 0; i < 4; i++) {\n targetTextures.push(bs.readString());\n }\n result.textures = targetTextures;\n\n return result;\n}\n\n// ============================================================\n// TracerProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction tracerProjectileDataUnpack(bs: BitStream): TracerProjectileDataBlock {\n // Field names verified against decompiled binary: unpackData is\n // FUN_00640160 (reads in struct-offset order), and initPersistFields\n // FUN_0063fcb0 maps names to those offsets:\n // 0x168 tracerLength, 0x16c tracerAlpha (bool), 0x170 tracerMinPixels,\n // 0x174 tracerColor, 0x184 tracerWidth, 0x188 crossViewAng,\n // 0x18c crossSize, 0x190 renderCross, 0x194[2] tracerTex\n const result: TracerProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // 3 F32 (offsets 0x168, 0x184, 0x170)\n result.tracerLength = bs.readF32();\n result.tracerWidth = bs.readF32();\n result.tracerMinPixels = bs.readF32();\n\n // readBool 8-bit (offset 0x16c)\n result.tracerAlpha = readBool(bs);\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x174)\n result.tracerColor = readColorF(bs);\n\n // 2 F32 (offsets 0x188, 0x18c)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n\n // readBool 8-bit (offset 0x190)\n result.renderCross = readBool(bs);\n\n // 2 readString (loop count=2 at offset 0x194)\n result.tracerTex0 = bs.readString();\n result.tracerTex1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// EnergyProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction energyProjectileDataUnpack(bs: BitStream): EnergyProjectileDataBlock {\n // Verified against decompiled binary FUN_00694d80 — parent is FUN_00633cf0\n // (GrenadeProjectileData). 7×F32 into offsets 0x168..0x180, then 2\n // readString into 0x158/0x15c; names from initPersistFields FUN_00694b40.\n const result: EnergyProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 7×F32 (offsets 0x168, 0x16c, 0x170, 0x174, then blurColor rgb at\n // 0x178/0x17c/0x180 — alpha is not transmitted)\n result.crossViewAng = bs.readF32();\n result.crossSize = bs.readF32();\n result.blurLifetime = bs.readF32();\n result.blurWidth = bs.readF32();\n result.blurColor = {\n r: bs.readF32(),\n g: bs.readF32(),\n b: bs.readF32(),\n a: 1,\n };\n\n // 2 readString (offsets 0x158, 0x15c)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// LinearFlareProjectileData (extends LinearProjectileData)\n// ============================================================\n\nfunction linearFlareProjectileDataUnpack(\n bs: BitStream,\n): LinearFlareProjectileDataBlock {\n // Verified against decompiled binary FUN_0063dc80\n const result: LinearFlareProjectileDataBlock = linearProjectileDataUnpack(bs);\n\n // F32 (offset 0x168)\n result.numFlares = bs.readF32();\n\n // ColorF via FUN_0043f040 (packed 4×U8 at offset 0x178)\n result.flareColor = readColorF(bs);\n\n // 2 readString (offsets 0x188, 0x18c)\n result.flareTexture = bs.readString();\n result.smokeTexture = bs.readString();\n\n // 3×F32 loop (offset 0x16c, count=3)\n result.size = bs.readF32();\n result.flareModTexture = bs.readF32();\n result.smokeSize = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// BombProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction bombProjectileDataUnpack(bs: BitStream): BombProjectileDataBlock {\n const result: BombProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // 6×F32\n result.smokeDist = bs.readF32();\n result.noSmoke = bs.readF32();\n result.boomTime = bs.readF32();\n result.casingDist = bs.readF32();\n result.smokeCushion = bs.readF32();\n result.noSmokeCounter = bs.readF32();\n\n // 2 readString\n result.smokeTexture = bs.readString();\n result.bombTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// FlareProjectileData (extends GrenadeProjectileData)\n// ============================================================\n\nfunction flareProjectileDataUnpack(bs: BitStream): FlareProjectileDataBlock {\n // Verified against decompiled binary FUN_006872f0\n const result: FlareProjectileDataBlock = grenadeProjectileDataUnpack(bs);\n\n // F32 (offset 0x158)\n result.size = bs.readF32();\n\n // readBool 8-bit (offset 0x160, read(1,...))\n result.useLensFlare = readBool(bs);\n\n // 2 readString loop (offset 0x164, count=2)\n result.flareTexture = bs.readString();\n result.lensFlareTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ExplosionData (extends GameBaseData)\n// ============================================================\n\nfunction explosionDataUnpack(bs: BitStream): ExplosionDataBlock {\n const result: ExplosionDataBlock = {};\n\n // readString\n result.dtsFileName = bs.readString();\n\n // 2 readDataBlockRef\n result.soundProfile = readDataBlockRef(bs);\n result.particleEmitter = readDataBlockRef(bs);\n\n // readInt(14) + F32 + flag\n result.particleDensity = bs.readInt(14);\n result.particleRadius = bs.readF32();\n result.faceViewer = bs.readFlag();\n\n // flag(scale); if true: 3×readInt(16)\n if (bs.readFlag()) {\n result.explosionScale = {\n x: bs.readInt(16),\n y: bs.readInt(16),\n z: bs.readInt(16),\n };\n }\n\n // readInt(14) + 4×readRangedU32 + 2×readRangedU32(0,1000) + readInt(14) + readRangedU32(0,10000)\n result.playSpeed = bs.readInt(14);\n result.debrisThetaMin = bs.readRangedU32(0, 180);\n result.debrisThetaMax = bs.readRangedU32(0, 180);\n result.debrisPhiMin = bs.readRangedU32(0, 360);\n result.debrisPhiMax = bs.readRangedU32(0, 360);\n result.debrisMinVelocity = bs.readRangedU32(0, 1000);\n result.debrisMaxVelocity = bs.readRangedU32(0, 1000);\n result.debrisNum = bs.readInt(14);\n result.debrisVariance = bs.readRangedU32(0, 10000);\n\n // 4×readInt(16) + F32 + 2 flags\n result.delayMS = bs.readInt(16);\n result.delayVariance = bs.readInt(16);\n result.lifetimeMS = bs.readInt(16);\n result.lifetimeVariance = bs.readInt(16);\n result.offset = bs.readF32();\n result.shakeCamera = bs.readFlag();\n result.hasLight = bs.readFlag();\n\n // 9×F32\n result.camShakeFreq = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.camShakeAmp = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.camShakeDuration = bs.readF32();\n result.camShakeRadius = bs.readF32();\n result.camShakeFalloff = bs.readF32();\n\n // readDataBlockRef(shockwave) + 1 debris ref + 4 emitter refs + 5 sub-explosion refs\n result.shockwave = readDataBlockRef(bs);\n result.debris = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 4; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n const subExplosions: (number | null)[] = [];\n for (let i = 0; i < 5; i++) {\n subExplosions.push(readDataBlockRef(bs));\n }\n result.subExplosions = subExplosions;\n\n // readRangedU32(0,4) count; loop: readFloat(8) times + 3×readRangedU32(0,16000) sizes\n const timeCount = bs.readRangedU32(0, 4);\n const times: number[] = [];\n for (let i = 0; i < timeCount; i++) {\n times.push(bs.readFloat(8));\n }\n result.times = times;\n const sizes: { x: number; y: number; z: number }[] = [];\n for (let i = 0; i < timeCount; i++) {\n sizes.push({\n x: bs.readRangedU32(0, 16000),\n y: bs.readRangedU32(0, 16000),\n z: bs.readRangedU32(0, 16000),\n });\n }\n result.sizes = sizes;\n\n return result;\n}\n\n// ============================================================\n// DebrisData (extends GameBaseData)\n// ============================================================\n\nfunction debrisDataUnpack(bs: BitStream): DebrisDataBlock {\n // Field order confirmed from decompiled binary FUN_006844d0\n const result: DebrisDataBlock = {};\n\n result.elasticity = bs.readF32(); // 0x50\n result.friction = bs.readF32(); // 0x4c\n result.numBounces = bs.readS32(); // 0x5c\n result.bounceVariance = bs.readS32(); // 0x60\n result.minSpinSpeed = bs.readF32(); // 0x64\n result.maxSpinSpeed = bs.readF32(); // 0x68\n\n // 4 bools via stream->write(sizeof(bool)) = 8 bits each (0x6c-0x6f)\n result.render2D = readBool(bs);\n result.explodeOnMaxBounce = readBool(bs);\n result.staticOnMaxBounce = readBool(bs);\n result.snapOnMaxBounce = readBool(bs);\n\n result.lifetime = bs.readF32(); // 0x54\n result.lifetimeVariance = bs.readF32(); // 0x58\n\n // \"Written twice\" bug: same offsets 0x64/0x68 written again\n result.minSpinSpeed_dup = bs.readF32();\n result.maxSpinSpeed_dup = bs.readF32();\n\n result.velocity = bs.readF32(); // 0x44\n result.velocityVariance = bs.readF32(); // 0x48\n\n // 2 bools via stream->write(sizeof(bool)) = 8 bits each (0x70, 0x71)\n result.useRadiusMass = readBool(bs);\n result.fade = readBool(bs);\n\n result.baseRadius = bs.readF32(); // 0x74\n result.gravModifier = bs.readF32(); // 0x78\n result.terminalVelocity = bs.readF32(); // 0x7c\n\n result.ignoreWater = readBool(bs); // 0x80 (8-bit bool)\n\n // 2 readString — names binary-verified: 0x8c is registered as\n // `texture`, 0x84 as `shapeName` (read in that wire order)\n result.texture = bs.readString(); // 0x8c\n result.shapeName = bs.readString(); // 0x84\n\n // 2 emitter refs (loop at 0xa4, 0xa8) + 1 explosion ref (0x94)\n result.emitter0 = readDataBlockRef(bs);\n result.emitter1 = readDataBlockRef(bs);\n result.explosion = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// SplashData (extends GameBaseData)\n// ============================================================\n\nfunction splashDataUnpack(bs: BitStream): SplashDataBlock {\n const result: SplashDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // ~15 F32/S32 values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n result.texFactor = bs.readF32();\n result.ejectionFreq = bs.readF32();\n result.ejectionAngle = bs.readF32();\n result.ringLifetime = bs.readF32();\n result.startRadius = bs.readF32();\n\n // explosion ref + 3 emitter refs\n result.explosion = readDataBlockRef(bs);\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.foamTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ShockwaveData (extends GameBaseData)\n// ============================================================\n\nfunction shockwaveDataUnpack(bs: BitStream): ShockwaveDataBlock {\n const result: ShockwaveDataBlock = {};\n\n // 3×F32 (scale)\n result.scale = {\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n\n // ~17 F32/S32/bool values\n result.delayMS = bs.readS32();\n result.delayVariance = bs.readS32();\n result.lifetimeMS = bs.readS32();\n result.lifetimeVariance = bs.readS32();\n result.width = bs.readF32();\n result.numSegments = bs.readS32();\n result.numVertSegments = bs.readS32();\n result.velocity = bs.readF32();\n result.height = bs.readF32();\n result.verticalCurve = bs.readF32();\n result.acceleration = bs.readF32();\n result.texWrap = bs.readF32();\n // 5 bools via stream->write(sizeof(bool)) = 8 bits each\n // (confirmed at offsets 0x98-0x9c in binary, using read(1,&var) pattern)\n result.is2D = readBool(bs);\n result.orientToNormal = readBool(bs);\n result.mapToTerrain = readBool(bs);\n result.renderBottom = readBool(bs);\n result.renderSquare = readBool(bs);\n\n // 3 emitter refs\n const emitters: (number | null)[] = [];\n for (let i = 0; i < 3; i++) {\n emitters.push(readDataBlockRef(bs));\n }\n result.emitters = emitters;\n\n // 4× ColorF (4×U8 = 32 bits each, via FUN_0043f040)\n const colors: { r: number; g: number; b: number; a: number }[] = [];\n for (let i = 0; i < 4; i++) {\n colors.push(readColorF(bs));\n }\n result.colors = colors;\n\n // 4×F32 times\n const times: number[] = [];\n for (let i = 0; i < 4; i++) {\n times.push(bs.readF32());\n }\n result.times = times;\n\n // 2 readString\n result.textureName = bs.readString();\n result.mapToTexture = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmitterData (extends GameBaseData)\n// ============================================================\n\nfunction particleEmitterDataUnpack(bs: BitStream): ParticleEmitterDataBlock {\n const result: ParticleEmitterDataBlock = {};\n\n // 4 readInt(various)\n result.ejectionPeriodMS = bs.readInt(10);\n result.periodVarianceMS = bs.readInt(10);\n result.ejectionVelocity = bs.readInt(16);\n result.velocityVariance = bs.readInt(14);\n\n // flag then readInt(16)\n if (bs.readFlag()) {\n result.ejectionOffset = bs.readInt(16);\n }\n\n // 2×readRangedU32(0,180)\n result.thetaMin = bs.readRangedU32(0, 180);\n result.thetaMax = bs.readRangedU32(0, 180);\n\n // 2 conditional readRangedU32(0,360)\n if (bs.readFlag()) result.phiReferenceVel = bs.readRangedU32(0, 360);\n if (bs.readFlag()) result.phiVariance = bs.readRangedU32(0, 360);\n\n // 3 flags\n result.overrideAdvances = bs.readFlag();\n result.orientParticles = bs.readFlag();\n result.orientOnVelocity = bs.readFlag();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // 2 flags\n result.useEmitterSizes = bs.readFlag();\n result.useEmitterColors = bs.readFlag();\n\n // U32 count (4 bytes) + per-particle: flag(1b) + conditional readClassId(11b)\n // Verified against decompiled binary FUN_006222a0:\n // read(4, &count) → U32 count\n // for each: readFlag → if true: FUN_00436d10 (readClassId, 11 bits); else: 0xFFFFFFFF\n const particleCount = bs.readU32();\n const particles: (number | null)[] = [];\n for (let i = 0; i < particleCount && i < 16; i++) {\n particles.push(readDataBlockRef(bs));\n }\n result.particles = particles;\n\n return result;\n}\n\n// ============================================================\n// ParticleData (extends GameBaseData)\n// ============================================================\n\nfunction particleDataUnpack(bs: BitStream): ParticleDataBlock {\n const result: ParticleDataBlock = {};\n\n // readFloat(10) + flag then F32\n result.dragCoefficient = bs.readFloat(10);\n if (bs.readFlag()) result.windCoefficient = bs.readF32();\n\n // readSignedFloat(12)\n result.gravityCoefficient = bs.readSignedFloat(12);\n\n // readFloat(9) + flag then F32\n result.inheritedVelFactor = bs.readFloat(9);\n if (bs.readFlag()) result.constantAcceleration = bs.readF32();\n\n // 2×readInt(10)\n result.lifetimeMS = bs.readInt(10);\n result.lifetimeVarianceMS = bs.readInt(10);\n\n // flag then F32 (spinSpeed at offset 0x58, conditional)\n if (bs.readFlag()) result.spinSpeed = bs.readF32();\n\n // flag then 2×readInt(11) (spinRandomMin/Max at 0x5c/0x60)\n // Verified against decompiled binary FUN_006232d0:\n // spinRandom conditional checks BOTH defaults, reads 11-bit values (subtract 1000)\n if (bs.readFlag()) {\n result.spinRandomMin = bs.readInt(11);\n result.spinRandomMax = bs.readInt(11);\n }\n\n // useInvAlpha — always read (1-bit flag at offset 0x64)\n // NOT inside the spinRandom conditional (confirmed in binary: separate readFlag at line 416229)\n result.useInvAlpha = bs.readFlag();\n\n // readInt(2) count(+1); per key: 4×readFloat(7) + readFloat(14) + readFloat(8)\n const numKeys = bs.readInt(2) + 1;\n const keys: ParticleKey[] = [];\n for (let i = 0; i < numKeys; i++) {\n keys.push({\n r: bs.readFloat(7),\n g: bs.readFloat(7),\n b: bs.readFloat(7),\n a: bs.readFloat(7),\n size: bs.readFloat(14),\n time: bs.readFloat(8),\n });\n }\n result.keys = keys;\n\n // readInt(6) texCount; per tex: readString\n const texCount = bs.readInt(6);\n const textures: string[] = [];\n for (let i = 0; i < texCount && i < 50; i++) {\n textures.push(bs.readString());\n }\n result.textures = textures;\n\n return result;\n}\n\n// ============================================================\n// AudioDescription (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioDescriptionUnpack(bs: BitStream): AudioDescriptionDataBlock {\n const result: AudioDescriptionDataBlock = {};\n\n // readFloat(6)\n result.volume = bs.readFloat(6);\n\n // flag(looping); if true: 3×S32\n result.isLooping = bs.readFlag();\n if (result.isLooping) {\n result.loopCount = bs.readS32();\n result.minLoopGap = bs.readS32();\n result.maxLoopGap = bs.readS32();\n }\n\n // flag(is3D); if true: 2×F32 + 2×readInt(9) + readFloat(6) + readNormalVector(8) + F32\n // Verified: decompiled FUN_0040c1a0 has NO isStreaming flag between isLooping and is3D.\n // Offsets: isLooping=0x40, is3D=0x41 — consecutive with no gap.\n result.is3D = bs.readFlag();\n if (result.is3D) {\n result.referenceDistance = bs.readF32();\n result.maxDistance = bs.readF32();\n result.coneInsideAngle = bs.readInt(9);\n result.coneOutsideAngle = bs.readInt(9);\n result.coneOutsideVolume = bs.readFloat(6);\n result.coneVector = bs.readNormalVector(8);\n result.environmentLevel = bs.readF32();\n }\n\n // readInt(3) — type\n result.type = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// AudioProfile (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioProfileUnpack(bs: BitStream): AudioProfileDataBlock {\n const result: AudioProfileDataBlock = {};\n\n // Verified: decompiled FUN_0040c7f0 reads 3 DataBlock refs + 1 string.\n // Offsets: 0x48 (description), 0x4c (effect/environment), 0x50 (sampleEnvironment)\n result.description = readDataBlockRef(bs);\n result.environment = readDataBlockRef(bs);\n result.sampleEnvironment = readDataBlockRef(bs);\n\n // readString (filename, .wav appended on read)\n result.filename = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// AudioEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioEnvironmentUnpack(bs: BitStream): AudioEnvironmentDataBlock {\n // Verified against decompiled binary FUN_0040b530\n const result: AudioEnvironmentDataBlock = {};\n\n // flag(useRoom) → offset 0x3c\n result.useRoom = bs.readFlag();\n if (result.useRoom) {\n // readRangedU32(0, 26) → offset 0x40 (FUN_0043f120(0x1b=27), rangeSize=27, max=26)\n result.room = bs.readRangedU32(0, 26);\n } else {\n // 13 fields inside !useRoom branch (binary offsets 0x44-0x7c)\n result.roomHF = readRangedS32(bs, -10000, 0); // 0x44\n result.reflections = readRangedS32(bs, -10000, 10000); // 0x48\n result.reverb = readRangedS32(bs, -10000, 2000); // 0x4c\n result.roomRolloffFactor = readRangedF32(bs, 0.1, 10, 8); // 0x50\n result.decayTime = readRangedF32(bs, 0.1, 20, 8); // 0x54\n result.decayHFRatio = readRangedF32(bs, 0.1, 20, 8); // 0x58\n result.reflectionsDelay = readRangedF32(bs, 0, 0.3, 9); // 0x5c\n result.reverbDelay = readRangedF32(bs, 0, 0.1, 7); // 0x60\n result.roomVolume = readRangedS32(bs, -10000, 0); // 0x64\n // Names binary-verified: initPersistFields maps 0x6c damping,\n // 0x70 environmentSize, 0x74 environmentDiffusion, 0x78 airAbsorption.\n result.damping = readRangedF32(bs, 0, 1, 9); // 0x6c (9 bits, confirmed in binary)\n result.environmentSize = readRangedF32(bs, 0, 2, 10); // 0x70 (10 bits, confirmed in binary)\n result.environmentDiffusion = readRangedF32(bs, 1, 100, 8); // 0x74 (8 bits, confirmed in binary)\n result.airAbsorption = readRangedF32(bs, 0, 1, 10); // 0x78 (10 bits, confirmed in binary)\n result.flags = bs.readInt(6); // 0x7c\n }\n\n // Trailing field: always present after both branches (offset 0x68 =\n // effectVolume per initPersistFields)\n result.effectVolume = readRangedF32(bs, 0, 1, 8);\n\n return result;\n}\n\n// ============================================================\n// AudioSampleEnvironment (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction audioSampleEnvironmentUnpack(\n bs: BitStream,\n): AudioSampleEnvironmentDataBlock {\n const result: AudioSampleEnvironmentDataBlock = {};\n\n // Series of rangedS32 and rangedF32 values + readInt(3)\n result.direct = readRangedS32(bs, -10000, 1000);\n result.directHF = readRangedS32(bs, -10000, 0);\n result.room = readRangedS32(bs, -10000, 1000);\n result.roomHF = readRangedS32(bs, -10000, 0);\n result.obstruction = readRangedF32(bs, 0, 1, 9);\n result.obstructionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusion = readRangedF32(bs, 0, 1, 9);\n result.occlusionLFRatio = readRangedF32(bs, 0, 1, 8);\n result.occlusionRoomRatio = readRangedF32(bs, 0, 10, 9);\n result.roomRolloff = readRangedF32(bs, 0, 10, 9);\n result.airAbsorption = readRangedF32(bs, 0, 10, 9);\n result.outsideVolumeHF = readRangedS32(bs, -10000, 0);\n result.flags = bs.readInt(3);\n\n return result;\n}\n\n// ============================================================\n// DecalData (extends SimDataBlock — 0 parent bits)\n// ============================================================\n\nfunction decalDataUnpack(bs: BitStream): DecalDataBlock {\n return {\n sizeX: bs.readF32(),\n sizeY: bs.readF32(),\n textureName: bs.readString(),\n };\n}\n\n// ============================================================\n// CameraData (extends ShapeBaseData) — no additional fields\n// ============================================================\n\nfunction cameraDataUnpack(bs: BitStream): CameraDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// SensorData — empty body\n// ============================================================\n\nfunction sensorDataUnpack(_bs: BitStream): SensorDataBlock {\n return {};\n}\n\n// ============================================================\n// TriggerData — S32(tickPeriodMS)\n// ============================================================\n\nfunction triggerDataUnpack(bs: BitStream): TriggerDataBlock {\n return { tickPeriodMS: bs.readS32() };\n}\n\n// ============================================================\n// ForceFieldBareData\n// ============================================================\n\nfunction forceFieldBareDataUnpack(bs: BitStream): ForceFieldBareDataBlock {\n // Verified against decompiled binary FUN_00675580\n const result: ForceFieldBareDataBlock = {};\n\n // 3 S32/F32 (offsets 0x44, 0x48, 0x4c)\n result.fadeMS = bs.readS32();\n result.baseTranslucency = bs.readF32();\n result.powerOffTranslucency = bs.readF32();\n\n // 2 readFlag (offsets 0x8c, 0x8d — 1-bit flags, inline bit extraction)\n result.fadeInOnly = bs.readFlag();\n result.triggerEnable = bs.readFlag();\n\n // 2 ColorF via FUN_0043f040 (packed 4×U8 = 32 bits each, offsets 0x90, 0xa0)\n result.color1 = readColorF(bs);\n result.color2 = readColorF(bs);\n\n // Offsets 0x84, 0x88, 0x80, 0x78, 0x7c — named to match TorqueScript fields.\n // framesPerSec and numFrames are S32 (integers); the rest are F32.\n result.framesPerSec = bs.readS32(); // 0x84\n result.numFrames = bs.readS32(); // 0x88\n result.scrollSpeed = bs.readF32(); // 0x80\n result.umapping = bs.readF32(); // 0x78\n result.vmapping = bs.readF32(); // 0x7c\n\n // 5 readString (loop at 0x50+i*4)\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n result.texture2 = bs.readString();\n result.texture3 = bs.readString();\n result.texture4 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// ParticleEmissionDummyData — F32(timeMultiple)\n// ============================================================\n\nfunction particleEmissionDummyDataUnpack(\n bs: BitStream,\n): ParticleEmissionDummyDataBlock {\n return { timeMultiple: bs.readF32() };\n}\n\n// ============================================================\n// CommanderIconData — 5 readString (NumImages=5)\n// ============================================================\n\nfunction commanderIconDataUnpack(bs: BitStream): CommanderIconDataBlock {\n return {\n baseImage: bs.readString(),\n activeImage: bs.readString(),\n inactiveImage: bs.readString(),\n selectImage: bs.readString(),\n hilightImage: bs.readString(),\n };\n}\n\n// ============================================================\n// PrecipitationData\n// ============================================================\n\nfunction precipitationDataUnpack(bs: BitStream): PrecipitationDataBlock {\n // Verified against decompiled binary FUN_006805d0\n const result: PrecipitationDataBlock = {};\n\n // DataBlockRef (soundProfile at offset 0x48)\n result.soundProfile = readDataBlockRef(bs);\n\n // S32 (offset 0x4c)\n result.numDrops = bs.readS32();\n\n // F32 (maxSize at offset 0x50 — before string)\n result.maxSize = bs.readF32();\n\n // readString (materialList at offset 0x5c)\n result.materialList = bs.readString();\n\n // 13×F32 (offsets 0x54, 0x58, 0x60, 0x64, 0x68, 0x6c, 0x70, 0x74, 0x78, 0x7c, 0x80, 0x84, 0x88)\n result.sizeX = bs.readF32();\n result.sizeY = bs.readF32();\n result.movingBoxPer = bs.readF32();\n result.divHeightVal = bs.readF32();\n result.sizeBigBox = bs.readF32();\n result.topBoxSpeed = bs.readF32();\n result.frontBoxSpeed = bs.readF32();\n result.topBoxDrawPer = bs.readF32();\n result.bottomDrawHeight = bs.readF32();\n result.skipIfPer = bs.readF32();\n result.bottomSpeedPer = bs.readF32();\n result.frontSpeedPer = bs.readF32();\n result.frontRadiusPer = bs.readF32();\n\n return result;\n}\n\n// ============================================================\n// FireballAtmosphereData\n// ============================================================\n\nfunction fireballAtmosphereDataUnpack(\n bs: BitStream,\n): FireballAtmosphereDataBlock {\n return { emitter: readDataBlockRef(bs) };\n}\n\n// ============================================================\n// LightningData\n// ============================================================\n\nfunction lightningDataUnpack(bs: BitStream): LightningDataBlock {\n const result: LightningDataBlock = {};\n\n // 8 readDataBlockRef (strikeSound profiles)\n const strikeSounds: (number | null)[] = [];\n for (let i = 0; i < 8; i++) {\n strikeSounds.push(readDataBlockRef(bs));\n }\n result.strikeSounds = strikeSounds;\n\n // 8 readString (strikeTextures)\n const strikeTextures: string[] = [];\n for (let i = 0; i < 8; i++) {\n strikeTextures.push(bs.readString());\n }\n result.strikeTextures = strikeTextures;\n\n // readDataBlockRef (thunder sound)\n result.thunderSound = readDataBlockRef(bs);\n\n return result;\n}\n\n// ============================================================\n// StationFXVehicleData\n// ============================================================\n\nfunction stationFXVehicleDataUnpack(bs: BitStream): StationFXVehicleDataBlock {\n // Field order confirmed from decompiled binary FUN_0069d570\n const result: StationFXVehicleDataBlock = {};\n\n // 11 F32 fields (offsets 0x44-0x6c)\n result.glowTopHeight = bs.readF32(); // 0x44\n result.glowBottomHeight = bs.readF32(); // 0x48\n result.glowTopRadius = bs.readF32(); // 0x4c\n result.glowBottomRadius = bs.readF32(); // 0x50\n result.numGlowSegments = bs.readF32(); // 0x54\n result.glowFadeTime = bs.readF32(); // 0x58\n result.armLightDelay = bs.readF32(); // 0x5c\n result.armLightLifetime = bs.readF32(); // 0x60\n result.armLightFadeTime = bs.readF32(); // 0x64\n result.lifetime = bs.readF32(); // 0x68\n result.numArcSegments = bs.readF32(); // 0x6c\n\n // ColorF via FUN_0043f040 (4×U8 = 32 bits at offset 0x70)\n result.sphereColor = readColorF(bs);\n\n // 6 F32 fields (offsets 0x80-0x94)\n result.spherePhiSegments = bs.readF32(); // 0x80\n result.sphereThetaSegments = bs.readF32(); // 0x84\n result.sphereRadius = bs.readF32(); // 0x88\n result.scale = {\n x: bs.readF32(), // 0x8c\n y: bs.readF32(), // 0x90\n z: bs.readF32(), // 0x94\n };\n\n // 11 strings — names binary-verified (initPersistFields: 0x98\n // glowNodeName, 0x9c leftNodeName[4], 0xac rightNodeName[4], 0xbc\n // texture[2]) and demo-verified (\"GLOWFX\", LFX1/RFX1…, stationGlow).\n result.glowNodeName = bs.readString(); // 0x98\n\n // 4×(left, right) node name pairs, interleaved on the wire\n result.leftNodeName0 = bs.readString();\n result.rightNodeName0 = bs.readString();\n result.leftNodeName1 = bs.readString();\n result.rightNodeName1 = bs.readString();\n result.leftNodeName2 = bs.readString();\n result.rightNodeName2 = bs.readString();\n result.leftNodeName3 = bs.readString();\n result.rightNodeName3 = bs.readString();\n\n // 2 readString\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// StationFXPersonalData\n// ============================================================\n\nfunction stationFXPersonalDataUnpack(\n bs: BitStream,\n): StationFXPersonalDataBlock {\n const result: StationFXPersonalDataBlock = {};\n\n // ~10 F32\n result.glowTopRadius = bs.readF32();\n result.glowBottomRadius = bs.readF32();\n result.glowTopHeight = bs.readF32();\n result.glowBottomHeight = bs.readF32();\n result.numGlowSegments = bs.readF32();\n result.numGlowPanels = bs.readF32();\n result.topAlpha = bs.readF32();\n result.bottomAlpha = bs.readF32();\n result.glowSpeed = bs.readF32();\n result.scrollSpeed = bs.readF32();\n\n // 4 strings — demo-verified (\"FX1\", \"FX2\", \"special/stationLight\"):\n // the two attach node names, then texture[2]\n result.leftNodeName = bs.readString();\n result.rightNodeName = bs.readString();\n result.texture0 = bs.readString();\n result.texture1 = bs.readString();\n\n return result;\n}\n\n// ============================================================\n// CannedChatItem (game-specific, Tribes 2 only)\n// From Tribes 2 script reference: single readString (chatText)\n// ============================================================\n\nfunction cannedChatItemUnpack(bs: BitStream): CannedChatItemDataBlock {\n return { chatText: bs.readString() };\n}\n\n// ============================================================\n// MissionMarkerData (extends ShapeBaseData — no additional fields)\n// ============================================================\n\nfunction missionMarkerDataUnpack(bs: BitStream): MissionMarkerDataBlock {\n return shapeBaseDataUnpack(bs);\n}\n\n// ============================================================\n// GameBaseData (extends SimDataBlock — 0 bits on wire)\n// ============================================================\n\nfunction gameBaseDataUnpack(_bs: BitStream): GameBaseDataBlock {\n return {};\n}\n\n// ============================================================\n// SimDataBlock — 0 bits on wire (base class)\n// ============================================================\n\nfunction simDataBlockUnpack(_bs: BitStream): SimDataBlock {\n return {};\n}\n\n// ============================================================\n// TSShapeConstructor (extends SimDataBlock)\n// readString(shape) + readInt(7) count + count × readString\n// NumSequenceBits = 7\n// ============================================================\n\nfunction tsShapeConstructorUnpack(bs: BitStream): TSShapeConstructorDataBlock {\n const result: TSShapeConstructorDataBlock = {};\n result.shape = bs.readString();\n const count = bs.readInt(7);\n const sequences: string[] = [];\n for (let i = 0; i < count && i < 128; i++) {\n sequences.push(bs.readString());\n }\n result.sequences = sequences;\n return result;\n}\n\n// ============================================================\n// EffectProfile (classId 139)\n// From decompiled binary FUN_0050dde0.\n// Parent: SimDataBlock (no-op)\n// ============================================================\n\nfunction effectProfileUnpack(bs: BitStream): EffectProfileDataBlock {\n const result: EffectProfileDataBlock = {};\n result.minDistance = bs.readF32(); // 0x40\n result.maxDistance = bs.readF32(); // 0x44\n result.audioScale = bs.readF32(); // 0x48\n result.directional = readBool(bs); // 0x4c, _read(1) = 8-bit bool\n result.effectName = bs.readString(); // 0x3c\n return result;\n}\n\n// ============================================================\n// JetEffectData (classId 150)\n// From decompiled binary FUN_0069fe60.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction jetEffectDataUnpack(bs: BitStream): JetEffectDataBlock {\n const result: JetEffectDataBlock = {};\n result.coolColor = readColorF(bs); // 0x44, FUN_0043f040 = packed 4×U8\n result.hotColor = readColorF(bs); // 0x54, FUN_0043f040 = packed 4×U8\n result.activateTime = bs.readF32(); // 0x64\n result.deactivateTime = bs.readF32(); // 0x68\n result.length = bs.readF32(); // 0x6c\n result.width = bs.readF32(); // 0x70\n result.speed = bs.readF32(); // 0x74\n result.stretch = bs.readF32(); // 0x78\n result.yOffset = bs.readF32(); // 0x7c\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x80\n }\n return result;\n}\n\n// ============================================================\n// RunningLightData (classId 162)\n// From decompiled binary FUN_006a0af0.\n// Parent: GameBaseData → SimDataBlock (no-op chain)\n// ============================================================\n\nfunction runningLightDataUnpack(bs: BitStream): RunningLightDataBlock {\n const result: RunningLightDataBlock = {};\n result.radius = bs.readF32(); // 0x48\n result.color = readColorF(bs); // 0x4c, FUN_0043f040 = packed 4×U8\n result.type = bs.readF32(); // 0x44, stored as F32 (bool/int on wire)\n result.length = bs.readF32(); // 0x78\n result.nodeName = bs.readString(); // 0x5c\n result.direction = {\n // 0x60-0x68\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n result.offset = {\n // 0x6c-0x74\n x: bs.readF32(),\n y: bs.readF32(),\n z: bs.readF32(),\n };\n // texture[0]: loop of 1 iteration, flag + conditional string\n if (bs.readFlag()) {\n result.texture = bs.readString(); // 0x7c\n }\n return result;\n}\n\n// ============================================================\n// Registration\n// ============================================================\n\nexport function registerDataBlockParsers(registry: ClassRegistry): void {\n // Base types\n registry.catalogDataBlock({\n name: \"ShapeBaseData\",\n unpackData: shapeBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShapeBaseImageData\",\n unpackData: shapeBaseImageDataUnpack,\n });\n\n // Player/Vehicle types\n registry.catalogDataBlock({\n name: \"PlayerData\",\n unpackData: playerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"VehicleData\",\n unpackData: vehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlyingVehicleData\",\n unpackData: flyingVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"HoverVehicleData\",\n unpackData: hoverVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"WheeledVehicleData\",\n unpackData: wheeledVehicleDataUnpack,\n });\n\n // Static/Turret types\n registry.catalogDataBlock({\n name: \"StaticShapeData\",\n unpackData: staticShapeDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TurretData\",\n unpackData: turretDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TurretImageData\",\n unpackData: turretImageDataUnpack,\n });\n\n // Item\n registry.catalogDataBlock({ name: \"ItemData\", unpackData: itemDataUnpack });\n\n // Projectile types\n registry.catalogDataBlock({\n name: \"ProjectileData\",\n unpackData: projectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearProjectileData\",\n unpackData: linearProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GrenadeProjectileData\",\n unpackData: grenadeProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SeekerProjectileData\",\n unpackData: seekerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SniperProjectileData\",\n unpackData: sniperProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockLanceProjectileData\",\n unpackData: shockLanceProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ELFProjectileData\",\n unpackData: elfProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RepairProjectileData\",\n unpackData: repairProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TargetProjectileData\",\n unpackData: targetProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TracerProjectileData\",\n unpackData: tracerProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"EnergyProjectileData\",\n unpackData: energyProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LinearFlareProjectileData\",\n unpackData: linearFlareProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"BombProjectileData\",\n unpackData: bombProjectileDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FlareProjectileData\",\n unpackData: flareProjectileDataUnpack,\n });\n\n // Effects\n registry.catalogDataBlock({\n name: \"ExplosionData\",\n unpackData: explosionDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"DebrisData\",\n unpackData: debrisDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SplashData\",\n unpackData: splashDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ShockwaveData\",\n unpackData: shockwaveDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmitterData\",\n unpackData: particleEmitterDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleData\",\n unpackData: particleDataUnpack,\n });\n\n // Audio\n registry.catalogDataBlock({\n name: \"AudioDescription\",\n unpackData: audioDescriptionUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioProfile\",\n unpackData: audioProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioEnvironment\",\n unpackData: audioEnvironmentUnpack,\n });\n registry.catalogDataBlock({\n name: \"AudioSampleEnvironment\",\n unpackData: audioSampleEnvironmentUnpack,\n });\n\n // Misc\n registry.catalogDataBlock({ name: \"DecalData\", unpackData: decalDataUnpack });\n registry.catalogDataBlock({\n name: \"CameraData\",\n unpackData: cameraDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SensorData\",\n unpackData: sensorDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"TriggerData\",\n unpackData: triggerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ForceFieldBareData\",\n unpackData: forceFieldBareDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"ParticleEmissionDummyData\",\n unpackData: particleEmissionDummyDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"CommanderIconData\",\n unpackData: commanderIconDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"PrecipitationData\",\n unpackData: precipitationDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"FireballAtmosphereData\",\n unpackData: fireballAtmosphereDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"LightningData\",\n unpackData: lightningDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXVehicleData\",\n unpackData: stationFXVehicleDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"StationFXPersonalData\",\n unpackData: stationFXPersonalDataUnpack,\n });\n\n // Classes added from game-specific analysis\n registry.catalogDataBlock({\n name: \"CannedChatItem\",\n unpackData: cannedChatItemUnpack,\n });\n registry.catalogDataBlock({\n name: \"MissionMarkerData\",\n unpackData: missionMarkerDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"GameBaseData\",\n unpackData: gameBaseDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"SimDataBlock\",\n unpackData: simDataBlockUnpack,\n });\n registry.catalogDataBlock({\n name: \"TSShapeConstructor\",\n unpackData: tsShapeConstructorUnpack,\n });\n\n // Previously missing parsers (verified against decompiled binary)\n registry.catalogDataBlock({\n name: \"EffectProfile\",\n unpackData: effectProfileUnpack,\n });\n registry.catalogDataBlock({\n name: \"JetEffectData\",\n unpackData: jetEffectDataUnpack,\n });\n registry.catalogDataBlock({\n name: \"RunningLightData\",\n unpackData: runningLightDataUnpack,\n });\n}\n"]}