@elite-dangerous-almanac/core 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROVENANCE/ships/SOURCES.md +12 -3
- package/dist/chunk-2OBUSQA7.js +1 -0
- package/dist/chunk-2OBUSQA7.js.map +1 -0
- package/dist/{chunk-AGRSIKNV.js → chunk-3NPVWPOV.js} +1 -1
- package/dist/{chunk-AGRSIKNV.js.map → chunk-3NPVWPOV.js.map} +1 -1
- package/dist/chunk-5QSCLEEB.js +1 -0
- package/dist/chunk-5QSCLEEB.js.map +1 -0
- package/dist/chunk-5VBB5CTV.js +1 -0
- package/dist/chunk-5VBB5CTV.js.map +1 -0
- package/dist/{chunk-4TFAZX73.js → chunk-773VO2GK.js} +1 -1
- package/dist/chunk-EFQOUATZ.js +1 -0
- package/dist/chunk-EFQOUATZ.js.map +1 -0
- package/dist/{chunk-3LZXB2MC.js → chunk-HBQELOBY.js} +1 -1
- package/dist/{chunk-CHA6LKH4.js → chunk-J4PCK4RV.js} +1 -1
- package/dist/chunk-J4PCK4RV.js.map +1 -0
- package/dist/{chunk-7ZERP4TB.js → chunk-WR6ZFHTO.js} +1 -1
- package/dist/chunk-XM4VA2WE.js +1 -0
- package/dist/chunk-XM4VA2WE.js.map +1 -0
- package/dist/{chunk-MTJ4MS7W.js → chunk-YCGISPDR.js} +1 -1
- package/dist/equipment/index.js +1 -1
- package/dist/equipment/upgrade-costs.js +1 -1
- package/dist/equipment/upgrade-costs.js.map +1 -1
- package/dist/ships/blueprint-costs.js +1 -1
- package/dist/ships/build-metrics.js +1 -1
- package/dist/ships/engineering.js +1 -1
- package/dist/ships/index.js +1 -1
- package/dist/ships/modules-all.js +1 -1
- package/dist/ships/modules-hardpoint.js +1 -1
- package/dist/ships/modules.js +1 -1
- package/dist/ships/pre-engineered-stats.d.ts +8 -1
- package/dist/ships/pre-engineered-stats.js +1 -1
- package/dist/ships/ship-loadout.d.ts +15 -6
- package/dist/ships/ship-loadout.js +1 -1
- package/dist/ships/weapons.d.ts +14 -4
- package/dist/ships/weapons.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-37JIMWLK.js +0 -1
- package/dist/chunk-37JIMWLK.js.map +0 -1
- package/dist/chunk-6IWKFKQF.js +0 -1
- package/dist/chunk-6IWKFKQF.js.map +0 -1
- package/dist/chunk-CHA6LKH4.js.map +0 -1
- package/dist/chunk-CJQ37JII.js +0 -1
- package/dist/chunk-CJQ37JII.js.map +0 -1
- package/dist/chunk-DABPLBTN.js +0 -1
- package/dist/chunk-DABPLBTN.js.map +0 -1
- /package/dist/{chunk-4TFAZX73.js.map → chunk-773VO2GK.js.map} +0 -0
- /package/dist/{chunk-3LZXB2MC.js.map → chunk-HBQELOBY.js.map} +0 -0
- /package/dist/{chunk-7ZERP4TB.js.map → chunk-WR6ZFHTO.js.map} +0 -0
- /package/dist/{chunk-MTJ4MS7W.js.map → chunk-YCGISPDR.js.map} +0 -0
|
@@ -493,7 +493,16 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
|
|
|
493
493
|
every other record remains an omitted sparse field.
|
|
494
494
|
- **`rateOfFire` is derived, not copied.** Upstream stores the fire interval; the
|
|
495
495
|
journal (and this catalogue) report the combined shots per second, so it is
|
|
496
|
-
computed as `burst / ((burst − 1) / burstRateOfFire + fireInterval)
|
|
496
|
+
computed as `burst / ((burst − 1) / burstRateOfFire + fireInterval)` — with a float32
|
|
497
|
+
stored after every operation and the result written to six decimal places, which is
|
|
498
|
+
how the game computes and serializes it. The float matters on three records, where
|
|
499
|
+
exact arithmetic lands one place away: a capture is what settles it, and
|
|
500
|
+
`journal-cobra-mkv.jsonc` states a stock `RateOfFire` of 8.333334 for the small
|
|
501
|
+
gimballed multi-cannon, whose 0.12 s interval gives 8.333333 exactly and 8.333334
|
|
502
|
+
through the float. `Hpt_Slugshot_Fixed_Small` (5.555555) and
|
|
503
|
+
`Hpt_MkIIPlasmaShockAutocannon_Fixed_Large` (7.844017) follow the same rule; no
|
|
504
|
+
capture states either, so they are the derivation the multi-cannon vindicates rather
|
|
505
|
+
than observed readings. Coriolis
|
|
497
506
|
(`Module.getRoF`) and EDSY (`rof = fpc / spc`) also fold `chargeTime` into this
|
|
498
507
|
figure, but Frontier does not: `journal-federation-corvette-mixed.jsonc` states
|
|
499
508
|
`RateOfFire` base values of 1.587302 for the small rail gun and 1.204819 for the
|
|
@@ -1913,8 +1922,8 @@ up straight through with no disambiguation at all. Both paths are evidence that
|
|
|
1913
1922
|
itself.
|
|
1914
1923
|
- **Burst interval has to be added to the decoder's output by hand.** EDSY carries no
|
|
1915
1924
|
journal Label for `bstint` — the journal reports the resulting `RateOfFire`, never the
|
|
1916
|
-
interval it comes from — so a straight decode drops it, leaving the 13 variants
|
|
1917
|
-
|
|
1925
|
+
interval it comes from — so a straight decode drops it, leaving the 13 variants whose
|
|
1926
|
+
stat block changes a burst pattern on the _stock_ cadence, and four of them (the two frag cannons
|
|
1918
1927
|
and the two Guardian gauss cannons) inconsistent as well as slow, carrying the
|
|
1919
1928
|
engineered `BurstSize` — and, on the gauss cannons, the engineered `BurstRateOfFire` —
|
|
1920
1929
|
against a stock interval. All 13 are stored under **`BurstInterval`**, the same label
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{journalRateOfFire}from"./chunk-EFQOUATZ.js";import{requireFiniteNonNegative}from"./chunk-65FZECUX.js";function combinedRateOfFire(weapon){return journalRateOfFire(weapon.burstInterval,weapon.burstRounds,weapon.burstRateOfFire)}var ZERO_SPLIT={kinetic:0,thermal:0,explosive:0,absolute:0,antiXeno:0};function splitDamage(damage,distribution){if(!distribution)return Object.freeze({...ZERO_SPLIT,absolute:damage});return Object.freeze({kinetic:damage*(distribution.kinetic??0),thermal:damage*(distribution.thermal??0),explosive:damage*(distribution.explosive??0),absolute:damage*(distribution.absolute??0),...(distribution.unclassified??0)===0?{}:{unclassified:damage*distribution.unclassified},antiXeno:damage*(distribution.antiXeno??0)})}function splitComponents(damage,components){const unclassified=(components.unclassified??[]).reduce((sum,value)=>sum+value,0);const conventional=(components.kinetic??0)+(components.thermal??0)+(components.explosive??0)+(components.absolute??0)+unclassified;if(conventional<=0)return Object.freeze({...ZERO_SPLIT,absolute:damage});const scale=damage/conventional;return Object.freeze({kinetic:(components.kinetic??0)*scale,thermal:(components.thermal??0)*scale,explosive:(components.explosive??0)*scale,absolute:(components.absolute??0)*scale,...unclassified===0?{}:{unclassified:unclassified*scale},antiXeno:(components.antiXeno??0)*scale})}function sustainedFireFactor(weapon){const rateOfFire=weapon.rateOfFire;const clip=weapon.clipSize===void 0?void 0:Math.ceil(weapon.clipSize);if(!rateOfFire||!clip||clip<=0)return 1;const burst=weapon.burstRounds&&weapon.burstRounds>0?weapon.burstRounds:1;const burstRate=weapon.burstRateOfFire&&weapon.burstRateOfFire>0?weapon.burstRateOfFire:1;const reload=weapon.reloadTime??0;const cycle=(clip-burst)/rateOfFire+(burst-1)/burstRate+reload;if(cycle<=0)return 1;const sustainedRate=clip/cycle;return Math.min(1,sustainedRate/rateOfFire)}function damagePerSecond(weapon){const damage=weapon.damage??0;const rounds=weapon.roundsPerShot&&weapon.roundsPerShot>0?weapon.roundsPerShot:1;return damage*rounds*(weapon.rateOfFire??1)}function sustainedDamagePerSecond(weapon){return damagePerSecond(weapon)*sustainedFireFactor(weapon)}function energyPerSecond(weapon){return(weapon.distributorDraw??0)*(weapon.rateOfFire??1)}function heatPerSecond(weapon){return(weapon.thermalLoad??0)*(weapon.rateOfFire??1)}function damageFalloff(weapon,metres){const maximum=weapon.maximumRange;if(maximum!==void 0&&metres>maximum)return 0;const falloff=weapon.falloffRange;if(falloff===void 0||maximum===void 0||metres<=falloff)return 1;const taper=maximum-falloff;if(taper<=0)return 1;return Math.max(0,1-(metres-falloff)/taper)}function armourPiercingFactor(armourPiercing,hardness){requireFiniteNonNegative("armourPiercingFactor","armour piercing",armourPiercing);requireFiniteNonNegative("armourPiercingFactor","hardness",hardness);if(hardness===0)return 1;return Math.min(1,armourPiercing/hardness)}function weaponMetrics(weapon){const continuous=weapon.rateOfFire===void 0;const rateOfFire=weapon.rateOfFire??1;const factor=sustainedFireFactor(weapon);const dps=damagePerSecond(weapon);const sdps=dps*factor;const eps=energyPerSecond(weapon);const hps=heatPerSecond(weapon);const rounds=weapon.roundsPerShot&&weapon.roundsPerShot>0?weapon.roundsPerShot:1;return Object.freeze({damagePerShot:(weapon.damage??0)*rounds,rateOfFire:rateOfFire,sustainedRateOfFire:rateOfFire*factor,damagePerSecond:dps,sustainedDamagePerSecond:sdps,energyPerSecond:eps,sustainedEnergyPerSecond:eps*factor,heatPerSecond:hps,sustainedHeatPerSecond:hps*factor,thermalLoad:weapon.thermalLoad??0,powerDraw:weapon.powerDraw??0,damageByType:weapon.damageComponents?splitComponents(dps,weapon.damageComponents):splitDamage(dps,weapon.damageDistribution),sustainedDamageByType:weapon.damageComponents?splitComponents(sdps,weapon.damageComponents):splitDamage(sdps,weapon.damageDistribution),continuous:continuous})}function sumWeaponMetrics(metrics){const damageByType=emptyDamageSplitAccumulator();const sustainedDamageByType=emptyDamageSplitAccumulator();let damagePerSecond2=0;let sustainedDamagePerSecond2=0;let energyPerSecond2=0;let sustainedEnergyPerSecond=0;let heatPerSecond2=0;let sustainedHeatPerSecond=0;let thermalLoad=0;let powerDraw=0;for(const metric of metrics){damagePerSecond2+=metric.damagePerSecond;sustainedDamagePerSecond2+=metric.sustainedDamagePerSecond;energyPerSecond2+=metric.energyPerSecond;sustainedEnergyPerSecond+=metric.sustainedEnergyPerSecond;heatPerSecond2+=metric.heatPerSecond;sustainedHeatPerSecond+=metric.sustainedHeatPerSecond;thermalLoad+=metric.thermalLoad;powerDraw+=metric.powerDraw;addDamageSplit(damageByType,metric.damageByType);addDamageSplit(sustainedDamageByType,metric.sustainedDamageByType)}return Object.freeze({damagePerSecond:damagePerSecond2,sustainedDamagePerSecond:sustainedDamagePerSecond2,energyPerSecond:energyPerSecond2,sustainedEnergyPerSecond:sustainedEnergyPerSecond,heatPerSecond:heatPerSecond2,sustainedHeatPerSecond:sustainedHeatPerSecond,thermalLoad:thermalLoad,powerDraw:powerDraw,damageByType:finishDamageSplit(damageByType),sustainedDamageByType:finishDamageSplit(sustainedDamageByType)})}function emptyDamageSplitAccumulator(){return{kinetic:0,thermal:0,explosive:0,absolute:0,unclassified:0,antiXeno:0}}function addDamageSplit(total,split){total.kinetic+=split.kinetic;total.thermal+=split.thermal;total.explosive+=split.explosive;total.absolute+=split.absolute;total.unclassified+=split.unclassified??0;total.antiXeno+=split.antiXeno}function finishDamageSplit(total){const{unclassified:unclassified,...classified}=total;return Object.freeze(unclassified===0?classified:{...classified,unclassified:unclassified})}export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics};//# sourceMappingURL=chunk-2OBUSQA7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/weapons.ts"],"names":["journalRateOfFire","requireFiniteNonNegative","combinedRateOfFire","weapon","burstInterval","burstRounds","burstRateOfFire","ZERO_SPLIT","kinetic","thermal","explosive","absolute","antiXeno","splitDamage","damage","distribution","Object","freeze","unclassified","splitComponents","components","reduce","sum","value","conventional","scale","sustainedFireFactor","rateOfFire","clip","clipSize","Math","ceil","burst","burstRate","reload","reloadTime","cycle","sustainedRate","min","damagePerSecond","rounds","roundsPerShot","sustainedDamagePerSecond","energyPerSecond","distributorDraw","heatPerSecond","thermalLoad","damageFalloff","metres","maximum","maximumRange","falloff","falloffRange","taper","max","armourPiercingFactor","armourPiercing","hardness","weaponMetrics","continuous","factor","dps","sdps","eps","hps","damagePerShot","sustainedRateOfFire","sustainedEnergyPerSecond","sustainedHeatPerSecond","powerDraw","damageByType","damageComponents","damageDistribution","sustainedDamageByType","sumWeaponMetrics","metrics","emptyDamageSplitAccumulator","metric","addDamageSplit","finishDamageSplit","total","split","classified"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{cellBankSummary,shieldRecovery}from"./chunk-JMAXSXXQ.js";import{loadoutInternals,fittedThrusterParamsFor,preEngineeredVariantFor,powerConsumerFor,powerAvailable,heatInputResultFor,completeResult,cellBankInputsFor,armourInputFor,weaponStatsFor,weaponsCapacitorInputFor,mobilityInputResultFor,shieldInputResultFor,shieldCapacitorInputResultFor,shieldRecoveryInputResultFor,distributorInputResultFor,incompleteResult}from"./chunk-6IWKFKQF.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{weaponsCapacitorMetrics}from"./chunk-M4FZRDAH.js";import{powerBudget}from"./chunk-GGQMIQPC.js";import{isNonOutfittingSlot,isBuiltInHullModule,orderBySlotLayout}from"./chunk-DABPLBTN.js";import{weaponMetrics,sumWeaponMetrics}from"./chunk-37JIMWLK.js";import{shieldCapacitorMetrics}from"./chunk-XQJERZUS.js";import{mobilityCapacitorMetrics}from"./chunk-VEEBJFJ7.js";import{mobilityMetrics}from"./chunk-A4QKXXZD.js";import{getExperimentalEffectCost}from"./chunk-CJK2IBI2.js";import{heatMetrics}from"./chunk-6HA2YIKW.js";import{frameShiftDriveMassFactor,singleJumpRange,fuelPerJump,totalRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass}from"./chunk-DCB4COCL.js";import{getBlueprintCost}from"./chunk-MTJ4MS7W.js";import{distributorMetrics}from"./chunk-M2TCZKRT.js";import{sumMaterials}from"./chunk-CJQ37JII.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-Q5ALV3DI.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var FACADE="BuildMetrics";function requireLoadOptions(scope,options){for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0)requireFiniteNonNegative(scope,field,value)}}var BuildMetrics=class _BuildMetrics{#build;#state;constructor(build,state){this.#build=build;this.#state=state}static of(build){return new _BuildMetrics(build,loadoutInternals(build,`${FACADE}.of: build`))}loadout(){return this.#build}frameShiftDrive(){const drive=this.#state.resolveDrive();if(drive===null){throw new TypeError(`${FACADE}: build has no frame shift drive`)}return drive}thrusters(){return fittedThrusterParamsFor(this.#state.modules(),this.#state.statsFor)}frameShiftDriveMassFactor(options={}){requireLoadOptions(`${FACADE}.frameShiftDriveMassFactor`,options);return frameShiftDriveMassFactor(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}maxJumpRange(){const fsd=this.frameShiftDrive();return singleJumpRange(this.#loadedMass(0),this.#maxJumpFuel(fsd),fsd)}jumpRange(options={}){requireLoadOptions(`${FACADE}.jumpRange`,options);return singleJumpRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}ladenJumpRange(){return this.jumpRange({cargo:this.#build.cargoCapacity})}fuelPerJump(distance,options={}){requireLoadOptions(`${FACADE}.fuelPerJump`,options);return fuelPerJump(distance,this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}totalRange(options={}){requireLoadOptions(`${FACADE}.totalRange`,options);return totalRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}standardLoadResult(load){return this.#standardLoad(load)}jumpRangeSummary(){const maximum=this.#require(this.standardLoadResult("maximum"),"maximum load");const unladen=this.#require(this.standardLoadResult("unladen"),"unladen load");const laden=this.#require(this.standardLoadResult("laden"),"laden load");return{max:this.jumpRange(maximum),unladen:this.jumpRange(unladen),laden:this.jumpRange(laden),totalMax:this.totalRange(maximum),totalUnladen:this.totalRange(unladen),totalLaden:this.totalRange(laden)}}buildMass(options={}){requireLoadOptions(`${FACADE}.buildMass`,options);const unladen=this.#build.unladenMass;const fuel=options.fuel??this.#build.fuelCapacity.main;const cargo=options.cargo??0;return Object.freeze({hull:this.#state.ship.hullMass,modules:calculateUnladenMass(0,this.#state.calculationModules()),unladen:unladen,fuel:fuel,cargo:cargo,total:unladen+fuel+cargo})}buildCost(){const hull=this.#state.ship.hullCost;let modules=0;let mercCoins=0;const unpriced=[];const materials=[];for(const module of this.#state.modules()){const stats=this.#state.statsFor(module);if(stats?.cost!==void 0){modules+=stats.cost}else if(stats!==null||!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module)){unpriced.push({slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);mercCoins+=variant?.mercCoinCost??0;const engineering=module.Engineering;if(!engineering)continue;const grade=engineering.Level;const bought=variant?.grade??0;if(Number.isInteger(grade)&&grade>bought&&grade<=5){const climb=getBlueprintCost(engineering.BlueprintName,grade,bought);if(climb){materials.push(climb.materials);mercCoins+=climb.mercCoins}}const experimental=engineering.ExperimentalEffect;if(experimental!==void 0&&experimental.toLowerCase()!==variant?.experimentalEffectSymbol?.toLowerCase()){const cost=getExperimentalEffectCost(experimental);if(cost)materials.push(cost)}}return deepFreeze({credits:{total:hull+modules,hull:hull,modules:modules,rebuy:Math.trunc((hull+modules)*.05),unpriced:unpriced},mercCoins:mercCoins,materials:sumMaterials(...materials)})}powerBudget(){const modules=this.#state.modules();const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#state.statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,this.#state.statsFor),consumers)}heatMetricsResult(){const input=heatInputResultFor(this.#state.ship,this.#state.effectiveModules(),this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(heatMetrics(input.value)):input}mobilityMetricsResult(options={}){return this.#mobility(options)}mobilityCapacitorMetricsResult(options={}){return this.#mobilityCapacitor(options)}shieldMetricsResult(){return this.#shields()}shieldCapacitorMetricsResult(options={}){return this.#shieldCapacitor(options)}shieldRecoveryResult(options={}){return this.#recovery(options)}cellBanks(){return cellBankSummary(orderBySlotLayout(cellBankInputsFor(this.#state.modules(),this.powerBudget(),this.#state.statsFor),this.#state.layout(),bank=>bank.slot))}armourMetrics(){return armourMetrics(armourInputFor(this.#state.ship,this.#state.modules(),this.#state.statsFor))}weaponMetrics(){const weapons=[];for(const module of this.#state.modules()){const record=this.#state.statsFor(module);const stats=weaponStatsFor(this.#state.effectiveModule(module),record);if(!stats)continue;weapons.push({slot:module.Slot,symbol:module.Item,name:record?.name??module.Item,enabled:module.On!==false,metrics:weaponMetrics(stats),ammunition:ammunitionCapacity(stats),...stats.maximumRange===void 0?{}:{maximumRange:stats.maximumRange},...stats.falloffRange===void 0?{}:{falloffRange:stats.falloffRange},...stats.projectileRange===void 0?{}:{projectileRange:{...stats.projectileRange}},...stats.armourPiercing===void 0?{}:{armourPiercing:stats.armourPiercing}})}const orderedWeapons=orderBySlotLayout(weapons,this.#state.layout(),weapon=>weapon.slot);return{weapons:orderedWeapons,total:sumWeaponMetrics(orderedWeapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=requirePips(`${FACADE}.weaponsCapacitorMetrics`,"weaponsPips",options.weaponsPips??4);return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#state.effectiveModules(),weaponsPips,this.powerBudget(),this.#state.statsFor))}distributorMetricsResult(options={}){return this.#distributor(options)}#mobility(options){const input=this.#mobilityInput(`${FACADE}.mobilityMetricsResult`,options);return input.complete?completeResult(mobilityMetrics(input.value)):input}#mobilityCapacitor(options){const scope=`${FACADE}.mobilityCapacitorMetricsResult`;const enginesPips=requirePips(scope,"enginesPips",options.enginesPips??4);const input=this.#mobilityInput(scope,options);return input.complete?completeResult(mobilityCapacitorMetrics({...input.value,enginesPips:enginesPips})):input}#mobilityInput(scope,options){requireLoadOptions(scope,options);return mobilityInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),()=>this.#loadedMass(options.cargo??0)+(options.fuel??this.#state.statedMainFuel()??this.#build.fuelCapacity.main),this.#state.statsFor)}#shields(){const input=shieldInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(shieldMetrics(input.value)):input}#shieldCapacitor(options){const systemsPips=requirePips(`${FACADE}.shieldCapacitorMetricsResult`,"systemsPips",options.systemsPips??4);const input=shieldCapacitorInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldCapacitorMetrics(input.value)):input}#recovery(options){const systemsPips=requirePips(`${FACADE}.shieldRecoveryResult`,"systemsPips",options.systemsPips??4);const input=shieldRecoveryInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldRecovery(input.value)):input}#distributor(options){const scope=`${FACADE}.distributorMetricsResult`;const pips={systemsPips:requirePips(scope,"systemsPips",options.systemsPips??4),enginesPips:requirePips(scope,"enginesPips",options.enginesPips??4),weaponsPips:requirePips(scope,"weaponsPips",options.weaponsPips??4)};const input=distributorInputResultFor(this.#state.effectiveModules(),pips,this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(distributorMetrics(input.value)):input}#standardLoad(load){if(load!=="maximum"&&load!=="unladen"&&load!=="laden"){throw new RangeError(`${FACADE}.standardLoadResult: load must be 'maximum', 'unladen', or 'laden'`)}const fuel=this.#build.fuelCapacity;const cargo=load==="laden"?this.#build.cargoCapacity:0;const mass=load==="maximum"?this.#build.unladenMass:0;let drive=null;let maximumFuel=null;if(load==="maximum"){const fitted=this.#state.frameShiftDriveModule();let driveError=null;try{drive=this.#state.resolveDrive();maximumFuel=drive?.maxFuel??null}catch(error){if(!(error instanceof Error))throw error;driveError=error}if(maximumFuel===null){return incompleteResult([{field:"frameShiftDrive",reason:fitted?"unresolved":"missing",slot:fitted?.Slot??"FrameShiftDrive",...fitted?{symbol:fitted.Item}:{},message:driveError?.message??"FrameShiftDrive: no frame shift drive is fitted",params:fitted?{field:"frameShiftDrive",reason:"unresolved",slot:fitted.Slot,symbol:fitted.Item}:{field:"frameShiftDrive",reason:"missing",slot:"FrameShiftDrive"}}])}}const carriedFuel=load==="maximum"?Math.min(fuel.main,maximumFuel):fuel.main;const value=Object.freeze({fuel:carriedFuel,cargo:cargo,mass:this.#build.unladenMass+carriedFuel+cargo});if(load==="maximum"){try{this.jumpRange(value)}catch(error){if(!(error instanceof RangeError))throw error;const fitted=this.#state.frameShiftDriveModule();const field=drive!==null&&(!Number.isFinite(drive.maxFuel)||drive.maxFuel<0)?"frameShiftDrive":!Number.isFinite(value.fuel)||value.fuel<0?"fuelCapacity":!Number.isFinite(mass)||mass<0?"mass":"frameShiftDrive";const driveParams=field==="frameShiftDrive"&&fitted?{slot:fitted.Slot,symbol:fitted.Item}:{};return incompleteResult([{field:field,reason:"invalid",...driveParams,message:error.message,params:{field:field,reason:"invalid",...driveParams}}])}}return completeResult(value)}#require(result,what){if(result.value===null){throw new TypeError(`${FACADE}: cannot determine ${what} (${result.issues.map(issue=>issue.message).join("; ")})`)}return result.value}#loadedMass(cargo){return this.#build.unladenMass+cargo}#maxJumpFuel(fsd){return Math.min(this.#build.fuelCapacity.main,fsd.maxFuel)}};export{BuildMetrics};//# sourceMappingURL=chunk-AGRSIKNV.js.map
|
|
1
|
+
import{cellBankSummary,shieldRecovery}from"./chunk-JMAXSXXQ.js";import{loadoutInternals,fittedThrusterParamsFor,preEngineeredVariantFor,powerConsumerFor,powerAvailable,heatInputResultFor,completeResult,cellBankInputsFor,armourInputFor,weaponStatsFor,weaponsCapacitorInputFor,mobilityInputResultFor,shieldInputResultFor,shieldCapacitorInputResultFor,shieldRecoveryInputResultFor,distributorInputResultFor,incompleteResult}from"./chunk-5VBB5CTV.js";import{weaponMetrics,sumWeaponMetrics}from"./chunk-2OBUSQA7.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{weaponsCapacitorMetrics}from"./chunk-M4FZRDAH.js";import{powerBudget}from"./chunk-GGQMIQPC.js";import{isNonOutfittingSlot,isBuiltInHullModule,orderBySlotLayout}from"./chunk-XM4VA2WE.js";import{shieldCapacitorMetrics}from"./chunk-XQJERZUS.js";import{mobilityCapacitorMetrics}from"./chunk-VEEBJFJ7.js";import{mobilityMetrics}from"./chunk-A4QKXXZD.js";import{getExperimentalEffectCost}from"./chunk-CJK2IBI2.js";import{heatMetrics}from"./chunk-6HA2YIKW.js";import{frameShiftDriveMassFactor,singleJumpRange,fuelPerJump,totalRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass}from"./chunk-DCB4COCL.js";import{getBlueprintCost}from"./chunk-YCGISPDR.js";import{distributorMetrics}from"./chunk-M2TCZKRT.js";import{sumMaterials}from"./chunk-5QSCLEEB.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-Q5ALV3DI.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var FACADE="BuildMetrics";function requireLoadOptions(scope,options){for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0)requireFiniteNonNegative(scope,field,value)}}var BuildMetrics=class _BuildMetrics{#build;#state;constructor(build,state){this.#build=build;this.#state=state}static of(build){return new _BuildMetrics(build,loadoutInternals(build,`${FACADE}.of: build`))}loadout(){return this.#build}frameShiftDrive(){const drive=this.#state.resolveDrive();if(drive===null){throw new TypeError(`${FACADE}: build has no frame shift drive`)}return drive}thrusters(){return fittedThrusterParamsFor(this.#state.modules(),this.#state.statsFor)}frameShiftDriveMassFactor(options={}){requireLoadOptions(`${FACADE}.frameShiftDriveMassFactor`,options);return frameShiftDriveMassFactor(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}maxJumpRange(){const fsd=this.frameShiftDrive();return singleJumpRange(this.#loadedMass(0),this.#maxJumpFuel(fsd),fsd)}jumpRange(options={}){requireLoadOptions(`${FACADE}.jumpRange`,options);return singleJumpRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}ladenJumpRange(){return this.jumpRange({cargo:this.#build.cargoCapacity})}fuelPerJump(distance,options={}){requireLoadOptions(`${FACADE}.fuelPerJump`,options);return fuelPerJump(distance,this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}totalRange(options={}){requireLoadOptions(`${FACADE}.totalRange`,options);return totalRange(this.#loadedMass(options.cargo??0),options.fuel??this.#build.fuelCapacity.main,this.frameShiftDrive())}standardLoadResult(load){return this.#standardLoad(load)}jumpRangeSummary(){const maximum=this.#require(this.standardLoadResult("maximum"),"maximum load");const unladen=this.#require(this.standardLoadResult("unladen"),"unladen load");const laden=this.#require(this.standardLoadResult("laden"),"laden load");return{max:this.jumpRange(maximum),unladen:this.jumpRange(unladen),laden:this.jumpRange(laden),totalMax:this.totalRange(maximum),totalUnladen:this.totalRange(unladen),totalLaden:this.totalRange(laden)}}buildMass(options={}){requireLoadOptions(`${FACADE}.buildMass`,options);const unladen=this.#build.unladenMass;const fuel=options.fuel??this.#build.fuelCapacity.main;const cargo=options.cargo??0;return Object.freeze({hull:this.#state.ship.hullMass,modules:calculateUnladenMass(0,this.#state.calculationModules()),unladen:unladen,fuel:fuel,cargo:cargo,total:unladen+fuel+cargo})}buildCost(){const hull=this.#state.ship.hullCost;let modules=0;let mercCoins=0;const unpriced=[];const materials=[];for(const module of this.#state.modules()){const stats=this.#state.statsFor(module);if(stats?.cost!==void 0){modules+=stats.cost}else if(stats!==null||!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module)){unpriced.push({slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);mercCoins+=variant?.mercCoinCost??0;const engineering=module.Engineering;if(!engineering)continue;const grade=engineering.Level;const bought=variant?.grade??0;if(Number.isInteger(grade)&&grade>bought&&grade<=5){const climb=getBlueprintCost(engineering.BlueprintName,grade,bought);if(climb){materials.push(climb.materials);mercCoins+=climb.mercCoins}}const experimental=engineering.ExperimentalEffect;if(experimental!==void 0&&experimental.toLowerCase()!==variant?.experimentalEffectSymbol?.toLowerCase()){const cost=getExperimentalEffectCost(experimental);if(cost)materials.push(cost)}}return deepFreeze({credits:{total:hull+modules,hull:hull,modules:modules,rebuy:Math.trunc((hull+modules)*.05),unpriced:unpriced},mercCoins:mercCoins,materials:sumMaterials(...materials)})}powerBudget(){const modules=this.#state.modules();const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#state.statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,this.#state.statsFor),consumers)}heatMetricsResult(){const input=heatInputResultFor(this.#state.ship,this.#state.effectiveModules(),this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(heatMetrics(input.value)):input}mobilityMetricsResult(options={}){return this.#mobility(options)}mobilityCapacitorMetricsResult(options={}){return this.#mobilityCapacitor(options)}shieldMetricsResult(){return this.#shields()}shieldCapacitorMetricsResult(options={}){return this.#shieldCapacitor(options)}shieldRecoveryResult(options={}){return this.#recovery(options)}cellBanks(){return cellBankSummary(orderBySlotLayout(cellBankInputsFor(this.#state.modules(),this.powerBudget(),this.#state.statsFor),this.#state.layout(),bank=>bank.slot))}armourMetrics(){return armourMetrics(armourInputFor(this.#state.ship,this.#state.modules(),this.#state.statsFor))}weaponMetrics(){const weapons=[];for(const module of this.#state.modules()){const record=this.#state.statsFor(module);const stats=weaponStatsFor(this.#state.effectiveModule(module),record);if(!stats)continue;weapons.push({slot:module.Slot,symbol:module.Item,name:record?.name??module.Item,enabled:module.On!==false,metrics:weaponMetrics(stats),ammunition:ammunitionCapacity(stats),...stats.maximumRange===void 0?{}:{maximumRange:stats.maximumRange},...stats.falloffRange===void 0?{}:{falloffRange:stats.falloffRange},...stats.projectileRange===void 0?{}:{projectileRange:{...stats.projectileRange}},...stats.armourPiercing===void 0?{}:{armourPiercing:stats.armourPiercing}})}const orderedWeapons=orderBySlotLayout(weapons,this.#state.layout(),weapon=>weapon.slot);return{weapons:orderedWeapons,total:sumWeaponMetrics(orderedWeapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=requirePips(`${FACADE}.weaponsCapacitorMetrics`,"weaponsPips",options.weaponsPips??4);return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#state.effectiveModules(),weaponsPips,this.powerBudget(),this.#state.statsFor))}distributorMetricsResult(options={}){return this.#distributor(options)}#mobility(options){const input=this.#mobilityInput(`${FACADE}.mobilityMetricsResult`,options);return input.complete?completeResult(mobilityMetrics(input.value)):input}#mobilityCapacitor(options){const scope=`${FACADE}.mobilityCapacitorMetricsResult`;const enginesPips=requirePips(scope,"enginesPips",options.enginesPips??4);const input=this.#mobilityInput(scope,options);return input.complete?completeResult(mobilityCapacitorMetrics({...input.value,enginesPips:enginesPips})):input}#mobilityInput(scope,options){requireLoadOptions(scope,options);return mobilityInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),()=>this.#loadedMass(options.cargo??0)+(options.fuel??this.#state.statedMainFuel()??this.#build.fuelCapacity.main),this.#state.statsFor)}#shields(){const input=shieldInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(shieldMetrics(input.value)):input}#shieldCapacitor(options){const systemsPips=requirePips(`${FACADE}.shieldCapacitorMetricsResult`,"systemsPips",options.systemsPips??4);const input=shieldCapacitorInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldCapacitorMetrics(input.value)):input}#recovery(options){const systemsPips=requirePips(`${FACADE}.shieldRecoveryResult`,"systemsPips",options.systemsPips??4);const input=shieldRecoveryInputResultFor(this.#state.ship,this.#state.modules(),()=>this.powerBudget(),systemsPips,this.#state.statsFor);return input.complete?completeResult(shieldRecovery(input.value)):input}#distributor(options){const scope=`${FACADE}.distributorMetricsResult`;const pips={systemsPips:requirePips(scope,"systemsPips",options.systemsPips??4),enginesPips:requirePips(scope,"enginesPips",options.enginesPips??4),weaponsPips:requirePips(scope,"weaponsPips",options.weaponsPips??4)};const input=distributorInputResultFor(this.#state.effectiveModules(),pips,this.powerBudget(),this.#state.statsFor);return input.complete?completeResult(distributorMetrics(input.value)):input}#standardLoad(load){if(load!=="maximum"&&load!=="unladen"&&load!=="laden"){throw new RangeError(`${FACADE}.standardLoadResult: load must be 'maximum', 'unladen', or 'laden'`)}const fuel=this.#build.fuelCapacity;const cargo=load==="laden"?this.#build.cargoCapacity:0;const mass=load==="maximum"?this.#build.unladenMass:0;let drive=null;let maximumFuel=null;if(load==="maximum"){const fitted=this.#state.frameShiftDriveModule();let driveError=null;try{drive=this.#state.resolveDrive();maximumFuel=drive?.maxFuel??null}catch(error){if(!(error instanceof Error))throw error;driveError=error}if(maximumFuel===null){return incompleteResult([{field:"frameShiftDrive",reason:fitted?"unresolved":"missing",slot:fitted?.Slot??"FrameShiftDrive",...fitted?{symbol:fitted.Item}:{},message:driveError?.message??"FrameShiftDrive: no frame shift drive is fitted",params:fitted?{field:"frameShiftDrive",reason:"unresolved",slot:fitted.Slot,symbol:fitted.Item}:{field:"frameShiftDrive",reason:"missing",slot:"FrameShiftDrive"}}])}}const carriedFuel=load==="maximum"?Math.min(fuel.main,maximumFuel):fuel.main;const value=Object.freeze({fuel:carriedFuel,cargo:cargo,mass:this.#build.unladenMass+carriedFuel+cargo});if(load==="maximum"){try{this.jumpRange(value)}catch(error){if(!(error instanceof RangeError))throw error;const fitted=this.#state.frameShiftDriveModule();const field=drive!==null&&(!Number.isFinite(drive.maxFuel)||drive.maxFuel<0)?"frameShiftDrive":!Number.isFinite(value.fuel)||value.fuel<0?"fuelCapacity":!Number.isFinite(mass)||mass<0?"mass":"frameShiftDrive";const driveParams=field==="frameShiftDrive"&&fitted?{slot:fitted.Slot,symbol:fitted.Item}:{};return incompleteResult([{field:field,reason:"invalid",...driveParams,message:error.message,params:{field:field,reason:"invalid",...driveParams}}])}}return completeResult(value)}#require(result,what){if(result.value===null){throw new TypeError(`${FACADE}: cannot determine ${what} (${result.issues.map(issue=>issue.message).join("; ")})`)}return result.value}#loadedMass(cargo){return this.#build.unladenMass+cargo}#maxJumpFuel(fsd){return Math.min(this.#build.fuelCapacity.main,fsd.maxFuel)}};export{BuildMetrics};//# sourceMappingURL=chunk-3NPVWPOV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ships/build-metrics.ts"],"names":["cellBankSummary","shieldRecovery","loadoutInternals","fittedThrusterParamsFor","preEngineeredVariantFor","powerConsumerFor","powerAvailable","heatInputResultFor","completeResult","cellBankInputsFor","armourInputFor","weaponStatsFor","weaponsCapacitorInputFor","mobilityInputResultFor","shieldInputResultFor","shieldCapacitorInputResultFor","shieldRecoveryInputResultFor","distributorInputResultFor","incompleteResult","shieldMetrics","weaponsCapacitorMetrics","powerBudget","isNonOutfittingSlot","isBuiltInHullModule","orderBySlotLayout","weaponMetrics","sumWeaponMetrics","shieldCapacitorMetrics","mobilityCapacitorMetrics","mobilityMetrics","getExperimentalEffectCost","heatMetrics","frameShiftDriveMassFactor","singleJumpRange","fuelPerJump","totalRange","calculateUnladenMass","getBlueprintCost","distributorMetrics","sumMaterials","ammunitionCapacity","armourMetrics","requirePips","requireFiniteNonNegative","deepFreeze","FACADE","requireLoadOptions","scope","options","field","value","BuildMetrics","_BuildMetrics","build","state","constructor","this","of","loadout","frameShiftDrive","drive","resolveDrive","TypeError","thrusters","modules","statsFor","loadedMass","cargo","fuel","fuelCapacity","main","maxJumpRange","fsd","maxJumpFuel","jumpRange","ladenJumpRange","cargoCapacity","distance","standardLoadResult","load","standardLoad","jumpRangeSummary","maximum","require","unladen","laden","max","totalMax","totalUnladen","totalLaden","buildMass","unladenMass","Object","freeze","hull","ship","hullMass","calculationModules","total","buildCost","hullCost","mercCoins","unpriced","materials","module","stats","cost","Slot","push","slot","symbol","Item","variant","mercCoinCost","engineering","Engineering","grade","Level","bought","Number","isInteger","climb","BlueprintName","experimental","ExperimentalEffect","toLowerCase","experimentalEffectSymbol","credits","rebuy","Math","trunc","consumers","consumer","heatMetricsResult","input","effectiveModules","complete","mobilityMetricsResult","mobility","mobilityCapacitorMetricsResult","mobilityCapacitor","shieldMetricsResult","shields","shieldCapacitorMetricsResult","shieldCapacitor","shieldRecoveryResult","recovery","cellBanks","layout","bank","weapons","record","effectiveModule","name","enabled","On","metrics","ammunition","maximumRange","falloffRange","projectileRange","armourPiercing","orderedWeapons","weapon","filter","map","weaponsPips","distributorMetricsResult","distributor","mobilityInput","enginesPips","statedMainFuel","systemsPips","pips","RangeError","mass","maximumFuel","fitted","frameShiftDriveModule","driveError","maxFuel","error","Error","reason","message","params","carriedFuel","min","isFinite","driveParams","result","what","issues","issue","join"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/ships/build-metrics.ts"],"names":["cellBankSummary","shieldRecovery","loadoutInternals","fittedThrusterParamsFor","preEngineeredVariantFor","powerConsumerFor","powerAvailable","heatInputResultFor","completeResult","cellBankInputsFor","armourInputFor","weaponStatsFor","weaponsCapacitorInputFor","mobilityInputResultFor","shieldInputResultFor","shieldCapacitorInputResultFor","shieldRecoveryInputResultFor","distributorInputResultFor","incompleteResult","weaponMetrics","sumWeaponMetrics","shieldMetrics","weaponsCapacitorMetrics","powerBudget","isNonOutfittingSlot","isBuiltInHullModule","orderBySlotLayout","shieldCapacitorMetrics","mobilityCapacitorMetrics","mobilityMetrics","getExperimentalEffectCost","heatMetrics","frameShiftDriveMassFactor","singleJumpRange","fuelPerJump","totalRange","calculateUnladenMass","getBlueprintCost","distributorMetrics","sumMaterials","ammunitionCapacity","armourMetrics","requirePips","requireFiniteNonNegative","deepFreeze","FACADE","requireLoadOptions","scope","options","field","value","BuildMetrics","_BuildMetrics","build","state","constructor","this","of","loadout","frameShiftDrive","drive","resolveDrive","TypeError","thrusters","modules","statsFor","loadedMass","cargo","fuel","fuelCapacity","main","maxJumpRange","fsd","maxJumpFuel","jumpRange","ladenJumpRange","cargoCapacity","distance","standardLoadResult","load","standardLoad","jumpRangeSummary","maximum","require","unladen","laden","max","totalMax","totalUnladen","totalLaden","buildMass","unladenMass","Object","freeze","hull","ship","hullMass","calculationModules","total","buildCost","hullCost","mercCoins","unpriced","materials","module","stats","cost","Slot","push","slot","symbol","Item","variant","mercCoinCost","engineering","Engineering","grade","Level","bought","Number","isInteger","climb","BlueprintName","experimental","ExperimentalEffect","toLowerCase","experimentalEffectSymbol","credits","rebuy","Math","trunc","consumers","consumer","heatMetricsResult","input","effectiveModules","complete","mobilityMetricsResult","mobility","mobilityCapacitorMetricsResult","mobilityCapacitor","shieldMetricsResult","shields","shieldCapacitorMetricsResult","shieldCapacitor","shieldRecoveryResult","recovery","cellBanks","layout","bank","weapons","record","effectiveModule","name","enabled","On","metrics","ammunition","maximumRange","falloffRange","projectileRange","armourPiercing","orderedWeapons","weapon","filter","map","weaponsPips","distributorMetricsResult","distributor","mobilityInput","enginesPips","statedMainFuel","systemsPips","pips","RangeError","mass","maximumFuel","fitted","frameShiftDriveModule","driveError","maxFuel","error","Error","reason","message","params","carriedFuel","min","isFinite","driveParams","result","what","issues","issue","join"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{withPreciseModifierValue,round6}from"./chunk-EFQOUATZ.js";var percent=100;var STAT_LABELS=[{label:"Mass",field:"mass"},{label:"Integrity",field:"integrity"},{label:"PowerDraw",field:"powerDraw"},{label:"BootTime",field:"bootTime"},{label:"FSDOptimalMass",field:"optMass"},{label:"EngineOptimalMass",field:"optMass"},{label:"EngineMinimumMass",field:"minMass"},{label:"MaximumMass",field:"maxMass"},{label:"ShieldGenOptimalMass",field:"optMass"},{label:"ShieldGenMinimumMass",field:"minMass"},{label:"ShieldGenMaximumMass",field:"maxMass"},{label:"EngineOptPerformance",field:"optMultiplier",scale:percent},{label:"EngineMinPerformance",field:"minMultiplier",scale:percent},{label:"EngineMaxPerformance",field:"maxMultiplier",scale:percent},{label:"ShieldGenStrength",field:"optMultiplier",scale:percent},{label:"ShieldGenMinStrength",field:"minMultiplier",scale:percent},{label:"ShieldGenMaxStrength",field:"maxMultiplier",scale:percent},{label:"EngineHeatRate",field:"engineHeatRate"},{label:"FSDHeatRate",field:"fsdHeatRate"},{label:"MaxFuelPerJump",field:"maxFuel"},{label:"PowerCapacity",field:"powerCapacity"},{label:"HeatEfficiency",field:"heatEfficiency"},{label:"EnginesCapacity",field:"enginesCapacity"},{label:"EnginesRecharge",field:"enginesRecharge"},{label:"SystemsCapacity",field:"systemsCapacity"},{label:"SystemsRecharge",field:"systemsRecharge"},{label:"WeaponsCapacity",field:"weaponsCapacity"},{label:"WeaponsRecharge",field:"weaponsRecharge"},{label:"RefuelRate",field:"refuelRate"},{label:"FuelScoopRate",field:"refuelRate"},{label:"FuelCapacity",field:"fuelCapacity"},{label:"CargoCapacity",field:"cargoCapacity"},{label:"RegenRate",field:"shieldRegenRate"},{label:"BrokenRegenRate",field:"shieldBrokenRegenRate"},{label:"EnergyPerRegen",field:"distributorDraw"},{label:"ShieldBankReinforcement",field:"shieldBankReinforcement"},{label:"ShieldBankHeat",field:"shieldBankHeat"},{label:"ShieldBankHeat",field:"thermalLoad"},{label:"ShieldBankSpinUp",field:"shieldBankSpinUp"},{label:"ShieldBankDuration",field:"shieldBankDuration"},{label:"ScannerRange",field:"scannerRange"},{label:"SensorTargetScanAngle",field:"scanAngle"},{label:"MaxAngle",field:"scanAngle"},{label:"ScannerTimeToScan",field:"scanTime"},{label:"ProbeRadius",field:"probeRadius"},{label:"DSS_PatchRadius",field:"probeRadius"},{label:"FSDInterdictorFacingLimit",field:"interdictorFacingLimit"},{label:"FSDInterdictorRange",field:"interdictorRange"},{label:"DefenceModifierShieldMultiplier",field:"shieldBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthMultiplier",field:"hullBoost",scale:percent,multiplierBase:percent},{label:"DefenceModifierHealthAddition",field:"hullReinforcement"},{label:"DefenceModifierShieldAddition",field:"shieldAddition"},{label:"GuardianModuleResistance",field:"guardianZoneResistance",capabilityValue:"Active"},{label:"KineticResistance",field:"kineticResistance",scale:percent,multiplierBase:-percent},{label:"ThermicResistance",field:"thermalResistance",scale:percent,multiplierBase:-percent},{label:"ExplosiveResistance",field:"explosiveResistance",scale:percent,multiplierBase:-percent},{label:"CausticResistance",field:"causticResistance",scale:percent,multiplierBase:-percent},{label:"DamageProtection",field:"moduleProtection",scale:percent},{label:"ModuleDefenceAbsorption",field:"moduleProtection",scale:percent},{label:"Damage",field:"damage"},{label:"Rounds",field:"roundsPerShot",defaultBase:1},{label:"RoundsPerShot",field:"roundsPerShot",defaultBase:1},{label:"RateOfFire",field:"rateOfFire"},{label:"BurstInterval",field:"burstInterval"},{label:"BurstSize",field:"burstRounds",defaultBase:1},{label:"BurstRateOfFire",field:"burstRateOfFire",defaultBase:1},{label:"AmmoClipSize",field:"clipSize"},{label:"AmmoMaximum",field:"ammoMaximum"},{label:"ReloadTime",field:"reloadTime"},{label:"DistributorDraw",field:"distributorDraw"},{label:"ThermalLoad",field:"thermalLoad"},{label:"ArmourPenetration",field:"armourPiercing"},{label:"Range",field:"maximumRange"},{label:"Range",field:"scannerRange"},{label:"MaximumRange",field:"maximumRange"},{label:"FalloffRange",field:"falloffRange"},{label:"DamageFalloffRange",field:"falloffRange"},{label:"ShotSpeed",field:"shotSpeed"},{label:"$Kinetic;",field:"damageDistribution",damageType:"kinetic",scale:percent,defaultBase:0},{label:"$Thermal;",field:"damageDistribution",damageType:"thermal",scale:percent,defaultBase:0},{label:"$Explosive;",field:"damageDistribution",damageType:"explosive",scale:percent,defaultBase:0},{label:"$Absolute;",field:"damageDistribution",damageType:"absolute",scale:percent,defaultBase:0},{label:"Jitter",field:"jitter",defaultBase:0}];var BY_LABEL=(()=>{const entries=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){const forLabel=entries.get(entry.label)??[];forLabel.push(entry);entries.set(entry.label,forLabel)}return entries})();var LABELS_BY_FIELD=(()=>{const labels=/* @__PURE__ */new Map;for(const entry of STAT_LABELS){if(entry.damageType!==void 0)continue;const fieldLabels=labels.get(entry.field)??[];fieldLabels.push(entry.label);labels.set(entry.field,fieldLabels)}return labels})();function baseStats(stats){const base={};for(const{label:label,field:field,damageType:damageType,scale:scale,defaultBase:defaultBase}of STAT_LABELS){if(base[label]!==void 0)continue;const value=damageType===void 0?stats[field]:stats.damageDistribution?.[damageType];if(typeof value==="number")base[label]=value*(scale??1);else if(defaultBase!==void 0&&isWeapon(stats))base[label]=defaultBase}return base}function isWeapon(stats){return stats.damage!==void 0}function fieldForLabel(label,stats){const entries=BY_LABEL.get(label);if(!entries||entries.length===0)return null;if(stats&&entries.length>1){const carried=entries.find(entry=>typeof stats[entry.field]==="number");if(carried)return carried.field}return entries[0].field}function damageTypeForLabel(label){return BY_LABEL.get(label)?.[0]?.damageType??null}function labelsForDamageType(type){return STAT_LABELS.filter(entry=>entry.damageType===type).map(entry=>entry.label)}function scaleForLabel(label){return BY_LABEL.get(label)?.[0]?.scale??1}function multiplierBaseForLabel(label){return BY_LABEL.get(label)?.[0]?.multiplierBase??null}function capabilityValueForLabel(label){return BY_LABEL.get(label)?.[0]?.capabilityValue??null}function labelsForField(field){return LABELS_BY_FIELD.get(field)??[]}var FLOAT32_SCALED_BASE_LABELS=/* @__PURE__ */new Set(["EngineOptPerformance","EngineMinPerformance","EngineMaxPerformance","ShieldGenStrength","ShieldGenMinStrength","ShieldGenMaxStrength"]);function computeModifiers(base,grade,quality=1,experimental){if(!Number.isFinite(quality)||quality<0||quality>1){throw new RangeError(`computeModifiers: quality must be a finite number in [0, 1]`)}const f=Math.fround;const roll=f(quality);const byLabel=/* @__PURE__ */new Map;const add=(label,method,value,stated)=>{const list=byLabel.get(label)??[];list.push({method:method,value:value,stated:stated});byLabel.set(label,list)};const features="features"in grade?grade.features:grade;for(const feature of features){const rolledValue=roll===0?feature.min:roll===1?feature.max:feature.min+(feature.max-feature.min)*roll;const value=feature.method==="overwrite"?rolledValue:roll===0||roll===1?f(rolledValue):f(f(feature.min)+f(f(feature.max-feature.min)*roll));add(feature.label,feature.method,value,feature.min===feature.max||roll===0||roll===1)}const experimentalModifiers=experimental&&"modifiers"in experimental?experimental.modifiers:experimental;for(const e of experimentalModifiers??[]){add(e.label,e.method,e.method==="overwrite"?e.value:f(e.value),true)}const modifiers=[];let clipIsOverwritten=false;for(const[label,contributions]of byLabel){const capabilityValue=capabilityValueForLabel(label);if(capabilityValue!==null){modifiers.push({Label:label,ValueStr:capabilityValue});continue}const baseValue=base[label];const overwrite=contributions.find(c=>c.method==="overwrite");const multiplierBase=multiplierBaseForLabel(label);const original=baseValue===void 0?void 0:float32JournalValue(baseValue,multiplierBase,FLOAT32_SCALED_BASE_LABELS.has(label)?scaleForLabel(label):1);const baseless=original===void 0&&(multiplierBase!==null||overwrite!==void 0||contributions.some(c=>c.method==="additive"));if(original===void 0&&!baseless)continue;let value=original??0;if(multiplierBase===null){for(const c of contributions){if(c.method==="multiplicative")value=f(value*f(1+f(c.value)))}for(const c of contributions){if(c.method==="additive")value=f(value+f(c.value))}}else{let factor=f(1+value/multiplierBase);for(const c of contributions){if(c.method==="overwrite")continue;factor=f(factor*f(1+f(f(c.value)*100/multiplierBase)))}value=f(f(factor-1)*multiplierBase)}if(overwrite)value=overwrite.value;if(label==="AmmoClipSize"){if(overwrite)clipIsOverwritten=true;else if(original!==void 0&&contributions.every(c=>c.stated)){value=snapToStatedWhole(value,original)}}else if(label==="AmmoMaximum"&&!overwrite){value=Math.round(value)}modifiers.push(withPreciseModifierValue({Label:label,Value:round6(value),...original===void 0&&multiplierBase===null?{}:{OriginalValue:round6(original??0)}},value))}const resolved=resolveFalloffFromRange(modifiers,base);return clipIsOverwritten?resolved:roundClipToWholeBursts(resolved,base)}function float32JournalValue(value,multiplierBase,scale){if(multiplierBase===null){return Math.fround(Math.fround(value/scale)*scale)}const factor=Math.fround(1+value/multiplierBase);return Math.fround(Math.fround(factor-1)*multiplierBase)}function roundClipToWholeBursts(modifiers,base){const clip=modifiers.find(m=>m.Label==="AmmoClipSize");if(!clip?.Value||clip.Value===clip.OriginalValue)return modifiers;const burst=modifiers.find(m=>m.Label==="BurstSize")?.Value||base["BurstSize"]||1;const rounded=Math.ceil(clip.Value/burst)*burst;if(rounded===clip.Value)return modifiers;return modifiers.map(m=>m===clip?{...m,Value:rounded}:m)}function snapToStatedWhole(value,base){const whole=Math.round(value);return Math.abs(value-whole)<=Math.abs(base)*5e-4?whole:value}function resolveFalloffFromRange(modifiers,base){const falloff=modifiers.find(m=>m.Label==="FalloffRange");if(!falloff||falloff.Value===void 0)return modifiers;const range=modifiers.find(m=>m.Label==="Range"||m.Label==="MaximumRange")?.Value??base["Range"]??base["MaximumRange"];if(range===void 0){return falloff.Value<=1?modifiers.filter(m=>m!==falloff):modifiers}if(falloff.Value<=1||falloff.Value>range){return modifiers.map(m=>m===falloff?{...m,Value:round6(range)}:m)}return modifiers}function sumMaterials(...lists){const totals=/* @__PURE__ */new Map;for(const list of lists){for(const material of list){const key=material.symbol.toLowerCase();const previous=totals.get(key);totals.set(key,{symbol:previous?.symbol??material.symbol,name:previous?.name??material.name,count:(previous?.count??0)+material.count})}}return[...totals.values()]}export{baseStats,capabilityValueForLabel,computeModifiers,damageTypeForLabel,fieldForLabel,labelsForDamageType,labelsForField,scaleForLabel,sumMaterials};//# sourceMappingURL=chunk-5QSCLEEB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/internal/module-stat-labels.ts","../src/ships/engineering.ts"],"names":["withPreciseModifierValue","round6","percent","STAT_LABELS","label","field","scale","multiplierBase","capabilityValue","defaultBase","damageType","BY_LABEL","entries","Map","entry","forLabel","get","push","set","LABELS_BY_FIELD","labels","fieldLabels","baseStats","stats","base","value","damageDistribution","isWeapon","damage","fieldForLabel","length","carried","find","damageTypeForLabel","labelsForDamageType","type","filter","map","scaleForLabel","multiplierBaseForLabel","capabilityValueForLabel","labelsForField","FLOAT32_SCALED_BASE_LABELS","Set","computeModifiers","grade","quality","experimental","Number","isFinite","RangeError","f","Math","fround","roll","byLabel","add","method","stated","list","features","feature","rolledValue","min","max","experimentalModifiers","modifiers","e","clipIsOverwritten","contributions","Label","ValueStr","baseValue","overwrite","c","original","float32JournalValue","has","baseless","some","factor","every","snapToStatedWhole","round","Value","OriginalValue","resolved","resolveFalloffFromRange","roundClipToWholeBursts","clip","m","burst","rounded","ceil","whole","abs","falloff","range","sumMaterials","lists","totals","material","key","symbol","toLowerCase","previous","name","count","values"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{weaponMetrics}from"./chunk-2OBUSQA7.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{getShipBySymbol,getShipByName,getShipSlots}from"./chunk-6UNAD74Z.js";import{getLoadoutModifier}from"./chunk-T4MKUKYS.js";import{sourcePurchaseFromLoadout}from"./chunk-NIURLW2F.js";import{identifyPreEngineeredVariant,unrollableFixedArticle,cloneLoadoutModule,isNonOutfittingSlot,isBuiltInHullModule,matchingKeyIn,ownKeyIn,getPreEngineeredStats,getPreEngineeredModifiers,cloneModuleStats,isFinalGuardianWeaponEngineering,scaleDamageComponents}from"./chunk-XM4VA2WE.js";import{builtInModuleBySymbol,getBulkheadsForShip}from"./chunk-HBQELOBY.js";import{getPreEngineeredVariants}from"./chunk-KPJ77VPS.js";import{CORE_MODULES}from"./chunk-FA5JVXVG.js";import{getExperimentalEffect}from"./chunk-77I24V6B.js";import{getDefaultLoadout}from"./chunk-GRIK3EDH.js";import{fieldForLabel,scaleForLabel,labelsForField,capabilityValueForLabel,damageTypeForLabel}from"./chunk-5QSCLEEB.js";import{BURST_PATTERN_LABELS,journalRateOfFire,preciseValueFor}from"./chunk-EFQOUATZ.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{parseSlotName,SLOT_RESTRICTION_LABELS,enumerateSlots}from"./chunk-RAO35XDF.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{truncate,requireString,describeValue,requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var MILITARY_PREFIXES=["int_hullreinforcement","int_metaalloyhullreinforcement","int_modulereinforcement","int_shieldcellbank","int_guardianhullreinforcement","int_guardianmodulereinforcement","int_guardianshieldreinforcement"];var MINING_PREFIXES=["hpt_mininglaser","hpt_mining_abrblstr","hpt_mining_seismchrgwarhd","hpt_mining_subsurfdispmisle","hpt_human_extraction","hpt_miningtoolv2"];var CARGO_PREFIXES=["int_cargorack","int_largecargorack","int_corrosionproofcargorack","int_fueltank"];var RESTRICTED_SLOT_PREFIXES={mining:MINING_PREFIXES,military:MILITARY_PREFIXES,cargo:CARGO_PREFIXES,limpetController:["int_dronecontrol","int_multidronecontrol"],vesselHangar:["int_fighterbay"],passenger:["int_passengercabin","int_mkii_passengercabin"],planetaryApproachSuite:["int_planetapproachsuite"]};var problem=(constraint,message,params)=>({constraint:constraint,message:message,...params===void 0?{}:{params:params}});function restrictionProblem(slot,symbol){const restriction=slot.restriction;if(!restriction)return null;if(RESTRICTED_SLOT_PREFIXES[restriction].some(prefix=>symbol.startsWith(prefix))){return null}return problem("restrictedMount",`slot only takes ${SLOT_RESTRICTION_LABELS[restriction]}`,{restriction:restriction})}function moduleSlotProblem(slot,module){const required=module.restrictedToSlot;if(!required||slot.restriction===required)return null;return problem("restrictedMount",`module only fits a mount that takes ${SLOT_RESTRICTION_LABELS[required]}`,{restriction:required})}function moduleFitProblem(shipSymbol,slot,module){if(slot.kind==="cargoHatch"){return problem("immutableSlot","the cargoHatch slot cannot be changed")}if(slot.kind==="armour"){const hull=getShipBySymbol(shipSymbol);if(module.slot!=="armour"||module.ship===void 0){return problem("armourRequired","not a ship armour module")}if(!hull||module.ship.toLowerCase()!==hull.name.toLowerCase()){const armourHull=getShipByName(module.ship);return problem("wrongHullArmour",`armour belongs to ${truncate(module.ship)}, not ${truncate(hull?.name??shipSymbol)}`,{armourShipName:module.ship,...armourHull===null?{}:{armourShipSymbol:armourHull.symbol},shipSymbol:shipSymbol,...hull===null?{}:{shipName:hull.name}})}return null}const restricted=module.restrictedToShips;if(restricted&&!restricted.some(symbol2=>symbol2.toLowerCase()===shipSymbol.toLowerCase())){const allowedShipNames=restricted.map(symbol2=>{const hull=getShipBySymbol(symbol2);return hull?.name??symbol2});const labels=restricted.map((symbol2,index)=>{const name=allowedShipNames[index];return name===symbol2?symbol2:`${name} (${symbol2})`});return problem("restrictedHull",`module is restricted to ${truncate(labels.join(", "))}`,{allowedShipNames:allowedShipNames,allowedShipSymbols:[...restricted],shipSymbol:shipSymbol})}const wrongMount=moduleSlotProblem(slot,module);if(wrongMount)return wrongMount;const symbol=module.symbol.toLowerCase();const moduleSlot=module.slot;switch(slot.kind){case"core":if(moduleSlot!==slot.core){return problem("wrongCoreType",`not a ${slot.core} module`,{requiredCore:slot.core,moduleSlot:moduleSlot??"none"})}break;case"hardpoint":{if(module.category!=="hardpoint"){return problem("hardpointRequired","not a hardpoint weapon")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}case"utility":if(module.category!=="utility"){return problem("utilityRequired","not a utility module")}return null;case"optional":{const isFuelTank=moduleSlot==="fuelTank";if(module.category!=="internal"&&!isFuelTank){return problem("optionalInternalRequired","not an optional-internal module")}if(moduleSlot&&!isFuelTank){return problem("coreModuleInOptionalSlot","a core module only fits its core slot")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}}return module.class>slot.size?problem("oversized",`module size ${truncate(module.class)} exceeds slot size ${slot.size}`,{moduleClass:module.class,slotSize:slot.size}):null}function moduleFitError(shipSymbol,slot,module){return moduleFitProblem(shipSymbol,slot,module)?.message??null}function preEngineeredVariantFor(module){return identifyPreEngineeredVariant(module)??(module.Engineering?unrollableFixedArticle(module.Item,module.Engineering):null)}function captureLoadoutEvent(event){const modules=event.Modules;const shipName=event.ShipName;const shipIdent=event.ShipIdent;const hullValue=event.HullValue;const modulesValue=event.ModulesValue;const rebuy=event.Rebuy;const unladenMass=event.UnladenMass;const cargoCapacity=event.CargoCapacity;const fuelCapacity=event.FuelCapacity;return{Ship:event.Ship,Modules:Array.isArray(modules)?captureEach(modules,captureModule):modules,...shipName===void 0?{}:{ShipName:shipName},...shipIdent===void 0?{}:{ShipIdent:shipIdent},...hullValue===void 0?{}:{HullValue:hullValue},...modulesValue===void 0?{}:{ModulesValue:modulesValue},...rebuy===void 0?{}:{Rebuy:rebuy},...unladenMass===void 0?{}:{UnladenMass:unladenMass},...cargoCapacity===void 0?{}:{CargoCapacity:cargoCapacity},...fuelCapacity===void 0?{}:{FuelCapacity:{...fuelCapacity}}}}function captureEach(values,capture){const captured=[];const{length:length}=values;for(let index=0;index<length;index++)captured.push(capture(values[index]));return captured}function captureModule(module){if(module===null||typeof module!=="object")return module;const on=module.On;const priority=module.Priority;const health=module.Health;const value=module.Value;const engineering=module.Engineering;return{Slot:module.Slot,Item:module.Item,...on===void 0?{}:{On:on},...priority===void 0?{}:{Priority:priority},...health===void 0?{}:{Health:health},...value===void 0?{}:{Value:value},...engineering===void 0?{}:{Engineering:captureEngineering(engineering)}}}function captureEngineering(engineering){if(engineering===null||typeof engineering!=="object")return engineering;const experimental=engineering.ExperimentalEffect;const experimentalLocalised=engineering.ExperimentalEffect_Localised;const modifiers=engineering.Modifiers;return{BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:engineering.Quality,...experimental===void 0?{}:{ExperimentalEffect:experimental},...experimentalLocalised===void 0?{}:{ExperimentalEffect_Localised:experimentalLocalised},...modifiers===void 0?{}:{Modifiers:Array.isArray(modifiers)?captureEach(modifiers,modifier=>modifier!==null&&typeof modifier==="object"?{...modifier}:modifier):modifiers}}}function hullLayout(shipSymbol){const slots=getShipSlots(shipSymbol);return slots?enumerateSlots(slots):[]}function fixedMountRejects(shipSymbol,layout,slot,stats){const mount=layout.find(candidate=>candidate.key.toLowerCase()===slot.toLowerCase());return mount!==void 0&&moduleFitProblem(shipSymbol,mount,stats)!==null}function normalizeLoadoutEvent(rawEvent){const event=captureLoadoutEvent(rawEvent);requireString(event.Ship,"ShipLoadout.fromLoadout: event.Ship");if(!Array.isArray(event.Modules)){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules must be an array, received ${describeValue(event.Modules)}`)}const modules=/* @__PURE__ */new Map;const slots=/* @__PURE__ */new Set;for(const module of event.Modules){if(module===null||typeof module!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules[] must hold module objects, received ${describeValue(module)}`)}requireString(module.Slot,"ShipLoadout.fromLoadout: module.Slot");requireString(module.Item,"ShipLoadout.fromLoadout: module.Item");if(module.Engineering!==void 0){if(module.Engineering===null||typeof module.Engineering!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering must be an object, received ${describeValue(module.Engineering)}`)}requireStringIfPresent(module.Engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");requireStringIfPresent(module.Engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");if(module.Engineering.Modifiers!==void 0&&!Array.isArray(module.Engineering.Modifiers)){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers must be an array, received ${describeValue(module.Engineering.Modifiers)}`)}for(const[index,modifier]of(module.Engineering.Modifiers??[]).entries()){if(modifier===null||typeof modifier!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}] must be an object, received ${describeValue(modifier)}`)}requireString(modifier.Label,`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}].Label`)}}const normalizedSlot=module.Slot.toLowerCase();if(slots.has(normalizedSlot)){throw new TypeError(`ShipLoadout.fromLoadout: duplicate slot "${truncate(module.Slot)}"`)}slots.add(normalizedSlot);modules.set(module.Slot,cloneLoadoutModule(module))}const top={};if(event.ShipName!==void 0)top.ShipName=event.ShipName;if(event.ShipIdent!==void 0)top.ShipIdent=event.ShipIdent;if(event.HullValue!==void 0)top.HullValue=event.HullValue;if(event.ModulesValue!==void 0)top.ModulesValue=event.ModulesValue;if(event.Rebuy!==void 0)top.Rebuy=event.Rebuy;if(event.UnladenMass!==void 0)top.UnladenMass=event.UnladenMass;if(event.CargoCapacity!==void 0)top.CargoCapacity=event.CargoCapacity;if(event.FuelCapacity!==void 0)top.FuelCapacity={...event.FuelCapacity};let invalidatesAggregates=false;const outcomes=[];const defaults=getDefaultLoadout(event.Ship)?.modules??[];let layout;for(const[slot,module]of modules){if(isNonOutfittingSlot(slot)||isBuiltInHullModule(module))continue;const stats=builtInModuleBySymbol(module.Item,"ShipLoadout.fromLoadout: module.Item");const slotKind=parseSlotName(slot)?.kind;const fallback=slotKind==="core"||slotKind==="armour"||slotKind==="cargoHatch"?defaults.find(candidate=>candidate.slot.toLowerCase()===slot.toLowerCase()):void 0;const rejected=fallback!==void 0&&(stats===null||slotKind==="cargoHatch"||fixedMountRejects(event.Ship,layout??=hullLayout(event.Ship),slot,stats));if(stats!==null&&!rejected)continue;if(fallback){modules.set(slot,{Slot:slot,Item:fallback.symbol,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health}});outcomes.push({action:"defaulted",slot:slot,sourceSymbol:module.Item,replacementSymbol:fallback.symbol})}else{modules.delete(slot);outcomes.push({action:"emptied",slot:slot,sourceSymbol:module.Item})}invalidatesAggregates=true}for(const fallback of defaults){const slotKind=parseSlotName(fallback.slot)?.kind;if(slotKind!=="core"&&slotKind!=="armour"&&slotKind!=="cargoHatch"||matchingKeyIn(modules,fallback.slot)!==null){continue}const slot=ownKeyIn(modules,fallback.slot);modules.set(slot,{Slot:slot,Item:fallback.symbol});outcomes.push({action:"defaulted",slot:slot,sourceSymbol:null,replacementSymbol:fallback.symbol});if(slotKind==="core")invalidatesAggregates=true}if(invalidatesAggregates){delete top.ModulesValue;delete top.Rebuy;delete top.UnladenMass;delete top.CargoCapacity;delete top.FuelCapacity}const moduleStats=/* @__PURE__ */new Map;const primitiveModifiers=/* @__PURE__ */new Map;for(const module of modules.values()){const engineering=module.Engineering;const variant=preEngineeredVariantFor(module);const catalogueVariantStats=variant?getPreEngineeredStats(variant):null;let variantStats=catalogueVariantStats;const retainsBakedExperimental=variant?.experimentalEffectSymbol!==void 0&&typeof engineering?.ExperimentalEffect==="string"&&variant.experimentalEffectSymbol.trim().toLowerCase()===engineering.ExperimentalEffect.trim().toLowerCase();if(variant&&catalogueVariantStats&&!catalogueVariantStats.engineeringLocked&&!retainsBakedExperimental){const{experimentalEffectSymbol:originalExperimental,...withoutExperimental}=variant;const currentExperimental=engineering?.ExperimentalEffect;const currentVariant=typeof currentExperimental==="string"?{...withoutExperimental,experimentalEffectSymbol:currentExperimental}:withoutExperimental;variantStats=getPreEngineeredStats(withoutExperimental);primitiveModifiers.set(module.Slot,[...engineering?.Modifiers??[],...getPreEngineeredModifiers(currentVariant)])}if(variantStats)moduleStats.set(module.Slot,cloneModuleStats(variantStats));const guardianFinal=typeof engineering?.BlueprintName==="string"&&isFinalGuardianWeaponEngineering(module.Item,engineering.BlueprintName);if(variantStats?.engineeringLocked||typeof engineering?.BlueprintName!=="string"||!guardianFinal){continue}const normalizedBlueprint=normalizeKey(engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");const normalizedExperimental=normalizeKey(engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");const variants=getPreEngineeredVariants(module.Item);const exact=variants.find(candidate=>candidate.engineeringLocked===true&&candidate.blueprintSymbol.toLowerCase()===normalizedBlueprint&&candidate.grade===engineering.Level&&candidate.experimentalEffectSymbol?.toLowerCase()===normalizedExperimental);const guardianBase=variants.find(candidate=>candidate.engineeringLocked===true&&candidate.blueprintSymbol.toLowerCase()===normalizedBlueprint&&candidate.grade===engineering.Level&&candidate.experimentalEffectSymbol===void 0);const stats=exact?getPreEngineeredStats(exact):guardianBase&&engineering.ExperimentalEffect!==void 0?getPreEngineeredStats({...guardianBase,experimentalEffectSymbol:engineering.ExperimentalEffect}):builtInModuleBySymbol(module.Item,"ShipLoadout.fromLoadout: module.Item");if(stats){moduleStats.set(module.Slot,cloneModuleStats({...stats,engineeringLocked:true}))}}return{shipSymbol:event.Ship,modules:modules,moduleStats:moduleStats,primitiveModifiers:primitiveModifiers,top:top,sourcePurchase:sourcePurchaseFromLoadout(event),outcomes:deepFreeze(outcomes)}}var NO_ISSUES=Object.freeze([]);function completeResult(value){return Object.freeze({value:value,complete:true,issues:NO_ISSUES})}function incompleteResult(issues){return Object.freeze({value:null,complete:false,issues:Object.freeze(issues.map(issue=>Object.freeze({...issue,...issue.params?{params:Object.freeze({...issue.params})}:{}})))})}var PREFIX={powerPlant:["int_powerplant","int_guardianpowerplant"],thrusters:["int_engine","int_mkiiagileboost_engine"],frameShiftDrive:["int_hyperdrive"],powerDistributor:["int_powerdistributor","int_guardianpowerdistributor"],shieldGenerator:["int_shieldgenerator"],shieldCellBank:["int_shieldcellbank"],shieldBooster:["hpt_shieldbooster"],shieldReinforcement:["int_guardianshieldreinforcement"],hullReinforcement:["int_hullreinforcement","int_guardianhullreinforcement","int_metaalloyhullreinforcement"],moduleReinforcement:["int_modulereinforcement","int_guardianmodulereinforcement"]};var startsWithAny=(symbol,prefixes)=>prefixes.some(prefix=>symbol.toLowerCase().startsWith(prefix));function isPowerDistributor(module,stats){return stats?.slot?stats.slot==="powerDistributor":startsWithAny(module.Item,PREFIX.powerDistributor)}function isPowerPlant(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="powerPlant")return true;return stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant)}function isThruster(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="thrusters")return true;return stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters)}function isFrameShiftDrive(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="frameShiftDrive")return true;return stats?.slot?stats.slot==="frameShiftDrive":startsWithAny(module.Item,PREFIX.frameShiftDrive)}function isEnabled(module){return module.On!==false}function priorityOf(module){return(module.Priority??0)+1}function effectiveStat(module,field,stats){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base:void 0}function statedModifier(module,field){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)!==null)continue;const modified=getLoadoutModifier(module,label);if(modified!==null)return modified/scaleForLabel(label)}return void 0}function effectiveCapability(module,field,stats){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)===null)continue;if(module.Engineering?.Modifiers?.some(modifier=>modifier.Label.toLowerCase()===label.toLowerCase())){return true}}const base=stats[field];return typeof base==="boolean"?base:void 0}function effectiveDamageDistribution(module,stats){const fromEffect=module.Engineering?.ExperimentalEffect?getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution:void 0;const distribution={...fromEffect??stats.damageDistribution};let resolved=fromEffect!==void 0||stats.damageDistribution!==void 0;const seen=/* @__PURE__ */new Set;for(const modifier of module.Engineering?.Modifiers??[]){const type=damageTypeForLabel(modifier.Label);if(type===null||seen.has(type))continue;seen.add(type);if(modifier.Value===void 0)continue;distribution[type]=modifier.Value/scaleForLabel(modifier.Label);resolved=true}return resolved?distribution:void 0}function convertsDamage(module){if(module.Engineering?.ExperimentalEffect&&getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution){return true}return(module.Engineering?.Modifiers??[]).some(modifier=>damageTypeForLabel(modifier.Label)!==null)}function modifierRatio(module,stats,field){const base=stats?.[field];if(typeof base!=="number"||base===0)return 1;const effective=effectiveStat(module,field,stats);return effective===void 0?1:effective/base}function relatedStat(module,stats,field,ratio){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base*ratio:void 0}function effectiveModule(module,stats){if(!stats||!module.Engineering)return stats;const merged={...stats};const fields=new Set(Object.keys(stats));for(const modifier of module.Engineering.Modifiers??[]){const field=fieldForLabel(modifier.Label,stats);if(field)fields.add(field)}for(const key of fields){const capability=effectiveCapability(module,key,stats);if(capability!==void 0){merged[key]=capability;continue}const value=effectiveStat(module,key,stats);if(value!==void 0)merged[key]=value}if(stats.engineeringGroup==="thrusters"){const massRatio=modifierRatio(module,stats,"optMass");const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",massRatio);if(minMass!==void 0)merged.minMass=minMass;if(maxMass!==void 0)merged.maxMass=maxMass}if(stats.engineeringGroup==="thrusters"||stats.engineeringGroup==="shieldGenerators"){const performanceRatio=modifierRatio(module,stats,"optMultiplier");const minMultiplier=relatedStat(module,stats,"minMultiplier",performanceRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",performanceRatio);if(minMultiplier!==void 0)merged.minMultiplier=minMultiplier;if(maxMultiplier!==void 0)merged.maxMultiplier=maxMultiplier;if(stats.engineeringGroup==="thrusters"){for(const field of["minSpeedMultiplier","optSpeedMultiplier","maxSpeedMultiplier","minRotationMultiplier","optRotationMultiplier","maxRotationMultiplier"]){const value=stats[field];if(value!==void 0)merged[field]=value*performanceRatio}}}const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)merged.damageDistribution=damageDistribution;if(stats.category==="hardpoint")normalizeEffectiveWeapon(module,merged);if(convertsDamage(module)){delete merged.damageComponents}else if(stats.damageComponents){merged.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof merged.damage==="number"?merged.damage:void 0)}return merged}function powerConsumerFor(module,stats){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return null;const mounted=stats?.category==="hardpoint"||stats?.category==="utility";return{draw:draw,priority:priorityOf(module),enabled:isEnabled(module),deployedOnly:mounted&&stats?.alwaysPowered!==true,label:module.Slot,symbol:module.Item}}function powerAvailable(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(!isPowerPlant(module,stats))continue;if(!isEnabled(module))return 0;return effectiveStat(module,"powerCapacity",stats)??0}return 0}var DEFAULT_SLOT={powerCapacity:"PowerPlant",heatEfficiency:"PowerPlant",thrusters:"MainEngines",powerDistributor:"PowerDistributor"};var UNRESOLVED_FACT={thrusters:"thruster stats",shieldGenerator:"shield-generator stats",powerCapacity:"power capacity",heatEfficiency:"heat efficiency",powerDistributor:"power-distributor stats"};var NOTHING_FITTED={powerCapacity:"PowerPlant: no power plant is fitted",heatEfficiency:"PowerPlant: no power plant is fitted",thrusters:"MainEngines: no thrusters are fitted",powerDistributor:"PowerDistributor: no power distributor is fitted"};function metricIssue(field,reason,module){const defaultSlot=DEFAULT_SLOT[field];const slot=module?.Slot??defaultSlot;const symbol=module?.Item;const params={field:field,reason:reason,...slot===void 0?{}:{slot:slot},...symbol===void 0?{}:{symbol:symbol}};let message;if(reason==="missing"){message=NOTHING_FITTED[field]??"no shield generator is fitted"}else if(reason==="unresolved"){const unavailable=UNRESOLVED_FACT[field]??field;message=`${truncate(slot??field)}: ${unavailable} unavailable for ${truncate(symbol??field)}`}else if(reason==="disabled"){message=`${truncate(slot??field)}: ${truncate(symbol??field)} is switched off`}else if(reason==="invalid"){message=`${truncate(slot??field)}: ${truncate(symbol??field)} has invalid ${field}`}else{message=`${truncate(slot??field)}: ${truncate(symbol??field)} is not powered with hardpoints retracted`}return{field:field,reason:reason,...slot===void 0?{}:{slot:slot},...symbol===void 0?{}:{symbol:symbol},message:message,params:params}}function powerPlantIssueFor(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(!isPowerPlant(module,stats))continue;if(!isEnabled(module))return metricIssue("powerCapacity","disabled",module);const capacity=effectiveStat(module,"powerCapacity",stats);if(capacity===void 0)return metricIssue("powerCapacity","unresolved",module);return!Number.isFinite(capacity)||capacity<=0?metricIssue("powerCapacity","invalid",module):null}return metricIssue("powerCapacity","missing")}function powerDrawIssueFor(modules,statsFor){for(const module of modules){const consumer=powerConsumerFor(module,statsFor(module));if(consumer&&(!Number.isFinite(consumer.draw)||consumer.draw<0)){return metricIssue("powerDraw","invalid",module)}}return null}function poweredMetricBudgetFor(field,module,stats,modules,getBudget,statsFor){if(!isEnabled(module))return incompleteResult([metricIssue(field,"disabled",module)]);const plantIssue=powerPlantIssueFor(modules,statsFor);if(plantIssue)return incompleteResult([plantIssue]);const drawIssue=powerDrawIssueFor(modules,statsFor);if(drawIssue)return incompleteResult([drawIssue]);const budget=getBudget();return budget.available>0&&poweredStates(module,stats,budget).retracted?completeResult(budget):incompleteResult([metricIssue(field,"shed",module)])}function poweredShieldGeneratorResultFor(modules,getBudget,statsFor){for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldGenerator))continue;const stats=statsFor(module);const powered=poweredMetricBudgetFor("shieldGenerator",module,stats,modules,getBudget,statsFor);if(!powered.complete)return powered;return stats===null?incompleteResult([metricIssue("shieldGenerator","unresolved",module)]):completeResult({module:module,budget:powered.value})}return incompleteResult([metricIssue("shieldGenerator","missing")])}function mapResistanceFields(read){return{kineticResistance:read("kineticResistance")??0,thermalResistance:read("thermalResistance")??0,explosiveResistance:read("explosiveResistance")??0,causticResistance:read("causticResistance")??0}}function resistancesOf(module,stats){return mapResistanceFields(field=>effectiveStat(module,field,stats))}function shieldInputFor(ship,modules,budget,statsFor){let generator=null;const boosters=[];let reinforcement=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!(budget.available>0&&poweredStates(module,stats,budget).retracted))continue;if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){const massRatio=modifierRatio(module,stats,"optMass");const strengthRatio=modifierRatio(module,stats,"optMultiplier");const optMass=effectiveStat(module,"optMass",stats);const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",Math.max(1,massRatio));const optMultiplier=effectiveStat(module,"optMultiplier",stats);const minMultiplier=relatedStat(module,stats,"minMultiplier",strengthRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",strengthRatio);generator={...optMass===void 0?{}:{optMass:optMass},...minMass===void 0?{}:{minMass:minMass},...maxMass===void 0?{}:{maxMass:maxMass},...optMultiplier===void 0?{}:{optMultiplier:optMultiplier},...minMultiplier===void 0?{}:{minMultiplier:minMultiplier},...maxMultiplier===void 0?{}:{maxMultiplier:maxMultiplier},...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.shieldBooster)){boosters.push({shieldBoost:effectiveStat(module,"shieldBoost",stats)??0,...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.shieldReinforcement)){reinforcement+=effectiveStat(module,"shieldAddition",stats)??0}}return{hullMass:ship.hullMass,baseShieldStrength:ship.baseShieldStrength,generator:generator,boosters:boosters,reinforcement:reinforcement}}function shieldInputResultFor(ship,modules,getBudget,statsFor){const fitted=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!fitted.complete)return fitted;return completeResult(shieldInputFor(ship,modules,fitted.value.budget,statsFor))}function shieldCapacitorInputResultFor(ship,modules,getBudget,systemsPips,statsFor){const fitted=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!fitted.complete)return fitted;const budget=fitted.value.budget;const capacitor=systemsCapacitorResultFor(modules,budget,statsFor);if(!capacitor.complete)return capacitor;const shields=shieldMetrics(shieldInputFor(ship,modules,budget,statsFor));return completeResult({strength:shields.strength,resistances:shields.resistances,systemsCapacity:capacitor.value.systemsCapacity,systemsRecharge:capacitor.value.systemsRecharge,systemsPips:systemsPips})}function systemsCapacitorResultFor(modules,budget,statsFor){let distributor=null;for(const module of modules){const stats2=statsFor(module);if(isPowerDistributor(module,stats2)&&isEnabled(module)&&budget.available>0&&poweredStates(module,stats2,budget).retracted)distributor=module}if(!distributor)return completeResult({systemsCapacity:0,systemsRecharge:0});const stats=statsFor(distributor);const systemsCapacity=effectiveStat(distributor,"systemsCapacity",stats);const systemsRecharge=effectiveStat(distributor,"systemsRecharge",stats);return systemsCapacity===void 0||systemsRecharge===void 0?incompleteResult([metricIssue("powerDistributor","unresolved",distributor)]):completeResult({systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge})}function thrusterCurveFor(module,stats){const effective=effectiveModule(module,stats);const minMass=effective?.minMass;const optMass=effective?.optMass;const maxMass=effective?.maxMass;const minMultiplier=effective?.minMultiplier;const optMultiplier=effective?.optMultiplier;const maxMultiplier=effective?.maxMultiplier;if(minMass===void 0||optMass===void 0||maxMass===void 0||minMultiplier===void 0||optMultiplier===void 0||maxMultiplier===void 0){return null}return{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:minMultiplier,optMultiplier:optMultiplier,maxMultiplier:maxMultiplier,...effective?.optSpeedMultiplier===void 0?{}:{speedCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minSpeedMultiplier??minMultiplier,optMultiplier:effective.optSpeedMultiplier,maxMultiplier:effective.maxSpeedMultiplier??maxMultiplier}},...effective?.optRotationMultiplier===void 0?{}:{rotationCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minRotationMultiplier??minMultiplier,optMultiplier:effective.optRotationMultiplier,maxMultiplier:effective.maxRotationMultiplier??maxMultiplier}}}}function fittedThrusterParamsFor(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(isThruster(module,stats))return thrusterCurveFor(module,stats)}return null}function mobilityInputResultFor(ship,modules,getBudget,mass,statsFor){let thrusters=null;for(const module of modules){const stats=statsFor(module);if(!isThruster(module,stats))continue;const powered=poweredMetricBudgetFor("thrusters",module,stats,modules,getBudget,statsFor);if(!powered.complete)return powered;thrusters=thrusterCurveFor(module,stats);if(!thrusters)return incompleteResult([metricIssue("thrusters","unresolved",module)]);break}if(!thrusters)return incompleteResult([metricIssue("thrusters","missing")]);return completeResult({minimumSpeed:ship.minimumSpeed,maximumSpeed:ship.maximumSpeed,boost:ship.boost,minPitch:ship.minPitch,pitch:ship.pitch,minRoll:ship.minRoll,roll:ship.roll,minYaw:ship.minYaw,yaw:ship.yaw,mass:typeof mass==="function"?mass():mass,thrusters:thrusters})}function shieldRecoveryInputResultFor(ship,modules,getBudget,systemsPips,statsFor){const generator=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!generator.complete)return generator;const{module:generatorModule,budget:budget}=generator.value;const generatorStats=statsFor(generatorModule);const distributorDraw=effectiveStat(generatorModule,"distributorDraw",generatorStats);const regenRate=effectiveStat(generatorModule,"shieldRegenRate",generatorStats);const brokenRegenRate=effectiveStat(generatorModule,"shieldBrokenRegenRate",generatorStats);if(distributorDraw===void 0||regenRate===void 0||brokenRegenRate===void 0){return incompleteResult([metricIssue("shieldGenerator","unresolved",generatorModule)])}const capacitor=systemsCapacitorResultFor(modules,budget,statsFor);if(!capacitor.complete)return capacitor;const strength=shieldMetrics(shieldInputFor(ship,modules,budget,statsFor)).strength;return completeResult({strength:strength,regenRate:regenRate,brokenRegenRate:brokenRegenRate,distributorDraw:distributorDraw,systemsCapacity:capacitor.value.systemsCapacity,systemsRecharge:capacitor.value.systemsRecharge,systemsPips:systemsPips})}function weaponsCapacitorInputFor(modules,weaponsPips,budget,statsFor){let weaponsCapacity=0;let weaponsRecharge=0;let sustainedEnergyPerSecond=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!poweredStates(module,stats,budget).deployed)continue;if(isPowerDistributor(module,stats)){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0;weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats)??0}const weapon=weaponStatsFor(module,stats);if(weapon){sustainedEnergyPerSecond+=weaponMetrics(weapon).sustainedEnergyPerSecond}}return{weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,sustainedEnergyPerSecond:sustainedEnergyPerSecond,weaponsPips:weaponsPips}}function distributorInputResultFor(modules,pips,budget,statsFor){let disabled=null;for(const module of modules){const stats=statsFor(module);if(!isPowerDistributor(module,stats))continue;if(!isEnabled(module)){disabled??=module;continue}if(!poweredStates(module,stats,budget).retracted){return incompleteResult([metricIssue("powerDistributor","shed",module)])}const systemsCapacity=effectiveStat(module,"systemsCapacity",stats);const systemsRecharge=effectiveStat(module,"systemsRecharge",stats);const enginesCapacity=effectiveStat(module,"enginesCapacity",stats);const enginesRecharge=effectiveStat(module,"enginesRecharge",stats);const weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats);const weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats);if(systemsCapacity===void 0||systemsRecharge===void 0||enginesCapacity===void 0||enginesRecharge===void 0||weaponsCapacity===void 0||weaponsRecharge===void 0){return incompleteResult([metricIssue("powerDistributor","unresolved",module)])}return completeResult({systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge,enginesCapacity:enginesCapacity,enginesRecharge:enginesRecharge,weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,...pips})}return incompleteResult([disabled===null?metricIssue("powerDistributor","missing"):metricIssue("powerDistributor","disabled",disabled)])}function heatInputResultFor(ship,modules,budget,statsFor){let plant=null;let heatEfficiency;let thrusterHeatRate=0;let deployedThrusterHeatRate=0;let fsdHeatRate=0;let weaponsCapacity=0;const weapons=[];for(const module of modules){const stats=statsFor(module);if(isPowerPlant(module,stats)){if(!isEnabled(module)){return incompleteResult([metricIssue("powerCapacity","disabled",module)])}plant=module;heatEfficiency=effectiveStat(module,"heatEfficiency",stats);continue}if(!isEnabled(module))continue;const running=poweredStates(module,stats,budget);if(isThruster(module,stats)){const heat=effectiveStat(module,"engineHeatRate",stats)??0;if(running.retracted)thrusterHeatRate+=heat;if(running.deployed)deployedThrusterHeatRate+=heat}else if(isFrameShiftDrive(module,stats)){if(running.retracted)fsdHeatRate+=effectiveStat(module,"fsdHeatRate",stats)??0}else if(isPowerDistributor(module,stats)){if(running.deployed){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0}}const weapon=weaponStatsFor(module,stats);if(!running.deployed)continue;if(!weapon)continue;weapons.push({heatPerSecond:weaponMetrics(weapon).sustainedHeatPerSecond,distributorDraw:weapon.distributorDraw??0})}if(heatEfficiency===void 0){return incompleteResult([plant===null?metricIssue("powerCapacity","missing"):metricIssue("heatEfficiency","unresolved",plant)])}return completeResult({heatCapacity:ship.heatCapacity,heatDissipation:ship.heatDissipation,heatEfficiency:heatEfficiency,retractedPowerDraw:poweredDraw(budget,"retracted"),deployedPowerDraw:poweredDraw(budget,"deployed"),thrusterHeatRate:thrusterHeatRate,deployedThrusterHeatRate:deployedThrusterHeatRate,fsdHeatRate:fsdHeatRate,weaponsCapacity:weaponsCapacity,weapons:weapons})}function poweredDraw(budget,state){const powered=state==="retracted"?"poweredRetracted":"poweredDeployed";return budget.bands.reduce((total,band)=>band[powered]?total+band[state]:total,0)}function poweredStates(module,stats,budget){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return{retracted:true,deployed:true};const band=budget.bands[Math.min(budget.bands.length,Math.max(1,priorityOf(module)))-1];if(!band)return{retracted:true,deployed:true};return{retracted:band.poweredRetracted,deployed:band.poweredDeployed}}function cellBankInputsFor(modules,budget,statsFor){const banks=[];for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldCellBank))continue;const stats=statsFor(module);const effective=effectiveModule(module,stats);const ammunition=effective?ammunitionCapacity(effective):null;banks.push({slot:module.Slot,symbol:module.Item,reinforcementRate:effective?.shieldBankReinforcement??0,cells:ammunition?.total??0,spinUp:effective?.shieldBankSpinUp??0,duration:effective?.shieldBankDuration??0,heat:effective?.shieldBankHeat??0,powered:budget.available>0&&isEnabled(module)&&poweredStates(module,stats,budget).deployed})}return banks}function stockBulkhead(ship){const variants=getBulkheadsForShip(ship.name,CORE_MODULES);return variants.find(v=>v.symbol.toLowerCase().endsWith("_default"))??variants.find(v=>v.mass===0)??variants[0]??null}function armourInputFor(ship,modules,statsFor){const reinforcements=[];const moduleReinforcements=[];let bulkhead=null;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(module.Slot.toLowerCase()==="armour"){bulkhead={hullBoost:effectiveStat(module,"hullBoost",stats)??0,...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.hullReinforcement)){const boost=getLoadoutModifier(module,"DefenceModifierHealthMultiplier");reinforcements.push({hullReinforcement:effectiveStat(module,"hullReinforcement",stats)??0,hullBoost:boost===null?0:boost/scaleForLabel("DefenceModifierHealthMultiplier"),...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.moduleReinforcement)){moduleReinforcements.push({moduleProtection:effectiveStat(module,"moduleProtection",stats)??0,integrity:effectiveStat(module,"integrity",stats)??0})}}if(!bulkhead){const stock=stockBulkhead(ship);bulkhead=stock?{hullBoost:stock.hullBoost??0,...mapResistanceFields(field=>stock[field])}:null}return{baseArmour:ship.baseArmour,bulkhead:bulkhead,reinforcements:reinforcements,moduleReinforcements:moduleReinforcements}}var WEAPON_FIELDS=["damage","roundsPerShot","rateOfFire","burstInterval","burstRounds","burstRateOfFire","chargeTime","clipSize","ammoMaximum","reloadTime","distributorDraw","thermalLoad","powerDraw","maximumRange","falloffRange","armourPiercing"];function weaponStatsFor(module,stats){if(!stats||stats.category!=="hardpoint")return null;const weapon={};for(const field of WEAPON_FIELDS){const value=effectiveStat(module,field,stats);if(value!==void 0)weapon[field]=value}normalizeEffectiveWeapon(module,weapon);const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)weapon.damageDistribution=damageDistribution;if(stats.damageComponents&&!convertsDamage(module)){weapon.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof weapon.damage==="number"?weapon.damage:void 0)}if(stats.projectileRange)weapon.projectileRange={...stats.projectileRange};return weapon}function burstAdjustedRateOfFire(module,weapon){if(getLoadoutModifier(module,"RateOfFire")!==null)return void 0;const modifiers=module.Engineering?.Modifiers;const touched=BURST_PATTERN_LABELS.some(label=>getLoadoutModifier(module,label)!==null);if(!touched)return void 0;const stated=(label,field)=>preciseValueFor(modifiers,label)??weapon[field];return journalRateOfFire(stated("BurstInterval","burstInterval"),stated("BurstSize","burstRounds"),stated("BurstRateOfFire","burstRateOfFire"))}var FIRING_RATE_LABELS=["RateOfFire","BurstRateOfFire","BurstSize","BurstInterval","RoundsPerShot","Rounds"];function readsDamageFromPerSecond(module){return getLoadoutModifier(module,"Damage")===null&&FIRING_RATE_LABELS.every(label=>getLoadoutModifier(module,label)===null)}function normalizeEffectiveWeapon(module,weapon){const rate=burstAdjustedRateOfFire(module,weapon);if(rate!==void 0)weapon.rateOfFire=rate;if(readsDamageFromPerSecond(module)){const statedDamagePerSecond=getLoadoutModifier(module,"DamagePerSecond");const firingFactor=Number(weapon.roundsPerShot??1)*Number(weapon.rateOfFire??1);if(statedDamagePerSecond!==null&&firingFactor>0){weapon.damage=statedDamagePerSecond/firingFactor}}const{maximumRange:maximumRange,falloffRange:falloffRange}=weapon;if(maximumRange!==void 0&&falloffRange!==void 0&&falloffRange>maximumRange){weapon.falloffRange=maximumRange}}var INTERNALS=/* @__PURE__ */new WeakMap;function publishLoadoutInternals(build,internals){INTERNALS.set(build,internals)}function loadoutInternals(build,label){const internals=typeof build==="object"&&build!==null?INTERNALS.get(build):void 0;if(internals===void 0){throw new TypeError(`${label} must be a ShipLoadout, received ${describeValue(build)}`)}return internals}export{armourInputFor,cellBankInputsFor,completeResult,distributorInputResultFor,effectiveModule,fittedThrusterParamsFor,heatInputResultFor,incompleteResult,loadoutInternals,mobilityInputResultFor,moduleFitError,moduleFitProblem,normalizeLoadoutEvent,powerAvailable,powerConsumerFor,preEngineeredVariantFor,publishLoadoutInternals,shieldCapacitorInputResultFor,shieldInputResultFor,shieldRecoveryInputResultFor,weaponStatsFor,weaponsCapacitorInputFor};//# sourceMappingURL=chunk-5VBB5CTV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ships/internal/loadout-fitting.ts","../src/ships/internal/loadout-import.ts","../src/ships/internal/calculation-result.ts","../src/ships/internal/loadout-metrics.ts","../src/ships/internal/loadout-internals.ts"],"names":["weaponMetrics","shieldMetrics","getShipBySymbol","getShipByName","getShipSlots","getLoadoutModifier","sourcePurchaseFromLoadout","identifyPreEngineeredVariant","unrollableFixedArticle","cloneLoadoutModule","isNonOutfittingSlot","isBuiltInHullModule","matchingKeyIn","ownKeyIn","getPreEngineeredStats","getPreEngineeredModifiers","cloneModuleStats","isFinalGuardianWeaponEngineering","scaleDamageComponents","builtInModuleBySymbol","getBulkheadsForShip","getPreEngineeredVariants","CORE_MODULES","getExperimentalEffect","getDefaultLoadout","fieldForLabel","scaleForLabel","labelsForField","capabilityValueForLabel","damageTypeForLabel","BURST_PATTERN_LABELS","journalRateOfFire","preciseValueFor","ammunitionCapacity","parseSlotName","SLOT_RESTRICTION_LABELS","enumerateSlots","normalizeKey","truncate","requireString","describeValue","requireStringIfPresent","deepFreeze","MILITARY_PREFIXES","MINING_PREFIXES","CARGO_PREFIXES","RESTRICTED_SLOT_PREFIXES","mining","military","cargo","limpetController","vesselHangar","passenger","planetaryApproachSuite","problem","constraint","message","params","restrictionProblem","slot","symbol","restriction","some","prefix","startsWith","moduleSlotProblem","module","required","restrictedToSlot","moduleFitProblem","shipSymbol","kind","hull","ship","toLowerCase","name","armourHull","armourShipName","armourShipSymbol","shipName","restricted","restrictedToShips","allowedShipNames","map","labels","index","join","allowedShipSymbols","wrongMount","moduleSlot","core","requiredCore","category","isFuelTank","class","size","moduleClass","slotSize","moduleFitError","preEngineeredVariantFor","Engineering","Item","captureLoadoutEvent","event","modules","Modules","ShipName","shipIdent","ShipIdent","hullValue","HullValue","modulesValue","ModulesValue","rebuy","Rebuy","unladenMass","UnladenMass","cargoCapacity","CargoCapacity","fuelCapacity","FuelCapacity","Ship","Array","isArray","captureEach","captureModule","values","capture","captured","length","push","on","On","priority","Priority","health","Health","value","Value","engineering","Slot","captureEngineering","experimental","ExperimentalEffect","experimentalLocalised","ExperimentalEffect_Localised","modifiers","Modifiers","BlueprintName","Level","Quality","modifier","hullLayout","slots","fixedMountRejects","layout","stats","mount","find","candidate","key","normalizeLoadoutEvent","rawEvent","TypeError","Map","Set","entries","Label","normalizedSlot","has","add","set","top","invalidatesAggregates","outcomes","defaults","slotKind","fallback","rejected","action","sourceSymbol","replacementSymbol","delete","moduleStats","primitiveModifiers","variant","catalogueVariantStats","variantStats","retainsBakedExperimental","experimentalEffectSymbol","trim","engineeringLocked","originalExperimental","withoutExperimental","currentExperimental","currentVariant","guardianFinal","normalizedBlueprint","normalizedExperimental","variants","exact","blueprintSymbol","grade","guardianBase","sourcePurchase","NO_ISSUES","Object","freeze","completeResult","complete","issues","incompleteResult","issue","PREFIX","powerPlant","thrusters","frameShiftDrive","powerDistributor","shieldGenerator","shieldCellBank","shieldBooster","shieldReinforcement","hullReinforcement","moduleReinforcement","startsWithAny","prefixes","isPowerDistributor","isPowerPlant","parsed","isThruster","isFrameShiftDrive","isEnabled","priorityOf","effectiveStat","field","stated","statedModifier","base","label","modified","effectiveCapability","effectiveDamageDistribution","fromEffect","damageDistribution","distribution","resolved","seen","type","convertsDamage","modifierRatio","effective","relatedStat","ratio","effectiveModule","merged","fields","keys","capability","engineeringGroup","massRatio","minMass","maxMass","performanceRatio","minMultiplier","maxMultiplier","normalizeEffectiveWeapon","damageComponents","damage","powerConsumerFor","draw","mounted","enabled","deployedOnly","alwaysPowered","powerAvailable","statsFor","DEFAULT_SLOT","powerCapacity","heatEfficiency","UNRESOLVED_FACT","NOTHING_FITTED","metricIssue","reason","defaultSlot","unavailable","powerPlantIssueFor","capacity","Number","isFinite","powerDrawIssueFor","consumer","poweredMetricBudgetFor","getBudget","plantIssue","drawIssue","budget","available","poweredStates","retracted","poweredShieldGeneratorResultFor","powered","mapResistanceFields","read","kineticResistance","thermalResistance","explosiveResistance","causticResistance","resistancesOf","shieldInputFor","generator","boosters","reinforcement","strengthRatio","optMass","Math","max","optMultiplier","shieldBoost","hullMass","baseShieldStrength","shieldInputResultFor","fitted","shieldCapacitorInputResultFor","systemsPips","capacitor","systemsCapacitorResultFor","shields","strength","resistances","systemsCapacity","systemsRecharge","distributor","thrusterCurveFor","optSpeedMultiplier","speedCurve","minSpeedMultiplier","maxSpeedMultiplier","optRotationMultiplier","rotationCurve","minRotationMultiplier","maxRotationMultiplier","fittedThrusterParamsFor","mobilityInputResultFor","mass","minimumSpeed","maximumSpeed","boost","minPitch","pitch","minRoll","roll","minYaw","yaw","shieldRecoveryInputResultFor","generatorModule","generatorStats","distributorDraw","regenRate","brokenRegenRate","weaponsCapacitorInputFor","weaponsPips","weaponsCapacity","weaponsRecharge","sustainedEnergyPerSecond","deployed","weapon","weaponStatsFor","distributorInputResultFor","pips","disabled","enginesCapacity","enginesRecharge","heatInputResultFor","plant","thrusterHeatRate","deployedThrusterHeatRate","fsdHeatRate","weapons","running","heat","heatPerSecond","sustainedHeatPerSecond","heatCapacity","heatDissipation","retractedPowerDraw","poweredDraw","deployedPowerDraw","state","bands","reduce","total","band","min","poweredRetracted","poweredDeployed","cellBankInputsFor","banks","ammunition","reinforcementRate","shieldBankReinforcement","cells","spinUp","shieldBankSpinUp","duration","shieldBankDuration","shieldBankHeat","stockBulkhead","v","endsWith","armourInputFor","reinforcements","moduleReinforcements","bulkhead","hullBoost","moduleProtection","integrity","stock","baseArmour","WEAPON_FIELDS","projectileRange","burstAdjustedRateOfFire","touched","FIRING_RATE_LABELS","readsDamageFromPerSecond","every","rate","rateOfFire","statedDamagePerSecond","firingFactor","roundsPerShot","maximumRange","falloffRange","INTERNALS","WeakMap","publishLoadoutInternals","build","internals","loadoutInternals","get"],"mappings":"O,81CASA,IAAM2C,kBAAuC,CACzC,wBACA,iCACA,0BACA,qBACA,gCACA,kCACA,mCAUJ,IAAMC,gBAAqC,CACvC,kBACA,sBACA,4BACA,8BACA,uBACA,oBAOJ,IAAMC,eAAoC,CACtC,gBACA,qBACA,8BACA,gBAUJ,IAAMC,yBAAuE,CACzEC,OAAQH,gBACRI,SAAUL,kBACVM,MAAOJ,eAEPK,iBAAkB,CAAC,mBAAoB,yBAEvCC,aAAc,CAAC,kBAEfC,UAAW,CAAC,qBAAsB,2BAElCC,uBAAwB,CAAC,4BAU7B,IAAMC,QAAU,CACZC,WACAC,QACAC,UAAA,CACsBF,sBAAYC,mBAAaC,cAAW,EAAY,CAAA,EAAK,CAAEA,iBAEjF,SAASC,mBAAmBC,KAAiBC,QACzC,MAAMC,YAAcF,KAAKE,YACzB,IAAKA,YAAa,OAAO,KACzB,GAAIf,yBAAyBe,aAAaC,KAAMC,QAAWH,OAAOI,WAAWD,SAAU,CACnF,OAAO,IACX,CACA,OAAOT,QAAQ,kBAAmB,mBAAmBnB,wBAAwB0B,eAAgB,CACzFA,yBAER,CAEA,SAASI,kBAAkBN,KAAiBO,QACxC,MAAMC,SAAWD,OAAOE,iBACxB,IAAKD,UAAYR,KAAKE,cAAgBM,SAAU,OAAO,KACvD,OAAOb,QACH,kBACA,uCAAuCnB,wBAAwBgC,YAC/D,CAAEN,YAAaM,UAEvB,CASO,SAASE,iBACZC,WACAX,KACAO,QAEA,GAAIP,KAAKY,OAAS,aAAc,CAC5B,OAAOjB,QAAQ,gBAAiB,wCACpC,CACA,GAAIK,KAAKY,OAAS,SAAU,CACxB,MAAMC,KAAOtE,gBAAgBoE,YAC7B,GAAIJ,OAAOP,OAAS,UAAYO,OAAOO,YAAS,EAAW,CACvD,OAAOnB,QAAQ,iBAAkB,2BACrC,CACA,IAAKkB,MAAQN,OAAOO,KAAKC,gBAAkBF,KAAKG,KAAKD,cAAe,CAChE,MAAME,WAAazE,cAAc+D,OAAOO,MACxC,OAAOnB,QACH,kBACA,qBAAqBhB,SAAS4B,OAAOO,cAAcnC,SAASkC,MAAMG,MAAQL,cAC1E,CACIO,eAAgBX,OAAOO,QACnBG,aAAe,KAAO,CAAA,EAAK,CAAEE,iBAAkBF,WAAWhB,QAC9DU,yBACIE,OAAS,KAAO,CAAA,EAAK,CAAEO,SAAUP,KAAKG,OAGtD,CACA,OAAO,IACX,CAKA,MAAMK,WAAad,OAAOe,kBAC1B,GACID,aACCA,WAAWlB,KAAMF,SAAWA,QAAOc,gBAAkBJ,WAAWI,eACnE,CACE,MAAMQ,iBAAmBF,WAAWG,IAAKvB,UACrC,MAAMY,KAAOtE,gBAAgB0D,SAC7B,OAAOY,MAAMG,MAAQf,UAEzB,MAAMwB,OAASJ,WAAWG,IAAI,CAACvB,QAAQyB,SACnC,MAAMV,KAAOO,iBAAiBG,OAC9B,OAAOV,OAASf,QAASA,QAAS,GAAGe,SAASf,aAElD,OAAON,QAAQ,iBAAkB,2BAA2BhB,SAAS8C,OAAOE,KAAK,SAAU,CACvFJ,kCACAK,mBAAoB,IAAIP,YACxBV,uBAER,CAIA,MAAMkB,WAAavB,kBAAkBN,KAAMO,QAC3C,GAAIsB,WAAY,OAAOA,WACvB,MAAM5B,OAASM,OAAON,OAAOc,cAG7B,MAAMe,WAAavB,OAAOP,KAE1B,OAAQA,KAAKY,MACT,IAAK,OACD,GAAIkB,aAAe9B,KAAK+B,KAAM,CAC1B,OAAOpC,QAAQ,gBAAiB,SAASK,KAAK+B,cAAe,CACzDC,aAAchC,KAAK+B,KACnBD,WAAYA,YAAc,QAElC,CACA,MACJ,IAAK,YAAa,CACd,GAAIvB,OAAO0B,WAAa,YAAa,CACjC,OAAOtC,QAAQ,oBAAqB,yBACxC,CACA,MAAM0B,YAAatB,mBAAmBC,KAAMC,QAC5C,GAAIoB,YAAY,OAAOA,YACvB,KACJ,CACA,IAAK,UACD,GAAId,OAAO0B,WAAa,UAAW,CAC/B,OAAOtC,QAAQ,kBAAmB,uBACtC,CACA,OAAO,KACX,IAAK,WAAY,CACb,MAAMuC,WAAaJ,aAAe,WAClC,GAAIvB,OAAO0B,WAAa,aAAeC,WAAY,CAC/C,OAAOvC,QAAQ,2BAA4B,kCAC/C,CACA,GAAImC,aAAeI,WAAY,CAC3B,OAAOvC,QAAQ,2BAA4B,wCAC/C,CACA,MAAM0B,YAAatB,mBAAmBC,KAAMC,QAC5C,GAAIoB,YAAY,OAAOA,YACvB,KACJ,EAGJ,OAAOd,OAAO4B,MAAQnC,KAAKoC,KACrBzC,QACI,YACA,eAAehB,SAAS4B,OAAO4B,4BAA4BnC,KAAKoC,OAChE,CAAEC,YAAa9B,OAAO4B,MAAOG,SAAUtC,KAAKoC,OAEhD,IACV,CAGO,SAASG,eACZ5B,WACAX,KACAO,QAEA,OAAOG,iBAAiBC,WAAYX,KAAMO,SAASV,SAAW,IAClE,CClJO,SAAS2C,wBAAwBjC,QACpC,OACI3D,6BAA6B2D,UAC5BA,OAAOkC,YAAc5F,uBAAuB0D,OAAOmC,KAAMnC,OAAOkC,aAAe,KAExF,CAWA,SAASE,oBAAoBC,OACzB,MAAMC,QAAUD,MAAME,QACtB,MAAM1B,SAAWwB,MAAMG,SACvB,MAAMC,UAAYJ,MAAMK,UACxB,MAAMC,UAAYN,MAAMO,UACxB,MAAMC,aAAeR,MAAMS,aAC3B,MAAMC,MAAQV,MAAMW,MACpB,MAAMC,YAAcZ,MAAMa,YAC1B,MAAMC,cAAgBd,MAAMe,cAC5B,MAAMC,aAAehB,MAAMiB,aAC3B,MAAO,CACHC,KAAMlB,MAAMkB,KACZhB,QAASiB,MAAMC,QAAQnB,SAAWoB,YAAYpB,QAASqB,eAAiBrB,WACpEzB,gBAAa,EAAY,CAAA,EAAK,CAAE2B,SAAU3B,aAC1C4B,iBAAc,EAAY,CAAA,EAAK,CAAEC,UAAWD,cAC5CE,iBAAc,EAAY,CAAA,EAAK,CAAEC,UAAWD,cAC5CE,oBAAiB,EAAY,CAAA,EAAK,CAAEC,aAAcD,iBAClDE,aAAU,EAAY,CAAA,EAAK,CAAEC,MAAOD,UACpCE,mBAAgB,EAAY,CAAA,EAAK,CAAEC,YAAaD,gBAChDE,qBAAkB,EAAY,CAAA,EAAK,CAAEC,cAAeD,kBACpDE,oBAAiB,EAAY,CAAA,EAAK,CAAEC,aAAc,IAAKD,eAEnE,CAQA,SAASK,YAAkBE,OAAsBC,SAC7C,MAAMC,SAAgB,GACtB,MAAMC,OAAEA,QAAWH,OACnB,IAAA,IAASzC,MAAQ,EAAGA,MAAQ4C,OAAQ5C,QAAS2C,SAASE,KAAKH,QAAQD,OAAOzC,SAC1E,OAAO2C,QACX,CAGA,SAASH,cAAc3D,QACnB,GAAIA,SAAW,aAAeA,SAAW,SAAU,OAAOA,OAC1D,MAAMiE,GAAKjE,OAAOkE,GAClB,MAAMC,SAAWnE,OAAOoE,SACxB,MAAMC,OAASrE,OAAOsE,OACtB,MAAMC,MAAQvE,OAAOwE,MACrB,MAAMC,YAAczE,OAAOkC,YAC3B,MAAO,CACHwC,KAAM1E,OAAO0E,KACbvC,KAAMnC,OAAOmC,QACT8B,UAAO,EAAY,CAAA,EAAK,CAAEC,GAAID,OAC9BE,gBAAa,EAAY,CAAA,EAAK,CAAEC,SAAUD,aAC1CE,cAAW,EAAY,CAAA,EAAK,CAAEC,OAAQD,WACtCE,aAAU,EAAY,CAAA,EAAK,CAAEC,MAAOD,UACpCE,mBAAgB,EAAY,CAAA,EAAK,CAAEvC,YAAayC,mBAAmBF,cAE/E,CAGA,SAASE,mBAAmBF,aACxB,GAAIA,cAAgB,aAAeA,cAAgB,SAAU,OAAOA,YACpE,MAAMG,aAAeH,YAAYI,mBACjC,MAAMC,sBAAwBL,YAAYM,6BAC1C,MAAMC,UAAYP,YAAYQ,UAC9B,MAAO,CACHC,cAAeT,YAAYS,cAC3BC,MAAOV,YAAYU,MACnBC,QAASX,YAAYW,WACjBR,oBAAiB,EAAY,CAAA,EAAK,CAAEC,mBAAoBD,iBACxDE,6BAA0B,EACxB,CAAA,EACA,CAAEC,6BAA8BD,0BAClCE,iBAAc,EACZ,CAAA,EACA,CACIC,UAAWzB,MAAMC,QAAQuB,WACnBtB,YAAYsB,UAAYK,UACpBA,WAAa,aAAeA,WAAa,SACnC,IAAKA,UACLA,UAEVL,WAGxB,CAGA,SAASM,WAAWlF,YAChB,MAAMmF,MAAQrJ,aAAakE,YAC3B,OAAOmF,MAAQrH,eAAeqH,OAAS,EAC3C,CAQA,SAASC,kBACLpF,WACAqF,OACAhG,KACAiG,OAEA,MAAMC,MAAQF,OAAOG,KAAMC,WAAcA,UAAUC,IAAItF,gBAAkBf,KAAKe,eAC9E,OAAOmF,aAAU,GAAaxF,iBAAiBC,WAAYuF,MAAOD,SAAW,IACjF,CAGO,SAASK,sBAAsBC,UAClC,MAAM3D,MAAQD,oBAAoB4D,UAClC3H,cAAcgE,MAAMkB,KAAM,uCAC1B,IAAKC,MAAMC,QAAQpB,MAAME,SAAU,CAC/B,MAAM,IAAI0D,UACN,qEAAqE3H,cAAc+D,MAAME,WAEjG,CACA,MAAMD,uBAAA,IAAc4D,IACpB,MAAMX,qBAAA,IAAYY,IAClB,IAAA,MAAWnG,UAAUqC,MAAME,QAAS,CAKhC,GAAIvC,SAAW,aAAeA,SAAW,SAAU,CAC/C,MAAM,IAAIiG,UACN,+EAA+E3H,cAAc0B,UAErG,CACA3B,cAAc2B,OAAO0E,KAAM,wCAC3BrG,cAAc2B,OAAOmC,KAAM,wCAC3B,GAAInC,OAAOkC,mBAAgB,EAAW,CAIlC,GAAIlC,OAAOkC,cAAgB,aAAelC,OAAOkC,cAAgB,SAAU,CACvE,MAAM,IAAI+D,UACN,2EAA2E3H,cAAc0B,OAAOkC,eAExG,CACA3D,uBACIyB,OAAOkC,YAAYgD,cACnB,6DAEJ3G,uBACIyB,OAAOkC,YAAY2C,mBACnB,kEAGJ,GACI7E,OAAOkC,YAAY+C,iBAAc,IAChCzB,MAAMC,QAAQzD,OAAOkC,YAAY+C,WACpC,CACE,MAAM,IAAIgB,UACN,oFAAoF3H,cAAc0B,OAAOkC,YAAY+C,aAE7H,CAKA,IAAA,MAAY9D,MAAOkE,YAAcrF,OAAOkC,YAAY+C,WAAa,IAAImB,UAAW,CAC5E,GAAIf,WAAa,aAAeA,WAAa,SAAU,CACnD,MAAM,IAAIY,UACN,yDAAyD9E,sCAAsC7C,cAAc+G,YAErH,CACAhH,cACKgH,SAAiCgB,MAClC,yDAAyDlF,eAEjE,CACJ,CACA,MAAMmF,eAAiBtG,OAAO0E,KAAKlE,cACnC,GAAI+E,MAAMgB,IAAID,gBAAiB,CAC3B,MAAM,IAAIL,UACN,4CAA4C7H,SAAS4B,OAAO0E,SAEpE,CACAa,MAAMiB,IAAIF,gBACVhE,QAAQmE,IAAIzG,OAAO0E,KAAMnI,mBAAmByD,QAChD,CAEA,MAAM0G,IAA0B,CAAA,EAChC,GAAIrE,MAAMG,gBAAa,EAAWkE,IAAIlE,SAAWH,MAAMG,SACvD,GAAIH,MAAMK,iBAAc,EAAWgE,IAAIhE,UAAYL,MAAMK,UACzD,GAAIL,MAAMO,iBAAc,EAAW8D,IAAI9D,UAAYP,MAAMO,UACzD,GAAIP,MAAMS,oBAAiB,EAAW4D,IAAI5D,aAAeT,MAAMS,aAC/D,GAAIT,MAAMW,aAAU,EAAW0D,IAAI1D,MAAQX,MAAMW,MACjD,GAAIX,MAAMa,mBAAgB,EAAWwD,IAAIxD,YAAcb,MAAMa,YAC7D,GAAIb,MAAMe,qBAAkB,EAAWsD,IAAItD,cAAgBf,MAAMe,cACjE,GAAIf,MAAMiB,oBAAiB,EAAWoD,IAAIpD,aAAe,IAAKjB,MAAMiB,cAEpE,IAAIqD,sBAAwB,MAC5B,MAAMC,SAAmC,GACzC,MAAMC,SAAWvJ,kBAAkB+E,MAAMkB,OAAOjB,SAAW,GAC3D,IAAImD,OACJ,IAAA,MAAYhG,KAAMO,UAAWsC,QAAS,CAIlC,GAAI9F,oBAAoBiD,OAAShD,oBAAoBuD,QAAS,SAE9D,MAAM0F,MAAQzI,sBAAsB+C,OAAOmC,KAAM,wCACjD,MAAM2E,SAAW9I,cAAcyB,OAAOY,KACtC,MAAM0G,SACFD,WAAa,QAAUA,WAAa,UAAYA,WAAa,aACvDD,SAASjB,KAAMC,WAAcA,UAAUpG,KAAKe,gBAAkBf,KAAKe,oBACnE,EAQV,MAAMwG,SACFD,gBAAa,IACZrB,QAAU,MAGPoB,WAAa,cACbtB,kBAAkBnD,MAAMkB,KAAOkC,SAAWH,WAAWjD,MAAMkB,MAAQ9D,KAAMiG,QACjF,GAAIA,QAAU,OAASsB,SAAU,SAEjC,GAAID,SAAU,CAIVzE,QAAQmE,IAAIhH,KAAM,CACdiF,KAAMjF,KACN0C,KAAM4E,SAASrH,UACXM,OAAOkE,UAAO,EAAY,CAAA,EAAK,CAAEA,GAAIlE,OAAOkE,OAC5ClE,OAAOoE,gBAAa,EAAY,CAAA,EAAK,CAAEA,SAAUpE,OAAOoE,aACxDpE,OAAOsE,cAAW,EAAY,CAAA,EAAK,CAAEA,OAAQtE,OAAOsE,UAE5DsC,SAAS5C,KAAK,CACViD,OAAQ,YACRxH,UACAyH,aAAclH,OAAOmC,KACrBgF,kBAAmBJ,SAASrH,QAEpC,KAAO,CACH4C,QAAQ8E,OAAO3H,MACfmH,SAAS5C,KAAK,CAAEiD,OAAQ,UAAWxH,UAAMyH,aAAclH,OAAOmC,MAClE,CACAwE,sBAAwB,IAC5B,CAKA,IAAA,MAAWI,YAAYF,SAAU,CAC7B,MAAMC,SAAW9I,cAAc+I,SAAStH,OAAOY,KAC/C,GACKyG,WAAa,QAAUA,WAAa,UAAYA,WAAa,cAC9DpK,cAAc4F,QAASyE,SAAStH,QAAU,KAC5C,CACE,QACJ,CACA,MAAMA,KAAO9C,SAAS2F,QAASyE,SAAStH,MACxC6C,QAAQmE,IAAIhH,KAAM,CAAEiF,KAAMjF,KAAM0C,KAAM4E,SAASrH,SAC/CkH,SAAS5C,KAAK,CACViD,OAAQ,YACRxH,UACAyH,aAAc,KACdC,kBAAmBJ,SAASrH,SAEhC,GAAIoH,WAAa,OAAQH,sBAAwB,IACrD,CACA,GAAIA,sBAAuB,QAChBD,IAAI5D,oBACJ4D,IAAI1D,aACJ0D,IAAIxD,mBACJwD,IAAItD,qBACJsD,IAAIpD,YACf,CAEA,MAAM+D,2BAAA,IAAkBnB,IACxB,MAAMoB,kCAAA,IAAyBpB,IAM/B,IAAA,MAAWlG,UAAUsC,QAAQsB,SAAU,CACnC,MAAMa,YAAczE,OAAOkC,YAC3B,MAAMqF,QAAUtF,wBAAwBjC,QACxC,MAAMwH,sBAAwBD,QAAU3K,sBAAsB2K,SAAW,KACzE,IAAIE,aAAeD,sBACnB,MAAME,yBACFH,SAASI,gCAA6B,UAC/BlD,aAAaI,qBAAuB,UAC3C0C,QAAQI,yBAAyBC,OAAOpH,gBACpCiE,YAAYI,mBAAmB+C,OAAOpH,cAC9C,GACI+G,SACAC,wBACCA,sBAAsBK,oBACtBH,yBACH,CACE,MAAQC,yBAA0BG,wBAAyBC,qBACvDR,QAEJ,MAAMS,oBAAsBvD,aAAaI,mBACzC,MAAMoD,sBACKD,sBAAwB,SACzB,IAAKD,oBAAqBJ,yBAA0BK,qBACpDD,oBAMVN,aAAe7K,sBAAsBmL,qBACrCT,mBAAmBb,IAAIzG,OAAO0E,KAAM,IAC5BD,aAAaQ,WAAa,MAC3BpI,0BAA0BoL,iBAErC,CACA,GAAIR,aAAcJ,YAAYZ,IAAIzG,OAAO0E,KAAM5H,iBAAiB2K,eAChE,MAAMS,qBACKzD,aAAaS,gBAAkB,UACtCnI,iCAAiCiD,OAAOmC,KAAMsC,YAAYS,eAC9D,GACIuC,cAAcI,0BAGPpD,aAAaS,gBAAkB,WACrCgD,cACH,CACE,QACJ,CAEA,MAAMC,oBAAsBhK,aACxBsG,YAAYS,cACZ,6DAEJ,MAAMkD,uBAAyBjK,aAC3BsG,YAAYI,mBACZ,kEAEJ,MAAMwD,SAAWlL,yBAAyB6C,OAAOmC,MACjD,MAAMmG,MAAQD,SAASzC,KAClBC,WACGA,UAAUgC,oBAAsB,MAChChC,UAAU0C,gBAAgB/H,gBAAkB2H,qBAC5CtC,UAAU2C,QAAU/D,YAAYU,OAChCU,UAAU8B,0BAA0BnH,gBAAkB4H,wBAE9D,MAAMK,aAAeJ,SAASzC,KACzBC,WACGA,UAAUgC,oBAAsB,MAChChC,UAAU0C,gBAAgB/H,gBAAkB2H,qBAC5CtC,UAAU2C,QAAU/D,YAAYU,OAChCU,UAAU8B,gCAA6B,GAE/C,MAAMjC,MAAQ4C,MACR1L,sBAAsB0L,OACtBG,cAAgBhE,YAAYI,0BAAuB,EACjDjI,sBAAsB,IACf6L,aACHd,yBAA0BlD,YAAYI,qBAE1C5H,sBAAsB+C,OAAOmC,KAAM,wCAC3C,GAAIuD,MAAO,CACP2B,YAAYZ,IAAIzG,OAAO0E,KAAM5H,iBAAiB,IAAK4I,MAAOmC,kBAAmB,OACjF,CACJ,CAEA,MAAO,CACHzH,WAAYiC,MAAMkB,KAClBjB,gBACA+E,wBACAC,sCACAZ,QACAgC,eAAgBtM,0BAA0BiG,OAC1CuE,SAAUpI,WAAWoI,UAE7B,CCrcA,IAAM+B,UAAyBC,OAAOC,OAAO,IAatC,SAASC,eAAkBvE,OAC9B,OAAOqE,OAAOC,OAAO,CAAEtE,YAAOwE,SAAU,KAAMC,OAAQL,WAC1D,CAGO,SAASM,iBACZD,QAEA,OAAOJ,OAAOC,OAAO,CACjBtE,MAAO,KACPwE,SAAU,MACVC,OAAQJ,OAAOC,OACXG,OAAO/H,IAAKiI,OACRN,OAAOC,OAAO,IACPK,SACCA,MAAM3J,OAAS,CAAEA,OAAQqJ,OAAOC,OAAO,IAAKK,MAAM3J,UAAc,CAAA,OAKxF,CC6BA,IAAM4J,OAAS,CACXC,WAAY,CAAC,iBAAkB,0BAC/BC,UAAW,CAAC,aAAc,6BAC1BC,gBAAiB,CAAC,kBAClBC,iBAAkB,CAAC,uBAAwB,gCAC3CC,gBAAiB,CAAC,uBAClBC,eAAgB,CAAC,sBACjBC,cAAe,CAAC,qBAChBC,oBAAqB,CAAC,mCACtBC,kBAAmB,CACf,wBACA,gCACA,kCAEJC,oBAAqB,CAAC,0BAA2B,oCAGrD,IAAMC,cAAgB,CAACpK,OAAgBqK,WACnCA,SAASnK,KAAMC,QAAWH,OAAOc,cAAcV,WAAWD,SAG9D,SAASmK,mBAAmBhK,OAAuB0F,OAC/C,OAAOA,OAAOjG,KACRiG,MAAMjG,OAAS,mBACfqK,cAAc9J,OAAOmC,KAAMgH,OAAOI,iBAC5C,CAGA,SAASU,aAAajK,OAAuB0F,OACzC,MAAMwE,OAASlM,cAAcgC,OAAO0E,MACpC,GAAIwF,QAAQ7J,OAAS,QAAU6J,OAAO1I,OAAS,aAAc,OAAO,KACpE,OAAOkE,OAAOjG,KACRiG,MAAMjG,OAAS,aACfqK,cAAc9J,OAAOmC,KAAMgH,OAAOC,WAC5C,CAGA,SAASe,WAAWnK,OAAuB0F,OACvC,MAAMwE,OAASlM,cAAcgC,OAAO0E,MACpC,GAAIwF,QAAQ7J,OAAS,QAAU6J,OAAO1I,OAAS,YAAa,OAAO,KACnE,OAAOkE,OAAOjG,KAAOiG,MAAMjG,OAAS,YAAcqK,cAAc9J,OAAOmC,KAAMgH,OAAOE,UACxF,CAGA,SAASe,kBAAkBpK,OAAuB0F,OAC9C,MAAMwE,OAASlM,cAAcgC,OAAO0E,MACpC,GAAIwF,QAAQ7J,OAAS,QAAU6J,OAAO1I,OAAS,kBAAmB,OAAO,KACzE,OAAOkE,OAAOjG,KACRiG,MAAMjG,OAAS,kBACfqK,cAAc9J,OAAOmC,KAAMgH,OAAOG,gBAC5C,CAGA,SAASe,UAAUrK,QACf,OAAOA,OAAOkE,KAAO,KACzB,CAGA,SAASoG,WAAWtK,QAEhB,OAAQA,OAAOoE,UAAY,GAAK,CACpC,CASA,SAASmG,cACLvK,OACAwK,MACA9E,OAEA,MAAM+E,OAASC,eAAe1K,OAAQwK,OACtC,GAAIC,cAAW,EAAW,OAAOA,OACjC,MAAME,KAAOjF,QAAQ8E,OACrB,cAAcG,OAAS,SAAWA,UAAO,CAC7C,CAWA,SAASD,eAAe1K,OAAuBwK,OAC3C,IAAA,MAAWI,SAASnN,eAAe+M,OAAQ,CACvC,GAAI9M,wBAAwBkN,SAAW,KAAM,SAC7C,MAAMC,SAAW1O,mBAAmB6D,OAAQ4K,OAC5C,GAAIC,WAAa,KAAM,OAAOA,SAAWrN,cAAcoN,MAC3D,CACA,YAAO,CACX,CAGA,SAASE,oBACL9K,OACAwK,MACA9E,OAEA,IAAA,MAAWkF,SAASnN,eAAe+M,OAAQ,CACvC,GAAI9M,wBAAwBkN,SAAW,KAAM,SAC7C,GACI5K,OAAOkC,aAAa+C,WAAWrF,KAC1ByF,UAAaA,SAASgB,MAAM7F,gBAAkBoK,MAAMpK,eAE3D,CACE,OAAO,IACX,CACJ,CACA,MAAMmK,KAAOjF,MAAM8E,OACnB,cAAcG,OAAS,UAAYA,UAAO,CAC9C,CAGA,SAASI,4BACL/K,OACA0F,OAEA,MAAMsF,WAAahL,OAAOkC,aAAa2C,mBACjCxH,sBAAsB2C,OAAOkC,YAAY2C,qBAAqBoG,wBAC9D,EACN,MAAMC,aAAuC,IACrCF,YAActF,MAAMuF,oBAE5B,IAAIE,SAAWH,kBAAe,GAAatF,MAAMuF,0BAAuB,EACxE,MAAMG,oBAAA,IAAWjF,IACjB,IAAA,MAAWd,YAAYrF,OAAOkC,aAAa+C,WAAa,GAAI,CACxD,MAAMoG,KAAO1N,mBAAmB0H,SAASgB,OACzC,GAAIgF,OAAS,MAAQD,KAAK7E,IAAI8E,MAAO,SACrCD,KAAK5E,IAAI6E,MACT,GAAIhG,SAASb,aAAU,EAAW,SAClC0G,aAAaG,MAAQhG,SAASb,MAAQhH,cAAc6H,SAASgB,OAC7D8E,SAAW,IACf,CACA,OAAOA,SAAYD,kBAAsC,CAC7D,CAGA,SAASI,eAAetL,QACpB,GACIA,OAAOkC,aAAa2C,oBACpBxH,sBAAsB2C,OAAOkC,YAAY2C,qBAAqBoG,mBAChE,CACE,OAAO,IACX,CACA,OAAQjL,OAAOkC,aAAa+C,WAAa,IAAIrF,KACxCyF,UAAa1H,mBAAmB0H,SAASgB,SAAW,KAE7D,CAMA,SAASkF,cACLvL,OACA0F,MACA8E,OAEA,MAAMG,KAAOjF,QAAQ8E,OACrB,UAAWG,OAAS,UAAYA,OAAS,EAAG,OAAO,EACnD,MAAMa,UAAYjB,cAAcvK,OAAQwK,MAAO9E,OAC/C,OAAO8F,iBAAc,EAAY,EAAIA,UAAYb,IACrD,CAaA,SAASc,YACLzL,OACA0F,MACA8E,MACAkB,OAEA,MAAMjB,OAASC,eAAe1K,OAAQwK,OACtC,GAAIC,cAAW,EAAW,OAAOA,OACjC,MAAME,KAAOjF,QAAQ8E,OACrB,cAAcG,OAAS,SAAWA,KAAOe,WAAQ,CACrD,CAMO,SAASC,gBACZ3L,OACA0F,OAEA,IAAKA,QAAU1F,OAAOkC,YAAa,OAAOwD,MAC1C,MAAMkG,OAAkC,IAAKlG,OAG7C,MAAMmG,OAAS,IAAI1F,IACfyC,OAAOkD,KAAKpG,QAIhB,IAAA,MAAWL,YAAYrF,OAAOkC,YAAY+C,WAAa,GAAI,CACvD,MAAMuF,MAAQjN,cAAc8H,SAASgB,MAAOX,OAC5C,GAAI8E,MAAOqB,OAAOrF,IAAIgE,MAC1B,CACA,IAAA,MAAW1E,OAAO+F,OAAQ,CACtB,MAAME,WAAajB,oBAAoB9K,OAAQ8F,IAAKJ,OACpD,GAAIqG,kBAAe,EAAW,CAC1BH,OAAO9F,KAAOiG,WACd,QACJ,CACA,MAAMxH,MAAQgG,cAAcvK,OAAQ8F,IAAKJ,OACzC,GAAInB,aAAU,EAAWqH,OAAO9F,KAAOvB,KAC3C,CACA,GAAImB,MAAMsG,mBAAqB,YAAa,CACxC,MAAMC,UAAYV,cAAcvL,OAAQ0F,MAAO,WAC/C,MAAMwG,QAAUT,YAAYzL,OAAQ0F,MAAO,UAAWuG,WACtD,MAAME,QAAUV,YAAYzL,OAAQ0F,MAAO,UAAWuG,WACtD,GAAIC,eAAY,EAAWN,OAAOM,QAAUA,QAC5C,GAAIC,eAAY,EAAWP,OAAOO,QAAUA,OAChD,CACA,GAAIzG,MAAMsG,mBAAqB,aAAetG,MAAMsG,mBAAqB,mBAAoB,CACzF,MAAMI,iBAAmBb,cAAcvL,OAAQ0F,MAAO,iBACtD,MAAM2G,cAAgBZ,YAAYzL,OAAQ0F,MAAO,gBAAiB0G,kBAClE,MAAME,cAAgBb,YAAYzL,OAAQ0F,MAAO,gBAAiB0G,kBAClE,GAAIC,qBAAkB,EAAWT,OAAOS,cAAgBA,cACxD,GAAIC,qBAAkB,EAAWV,OAAOU,cAAgBA,cACxD,GAAI5G,MAAMsG,mBAAqB,YAAa,CACxC,IAAA,MAAWxB,QAAS,CAChB,qBACA,qBACA,qBACA,wBACA,wBACA,yBACQ,CACR,MAAMjG,MAAQmB,MAAM8E,OACpB,GAAIjG,aAAU,EAAWqH,OAAOpB,OAASjG,MAAQ6H,gBACrD,CACJ,CACJ,CACA,MAAMnB,mBAAqBF,4BAA4B/K,OAAQ0F,OAC/D,GAAIuF,mBAAAW,OAA2BX,mBAAqBA,mBACpD,GAAIvF,MAAMhE,WAAa,YAAa6K,yBAAyBvM,OAAQ4L,QAGrE,GAAIN,eAAetL,QAAS,QACjB4L,OAAOY,gBAClB,MAAA,GAAW9G,MAAM8G,iBAAkB,CAC/BZ,OAAOY,iBAAmBxP,sBACtB0I,MAAM8G,iBACN9G,MAAM+G,cACCb,OAAOa,SAAW,SAAWb,OAAOa,YAAS,EAE5D,CACA,OAAOb,MACX,CAGO,SAASc,iBACZ1M,OACA0F,OAEA,MAAMiH,KAAOpC,cAAcvK,OAAQ,YAAa0F,OAChD,GAAIiH,YAAS,GAAaA,OAAS,EAAG,OAAO,KAG7C,MAAMC,QAAUlH,OAAOhE,WAAa,aAAegE,OAAOhE,WAAa,UACvE,MAAO,CACHiL,UACAxI,SAAUmG,WAAWtK,QACrB6M,QAASxC,UAAUrK,QACnB8M,aAAcF,SAAWlH,OAAOqH,gBAAkB,KAClDnC,MAAO5K,OAAO0E,KACdhF,OAAQM,OAAOmC,KAEvB,CAGO,SAAS6K,eACZ1K,QACA2K,UAEA,IAAA,MAAWjN,UAAUsC,QAAS,CAC1B,MAAMoD,MAAQuH,SAASjN,QAGvB,IAAKiK,aAAajK,OAAQ0F,OAAQ,SAClC,IAAK2E,UAAUrK,QAAS,OAAO,EAC/B,OAAOuK,cAAcvK,OAAQ,gBAAiB0F,QAAU,CAC5D,CACA,OAAO,CACX,CAKA,IAAMwH,aAAmE,CACrEC,cAAe,aACfC,eAAgB,aAChB/D,UAAW,cACXE,iBAAkB,oBAItB,IAAM8D,gBAAsE,CACxEhE,UAAW,iBACXG,gBAAiB,yBACjB2D,cAAe,iBACfC,eAAgB,kBAChB7D,iBAAkB,2BAItB,IAAM+D,eAAqE,CACvEH,cAAe,uCACfC,eAAgB,uCAChB/D,UAAW,uCACXE,iBAAkB,oDAItB,SAASgE,YACL/C,MACAgD,OACAxN,QAEA,MAAMyN,YAAcP,aAAa1C,OACjC,MAAM/K,KAAOO,QAAQ0E,MAAQ+I,YAC7B,MAAM/N,OAASM,QAAQmC,KACvB,MAAM5C,OAAS,CACXiL,YACAgD,iBACI/N,YAAS,EAAY,CAAA,EAAK,CAAEA,cAC5BC,cAAW,EAAY,CAAA,EAAK,CAAEA,gBAEtC,IAAIJ,QACJ,GAAIkO,SAAW,UAAW,CACtBlO,QAAUgO,eAAe9C,QAAU,+BACvC,MAAA,GAAWgD,SAAW,aAAc,CAChC,MAAME,YAAcL,gBAAgB7C,QAAUA,MAC9ClL,QAAU,GAAGlB,SAASqB,MAAQ+K,WAAWkD,+BAA+BtP,SAASsB,QAAU8K,QAC/F,MAAA,GAAWgD,SAAW,WAAY,CAC9BlO,QAAU,GAAGlB,SAASqB,MAAQ+K,WAAWpM,SAASsB,QAAU8K,wBAChE,MAAA,GAAWgD,SAAW,UAAW,CAC7BlO,QAAU,GAAGlB,SAASqB,MAAQ+K,WAAWpM,SAASsB,QAAU8K,sBAAsBA,OACtF,KAAO,CACHlL,QAAU,GAAGlB,SAASqB,MAAQ+K,WAAWpM,SAASsB,QAAU8K,iDAChE,CACA,MAAO,CACHA,YACAgD,iBACI/N,YAAS,EAAY,CAAA,EAAK,CAAEA,cAC5BC,cAAW,EAAY,CAAA,EAAK,CAAEA,eAClCJ,gBACAC,cAER,CAGA,SAASoO,mBACLrL,QACA2K,UAEA,IAAA,MAAWjN,UAAUsC,QAAS,CAC1B,MAAMoD,MAAQuH,SAASjN,QACvB,IAAKiK,aAAajK,OAAQ0F,OAAQ,SAClC,IAAK2E,UAAUrK,QAAM,OAAUuN,YAAY,gBAAiB,WAAYvN,QACxE,MAAM4N,SAAWrD,cAAcvK,OAAQ,gBAAiB0F,OACxD,GAAIkI,gBAAa,EAAW,OAAOL,YAAY,gBAAiB,aAAcvN,QAC9E,OAAQ6N,OAAOC,SAASF,WAAaA,UAAY,EAC3CL,YAAY,gBAAiB,UAAWvN,QACxC,IACV,CACA,OAAOuN,YAAY,gBAAiB,UACxC,CAGA,SAASQ,kBACLzL,QACA2K,UAEA,IAAA,MAAWjN,UAAUsC,QAAS,CAC1B,MAAM0L,SAAWtB,iBAAiB1M,OAAQiN,SAASjN,SACnD,GAAIgO,YAAcH,OAAOC,SAASE,SAASrB,OAASqB,SAASrB,KAAO,GAAI,CACpE,OAAOY,YAAY,YAAa,UAAWvN,OAC/C,CACJ,CACA,OAAO,IACX,CAGA,SAASiO,uBACLzD,MACAxK,OACA0F,MACApD,QACA4L,UACAjB,UAEA,IAAK5C,UAAUrK,QAAS,OAAOiJ,iBAAiB,CAACsE,YAAY/C,MAAO,WAAYxK,UAChF,MAAMmO,WAAaR,mBAAmBrL,QAAS2K,UAC/C,GAAIkB,WAAY,OAAOlF,iBAAiB,CAACkF,aACzC,MAAMC,UAAYL,kBAAkBzL,QAAS2K,UAC7C,GAAImB,UAAW,OAAOnF,iBAAiB,CAACmF,YACxC,MAAMC,OAASH,YACf,OAAOG,OAAOC,UAAY,GAAKC,cAAcvO,OAAQ0F,MAAO2I,QAAQG,UAC9D1F,eAAeuF,QACfpF,iBAAiB,CAACsE,YAAY/C,MAAO,OAAQxK,SACvD,CAGA,SAASyO,gCACLnM,QACA4L,UACAjB,UAEA,IAAA,MAAWjN,UAAUsC,QAAS,CAC1B,IAAKwH,cAAc9J,OAAOmC,KAAMgH,OAAOK,iBAAkB,SACzD,MAAM9D,MAAQuH,SAASjN,QACvB,MAAM0O,QAAUT,uBACZ,kBACAjO,OACA0F,MACApD,QACA4L,UACAjB,UAEJ,IAAKyB,QAAQ3F,SAAU,OAAO2F,QAC9B,OAAOhJ,QAAU,KACXuD,iBAAiB,CAACsE,YAAY,kBAAmB,aAAcvN,UAC/D8I,eAAe,CAAE9I,cAAQqO,OAAQK,QAAQnK,OACnD,CACA,OAAO0E,iBAAiB,CAACsE,YAAY,kBAAmB,YAC5D,CAWA,SAASoB,oBACLC,MAEA,MAAO,CACHC,kBAAmBD,KAAK,sBAAwB,EAChDE,kBAAmBF,KAAK,sBAAwB,EAChDG,oBAAqBH,KAAK,wBAA0B,EACpDI,kBAAmBJ,KAAK,sBAAwB,EAExD,CAMA,SAASK,cAAcjP,OAAuB0F,OAC1C,OAAOiJ,oBAAqBnE,OAAUD,cAAcvK,OAAQwK,MAAO9E,OACvE,CAGA,SAASwJ,eACL3O,KACA+B,QACA+L,OACApB,UAEA,IAAIkC,UAA0C,KAC9C,MAAMC,SAAkC,GACxC,IAAIC,cAAgB,EACpB,IAAA,MAAWrP,UAAUsC,QAAS,CAC1B,IAAK+H,UAAUrK,QAAS,SACxB,MAAM0F,MAAQuH,SAASjN,QACvB,KAAMqO,OAAOC,UAAY,GAAKC,cAAcvO,OAAQ0F,MAAO2I,QAAQG,WAAY,SAC/E,IAAKW,WAAarF,cAAc9J,OAAOmC,KAAMgH,OAAOK,iBAAkB,CAClE,MAAMyC,UAAYV,cAAcvL,OAAQ0F,MAAO,WAC/C,MAAM4J,cAAgB/D,cAAcvL,OAAQ0F,MAAO,iBACnD,MAAM6J,QAAUhF,cAAcvK,OAAQ,UAAW0F,OACjD,MAAMwG,QAAUT,YAAYzL,OAAQ0F,MAAO,UAAWuG,WAEtD,MAAME,QAAUV,YAAYzL,OAAQ0F,MAAO,UAAW8J,KAAKC,IAAI,EAAGxD,YAClE,MAAMyD,cAAgBnF,cAAcvK,OAAQ,gBAAiB0F,OAC7D,MAAM2G,cAAgBZ,YAAYzL,OAAQ0F,MAAO,gBAAiB4J,eAClE,MAAMhD,cAAgBb,YAAYzL,OAAQ0F,MAAO,gBAAiB4J,eAIlEH,UAAY,IACJI,eAAY,EAAY,CAAA,EAAK,CAAEA,oBAC/BrD,eAAY,EAAY,CAAA,EAAK,CAAEA,oBAC/BC,eAAY,EAAY,CAAA,EAAK,CAAEA,oBAC/BuD,qBAAkB,EAAY,CAAA,EAAK,CAAEA,gCACrCrD,qBAAkB,EAAY,CAAA,EAAK,CAAEA,gCACrCC,qBAAkB,EAAY,CAAA,EAAK,CAAEA,gCACtC2C,cAAcjP,OAAQ0F,OAEjC,MAAA,GAAWoE,cAAc9J,OAAOmC,KAAMgH,OAAOO,eAAgB,CACzD0F,SAASpL,KAAK,CACV2L,YAAapF,cAAcvK,OAAQ,cAAe0F,QAAU,KACzDuJ,cAAcjP,OAAQ0F,QAEjC,MAAA,GAAWoE,cAAc9J,OAAOmC,KAAMgH,OAAOQ,qBAAsB,CAC/D0F,eAAiB9E,cAAcvK,OAAQ,iBAAkB0F,QAAU,CACvE,CACJ,CAEA,MAAO,CACHkK,SAAUrP,KAAKqP,SACfC,mBAAoBtP,KAAKsP,mBACzBV,oBACAC,kBACAC,4BAER,CAGO,SAASS,qBACZvP,KACA+B,QACA4L,UACAjB,UAEA,MAAM8C,OAAStB,gCAAgCnM,QAAS4L,UAAWjB,UACnE,IAAK8C,OAAOhH,SAAU,OAAOgH,OAC7B,OAAOjH,eAAeoG,eAAe3O,KAAM+B,QAASyN,OAAOxL,MAAM8J,OAAQpB,UAC7E,CAaO,SAAS+C,8BACZzP,KACA+B,QACA4L,UACA+B,YACAhD,UAEA,MAAM8C,OAAStB,gCAAgCnM,QAAS4L,UAAWjB,UACnE,IAAK8C,OAAOhH,SAAU,OAAOgH,OAC7B,MAAM1B,OAAS0B,OAAOxL,MAAM8J,OAC5B,MAAM6B,UAAYC,0BAA0B7N,QAAS+L,OAAQpB,UAC7D,IAAKiD,UAAUnH,SAAU,OAAOmH,UAChC,MAAME,QAAUrU,cAAcmT,eAAe3O,KAAM+B,QAAS+L,OAAQpB,WACpE,OAAOnE,eAAe,CAClBuH,SAAUD,QAAQC,SAClBC,YAAaF,QAAQE,YACrBC,gBAAiBL,UAAU3L,MAAMgM,gBACjCC,gBAAiBN,UAAU3L,MAAMiM,gBACjCP,yBAER,CAaA,SAASE,0BACL7N,QACA+L,OACApB,UAEA,IAAIwD,YAAoC,KACxC,IAAA,MAAWzQ,UAAUsC,QAAS,CAC1B,MAAMoD,OAAQuH,SAASjN,QACvB,GACIgK,mBAAmBhK,OAAQ0F,SAC3B2E,UAAUrK,SACVqO,OAAOC,UAAY,GACnBC,cAAcvO,OAAQ0F,OAAO2I,QAAQG,UAErCiC,YAAczQ,MACtB,CACA,IAAKyQ,YAAa,OAAO3H,eAAe,CAAEyH,gBAAiB,EAAGC,gBAAiB,IAC/E,MAAM9K,MAAQuH,SAASwD,aACvB,MAAMF,gBAAkBhG,cAAckG,YAAa,kBAAmB/K,OACtE,MAAM8K,gBAAkBjG,cAAckG,YAAa,kBAAmB/K,OACtE,OAAO6K,uBAAoB,GAAaC,uBAAoB,EACtDvH,iBAAiB,CAACsE,YAAY,mBAAoB,aAAckD,eAChE3H,eAAe,CAAEyH,gCAAiBC,iCAC5C,CAWA,SAASE,iBACL1Q,OACA0F,OAEA,MAAM8F,UAAYG,gBAAgB3L,OAAQ0F,OAC1C,MAAMwG,QAAUV,WAAWU,QAC3B,MAAMqD,QAAU/D,WAAW+D,QAC3B,MAAMpD,QAAUX,WAAWW,QAC3B,MAAME,cAAgBb,WAAWa,cACjC,MAAMqD,cAAgBlE,WAAWkE,cACjC,MAAMpD,cAAgBd,WAAWc,cACjC,GACIJ,eAAY,GACZqD,eAAY,GACZpD,eAAY,GACZE,qBAAkB,GAClBqD,qBAAkB,GAClBpD,qBAAkB,EACpB,CACE,OAAO,IACX,CACA,MAAO,CACHJ,gBACAqD,gBACApD,gBACAE,4BACAqD,4BACApD,+BACId,WAAWmF,0BAAuB,EAChC,CAAA,EACA,CACIC,WAAY,CACR1E,gBACAqD,gBACApD,gBACAE,cAAeb,UAAUqF,oBAAsBxE,cAC/CqD,cAAelE,UAAUmF,mBACzBrE,cAAed,UAAUsF,oBAAsBxE,mBAGzDd,WAAWuF,6BAA0B,EACnC,CAAA,EACA,CACIC,cAAe,CACX9E,gBACAqD,gBACApD,gBACAE,cAAeb,UAAUyF,uBAAyB5E,cAClDqD,cAAelE,UAAUuF,sBACzBzE,cAAed,UAAU0F,uBAAyB5E,gBAIxE,CAcO,SAAS6E,wBACZ7O,QACA2K,UAEA,IAAA,MAAWjN,UAAUsC,QAAS,CAC1B,MAAMoD,MAAQuH,SAASjN,QACvB,GAAImK,WAAWnK,OAAQ0F,OAAQ,OAAOgL,iBAAiB1Q,OAAQ0F,MACnE,CACA,OAAO,IACX,CAGO,SAAS0L,uBACZ7Q,KACA+B,QACA4L,UACAmD,KACApE,UAEA,IAAI5D,UAAmC,KACvC,IAAA,MAAWrJ,UAAUsC,QAAS,CAC1B,MAAMoD,MAAQuH,SAASjN,QACvB,IAAKmK,WAAWnK,OAAQ0F,OAAQ,SAChC,MAAMgJ,QAAUT,uBACZ,YACAjO,OACA0F,MACApD,QACA4L,UACAjB,UAEJ,IAAKyB,QAAQ3F,SAAU,OAAO2F,QAC9BrF,UAAYqH,iBAAiB1Q,OAAQ0F,OACrC,IAAK2D,UAAW,OAAOJ,iBAAiB,CAACsE,YAAY,YAAa,aAAcvN,UAChF,KACJ,CACA,IAAKqJ,UAAW,OAAOJ,iBAAiB,CAACsE,YAAY,YAAa,aAClE,OAAOzE,eAAe,CAClBwI,aAAc/Q,KAAK+Q,aACnBC,aAAchR,KAAKgR,aACnBC,MAAOjR,KAAKiR,MACZC,SAAUlR,KAAKkR,SACfC,MAAOnR,KAAKmR,MACZC,QAASpR,KAAKoR,QACdC,KAAMrR,KAAKqR,KACXC,OAAQtR,KAAKsR,OACbC,IAAKvR,KAAKuR,IACVT,YAAaA,OAAS,WAAaA,OAASA,KAC5ChI,qBAER,CAGO,SAAS0I,6BACZxR,KACA+B,QACA4L,UACA+B,YACAhD,UAEA,MAAMkC,UAAYV,gCAAgCnM,QAAS4L,UAAWjB,UACtE,IAAKkC,UAAUpG,SAAU,OAAOoG,UAChC,MAAQnP,OAAQgS,gBAAA3D,OAAiBA,QAAWc,UAAU5K,MACtD,MAAM0N,eAAiBhF,SAAS+E,iBAOhC,MAAME,gBAAkB3H,cAAcyH,gBAAiB,kBAAmBC,gBAC1E,MAAME,UAAY5H,cAAcyH,gBAAiB,kBAAmBC,gBACpE,MAAMG,gBAAkB7H,cAAcyH,gBAAiB,wBAAyBC,gBAChF,GAAIC,uBAAoB,GAAaC,iBAAc,GAAaC,uBAAoB,EAAW,CAC3F,OAAOnJ,iBAAiB,CAACsE,YAAY,kBAAmB,aAAcyE,kBAC1E,CACA,MAAM9B,UAAYC,0BAA0B7N,QAAS+L,OAAQpB,UAC7D,IAAKiD,UAAUnH,SAAU,OAAOmH,UAChC,MAAMG,SAAWtU,cAAcmT,eAAe3O,KAAM+B,QAAS+L,OAAQpB,WAAWoD,SAChF,OAAOvH,eAAe,CAClBuH,kBACA8B,oBACAC,gCACAF,gCACA3B,gBAAiBL,UAAU3L,MAAMgM,gBACjCC,gBAAiBN,UAAU3L,MAAMiM,gBACjCP,yBAER,CAGO,SAASoC,yBACZ/P,QACAgQ,YACAjE,OACApB,UAEA,IAAIsF,gBAAkB,EACtB,IAAIC,gBAAkB,EACtB,IAAIC,yBAA2B,EAC/B,IAAA,MAAWzS,UAAUsC,QAAS,CAC1B,IAAK+H,UAAUrK,QAAS,SACxB,MAAM0F,MAAQuH,SAASjN,QACvB,IAAKuO,cAAcvO,OAAQ0F,MAAO2I,QAAQqE,SAAU,SACpD,GAAI1I,mBAAmBhK,OAAQ0F,OAAQ,CACnC6M,gBAAkBhI,cAAcvK,OAAQ,kBAAmB0F,QAAU,EACrE8M,gBAAkBjI,cAAcvK,OAAQ,kBAAmB0F,QAAU,CACzE,CACA,MAAMiN,OAASC,eAAe5S,OAAQ0F,OACtC,GAAIiN,OAAQ,CACRF,0BAA4B3W,cAAc6W,QAAQF,wBACtD,CACJ,CACA,MAAO,CAAEF,gCAAiBC,gCAAiBC,kDAA0BH,wBACzE,CAaO,SAASO,0BACZvQ,QACAwQ,KAKAzE,OACApB,UAEA,IAAI8F,SAAiC,KACrC,IAAA,MAAW/S,UAAUsC,QAAS,CAC1B,MAAMoD,MAAQuH,SAASjN,QACvB,IAAKgK,mBAAmBhK,OAAQ0F,OAAQ,SACxC,IAAK2E,UAAUrK,QAAS,CACpB+S,WAAa/S,OACb,QACJ,CACA,IAAKuO,cAAcvO,OAAQ0F,MAAO2I,QAAQG,UAAW,CACjD,OAAOvF,iBAAiB,CAACsE,YAAY,mBAAoB,OAAQvN,SACrE,CACA,MAAMuQ,gBAAkBhG,cAAcvK,OAAQ,kBAAmB0F,OACjE,MAAM8K,gBAAkBjG,cAAcvK,OAAQ,kBAAmB0F,OACjE,MAAMsN,gBAAkBzI,cAAcvK,OAAQ,kBAAmB0F,OACjE,MAAMuN,gBAAkB1I,cAAcvK,OAAQ,kBAAmB0F,OACjE,MAAM6M,gBAAkBhI,cAAcvK,OAAQ,kBAAmB0F,OACjE,MAAM8M,gBAAkBjI,cAAcvK,OAAQ,kBAAmB0F,OACjE,GACI6K,uBAAoB,GACpBC,uBAAoB,GACpBwC,uBAAoB,GACpBC,uBAAoB,GACpBV,uBAAoB,GACpBC,uBAAoB,EACtB,CACE,OAAOvJ,iBAAiB,CAACsE,YAAY,mBAAoB,aAAcvN,SAC3E,CACA,OAAO8I,eAAe,CAClByH,gCACAC,gCACAwC,gCACAC,gCACAV,gCACAC,mCACGM,MAEX,CACA,OAAO7J,iBAAiB,CACpB8J,WAAa,KACPxF,YAAY,mBAAoB,WAChCA,YAAY,mBAAoB,WAAYwF,WAE1D,CAYO,SAASG,mBACZ3S,KACA+B,QACA+L,OACApB,UAEA,IAAIkG,MAA8B,KAClC,IAAI/F,eACJ,IAAIgG,iBAAmB,EACvB,IAAIC,yBAA2B,EAC/B,IAAIC,YAAc,EAClB,IAAIf,gBAAkB,EACtB,MAAMgB,QAAwB,GAE9B,IAAA,MAAWvT,UAAUsC,QAAS,CAC1B,MAAMoD,MAAQuH,SAASjN,QACvB,GAAIiK,aAAajK,OAAQ0F,OAAQ,CAE7B,IAAK2E,UAAUrK,QAAS,CACpB,OAAOiJ,iBAAiB,CAACsE,YAAY,gBAAiB,WAAYvN,SACtE,CACAmT,MAAQnT,OACRoN,eAAiB7C,cAAcvK,OAAQ,iBAAkB0F,OACzD,QACJ,CACA,IAAK2E,UAAUrK,QAAS,SACxB,MAAMwT,QAAUjF,cAAcvO,OAAQ0F,MAAO2I,QAC7C,GAAIlE,WAAWnK,OAAQ0F,OAAQ,CAC3B,MAAM+N,KAAOlJ,cAAcvK,OAAQ,iBAAkB0F,QAAU,EAC/D,GAAI8N,QAAQhF,UAAW4E,kBAAoBK,KAC3C,GAAID,QAAQd,SAAUW,0BAA4BI,IACtD,MAAA,GAAWrJ,kBAAkBpK,OAAQ0F,OAAQ,CAEzC,GAAI8N,QAAQhF,UAAW8E,aAAe/I,cAAcvK,OAAQ,cAAe0F,QAAU,CACzF,MAAA,GAAWsE,mBAAmBhK,OAAQ0F,OAAQ,CAE1C,GAAI8N,QAAQd,SAAU,CAClBH,gBAAkBhI,cAAcvK,OAAQ,kBAAmB0F,QAAU,CACzE,CACJ,CACA,MAAMiN,OAASC,eAAe5S,OAAQ0F,OAEtC,IAAK8N,QAAQd,SAAU,SACvB,IAAKC,OAAQ,SACbY,QAAQvP,KAAK,CACT0P,cAAe5X,cAAc6W,QAAQgB,uBACrCzB,gBAAiBS,OAAOT,iBAAmB,GAEnD,CACA,GAAI9E,sBAAmB,EAAW,CAC9B,OAAOnE,iBAAiB,CACpBkK,QAAU,KACJ5F,YAAY,gBAAiB,WAC7BA,YAAY,iBAAkB,aAAc4F,QAE1D,CAEA,OAAOrK,eAAe,CAClB8K,aAAcrT,KAAKqT,aACnBC,gBAAiBtT,KAAKsT,gBACtBzG,8BACA0G,mBAAoBC,YAAY1F,OAAQ,aACxC2F,kBAAmBD,YAAY1F,OAAQ,YACvC+E,kCACAC,kDACAC,wBACAf,gCACAgB,iBAER,CAGA,SAASQ,YAAY1F,OAAqB4F,OACtC,MAAMvF,QAAUuF,QAAU,YAAc,mBAAqB,kBAC7D,OAAO5F,OAAO6F,MAAMC,OAAO,CAACC,MAAOC,OAAUA,KAAK3F,SAAW0F,MAAQC,KAAKJ,OAASG,MAAQ,EAC/F,CAQA,SAAS7F,cACLvO,OACA0F,MACA2I,QAEA,MAAM1B,KAAOpC,cAAcvK,OAAQ,YAAa0F,OAChD,GAAIiH,YAAS,GAAaA,OAAS,EAAA,MAAU,CAAE6B,UAAW,KAAMkE,SAAU,MAC1E,MAAM2B,KAAOhG,OAAO6F,MAAM1E,KAAK8E,IAAIjG,OAAO6F,MAAMnQ,OAAQyL,KAAKC,IAAI,EAAGnF,WAAWtK,UAAY,GAC3F,IAAKqU,KAAM,MAAO,CAAE7F,UAAW,KAAMkE,SAAU,MAC/C,MAAO,CAAElE,UAAW6F,KAAKE,iBAAkB7B,SAAU2B,KAAKG,gBAC9D,CAGO,SAASC,kBACZnS,QACA+L,OACApB,UAEA,MAAMyH,MAAyB,GAC/B,IAAA,MAAW1U,UAAUsC,QAAS,CAC1B,IAAKwH,cAAc9J,OAAOmC,KAAMgH,OAAOM,gBAAiB,SACxD,MAAM/D,MAAQuH,SAASjN,QACvB,MAAMwL,UAAYG,gBAAgB3L,OAAQ0F,OAC1C,MAAMiP,WAAanJ,UAAYzN,mBAAmByN,WAAa,KAC/DkJ,MAAM1Q,KAAK,CACPvE,KAAMO,OAAO0E,KACbhF,OAAQM,OAAOmC,KACfyS,kBAAmBpJ,WAAWqJ,yBAA2B,EACzDC,MAAOH,YAAYP,OAAS,EAC5BW,OAAQvJ,WAAWwJ,kBAAoB,EACvCC,SAAUzJ,WAAW0J,oBAAsB,EAC3CzB,KAAMjI,WAAW2J,gBAAkB,EACnCzG,QACIL,OAAOC,UAAY,GACnBjE,UAAUrK,SACVuO,cAAcvO,OAAQ0F,MAAO2I,QAAQqE,UAEjD,CACA,OAAOgC,KACX,CAMA,SAASU,cAAc7U,MACnB,MAAM8H,SAAWnL,oBAAoBqD,KAAKE,KAAMrD,cAGhD,OACIiL,SAASzC,KAAMyP,GAAMA,EAAE3V,OAAOc,cAAc8U,SAAS,cACrDjN,SAASzC,KAAMyP,GAAMA,EAAEhE,OAAS,IAChChJ,SAAS,IACT,IAER,CAGO,SAASkN,eACZhV,KACA+B,QACA2K,UAEA,MAAMuI,eAA4C,GAClD,MAAMC,qBAAoD,GAC1D,IAAIC,SAAkC,KAEtC,IAAA,MAAW1V,UAAUsC,QAAS,CAC1B,IAAK+H,UAAUrK,QAAS,SACxB,MAAM0F,MAAQuH,SAASjN,QAGvB,GAAIA,OAAO0E,KAAKlE,gBAAkB,SAAU,CACxCkV,SAAW,CACPC,UAAWpL,cAAcvK,OAAQ,YAAa0F,QAAU,KACrDuJ,cAAcjP,OAAQ0F,OAEjC,MAAA,GAAWoE,cAAc9J,OAAOmC,KAAMgH,OAAOS,mBAAoB,CAI7D,MAAM4H,MAAQrV,mBAAmB6D,OAAQ,mCACzCwV,eAAexR,KAAK,CAChB4F,kBAAmBW,cAAcvK,OAAQ,oBAAqB0F,QAAU,EACxEiQ,UACInE,QAAU,KAAO,EAAIA,MAAQhU,cAAc,sCAC5CyR,cAAcjP,OAAQ0F,QAEjC,MAAA,GAAWoE,cAAc9J,OAAOmC,KAAMgH,OAAOU,qBAAsB,CAC/D4L,qBAAqBzR,KAAK,CACtB4R,iBAAkBrL,cAAcvK,OAAQ,mBAAoB0F,QAAU,EACtEmQ,UAAWtL,cAAcvK,OAAQ,YAAa0F,QAAU,GAEhE,CACJ,CAEA,IAAKgQ,SAAU,CACX,MAAMI,MAAQV,cAAc7U,MAC5BmV,SAAWI,MACL,CACIH,UAAWG,MAAMH,WAAa,KAC3BhH,oBAAqBnE,OAAUsL,MAAMtL,SAE5C,IACV,CAEA,MAAO,CACHuL,WAAYxV,KAAKwV,WACjBL,kBACAF,8BACAC,0CAER,CAGA,IAAMO,cAAgB,CAClB,SACA,gBACA,aACA,gBACA,cACA,kBACA,aACA,WACA,cACA,aACA,kBACA,cACA,YACA,eACA,eACA,kBAsBG,SAASpD,eACZ5S,OACA0F,OAEA,IAAKA,OAASA,MAAMhE,WAAa,YAAa,OAAO,KACrD,MAAMiR,OAAkC,CAAA,EACxC,IAAA,MAAWnI,SAASwL,cAAe,CAC/B,MAAMzR,MAAQgG,cAAcvK,OAAQwK,MAAO9E,OAC3C,GAAInB,aAAU,EAAWoO,OAAOnI,OAASjG,KAC7C,CAEAgI,yBAAyBvM,OAAQ2S,QAEjC,MAAM1H,mBAAqBF,4BAA4B/K,OAAQ0F,OAC/D,GAAIuF,mBAAA0H,OAA2B1H,mBAAqBA,mBACpD,GAAIvF,MAAM8G,mBAAqBlB,eAAetL,QAAS,CACnD2S,OAAOnG,iBAAmBxP,sBACtB0I,MAAM8G,iBACN9G,MAAM+G,cACCkG,OAAOlG,SAAW,SAAWkG,OAAOlG,YAAS,EAE5D,CACA,GAAI/G,MAAMuQ,gBAAiBtD,OAAOsD,gBAAkB,IAAKvQ,MAAMuQ,iBAC/D,OAAOtD,MACX,CAgBA,SAASuD,wBACLlW,OACA2S,QAEA,GAAIxW,mBAAmB6D,OAAQ,gBAAkB,KAAM,YAAO,EAC9D,MAAMgF,UAAYhF,OAAOkC,aAAa+C,UACtC,MAAMkR,QAAUvY,qBAAqBgC,KAChCgL,OAAUzO,mBAAmB6D,OAAQ4K,SAAW,MAErD,IAAKuL,QAAS,YAAO,EACrB,MAAM1L,OAAS,CAACG,MAAeJ,QAC3B1M,gBAAgBkH,UAAW4F,QAAW+H,OAAOnI,OACjD,OAAO3M,kBACH4M,OAAO,gBAAiB,iBACxBA,OAAO,YAAa,eACpBA,OAAO,kBAAmB,mBAElC,CAGA,IAAM2L,mBAAqB,CACvB,aACA,kBACA,YACA,gBACA,gBACA,UAkBJ,SAASC,yBAAyBrW,QAC9B,OACI7D,mBAAmB6D,OAAQ,YAAc,MACzCoW,mBAAmBE,MAAO1L,OAAUzO,mBAAmB6D,OAAQ4K,SAAW,KAElF,CAWA,SAAS2B,yBAAyBvM,OAAuB2S,QACrD,MAAM4D,KAAOL,wBAAwBlW,OAAQ2S,QAC7C,GAAI4D,YAAS,EAAW5D,OAAO6D,WAAaD,KAE5C,GAAIF,yBAAyBrW,QAAS,CAClC,MAAMyW,sBAAwBta,mBAAmB6D,OAAQ,mBACzD,MAAM0W,aAAe7I,OAAO8E,OAAOgE,eAAiB,GAAK9I,OAAO8E,OAAO6D,YAAc,GACrF,GAAIC,wBAA0B,MAAQC,aAAe,EAAG,CACpD/D,OAAOlG,OAASgK,sBAAwBC,YAC5C,CACJ,CAEA,MAAME,aAAEA,aAAAC,aAAcA,cAAiBlE,OACvC,GAAIiE,oBAAiB,GAAaC,oBAAiB,GAAaA,aAAeD,aAAc,CACzFjE,OAAOkE,aAAeD,YAC1B,CACJ,CCxuCA,IAAME,yBAAA,IAAgBC,QAGf,SAASC,wBAAwBC,MAAeC,WACnDJ,UAAUrQ,IAAIwQ,MAAOC,UACzB,CAeO,SAASC,iBAAiBF,MAAgBrM,OAC7C,MAAMsM,iBACKD,QAAU,UAAYA,QAAU,KAAOH,UAAUM,IAAIH,YAAS,EACzE,GAAIC,iBAAc,EAAW,CACzB,MAAM,IAAIjR,UAAU,GAAG2E,yCAAyCtM,cAAc2Y,SAClF,CACA,OAAOC,SACX,QAAA3B,eAAAd,kBAAA3L,eAAA+J,0BAAAlH,gBAAAwF,wBAAA+B,mBAAAjK,iBAAAkO,iBAAA/F,uBAAApP,eAAA7B,iBAAA4F,sBAAAiH,eAAAN,iBAAAzK,wBAAA+U,wBAAAhH,8BAAAF,qBAAAiC,6BAAAa,eAAAP"}
|