@shipload/sdk 1.0.0-next.1 → 1.0.0-next.11
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/lib/shipload.d.ts +618 -353
- package/lib/shipload.js +2250 -1059
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +2193 -1044
- package/lib/shipload.m.js.map +1 -1
- package/package.json +2 -2
- package/src/capabilities/modules.ts +3 -0
- package/src/capabilities/storage.ts +1 -1
- package/src/contracts/platform.ts +13 -1
- package/src/contracts/server.ts +227 -282
- package/src/data/capabilities.ts +5 -330
- package/src/data/capability-formulas.ts +70 -0
- package/src/data/catalog.ts +0 -5
- package/src/data/colors.ts +2 -16
- package/src/data/entities.json +46 -10
- package/src/data/item-ids.ts +4 -1
- package/src/data/items.json +264 -0
- package/src/data/metadata.ts +63 -1
- package/src/data/recipes-runtime.ts +1 -0
- package/src/data/recipes.json +139 -11
- package/src/derivation/capability-mappings.ts +122 -0
- package/src/derivation/index.ts +1 -0
- package/src/derivation/resources.ts +116 -37
- package/src/derivation/stats.ts +1 -2
- package/src/entities/container.ts +25 -10
- package/src/entities/extractor.ts +144 -0
- package/src/entities/factory.ts +135 -0
- package/src/entities/gamestate.ts +0 -9
- package/src/entities/makers.ts +130 -20
- package/src/entities/nexus.ts +29 -0
- package/src/entities/ship-deploy.ts +114 -56
- package/src/entities/ship.ts +17 -0
- package/src/entities/slot-multiplier.ts +21 -0
- package/src/entities/warehouse.ts +20 -3
- package/src/errors.ts +10 -13
- package/src/index-module.ts +81 -26
- package/src/managers/actions.ts +53 -80
- package/src/managers/entities.ts +65 -17
- package/src/managers/locations.ts +2 -20
- package/src/nft/atomicdata.ts +128 -0
- package/src/nft/description.ts +41 -7
- package/src/nft/index.ts +1 -0
- package/src/resolution/resolve-item.ts +17 -9
- package/src/scheduling/accessor.ts +4 -0
- package/src/scheduling/projection.ts +10 -2
- package/src/scheduling/schedule.ts +15 -1
- package/src/scheduling/task-cargo.ts +47 -0
- package/src/subscriptions/connection.ts +50 -2
- package/src/subscriptions/manager.ts +84 -4
- package/src/subscriptions/mappers.ts +5 -1
- package/src/subscriptions/types.ts +2 -2
- package/src/travel/travel.ts +61 -2
- package/src/types/entity-traits.ts +103 -1
- package/src/types.ts +11 -1
- package/src/utils/cargo.ts +27 -0
- package/src/utils/system.ts +25 -24
package/lib/shipload.m.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
|
-
import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt8, Int64,
|
|
2
|
+
import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt16, UInt8, Int64, TimePoint, Bytes, Int32, Checksum512, APIClient } from '@wharfkit/antelope';
|
|
3
3
|
import ContractKit, { Contract as Contract$2 } from '@wharfkit/contract';
|
|
4
4
|
|
|
5
|
-
const abiBlob$1 = Blob.from('
|
|
5
|
+
const abiBlob$1 = Blob.from('DmVvc2lvOjphYmkvMS4yAA4KY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/C2NvbXBhbnlfcm93AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAxzZXRlcG9jaHRpbWUAAghjb250cmFjdARuYW1lCWVwb2NodGltZQZ1aW50MzIJc3RhcnRnYW1lAAQIY29udHJhY3QEbmFtZQZjb25maWcLZ2FtZV9jb25maWcEbWV0YQlnYW1lX21ldGEFc3RhdGUKZ2FtZV9zdGF0ZQlzdGF0ZV9yb3cAAQdlbmFibGVkBGJvb2wKdXBkYXRlZ2FtZQACCGNvbnRyYWN0BG5hbWUEbWV0YQlnYW1lX21ldGEEd2lwZQAACACAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAqHjMVAZlbmFibGXzAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ0VuYWJsZS9kaXNhYmxlIHBsYXRmb3JtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhlIHBsYXRmb3JtIGNvbnRyYWN0LgCAkoapeMxUCmVuYWJsZWdhbWX8AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGVnYW1lCnN1bW1hcnk6ICdFbmFibGUvZGlzYmFibGUgYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LuCnqZKiNDVdDGZvdW5kY29tcGFueYMCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGZvdW5kY29tcGFueQpzdW1tYXJ5OiAnRm91bmQgYSBuZXcgY29tcGFueScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkZvdW5kIGEgbmV3IGNvbXBhbnkgaW4gdGhlIFNoaXBsb2FkIHBsYXRmb3JtIGNvbnRyYWN0LqCkyw3RqrLCDHNldGVwb2NodGltZQAAAFDSsHxNxglzdGFydGdhbWX/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdGFydGdhbWUKc3VtbWFyeTogJ1N0YXJ0IGEgbmV3IGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpTdGFydCBhIG5ldyBnYW1lIG9mIFNoaXBsb2FkIGRlcGxveWVkIHRvIGEgbmV3IGNvbnRyYWN0LgCAkoapbFLVCnVwZGF0ZWdhbWWNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVnYW1lCnN1bW1hcnk6ICdVcGRhdGUgZ2FtZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LgoKLS0tAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQMAAADAT1MlRQNpNjQAAAtjb21wYW55X3JvdwAAAAAArKRhA2k2NAAACGdhbWVfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93ARNTaGlwbG9hZCAoUGxhdGZvcm0pE1NoaXBsb2FkIChQbGF0Zm9ybSkAAAAA');
|
|
6
6
|
const abi$1 = ABI.from(abiBlob$1);
|
|
7
7
|
var Types$1;
|
|
8
8
|
(function (Types) {
|
|
@@ -129,6 +129,18 @@ var Types$1;
|
|
|
129
129
|
Struct.type('game_row')
|
|
130
130
|
], game_row);
|
|
131
131
|
Types.game_row = game_row;
|
|
132
|
+
let setepochtime = class setepochtime extends Struct {
|
|
133
|
+
};
|
|
134
|
+
__decorate([
|
|
135
|
+
Struct.field(Name)
|
|
136
|
+
], setepochtime.prototype, "contract", void 0);
|
|
137
|
+
__decorate([
|
|
138
|
+
Struct.field(UInt32)
|
|
139
|
+
], setepochtime.prototype, "epochtime", void 0);
|
|
140
|
+
setepochtime = __decorate([
|
|
141
|
+
Struct.type('setepochtime')
|
|
142
|
+
], setepochtime);
|
|
143
|
+
Types.setepochtime = setepochtime;
|
|
132
144
|
let startgame = class startgame extends Struct {
|
|
133
145
|
};
|
|
134
146
|
__decorate([
|
|
@@ -205,27 +217,63 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
205
217
|
Contract: Contract$1
|
|
206
218
|
});
|
|
207
219
|
|
|
208
|
-
const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDiDAQlhZGRtb2R1bGUABQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4D21vZHVsZV9jYXJnb19pZAZ1aW50NjQPdGFyZ2V0X2NhcmdvX2lkBnVpbnQ2NAhhZGRuZXh1cwADCm5leHVzX25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAdhZHZhbmNlAAIGcmV2ZWFsBnN0cmluZwZjb21taXQLY2hlY2tzdW0yNTYFYmxlbmQAAwtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAZpbnB1dHMMY2FyZ29faXRlbVtdBmNhbmNlbAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpjYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNhcmdvX3JvdwAGAmlkBnVpbnQ2NAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQxjbGFpbXN0YXJ0ZXIAAwdhY2NvdW50BG5hbWUBeAVpbnQ2NAF5BWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAxtb2R1bGVfaXRlbXMIdWludDE2W10MbW9kdWxlX3N0YXRzCHVpbnQ2NFtdBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMAAgt3YXJlaG91c2VfegZ1aW50MTYLY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABkEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPw1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdC2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAQGc291cmNlCmVudGl0eV9yZWYLZGVzdGluYXRpb24KZW50aXR5X3JlZgdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAADGdldGl0ZW10eXBlcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQLZ2V0bW9kdHlwZXMAAApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OApnZXRyZXNjYXRzAAALZ2V0cmVzZXJ2ZXMAAgF4BWludDY0AXkFaW50NjQMZ2V0cmVzb3VyY2VzAAAIZ2V0c2xvdHMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQABAdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4CHF1YW50aXR5BnVpbnQzMhByZWNpcGVfaXRlbV9pbmZvAAICaWQGdWludDE2BG1hc3MGdWludDMyD3JlY2lwZV9yZXNwb25zZQAHDm91dHB1dF9pdGVtX2lkBnVpbnQxNgtvdXRwdXRfbWFzcwZ1aW50MzIGaW5wdXRzDnJlY2lwZV9pbnB1dFtdCnN0YXRfc2xvdHMUc3RhdF9zbG90X3Jlc3BvbnNlW10NYmxlbmRfd2VpZ2h0cwVieXRlcwtvdXRwdXRfaXRlbRByZWNpcGVfaXRlbV9pbmZvC2lucHV0X2l0ZW1zEnJlY2lwZV9pdGVtX2luZm9bXQ5yZWNpcGVzX3Jlc3VsdAABB3JlY2lwZXMRcmVjaXBlX3Jlc3BvbnNlW10LcmVzZXJ2ZV9yb3cABAJpZAZ1aW50NjQIY29vcmRfaWQGdWludDY0B3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwhzbG90X2RlZgABBHR5cGUFdWludDgKc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXducGFja2VkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAlpbnN0YWxsZWQPcGFja2VkX21vZHVsZVtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQFc3RhdHMGdWludDY0EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAYHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NAVzaGlwcwZ1aW50MzIEc2VlZAtjaGVja3N1bTI1NgZjb21taXQLY2hlY2tzdW0yNTYMc3RyYXR1bV9kYXRhAAIHc3RyYXR1bQxzdHJhdHVtX2luZm8Fc3RhdHMOcmVzb3VyY2Vfc3RhdHMMc3RyYXR1bV9pbmZvAAUHaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQIcmljaG5lc3MGdWludDE2B3Jlc2VydmUGdWludDMyC3Jlc2VydmVfbWF4BnVpbnQzMhFzdHJhdHVtX3JlbWFpbmluZwACB3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABAJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8Ed2FycAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAp3YXJwX3N0YXRzAAEFcmFuZ2UGdWludDMyBHdpcGUAAAx3aXBlc2VxdWVuY2UAAAR3cmFwAAUFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NDsAAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAEChaXYyB2FkdmFuY2XTAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZHZhbmNlCnN1bW1hcnk6ICdBZHZhbmNlIHR1cm4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkdmFuY2UgdGhlIGdhbWUgdG8gdGhlIG5leHQgdHVybi4AAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC5wVb4mY+lMRAxjbGFpbXN0YXJ0ZXKFBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGFpbXN0YXJ0ZXIKc3VtbWFyeTogJ0RFQlVHOiBjbGFpbSBhIHN0YXJ0ZXIgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU3Bhd24gYSBwcmUta2l0dGVkIFQxIHN0YXJ0ZXIgc2hpcCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgZm9yIGEgcmVnaXN0ZXJlZCBwbGF5ZXIuIEF2YWlsYWJsZSBvbmx5IG9uIHRlc3QgZGVwbG95bWVudHMgd2hlcmUgbm8gaW4tZ2FtZSBzaGlwIGVjb25vbXkgeWV0IGV4aXN0cy4gUmVxdWlyZXMgdGhlIGNhbGxlciB0byBiZSBhIGpvaW5lZCBwbGF5ZXIgd2l0aCBubyBleGlzdGluZyBzaGlwczsgdGhlIHJlc3VsdGluZyBzaGlwIGlzIGZpdHRlZCB3aXRoIGEgZ2VuZXJhdG9yLCBlbmdpbmUsIGdhdGhlcmVyLCBjcmFmdGVyLCBhbmQgaGF1bGVyIG1vZHVsZS4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0eckDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzdGF0cywgYW5kIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBtb2R1bGUgaXRlbSBpZHMgYW5kIHN0YXRzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGRpc3BsYXkgcGFja2VkIGVudGl0aWVzLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy6AVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlcwCAFbqaYnWzYgxnZXRyZXNvdXJjZXOHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4AAAA404izYghnZXRzbG90c7sDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHNsb3RzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHNsb3QgbGF5b3V0cycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIG1vZHVsZSBzbG90IGxheW91dCBmb3IgZXZlcnkgZW50aXR5IGl0ZW0gdHlwZSwgbGlzdGluZyB0aGUgb3JkZXJlZCBzbG90IHR5cGVzIGF2YWlsYWJsZSBmb3IgbW9kdWxlIGluc3RhbGxhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlIHR5cGVzIGFyZSBjb21wYXRpYmxlIHdpdGggYSBnaXZlbiBlbnRpdHkgaHVsbC4AgNTZ3IyzYgpnZXRzdHJhdHVt0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RyYXR1bQpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIHN0cmF0dW0gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyByZXNvdXJjZSBzdHJhdHVtIGRhdGEgZm9yIGEgc3BlY2lmaWMgZGVwdGggbGF5ZXIgYXQgYSBjb29yZGluYXRlLCBpbmNsdWRpbmcgdGhlIHN0cmF0dW0gc2VlZCBpbmZvIGFuZCBkZXJpdmVkIHJlc291cmNlIHN0YXRzLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo+AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAAACQ3XQEaW5pdPoBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGluaXQKc3VtbWFyeTogJ0luaXRpYWxpemUgZ2FtZSBzZWVkJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWFsaXplIGEgdGhlIGdhbWVzIHNlZWQgYW5kIHNlZWQgdmFsdWVzIHRvIGJvb3RzdHJhcCBnYW1lIHN0YXRlLgAAAAAAMB19BGpvaW7EAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBqb2luCnN1bW1hcnk6ICdKb2luIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSm9pbiBhIGdhbWUgb2YgU2hpcGxvYWQAAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUuAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAGXXoMlNxQpzcGF3bmNhcmdvxQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25jYXJnbwpzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSgsjUyU3FC3NwYXducGFja2Vk5wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25wYWNrZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBhIHBhY2tlZCBlbnRpdHkgd2l0aCBpbnN0YWxsZWQgbW9kdWxlcyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkkpK4clNxQtzcGF3bnNlZWRlZM0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduc2VlZGVkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gc2VlZGVkIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAABQzeUEd3JhcP4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdyYXAKc3VtbWFyeTogJ1dyYXAgY2FyZ28gaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCldyYXAgYSBxdWFudGl0eSBvZiBjYXJnbyBmcm9tIGFuIGVudGl0eSBpbnRvIGFuIEF0b21pY0Fzc2V0cyBORlQgbWludGVkIHRvIHRoZSBzcGVjaWZpZWQgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBoYXZlIGxvYWRlcnMsIGFuZCBjb250YWluIGVub3VnaCBvZiB0aGUgcmVxdWVzdGVkIGNhcmdvLiBTY2hlZHVsZXMgYSB3cmFwIHRhc2sgdGhhdCwgb24gcmVzb2x1dGlvbiwgcmVtb3ZlcyB0aGUgY2FyZ28gZnJvbSB0aGUgZW50aXR5IGFuZCBtaW50cyB0aGUgTkZUIHVzaW5nIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmVkIGZvciB0aGF0IGl0ZW0gaWQuDQAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAAKy7mgNpNjQAAAluZXh1c19yb3cAAGBuTYrymgNpNjQAAA1uZnRjb25maWdfcm93AAAAAFzlTawDaTY0AAAKcGxheWVyX3JvdwAAAEDtq7C6A2k2NAAAC3Jlc2VydmVfcm93AAAACk2lrcIDaTY0AAAMc2VxdWVuY2Vfcm93AAAAAABQXcMDaTY0AAAIc2hpcF9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAFBY06au4QNpNjQAAA13YXJlaG91c2Vfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAACQAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAAACAvMxFDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwAAYG5NirJiC2dhbWVfY29uZmlnALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvAEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mb4BV9Vmq7LJiC2VudW1fcmVzdWx0ACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAsKo+JyqzYgtlbnVtX3Jlc3VsdAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdAAAzgZhdbNiC2VudW1fcmVzdWx0ALDaV2F1s2ITc3RyYXR1bV9yZW1haW5pbmdbXYAVuppidbNiEHJlc291cmNlc19yZXN1bHQAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
|
|
220
|
+
const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDiFAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQHYWR2YW5jZQACBnJldmVhbAZzdHJpbmcGY29tbWl0C2NoZWNrc3VtMjU2BWJsZW5kAAICaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAICaWQGdWludDY0BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpjYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyCWNhcmdvX3JlZgADB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNhcmdvX3JvdwAGAmlkBnVpbnQ2NAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQpjYXJnb192aWV3AAUHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyAmlkBnVpbnQ2NAxjbGFpbXN0YXJ0ZXIAAwdhY2NvdW50BG5hbWUBeAVpbnQ2NAF5BWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcLY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAQCaWQGdWludDY0CXJlY2lwZV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBmlucHV0cwxjYXJnb19pdGVtW10NY3JhZnRlcl9zdGF0cwACBXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MTYMY3JlYXRlZW50aXR5AAUFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQACAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAxtb2R1bGVfaXRlbXMIdWludDE2W10MbW9kdWxlX3N0YXRzCHVpbnQ2NFtdBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMAAgt3YXJlaG91c2VfegZ1aW50MTYLY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABkEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX3ZpZXdbXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPw1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAUAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/BmVuZXJneQd1aW50MTY/CWNhcmdvbWFzcwZ1aW50MzIHZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8HbG9hZGVycw1sb2FkZXJfc3RhdHM/CGdhdGhlcmVyD2dhdGhlcmVyX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8HaXRlbV9pZAZ1aW50MTYOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdDGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQLZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAlzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYLZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAxnZXRpdGVtdHlwZXMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRpbmZvAAAJZ2V0cGxheWVyAAEHYWNjb3VudARuYW1lCWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtncm91cHRyYXZlbAAECGVudGl0aWVzDGVudGl0eV9yZWZbXQF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbARoYXNoAAEFdmFsdWUGc3RyaW5nB2hhc2g1MTIAAQV2YWx1ZQZzdHJpbmcMaGF1bGVyX3N0YXRzAAMIY2FwYWNpdHkFdWludDgKZWZmaWNpZW5jeQZ1aW50MTYFZHJhaW4GdWludDE2CmluaXRpYWxpemUAAQRzZWVkC2NoZWNrc3VtMjU2CGl0ZW1fZGVmAAUCaWQGdWludDE2BG1hc3MGdWludDMyBHR5cGUFdWludDgHc3VidHlwZQV1aW50OAR0aWVyBXVpbnQ4DGl0ZW1faWRfcGFpcgACAmlkBnVpbnQxNgRuYW1lBnN0cmluZw9pdGVtX2lkc19yZXN1bHQAAQVpdGVtcw5pdGVtX2lkX3BhaXJbXQ9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAgxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljBHNpemUGdWludDE2DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudA1wYWNrZWRfbW9kdWxlAAIHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lCHJlY2hhcmdlAAECaWQGdWludDY0DHJlY2lwZV9pbnB1dAAEB2l0ZW1faWQGdWludDE2CGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAcOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdDnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0C3Jlc2VydmVfcm93AAQCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQFdWludDgUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8NcmVzb3VyY2VfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4DnJlc291cmNlX3N0YXRzAAMFc3RhdDEGdWludDE2BXN0YXQyBnVpbnQxNgVzdGF0MwZ1aW50MTYQcmVzb3VyY2VzX3Jlc3VsdAABCXJlc291cmNlcw9yZXNvdXJjZV9pbmZvW10Icm1tb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAp0YXJnZXRfcmVmCmNhcmdvX3JlZj8Icm1uZnRjZmcAAQdpdGVtX2lkBnVpbnQxNgRzYWx0AAEEc2FsdAZ1aW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nCXNldG5mdGNmZwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUKc2tpcHJldmVhbAABBmNvbW1pdAtjaGVja3N1bTI1NghzbG90X2RlZgACBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYKc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXducGFja2VkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAlpbnN0YWxsZWQPcGFja2VkX21vZHVsZVtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQFc3RhdHMGdWludDY0EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAUHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NARzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAIHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgR0YXNrAAgEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAJCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXQh0cmFuc2ZlcgADCXNvdXJjZV9pZAZ1aW50NjQHZGVzdF9pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdBnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABAJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAABHdyYXAABAVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQp3cmFwZW50aXR5AAIJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjRBAABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQucFW+JmPpTEQMY2xhaW1zdGFydGVyhQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xhaW1zdGFydGVyCnN1bW1hcnk6ICdERUJVRzogY2xhaW0gYSBzdGFydGVyIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNwYXduIGEgcHJlLWtpdHRlZCBUMSBzdGFydGVyIHNoaXAgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGZvciBhIHJlZ2lzdGVyZWQgcGxheWVyLiBBdmFpbGFibGUgb25seSBvbiB0ZXN0IGRlcGxveW1lbnRzIHdoZXJlIG5vIGluLWdhbWUgc2hpcCBlY29ub215IHlldCBleGlzdHMuIFJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYmUgYSBqb2luZWQgcGxheWVyIHdpdGggbm8gZXhpc3Rpbmcgc2hpcHM7IHRoZSByZXN1bHRpbmcgc2hpcCBpcyBmaXR0ZWQgd2l0aCBhIGdlbmVyYXRvciwgZW5naW5lLCBnYXRoZXJlciwgY3JhZnRlciwgYW5kIGhhdWxlciBtb2R1bGUuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzAAAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBUPI65qLJiC2dldGVsaWdpYmxlyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZWxpZ2libGUKc3VtbWFyeTogJ0dldCBlbGlnaWJsZSByZXNvdXJjZSBpdGVtIElEcyBhdCBhIGxvY2F0aW9uIGFuZCBzdHJhdHVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbGlzdCBvZiByZXNvdXJjZSBpdGVtIElEcyBlbGlnaWJsZSB0byBiZSBnYXRoZXJlZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgYW5kIHN0cmF0dW0gZGVwdGguIEl0ZW1zIGFyZSBnYXRlZCBieSBib3RoIHRoZSBsb2NhdGlvbidzIHJlc291cmNlIHByb2ZpbGUgYW5kIHRoZSBkZXB0aCB0aHJlc2hvbGQgZm9yIGVhY2ggdGllci4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy6AVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgAAADjTiLNiCGdldHNsb3RzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c2xvdHMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc2xvdCBsYXlvdXRzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbW9kdWxlIHNsb3QgbGF5b3V0IGZvciBldmVyeSBlbnRpdHkgaXRlbSB0eXBlLCBsaXN0aW5nIHRoZSBvcmRlcmVkIHNsb3QgdHlwZXMgYXZhaWxhYmxlIGZvciBtb2R1bGUgaW5zdGFsbGF0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRldGVybWluZSB3aGljaCBtb2R1bGUgdHlwZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBhIGdpdmVuIGVudGl0eSBodWxsLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AgPouGpfddAppbml0aWFsaXplgAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdGlhbGl6ZQpzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS7gs8tTNXyXugxyZWZyc2hlbnRpdHkAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AQDRqq1sdxApza2lwcmV2ZWFsAAAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAACexqrS1Ah1bmRlcGxveecELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVuZGVwbG95CnN1bW1hcnk6ICdQYWNrIGEgZGVwbG95ZWQgZW50aXR5IGludG8gYSBob3N0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQYWNrIGFuIGVudGl0eSBpbnRvIGEgaG9zdCBlbnRpdHkncyBjYXJnbyBhcyBhIHBhY2tlZC1lbnRpdHkgaXRlbS4gSG9zdCBhbmQgdGFyZ2V0IG11c3Qgc2hhcmUgdGhlIHNhbWUgb3duZXIgYW5kIGNvb3JkaW5hdGVzLCB0aGUgaG9zdCBtdXN0IGhhdmUgbG9hZGVycyBhbmQgZW5vdWdoIGNhcGFjaXR5IGZvciB0aGUgcGFja2VkIG1hc3MsIGFuZCB0aGUgdGFyZ2V0IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGFuZCBzY2hlZHVsZXMgdW5kZXBsb3kgdGFza3Mgb24gYm90aCBlbnRpdGllczsgb24gcmVzb2x1dGlvbiB0aGUgdGFyZ2V0IGlzIGVyYXNlZCBhbmQgdGhlIHBhY2tlZCBlbnRpdHkgaXMgYWRkZWQgdG8gdGhlIGhvc3QncyBjYXJnby4gSW52ZXJzZSBvZiBkZXBsb3kuAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4AgM8uT1XN5Qp3cmFwZW50aXR55gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcGVudGl0eQpzdW1tYXJ5OiAnV3JhcCBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byBpdHMgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBpZGxlIHdpdGggZW1wdHkgY2FyZ28sIGFuZCBoYXZlIGFuIG5mdGNvbmZpZyBtYXBwaW5nIGZvciBpdHMgaXRlbSBpZC4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIGVyYXNlcyB0aGUgZW50aXR5IGFuZCBtaW50cyB0aGUgTkZUIHByZXNlcnZpbmcgaXRzIHN0YXRzIGFuZCBpbnN0YWxsZWQgbW9kdWxlcy4IAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAAAAPjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAKAAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAVDyOuaiyYgh1aW50MTZbXQCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAATk6q7LJiD2l0ZW1faWRzX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm+AVfVZquyyYgtlbnVtX3Jlc3VsdAAmddkgGrNiDWxvY2F0aW9uX2luZm8AgMkmIRqzYhBsb2NhdGlvbl9kZXJpdmVkALCqPicqs2ILZW51bV9yZXN1bHQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHMAgM8uT1XN5Qx0YXNrX3Jlc3VsdHM=');
|
|
209
221
|
const abi = ABI.from(abiBlob);
|
|
210
222
|
var Types;
|
|
211
223
|
(function (Types) {
|
|
212
|
-
let
|
|
224
|
+
let packed_module = class packed_module extends Struct {
|
|
213
225
|
};
|
|
214
226
|
__decorate([
|
|
215
|
-
Struct.field(
|
|
216
|
-
],
|
|
227
|
+
Struct.field(UInt16)
|
|
228
|
+
], packed_module.prototype, "item_id", void 0);
|
|
217
229
|
__decorate([
|
|
218
230
|
Struct.field(UInt64)
|
|
219
|
-
],
|
|
231
|
+
], packed_module.prototype, "stats", void 0);
|
|
232
|
+
packed_module = __decorate([
|
|
233
|
+
Struct.type('packed_module')
|
|
234
|
+
], packed_module);
|
|
235
|
+
Types.packed_module = packed_module;
|
|
236
|
+
let module_entry = class module_entry extends Struct {
|
|
237
|
+
};
|
|
220
238
|
__decorate([
|
|
221
239
|
Struct.field(UInt8)
|
|
222
|
-
],
|
|
240
|
+
], module_entry.prototype, "type", void 0);
|
|
241
|
+
__decorate([
|
|
242
|
+
Struct.field(packed_module, { optional: true })
|
|
243
|
+
], module_entry.prototype, "installed", void 0);
|
|
244
|
+
module_entry = __decorate([
|
|
245
|
+
Struct.type('module_entry')
|
|
246
|
+
], module_entry);
|
|
247
|
+
Types.module_entry = module_entry;
|
|
248
|
+
let cargo_ref = class cargo_ref extends Struct {
|
|
249
|
+
};
|
|
250
|
+
__decorate([
|
|
251
|
+
Struct.field(UInt16)
|
|
252
|
+
], cargo_ref.prototype, "item_id", void 0);
|
|
223
253
|
__decorate([
|
|
224
254
|
Struct.field(UInt64)
|
|
225
|
-
],
|
|
255
|
+
], cargo_ref.prototype, "stats", void 0);
|
|
256
|
+
__decorate([
|
|
257
|
+
Struct.field(module_entry, { array: true })
|
|
258
|
+
], cargo_ref.prototype, "modules", void 0);
|
|
259
|
+
cargo_ref = __decorate([
|
|
260
|
+
Struct.type('cargo_ref')
|
|
261
|
+
], cargo_ref);
|
|
262
|
+
Types.cargo_ref = cargo_ref;
|
|
263
|
+
let addmodule = class addmodule extends Struct {
|
|
264
|
+
};
|
|
226
265
|
__decorate([
|
|
227
266
|
Struct.field(UInt64)
|
|
228
|
-
], addmodule.prototype, "
|
|
267
|
+
], addmodule.prototype, "entity_id", void 0);
|
|
268
|
+
__decorate([
|
|
269
|
+
Struct.field(UInt8)
|
|
270
|
+
], addmodule.prototype, "module_index", void 0);
|
|
271
|
+
__decorate([
|
|
272
|
+
Struct.field(cargo_ref)
|
|
273
|
+
], addmodule.prototype, "module_ref", void 0);
|
|
274
|
+
__decorate([
|
|
275
|
+
Struct.field(cargo_ref, { optional: true })
|
|
276
|
+
], addmodule.prototype, "target_ref", void 0);
|
|
229
277
|
addmodule = __decorate([
|
|
230
278
|
Struct.type('addmodule')
|
|
231
279
|
], addmodule);
|
|
@@ -257,53 +305,26 @@ var Types;
|
|
|
257
305
|
Struct.type('advance')
|
|
258
306
|
], advance);
|
|
259
307
|
Types.advance = advance;
|
|
260
|
-
let packed_module = class packed_module extends Struct {
|
|
261
|
-
};
|
|
262
|
-
__decorate([
|
|
263
|
-
Struct.field(UInt16)
|
|
264
|
-
], packed_module.prototype, "item_id", void 0);
|
|
265
|
-
__decorate([
|
|
266
|
-
Struct.field(UInt64)
|
|
267
|
-
], packed_module.prototype, "stats", void 0);
|
|
268
|
-
packed_module = __decorate([
|
|
269
|
-
Struct.type('packed_module')
|
|
270
|
-
], packed_module);
|
|
271
|
-
Types.packed_module = packed_module;
|
|
272
|
-
let module_entry = class module_entry extends Struct {
|
|
273
|
-
};
|
|
274
|
-
__decorate([
|
|
275
|
-
Struct.field(UInt8)
|
|
276
|
-
], module_entry.prototype, "type", void 0);
|
|
277
|
-
__decorate([
|
|
278
|
-
Struct.field(packed_module, { optional: true })
|
|
279
|
-
], module_entry.prototype, "installed", void 0);
|
|
280
|
-
module_entry = __decorate([
|
|
281
|
-
Struct.type('module_entry')
|
|
282
|
-
], module_entry);
|
|
283
|
-
Types.module_entry = module_entry;
|
|
284
308
|
let cargo_item = class cargo_item extends Struct {
|
|
285
309
|
};
|
|
286
310
|
__decorate([
|
|
287
311
|
Struct.field(UInt16)
|
|
288
312
|
], cargo_item.prototype, "item_id", void 0);
|
|
289
|
-
__decorate([
|
|
290
|
-
Struct.field(UInt32)
|
|
291
|
-
], cargo_item.prototype, "quantity", void 0);
|
|
292
313
|
__decorate([
|
|
293
314
|
Struct.field(UInt64)
|
|
294
315
|
], cargo_item.prototype, "stats", void 0);
|
|
295
316
|
__decorate([
|
|
296
317
|
Struct.field(module_entry, { array: true })
|
|
297
318
|
], cargo_item.prototype, "modules", void 0);
|
|
319
|
+
__decorate([
|
|
320
|
+
Struct.field(UInt32)
|
|
321
|
+
], cargo_item.prototype, "quantity", void 0);
|
|
298
322
|
cargo_item = __decorate([
|
|
299
323
|
Struct.type('cargo_item')
|
|
300
324
|
], cargo_item);
|
|
301
325
|
Types.cargo_item = cargo_item;
|
|
302
326
|
let blend = class blend extends Struct {
|
|
303
327
|
};
|
|
304
|
-
__decorate([
|
|
305
|
-
Struct.field(Name)
|
|
306
|
-
], blend.prototype, "entity_type", void 0);
|
|
307
328
|
__decorate([
|
|
308
329
|
Struct.field(UInt64)
|
|
309
330
|
], blend.prototype, "id", void 0);
|
|
@@ -316,9 +337,6 @@ var Types;
|
|
|
316
337
|
Types.blend = blend;
|
|
317
338
|
let cancel = class cancel extends Struct {
|
|
318
339
|
};
|
|
319
|
-
__decorate([
|
|
320
|
-
Struct.field(Name)
|
|
321
|
-
], cancel.prototype, "entity_type", void 0);
|
|
322
340
|
__decorate([
|
|
323
341
|
Struct.field(UInt64)
|
|
324
342
|
], cancel.prototype, "id", void 0);
|
|
@@ -389,6 +407,27 @@ var Types;
|
|
|
389
407
|
Struct.type('cargo_row')
|
|
390
408
|
], cargo_row);
|
|
391
409
|
Types.cargo_row = cargo_row;
|
|
410
|
+
let cargo_view = class cargo_view extends Struct {
|
|
411
|
+
};
|
|
412
|
+
__decorate([
|
|
413
|
+
Struct.field(UInt16)
|
|
414
|
+
], cargo_view.prototype, "item_id", void 0);
|
|
415
|
+
__decorate([
|
|
416
|
+
Struct.field(UInt64)
|
|
417
|
+
], cargo_view.prototype, "stats", void 0);
|
|
418
|
+
__decorate([
|
|
419
|
+
Struct.field(module_entry, { array: true })
|
|
420
|
+
], cargo_view.prototype, "modules", void 0);
|
|
421
|
+
__decorate([
|
|
422
|
+
Struct.field(UInt32)
|
|
423
|
+
], cargo_view.prototype, "quantity", void 0);
|
|
424
|
+
__decorate([
|
|
425
|
+
Struct.field(UInt64)
|
|
426
|
+
], cargo_view.prototype, "id", void 0);
|
|
427
|
+
cargo_view = __decorate([
|
|
428
|
+
Struct.type('cargo_view')
|
|
429
|
+
], cargo_view);
|
|
430
|
+
Types.cargo_view = cargo_view;
|
|
392
431
|
let claimstarter = class claimstarter extends Struct {
|
|
393
432
|
};
|
|
394
433
|
__decorate([
|
|
@@ -512,83 +551,8 @@ var Types;
|
|
|
512
551
|
Struct.type('coordinates')
|
|
513
552
|
], coordinates);
|
|
514
553
|
Types.coordinates = coordinates;
|
|
515
|
-
let task = class task extends Struct {
|
|
516
|
-
};
|
|
517
|
-
__decorate([
|
|
518
|
-
Struct.field(UInt8)
|
|
519
|
-
], task.prototype, "type", void 0);
|
|
520
|
-
__decorate([
|
|
521
|
-
Struct.field(UInt32)
|
|
522
|
-
], task.prototype, "duration", void 0);
|
|
523
|
-
__decorate([
|
|
524
|
-
Struct.field(UInt8)
|
|
525
|
-
], task.prototype, "cancelable", void 0);
|
|
526
|
-
__decorate([
|
|
527
|
-
Struct.field(coordinates, { optional: true })
|
|
528
|
-
], task.prototype, "coordinates", void 0);
|
|
529
|
-
__decorate([
|
|
530
|
-
Struct.field(cargo_item, { array: true })
|
|
531
|
-
], task.prototype, "cargo", void 0);
|
|
532
|
-
__decorate([
|
|
533
|
-
Struct.field(entity_ref, { optional: true })
|
|
534
|
-
], task.prototype, "entitytarget", void 0);
|
|
535
|
-
__decorate([
|
|
536
|
-
Struct.field(UInt64, { optional: true })
|
|
537
|
-
], task.prototype, "entitygroup", void 0);
|
|
538
|
-
__decorate([
|
|
539
|
-
Struct.field(UInt16, { optional: true })
|
|
540
|
-
], task.prototype, "energy_cost", void 0);
|
|
541
|
-
task = __decorate([
|
|
542
|
-
Struct.type('task')
|
|
543
|
-
], task);
|
|
544
|
-
Types.task = task;
|
|
545
|
-
let schedule = class schedule extends Struct {
|
|
546
|
-
};
|
|
547
|
-
__decorate([
|
|
548
|
-
Struct.field(TimePoint)
|
|
549
|
-
], schedule.prototype, "started", void 0);
|
|
550
|
-
__decorate([
|
|
551
|
-
Struct.field(task, { array: true })
|
|
552
|
-
], schedule.prototype, "tasks", void 0);
|
|
553
|
-
schedule = __decorate([
|
|
554
|
-
Struct.type('schedule')
|
|
555
|
-
], schedule);
|
|
556
|
-
Types.schedule = schedule;
|
|
557
|
-
let container_row = class container_row extends Struct {
|
|
558
|
-
};
|
|
559
|
-
__decorate([
|
|
560
|
-
Struct.field(UInt64)
|
|
561
|
-
], container_row.prototype, "id", void 0);
|
|
562
|
-
__decorate([
|
|
563
|
-
Struct.field(Name)
|
|
564
|
-
], container_row.prototype, "owner", void 0);
|
|
565
|
-
__decorate([
|
|
566
|
-
Struct.field('string')
|
|
567
|
-
], container_row.prototype, "name", void 0);
|
|
568
|
-
__decorate([
|
|
569
|
-
Struct.field(coordinates)
|
|
570
|
-
], container_row.prototype, "coordinates", void 0);
|
|
571
|
-
__decorate([
|
|
572
|
-
Struct.field(UInt32)
|
|
573
|
-
], container_row.prototype, "hullmass", void 0);
|
|
574
|
-
__decorate([
|
|
575
|
-
Struct.field(UInt32)
|
|
576
|
-
], container_row.prototype, "capacity", void 0);
|
|
577
|
-
__decorate([
|
|
578
|
-
Struct.field(UInt32)
|
|
579
|
-
], container_row.prototype, "cargomass", void 0);
|
|
580
|
-
__decorate([
|
|
581
|
-
Struct.field(schedule, { optional: true })
|
|
582
|
-
], container_row.prototype, "schedule", void 0);
|
|
583
|
-
container_row = __decorate([
|
|
584
|
-
Struct.type('container_row')
|
|
585
|
-
], container_row);
|
|
586
|
-
Types.container_row = container_row;
|
|
587
554
|
let craft = class craft extends Struct {
|
|
588
555
|
};
|
|
589
|
-
__decorate([
|
|
590
|
-
Struct.field(Name)
|
|
591
|
-
], craft.prototype, "entity_type", void 0);
|
|
592
556
|
__decorate([
|
|
593
557
|
Struct.field(UInt64)
|
|
594
558
|
], craft.prototype, "id", void 0);
|
|
@@ -638,20 +602,23 @@ var Types;
|
|
|
638
602
|
Struct.type('createentity')
|
|
639
603
|
], createentity);
|
|
640
604
|
Types.createentity = createentity;
|
|
641
|
-
let
|
|
605
|
+
let demolish = class demolish extends Struct {
|
|
642
606
|
};
|
|
643
607
|
__decorate([
|
|
644
|
-
Struct.field(
|
|
645
|
-
],
|
|
608
|
+
Struct.field(UInt64)
|
|
609
|
+
], demolish.prototype, "entity_id", void 0);
|
|
610
|
+
demolish = __decorate([
|
|
611
|
+
Struct.type('demolish')
|
|
612
|
+
], demolish);
|
|
613
|
+
Types.demolish = demolish;
|
|
614
|
+
let deploy = class deploy extends Struct {
|
|
615
|
+
};
|
|
646
616
|
__decorate([
|
|
647
617
|
Struct.field(UInt64)
|
|
648
618
|
], deploy.prototype, "id", void 0);
|
|
649
619
|
__decorate([
|
|
650
|
-
Struct.field(
|
|
651
|
-
], deploy.prototype, "
|
|
652
|
-
__decorate([
|
|
653
|
-
Struct.field(UInt64)
|
|
654
|
-
], deploy.prototype, "stats", void 0);
|
|
620
|
+
Struct.field(cargo_ref)
|
|
621
|
+
], deploy.prototype, "ref", void 0);
|
|
655
622
|
deploy = __decorate([
|
|
656
623
|
Struct.type('deploy')
|
|
657
624
|
], deploy);
|
|
@@ -776,6 +743,48 @@ var Types;
|
|
|
776
743
|
Struct.type('warp_stats')
|
|
777
744
|
], warp_stats);
|
|
778
745
|
Types.warp_stats = warp_stats;
|
|
746
|
+
let task = class task extends Struct {
|
|
747
|
+
};
|
|
748
|
+
__decorate([
|
|
749
|
+
Struct.field(UInt8)
|
|
750
|
+
], task.prototype, "type", void 0);
|
|
751
|
+
__decorate([
|
|
752
|
+
Struct.field(UInt32)
|
|
753
|
+
], task.prototype, "duration", void 0);
|
|
754
|
+
__decorate([
|
|
755
|
+
Struct.field(UInt8)
|
|
756
|
+
], task.prototype, "cancelable", void 0);
|
|
757
|
+
__decorate([
|
|
758
|
+
Struct.field(coordinates, { optional: true })
|
|
759
|
+
], task.prototype, "coordinates", void 0);
|
|
760
|
+
__decorate([
|
|
761
|
+
Struct.field(cargo_item, { array: true })
|
|
762
|
+
], task.prototype, "cargo", void 0);
|
|
763
|
+
__decorate([
|
|
764
|
+
Struct.field(entity_ref, { optional: true })
|
|
765
|
+
], task.prototype, "entitytarget", void 0);
|
|
766
|
+
__decorate([
|
|
767
|
+
Struct.field(UInt64, { optional: true })
|
|
768
|
+
], task.prototype, "entitygroup", void 0);
|
|
769
|
+
__decorate([
|
|
770
|
+
Struct.field(UInt16, { optional: true })
|
|
771
|
+
], task.prototype, "energy_cost", void 0);
|
|
772
|
+
task = __decorate([
|
|
773
|
+
Struct.type('task')
|
|
774
|
+
], task);
|
|
775
|
+
Types.task = task;
|
|
776
|
+
let schedule = class schedule extends Struct {
|
|
777
|
+
};
|
|
778
|
+
__decorate([
|
|
779
|
+
Struct.field(TimePoint)
|
|
780
|
+
], schedule.prototype, "started", void 0);
|
|
781
|
+
__decorate([
|
|
782
|
+
Struct.field(task, { array: true })
|
|
783
|
+
], schedule.prototype, "tasks", void 0);
|
|
784
|
+
schedule = __decorate([
|
|
785
|
+
Struct.type('schedule')
|
|
786
|
+
], schedule);
|
|
787
|
+
Types.schedule = schedule;
|
|
779
788
|
let entity_info = class entity_info extends Struct {
|
|
780
789
|
};
|
|
781
790
|
__decorate([
|
|
@@ -797,7 +806,7 @@ var Types;
|
|
|
797
806
|
Struct.field(UInt32)
|
|
798
807
|
], entity_info.prototype, "cargomass", void 0);
|
|
799
808
|
__decorate([
|
|
800
|
-
Struct.field(
|
|
809
|
+
Struct.field(cargo_view, { array: true })
|
|
801
810
|
], entity_info.prototype, "cargo", void 0);
|
|
802
811
|
__decorate([
|
|
803
812
|
Struct.field(loader_stats, { optional: true })
|
|
@@ -862,6 +871,9 @@ var Types;
|
|
|
862
871
|
__decorate([
|
|
863
872
|
Struct.field(UInt8)
|
|
864
873
|
], slot_def.prototype, "type", void 0);
|
|
874
|
+
__decorate([
|
|
875
|
+
Struct.field(UInt16)
|
|
876
|
+
], slot_def.prototype, "output_pct", void 0);
|
|
865
877
|
slot_def = __decorate([
|
|
866
878
|
Struct.type('slot_def')
|
|
867
879
|
], slot_def);
|
|
@@ -887,6 +899,72 @@ var Types;
|
|
|
887
899
|
Struct.type('entity_layouts_result')
|
|
888
900
|
], entity_layouts_result);
|
|
889
901
|
Types.entity_layouts_result = entity_layouts_result;
|
|
902
|
+
let entity_row = class entity_row extends Struct {
|
|
903
|
+
};
|
|
904
|
+
__decorate([
|
|
905
|
+
Struct.field(UInt64)
|
|
906
|
+
], entity_row.prototype, "id", void 0);
|
|
907
|
+
__decorate([
|
|
908
|
+
Struct.field(Name)
|
|
909
|
+
], entity_row.prototype, "owner", void 0);
|
|
910
|
+
__decorate([
|
|
911
|
+
Struct.field(Name)
|
|
912
|
+
], entity_row.prototype, "kind", void 0);
|
|
913
|
+
__decorate([
|
|
914
|
+
Struct.field('string')
|
|
915
|
+
], entity_row.prototype, "name", void 0);
|
|
916
|
+
__decorate([
|
|
917
|
+
Struct.field(UInt64)
|
|
918
|
+
], entity_row.prototype, "stats", void 0);
|
|
919
|
+
__decorate([
|
|
920
|
+
Struct.field(coordinates)
|
|
921
|
+
], entity_row.prototype, "coordinates", void 0);
|
|
922
|
+
__decorate([
|
|
923
|
+
Struct.field(UInt32, { optional: true })
|
|
924
|
+
], entity_row.prototype, "hullmass", void 0);
|
|
925
|
+
__decorate([
|
|
926
|
+
Struct.field(UInt32, { optional: true })
|
|
927
|
+
], entity_row.prototype, "capacity", void 0);
|
|
928
|
+
__decorate([
|
|
929
|
+
Struct.field(UInt16, { optional: true })
|
|
930
|
+
], entity_row.prototype, "energy", void 0);
|
|
931
|
+
__decorate([
|
|
932
|
+
Struct.field(UInt32)
|
|
933
|
+
], entity_row.prototype, "cargomass", void 0);
|
|
934
|
+
__decorate([
|
|
935
|
+
Struct.field(movement_stats, { optional: true })
|
|
936
|
+
], entity_row.prototype, "engines", void 0);
|
|
937
|
+
__decorate([
|
|
938
|
+
Struct.field(energy_stats, { optional: true })
|
|
939
|
+
], entity_row.prototype, "generator", void 0);
|
|
940
|
+
__decorate([
|
|
941
|
+
Struct.field(loader_stats, { optional: true })
|
|
942
|
+
], entity_row.prototype, "loaders", void 0);
|
|
943
|
+
__decorate([
|
|
944
|
+
Struct.field(gatherer_stats, { optional: true })
|
|
945
|
+
], entity_row.prototype, "gatherer", void 0);
|
|
946
|
+
__decorate([
|
|
947
|
+
Struct.field(warp_stats, { optional: true })
|
|
948
|
+
], entity_row.prototype, "warp", void 0);
|
|
949
|
+
__decorate([
|
|
950
|
+
Struct.field(crafter_stats, { optional: true })
|
|
951
|
+
], entity_row.prototype, "crafter", void 0);
|
|
952
|
+
__decorate([
|
|
953
|
+
Struct.field(hauler_stats, { optional: true })
|
|
954
|
+
], entity_row.prototype, "hauler", void 0);
|
|
955
|
+
__decorate([
|
|
956
|
+
Struct.field(module_entry, { array: true })
|
|
957
|
+
], entity_row.prototype, "modules", void 0);
|
|
958
|
+
__decorate([
|
|
959
|
+
Struct.field(schedule, { optional: true })
|
|
960
|
+
], entity_row.prototype, "schedule", void 0);
|
|
961
|
+
__decorate([
|
|
962
|
+
Struct.field(UInt16)
|
|
963
|
+
], entity_row.prototype, "item_id", void 0);
|
|
964
|
+
entity_row = __decorate([
|
|
965
|
+
Struct.type('entity_row')
|
|
966
|
+
], entity_row);
|
|
967
|
+
Types.entity_row = entity_row;
|
|
890
968
|
let entity_summary = class entity_summary extends Struct {
|
|
891
969
|
};
|
|
892
970
|
__decorate([
|
|
@@ -968,14 +1046,23 @@ var Types;
|
|
|
968
1046
|
Struct.type('enum_result')
|
|
969
1047
|
], enum_result);
|
|
970
1048
|
Types.enum_result = enum_result;
|
|
1049
|
+
let fixcargomass = class fixcargomass extends Struct {
|
|
1050
|
+
};
|
|
1051
|
+
__decorate([
|
|
1052
|
+
Struct.field(UInt64)
|
|
1053
|
+
], fixcargomass.prototype, "entity_id", void 0);
|
|
1054
|
+
fixcargomass = __decorate([
|
|
1055
|
+
Struct.type('fixcargomass')
|
|
1056
|
+
], fixcargomass);
|
|
1057
|
+
Types.fixcargomass = fixcargomass;
|
|
971
1058
|
let gather = class gather extends Struct {
|
|
972
1059
|
};
|
|
973
1060
|
__decorate([
|
|
974
|
-
Struct.field(
|
|
975
|
-
], gather.prototype, "
|
|
1061
|
+
Struct.field(UInt64)
|
|
1062
|
+
], gather.prototype, "source_id", void 0);
|
|
976
1063
|
__decorate([
|
|
977
|
-
Struct.field(
|
|
978
|
-
], gather.prototype, "
|
|
1064
|
+
Struct.field(UInt64)
|
|
1065
|
+
], gather.prototype, "destination_id", void 0);
|
|
979
1066
|
__decorate([
|
|
980
1067
|
Struct.field(UInt16)
|
|
981
1068
|
], gather.prototype, "stratum", void 0);
|
|
@@ -992,6 +1079,18 @@ var Types;
|
|
|
992
1079
|
Struct.type('getconfig')
|
|
993
1080
|
], getconfig);
|
|
994
1081
|
Types.getconfig = getconfig;
|
|
1082
|
+
let geteligible = class geteligible extends Struct {
|
|
1083
|
+
};
|
|
1084
|
+
__decorate([
|
|
1085
|
+
Struct.field(coordinates)
|
|
1086
|
+
], geteligible.prototype, "coords", void 0);
|
|
1087
|
+
__decorate([
|
|
1088
|
+
Struct.field(UInt16)
|
|
1089
|
+
], geteligible.prototype, "stratum", void 0);
|
|
1090
|
+
geteligible = __decorate([
|
|
1091
|
+
Struct.type('geteligible')
|
|
1092
|
+
], geteligible);
|
|
1093
|
+
Types.geteligible = geteligible;
|
|
995
1094
|
let getentities = class getentities extends Struct {
|
|
996
1095
|
};
|
|
997
1096
|
__decorate([
|
|
@@ -1006,9 +1105,6 @@ var Types;
|
|
|
1006
1105
|
Types.getentities = getentities;
|
|
1007
1106
|
let getentity = class getentity extends Struct {
|
|
1008
1107
|
};
|
|
1009
|
-
__decorate([
|
|
1010
|
-
Struct.field(Name)
|
|
1011
|
-
], getentity.prototype, "entity_type", void 0);
|
|
1012
1108
|
__decorate([
|
|
1013
1109
|
Struct.field(UInt64)
|
|
1014
1110
|
], getentity.prototype, "entity_id", void 0);
|
|
@@ -1078,9 +1174,6 @@ var Types;
|
|
|
1078
1174
|
Types.getmodules = getmodules;
|
|
1079
1175
|
let getnearby = class getnearby extends Struct {
|
|
1080
1176
|
};
|
|
1081
|
-
__decorate([
|
|
1082
|
-
Struct.field(Name)
|
|
1083
|
-
], getnearby.prototype, "entity_type", void 0);
|
|
1084
1177
|
__decorate([
|
|
1085
1178
|
Struct.field(UInt64)
|
|
1086
1179
|
], getnearby.prototype, "entity_id", void 0);
|
|
@@ -1220,15 +1313,15 @@ var Types;
|
|
|
1220
1313
|
Struct.type('hash512')
|
|
1221
1314
|
], hash512);
|
|
1222
1315
|
Types.hash512 = hash512;
|
|
1223
|
-
let
|
|
1316
|
+
let initialize = class initialize extends Struct {
|
|
1224
1317
|
};
|
|
1225
1318
|
__decorate([
|
|
1226
1319
|
Struct.field(Checksum256)
|
|
1227
|
-
],
|
|
1228
|
-
|
|
1229
|
-
Struct.type('
|
|
1230
|
-
],
|
|
1231
|
-
Types.
|
|
1320
|
+
], initialize.prototype, "seed", void 0);
|
|
1321
|
+
initialize = __decorate([
|
|
1322
|
+
Struct.type('initialize')
|
|
1323
|
+
], initialize);
|
|
1324
|
+
Types.initialize = initialize;
|
|
1232
1325
|
let item_id_pair = class item_id_pair extends Struct {
|
|
1233
1326
|
};
|
|
1234
1327
|
__decorate([
|
|
@@ -1388,29 +1481,11 @@ var Types;
|
|
|
1388
1481
|
Struct.type('location_static')
|
|
1389
1482
|
], location_static);
|
|
1390
1483
|
Types.location_static = location_static;
|
|
1391
|
-
let
|
|
1392
|
-
};
|
|
1393
|
-
__decorate([
|
|
1394
|
-
Struct.field('bool')
|
|
1395
|
-
], location_epoch.prototype, "active", void 0);
|
|
1396
|
-
__decorate([
|
|
1397
|
-
Struct.field(UInt8)
|
|
1398
|
-
], location_epoch.prototype, "seed0", void 0);
|
|
1399
|
-
__decorate([
|
|
1400
|
-
Struct.field(UInt8)
|
|
1401
|
-
], location_epoch.prototype, "seed1", void 0);
|
|
1402
|
-
location_epoch = __decorate([
|
|
1403
|
-
Struct.type('location_epoch')
|
|
1404
|
-
], location_epoch);
|
|
1405
|
-
Types.location_epoch = location_epoch;
|
|
1406
|
-
let location_derived = class location_derived extends Struct {
|
|
1484
|
+
let location_derived = class location_derived extends Struct {
|
|
1407
1485
|
};
|
|
1408
1486
|
__decorate([
|
|
1409
1487
|
Struct.field(location_static)
|
|
1410
1488
|
], location_derived.prototype, "static_props", void 0);
|
|
1411
|
-
__decorate([
|
|
1412
|
-
Struct.field(location_epoch)
|
|
1413
|
-
], location_derived.prototype, "epoch_props", void 0);
|
|
1414
1489
|
__decorate([
|
|
1415
1490
|
Struct.field(UInt16)
|
|
1416
1491
|
], location_derived.prototype, "size", void 0);
|
|
@@ -1430,30 +1505,6 @@ var Types;
|
|
|
1430
1505
|
Struct.type('location_info')
|
|
1431
1506
|
], location_info);
|
|
1432
1507
|
Types.location_info = location_info;
|
|
1433
|
-
let location_row = class location_row extends Struct {
|
|
1434
|
-
};
|
|
1435
|
-
__decorate([
|
|
1436
|
-
Struct.field(UInt64)
|
|
1437
|
-
], location_row.prototype, "id", void 0);
|
|
1438
|
-
__decorate([
|
|
1439
|
-
Struct.field(Name)
|
|
1440
|
-
], location_row.prototype, "owner", void 0);
|
|
1441
|
-
__decorate([
|
|
1442
|
-
Struct.field(coordinates)
|
|
1443
|
-
], location_row.prototype, "coordinates", void 0);
|
|
1444
|
-
__decorate([
|
|
1445
|
-
Struct.field(UInt32)
|
|
1446
|
-
], location_row.prototype, "cargomass", void 0);
|
|
1447
|
-
__decorate([
|
|
1448
|
-
Struct.field(cargo_item, { array: true })
|
|
1449
|
-
], location_row.prototype, "cargo", void 0);
|
|
1450
|
-
__decorate([
|
|
1451
|
-
Struct.field(schedule, { optional: true })
|
|
1452
|
-
], location_row.prototype, "schedule", void 0);
|
|
1453
|
-
location_row = __decorate([
|
|
1454
|
-
Struct.type('location_row')
|
|
1455
|
-
], location_row);
|
|
1456
|
-
Types.location_row = location_row;
|
|
1457
1508
|
let module_info = class module_info extends Struct {
|
|
1458
1509
|
};
|
|
1459
1510
|
__decorate([
|
|
@@ -1520,24 +1571,6 @@ var Types;
|
|
|
1520
1571
|
Struct.type('nearby_info')
|
|
1521
1572
|
], nearby_info);
|
|
1522
1573
|
Types.nearby_info = nearby_info;
|
|
1523
|
-
let nexus_row = class nexus_row extends Struct {
|
|
1524
|
-
};
|
|
1525
|
-
__decorate([
|
|
1526
|
-
Struct.field(UInt64)
|
|
1527
|
-
], nexus_row.prototype, "id", void 0);
|
|
1528
|
-
__decorate([
|
|
1529
|
-
Struct.field(Name)
|
|
1530
|
-
], nexus_row.prototype, "owner", void 0);
|
|
1531
|
-
__decorate([
|
|
1532
|
-
Struct.field('string')
|
|
1533
|
-
], nexus_row.prototype, "name", void 0);
|
|
1534
|
-
__decorate([
|
|
1535
|
-
Struct.field(coordinates)
|
|
1536
|
-
], nexus_row.prototype, "coordinates", void 0);
|
|
1537
|
-
nexus_row = __decorate([
|
|
1538
|
-
Struct.type('nexus_row')
|
|
1539
|
-
], nexus_row);
|
|
1540
|
-
Types.nexus_row = nexus_row;
|
|
1541
1574
|
let schema_field = class schema_field extends Struct {
|
|
1542
1575
|
};
|
|
1543
1576
|
__decorate([
|
|
@@ -1654,15 +1687,6 @@ var Types;
|
|
|
1654
1687
|
__decorate([
|
|
1655
1688
|
Struct.field('string')
|
|
1656
1689
|
], player_info.prototype, "company_name", void 0);
|
|
1657
|
-
__decorate([
|
|
1658
|
-
Struct.field(UInt64)
|
|
1659
|
-
], player_info.prototype, "ship_count", void 0);
|
|
1660
|
-
__decorate([
|
|
1661
|
-
Struct.field(UInt64)
|
|
1662
|
-
], player_info.prototype, "warehouse_count", void 0);
|
|
1663
|
-
__decorate([
|
|
1664
|
-
Struct.field(UInt64)
|
|
1665
|
-
], player_info.prototype, "container_count", void 0);
|
|
1666
1690
|
player_info = __decorate([
|
|
1667
1691
|
Struct.type('player_info')
|
|
1668
1692
|
], player_info);
|
|
@@ -1678,9 +1702,6 @@ var Types;
|
|
|
1678
1702
|
Types.player_row = player_row;
|
|
1679
1703
|
let recharge = class recharge extends Struct {
|
|
1680
1704
|
};
|
|
1681
|
-
__decorate([
|
|
1682
|
-
Struct.field(Name)
|
|
1683
|
-
], recharge.prototype, "entity_type", void 0);
|
|
1684
1705
|
__decorate([
|
|
1685
1706
|
Struct.field(UInt64)
|
|
1686
1707
|
], recharge.prototype, "id", void 0);
|
|
@@ -1688,6 +1709,15 @@ var Types;
|
|
|
1688
1709
|
Struct.type('recharge')
|
|
1689
1710
|
], recharge);
|
|
1690
1711
|
Types.recharge = recharge;
|
|
1712
|
+
let refrshentity = class refrshentity extends Struct {
|
|
1713
|
+
};
|
|
1714
|
+
__decorate([
|
|
1715
|
+
Struct.field(UInt64)
|
|
1716
|
+
], refrshentity.prototype, "entity_id", void 0);
|
|
1717
|
+
refrshentity = __decorate([
|
|
1718
|
+
Struct.type('refrshentity')
|
|
1719
|
+
], refrshentity);
|
|
1720
|
+
Types.refrshentity = refrshentity;
|
|
1691
1721
|
let reserve_row = class reserve_row extends Struct {
|
|
1692
1722
|
};
|
|
1693
1723
|
__decorate([
|
|
@@ -1708,9 +1738,6 @@ var Types;
|
|
|
1708
1738
|
Types.reserve_row = reserve_row;
|
|
1709
1739
|
let resolve = class resolve extends Struct {
|
|
1710
1740
|
};
|
|
1711
|
-
__decorate([
|
|
1712
|
-
Struct.field(Name)
|
|
1713
|
-
], resolve.prototype, "entity_type", void 0);
|
|
1714
1741
|
__decorate([
|
|
1715
1742
|
Struct.field(UInt64)
|
|
1716
1743
|
], resolve.prototype, "id", void 0);
|
|
@@ -1789,9 +1816,6 @@ var Types;
|
|
|
1789
1816
|
Types.resources_result = resources_result;
|
|
1790
1817
|
let rmmodule = class rmmodule extends Struct {
|
|
1791
1818
|
};
|
|
1792
|
-
__decorate([
|
|
1793
|
-
Struct.field(Name)
|
|
1794
|
-
], rmmodule.prototype, "entity_type", void 0);
|
|
1795
1819
|
__decorate([
|
|
1796
1820
|
Struct.field(UInt64)
|
|
1797
1821
|
], rmmodule.prototype, "entity_id", void 0);
|
|
@@ -1799,8 +1823,8 @@ var Types;
|
|
|
1799
1823
|
Struct.field(UInt8)
|
|
1800
1824
|
], rmmodule.prototype, "module_index", void 0);
|
|
1801
1825
|
__decorate([
|
|
1802
|
-
Struct.field(
|
|
1803
|
-
], rmmodule.prototype, "
|
|
1826
|
+
Struct.field(cargo_ref, { optional: true })
|
|
1827
|
+
], rmmodule.prototype, "target_ref", void 0);
|
|
1804
1828
|
rmmodule = __decorate([
|
|
1805
1829
|
Struct.type('rmmodule')
|
|
1806
1830
|
], rmmodule);
|
|
@@ -1823,18 +1847,6 @@ var Types;
|
|
|
1823
1847
|
Struct.type('salt')
|
|
1824
1848
|
], salt);
|
|
1825
1849
|
Types.salt = salt;
|
|
1826
|
-
let sequence_row = class sequence_row extends Struct {
|
|
1827
|
-
};
|
|
1828
|
-
__decorate([
|
|
1829
|
-
Struct.field(Name)
|
|
1830
|
-
], sequence_row.prototype, "key", void 0);
|
|
1831
|
-
__decorate([
|
|
1832
|
-
Struct.field(UInt64)
|
|
1833
|
-
], sequence_row.prototype, "value", void 0);
|
|
1834
|
-
sequence_row = __decorate([
|
|
1835
|
-
Struct.type('sequence_row')
|
|
1836
|
-
], sequence_row);
|
|
1837
|
-
Types.sequence_row = sequence_row;
|
|
1838
1850
|
let setnftcfg = class setnftcfg extends Struct {
|
|
1839
1851
|
};
|
|
1840
1852
|
__decorate([
|
|
@@ -1850,66 +1862,15 @@ var Types;
|
|
|
1850
1862
|
Struct.type('setnftcfg')
|
|
1851
1863
|
], setnftcfg);
|
|
1852
1864
|
Types.setnftcfg = setnftcfg;
|
|
1853
|
-
let
|
|
1865
|
+
let skipreveal = class skipreveal extends Struct {
|
|
1854
1866
|
};
|
|
1855
1867
|
__decorate([
|
|
1856
|
-
Struct.field(
|
|
1857
|
-
],
|
|
1858
|
-
__decorate([
|
|
1859
|
-
Struct.
|
|
1860
|
-
],
|
|
1861
|
-
|
|
1862
|
-
Struct.field('string')
|
|
1863
|
-
], ship_row.prototype, "name", void 0);
|
|
1864
|
-
__decorate([
|
|
1865
|
-
Struct.field(UInt64)
|
|
1866
|
-
], ship_row.prototype, "stats", void 0);
|
|
1867
|
-
__decorate([
|
|
1868
|
-
Struct.field(coordinates)
|
|
1869
|
-
], ship_row.prototype, "coordinates", void 0);
|
|
1870
|
-
__decorate([
|
|
1871
|
-
Struct.field(UInt32, { optional: true })
|
|
1872
|
-
], ship_row.prototype, "hullmass", void 0);
|
|
1873
|
-
__decorate([
|
|
1874
|
-
Struct.field(UInt32, { optional: true })
|
|
1875
|
-
], ship_row.prototype, "capacity", void 0);
|
|
1876
|
-
__decorate([
|
|
1877
|
-
Struct.field(UInt16, { optional: true })
|
|
1878
|
-
], ship_row.prototype, "energy", void 0);
|
|
1879
|
-
__decorate([
|
|
1880
|
-
Struct.field(UInt32)
|
|
1881
|
-
], ship_row.prototype, "cargomass", void 0);
|
|
1882
|
-
__decorate([
|
|
1883
|
-
Struct.field(movement_stats, { optional: true })
|
|
1884
|
-
], ship_row.prototype, "engines", void 0);
|
|
1885
|
-
__decorate([
|
|
1886
|
-
Struct.field(energy_stats, { optional: true })
|
|
1887
|
-
], ship_row.prototype, "generator", void 0);
|
|
1888
|
-
__decorate([
|
|
1889
|
-
Struct.field(loader_stats, { optional: true })
|
|
1890
|
-
], ship_row.prototype, "loaders", void 0);
|
|
1891
|
-
__decorate([
|
|
1892
|
-
Struct.field(gatherer_stats, { optional: true })
|
|
1893
|
-
], ship_row.prototype, "gatherer", void 0);
|
|
1894
|
-
__decorate([
|
|
1895
|
-
Struct.field(warp_stats, { optional: true })
|
|
1896
|
-
], ship_row.prototype, "warp", void 0);
|
|
1897
|
-
__decorate([
|
|
1898
|
-
Struct.field(crafter_stats, { optional: true })
|
|
1899
|
-
], ship_row.prototype, "crafter", void 0);
|
|
1900
|
-
__decorate([
|
|
1901
|
-
Struct.field(hauler_stats, { optional: true })
|
|
1902
|
-
], ship_row.prototype, "hauler", void 0);
|
|
1903
|
-
__decorate([
|
|
1904
|
-
Struct.field(module_entry, { array: true })
|
|
1905
|
-
], ship_row.prototype, "modules", void 0);
|
|
1906
|
-
__decorate([
|
|
1907
|
-
Struct.field(schedule, { optional: true })
|
|
1908
|
-
], ship_row.prototype, "schedule", void 0);
|
|
1909
|
-
ship_row = __decorate([
|
|
1910
|
-
Struct.type('ship_row')
|
|
1911
|
-
], ship_row);
|
|
1912
|
-
Types.ship_row = ship_row;
|
|
1868
|
+
Struct.field(Checksum256)
|
|
1869
|
+
], skipreveal.prototype, "commit", void 0);
|
|
1870
|
+
skipreveal = __decorate([
|
|
1871
|
+
Struct.type('skipreveal')
|
|
1872
|
+
], skipreveal);
|
|
1873
|
+
Types.skipreveal = skipreveal;
|
|
1913
1874
|
let spawncargo = class spawncargo extends Struct {
|
|
1914
1875
|
};
|
|
1915
1876
|
__decorate([
|
|
@@ -1972,9 +1933,6 @@ var Types;
|
|
|
1972
1933
|
__decorate([
|
|
1973
1934
|
Struct.field(UInt64)
|
|
1974
1935
|
], state_row.prototype, "salt", void 0);
|
|
1975
|
-
__decorate([
|
|
1976
|
-
Struct.field(UInt32)
|
|
1977
|
-
], state_row.prototype, "ships", void 0);
|
|
1978
1936
|
__decorate([
|
|
1979
1937
|
Struct.field(Checksum256)
|
|
1980
1938
|
], state_row.prototype, "seed", void 0);
|
|
@@ -2041,36 +1999,21 @@ var Types;
|
|
|
2041
1999
|
Types.task_results = task_results;
|
|
2042
2000
|
let transfer = class transfer extends Struct {
|
|
2043
2001
|
};
|
|
2044
|
-
__decorate([
|
|
2045
|
-
Struct.field(Name)
|
|
2046
|
-
], transfer.prototype, "source_type", void 0);
|
|
2047
2002
|
__decorate([
|
|
2048
2003
|
Struct.field(UInt64)
|
|
2049
2004
|
], transfer.prototype, "source_id", void 0);
|
|
2050
|
-
__decorate([
|
|
2051
|
-
Struct.field(Name)
|
|
2052
|
-
], transfer.prototype, "dest_type", void 0);
|
|
2053
2005
|
__decorate([
|
|
2054
2006
|
Struct.field(UInt64)
|
|
2055
2007
|
], transfer.prototype, "dest_id", void 0);
|
|
2056
2008
|
__decorate([
|
|
2057
|
-
Struct.field(
|
|
2058
|
-
], transfer.prototype, "
|
|
2059
|
-
__decorate([
|
|
2060
|
-
Struct.field(UInt64)
|
|
2061
|
-
], transfer.prototype, "stats", void 0);
|
|
2062
|
-
__decorate([
|
|
2063
|
-
Struct.field(UInt32)
|
|
2064
|
-
], transfer.prototype, "quantity", void 0);
|
|
2009
|
+
Struct.field(cargo_item, { array: true })
|
|
2010
|
+
], transfer.prototype, "items", void 0);
|
|
2065
2011
|
transfer = __decorate([
|
|
2066
2012
|
Struct.type('transfer')
|
|
2067
2013
|
], transfer);
|
|
2068
2014
|
Types.transfer = transfer;
|
|
2069
2015
|
let travel = class travel extends Struct {
|
|
2070
2016
|
};
|
|
2071
|
-
__decorate([
|
|
2072
|
-
Struct.field(Name)
|
|
2073
|
-
], travel.prototype, "entity_type", void 0);
|
|
2074
2017
|
__decorate([
|
|
2075
2018
|
Struct.field(UInt64)
|
|
2076
2019
|
], travel.prototype, "id", void 0);
|
|
@@ -2105,50 +2048,20 @@ var Types;
|
|
|
2105
2048
|
Struct.type('types_row')
|
|
2106
2049
|
], types_row);
|
|
2107
2050
|
Types.types_row = types_row;
|
|
2108
|
-
let
|
|
2051
|
+
let undeploy = class undeploy extends Struct {
|
|
2109
2052
|
};
|
|
2110
2053
|
__decorate([
|
|
2111
2054
|
Struct.field(UInt64)
|
|
2112
|
-
],
|
|
2113
|
-
__decorate([
|
|
2114
|
-
Struct.field(Name)
|
|
2115
|
-
], warehouse_row.prototype, "owner", void 0);
|
|
2116
|
-
__decorate([
|
|
2117
|
-
Struct.field('string')
|
|
2118
|
-
], warehouse_row.prototype, "name", void 0);
|
|
2055
|
+
], undeploy.prototype, "host_id", void 0);
|
|
2119
2056
|
__decorate([
|
|
2120
2057
|
Struct.field(UInt64)
|
|
2121
|
-
],
|
|
2122
|
-
__decorate([
|
|
2123
|
-
Struct.
|
|
2124
|
-
],
|
|
2125
|
-
|
|
2126
|
-
Struct.field(UInt32, { optional: true })
|
|
2127
|
-
], warehouse_row.prototype, "hullmass", void 0);
|
|
2128
|
-
__decorate([
|
|
2129
|
-
Struct.field(UInt32, { optional: true })
|
|
2130
|
-
], warehouse_row.prototype, "capacity", void 0);
|
|
2131
|
-
__decorate([
|
|
2132
|
-
Struct.field(UInt32)
|
|
2133
|
-
], warehouse_row.prototype, "cargomass", void 0);
|
|
2134
|
-
__decorate([
|
|
2135
|
-
Struct.field(loader_stats, { optional: true })
|
|
2136
|
-
], warehouse_row.prototype, "loaders", void 0);
|
|
2137
|
-
__decorate([
|
|
2138
|
-
Struct.field(module_entry, { array: true })
|
|
2139
|
-
], warehouse_row.prototype, "modules", void 0);
|
|
2140
|
-
__decorate([
|
|
2141
|
-
Struct.field(schedule, { optional: true })
|
|
2142
|
-
], warehouse_row.prototype, "schedule", void 0);
|
|
2143
|
-
warehouse_row = __decorate([
|
|
2144
|
-
Struct.type('warehouse_row')
|
|
2145
|
-
], warehouse_row);
|
|
2146
|
-
Types.warehouse_row = warehouse_row;
|
|
2058
|
+
], undeploy.prototype, "target_id", void 0);
|
|
2059
|
+
undeploy = __decorate([
|
|
2060
|
+
Struct.type('undeploy')
|
|
2061
|
+
], undeploy);
|
|
2062
|
+
Types.undeploy = undeploy;
|
|
2147
2063
|
let warp = class warp extends Struct {
|
|
2148
2064
|
};
|
|
2149
|
-
__decorate([
|
|
2150
|
-
Struct.field(Name)
|
|
2151
|
-
], warp.prototype, "entity_type", void 0);
|
|
2152
2065
|
__decorate([
|
|
2153
2066
|
Struct.field(UInt64)
|
|
2154
2067
|
], warp.prototype, "id", void 0);
|
|
@@ -2168,48 +2081,46 @@ var Types;
|
|
|
2168
2081
|
Struct.type('wipe')
|
|
2169
2082
|
], wipe);
|
|
2170
2083
|
Types.wipe = wipe;
|
|
2171
|
-
let wipesequence = class wipesequence extends Struct {
|
|
2172
|
-
};
|
|
2173
|
-
wipesequence = __decorate([
|
|
2174
|
-
Struct.type('wipesequence')
|
|
2175
|
-
], wipesequence);
|
|
2176
|
-
Types.wipesequence = wipesequence;
|
|
2177
2084
|
let wrap = class wrap extends Struct {
|
|
2178
2085
|
};
|
|
2179
2086
|
__decorate([
|
|
2180
2087
|
Struct.field(Name)
|
|
2181
2088
|
], wrap.prototype, "owner", void 0);
|
|
2182
|
-
__decorate([
|
|
2183
|
-
Struct.field(Name)
|
|
2184
|
-
], wrap.prototype, "entity_type", void 0);
|
|
2185
2089
|
__decorate([
|
|
2186
2090
|
Struct.field(UInt64)
|
|
2187
2091
|
], wrap.prototype, "entity_id", void 0);
|
|
2188
2092
|
__decorate([
|
|
2189
2093
|
Struct.field(UInt64)
|
|
2190
|
-
], wrap.prototype, "
|
|
2094
|
+
], wrap.prototype, "nexus_id", void 0);
|
|
2191
2095
|
__decorate([
|
|
2192
|
-
Struct.field(
|
|
2193
|
-
], wrap.prototype, "
|
|
2096
|
+
Struct.field(cargo_item, { array: true })
|
|
2097
|
+
], wrap.prototype, "items", void 0);
|
|
2194
2098
|
wrap = __decorate([
|
|
2195
2099
|
Struct.type('wrap')
|
|
2196
2100
|
], wrap);
|
|
2197
2101
|
Types.wrap = wrap;
|
|
2102
|
+
let wrapentity = class wrapentity extends Struct {
|
|
2103
|
+
};
|
|
2104
|
+
__decorate([
|
|
2105
|
+
Struct.field(UInt64)
|
|
2106
|
+
], wrapentity.prototype, "entity_id", void 0);
|
|
2107
|
+
__decorate([
|
|
2108
|
+
Struct.field(UInt64)
|
|
2109
|
+
], wrapentity.prototype, "nexus_id", void 0);
|
|
2110
|
+
wrapentity = __decorate([
|
|
2111
|
+
Struct.type('wrapentity')
|
|
2112
|
+
], wrapentity);
|
|
2113
|
+
Types.wrapentity = wrapentity;
|
|
2198
2114
|
})(Types || (Types = {}));
|
|
2199
2115
|
const TableMap = {
|
|
2200
2116
|
cargo: Types.cargo_row,
|
|
2201
|
-
|
|
2117
|
+
entity: Types.entity_row,
|
|
2202
2118
|
entitygroup: Types.entitygroup_row,
|
|
2203
|
-
location: Types.location_row,
|
|
2204
|
-
nexus: Types.nexus_row,
|
|
2205
2119
|
nftconfig: Types.nftconfig_row,
|
|
2206
2120
|
player: Types.player_row,
|
|
2207
2121
|
reserve: Types.reserve_row,
|
|
2208
|
-
sequence: Types.sequence_row,
|
|
2209
|
-
ship: Types.ship_row,
|
|
2210
2122
|
state: Types.state_row,
|
|
2211
2123
|
types: Types.types_row,
|
|
2212
|
-
warehouse: Types.warehouse_row,
|
|
2213
2124
|
};
|
|
2214
2125
|
class Contract extends Contract$2 {
|
|
2215
2126
|
constructor(args) {
|
|
@@ -2258,15 +2169,15 @@ const PLAYER_ALREADY_JOINED = 'Player has already joined the game.';
|
|
|
2258
2169
|
const PLAYER_NOT_JOINED = 'Player has not joined the game.';
|
|
2259
2170
|
const PLAYER_NOT_FOUND = 'Cannot find player for given account name.';
|
|
2260
2171
|
const STARTER_ALREADY_CLAIMED = 'Starter ship already claimed; destroy existing ships to re-claim.';
|
|
2261
|
-
const
|
|
2172
|
+
const ENTITY_ALREADY_THERE = 'Entity cannot travel to the location it is already at.';
|
|
2262
2173
|
const SHIP_ALREADY_TRAVELING = 'Ship is already traveling.';
|
|
2263
2174
|
const SHIP_CANNOT_BUY_TRAVELING = 'Ship cannot buy goods while traveling.';
|
|
2264
2175
|
const SHIP_CANNOT_UPDATE_TRAVELING = 'Ship cannot be updated while traveling.';
|
|
2265
|
-
const
|
|
2266
|
-
const
|
|
2176
|
+
const ENTITY_INVALID_DESTINATION = 'Cannot travel: no system at specified destination.';
|
|
2177
|
+
const ENTITY_INVALID_TRAVEL_DURATION = 'This trip cannot be made as it would exceed the maximum travel duration.';
|
|
2267
2178
|
const SHIP_NOT_ARRIVED = 'Ship has not yet arrived at its destination.';
|
|
2268
|
-
const
|
|
2269
|
-
const
|
|
2179
|
+
const ENTITY_NOT_ENOUGH_ENERGY = 'Entity does not have enough energy to travel to the destination.';
|
|
2180
|
+
const ENTITY_NOT_ENOUGH_ENERGY_CAPACITY = 'Entity does not have enough energy capacity to travel.';
|
|
2270
2181
|
const SHIP_NOT_FOUND = 'Cannot find ship for given account.';
|
|
2271
2182
|
const SHIP_NOT_OWNED = 'Ship is not owned by this account.';
|
|
2272
2183
|
const NO_SCHEDULE = 'No scheduled tasks.';
|
|
@@ -2275,16 +2186,13 @@ const SHIP_NO_COMPLETED_TASKS = 'No completed tasks to resolve.';
|
|
|
2275
2186
|
const RESOLVE_COUNT_EXCEEDS_COMPLETED = 'Requested resolve count exceeds completed tasks.';
|
|
2276
2187
|
const SHIP_CANNOT_CANCEL_TASK = 'Cannot cancel task that is immutable or in progress.';
|
|
2277
2188
|
const SHIP_NO_TASKS_TO_CANCEL = 'No tasks to cancel.';
|
|
2278
|
-
const
|
|
2279
|
-
const
|
|
2280
|
-
const
|
|
2281
|
-
const SHIP_CAPACITY_EXCEEDED = 'Ship cargo capacity would be exceeded.';
|
|
2189
|
+
const ENTITY_INVALID_CARGO = 'Invalid cargo specified for load/unload.';
|
|
2190
|
+
const ENTITY_CARGO_NOT_OWNED = 'Cannot load cargo that is not owned.';
|
|
2191
|
+
const ENTITY_CARGO_NOT_LOADED = 'Cannot unload cargo that is not loaded.';
|
|
2282
2192
|
const ENTITY_CAPACITY_EXCEEDED = 'Entity cargo capacity would be exceeded.';
|
|
2283
2193
|
const WAREHOUSE_NOT_FOUND = 'Cannot find warehouse for given id.';
|
|
2284
2194
|
const WAREHOUSE_ALREADY_AT_LOCATION = 'Warehouse already exists at this location.';
|
|
2285
|
-
const WAREHOUSE_CAPACITY_EXCEEDED = 'Warehouse capacity would be exceeded.';
|
|
2286
2195
|
const CONTAINER_NOT_FOUND = 'Cannot find container for given id.';
|
|
2287
|
-
const CONTAINER_CAPACITY_EXCEEDED = 'Container capacity would be exceeded.';
|
|
2288
2196
|
const DESTINATION_CAPACITY_EXCEEDED = 'Destination entity does not have enough capacity for the gather.';
|
|
2289
2197
|
const CANCEL_PAIRED_HAS_PENDING = 'Cannot cancel transfer, paired entity has pending tasks.';
|
|
2290
2198
|
const GROUP_EMPTY = 'Group travel requires at least one entity.';
|
|
@@ -2331,12 +2239,13 @@ const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
|
|
|
2331
2239
|
|
|
2332
2240
|
const PRECISION$1 = 10000;
|
|
2333
2241
|
const CRAFT_ENERGY_DIVISOR = 150000;
|
|
2334
|
-
const
|
|
2242
|
+
const PLANETARY_STRUCTURE_Z = 0;
|
|
2335
2243
|
const CONTAINER_Z = 300;
|
|
2336
2244
|
const TRAVEL_MAX_DURATION = 86400;
|
|
2337
2245
|
const MIN_ORBITAL_ALTITUDE = 800;
|
|
2338
2246
|
const MAX_ORBITAL_ALTITUDE = 3000;
|
|
2339
2247
|
const BASE_ORBITAL_MASS = 100000;
|
|
2248
|
+
const MIN_TRANSFER_DISTANCE = 100;
|
|
2340
2249
|
var TaskType;
|
|
2341
2250
|
(function (TaskType) {
|
|
2342
2251
|
TaskType[TaskType["IDLE"] = 0] = "IDLE";
|
|
@@ -2350,6 +2259,9 @@ var TaskType;
|
|
|
2350
2259
|
TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
|
|
2351
2260
|
TaskType[TaskType["WRAP"] = 9] = "WRAP";
|
|
2352
2261
|
TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
|
|
2262
|
+
TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
|
|
2263
|
+
TaskType[TaskType["WRAP_ENTITY"] = 12] = "WRAP_ENTITY";
|
|
2264
|
+
TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
|
|
2353
2265
|
})(TaskType || (TaskType = {}));
|
|
2354
2266
|
var LocationType;
|
|
2355
2267
|
(function (LocationType) {
|
|
@@ -2357,6 +2269,7 @@ var LocationType;
|
|
|
2357
2269
|
LocationType[LocationType["PLANET"] = 1] = "PLANET";
|
|
2358
2270
|
LocationType[LocationType["ASTEROID"] = 2] = "ASTEROID";
|
|
2359
2271
|
LocationType[LocationType["NEBULA"] = 3] = "NEBULA";
|
|
2272
|
+
LocationType[LocationType["ICE_FIELD"] = 4] = "ICE_FIELD";
|
|
2360
2273
|
})(LocationType || (LocationType = {}));
|
|
2361
2274
|
var TaskCancelable;
|
|
2362
2275
|
(function (TaskCancelable) {
|
|
@@ -2411,6 +2324,9 @@ const CATEGORY_LABELS = {
|
|
|
2411
2324
|
function formatTier(tier) {
|
|
2412
2325
|
return 'T' + tier;
|
|
2413
2326
|
}
|
|
2327
|
+
function tierAdjective(tier) {
|
|
2328
|
+
return TIER_ADJECTIVES[tier] ?? `T${tier}`;
|
|
2329
|
+
}
|
|
2414
2330
|
|
|
2415
2331
|
const ITEM_ORE_T1 = 101;
|
|
2416
2332
|
const ITEM_ORE_T2 = 102;
|
|
@@ -2479,9 +2395,12 @@ const ITEM_LOADER_T1 = 10103;
|
|
|
2479
2395
|
const ITEM_CRAFTER_T1 = 10104;
|
|
2480
2396
|
const ITEM_STORAGE_T1 = 10105;
|
|
2481
2397
|
const ITEM_HAULER_T1 = 10106;
|
|
2398
|
+
const ITEM_WARP_T1 = 10107;
|
|
2482
2399
|
const ITEM_CONTAINER_T1_PACKED = 10200;
|
|
2483
2400
|
const ITEM_SHIP_T1_PACKED = 10201;
|
|
2484
2401
|
const ITEM_WAREHOUSE_T1_PACKED = 10202;
|
|
2402
|
+
const ITEM_EXTRACTOR_T1_PACKED = 10203;
|
|
2403
|
+
const ITEM_FACTORY_T1_PACKED = 10204;
|
|
2485
2404
|
const ITEM_HULL_PLATES_T2 = 20001;
|
|
2486
2405
|
const ITEM_CARGO_LINING_T2 = 20002;
|
|
2487
2406
|
const ITEM_CONTAINER_T2_PACKED = 20200;
|
|
@@ -2508,6 +2427,55 @@ var items = [
|
|
|
2508
2427
|
tier: 3,
|
|
2509
2428
|
category: "ore"
|
|
2510
2429
|
},
|
|
2430
|
+
{
|
|
2431
|
+
id: 104,
|
|
2432
|
+
mass: 71000,
|
|
2433
|
+
type: "resource",
|
|
2434
|
+
tier: 4,
|
|
2435
|
+
category: "ore"
|
|
2436
|
+
},
|
|
2437
|
+
{
|
|
2438
|
+
id: 105,
|
|
2439
|
+
mass: 78000,
|
|
2440
|
+
type: "resource",
|
|
2441
|
+
tier: 5,
|
|
2442
|
+
category: "ore"
|
|
2443
|
+
},
|
|
2444
|
+
{
|
|
2445
|
+
id: 106,
|
|
2446
|
+
mass: 87000,
|
|
2447
|
+
type: "resource",
|
|
2448
|
+
tier: 6,
|
|
2449
|
+
category: "ore"
|
|
2450
|
+
},
|
|
2451
|
+
{
|
|
2452
|
+
id: 107,
|
|
2453
|
+
mass: 96000,
|
|
2454
|
+
type: "resource",
|
|
2455
|
+
tier: 7,
|
|
2456
|
+
category: "ore"
|
|
2457
|
+
},
|
|
2458
|
+
{
|
|
2459
|
+
id: 108,
|
|
2460
|
+
mass: 107000,
|
|
2461
|
+
type: "resource",
|
|
2462
|
+
tier: 8,
|
|
2463
|
+
category: "ore"
|
|
2464
|
+
},
|
|
2465
|
+
{
|
|
2466
|
+
id: 109,
|
|
2467
|
+
mass: 118000,
|
|
2468
|
+
type: "resource",
|
|
2469
|
+
tier: 9,
|
|
2470
|
+
category: "ore"
|
|
2471
|
+
},
|
|
2472
|
+
{
|
|
2473
|
+
id: 110,
|
|
2474
|
+
mass: 130000,
|
|
2475
|
+
type: "resource",
|
|
2476
|
+
tier: 10,
|
|
2477
|
+
category: "ore"
|
|
2478
|
+
},
|
|
2511
2479
|
{
|
|
2512
2480
|
id: 201,
|
|
2513
2481
|
mass: 35000,
|
|
@@ -2529,6 +2497,55 @@ var items = [
|
|
|
2529
2497
|
tier: 3,
|
|
2530
2498
|
category: "crystal"
|
|
2531
2499
|
},
|
|
2500
|
+
{
|
|
2501
|
+
id: 204,
|
|
2502
|
+
mass: 35000,
|
|
2503
|
+
type: "resource",
|
|
2504
|
+
tier: 4,
|
|
2505
|
+
category: "crystal"
|
|
2506
|
+
},
|
|
2507
|
+
{
|
|
2508
|
+
id: 205,
|
|
2509
|
+
mass: 35000,
|
|
2510
|
+
type: "resource",
|
|
2511
|
+
tier: 5,
|
|
2512
|
+
category: "crystal"
|
|
2513
|
+
},
|
|
2514
|
+
{
|
|
2515
|
+
id: 206,
|
|
2516
|
+
mass: 35000,
|
|
2517
|
+
type: "resource",
|
|
2518
|
+
tier: 6,
|
|
2519
|
+
category: "crystal"
|
|
2520
|
+
},
|
|
2521
|
+
{
|
|
2522
|
+
id: 207,
|
|
2523
|
+
mass: 35000,
|
|
2524
|
+
type: "resource",
|
|
2525
|
+
tier: 7,
|
|
2526
|
+
category: "crystal"
|
|
2527
|
+
},
|
|
2528
|
+
{
|
|
2529
|
+
id: 208,
|
|
2530
|
+
mass: 35000,
|
|
2531
|
+
type: "resource",
|
|
2532
|
+
tier: 8,
|
|
2533
|
+
category: "crystal"
|
|
2534
|
+
},
|
|
2535
|
+
{
|
|
2536
|
+
id: 209,
|
|
2537
|
+
mass: 35000,
|
|
2538
|
+
type: "resource",
|
|
2539
|
+
tier: 9,
|
|
2540
|
+
category: "crystal"
|
|
2541
|
+
},
|
|
2542
|
+
{
|
|
2543
|
+
id: 210,
|
|
2544
|
+
mass: 35000,
|
|
2545
|
+
type: "resource",
|
|
2546
|
+
tier: 10,
|
|
2547
|
+
category: "crystal"
|
|
2548
|
+
},
|
|
2532
2549
|
{
|
|
2533
2550
|
id: 301,
|
|
2534
2551
|
mass: 15000,
|
|
@@ -2550,6 +2567,55 @@ var items = [
|
|
|
2550
2567
|
tier: 3,
|
|
2551
2568
|
category: "gas"
|
|
2552
2569
|
},
|
|
2570
|
+
{
|
|
2571
|
+
id: 304,
|
|
2572
|
+
mass: 11000,
|
|
2573
|
+
type: "resource",
|
|
2574
|
+
tier: 4,
|
|
2575
|
+
category: "gas"
|
|
2576
|
+
},
|
|
2577
|
+
{
|
|
2578
|
+
id: 305,
|
|
2579
|
+
mass: 10000,
|
|
2580
|
+
type: "resource",
|
|
2581
|
+
tier: 5,
|
|
2582
|
+
category: "gas"
|
|
2583
|
+
},
|
|
2584
|
+
{
|
|
2585
|
+
id: 306,
|
|
2586
|
+
mass: 9000,
|
|
2587
|
+
type: "resource",
|
|
2588
|
+
tier: 6,
|
|
2589
|
+
category: "gas"
|
|
2590
|
+
},
|
|
2591
|
+
{
|
|
2592
|
+
id: 307,
|
|
2593
|
+
mass: 8000,
|
|
2594
|
+
type: "resource",
|
|
2595
|
+
tier: 7,
|
|
2596
|
+
category: "gas"
|
|
2597
|
+
},
|
|
2598
|
+
{
|
|
2599
|
+
id: 308,
|
|
2600
|
+
mass: 7500,
|
|
2601
|
+
type: "resource",
|
|
2602
|
+
tier: 8,
|
|
2603
|
+
category: "gas"
|
|
2604
|
+
},
|
|
2605
|
+
{
|
|
2606
|
+
id: 309,
|
|
2607
|
+
mass: 6500,
|
|
2608
|
+
type: "resource",
|
|
2609
|
+
tier: 9,
|
|
2610
|
+
category: "gas"
|
|
2611
|
+
},
|
|
2612
|
+
{
|
|
2613
|
+
id: 310,
|
|
2614
|
+
mass: 6000,
|
|
2615
|
+
type: "resource",
|
|
2616
|
+
tier: 10,
|
|
2617
|
+
category: "gas"
|
|
2618
|
+
},
|
|
2553
2619
|
{
|
|
2554
2620
|
id: 401,
|
|
2555
2621
|
mass: 22000,
|
|
@@ -2571,6 +2637,55 @@ var items = [
|
|
|
2571
2637
|
tier: 3,
|
|
2572
2638
|
category: "regolith"
|
|
2573
2639
|
},
|
|
2640
|
+
{
|
|
2641
|
+
id: 404,
|
|
2642
|
+
mass: 32000,
|
|
2643
|
+
type: "resource",
|
|
2644
|
+
tier: 4,
|
|
2645
|
+
category: "regolith"
|
|
2646
|
+
},
|
|
2647
|
+
{
|
|
2648
|
+
id: 405,
|
|
2649
|
+
mass: 36000,
|
|
2650
|
+
type: "resource",
|
|
2651
|
+
tier: 5,
|
|
2652
|
+
category: "regolith"
|
|
2653
|
+
},
|
|
2654
|
+
{
|
|
2655
|
+
id: 406,
|
|
2656
|
+
mass: 40500,
|
|
2657
|
+
type: "resource",
|
|
2658
|
+
tier: 6,
|
|
2659
|
+
category: "regolith"
|
|
2660
|
+
},
|
|
2661
|
+
{
|
|
2662
|
+
id: 407,
|
|
2663
|
+
mass: 46000,
|
|
2664
|
+
type: "resource",
|
|
2665
|
+
tier: 7,
|
|
2666
|
+
category: "regolith"
|
|
2667
|
+
},
|
|
2668
|
+
{
|
|
2669
|
+
id: 408,
|
|
2670
|
+
mass: 52000,
|
|
2671
|
+
type: "resource",
|
|
2672
|
+
tier: 8,
|
|
2673
|
+
category: "regolith"
|
|
2674
|
+
},
|
|
2675
|
+
{
|
|
2676
|
+
id: 409,
|
|
2677
|
+
mass: 58500,
|
|
2678
|
+
type: "resource",
|
|
2679
|
+
tier: 9,
|
|
2680
|
+
category: "regolith"
|
|
2681
|
+
},
|
|
2682
|
+
{
|
|
2683
|
+
id: 410,
|
|
2684
|
+
mass: 66000,
|
|
2685
|
+
type: "resource",
|
|
2686
|
+
tier: 10,
|
|
2687
|
+
category: "regolith"
|
|
2688
|
+
},
|
|
2574
2689
|
{
|
|
2575
2690
|
id: 501,
|
|
2576
2691
|
mass: 42000,
|
|
@@ -2593,10 +2708,59 @@ var items = [
|
|
|
2593
2708
|
category: "biomass"
|
|
2594
2709
|
},
|
|
2595
2710
|
{
|
|
2596
|
-
id:
|
|
2597
|
-
mass:
|
|
2598
|
-
type: "
|
|
2599
|
-
tier:
|
|
2711
|
+
id: 504,
|
|
2712
|
+
mass: 29000,
|
|
2713
|
+
type: "resource",
|
|
2714
|
+
tier: 4,
|
|
2715
|
+
category: "biomass"
|
|
2716
|
+
},
|
|
2717
|
+
{
|
|
2718
|
+
id: 505,
|
|
2719
|
+
mass: 26000,
|
|
2720
|
+
type: "resource",
|
|
2721
|
+
tier: 5,
|
|
2722
|
+
category: "biomass"
|
|
2723
|
+
},
|
|
2724
|
+
{
|
|
2725
|
+
id: 506,
|
|
2726
|
+
mass: 23000,
|
|
2727
|
+
type: "resource",
|
|
2728
|
+
tier: 6,
|
|
2729
|
+
category: "biomass"
|
|
2730
|
+
},
|
|
2731
|
+
{
|
|
2732
|
+
id: 507,
|
|
2733
|
+
mass: 20000,
|
|
2734
|
+
type: "resource",
|
|
2735
|
+
tier: 7,
|
|
2736
|
+
category: "biomass"
|
|
2737
|
+
},
|
|
2738
|
+
{
|
|
2739
|
+
id: 508,
|
|
2740
|
+
mass: 18000,
|
|
2741
|
+
type: "resource",
|
|
2742
|
+
tier: 8,
|
|
2743
|
+
category: "biomass"
|
|
2744
|
+
},
|
|
2745
|
+
{
|
|
2746
|
+
id: 509,
|
|
2747
|
+
mass: 16000,
|
|
2748
|
+
type: "resource",
|
|
2749
|
+
tier: 9,
|
|
2750
|
+
category: "biomass"
|
|
2751
|
+
},
|
|
2752
|
+
{
|
|
2753
|
+
id: 510,
|
|
2754
|
+
mass: 14000,
|
|
2755
|
+
type: "resource",
|
|
2756
|
+
tier: 10,
|
|
2757
|
+
category: "biomass"
|
|
2758
|
+
},
|
|
2759
|
+
{
|
|
2760
|
+
id: 10001,
|
|
2761
|
+
mass: 50000,
|
|
2762
|
+
type: "component",
|
|
2763
|
+
tier: 1
|
|
2600
2764
|
},
|
|
2601
2765
|
{
|
|
2602
2766
|
id: 10002,
|
|
@@ -2701,6 +2865,13 @@ var items = [
|
|
|
2701
2865
|
tier: 1,
|
|
2702
2866
|
subtype: "hauler"
|
|
2703
2867
|
},
|
|
2868
|
+
{
|
|
2869
|
+
id: 10107,
|
|
2870
|
+
mass: 180000,
|
|
2871
|
+
type: "module",
|
|
2872
|
+
tier: 1,
|
|
2873
|
+
subtype: "warp"
|
|
2874
|
+
},
|
|
2704
2875
|
{
|
|
2705
2876
|
id: 10200,
|
|
2706
2877
|
mass: 80000,
|
|
@@ -2719,6 +2890,18 @@ var items = [
|
|
|
2719
2890
|
type: "entity",
|
|
2720
2891
|
tier: 1
|
|
2721
2892
|
},
|
|
2893
|
+
{
|
|
2894
|
+
id: 10203,
|
|
2895
|
+
mass: 800000,
|
|
2896
|
+
type: "entity",
|
|
2897
|
+
tier: 1
|
|
2898
|
+
},
|
|
2899
|
+
{
|
|
2900
|
+
id: 10204,
|
|
2901
|
+
mass: 800000,
|
|
2902
|
+
type: "entity",
|
|
2903
|
+
tier: 1
|
|
2904
|
+
},
|
|
2722
2905
|
{
|
|
2723
2906
|
id: 20001,
|
|
2724
2907
|
mass: 50000,
|
|
@@ -3147,10 +3330,6 @@ var recipes = [
|
|
|
3147
3330
|
},
|
|
3148
3331
|
{
|
|
3149
3332
|
sources: [
|
|
3150
|
-
{
|
|
3151
|
-
inputIndex: 1,
|
|
3152
|
-
statIndex: 1
|
|
3153
|
-
}
|
|
3154
3333
|
]
|
|
3155
3334
|
},
|
|
3156
3335
|
{
|
|
@@ -3190,8 +3369,8 @@ var recipes = [
|
|
|
3190
3369
|
{
|
|
3191
3370
|
sources: [
|
|
3192
3371
|
{
|
|
3193
|
-
inputIndex:
|
|
3194
|
-
statIndex:
|
|
3372
|
+
inputIndex: 1,
|
|
3373
|
+
statIndex: 1
|
|
3195
3374
|
}
|
|
3196
3375
|
]
|
|
3197
3376
|
},
|
|
@@ -3309,7 +3488,7 @@ var recipes = [
|
|
|
3309
3488
|
sources: [
|
|
3310
3489
|
{
|
|
3311
3490
|
inputIndex: 0,
|
|
3312
|
-
statIndex:
|
|
3491
|
+
statIndex: 1
|
|
3313
3492
|
}
|
|
3314
3493
|
]
|
|
3315
3494
|
},
|
|
@@ -3325,12 +3504,38 @@ var recipes = [
|
|
|
3325
3504
|
sources: [
|
|
3326
3505
|
{
|
|
3327
3506
|
inputIndex: 0,
|
|
3328
|
-
statIndex:
|
|
3507
|
+
statIndex: 0
|
|
3329
3508
|
}
|
|
3330
3509
|
]
|
|
3331
3510
|
},
|
|
3332
3511
|
{
|
|
3333
3512
|
sources: [
|
|
3513
|
+
]
|
|
3514
|
+
}
|
|
3515
|
+
],
|
|
3516
|
+
blendWeights: [
|
|
3517
|
+
]
|
|
3518
|
+
},
|
|
3519
|
+
{
|
|
3520
|
+
outputItemId: 10107,
|
|
3521
|
+
outputMass: 180000,
|
|
3522
|
+
inputs: [
|
|
3523
|
+
{
|
|
3524
|
+
itemId: 10010,
|
|
3525
|
+
quantity: 6
|
|
3526
|
+
},
|
|
3527
|
+
{
|
|
3528
|
+
itemId: 10009,
|
|
3529
|
+
quantity: 4
|
|
3530
|
+
}
|
|
3531
|
+
],
|
|
3532
|
+
statSlots: [
|
|
3533
|
+
{
|
|
3534
|
+
sources: [
|
|
3535
|
+
{
|
|
3536
|
+
inputIndex: 0,
|
|
3537
|
+
statIndex: 1
|
|
3538
|
+
},
|
|
3334
3539
|
{
|
|
3335
3540
|
inputIndex: 1,
|
|
3336
3541
|
statIndex: 1
|
|
@@ -3339,6 +3544,8 @@ var recipes = [
|
|
|
3339
3544
|
}
|
|
3340
3545
|
],
|
|
3341
3546
|
blendWeights: [
|
|
3547
|
+
1,
|
|
3548
|
+
1
|
|
3342
3549
|
]
|
|
3343
3550
|
},
|
|
3344
3551
|
{
|
|
@@ -3491,6 +3698,114 @@ var recipes = [
|
|
|
3491
3698
|
blendWeights: [
|
|
3492
3699
|
]
|
|
3493
3700
|
},
|
|
3701
|
+
{
|
|
3702
|
+
outputItemId: 10203,
|
|
3703
|
+
outputMass: 800000,
|
|
3704
|
+
inputs: [
|
|
3705
|
+
{
|
|
3706
|
+
itemId: 10001,
|
|
3707
|
+
quantity: 15
|
|
3708
|
+
},
|
|
3709
|
+
{
|
|
3710
|
+
itemId: 10002,
|
|
3711
|
+
quantity: 8
|
|
3712
|
+
}
|
|
3713
|
+
],
|
|
3714
|
+
statSlots: [
|
|
3715
|
+
{
|
|
3716
|
+
sources: [
|
|
3717
|
+
{
|
|
3718
|
+
inputIndex: 0,
|
|
3719
|
+
statIndex: 0
|
|
3720
|
+
}
|
|
3721
|
+
]
|
|
3722
|
+
},
|
|
3723
|
+
{
|
|
3724
|
+
sources: [
|
|
3725
|
+
{
|
|
3726
|
+
inputIndex: 0,
|
|
3727
|
+
statIndex: 1
|
|
3728
|
+
}
|
|
3729
|
+
]
|
|
3730
|
+
},
|
|
3731
|
+
{
|
|
3732
|
+
sources: [
|
|
3733
|
+
{
|
|
3734
|
+
inputIndex: 1,
|
|
3735
|
+
statIndex: 0
|
|
3736
|
+
}
|
|
3737
|
+
]
|
|
3738
|
+
},
|
|
3739
|
+
{
|
|
3740
|
+
sources: [
|
|
3741
|
+
{
|
|
3742
|
+
inputIndex: 1,
|
|
3743
|
+
statIndex: 1
|
|
3744
|
+
}
|
|
3745
|
+
]
|
|
3746
|
+
}
|
|
3747
|
+
],
|
|
3748
|
+
blendWeights: [
|
|
3749
|
+
]
|
|
3750
|
+
},
|
|
3751
|
+
{
|
|
3752
|
+
outputItemId: 10204,
|
|
3753
|
+
outputMass: 800000,
|
|
3754
|
+
inputs: [
|
|
3755
|
+
{
|
|
3756
|
+
itemId: 10001,
|
|
3757
|
+
quantity: 15
|
|
3758
|
+
},
|
|
3759
|
+
{
|
|
3760
|
+
itemId: 10002,
|
|
3761
|
+
quantity: 6
|
|
3762
|
+
},
|
|
3763
|
+
{
|
|
3764
|
+
itemId: 10008,
|
|
3765
|
+
quantity: 4
|
|
3766
|
+
},
|
|
3767
|
+
{
|
|
3768
|
+
itemId: 10009,
|
|
3769
|
+
quantity: 4
|
|
3770
|
+
}
|
|
3771
|
+
],
|
|
3772
|
+
statSlots: [
|
|
3773
|
+
{
|
|
3774
|
+
sources: [
|
|
3775
|
+
{
|
|
3776
|
+
inputIndex: 0,
|
|
3777
|
+
statIndex: 0
|
|
3778
|
+
}
|
|
3779
|
+
]
|
|
3780
|
+
},
|
|
3781
|
+
{
|
|
3782
|
+
sources: [
|
|
3783
|
+
{
|
|
3784
|
+
inputIndex: 0,
|
|
3785
|
+
statIndex: 1
|
|
3786
|
+
}
|
|
3787
|
+
]
|
|
3788
|
+
},
|
|
3789
|
+
{
|
|
3790
|
+
sources: [
|
|
3791
|
+
{
|
|
3792
|
+
inputIndex: 1,
|
|
3793
|
+
statIndex: 0
|
|
3794
|
+
}
|
|
3795
|
+
]
|
|
3796
|
+
},
|
|
3797
|
+
{
|
|
3798
|
+
sources: [
|
|
3799
|
+
{
|
|
3800
|
+
inputIndex: 1,
|
|
3801
|
+
statIndex: 1
|
|
3802
|
+
}
|
|
3803
|
+
]
|
|
3804
|
+
}
|
|
3805
|
+
],
|
|
3806
|
+
blendWeights: [
|
|
3807
|
+
]
|
|
3808
|
+
},
|
|
3494
3809
|
{
|
|
3495
3810
|
outputItemId: 20001,
|
|
3496
3811
|
outputMass: 50000,
|
|
@@ -3649,19 +3964,24 @@ var entities = [
|
|
|
3649
3964
|
entityItemId: 10201,
|
|
3650
3965
|
slots: [
|
|
3651
3966
|
{
|
|
3652
|
-
type: "any"
|
|
3967
|
+
type: "any",
|
|
3968
|
+
outputPct: 100
|
|
3653
3969
|
},
|
|
3654
3970
|
{
|
|
3655
|
-
type: "any"
|
|
3971
|
+
type: "any",
|
|
3972
|
+
outputPct: 100
|
|
3656
3973
|
},
|
|
3657
3974
|
{
|
|
3658
|
-
type: "any"
|
|
3975
|
+
type: "any",
|
|
3976
|
+
outputPct: 100
|
|
3659
3977
|
},
|
|
3660
3978
|
{
|
|
3661
|
-
type: "any"
|
|
3979
|
+
type: "any",
|
|
3980
|
+
outputPct: 100
|
|
3662
3981
|
},
|
|
3663
3982
|
{
|
|
3664
|
-
type: "any"
|
|
3983
|
+
type: "any",
|
|
3984
|
+
outputPct: 100
|
|
3665
3985
|
}
|
|
3666
3986
|
]
|
|
3667
3987
|
},
|
|
@@ -3669,19 +3989,50 @@ var entities = [
|
|
|
3669
3989
|
entityItemId: 10202,
|
|
3670
3990
|
slots: [
|
|
3671
3991
|
{
|
|
3672
|
-
type: "loader"
|
|
3992
|
+
type: "loader",
|
|
3993
|
+
outputPct: 100
|
|
3994
|
+
},
|
|
3995
|
+
{
|
|
3996
|
+
type: "storage",
|
|
3997
|
+
outputPct: 100
|
|
3673
3998
|
},
|
|
3674
3999
|
{
|
|
3675
|
-
type: "storage"
|
|
4000
|
+
type: "storage",
|
|
4001
|
+
outputPct: 100
|
|
3676
4002
|
},
|
|
3677
4003
|
{
|
|
3678
|
-
type: "storage"
|
|
4004
|
+
type: "storage",
|
|
4005
|
+
outputPct: 100
|
|
4006
|
+
},
|
|
4007
|
+
{
|
|
4008
|
+
type: "storage",
|
|
4009
|
+
outputPct: 100
|
|
4010
|
+
}
|
|
4011
|
+
]
|
|
4012
|
+
},
|
|
4013
|
+
{
|
|
4014
|
+
entityItemId: 10203,
|
|
4015
|
+
slots: [
|
|
4016
|
+
{
|
|
4017
|
+
type: "generator",
|
|
4018
|
+
outputPct: 100
|
|
3679
4019
|
},
|
|
3680
4020
|
{
|
|
3681
|
-
type: "
|
|
4021
|
+
type: "gatherer",
|
|
4022
|
+
outputPct: 100
|
|
4023
|
+
}
|
|
4024
|
+
]
|
|
4025
|
+
},
|
|
4026
|
+
{
|
|
4027
|
+
entityItemId: 10204,
|
|
4028
|
+
slots: [
|
|
4029
|
+
{
|
|
4030
|
+
type: "generator",
|
|
4031
|
+
outputPct: 100
|
|
3682
4032
|
},
|
|
3683
4033
|
{
|
|
3684
|
-
type: "
|
|
4034
|
+
type: "crafter",
|
|
4035
|
+
outputPct: 100
|
|
3685
4036
|
}
|
|
3686
4037
|
]
|
|
3687
4038
|
},
|
|
@@ -3692,78 +4043,6 @@ var entities = [
|
|
|
3692
4043
|
}
|
|
3693
4044
|
];
|
|
3694
4045
|
|
|
3695
|
-
const categoryColors = {
|
|
3696
|
-
ore: '#C26D3F',
|
|
3697
|
-
crystal: '#4ADBFF',
|
|
3698
|
-
gas: '#B8E4A0',
|
|
3699
|
-
regolith: '#C4A57B',
|
|
3700
|
-
biomass: '#5A8B3E',
|
|
3701
|
-
};
|
|
3702
|
-
const tierColors = {
|
|
3703
|
-
1: '#8b8b8b',
|
|
3704
|
-
2: '#4ade80',
|
|
3705
|
-
3: '#818cf8',
|
|
3706
|
-
4: '#c084fc',
|
|
3707
|
-
5: '#fbbf24',
|
|
3708
|
-
6: '#f97316',
|
|
3709
|
-
7: '#ef4444',
|
|
3710
|
-
8: '#ec4899',
|
|
3711
|
-
9: '#06b6d4',
|
|
3712
|
-
10: '#ffffff',
|
|
3713
|
-
};
|
|
3714
|
-
const tierLabels = {
|
|
3715
|
-
1: 'Common',
|
|
3716
|
-
2: 'Uncommon',
|
|
3717
|
-
3: 'Rare',
|
|
3718
|
-
4: 'Epic',
|
|
3719
|
-
5: 'Legendary',
|
|
3720
|
-
6: 'Mythic',
|
|
3721
|
-
7: 'Divine',
|
|
3722
|
-
8: 'Celestial',
|
|
3723
|
-
9: 'Eternal',
|
|
3724
|
-
10: 'Transcendent',
|
|
3725
|
-
};
|
|
3726
|
-
const categoryIcons = {
|
|
3727
|
-
ore: '⬡',
|
|
3728
|
-
crystal: '◈',
|
|
3729
|
-
gas: '◎',
|
|
3730
|
-
regolith: '■',
|
|
3731
|
-
biomass: '❋',
|
|
3732
|
-
};
|
|
3733
|
-
const categoryIconShapes = {
|
|
3734
|
-
ore: 'hex',
|
|
3735
|
-
crystal: 'diamond',
|
|
3736
|
-
gas: 'circle',
|
|
3737
|
-
regolith: 'square',
|
|
3738
|
-
biomass: 'star',
|
|
3739
|
-
};
|
|
3740
|
-
const componentIcon = '▣';
|
|
3741
|
-
const moduleIcon = '⬢';
|
|
3742
|
-
const itemAbbreviations = {
|
|
3743
|
-
10001: 'HP',
|
|
3744
|
-
10002: 'CL',
|
|
3745
|
-
10003: 'TC',
|
|
3746
|
-
10004: 'PC',
|
|
3747
|
-
10005: 'DS',
|
|
3748
|
-
10006: 'EP',
|
|
3749
|
-
10007: 'CA',
|
|
3750
|
-
10008: 'TB',
|
|
3751
|
-
10009: 'RC',
|
|
3752
|
-
10010: 'FA',
|
|
3753
|
-
10100: 'EN',
|
|
3754
|
-
10101: 'GN',
|
|
3755
|
-
10102: 'EX',
|
|
3756
|
-
10103: 'LD',
|
|
3757
|
-
10104: 'MF',
|
|
3758
|
-
10105: 'ST',
|
|
3759
|
-
10200: 'CT',
|
|
3760
|
-
10201: 'SH',
|
|
3761
|
-
10202: 'WH',
|
|
3762
|
-
20001: 'HP',
|
|
3763
|
-
20002: 'CL',
|
|
3764
|
-
20200: 'CT',
|
|
3765
|
-
};
|
|
3766
|
-
|
|
3767
4046
|
const itemMetadata = {
|
|
3768
4047
|
101: { name: 'Ore', description: 'Crude metallic ore.', color: '#C26D3F' },
|
|
3769
4048
|
102: { name: 'Ore', description: 'Refined metallic ore with improved purity.', color: '#C26D3F' },
|
|
@@ -3772,6 +4051,13 @@ const itemMetadata = {
|
|
|
3772
4051
|
description: 'High-grade metallic ore with exceptional density.',
|
|
3773
4052
|
color: '#C26D3F',
|
|
3774
4053
|
},
|
|
4054
|
+
104: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
4055
|
+
105: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
4056
|
+
106: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
4057
|
+
107: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
4058
|
+
108: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
4059
|
+
109: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
4060
|
+
110: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3775
4061
|
201: { name: 'Crystal', description: 'Raw resonant crystal.', color: '#4ADBFF' },
|
|
3776
4062
|
202: {
|
|
3777
4063
|
name: 'Crystal',
|
|
@@ -3783,6 +4069,13 @@ const itemMetadata = {
|
|
|
3783
4069
|
description: 'High-grade resonant crystal with exceptional purity.',
|
|
3784
4070
|
color: '#4ADBFF',
|
|
3785
4071
|
},
|
|
4072
|
+
204: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4073
|
+
205: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4074
|
+
206: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4075
|
+
207: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4076
|
+
208: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4077
|
+
209: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4078
|
+
210: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
3786
4079
|
301: { name: 'Gas', description: 'Raw volatile gas.', color: '#B8E4A0' },
|
|
3787
4080
|
302: {
|
|
3788
4081
|
name: 'Gas',
|
|
@@ -3794,6 +4087,13 @@ const itemMetadata = {
|
|
|
3794
4087
|
description: 'High-grade volatile gas with exceptional energy density.',
|
|
3795
4088
|
color: '#B8E4A0',
|
|
3796
4089
|
},
|
|
4090
|
+
304: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4091
|
+
305: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4092
|
+
306: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4093
|
+
307: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4094
|
+
308: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4095
|
+
309: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4096
|
+
310: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
3797
4097
|
401: { name: 'Regolith', description: 'Crude regolith dust.', color: '#C4A57B' },
|
|
3798
4098
|
402: {
|
|
3799
4099
|
name: 'Regolith',
|
|
@@ -3805,6 +4105,13 @@ const itemMetadata = {
|
|
|
3805
4105
|
description: 'High-grade regolith with exceptional uniformity.',
|
|
3806
4106
|
color: '#C4A57B',
|
|
3807
4107
|
},
|
|
4108
|
+
404: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4109
|
+
405: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4110
|
+
406: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4111
|
+
407: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4112
|
+
408: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4113
|
+
409: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4114
|
+
410: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
3808
4115
|
501: { name: 'Biomass', description: 'Crude organic biomass.', color: '#5A8B3E' },
|
|
3809
4116
|
502: {
|
|
3810
4117
|
name: 'Biomass',
|
|
@@ -3816,6 +4123,13 @@ const itemMetadata = {
|
|
|
3816
4123
|
description: 'High-grade biomass with exceptional saturation.',
|
|
3817
4124
|
color: '#5A8B3E',
|
|
3818
4125
|
},
|
|
4126
|
+
504: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4127
|
+
505: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4128
|
+
506: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4129
|
+
507: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4130
|
+
508: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4131
|
+
509: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4132
|
+
510: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
3819
4133
|
10001: {
|
|
3820
4134
|
name: 'Hull Plates',
|
|
3821
4135
|
description: 'Structural plating formed from ore. Used in hulls, containers, and frames.',
|
|
@@ -3901,6 +4215,11 @@ const itemMetadata = {
|
|
|
3901
4215
|
description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
|
|
3902
4216
|
color: '#4ADBFF',
|
|
3903
4217
|
},
|
|
4218
|
+
10107: {
|
|
4219
|
+
name: 'Warp',
|
|
4220
|
+
description: 'Folds local space-time around the hull, projecting the ship across vast distances in a single discharge of the entire energy reserve.',
|
|
4221
|
+
color: '#9be4ff',
|
|
4222
|
+
},
|
|
3904
4223
|
10200: {
|
|
3905
4224
|
name: 'Container',
|
|
3906
4225
|
description: 'Passive floating cargo storage in space. Towed by ships.',
|
|
@@ -3916,6 +4235,16 @@ const itemMetadata = {
|
|
|
3916
4235
|
description: 'Massive stationary storage facility with a single loader module slot.',
|
|
3917
4236
|
color: '#EAB308',
|
|
3918
4237
|
},
|
|
4238
|
+
10203: {
|
|
4239
|
+
name: 'Extractor',
|
|
4240
|
+
description: 'Planetary resource extraction facility with generator and gatherer module slots.',
|
|
4241
|
+
color: '#D4726F',
|
|
4242
|
+
},
|
|
4243
|
+
10204: {
|
|
4244
|
+
name: 'Factory',
|
|
4245
|
+
description: 'Planetary fabrication facility with generator and crafter module slots.',
|
|
4246
|
+
color: '#7BA7D4',
|
|
4247
|
+
},
|
|
3919
4248
|
20001: {
|
|
3920
4249
|
name: 'Hull Plates',
|
|
3921
4250
|
description: 'Advanced structural plating reinforced with tier 2 ore.',
|
|
@@ -3935,6 +4264,8 @@ const itemMetadata = {
|
|
|
3935
4264
|
const entityMetadata = {
|
|
3936
4265
|
10201: { moduleSlotLabels: ['Engine', 'Generator', 'Gatherer', 'Loader', 'Storage'] },
|
|
3937
4266
|
10202: { moduleSlotLabels: ['Loader', 'Storage', 'Storage', 'Storage', 'Storage'] },
|
|
4267
|
+
10203: { moduleSlotLabels: ['Generator', 'Gatherer'] },
|
|
4268
|
+
10204: { moduleSlotLabels: ['Generator', 'Crafter'] },
|
|
3938
4269
|
};
|
|
3939
4270
|
for (const item of items) {
|
|
3940
4271
|
if (!itemMetadata[item.id]) {
|
|
@@ -4040,9 +4371,6 @@ function typeLabel(type) {
|
|
|
4040
4371
|
function categoryLabel(cat) {
|
|
4041
4372
|
return CATEGORY_LABELS[cat];
|
|
4042
4373
|
}
|
|
4043
|
-
function tierLabel(tier) {
|
|
4044
|
-
return tierLabels[tier] ?? `T${tier}`;
|
|
4045
|
-
}
|
|
4046
4374
|
const CATEGORY_BY_INDEX = ['ore', 'gas', 'regolith', 'biomass', 'crystal'];
|
|
4047
4375
|
function categoryFromIndex(i) {
|
|
4048
4376
|
return CATEGORY_BY_INDEX[i];
|
|
@@ -4105,10 +4433,15 @@ function hash512(seed, string) {
|
|
|
4105
4433
|
}
|
|
4106
4434
|
|
|
4107
4435
|
const DEPTH_THRESHOLD_T1 = 0;
|
|
4108
|
-
const DEPTH_THRESHOLD_T2 =
|
|
4109
|
-
const DEPTH_THRESHOLD_T3 =
|
|
4110
|
-
const DEPTH_THRESHOLD_T4 =
|
|
4111
|
-
const DEPTH_THRESHOLD_T5 =
|
|
4436
|
+
const DEPTH_THRESHOLD_T2 = 1500;
|
|
4437
|
+
const DEPTH_THRESHOLD_T3 = 5000;
|
|
4438
|
+
const DEPTH_THRESHOLD_T4 = 12000;
|
|
4439
|
+
const DEPTH_THRESHOLD_T5 = 22000;
|
|
4440
|
+
const DEPTH_THRESHOLD_T6 = 32000;
|
|
4441
|
+
const DEPTH_THRESHOLD_T7 = 42000;
|
|
4442
|
+
const DEPTH_THRESHOLD_T8 = 50000;
|
|
4443
|
+
const DEPTH_THRESHOLD_T9 = 57000;
|
|
4444
|
+
const DEPTH_THRESHOLD_T10 = 63000;
|
|
4112
4445
|
const LOCATION_MIN_DEPTH = 500;
|
|
4113
4446
|
const LOCATION_MAX_DEPTH = 65535;
|
|
4114
4447
|
const YIELD_THRESHOLD = Math.floor(0.001 * 0xffffffff);
|
|
@@ -4118,19 +4451,22 @@ const PLANET_SUBTYPE_TERRESTRIAL = 2;
|
|
|
4118
4451
|
const PLANET_SUBTYPE_ICY = 3;
|
|
4119
4452
|
const PLANET_SUBTYPE_OCEAN = 4;
|
|
4120
4453
|
const PLANET_SUBTYPE_INDUSTRIAL = 5;
|
|
4454
|
+
const DEPTH_THRESHOLD_TABLE = [
|
|
4455
|
+
DEPTH_THRESHOLD_T1,
|
|
4456
|
+
DEPTH_THRESHOLD_T2,
|
|
4457
|
+
DEPTH_THRESHOLD_T3,
|
|
4458
|
+
DEPTH_THRESHOLD_T4,
|
|
4459
|
+
DEPTH_THRESHOLD_T5,
|
|
4460
|
+
DEPTH_THRESHOLD_T6,
|
|
4461
|
+
DEPTH_THRESHOLD_T7,
|
|
4462
|
+
DEPTH_THRESHOLD_T8,
|
|
4463
|
+
DEPTH_THRESHOLD_T9,
|
|
4464
|
+
DEPTH_THRESHOLD_T10,
|
|
4465
|
+
];
|
|
4121
4466
|
function getDepthThreshold(tier) {
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
case 2:
|
|
4126
|
-
return DEPTH_THRESHOLD_T2;
|
|
4127
|
-
case 3:
|
|
4128
|
-
return DEPTH_THRESHOLD_T3;
|
|
4129
|
-
case 4:
|
|
4130
|
-
return DEPTH_THRESHOLD_T4;
|
|
4131
|
-
default:
|
|
4132
|
-
return DEPTH_THRESHOLD_T5;
|
|
4133
|
-
}
|
|
4467
|
+
if (tier < 1 || tier > 10)
|
|
4468
|
+
return 65535;
|
|
4469
|
+
return DEPTH_THRESHOLD_TABLE[tier - 1];
|
|
4134
4470
|
}
|
|
4135
4471
|
function getResourceTier(itemId) {
|
|
4136
4472
|
return getItem(itemId).tier;
|
|
@@ -4143,11 +4479,11 @@ function getResourceWeight(itemId, stratum) {
|
|
|
4143
4479
|
const depthAbove = stratum - threshold;
|
|
4144
4480
|
switch (tier) {
|
|
4145
4481
|
case 1:
|
|
4146
|
-
if (stratum <
|
|
4482
|
+
if (stratum < DEPTH_THRESHOLD_T2)
|
|
4147
4483
|
return 100;
|
|
4148
|
-
if (stratum <
|
|
4484
|
+
if (stratum < DEPTH_THRESHOLD_T3)
|
|
4149
4485
|
return 80;
|
|
4150
|
-
if (stratum <
|
|
4486
|
+
if (stratum < DEPTH_THRESHOLD_T4)
|
|
4151
4487
|
return 50;
|
|
4152
4488
|
return 30;
|
|
4153
4489
|
case 2:
|
|
@@ -4172,37 +4508,97 @@ function getResourceWeight(itemId, stratum) {
|
|
|
4172
4508
|
return 10;
|
|
4173
4509
|
}
|
|
4174
4510
|
}
|
|
4175
|
-
const
|
|
4176
|
-
const
|
|
4177
|
-
const
|
|
4178
|
-
const
|
|
4179
|
-
const
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4511
|
+
const RESOURCE_ORE = 0;
|
|
4512
|
+
const RESOURCE_GAS = 1;
|
|
4513
|
+
const RESOURCE_REGOLITH = 2;
|
|
4514
|
+
const RESOURCE_BIOMASS = 3;
|
|
4515
|
+
const RESOURCE_CRYSTAL = 4;
|
|
4516
|
+
function categoryBaseId(category) {
|
|
4517
|
+
switch (category) {
|
|
4518
|
+
case RESOURCE_ORE:
|
|
4519
|
+
return 100;
|
|
4520
|
+
case RESOURCE_CRYSTAL:
|
|
4521
|
+
return 200;
|
|
4522
|
+
case RESOURCE_GAS:
|
|
4523
|
+
return 300;
|
|
4524
|
+
case RESOURCE_REGOLITH:
|
|
4525
|
+
return 400;
|
|
4526
|
+
case RESOURCE_BIOMASS:
|
|
4527
|
+
return 500;
|
|
4528
|
+
default:
|
|
4529
|
+
return 0;
|
|
4530
|
+
}
|
|
4531
|
+
}
|
|
4532
|
+
function resourceId(category, tier) {
|
|
4533
|
+
return categoryBaseId(category) + tier;
|
|
4534
|
+
}
|
|
4535
|
+
function getLocationProfile(locationType, subtype) {
|
|
4536
|
+
if (locationType === LocationType.ASTEROID) {
|
|
4537
|
+
return [
|
|
4538
|
+
{ category: RESOURCE_ORE, maxTier: 5 },
|
|
4539
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 5 },
|
|
4540
|
+
];
|
|
4541
|
+
}
|
|
4542
|
+
if (locationType === LocationType.NEBULA) {
|
|
4543
|
+
return [
|
|
4544
|
+
{ category: RESOURCE_GAS, maxTier: 5 },
|
|
4545
|
+
{ category: RESOURCE_REGOLITH, maxTier: 5 },
|
|
4546
|
+
];
|
|
4547
|
+
}
|
|
4548
|
+
if (locationType === LocationType.ICE_FIELD) {
|
|
4549
|
+
return [
|
|
4550
|
+
{ category: RESOURCE_GAS, maxTier: 5 },
|
|
4551
|
+
{ category: RESOURCE_BIOMASS, maxTier: 5 },
|
|
4552
|
+
];
|
|
4553
|
+
}
|
|
4554
|
+
if (locationType === LocationType.PLANET) {
|
|
4189
4555
|
switch (subtype) {
|
|
4190
4556
|
case PLANET_SUBTYPE_GAS_GIANT:
|
|
4191
|
-
return
|
|
4557
|
+
return [
|
|
4558
|
+
{ category: RESOURCE_GAS, maxTier: 10 },
|
|
4559
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 3 },
|
|
4560
|
+
];
|
|
4192
4561
|
case PLANET_SUBTYPE_ROCKY:
|
|
4193
|
-
return
|
|
4562
|
+
return [
|
|
4563
|
+
{ category: RESOURCE_REGOLITH, maxTier: 10 },
|
|
4564
|
+
{ category: RESOURCE_ORE, maxTier: 3 },
|
|
4565
|
+
];
|
|
4194
4566
|
case PLANET_SUBTYPE_TERRESTRIAL:
|
|
4195
|
-
return
|
|
4567
|
+
return [
|
|
4568
|
+
{ category: RESOURCE_ORE, maxTier: 10 },
|
|
4569
|
+
{ category: RESOURCE_BIOMASS, maxTier: 3 },
|
|
4570
|
+
];
|
|
4196
4571
|
case PLANET_SUBTYPE_ICY:
|
|
4197
|
-
return
|
|
4572
|
+
return [
|
|
4573
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 10 },
|
|
4574
|
+
{ category: RESOURCE_REGOLITH, maxTier: 3 },
|
|
4575
|
+
];
|
|
4198
4576
|
case PLANET_SUBTYPE_OCEAN:
|
|
4199
|
-
return
|
|
4577
|
+
return [
|
|
4578
|
+
{ category: RESOURCE_BIOMASS, maxTier: 10 },
|
|
4579
|
+
{ category: RESOURCE_GAS, maxTier: 3 },
|
|
4580
|
+
];
|
|
4200
4581
|
case PLANET_SUBTYPE_INDUSTRIAL:
|
|
4201
|
-
return
|
|
4582
|
+
return [
|
|
4583
|
+
{ category: RESOURCE_ORE, maxTier: 3 },
|
|
4584
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 3 },
|
|
4585
|
+
{ category: RESOURCE_REGOLITH, maxTier: 3 },
|
|
4586
|
+
{ category: RESOURCE_BIOMASS, maxTier: 3 },
|
|
4587
|
+
];
|
|
4202
4588
|
}
|
|
4203
4589
|
}
|
|
4204
4590
|
return [];
|
|
4205
4591
|
}
|
|
4592
|
+
function getLocationCandidates(locationType, subtype) {
|
|
4593
|
+
const profile = getLocationProfile(locationType, subtype);
|
|
4594
|
+
const ids = [];
|
|
4595
|
+
for (const { category, maxTier } of profile) {
|
|
4596
|
+
for (let tier = 1; tier <= maxTier; tier++) {
|
|
4597
|
+
ids.push(resourceId(category, tier));
|
|
4598
|
+
}
|
|
4599
|
+
}
|
|
4600
|
+
return ids;
|
|
4601
|
+
}
|
|
4206
4602
|
function getEligibleResources(locationType, subtype, stratum) {
|
|
4207
4603
|
const candidates = getLocationCandidates(locationType, subtype);
|
|
4208
4604
|
return candidates.filter((itemId) => {
|
|
@@ -6378,7 +6774,6 @@ var nebulaNouns = [
|
|
|
6378
6774
|
];
|
|
6379
6775
|
|
|
6380
6776
|
const LOCATION_EXISTS_THRESHOLD = 0x10;
|
|
6381
|
-
const LOCATION_ACTIVE_THRESHOLD = 0x80;
|
|
6382
6777
|
function getLocationType(gameSeed, coordinates) {
|
|
6383
6778
|
const seed = Checksum256.from(gameSeed);
|
|
6384
6779
|
const str = ['system', coordinates.x, coordinates.y].join('-');
|
|
@@ -6386,13 +6781,13 @@ function getLocationType(gameSeed, coordinates) {
|
|
|
6386
6781
|
if (hashResult.array[0] >= LOCATION_EXISTS_THRESHOLD) {
|
|
6387
6782
|
return LocationType.EMPTY;
|
|
6388
6783
|
}
|
|
6389
|
-
if (hashResult.array[1] < 96)
|
|
6784
|
+
if (hashResult.array[1] < 96)
|
|
6390
6785
|
return LocationType.PLANET;
|
|
6391
|
-
|
|
6392
|
-
else if (hashResult.array[1] < 176) {
|
|
6786
|
+
if (hashResult.array[1] < 149)
|
|
6393
6787
|
return LocationType.ASTEROID;
|
|
6394
|
-
|
|
6395
|
-
|
|
6788
|
+
if (hashResult.array[1] < 202)
|
|
6789
|
+
return LocationType.NEBULA;
|
|
6790
|
+
return LocationType.ICE_FIELD;
|
|
6396
6791
|
}
|
|
6397
6792
|
function isGatherableLocation(locationType) {
|
|
6398
6793
|
return locationType !== LocationType.EMPTY;
|
|
@@ -6407,6 +6802,8 @@ function getLocationTypeName(type) {
|
|
|
6407
6802
|
return 'Asteroid';
|
|
6408
6803
|
case LocationType.NEBULA:
|
|
6409
6804
|
return 'Nebula';
|
|
6805
|
+
case LocationType.ICE_FIELD:
|
|
6806
|
+
return 'Ice Field';
|
|
6410
6807
|
}
|
|
6411
6808
|
}
|
|
6412
6809
|
function uint16(hash, offset) {
|
|
@@ -6434,6 +6831,14 @@ function generateNebulaName(hashResult) {
|
|
|
6434
6831
|
const nounIdx = uint16(hashResult, 2) % nebulaNouns.length;
|
|
6435
6832
|
return `${nebulaAdjectives[adjIdx]} ${nebulaNouns[nounIdx]}`;
|
|
6436
6833
|
}
|
|
6834
|
+
function generateIceFieldName(hashResult) {
|
|
6835
|
+
const A = 65;
|
|
6836
|
+
const letter1 = String.fromCharCode(A + (hashResult.array[0] % 26));
|
|
6837
|
+
const letter2 = String.fromCharCode(A + (hashResult.array[1] % 26));
|
|
6838
|
+
const subId = (hashResult.array[2] % 9) + 1;
|
|
6839
|
+
const num = (uint16(hashResult, 3) % 9000) + 1000;
|
|
6840
|
+
return `${letter1}${letter2}-${subId}/${num}`;
|
|
6841
|
+
}
|
|
6437
6842
|
function getSystemName(gameSeed, location) {
|
|
6438
6843
|
const seed = Checksum256.from(gameSeed);
|
|
6439
6844
|
const locationType = getLocationType(seed, location);
|
|
@@ -6449,6 +6854,8 @@ function getSystemName(gameSeed, location) {
|
|
|
6449
6854
|
return generateAsteroidName(hashResult);
|
|
6450
6855
|
case LocationType.NEBULA:
|
|
6451
6856
|
return generateNebulaName(hashResult);
|
|
6857
|
+
case LocationType.ICE_FIELD:
|
|
6858
|
+
return generateIceFieldName(hashResult);
|
|
6452
6859
|
default:
|
|
6453
6860
|
return generatePlanetName(hashResult);
|
|
6454
6861
|
}
|
|
@@ -6474,33 +6881,27 @@ function deriveLocationStatic(gameSeed, coordinates) {
|
|
|
6474
6881
|
if (hashResult.array[1] < 96) {
|
|
6475
6882
|
loc.type = UInt8.from(LocationType.PLANET);
|
|
6476
6883
|
}
|
|
6477
|
-
else if (hashResult.array[1] <
|
|
6884
|
+
else if (hashResult.array[1] < 149) {
|
|
6478
6885
|
loc.type = UInt8.from(LocationType.ASTEROID);
|
|
6479
6886
|
}
|
|
6480
|
-
else {
|
|
6887
|
+
else if (hashResult.array[1] < 202) {
|
|
6481
6888
|
loc.type = UInt8.from(LocationType.NEBULA);
|
|
6482
6889
|
}
|
|
6890
|
+
else {
|
|
6891
|
+
loc.type = UInt8.from(LocationType.ICE_FIELD);
|
|
6892
|
+
}
|
|
6483
6893
|
loc.subtype = UInt8.from(Number(loc.type) === LocationType.PLANET ? hashResult.array[2] % 6 : hashResult.array[2]);
|
|
6484
6894
|
loc.seed0 = UInt8.from(hashResult.array[3]);
|
|
6485
6895
|
loc.seed1 = UInt8.from(hashResult.array[4]);
|
|
6486
6896
|
return loc;
|
|
6487
6897
|
}
|
|
6488
|
-
function
|
|
6489
|
-
|
|
6490
|
-
const coords = Coordinates.from(coordinates);
|
|
6491
|
-
const str = `system-epoch-${coords.x}-${coords.y}`;
|
|
6492
|
-
const hashResult = hash512(seed, str);
|
|
6493
|
-
return Types.location_epoch.from({
|
|
6494
|
-
active: hashResult.array[0] < LOCATION_ACTIVE_THRESHOLD,
|
|
6495
|
-
seed0: hashResult.array[1],
|
|
6496
|
-
seed1: hashResult.array[2],
|
|
6497
|
-
});
|
|
6898
|
+
function isLocationBuildable(gameSeed, coordinates) {
|
|
6899
|
+
return getLocationType(gameSeed, coordinates) === LocationType.PLANET;
|
|
6498
6900
|
}
|
|
6499
|
-
function deriveLocation(gameSeed,
|
|
6901
|
+
function deriveLocation(gameSeed, coordinates) {
|
|
6500
6902
|
const staticProps = deriveLocationStatic(gameSeed, coordinates);
|
|
6501
6903
|
return Types.location_derived.from({
|
|
6502
6904
|
static_props: staticProps,
|
|
6503
|
-
epoch_props: deriveLocationEpoch(epochSeed, coordinates),
|
|
6504
6905
|
size: deriveLocationSize(staticProps),
|
|
6505
6906
|
});
|
|
6506
6907
|
}
|
|
@@ -6527,9 +6928,6 @@ class GameState extends Types.state_row {
|
|
|
6527
6928
|
get isEnabled() {
|
|
6528
6929
|
return this.enabled;
|
|
6529
6930
|
}
|
|
6530
|
-
get shipCount() {
|
|
6531
|
-
return Number(this.ships);
|
|
6532
|
-
}
|
|
6533
6931
|
get currentSalt() {
|
|
6534
6932
|
return this.salt;
|
|
6535
6933
|
}
|
|
@@ -6570,7 +6968,6 @@ class GameState extends Types.state_row {
|
|
|
6570
6968
|
return {
|
|
6571
6969
|
enabled: this.enabled,
|
|
6572
6970
|
epoch: this.epoch.toString(),
|
|
6573
|
-
ships: this.shipCount,
|
|
6574
6971
|
hasSeed: !this.seed.equals(Checksum256.from('0'.repeat(64))),
|
|
6575
6972
|
hasCommit: !this.commit.equals(Checksum256.from('0'.repeat(64))),
|
|
6576
6973
|
};
|
|
@@ -6622,6 +7019,40 @@ function lerp$1(origin, destination, time) {
|
|
|
6622
7019
|
y: (1 - time) * Number(origin.y) + time * Number(destination.y),
|
|
6623
7020
|
};
|
|
6624
7021
|
}
|
|
7022
|
+
function easeFlightProgress(t) {
|
|
7023
|
+
if (t <= 0)
|
|
7024
|
+
return 0;
|
|
7025
|
+
if (t >= 1)
|
|
7026
|
+
return 1;
|
|
7027
|
+
return t < 0.5 ? 2 * t * t : 1 - 2 * (1 - t) * (1 - t);
|
|
7028
|
+
}
|
|
7029
|
+
function flightSpeedFactor(t) {
|
|
7030
|
+
if (t <= 0 || t >= 1)
|
|
7031
|
+
return 0;
|
|
7032
|
+
return t < 0.5 ? 4 * t : 4 * (1 - t);
|
|
7033
|
+
}
|
|
7034
|
+
function interpolateFlightPosition(origin, destination, taskProgress, options) {
|
|
7035
|
+
const t = options?.easing === 'linear' ? taskProgress : easeFlightProgress(taskProgress);
|
|
7036
|
+
return {
|
|
7037
|
+
x: (1 - t) * Number(origin.x) + t * Number(destination.x),
|
|
7038
|
+
y: (1 - t) * Number(origin.y) + t * Number(destination.y),
|
|
7039
|
+
};
|
|
7040
|
+
}
|
|
7041
|
+
function getInterpolatedPosition(entity, taskIndex, taskProgress) {
|
|
7042
|
+
if (!entity.schedule || entity.schedule.tasks.length === 0) {
|
|
7043
|
+
return { x: Number(entity.coordinates.x), y: Number(entity.coordinates.y) };
|
|
7044
|
+
}
|
|
7045
|
+
if (taskIndex < 0) {
|
|
7046
|
+
const settled = getFlightOrigin(entity, entity.schedule.tasks.length);
|
|
7047
|
+
return { x: Number(settled.x), y: Number(settled.y) };
|
|
7048
|
+
}
|
|
7049
|
+
const task = entity.schedule.tasks[taskIndex];
|
|
7050
|
+
if (!task.type.equals(TaskType.TRAVEL) || !task.coordinates) {
|
|
7051
|
+
const origin = getFlightOrigin(entity, taskIndex);
|
|
7052
|
+
return { x: Number(origin.x), y: Number(origin.y) };
|
|
7053
|
+
}
|
|
7054
|
+
return interpolateFlightPosition(getFlightOrigin(entity, taskIndex), task.coordinates, taskProgress);
|
|
7055
|
+
}
|
|
6625
7056
|
function rotation(origin, destination) {
|
|
6626
7057
|
return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
|
|
6627
7058
|
}
|
|
@@ -6831,9 +7262,12 @@ function getDestinationLocation(entity) {
|
|
|
6831
7262
|
return undefined;
|
|
6832
7263
|
}
|
|
6833
7264
|
function getPositionAt(entity, taskIndex, taskProgress) {
|
|
6834
|
-
if (!entity.schedule || entity.schedule.tasks.length === 0
|
|
7265
|
+
if (!entity.schedule || entity.schedule.tasks.length === 0) {
|
|
6835
7266
|
return entity.coordinates;
|
|
6836
7267
|
}
|
|
7268
|
+
if (taskIndex < 0) {
|
|
7269
|
+
return getFlightOrigin(entity, entity.schedule.tasks.length);
|
|
7270
|
+
}
|
|
6837
7271
|
const task = entity.schedule.tasks[taskIndex];
|
|
6838
7272
|
if (!task.type.equals(TaskType.TRAVEL) || !task.coordinates) {
|
|
6839
7273
|
return getFlightOrigin(entity, taskIndex);
|
|
@@ -6886,7 +7320,8 @@ function calc_transfer_duration(source, dest, cargoMass) {
|
|
|
6886
7320
|
? source.location.z
|
|
6887
7321
|
: (source.location.z?.toNumber() ?? 0);
|
|
6888
7322
|
const destZ = typeof dest.location.z === 'number' ? dest.location.z : (dest.location.z?.toNumber() ?? 0);
|
|
6889
|
-
const
|
|
7323
|
+
const rawDistance = Math.abs(sourceZ - destZ);
|
|
7324
|
+
const distance = rawDistance < MIN_TRANSFER_DISTANCE ? MIN_TRANSFER_DISTANCE : rawDistance;
|
|
6890
7325
|
const totalMass = cargoMass + totalLoaderMass;
|
|
6891
7326
|
const acceleration = calc_acceleration(totalThrust, totalMass);
|
|
6892
7327
|
const flightTime = 2 * Math.sqrt(distance / acceleration);
|
|
@@ -6965,7 +7400,7 @@ function cargoItemToStack(item) {
|
|
|
6965
7400
|
return {
|
|
6966
7401
|
item_id: UInt16.from(item.item_id),
|
|
6967
7402
|
quantity: UInt32.from(item.quantity),
|
|
6968
|
-
stats: item.stats,
|
|
7403
|
+
stats: UInt64.from(item.stats),
|
|
6969
7404
|
modules: item.modules ?? [],
|
|
6970
7405
|
};
|
|
6971
7406
|
}
|
|
@@ -7062,7 +7497,7 @@ function currentTaskIndex(entity, now) {
|
|
|
7062
7497
|
}
|
|
7063
7498
|
timeAccum += taskDuration;
|
|
7064
7499
|
}
|
|
7065
|
-
return
|
|
7500
|
+
return -1;
|
|
7066
7501
|
}
|
|
7067
7502
|
function currentTask(entity, now) {
|
|
7068
7503
|
const index = currentTaskIndex(entity, now);
|
|
@@ -7128,6 +7563,23 @@ function currentTaskProgress(entity, now) {
|
|
|
7128
7563
|
return 1;
|
|
7129
7564
|
return Math.min(1, elapsed / duration);
|
|
7130
7565
|
}
|
|
7566
|
+
function currentTaskProgressFloat(entity, now) {
|
|
7567
|
+
if (!entity.schedule || entity.schedule.tasks.length === 0)
|
|
7568
|
+
return 0;
|
|
7569
|
+
const index = currentTaskIndex(entity, now);
|
|
7570
|
+
if (index < 0)
|
|
7571
|
+
return 0;
|
|
7572
|
+
const task = entity.schedule.tasks[index];
|
|
7573
|
+
const durationMs = task.duration.toNumber() * 1000;
|
|
7574
|
+
if (durationMs === 0)
|
|
7575
|
+
return 1;
|
|
7576
|
+
const startedMs = entity.schedule.started.toDate().getTime();
|
|
7577
|
+
const taskStartMs = startedMs + getTaskStartTime(entity, index) * 1000;
|
|
7578
|
+
const elapsedMs = now.getTime() - taskStartMs;
|
|
7579
|
+
if (elapsedMs <= 0)
|
|
7580
|
+
return 0;
|
|
7581
|
+
return Math.min(1, elapsedMs / durationMs);
|
|
7582
|
+
}
|
|
7131
7583
|
function scheduleProgress(entity, now) {
|
|
7132
7584
|
const duration = scheduleDuration(entity);
|
|
7133
7585
|
if (duration === 0)
|
|
@@ -7172,6 +7624,7 @@ var schedule = /*#__PURE__*/Object.freeze({
|
|
|
7172
7624
|
isTaskComplete: isTaskComplete,
|
|
7173
7625
|
isTaskInProgress: isTaskInProgress,
|
|
7174
7626
|
currentTaskProgress: currentTaskProgress,
|
|
7627
|
+
currentTaskProgressFloat: currentTaskProgressFloat,
|
|
7175
7628
|
scheduleProgress: scheduleProgress,
|
|
7176
7629
|
isTaskType: isTaskType,
|
|
7177
7630
|
isInFlight: isInFlight,
|
|
@@ -7352,6 +7805,10 @@ function applyTask(projected, task) {
|
|
|
7352
7805
|
case TaskType.DEPLOY:
|
|
7353
7806
|
applyDeployTask(projected, task);
|
|
7354
7807
|
break;
|
|
7808
|
+
case TaskType.UNDEPLOY:
|
|
7809
|
+
case TaskType.WRAP_ENTITY:
|
|
7810
|
+
case TaskType.DEMOLISH:
|
|
7811
|
+
break;
|
|
7355
7812
|
}
|
|
7356
7813
|
}
|
|
7357
7814
|
function projectEntity(entity, options) {
|
|
@@ -7456,7 +7913,7 @@ function validateCraftTask(task, projected) {
|
|
|
7456
7913
|
}
|
|
7457
7914
|
}
|
|
7458
7915
|
if (!found)
|
|
7459
|
-
throw new Error(
|
|
7916
|
+
throw new Error(ENTITY_CARGO_NOT_LOADED);
|
|
7460
7917
|
}
|
|
7461
7918
|
}
|
|
7462
7919
|
function validateSchedule(entity) {
|
|
@@ -7517,6 +7974,10 @@ function projectEntityAt(entity, now) {
|
|
|
7517
7974
|
if (taskComplete)
|
|
7518
7975
|
applyDeployTask(projected, task);
|
|
7519
7976
|
break;
|
|
7977
|
+
case TaskType.UNDEPLOY:
|
|
7978
|
+
case TaskType.WRAP_ENTITY:
|
|
7979
|
+
case TaskType.DEMOLISH:
|
|
7980
|
+
break;
|
|
7520
7981
|
}
|
|
7521
7982
|
}
|
|
7522
7983
|
return projected;
|
|
@@ -7620,6 +8081,9 @@ class ScheduleAccessor {
|
|
|
7620
8081
|
currentTaskProgress(now) {
|
|
7621
8082
|
return currentTaskProgress(this.entity, now);
|
|
7622
8083
|
}
|
|
8084
|
+
currentTaskProgressFloat(now) {
|
|
8085
|
+
return currentTaskProgressFloat(this.entity, now);
|
|
8086
|
+
}
|
|
7623
8087
|
progress(now) {
|
|
7624
8088
|
return scheduleProgress(this.entity, now);
|
|
7625
8089
|
}
|
|
@@ -7708,6 +8172,12 @@ class Ship extends Types.entity_info {
|
|
|
7708
8172
|
get name() {
|
|
7709
8173
|
return this.entity_name;
|
|
7710
8174
|
}
|
|
8175
|
+
get entityClass() {
|
|
8176
|
+
return 'orbital';
|
|
8177
|
+
}
|
|
8178
|
+
get canUndeploy() {
|
|
8179
|
+
return true;
|
|
8180
|
+
}
|
|
7711
8181
|
get inv() {
|
|
7712
8182
|
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
7713
8183
|
return this._inv;
|
|
@@ -7739,6 +8209,11 @@ class Ship extends Types.entity_info {
|
|
|
7739
8209
|
const progress = this.sched.currentTaskProgress(now);
|
|
7740
8210
|
return Coordinates.from(getPositionAt(this, taskIndex, progress));
|
|
7741
8211
|
}
|
|
8212
|
+
interpolatedPositionAt(now) {
|
|
8213
|
+
const taskIndex = this.sched.currentTaskIndex(now);
|
|
8214
|
+
const progress = this.sched.currentTaskProgressFloat(now);
|
|
8215
|
+
return getInterpolatedPosition(this, taskIndex, progress);
|
|
8216
|
+
}
|
|
7742
8217
|
isInFlight(now) {
|
|
7743
8218
|
return isInFlight(this, now);
|
|
7744
8219
|
}
|
|
@@ -7845,8 +8320,7 @@ const ORE_STATS = [
|
|
|
7845
8320
|
key: 'density',
|
|
7846
8321
|
label: 'Density',
|
|
7847
8322
|
abbreviation: 'DEN',
|
|
7848
|
-
purpose: '
|
|
7849
|
-
inverted: true,
|
|
8323
|
+
purpose: 'Structural integrity — higher rolls produce lighter hulls',
|
|
7850
8324
|
},
|
|
7851
8325
|
];
|
|
7852
8326
|
const CRYSTAL_STATS = [
|
|
@@ -8387,6 +8861,8 @@ function getModuleCapabilityType(itemId) {
|
|
|
8387
8861
|
return MODULE_STORAGE;
|
|
8388
8862
|
case ITEM_HAULER_T1:
|
|
8389
8863
|
return MODULE_HAULER;
|
|
8864
|
+
case ITEM_WARP_T1:
|
|
8865
|
+
return MODULE_WARP;
|
|
8390
8866
|
default:
|
|
8391
8867
|
return 0xff;
|
|
8392
8868
|
}
|
|
@@ -8421,92 +8897,124 @@ function moduleSlotTypeToCode(slotType) {
|
|
|
8421
8897
|
}
|
|
8422
8898
|
}
|
|
8423
8899
|
|
|
8900
|
+
const U16_MAX = 65535;
|
|
8901
|
+
function clampUint16(value) {
|
|
8902
|
+
return Math.min(value, U16_MAX);
|
|
8903
|
+
}
|
|
8904
|
+
function applySlotMultiplier(value, outputPct) {
|
|
8905
|
+
return clampUint16(Math.floor((value * outputPct) / 100));
|
|
8906
|
+
}
|
|
8907
|
+
function getSlotAmp(layout, slotIndex) {
|
|
8908
|
+
return layout[slotIndex]?.outputPct ?? 100;
|
|
8909
|
+
}
|
|
8910
|
+
|
|
8424
8911
|
function computeShipHullCapabilities(stats) {
|
|
8425
|
-
const density = stats.density
|
|
8426
|
-
const strength = stats.strength
|
|
8427
|
-
const hardness = stats.hardness
|
|
8428
|
-
const saturation = stats.saturation
|
|
8429
|
-
const hullmass =
|
|
8912
|
+
const density = stats.density;
|
|
8913
|
+
const strength = stats.strength;
|
|
8914
|
+
const hardness = stats.hardness;
|
|
8915
|
+
const saturation = stats.saturation;
|
|
8916
|
+
const hullmass = 100000 - 75 * density;
|
|
8430
8917
|
const statSum = strength + hardness + saturation;
|
|
8431
8918
|
const exponent = statSum / 2997.0;
|
|
8432
8919
|
const capacity = Math.floor(1000000 * 10 ** exponent);
|
|
8433
8920
|
return { hullmass, capacity };
|
|
8434
8921
|
}
|
|
8435
8922
|
function computeEngineCapabilities(stats) {
|
|
8436
|
-
const vol = stats.volatility
|
|
8437
|
-
const thm = stats.thermal
|
|
8923
|
+
const vol = stats.volatility;
|
|
8924
|
+
const thm = stats.thermal;
|
|
8438
8925
|
return {
|
|
8439
8926
|
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
8440
8927
|
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
8441
8928
|
};
|
|
8442
8929
|
}
|
|
8443
8930
|
function computeGeneratorCapabilities(stats) {
|
|
8444
|
-
const
|
|
8445
|
-
const
|
|
8931
|
+
const com = stats.composition;
|
|
8932
|
+
const fin = stats.fineness;
|
|
8446
8933
|
return {
|
|
8447
|
-
capacity: 300 + Math.floor(
|
|
8448
|
-
recharge: 1 + Math.floor((
|
|
8449
|
-
};
|
|
8450
|
-
}
|
|
8451
|
-
|
|
8452
|
-
|
|
8453
|
-
|
|
8454
|
-
|
|
8455
|
-
|
|
8934
|
+
capacity: 300 + Math.floor(com / 6),
|
|
8935
|
+
recharge: 1 + Math.floor((fin * 3) / 1000),
|
|
8936
|
+
};
|
|
8937
|
+
}
|
|
8938
|
+
const GATHERER_DEPTH_TABLE = [
|
|
8939
|
+
{ floor: 500, slope: 5 },
|
|
8940
|
+
{ floor: 2000, slope: 11 },
|
|
8941
|
+
{ floor: 7000, slope: 16 },
|
|
8942
|
+
{ floor: 15000, slope: 18 },
|
|
8943
|
+
{ floor: 25000, slope: 19 },
|
|
8944
|
+
{ floor: 35000, slope: 16 },
|
|
8945
|
+
{ floor: 46000, slope: 12 },
|
|
8946
|
+
{ floor: 53500, slope: 10 },
|
|
8947
|
+
{ floor: 60000, slope: 5 },
|
|
8948
|
+
{ floor: 63500, slope: 2 },
|
|
8949
|
+
];
|
|
8950
|
+
const GATHERER_DEPTH_MAX_TIER = 10;
|
|
8951
|
+
function gathererDepthForTier(tol, tier) {
|
|
8952
|
+
if (tier < 1 || tier > GATHERER_DEPTH_MAX_TIER) {
|
|
8953
|
+
throw new Error(`gatherer tier out of range: ${tier}`);
|
|
8954
|
+
}
|
|
8955
|
+
const p = GATHERER_DEPTH_TABLE[tier - 1];
|
|
8956
|
+
return p.floor + tol * p.slope;
|
|
8957
|
+
}
|
|
8958
|
+
function computeGathererCapabilities(stats, tier) {
|
|
8959
|
+
const str = stats.strength;
|
|
8960
|
+
const con = stats.conductivity;
|
|
8961
|
+
const ref = stats.reflectivity;
|
|
8962
|
+
const tol = stats.tolerance;
|
|
8456
8963
|
return {
|
|
8457
8964
|
yield: 200 + str,
|
|
8458
8965
|
drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
|
|
8459
|
-
depth:
|
|
8966
|
+
depth: gathererDepthForTier(tol, tier),
|
|
8460
8967
|
speed: 100 + Math.floor((ref * 4) / 5),
|
|
8461
8968
|
};
|
|
8462
8969
|
}
|
|
8463
8970
|
function computeLoaderCapabilities(stats) {
|
|
8464
|
-
const
|
|
8465
|
-
const
|
|
8971
|
+
const insulation = stats.insulation;
|
|
8972
|
+
const plasticity = stats.plasticity;
|
|
8466
8973
|
return {
|
|
8467
|
-
mass: Math.max(200, 2000 - Math.floor(
|
|
8468
|
-
thrust: 1 + Math.floor(
|
|
8974
|
+
mass: Math.max(200, 2000 - Math.floor(insulation * 2)),
|
|
8975
|
+
thrust: 1 + Math.floor(plasticity / 500),
|
|
8469
8976
|
quantity: 1,
|
|
8470
8977
|
};
|
|
8471
8978
|
}
|
|
8472
8979
|
function computeCrafterCapabilities(stats) {
|
|
8473
|
-
const rea = stats.reactivity
|
|
8474
|
-
const
|
|
8980
|
+
const rea = stats.reactivity;
|
|
8981
|
+
const fin = stats.fineness;
|
|
8475
8982
|
return {
|
|
8476
8983
|
speed: 100 + Math.floor((rea * 4) / 5),
|
|
8477
|
-
drain: Math.max(5, 30 - Math.floor(
|
|
8984
|
+
drain: Math.max(5, 30 - Math.floor(fin / 33)),
|
|
8478
8985
|
};
|
|
8479
8986
|
}
|
|
8480
8987
|
function computeHaulerCapabilities(stats) {
|
|
8481
|
-
const
|
|
8482
|
-
const
|
|
8483
|
-
const
|
|
8988
|
+
const fineness = stats.fineness;
|
|
8989
|
+
const conductivity = stats.conductivity;
|
|
8990
|
+
const composition = stats.composition;
|
|
8484
8991
|
return {
|
|
8485
|
-
capacity: Math.max(1, 1 + Math.floor(
|
|
8486
|
-
efficiency: 2000 +
|
|
8487
|
-
drain: Math.max(3, 15 - Math.floor(
|
|
8992
|
+
capacity: Math.max(1, 1 + Math.floor(fineness / 400)),
|
|
8993
|
+
efficiency: 2000 + conductivity * 6,
|
|
8994
|
+
drain: Math.max(3, 15 - Math.floor(composition / 80)),
|
|
8488
8995
|
};
|
|
8489
8996
|
}
|
|
8490
8997
|
function computeStorageCapabilities(stats, baseCapacity) {
|
|
8491
|
-
const strength = stats.strength
|
|
8492
|
-
const
|
|
8493
|
-
const
|
|
8494
|
-
const
|
|
8998
|
+
const strength = stats.strength;
|
|
8999
|
+
const density = stats.density;
|
|
9000
|
+
const hardness = stats.hardness;
|
|
9001
|
+
const saturation = stats.saturation;
|
|
9002
|
+
const statSum = strength + density + hardness + saturation;
|
|
8495
9003
|
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
8496
9004
|
return { capacityBonus };
|
|
8497
9005
|
}
|
|
8498
9006
|
function computeWarehouseHullCapabilities(stats) {
|
|
8499
|
-
const density = stats.density
|
|
8500
|
-
const strength = stats.strength
|
|
8501
|
-
const hardness = stats.hardness
|
|
8502
|
-
const saturation = stats.saturation
|
|
8503
|
-
const hullmass =
|
|
9007
|
+
const density = stats.density;
|
|
9008
|
+
const strength = stats.strength;
|
|
9009
|
+
const hardness = stats.hardness;
|
|
9010
|
+
const saturation = stats.saturation;
|
|
9011
|
+
const hullmass = 100000 - 75 * density;
|
|
8504
9012
|
const statSum = strength + hardness + saturation;
|
|
8505
9013
|
const exponent = statSum / 2997.0;
|
|
8506
9014
|
const capacity = Math.floor(20000000 * 10 ** exponent);
|
|
8507
9015
|
return { hullmass, capacity };
|
|
8508
9016
|
}
|
|
8509
|
-
function computeShipCapabilities(modules) {
|
|
9017
|
+
function computeShipCapabilities(modules, layout) {
|
|
8510
9018
|
const ship = {};
|
|
8511
9019
|
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
8512
9020
|
if (engineModules.length > 0) {
|
|
@@ -8514,7 +9022,7 @@ function computeShipCapabilities(modules) {
|
|
|
8514
9022
|
let totalDrain = 0;
|
|
8515
9023
|
for (const m of engineModules) {
|
|
8516
9024
|
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8517
|
-
totalThrust += caps.thrust;
|
|
9025
|
+
totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
|
|
8518
9026
|
totalDrain += caps.drain;
|
|
8519
9027
|
}
|
|
8520
9028
|
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
@@ -8525,25 +9033,37 @@ function computeShipCapabilities(modules) {
|
|
|
8525
9033
|
let totalRecharge = 0;
|
|
8526
9034
|
for (const m of generatorModules) {
|
|
8527
9035
|
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8528
|
-
|
|
8529
|
-
|
|
9036
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9037
|
+
totalCapacity += applySlotMultiplier(caps.capacity, amp);
|
|
9038
|
+
totalRecharge += applySlotMultiplier(caps.recharge, amp);
|
|
8530
9039
|
}
|
|
8531
|
-
ship.generator = {
|
|
9040
|
+
ship.generator = {
|
|
9041
|
+
capacity: clampUint16(totalCapacity),
|
|
9042
|
+
recharge: clampUint16(totalRecharge),
|
|
9043
|
+
};
|
|
8532
9044
|
}
|
|
8533
9045
|
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
8534
9046
|
if (gathererModules.length > 0) {
|
|
8535
9047
|
let totalYield = 0;
|
|
8536
9048
|
let totalDrain = 0;
|
|
8537
|
-
let
|
|
9049
|
+
let maxDepth = 0;
|
|
8538
9050
|
let totalSpeed = 0;
|
|
8539
9051
|
for (const m of gathererModules) {
|
|
8540
|
-
const
|
|
8541
|
-
|
|
9052
|
+
const tier = getItem(m.itemId).tier;
|
|
9053
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats), tier);
|
|
9054
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9055
|
+
totalYield += applySlotMultiplier(caps.yield, amp);
|
|
8542
9056
|
totalDrain += caps.drain;
|
|
8543
|
-
|
|
8544
|
-
|
|
9057
|
+
if (caps.depth > maxDepth)
|
|
9058
|
+
maxDepth = caps.depth;
|
|
9059
|
+
totalSpeed += applySlotMultiplier(caps.speed, amp);
|
|
8545
9060
|
}
|
|
8546
|
-
ship.gatherer = {
|
|
9061
|
+
ship.gatherer = {
|
|
9062
|
+
yield: clampUint16(totalYield),
|
|
9063
|
+
drain: totalDrain,
|
|
9064
|
+
depth: maxDepth,
|
|
9065
|
+
speed: clampUint16(totalSpeed),
|
|
9066
|
+
};
|
|
8547
9067
|
}
|
|
8548
9068
|
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
8549
9069
|
if (haulerModules.length > 0) {
|
|
@@ -8552,13 +9072,15 @@ function computeShipCapabilities(modules) {
|
|
|
8552
9072
|
let totalDrain = 0;
|
|
8553
9073
|
for (const m of haulerModules) {
|
|
8554
9074
|
const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
9075
|
+
const eff = applySlotMultiplier(caps.efficiency, getSlotAmp(layout, m.slotIndex));
|
|
8555
9076
|
totalCapacity += caps.capacity;
|
|
8556
|
-
weightedEffNum +=
|
|
9077
|
+
weightedEffNum += eff * caps.capacity;
|
|
8557
9078
|
totalDrain += caps.drain;
|
|
8558
9079
|
}
|
|
9080
|
+
const efficiency = totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0;
|
|
8559
9081
|
ship.hauler = {
|
|
8560
9082
|
capacity: totalCapacity,
|
|
8561
|
-
efficiency:
|
|
9083
|
+
efficiency: clampUint16(efficiency),
|
|
8562
9084
|
drain: totalDrain,
|
|
8563
9085
|
};
|
|
8564
9086
|
}
|
|
@@ -8570,10 +9092,14 @@ function computeShipCapabilities(modules) {
|
|
|
8570
9092
|
for (const m of loaderModules) {
|
|
8571
9093
|
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8572
9094
|
totalMass += caps.mass;
|
|
8573
|
-
totalThrust += caps.thrust;
|
|
9095
|
+
totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
|
|
8574
9096
|
totalQuantity += caps.quantity;
|
|
8575
9097
|
}
|
|
8576
|
-
ship.loaders = {
|
|
9098
|
+
ship.loaders = {
|
|
9099
|
+
mass: totalMass,
|
|
9100
|
+
thrust: clampUint16(totalThrust),
|
|
9101
|
+
quantity: totalQuantity,
|
|
9102
|
+
};
|
|
8577
9103
|
}
|
|
8578
9104
|
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
8579
9105
|
if (crafterModules.length > 0) {
|
|
@@ -8581,10 +9107,10 @@ function computeShipCapabilities(modules) {
|
|
|
8581
9107
|
let totalDrain = 0;
|
|
8582
9108
|
for (const m of crafterModules) {
|
|
8583
9109
|
const caps = computeCrafterCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8584
|
-
totalSpeed += caps.speed;
|
|
9110
|
+
totalSpeed += applySlotMultiplier(caps.speed, getSlotAmp(layout, m.slotIndex));
|
|
8585
9111
|
totalDrain += caps.drain;
|
|
8586
9112
|
}
|
|
8587
|
-
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
9113
|
+
ship.crafter = { speed: clampUint16(totalSpeed), drain: totalDrain };
|
|
8588
9114
|
}
|
|
8589
9115
|
return ship;
|
|
8590
9116
|
}
|
|
@@ -8593,6 +9119,12 @@ class Warehouse extends Types.entity_info {
|
|
|
8593
9119
|
get name() {
|
|
8594
9120
|
return this.entity_name;
|
|
8595
9121
|
}
|
|
9122
|
+
get entityClass() {
|
|
9123
|
+
return 'planetary';
|
|
9124
|
+
}
|
|
9125
|
+
get canDemolish() {
|
|
9126
|
+
return true;
|
|
9127
|
+
}
|
|
8596
9128
|
get inv() {
|
|
8597
9129
|
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
8598
9130
|
return this._inv;
|
|
@@ -8643,7 +9175,7 @@ class Warehouse extends Types.entity_info {
|
|
|
8643
9175
|
return hull.adding(this.totalCargoMass);
|
|
8644
9176
|
}
|
|
8645
9177
|
}
|
|
8646
|
-
function computeWarehouseCapabilities(modules) {
|
|
9178
|
+
function computeWarehouseCapabilities(modules, layout) {
|
|
8647
9179
|
const warehouse = {};
|
|
8648
9180
|
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
8649
9181
|
if (loaderModules.length > 0) {
|
|
@@ -8653,10 +9185,14 @@ function computeWarehouseCapabilities(modules) {
|
|
|
8653
9185
|
for (const m of loaderModules) {
|
|
8654
9186
|
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8655
9187
|
totalMass += caps.mass;
|
|
8656
|
-
totalThrust += caps.thrust;
|
|
9188
|
+
totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
|
|
8657
9189
|
totalQuantity += caps.quantity;
|
|
8658
9190
|
}
|
|
8659
|
-
warehouse.loaders = {
|
|
9191
|
+
warehouse.loaders = {
|
|
9192
|
+
mass: totalMass,
|
|
9193
|
+
thrust: clampUint16(totalThrust),
|
|
9194
|
+
quantity: totalQuantity,
|
|
9195
|
+
};
|
|
8660
9196
|
}
|
|
8661
9197
|
return warehouse;
|
|
8662
9198
|
}
|
|
@@ -8665,6 +9201,12 @@ class Container extends Types.entity_info {
|
|
|
8665
9201
|
get name() {
|
|
8666
9202
|
return this.entity_name;
|
|
8667
9203
|
}
|
|
9204
|
+
get entityClass() {
|
|
9205
|
+
return 'orbital';
|
|
9206
|
+
}
|
|
9207
|
+
get canUndeploy() {
|
|
9208
|
+
return true;
|
|
9209
|
+
}
|
|
8668
9210
|
get sched() {
|
|
8669
9211
|
this._sched ?? (this._sched = new ScheduleAccessor(this));
|
|
8670
9212
|
return this._sched;
|
|
@@ -8672,6 +9214,11 @@ class Container extends Types.entity_info {
|
|
|
8672
9214
|
get isIdle() {
|
|
8673
9215
|
return this.is_idle;
|
|
8674
9216
|
}
|
|
9217
|
+
interpolatedPositionAt(now) {
|
|
9218
|
+
const taskIndex = this.sched.currentTaskIndex(now);
|
|
9219
|
+
const progress = this.sched.currentTaskProgressFloat(now);
|
|
9220
|
+
return getInterpolatedPosition(this, taskIndex, progress);
|
|
9221
|
+
}
|
|
8675
9222
|
isLoading(now) {
|
|
8676
9223
|
return isLoading(this, now);
|
|
8677
9224
|
}
|
|
@@ -8702,32 +9249,214 @@ class Container extends Types.entity_info {
|
|
|
8702
9249
|
}
|
|
8703
9250
|
}
|
|
8704
9251
|
function computeContainerCapabilities(stats) {
|
|
8705
|
-
const density = stats
|
|
8706
|
-
const strength = stats
|
|
8707
|
-
const hardness = stats
|
|
8708
|
-
const saturation = stats
|
|
8709
|
-
const hullmass =
|
|
9252
|
+
const density = stats.density;
|
|
9253
|
+
const strength = stats.strength;
|
|
9254
|
+
const hardness = stats.hardness;
|
|
9255
|
+
const saturation = stats.saturation;
|
|
9256
|
+
const hullmass = 100000 - 75 * density;
|
|
8710
9257
|
const statSum = strength + hardness + saturation;
|
|
8711
9258
|
const exponent = statSum / 2997;
|
|
8712
9259
|
const capacity = Math.floor(1000000 * 10 ** exponent);
|
|
8713
9260
|
return { hullmass, capacity };
|
|
8714
9261
|
}
|
|
8715
9262
|
function computeContainerT2Capabilities(stats) {
|
|
8716
|
-
const strength = stats
|
|
8717
|
-
const density = stats
|
|
8718
|
-
const hardness = stats
|
|
8719
|
-
const saturation = stats
|
|
8720
|
-
const hullmass =
|
|
9263
|
+
const strength = stats.strength;
|
|
9264
|
+
const density = stats.density;
|
|
9265
|
+
const hardness = stats.hardness;
|
|
9266
|
+
const saturation = stats.saturation;
|
|
9267
|
+
const hullmass = 70000 - 50 * density;
|
|
8721
9268
|
const statSum = strength + hardness + saturation;
|
|
8722
9269
|
const exponent = statSum / 2500;
|
|
8723
9270
|
const capacity = Math.floor(1500000 * 10 ** exponent);
|
|
8724
9271
|
return { hullmass, capacity };
|
|
8725
9272
|
}
|
|
8726
9273
|
|
|
9274
|
+
class Extractor extends Types.entity_info {
|
|
9275
|
+
get name() {
|
|
9276
|
+
return this.entity_name;
|
|
9277
|
+
}
|
|
9278
|
+
get entityClass() {
|
|
9279
|
+
return 'planetary';
|
|
9280
|
+
}
|
|
9281
|
+
get canDemolish() {
|
|
9282
|
+
return true;
|
|
9283
|
+
}
|
|
9284
|
+
get inv() {
|
|
9285
|
+
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
9286
|
+
return this._inv;
|
|
9287
|
+
}
|
|
9288
|
+
get inventory() {
|
|
9289
|
+
return this.inv.items;
|
|
9290
|
+
}
|
|
9291
|
+
get sched() {
|
|
9292
|
+
this._sched ?? (this._sched = new ScheduleAccessor(this));
|
|
9293
|
+
return this._sched;
|
|
9294
|
+
}
|
|
9295
|
+
get isIdle() {
|
|
9296
|
+
return this.is_idle;
|
|
9297
|
+
}
|
|
9298
|
+
get location() {
|
|
9299
|
+
return Location.from(this.coordinates);
|
|
9300
|
+
}
|
|
9301
|
+
get totalCargoMass() {
|
|
9302
|
+
return this.inv.totalMass;
|
|
9303
|
+
}
|
|
9304
|
+
get maxCapacity() {
|
|
9305
|
+
return UInt64.from(this.capacity);
|
|
9306
|
+
}
|
|
9307
|
+
get availableCapacity() {
|
|
9308
|
+
const cargo = this.totalCargoMass;
|
|
9309
|
+
return cargo.gte(this.maxCapacity) ? UInt64.from(0) : this.maxCapacity.subtracting(cargo);
|
|
9310
|
+
}
|
|
9311
|
+
get isFull() {
|
|
9312
|
+
return this.totalCargoMass.gte(this.maxCapacity);
|
|
9313
|
+
}
|
|
9314
|
+
get totalMass() {
|
|
9315
|
+
const hull = this.hullmass ? UInt64.from(this.hullmass) : UInt64.from(0);
|
|
9316
|
+
return hull.adding(this.totalCargoMass);
|
|
9317
|
+
}
|
|
9318
|
+
}
|
|
9319
|
+
function computeExtractorCapabilities(modules, layout) {
|
|
9320
|
+
const out = {};
|
|
9321
|
+
const genModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
9322
|
+
if (genModules.length > 0) {
|
|
9323
|
+
let totalCapacity = 0;
|
|
9324
|
+
let totalRecharge = 0;
|
|
9325
|
+
for (const m of genModules) {
|
|
9326
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
9327
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9328
|
+
totalCapacity += applySlotMultiplier(caps.capacity, amp);
|
|
9329
|
+
totalRecharge += applySlotMultiplier(caps.recharge, amp);
|
|
9330
|
+
}
|
|
9331
|
+
out.generator = {
|
|
9332
|
+
capacity: clampUint16(totalCapacity),
|
|
9333
|
+
recharge: clampUint16(totalRecharge),
|
|
9334
|
+
};
|
|
9335
|
+
}
|
|
9336
|
+
const gathModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
9337
|
+
if (gathModules.length > 0) {
|
|
9338
|
+
let totalYield = 0;
|
|
9339
|
+
let totalDrain = 0;
|
|
9340
|
+
let maxDepth = 0;
|
|
9341
|
+
let totalSpeed = 0;
|
|
9342
|
+
for (const m of gathModules) {
|
|
9343
|
+
const tier = getItem(m.itemId).tier;
|
|
9344
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats), tier);
|
|
9345
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9346
|
+
totalYield += applySlotMultiplier(caps.yield, amp);
|
|
9347
|
+
totalDrain += caps.drain;
|
|
9348
|
+
if (caps.depth > maxDepth)
|
|
9349
|
+
maxDepth = caps.depth;
|
|
9350
|
+
totalSpeed += applySlotMultiplier(caps.speed, amp);
|
|
9351
|
+
}
|
|
9352
|
+
out.gatherer = {
|
|
9353
|
+
yield: clampUint16(totalYield),
|
|
9354
|
+
drain: totalDrain,
|
|
9355
|
+
depth: maxDepth,
|
|
9356
|
+
speed: clampUint16(totalSpeed),
|
|
9357
|
+
};
|
|
9358
|
+
}
|
|
9359
|
+
return out;
|
|
9360
|
+
}
|
|
9361
|
+
|
|
9362
|
+
class Factory extends Types.entity_info {
|
|
9363
|
+
get name() {
|
|
9364
|
+
return this.entity_name;
|
|
9365
|
+
}
|
|
9366
|
+
get entityClass() {
|
|
9367
|
+
return 'planetary';
|
|
9368
|
+
}
|
|
9369
|
+
get canDemolish() {
|
|
9370
|
+
return true;
|
|
9371
|
+
}
|
|
9372
|
+
get inv() {
|
|
9373
|
+
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
9374
|
+
return this._inv;
|
|
9375
|
+
}
|
|
9376
|
+
get inventory() {
|
|
9377
|
+
return this.inv.items;
|
|
9378
|
+
}
|
|
9379
|
+
get sched() {
|
|
9380
|
+
this._sched ?? (this._sched = new ScheduleAccessor(this));
|
|
9381
|
+
return this._sched;
|
|
9382
|
+
}
|
|
9383
|
+
get isIdle() {
|
|
9384
|
+
return this.is_idle;
|
|
9385
|
+
}
|
|
9386
|
+
get location() {
|
|
9387
|
+
return Location.from(this.coordinates);
|
|
9388
|
+
}
|
|
9389
|
+
get totalCargoMass() {
|
|
9390
|
+
return this.inv.totalMass;
|
|
9391
|
+
}
|
|
9392
|
+
get maxCapacity() {
|
|
9393
|
+
return UInt64.from(this.capacity);
|
|
9394
|
+
}
|
|
9395
|
+
get availableCapacity() {
|
|
9396
|
+
const cargo = this.totalCargoMass;
|
|
9397
|
+
return cargo.gte(this.maxCapacity) ? UInt64.from(0) : this.maxCapacity.subtracting(cargo);
|
|
9398
|
+
}
|
|
9399
|
+
get isFull() {
|
|
9400
|
+
return this.totalCargoMass.gte(this.maxCapacity);
|
|
9401
|
+
}
|
|
9402
|
+
get totalMass() {
|
|
9403
|
+
const hull = this.hullmass ? UInt64.from(this.hullmass) : UInt64.from(0);
|
|
9404
|
+
return hull.adding(this.totalCargoMass);
|
|
9405
|
+
}
|
|
9406
|
+
}
|
|
9407
|
+
function computeFactoryCapabilities(modules, layout) {
|
|
9408
|
+
const out = {};
|
|
9409
|
+
const genModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
9410
|
+
if (genModules.length > 0) {
|
|
9411
|
+
let totalCapacity = 0;
|
|
9412
|
+
let totalRecharge = 0;
|
|
9413
|
+
for (const m of genModules) {
|
|
9414
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
9415
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9416
|
+
totalCapacity += applySlotMultiplier(caps.capacity, amp);
|
|
9417
|
+
totalRecharge += applySlotMultiplier(caps.recharge, amp);
|
|
9418
|
+
}
|
|
9419
|
+
out.generator = {
|
|
9420
|
+
capacity: clampUint16(totalCapacity),
|
|
9421
|
+
recharge: clampUint16(totalRecharge),
|
|
9422
|
+
};
|
|
9423
|
+
}
|
|
9424
|
+
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
9425
|
+
if (crafterModules.length > 0) {
|
|
9426
|
+
let totalSpeed = 0;
|
|
9427
|
+
let totalDrain = 0;
|
|
9428
|
+
for (const m of crafterModules) {
|
|
9429
|
+
const caps = computeCrafterCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
9430
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9431
|
+
totalSpeed += applySlotMultiplier(caps.speed, amp);
|
|
9432
|
+
totalDrain += caps.drain;
|
|
9433
|
+
}
|
|
9434
|
+
out.crafter = {
|
|
9435
|
+
speed: clampUint16(totalSpeed),
|
|
9436
|
+
drain: totalDrain,
|
|
9437
|
+
};
|
|
9438
|
+
}
|
|
9439
|
+
return out;
|
|
9440
|
+
}
|
|
9441
|
+
|
|
9442
|
+
class Nexus extends Types.entity_info {
|
|
9443
|
+
get name() {
|
|
9444
|
+
return this.entity_name;
|
|
9445
|
+
}
|
|
9446
|
+
get entityClass() {
|
|
9447
|
+
return 'orbital';
|
|
9448
|
+
}
|
|
9449
|
+
get location() {
|
|
9450
|
+
return Location.from(this.coordinates);
|
|
9451
|
+
}
|
|
9452
|
+
get orbitalAltitude() {
|
|
9453
|
+
return this.coordinates.z?.toNumber() || 0;
|
|
9454
|
+
}
|
|
9455
|
+
}
|
|
9456
|
+
|
|
8727
9457
|
class EntitiesManager extends BaseManager {
|
|
8728
|
-
async getEntity(
|
|
9458
|
+
async getEntity(id) {
|
|
8729
9459
|
const result = await this.server.readonly('getentity', {
|
|
8730
|
-
entity_type: Name.from(type),
|
|
8731
9460
|
entity_id: id,
|
|
8732
9461
|
});
|
|
8733
9462
|
const entityInfo = result;
|
|
@@ -8737,7 +9466,7 @@ class EntitiesManager extends BaseManager {
|
|
|
8737
9466
|
const ownerName = this.resolveOwner(owner);
|
|
8738
9467
|
const result = await this.server.readonly('getentities', {
|
|
8739
9468
|
owner: ownerName,
|
|
8740
|
-
entity_type: type
|
|
9469
|
+
entity_type: type,
|
|
8741
9470
|
});
|
|
8742
9471
|
const entities = result;
|
|
8743
9472
|
return entities.map((entity) => this.wrapEntity(entity));
|
|
@@ -8746,18 +9475,24 @@ class EntitiesManager extends BaseManager {
|
|
|
8746
9475
|
const ownerName = this.resolveOwner(owner);
|
|
8747
9476
|
const result = await this.server.readonly('getsummaries', {
|
|
8748
9477
|
owner: ownerName,
|
|
8749
|
-
entity_type: type
|
|
9478
|
+
entity_type: type,
|
|
8750
9479
|
});
|
|
8751
9480
|
return result;
|
|
8752
9481
|
}
|
|
8753
9482
|
async getShip(id) {
|
|
8754
|
-
return (await this.getEntity(
|
|
9483
|
+
return (await this.getEntity(id));
|
|
8755
9484
|
}
|
|
8756
9485
|
async getWarehouse(id) {
|
|
8757
|
-
return (await this.getEntity(
|
|
9486
|
+
return (await this.getEntity(id));
|
|
8758
9487
|
}
|
|
8759
9488
|
async getContainer(id) {
|
|
8760
|
-
return (await this.getEntity(
|
|
9489
|
+
return (await this.getEntity(id));
|
|
9490
|
+
}
|
|
9491
|
+
async getExtractor(id) {
|
|
9492
|
+
return (await this.getEntity(id));
|
|
9493
|
+
}
|
|
9494
|
+
async getFactory(id) {
|
|
9495
|
+
return (await this.getEntity(id));
|
|
8761
9496
|
}
|
|
8762
9497
|
async getShips(owner) {
|
|
8763
9498
|
return (await this.getEntities(owner, 'ship'));
|
|
@@ -8768,6 +9503,12 @@ class EntitiesManager extends BaseManager {
|
|
|
8768
9503
|
async getContainers(owner) {
|
|
8769
9504
|
return (await this.getEntities(owner, 'container'));
|
|
8770
9505
|
}
|
|
9506
|
+
async getExtractors(owner) {
|
|
9507
|
+
return (await this.getEntities(owner, 'extractor'));
|
|
9508
|
+
}
|
|
9509
|
+
async getFactories(owner) {
|
|
9510
|
+
return (await this.getEntities(owner, 'factory'));
|
|
9511
|
+
}
|
|
8771
9512
|
async getShipSummaries(owner) {
|
|
8772
9513
|
return this.getSummaries(owner, 'ship');
|
|
8773
9514
|
}
|
|
@@ -8777,16 +9518,35 @@ class EntitiesManager extends BaseManager {
|
|
|
8777
9518
|
async getContainerSummaries(owner) {
|
|
8778
9519
|
return this.getSummaries(owner, 'container');
|
|
8779
9520
|
}
|
|
9521
|
+
async getExtractorSummaries(owner) {
|
|
9522
|
+
return this.getSummaries(owner, 'extractor');
|
|
9523
|
+
}
|
|
9524
|
+
async getFactorySummaries(owner) {
|
|
9525
|
+
return this.getSummaries(owner, 'factory');
|
|
9526
|
+
}
|
|
9527
|
+
async getNexus(id) {
|
|
9528
|
+
return (await this.getEntity(id));
|
|
9529
|
+
}
|
|
9530
|
+
async getNexuses(owner) {
|
|
9531
|
+
return (await this.getEntities(owner, 'nexus'));
|
|
9532
|
+
}
|
|
9533
|
+
async getNexusSummaries(owner) {
|
|
9534
|
+
return this.getSummaries(owner, 'nexus');
|
|
9535
|
+
}
|
|
8780
9536
|
wrapEntity(entity) {
|
|
8781
|
-
if (entity.type.equals('ship'))
|
|
9537
|
+
if (entity.type.equals('ship'))
|
|
8782
9538
|
return new Ship(entity);
|
|
8783
|
-
|
|
8784
|
-
else if (entity.type.equals('warehouse')) {
|
|
9539
|
+
if (entity.type.equals('warehouse'))
|
|
8785
9540
|
return new Warehouse(entity);
|
|
8786
|
-
|
|
8787
|
-
|
|
9541
|
+
if (entity.type.equals('extractor'))
|
|
9542
|
+
return new Extractor(entity);
|
|
9543
|
+
if (entity.type.equals('factory'))
|
|
9544
|
+
return new Factory(entity);
|
|
9545
|
+
if (entity.type.equals('container'))
|
|
8788
9546
|
return new Container(entity);
|
|
8789
|
-
|
|
9547
|
+
if (entity.type.equals('nexus'))
|
|
9548
|
+
return new Nexus(entity);
|
|
9549
|
+
throw new Error(`unknown entity type: ${entity.type}`);
|
|
8790
9550
|
}
|
|
8791
9551
|
resolveOwner(owner) {
|
|
8792
9552
|
if (typeof owner === 'object' && owner !== null && 'owner' in owner) {
|
|
@@ -8870,17 +9630,6 @@ class LocationsManager extends BaseManager {
|
|
|
8870
9630
|
reserve: overrideMap.get(s.index) ?? s.reserve,
|
|
8871
9631
|
}));
|
|
8872
9632
|
}
|
|
8873
|
-
async getLocationEntity(id) {
|
|
8874
|
-
const row = await this.server.table('location').get(UInt64.from(id));
|
|
8875
|
-
return row ?? undefined;
|
|
8876
|
-
}
|
|
8877
|
-
async getLocationEntityAt(coords) {
|
|
8878
|
-
const id = coordsToLocationId(coords);
|
|
8879
|
-
return this.getLocationEntity(id);
|
|
8880
|
-
}
|
|
8881
|
-
async getAllLocationEntities() {
|
|
8882
|
-
return this.server.table('location').all();
|
|
8883
|
-
}
|
|
8884
9633
|
}
|
|
8885
9634
|
|
|
8886
9635
|
class EpochsManager extends BaseManager {
|
|
@@ -8927,7 +9676,6 @@ class ActionsManager extends BaseManager {
|
|
|
8927
9676
|
const x = Int64.from(destination.x);
|
|
8928
9677
|
const y = Int64.from(destination.y);
|
|
8929
9678
|
return this.server.action('travel', {
|
|
8930
|
-
entity_type: EntityType.SHIP,
|
|
8931
9679
|
id: UInt64.from(shipId),
|
|
8932
9680
|
x,
|
|
8933
9681
|
y,
|
|
@@ -8948,9 +9696,8 @@ class ActionsManager extends BaseManager {
|
|
|
8948
9696
|
recharge,
|
|
8949
9697
|
});
|
|
8950
9698
|
}
|
|
8951
|
-
resolve(entityId,
|
|
9699
|
+
resolve(entityId, count) {
|
|
8952
9700
|
const params = {
|
|
8953
|
-
entity_type: entityType,
|
|
8954
9701
|
id: UInt64.from(entityId),
|
|
8955
9702
|
};
|
|
8956
9703
|
if (count !== undefined) {
|
|
@@ -8958,28 +9705,27 @@ class ActionsManager extends BaseManager {
|
|
|
8958
9705
|
}
|
|
8959
9706
|
return this.server.action('resolve', params);
|
|
8960
9707
|
}
|
|
8961
|
-
cancel(entityId, count
|
|
9708
|
+
cancel(entityId, count) {
|
|
8962
9709
|
return this.server.action('cancel', {
|
|
8963
|
-
entity_type: entityType,
|
|
8964
9710
|
id: UInt64.from(entityId),
|
|
8965
9711
|
count: UInt64.from(count),
|
|
8966
9712
|
});
|
|
8967
9713
|
}
|
|
8968
|
-
recharge(entityId
|
|
9714
|
+
recharge(entityId) {
|
|
8969
9715
|
return this.server.action('recharge', {
|
|
8970
|
-
entity_type: entityType,
|
|
8971
9716
|
id: UInt64.from(entityId),
|
|
8972
9717
|
});
|
|
8973
9718
|
}
|
|
8974
|
-
|
|
9719
|
+
refrshentity(entityId) {
|
|
9720
|
+
return this.server.action('refrshentity', {
|
|
9721
|
+
entity_id: UInt64.from(entityId),
|
|
9722
|
+
});
|
|
9723
|
+
}
|
|
9724
|
+
transfer(sourceId, destId, items) {
|
|
8975
9725
|
return this.server.action('transfer', {
|
|
8976
|
-
source_type: sourceType,
|
|
8977
9726
|
source_id: UInt64.from(sourceId),
|
|
8978
|
-
dest_type: destType,
|
|
8979
9727
|
dest_id: UInt64.from(destId),
|
|
8980
|
-
|
|
8981
|
-
stats: UInt64.from(stats),
|
|
8982
|
-
quantity: UInt32.from(quantity),
|
|
9728
|
+
items,
|
|
8983
9729
|
});
|
|
8984
9730
|
}
|
|
8985
9731
|
foundCompany(account, name) {
|
|
@@ -8993,84 +9739,85 @@ class ActionsManager extends BaseManager {
|
|
|
8993
9739
|
account: Name.from(account),
|
|
8994
9740
|
});
|
|
8995
9741
|
}
|
|
8996
|
-
gather(
|
|
9742
|
+
gather(sourceId, destinationId, stratum, quantity) {
|
|
8997
9743
|
return this.server.action('gather', {
|
|
8998
|
-
|
|
8999
|
-
|
|
9000
|
-
entity_id: UInt64.from(source.entityId),
|
|
9001
|
-
}),
|
|
9002
|
-
destination: Types.entity_ref.from({
|
|
9003
|
-
entity_type: destination.entityType,
|
|
9004
|
-
entity_id: UInt64.from(destination.entityId),
|
|
9005
|
-
}),
|
|
9744
|
+
source_id: UInt64.from(sourceId),
|
|
9745
|
+
destination_id: UInt64.from(destinationId),
|
|
9006
9746
|
stratum: UInt16.from(stratum),
|
|
9007
9747
|
quantity: UInt32.from(quantity),
|
|
9008
9748
|
});
|
|
9009
9749
|
}
|
|
9010
|
-
warp(entityId, destination
|
|
9750
|
+
warp(entityId, destination) {
|
|
9011
9751
|
const x = Int64.from(destination.x);
|
|
9012
9752
|
const y = Int64.from(destination.y);
|
|
9013
9753
|
return this.server.action('warp', {
|
|
9014
|
-
entity_type: entityType,
|
|
9015
9754
|
id: UInt64.from(entityId),
|
|
9016
9755
|
x,
|
|
9017
9756
|
y,
|
|
9018
9757
|
});
|
|
9019
9758
|
}
|
|
9020
|
-
craft(
|
|
9021
|
-
const cargoInputs = inputs.map((i) => Types.cargo_item.from(i));
|
|
9759
|
+
craft(entityId, recipeId, quantity, inputs) {
|
|
9022
9760
|
return this.server.action('craft', {
|
|
9023
|
-
entity_type: entityType,
|
|
9024
9761
|
id: UInt64.from(entityId),
|
|
9025
9762
|
recipe_id: UInt16.from(recipeId),
|
|
9026
9763
|
quantity: UInt32.from(quantity),
|
|
9027
|
-
inputs
|
|
9764
|
+
inputs,
|
|
9028
9765
|
});
|
|
9029
9766
|
}
|
|
9030
|
-
blend(
|
|
9031
|
-
const cargoInputs = inputs.map((i) => Types.cargo_item.from(i));
|
|
9767
|
+
blend(entityId, inputs) {
|
|
9032
9768
|
return this.server.action('blend', {
|
|
9033
|
-
entity_type: entityType,
|
|
9034
9769
|
id: UInt64.from(entityId),
|
|
9035
|
-
inputs
|
|
9770
|
+
inputs,
|
|
9036
9771
|
});
|
|
9037
9772
|
}
|
|
9038
|
-
deploy(
|
|
9773
|
+
deploy(entityId, ref) {
|
|
9039
9774
|
return this.server.action('deploy', {
|
|
9040
|
-
entity_type: entityType,
|
|
9041
9775
|
id: UInt64.from(entityId),
|
|
9042
|
-
|
|
9043
|
-
stats: UInt64.from(stats),
|
|
9776
|
+
ref,
|
|
9044
9777
|
});
|
|
9045
9778
|
}
|
|
9046
|
-
addmodule(
|
|
9779
|
+
addmodule(entityId, moduleIndex, moduleRef, targetRef = null) {
|
|
9047
9780
|
return this.server.action('addmodule', {
|
|
9048
|
-
entity_type: entityType,
|
|
9049
9781
|
entity_id: UInt64.from(entityId),
|
|
9050
9782
|
module_index: moduleIndex,
|
|
9051
|
-
|
|
9052
|
-
|
|
9783
|
+
module_ref: moduleRef,
|
|
9784
|
+
target_ref: targetRef ?? undefined,
|
|
9053
9785
|
});
|
|
9054
9786
|
}
|
|
9055
|
-
rmmodule(
|
|
9787
|
+
rmmodule(entityId, moduleIndex, targetRef = null) {
|
|
9056
9788
|
return this.server.action('rmmodule', {
|
|
9057
|
-
entity_type: entityType,
|
|
9058
9789
|
entity_id: UInt64.from(entityId),
|
|
9059
9790
|
module_index: moduleIndex,
|
|
9060
|
-
|
|
9791
|
+
target_ref: targetRef ?? undefined,
|
|
9061
9792
|
});
|
|
9062
9793
|
}
|
|
9063
|
-
wrap(owner,
|
|
9794
|
+
wrap(owner, entityId, nexusId, items) {
|
|
9064
9795
|
return this.server.action('wrap', {
|
|
9065
9796
|
owner: Name.from(owner),
|
|
9066
|
-
entity_type: entityType,
|
|
9067
9797
|
entity_id: UInt64.from(entityId),
|
|
9068
|
-
|
|
9069
|
-
|
|
9798
|
+
nexus_id: UInt64.from(nexusId),
|
|
9799
|
+
items,
|
|
9070
9800
|
});
|
|
9071
9801
|
}
|
|
9072
|
-
|
|
9073
|
-
return
|
|
9802
|
+
undeploy(hostId, targetId) {
|
|
9803
|
+
return this.server.action('undeploy', {
|
|
9804
|
+
host_id: UInt64.from(hostId),
|
|
9805
|
+
target_id: UInt64.from(targetId),
|
|
9806
|
+
});
|
|
9807
|
+
}
|
|
9808
|
+
wrapEntity(entityId, nexusId) {
|
|
9809
|
+
return this.server.action('wrapentity', {
|
|
9810
|
+
entity_id: UInt64.from(entityId),
|
|
9811
|
+
nexus_id: UInt64.from(nexusId),
|
|
9812
|
+
});
|
|
9813
|
+
}
|
|
9814
|
+
demolish(entityId) {
|
|
9815
|
+
return this.server.action('demolish', {
|
|
9816
|
+
entity_id: UInt64.from(entityId),
|
|
9817
|
+
});
|
|
9818
|
+
}
|
|
9819
|
+
joinGame(account, companyName) {
|
|
9820
|
+
return [this.foundCompany(account, companyName), this.join(account)];
|
|
9074
9821
|
}
|
|
9075
9822
|
}
|
|
9076
9823
|
|
|
@@ -9095,9 +9842,15 @@ class WebSocketConnection {
|
|
|
9095
9842
|
this._state = 'disconnected';
|
|
9096
9843
|
this.shouldReconnect = true;
|
|
9097
9844
|
this.sendQueue = [];
|
|
9845
|
+
this.pingTimer = null;
|
|
9846
|
+
this.staleTimer = null;
|
|
9098
9847
|
this.url = options.url;
|
|
9099
9848
|
this.onMessage = options.onMessage;
|
|
9100
9849
|
this.onStateChange = options.onStateChange;
|
|
9850
|
+
this.minReconnectDelay =
|
|
9851
|
+
options.minReconnectDelay ?? WebSocketConnection.DEFAULT_MIN_RECONNECT_DELAY;
|
|
9852
|
+
this.pingIntervalMs = options.pingIntervalMs ?? WebSocketConnection.DEFAULT_PING_INTERVAL_MS;
|
|
9853
|
+
this.pongTimeoutMs = options.pongTimeoutMs ?? WebSocketConnection.DEFAULT_PONG_TIMEOUT_MS;
|
|
9101
9854
|
}
|
|
9102
9855
|
get state() {
|
|
9103
9856
|
return this._state;
|
|
@@ -9126,8 +9879,10 @@ class WebSocketConnection {
|
|
|
9126
9879
|
this.ws.readyState === WebSocket.OPEN) {
|
|
9127
9880
|
this.ws.send(this.sendQueue.shift());
|
|
9128
9881
|
}
|
|
9882
|
+
this.startHeartbeat();
|
|
9129
9883
|
};
|
|
9130
9884
|
this.ws.onmessage = (event) => {
|
|
9885
|
+
this.resetStaleTimer();
|
|
9131
9886
|
try {
|
|
9132
9887
|
const message = JSON.parse(event.data);
|
|
9133
9888
|
this.onMessage(message);
|
|
@@ -9137,6 +9892,7 @@ class WebSocketConnection {
|
|
|
9137
9892
|
}
|
|
9138
9893
|
};
|
|
9139
9894
|
this.ws.onclose = () => {
|
|
9895
|
+
this.stopHeartbeat();
|
|
9140
9896
|
this.ws = null;
|
|
9141
9897
|
this.sendQueue.length = 0;
|
|
9142
9898
|
if (this.shouldReconnect) {
|
|
@@ -9161,7 +9917,7 @@ class WebSocketConnection {
|
|
|
9161
9917
|
if (this.reconnectTimeout) {
|
|
9162
9918
|
return;
|
|
9163
9919
|
}
|
|
9164
|
-
const delay = Math.min(
|
|
9920
|
+
const delay = Math.min(this.minReconnectDelay *
|
|
9165
9921
|
WebSocketConnection.RECONNECT_MULTIPLIER ** this.reconnectAttempts, WebSocketConnection.MAX_RECONNECT_DELAY);
|
|
9166
9922
|
debug(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts + 1})`);
|
|
9167
9923
|
this.reconnectTimeout = setTimeout(() => {
|
|
@@ -9176,6 +9932,7 @@ class WebSocketConnection {
|
|
|
9176
9932
|
clearTimeout(this.reconnectTimeout);
|
|
9177
9933
|
this.reconnectTimeout = null;
|
|
9178
9934
|
}
|
|
9935
|
+
this.stopHeartbeat();
|
|
9179
9936
|
if (this.ws) {
|
|
9180
9937
|
this.ws.close();
|
|
9181
9938
|
this.ws = null;
|
|
@@ -9183,6 +9940,34 @@ class WebSocketConnection {
|
|
|
9183
9940
|
this.sendQueue.length = 0;
|
|
9184
9941
|
this.setState('disconnected');
|
|
9185
9942
|
}
|
|
9943
|
+
startHeartbeat() {
|
|
9944
|
+
this.stopHeartbeat();
|
|
9945
|
+
this.resetStaleTimer();
|
|
9946
|
+
this.pingTimer = setInterval(() => {
|
|
9947
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
9948
|
+
this.ws.send(JSON.stringify({ type: 'ping' }));
|
|
9949
|
+
}
|
|
9950
|
+
}, this.pingIntervalMs);
|
|
9951
|
+
}
|
|
9952
|
+
stopHeartbeat() {
|
|
9953
|
+
if (this.pingTimer) {
|
|
9954
|
+
clearInterval(this.pingTimer);
|
|
9955
|
+
this.pingTimer = null;
|
|
9956
|
+
}
|
|
9957
|
+
if (this.staleTimer) {
|
|
9958
|
+
clearTimeout(this.staleTimer);
|
|
9959
|
+
this.staleTimer = null;
|
|
9960
|
+
}
|
|
9961
|
+
}
|
|
9962
|
+
resetStaleTimer() {
|
|
9963
|
+
if (this.staleTimer)
|
|
9964
|
+
clearTimeout(this.staleTimer);
|
|
9965
|
+
this.staleTimer = setTimeout(() => {
|
|
9966
|
+
debug('No frames within ping interval + pong timeout — forcing reconnect');
|
|
9967
|
+
if (this.ws)
|
|
9968
|
+
this.ws.close();
|
|
9969
|
+
}, this.pingIntervalMs + this.pongTimeoutMs);
|
|
9970
|
+
}
|
|
9186
9971
|
close() {
|
|
9187
9972
|
this.disconnect();
|
|
9188
9973
|
}
|
|
@@ -9198,9 +9983,11 @@ class WebSocketConnection {
|
|
|
9198
9983
|
return this._state === 'connected';
|
|
9199
9984
|
}
|
|
9200
9985
|
}
|
|
9201
|
-
WebSocketConnection.
|
|
9986
|
+
WebSocketConnection.DEFAULT_MIN_RECONNECT_DELAY = 1000;
|
|
9202
9987
|
WebSocketConnection.MAX_RECONNECT_DELAY = 30000;
|
|
9203
9988
|
WebSocketConnection.RECONNECT_MULTIPLIER = 2;
|
|
9989
|
+
WebSocketConnection.DEFAULT_PING_INTERVAL_MS = 25000;
|
|
9990
|
+
WebSocketConnection.DEFAULT_PONG_TIMEOUT_MS = 10000;
|
|
9204
9991
|
|
|
9205
9992
|
function mapEntity(ei) {
|
|
9206
9993
|
if (ei.type.equals('ship'))
|
|
@@ -9209,6 +9996,8 @@ function mapEntity(ei) {
|
|
|
9209
9996
|
return new Warehouse(ei);
|
|
9210
9997
|
if (ei.type.equals('container'))
|
|
9211
9998
|
return new Container(ei);
|
|
9999
|
+
if (ei.type.equals('nexus'))
|
|
10000
|
+
return new Nexus(ei);
|
|
9212
10001
|
throw new Error(`mapEntity: unknown entity type ${ei.type.toString()}`);
|
|
9213
10002
|
}
|
|
9214
10003
|
function parseWireEntity(raw) {
|
|
@@ -9229,9 +10018,14 @@ class SubscriptionsManager {
|
|
|
9229
10018
|
this.entitySubs = new Map();
|
|
9230
10019
|
this.boundsSubs = new Map();
|
|
9231
10020
|
this.subCounter = 0;
|
|
10021
|
+
this.hasConnected = false;
|
|
9232
10022
|
this.conn = new WebSocketConnection({
|
|
9233
10023
|
url: opts.url,
|
|
9234
10024
|
onMessage: (m) => this.onMessage(m),
|
|
10025
|
+
onStateChange: (s) => this.onStateChange(s),
|
|
10026
|
+
minReconnectDelay: opts.minReconnectDelay,
|
|
10027
|
+
pingIntervalMs: opts.pingIntervalMs,
|
|
10028
|
+
pongTimeoutMs: opts.pongTimeoutMs,
|
|
9235
10029
|
});
|
|
9236
10030
|
this.conn.connect();
|
|
9237
10031
|
}
|
|
@@ -9288,6 +10082,9 @@ class SubscriptionsManager {
|
|
|
9288
10082
|
current: new Map(),
|
|
9289
10083
|
};
|
|
9290
10084
|
this.boundsSubs.set(subId, {
|
|
10085
|
+
bounds,
|
|
10086
|
+
owner: handlers.owner,
|
|
10087
|
+
prioritizeOwner: handlers.prioritizeOwner,
|
|
9291
10088
|
onSnapshot: handlers.onSnapshot,
|
|
9292
10089
|
onUpdate: handlers.onUpdate,
|
|
9293
10090
|
onBoundsDelta: handlers.onBoundsDelta,
|
|
@@ -9296,14 +10093,67 @@ class SubscriptionsManager {
|
|
|
9296
10093
|
this.sendMessage(msg);
|
|
9297
10094
|
return handle;
|
|
9298
10095
|
}
|
|
10096
|
+
subscribeOwner(owner, handlers = {}) {
|
|
10097
|
+
const subId = this.generateSubID('own');
|
|
10098
|
+
const msg = {
|
|
10099
|
+
type: 'subscribe',
|
|
10100
|
+
sub_id: subId,
|
|
10101
|
+
owner,
|
|
10102
|
+
};
|
|
10103
|
+
const handle = {
|
|
10104
|
+
subId,
|
|
10105
|
+
unsubscribe: () => this.unsubscribeBounds(subId),
|
|
10106
|
+
current: new Map(),
|
|
10107
|
+
};
|
|
10108
|
+
this.boundsSubs.set(subId, {
|
|
10109
|
+
bounds: undefined,
|
|
10110
|
+
owner,
|
|
10111
|
+
prioritizeOwner: undefined,
|
|
10112
|
+
onSnapshot: handlers.onSnapshot,
|
|
10113
|
+
onUpdate: handlers.onUpdate,
|
|
10114
|
+
handle,
|
|
10115
|
+
});
|
|
10116
|
+
this.sendMessage(msg);
|
|
10117
|
+
return handle;
|
|
10118
|
+
}
|
|
9299
10119
|
unsubscribeBounds(subId) {
|
|
9300
10120
|
this.boundsSubs.delete(subId);
|
|
9301
10121
|
this.sendMessage({ type: 'unsubscribe', sub_id: subId });
|
|
9302
10122
|
}
|
|
9303
10123
|
updateBounds(subId, bounds) {
|
|
10124
|
+
const entry = this.boundsSubs.get(subId);
|
|
10125
|
+
if (entry)
|
|
10126
|
+
entry.bounds = bounds;
|
|
9304
10127
|
const msg = { type: 'update_bounds', sub_id: subId, bounds };
|
|
9305
10128
|
this.sendMessage(msg);
|
|
9306
10129
|
}
|
|
10130
|
+
onStateChange(state) {
|
|
10131
|
+
if (state !== 'connected')
|
|
10132
|
+
return;
|
|
10133
|
+
if (!this.hasConnected) {
|
|
10134
|
+
this.hasConnected = true;
|
|
10135
|
+
return;
|
|
10136
|
+
}
|
|
10137
|
+
for (const [subId, entry] of this.entitySubs) {
|
|
10138
|
+
const msg = {
|
|
10139
|
+
type: 'subscribe_entity',
|
|
10140
|
+
sub_id: subId,
|
|
10141
|
+
entity_type: entry.type,
|
|
10142
|
+
entity_id: entry.id,
|
|
10143
|
+
};
|
|
10144
|
+
this.sendMessage(msg);
|
|
10145
|
+
}
|
|
10146
|
+
for (const [subId, entry] of this.boundsSubs) {
|
|
10147
|
+
const msg = {
|
|
10148
|
+
type: 'subscribe',
|
|
10149
|
+
sub_id: subId,
|
|
10150
|
+
bounds: entry.bounds,
|
|
10151
|
+
owner: entry.owner,
|
|
10152
|
+
prioritize_owner: entry.prioritizeOwner,
|
|
10153
|
+
};
|
|
10154
|
+
this.sendMessage(msg);
|
|
10155
|
+
}
|
|
10156
|
+
}
|
|
9307
10157
|
onMessage(msg) {
|
|
9308
10158
|
switch (msg.type) {
|
|
9309
10159
|
case 'snapshot':
|
|
@@ -9565,15 +10415,22 @@ function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
|
|
|
9565
10415
|
installed: r.installed,
|
|
9566
10416
|
}));
|
|
9567
10417
|
}
|
|
9568
|
-
function
|
|
9569
|
-
|
|
9570
|
-
|
|
9571
|
-
|
|
9572
|
-
|
|
10418
|
+
function toInstalledModules(entries) {
|
|
10419
|
+
const installed = [];
|
|
10420
|
+
entries.forEach((entry, slotIndex) => {
|
|
10421
|
+
if (!entry.installed)
|
|
10422
|
+
return;
|
|
10423
|
+
installed.push({
|
|
10424
|
+
slotIndex,
|
|
10425
|
+
itemId: Number(UInt16.from(entry.installed.item_id).value.toString()),
|
|
10426
|
+
stats: BigInt(UInt64.from(entry.installed.stats).toString()),
|
|
10427
|
+
});
|
|
10428
|
+
});
|
|
10429
|
+
return installed;
|
|
9573
10430
|
}
|
|
9574
|
-
function computeStorageBonus(
|
|
10431
|
+
function computeStorageBonus(modules, baseCapacity) {
|
|
9575
10432
|
let totalBonus = 0;
|
|
9576
|
-
for (const m of
|
|
10433
|
+
for (const m of modules) {
|
|
9577
10434
|
if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
|
|
9578
10435
|
continue;
|
|
9579
10436
|
const stats = decodeCraftedItemStats(m.itemId, m.stats);
|
|
@@ -9582,10 +10439,10 @@ function computeStorageBonus(decoded, baseCapacity) {
|
|
|
9582
10439
|
}
|
|
9583
10440
|
return totalBonus;
|
|
9584
10441
|
}
|
|
9585
|
-
function deriveShipFromModules(
|
|
9586
|
-
const
|
|
9587
|
-
const capabilities = computeShipCapabilities(
|
|
9588
|
-
const totalBonus = computeStorageBonus(
|
|
10442
|
+
function deriveShipFromModules(moduleEntries, layout, baseCapacity) {
|
|
10443
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10444
|
+
const capabilities = computeShipCapabilities(installed, layout);
|
|
10445
|
+
const totalBonus = computeStorageBonus(installed, baseCapacity);
|
|
9589
10446
|
return { capabilities, finalCapacity: baseCapacity + totalBonus };
|
|
9590
10447
|
}
|
|
9591
10448
|
function makeShip(state) {
|
|
@@ -9609,9 +10466,10 @@ function makeShip(state) {
|
|
|
9609
10466
|
if (state.schedule)
|
|
9610
10467
|
info.schedule = state.schedule;
|
|
9611
10468
|
let moduleEntries = [];
|
|
10469
|
+
const shipLayout = getEntityLayout(ITEM_SHIP_T1_PACKED)?.slots ?? [];
|
|
9612
10470
|
if (state.modules && state.modules.length > 0) {
|
|
9613
10471
|
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
|
|
9614
|
-
const { capabilities, finalCapacity } = deriveShipFromModules(
|
|
10472
|
+
const { capabilities, finalCapacity } = deriveShipFromModules(moduleEntries, shipLayout, state.capacity ?? 0);
|
|
9615
10473
|
if (capabilities.engines)
|
|
9616
10474
|
info.engines = capabilities.engines;
|
|
9617
10475
|
if (capabilities.generator)
|
|
@@ -9656,13 +10514,14 @@ function makeWarehouse(state) {
|
|
|
9656
10514
|
if (state.schedule)
|
|
9657
10515
|
info.schedule = state.schedule;
|
|
9658
10516
|
let moduleEntries = [];
|
|
10517
|
+
const warehouseLayout = getEntityLayout(ITEM_WAREHOUSE_T1_PACKED)?.slots ?? [];
|
|
9659
10518
|
if (state.modules && state.modules.length > 0) {
|
|
9660
10519
|
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
|
|
9661
|
-
const
|
|
9662
|
-
const capabilities = computeWarehouseCapabilities(
|
|
10520
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10521
|
+
const capabilities = computeWarehouseCapabilities(installed, warehouseLayout);
|
|
9663
10522
|
if (capabilities.loaders)
|
|
9664
10523
|
info.loaders = capabilities.loaders;
|
|
9665
|
-
const totalBonus = computeStorageBonus(
|
|
10524
|
+
const totalBonus = computeStorageBonus(installed, state.capacity);
|
|
9666
10525
|
info.capacity = UInt32.from(state.capacity + totalBonus);
|
|
9667
10526
|
}
|
|
9668
10527
|
else {
|
|
@@ -9672,6 +10531,78 @@ function makeWarehouse(state) {
|
|
|
9672
10531
|
const entityInfo = Types.entity_info.from(info);
|
|
9673
10532
|
return new Warehouse(entityInfo);
|
|
9674
10533
|
}
|
|
10534
|
+
function makeExtractor(state) {
|
|
10535
|
+
const info = {
|
|
10536
|
+
type: Name.from('extractor'),
|
|
10537
|
+
id: UInt64.from(state.id),
|
|
10538
|
+
owner: Name.from(state.owner),
|
|
10539
|
+
entity_name: state.name,
|
|
10540
|
+
coordinates: Types.coordinates.from(state.coordinates),
|
|
10541
|
+
cargomass: UInt32.from(0),
|
|
10542
|
+
cargo: state.cargo || [],
|
|
10543
|
+
is_idle: !state.schedule,
|
|
10544
|
+
current_task_elapsed: UInt32.from(0),
|
|
10545
|
+
current_task_remaining: UInt32.from(0),
|
|
10546
|
+
pending_tasks: [],
|
|
10547
|
+
};
|
|
10548
|
+
if (state.hullmass !== undefined)
|
|
10549
|
+
info.hullmass = UInt32.from(state.hullmass);
|
|
10550
|
+
if (state.energy !== undefined)
|
|
10551
|
+
info.energy = UInt16.from(state.energy);
|
|
10552
|
+
if (state.schedule)
|
|
10553
|
+
info.schedule = state.schedule;
|
|
10554
|
+
if (state.capacity !== undefined)
|
|
10555
|
+
info.capacity = UInt32.from(state.capacity);
|
|
10556
|
+
const moduleEntries = assignModulesToSlots(ITEM_EXTRACTOR_T1_PACKED, state.modules ?? [], 'Extractor T1');
|
|
10557
|
+
if (state.modules && state.modules.length > 0) {
|
|
10558
|
+
const layout = getEntityLayout(ITEM_EXTRACTOR_T1_PACKED)?.slots ?? [];
|
|
10559
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10560
|
+
const capabilities = computeExtractorCapabilities(installed, layout);
|
|
10561
|
+
if (capabilities.generator)
|
|
10562
|
+
info.generator = capabilities.generator;
|
|
10563
|
+
if (capabilities.gatherer)
|
|
10564
|
+
info.gatherer = capabilities.gatherer;
|
|
10565
|
+
}
|
|
10566
|
+
info.modules = moduleEntries;
|
|
10567
|
+
const entityInfo = Types.entity_info.from(info);
|
|
10568
|
+
return new Extractor(entityInfo);
|
|
10569
|
+
}
|
|
10570
|
+
function makeFactory(state) {
|
|
10571
|
+
const info = {
|
|
10572
|
+
type: Name.from('factory'),
|
|
10573
|
+
id: UInt64.from(state.id),
|
|
10574
|
+
owner: Name.from(state.owner),
|
|
10575
|
+
entity_name: state.name,
|
|
10576
|
+
coordinates: Types.coordinates.from(state.coordinates),
|
|
10577
|
+
cargomass: UInt32.from(0),
|
|
10578
|
+
cargo: state.cargo || [],
|
|
10579
|
+
is_idle: !state.schedule,
|
|
10580
|
+
current_task_elapsed: UInt32.from(0),
|
|
10581
|
+
current_task_remaining: UInt32.from(0),
|
|
10582
|
+
pending_tasks: [],
|
|
10583
|
+
};
|
|
10584
|
+
if (state.hullmass !== undefined)
|
|
10585
|
+
info.hullmass = UInt32.from(state.hullmass);
|
|
10586
|
+
if (state.energy !== undefined)
|
|
10587
|
+
info.energy = UInt16.from(state.energy);
|
|
10588
|
+
if (state.schedule)
|
|
10589
|
+
info.schedule = state.schedule;
|
|
10590
|
+
if (state.capacity !== undefined)
|
|
10591
|
+
info.capacity = UInt32.from(state.capacity);
|
|
10592
|
+
const moduleEntries = assignModulesToSlots(ITEM_FACTORY_T1_PACKED, state.modules ?? [], 'Factory T1');
|
|
10593
|
+
if (state.modules && state.modules.length > 0) {
|
|
10594
|
+
const layout = getEntityLayout(ITEM_FACTORY_T1_PACKED)?.slots ?? [];
|
|
10595
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10596
|
+
const capabilities = computeFactoryCapabilities(installed, layout);
|
|
10597
|
+
if (capabilities.generator)
|
|
10598
|
+
info.generator = capabilities.generator;
|
|
10599
|
+
if (capabilities.crafter)
|
|
10600
|
+
info.crafter = capabilities.crafter;
|
|
10601
|
+
}
|
|
10602
|
+
info.modules = moduleEntries;
|
|
10603
|
+
const entityInfo = Types.entity_info.from(info);
|
|
10604
|
+
return new Factory(entityInfo);
|
|
10605
|
+
}
|
|
9675
10606
|
function makeContainer(state) {
|
|
9676
10607
|
const entityInfo = Types.entity_info.from({
|
|
9677
10608
|
type: Name.from('container'),
|
|
@@ -9692,6 +10623,23 @@ function makeContainer(state) {
|
|
|
9692
10623
|
});
|
|
9693
10624
|
return new Container(entityInfo);
|
|
9694
10625
|
}
|
|
10626
|
+
function makeNexus(state) {
|
|
10627
|
+
const entityInfo = Types.entity_info.from({
|
|
10628
|
+
type: Name.from('nexus'),
|
|
10629
|
+
id: UInt64.from(state.id),
|
|
10630
|
+
owner: Name.from(state.owner),
|
|
10631
|
+
entity_name: state.name,
|
|
10632
|
+
coordinates: Types.coordinates.from(state.coordinates),
|
|
10633
|
+
cargomass: UInt32.from(0),
|
|
10634
|
+
cargo: [],
|
|
10635
|
+
modules: [],
|
|
10636
|
+
is_idle: true,
|
|
10637
|
+
current_task_elapsed: UInt32.from(0),
|
|
10638
|
+
current_task_remaining: UInt32.from(0),
|
|
10639
|
+
pending_tasks: [],
|
|
10640
|
+
});
|
|
10641
|
+
return new Nexus(entityInfo);
|
|
10642
|
+
}
|
|
9695
10643
|
|
|
9696
10644
|
function totalCargoMass(cargo) {
|
|
9697
10645
|
return cargo.reduce((sum, c) => {
|
|
@@ -9753,6 +10701,178 @@ var cargoUtils = /*#__PURE__*/Object.freeze({
|
|
|
9753
10701
|
afterRemoveAllItems: afterRemoveAllItems
|
|
9754
10702
|
});
|
|
9755
10703
|
|
|
10704
|
+
function cargoRef(src) {
|
|
10705
|
+
return {
|
|
10706
|
+
item_id: src.item_id,
|
|
10707
|
+
stats: src.stats,
|
|
10708
|
+
modules: src.modules ?? [],
|
|
10709
|
+
};
|
|
10710
|
+
}
|
|
10711
|
+
function cargoItem(src, quantity) {
|
|
10712
|
+
return {
|
|
10713
|
+
...cargoRef(src),
|
|
10714
|
+
quantity,
|
|
10715
|
+
};
|
|
10716
|
+
}
|
|
10717
|
+
|
|
10718
|
+
function toChange(item, direction) {
|
|
10719
|
+
return {
|
|
10720
|
+
direction,
|
|
10721
|
+
item_id: Number(item.item_id),
|
|
10722
|
+
stats: BigInt(item.stats.toString()),
|
|
10723
|
+
modules: item.modules ?? [],
|
|
10724
|
+
quantity: Number(item.quantity),
|
|
10725
|
+
};
|
|
10726
|
+
}
|
|
10727
|
+
function taskCargoChanges(task) {
|
|
10728
|
+
const items = task.cargo ?? [];
|
|
10729
|
+
if (items.length === 0)
|
|
10730
|
+
return [];
|
|
10731
|
+
switch (Number(task.type)) {
|
|
10732
|
+
case TaskType.LOAD:
|
|
10733
|
+
case TaskType.UNWRAP:
|
|
10734
|
+
return items.map((i) => toChange(i, 'in'));
|
|
10735
|
+
case TaskType.GATHER:
|
|
10736
|
+
return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
|
|
10737
|
+
case TaskType.UNLOAD:
|
|
10738
|
+
case TaskType.WRAP:
|
|
10739
|
+
return items.map((i) => toChange(i, 'out'));
|
|
10740
|
+
case TaskType.CRAFT:
|
|
10741
|
+
return [
|
|
10742
|
+
...items.slice(0, -1).map((i) => toChange(i, 'out')),
|
|
10743
|
+
toChange(items[items.length - 1], 'in'),
|
|
10744
|
+
];
|
|
10745
|
+
default:
|
|
10746
|
+
return [];
|
|
10747
|
+
}
|
|
10748
|
+
}
|
|
10749
|
+
|
|
10750
|
+
const ENTITY_SHIP = Name.from('ship');
|
|
10751
|
+
const ENTITY_WAREHOUSE = Name.from('warehouse');
|
|
10752
|
+
const ENTITY_EXTRACTOR = Name.from('extractor');
|
|
10753
|
+
const ENTITY_FACTORY = Name.from('factory');
|
|
10754
|
+
const ENTITY_CONTAINER = Name.from('container');
|
|
10755
|
+
const ENTITY_NEXUS = Name.from('nexus');
|
|
10756
|
+
var EntityClass;
|
|
10757
|
+
(function (EntityClass) {
|
|
10758
|
+
EntityClass[EntityClass["OrbitalVessel"] = 0] = "OrbitalVessel";
|
|
10759
|
+
EntityClass[EntityClass["PlanetaryStructure"] = 1] = "PlanetaryStructure";
|
|
10760
|
+
})(EntityClass || (EntityClass = {}));
|
|
10761
|
+
function getEntityClass(entityType) {
|
|
10762
|
+
const typeName = typeof entityType === 'string' ? entityType : entityType.toString();
|
|
10763
|
+
switch (typeName) {
|
|
10764
|
+
case 'ship':
|
|
10765
|
+
case 'container':
|
|
10766
|
+
case 'nexus':
|
|
10767
|
+
return EntityClass.OrbitalVessel;
|
|
10768
|
+
case 'warehouse':
|
|
10769
|
+
case 'extractor':
|
|
10770
|
+
case 'factory':
|
|
10771
|
+
return EntityClass.PlanetaryStructure;
|
|
10772
|
+
default:
|
|
10773
|
+
throw new Error(`Entity type has no class: ${typeName}`);
|
|
10774
|
+
}
|
|
10775
|
+
}
|
|
10776
|
+
function getPackedEntityType(itemId) {
|
|
10777
|
+
switch (itemId) {
|
|
10778
|
+
case ITEM_SHIP_T1_PACKED:
|
|
10779
|
+
return ENTITY_SHIP;
|
|
10780
|
+
case ITEM_CONTAINER_T1_PACKED:
|
|
10781
|
+
case ITEM_CONTAINER_T2_PACKED:
|
|
10782
|
+
return ENTITY_CONTAINER;
|
|
10783
|
+
case ITEM_WAREHOUSE_T1_PACKED:
|
|
10784
|
+
return ENTITY_WAREHOUSE;
|
|
10785
|
+
case ITEM_EXTRACTOR_T1_PACKED:
|
|
10786
|
+
return ENTITY_EXTRACTOR;
|
|
10787
|
+
case ITEM_FACTORY_T1_PACKED:
|
|
10788
|
+
return ENTITY_FACTORY;
|
|
10789
|
+
default:
|
|
10790
|
+
return null;
|
|
10791
|
+
}
|
|
10792
|
+
}
|
|
10793
|
+
const shipTraits = {
|
|
10794
|
+
typeName: ENTITY_SHIP,
|
|
10795
|
+
isMovable: true,
|
|
10796
|
+
hasEnergy: true,
|
|
10797
|
+
hasLoaders: true,
|
|
10798
|
+
hasModules: true,
|
|
10799
|
+
notFoundError: 'ship not found',
|
|
10800
|
+
};
|
|
10801
|
+
const warehouseTraits = {
|
|
10802
|
+
typeName: ENTITY_WAREHOUSE,
|
|
10803
|
+
isMovable: false,
|
|
10804
|
+
hasEnergy: false,
|
|
10805
|
+
hasLoaders: true,
|
|
10806
|
+
hasModules: true,
|
|
10807
|
+
notFoundError: 'warehouse not found',
|
|
10808
|
+
};
|
|
10809
|
+
const extractorTraits = {
|
|
10810
|
+
typeName: ENTITY_EXTRACTOR,
|
|
10811
|
+
isMovable: false,
|
|
10812
|
+
hasEnergy: true,
|
|
10813
|
+
hasLoaders: false,
|
|
10814
|
+
hasModules: true,
|
|
10815
|
+
notFoundError: 'extractor not found',
|
|
10816
|
+
};
|
|
10817
|
+
const factoryTraits = {
|
|
10818
|
+
typeName: ENTITY_FACTORY,
|
|
10819
|
+
isMovable: false,
|
|
10820
|
+
hasEnergy: true,
|
|
10821
|
+
hasLoaders: false,
|
|
10822
|
+
hasModules: true,
|
|
10823
|
+
notFoundError: 'factory not found',
|
|
10824
|
+
};
|
|
10825
|
+
const containerTraits = {
|
|
10826
|
+
typeName: ENTITY_CONTAINER,
|
|
10827
|
+
isMovable: true,
|
|
10828
|
+
hasEnergy: false,
|
|
10829
|
+
hasLoaders: false,
|
|
10830
|
+
hasModules: false,
|
|
10831
|
+
notFoundError: 'container not found',
|
|
10832
|
+
};
|
|
10833
|
+
const nexusTraits = {
|
|
10834
|
+
typeName: ENTITY_NEXUS,
|
|
10835
|
+
isMovable: false,
|
|
10836
|
+
hasEnergy: false,
|
|
10837
|
+
hasLoaders: false,
|
|
10838
|
+
hasModules: false,
|
|
10839
|
+
notFoundError: 'nexus not found',
|
|
10840
|
+
};
|
|
10841
|
+
function getEntityTraits(entityType) {
|
|
10842
|
+
const typeName = typeof entityType === 'string' ? entityType : entityType.toString();
|
|
10843
|
+
switch (typeName) {
|
|
10844
|
+
case 'ship':
|
|
10845
|
+
return shipTraits;
|
|
10846
|
+
case 'warehouse':
|
|
10847
|
+
return warehouseTraits;
|
|
10848
|
+
case 'extractor':
|
|
10849
|
+
return extractorTraits;
|
|
10850
|
+
case 'factory':
|
|
10851
|
+
return factoryTraits;
|
|
10852
|
+
case 'container':
|
|
10853
|
+
return containerTraits;
|
|
10854
|
+
case 'nexus':
|
|
10855
|
+
return nexusTraits;
|
|
10856
|
+
default:
|
|
10857
|
+
throw new Error(`Unknown entity type: ${typeName}`);
|
|
10858
|
+
}
|
|
10859
|
+
}
|
|
10860
|
+
function isShip(entity) {
|
|
10861
|
+
return entity.type?.equals(ENTITY_SHIP) ?? false;
|
|
10862
|
+
}
|
|
10863
|
+
function isWarehouse(entity) {
|
|
10864
|
+
return entity.type?.equals(ENTITY_WAREHOUSE) ?? false;
|
|
10865
|
+
}
|
|
10866
|
+
function isExtractor(entity) {
|
|
10867
|
+
return entity.type?.equals(ENTITY_EXTRACTOR) ?? false;
|
|
10868
|
+
}
|
|
10869
|
+
function isFactory(entity) {
|
|
10870
|
+
return entity.type?.equals(ENTITY_FACTORY) ?? false;
|
|
10871
|
+
}
|
|
10872
|
+
function isContainer(entity) {
|
|
10873
|
+
return entity.type?.equals(ENTITY_CONTAINER) ?? false;
|
|
10874
|
+
}
|
|
10875
|
+
|
|
9756
10876
|
function canMove(e) {
|
|
9757
10877
|
return 'engines' in e && 'generator' in e && 'energy' in e;
|
|
9758
10878
|
}
|
|
@@ -9825,10 +10945,72 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
|
|
|
9825
10945
|
HAULER_EFFICIENCY_DENOM);
|
|
9826
10946
|
return Math.floor((totalThrust * 1000) / penaltyMilli);
|
|
9827
10947
|
}
|
|
9828
|
-
function computeHaulerDrain(distance, drain, haulCount) {
|
|
10948
|
+
function computeHaulerDrain$1(distance, drain, haulCount) {
|
|
9829
10949
|
return Math.floor(distance / PRECISION) * drain * haulCount;
|
|
9830
10950
|
}
|
|
9831
10951
|
|
|
10952
|
+
const categoryColors = {
|
|
10953
|
+
ore: '#C26D3F',
|
|
10954
|
+
crystal: '#4ADBFF',
|
|
10955
|
+
gas: '#B8E4A0',
|
|
10956
|
+
regolith: '#C4A57B',
|
|
10957
|
+
biomass: '#5A8B3E',
|
|
10958
|
+
};
|
|
10959
|
+
const tierColors = {
|
|
10960
|
+
1: '#8b8b8b',
|
|
10961
|
+
2: '#4ade80',
|
|
10962
|
+
3: '#818cf8',
|
|
10963
|
+
4: '#c084fc',
|
|
10964
|
+
5: '#fbbf24',
|
|
10965
|
+
6: '#f97316',
|
|
10966
|
+
7: '#ef4444',
|
|
10967
|
+
8: '#ec4899',
|
|
10968
|
+
9: '#06b6d4',
|
|
10969
|
+
10: '#ffffff',
|
|
10970
|
+
};
|
|
10971
|
+
const categoryIcons = {
|
|
10972
|
+
ore: '⬡',
|
|
10973
|
+
crystal: '◈',
|
|
10974
|
+
gas: '◎',
|
|
10975
|
+
regolith: '■',
|
|
10976
|
+
biomass: '❋',
|
|
10977
|
+
};
|
|
10978
|
+
const categoryIconShapes = {
|
|
10979
|
+
ore: 'hex',
|
|
10980
|
+
crystal: 'diamond',
|
|
10981
|
+
gas: 'circle',
|
|
10982
|
+
regolith: 'square',
|
|
10983
|
+
biomass: 'star',
|
|
10984
|
+
};
|
|
10985
|
+
const componentIcon = '▣';
|
|
10986
|
+
const moduleIcon = '⬢';
|
|
10987
|
+
const itemAbbreviations = {
|
|
10988
|
+
10001: 'HP',
|
|
10989
|
+
10002: 'CL',
|
|
10990
|
+
10003: 'TC',
|
|
10991
|
+
10004: 'PC',
|
|
10992
|
+
10005: 'DS',
|
|
10993
|
+
10006: 'EP',
|
|
10994
|
+
10007: 'CA',
|
|
10995
|
+
10008: 'TB',
|
|
10996
|
+
10009: 'RC',
|
|
10997
|
+
10010: 'FA',
|
|
10998
|
+
10100: 'EN',
|
|
10999
|
+
10101: 'GN',
|
|
11000
|
+
10102: 'EX',
|
|
11001
|
+
10103: 'LD',
|
|
11002
|
+
10104: 'MF',
|
|
11003
|
+
10105: 'ST',
|
|
11004
|
+
10106: 'HL',
|
|
11005
|
+
10107: 'WP',
|
|
11006
|
+
10200: 'CT',
|
|
11007
|
+
10201: 'SH',
|
|
11008
|
+
10202: 'WH',
|
|
11009
|
+
20001: 'HP',
|
|
11010
|
+
20002: 'CL',
|
|
11011
|
+
20200: 'CT',
|
|
11012
|
+
};
|
|
11013
|
+
|
|
9832
11014
|
const ITEM_TYPE_RESOURCE = 0;
|
|
9833
11015
|
const ITEM_TYPE_COMPONENT = 1;
|
|
9834
11016
|
const ITEM_TYPE_MODULE = 2;
|
|
@@ -9975,6 +11157,11 @@ const capabilityNames = [
|
|
|
9975
11157
|
const capabilityAttributes = [
|
|
9976
11158
|
{ capability: 'Hull', attribute: 'mass', description: 'Total mass of the hull' },
|
|
9977
11159
|
{ capability: 'Storage', attribute: 'capacity', description: 'Maximum mass that can be stored' },
|
|
11160
|
+
{
|
|
11161
|
+
capability: 'Storage',
|
|
11162
|
+
attribute: 'bonus',
|
|
11163
|
+
description: 'Capacity bonus added by an installed Storage module',
|
|
11164
|
+
},
|
|
9978
11165
|
{ capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
|
|
9979
11166
|
{ capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
|
|
9980
11167
|
{ capability: 'Energy', attribute: 'capacity', description: 'Maximum energy storage' },
|
|
@@ -10012,338 +11199,151 @@ const capabilityAttributes = [
|
|
|
10012
11199
|
description: 'Energy consumed per target during haul-beam operation',
|
|
10013
11200
|
},
|
|
10014
11201
|
];
|
|
10015
|
-
const
|
|
10016
|
-
|
|
10017
|
-
|
|
10018
|
-
|
|
10019
|
-
|
|
10020
|
-
|
|
10021
|
-
|
|
10022
|
-
|
|
10023
|
-
|
|
10024
|
-
|
|
10025
|
-
|
|
10026
|
-
|
|
10027
|
-
},
|
|
10028
|
-
{
|
|
10029
|
-
|
|
10030
|
-
|
|
10031
|
-
|
|
10032
|
-
|
|
10033
|
-
|
|
10034
|
-
|
|
10035
|
-
|
|
10036
|
-
capability: 'Movement',
|
|
10037
|
-
attribute: 'thrust',
|
|
10038
|
-
rationale: 'Engine components that tolerate more can push harder',
|
|
10039
|
-
},
|
|
10040
|
-
{
|
|
10041
|
-
stat: 'Tolerance',
|
|
10042
|
-
capability: 'Energy',
|
|
10043
|
-
attribute: 'recharge',
|
|
10044
|
-
rationale: 'Generator housing withstands stress for faster recharge',
|
|
10045
|
-
},
|
|
10046
|
-
{
|
|
10047
|
-
stat: 'Tolerance',
|
|
10048
|
-
capability: 'Gathering',
|
|
10049
|
-
attribute: 'depth',
|
|
10050
|
-
rationale: 'Housing withstands pressure/heat at extreme depths',
|
|
10051
|
-
},
|
|
10052
|
-
{
|
|
10053
|
-
stat: 'Tolerance',
|
|
10054
|
-
capability: 'Warp',
|
|
10055
|
-
attribute: 'range',
|
|
10056
|
-
rationale: 'Warp drive housing withstands extreme forces',
|
|
10057
|
-
},
|
|
10058
|
-
{
|
|
10059
|
-
stat: 'Density',
|
|
10060
|
-
capability: 'Hull',
|
|
10061
|
-
attribute: 'mass',
|
|
10062
|
-
rationale: 'Lighter metal = lighter hull',
|
|
10063
|
-
},
|
|
10064
|
-
{
|
|
10065
|
-
stat: 'Density',
|
|
10066
|
-
capability: 'Loader',
|
|
10067
|
-
attribute: 'mass',
|
|
10068
|
-
rationale: 'Lighter metal = lighter loader units',
|
|
10069
|
-
},
|
|
10070
|
-
{
|
|
10071
|
-
stat: 'Density',
|
|
10072
|
-
capability: 'Movement',
|
|
10073
|
-
attribute: 'drain',
|
|
10074
|
-
rationale: 'Lighter components require less energy to move',
|
|
10075
|
-
},
|
|
10076
|
-
{
|
|
10077
|
-
stat: 'Conductivity',
|
|
10078
|
-
capability: 'Movement',
|
|
10079
|
-
attribute: 'drain',
|
|
10080
|
-
rationale: 'Efficient energy transfer reduces movement energy cost',
|
|
10081
|
-
},
|
|
10082
|
-
{
|
|
10083
|
-
stat: 'Conductivity',
|
|
10084
|
-
capability: 'Gathering',
|
|
10085
|
-
attribute: 'drain',
|
|
10086
|
-
rationale: 'Efficient energy transfer reduces gathering energy cost',
|
|
10087
|
-
},
|
|
10088
|
-
{
|
|
10089
|
-
stat: 'Conductivity',
|
|
10090
|
-
capability: 'Crafter',
|
|
10091
|
-
attribute: 'drain',
|
|
10092
|
-
rationale: 'Efficient energy transfer reduces crafting energy cost',
|
|
10093
|
-
},
|
|
10094
|
-
{
|
|
10095
|
-
stat: 'Conductivity',
|
|
10096
|
-
capability: 'Energy',
|
|
10097
|
-
attribute: 'recharge',
|
|
10098
|
-
rationale: 'Better conductivity speeds energy flow during recharge',
|
|
10099
|
-
},
|
|
10100
|
-
{
|
|
10101
|
-
stat: 'Ductility',
|
|
10102
|
-
capability: 'Crafter',
|
|
10103
|
-
attribute: 'quality',
|
|
10104
|
-
rationale: 'Precise shaping enables tighter crafting tolerances',
|
|
10105
|
-
},
|
|
10106
|
-
{
|
|
10107
|
-
stat: 'Ductility',
|
|
10108
|
-
capability: 'Gathering',
|
|
10109
|
-
attribute: 'yield',
|
|
10110
|
-
rationale: 'Precisely shaped conduit components gather faster',
|
|
10111
|
-
},
|
|
10112
|
-
{
|
|
10113
|
-
stat: 'Ductility',
|
|
10114
|
-
capability: 'Storage',
|
|
10115
|
-
attribute: 'capacity',
|
|
10116
|
-
rationale: 'Precision-formed container walls maximize volume',
|
|
10117
|
-
},
|
|
10118
|
-
{
|
|
10119
|
-
stat: 'Ductility',
|
|
10120
|
-
capability: 'Loader',
|
|
10121
|
-
attribute: 'mass',
|
|
10122
|
-
rationale: 'Precision-formed precious metal reduces loader unit mass',
|
|
10123
|
-
},
|
|
10124
|
-
{
|
|
10125
|
-
stat: 'Reflectivity',
|
|
10126
|
-
capability: 'Gathering',
|
|
10127
|
-
attribute: 'depth',
|
|
10128
|
-
rationale: 'Reflective heat shielding protects equipment at depth',
|
|
10129
|
-
},
|
|
10130
|
-
{
|
|
10131
|
-
stat: 'Reflectivity',
|
|
10132
|
-
capability: 'Launch',
|
|
10133
|
-
attribute: 'range',
|
|
10134
|
-
rationale: 'Reflective surfaces focus electromagnetic launch energy',
|
|
10135
|
-
},
|
|
10136
|
-
{
|
|
10137
|
-
stat: 'Volatility',
|
|
10138
|
-
capability: 'Gathering',
|
|
10139
|
-
attribute: 'yield',
|
|
10140
|
-
rationale: 'Energy release powers faster gathering',
|
|
10141
|
-
},
|
|
10142
|
-
{
|
|
10143
|
-
stat: 'Volatility',
|
|
10144
|
-
capability: 'Movement',
|
|
10145
|
-
attribute: 'thrust',
|
|
10146
|
-
rationale: 'Energy release drives propulsion force',
|
|
10147
|
-
},
|
|
10148
|
-
{
|
|
10149
|
-
stat: 'Volatility',
|
|
10150
|
-
capability: 'Loader',
|
|
10151
|
-
attribute: 'thrust',
|
|
10152
|
-
rationale: 'Energy release powers loader motors',
|
|
10153
|
-
},
|
|
10154
|
-
{
|
|
10155
|
-
stat: 'Volatility',
|
|
10156
|
-
capability: 'Launch',
|
|
10157
|
-
attribute: 'capacity',
|
|
10158
|
-
rationale: 'Energy release enables launching heavier payloads',
|
|
10159
|
-
},
|
|
10160
|
-
{
|
|
10161
|
-
stat: 'Reactivity',
|
|
10162
|
-
capability: 'Crafter',
|
|
10163
|
-
attribute: 'speed',
|
|
10164
|
-
rationale: 'Reactive gases accelerate chemical/thermal processing',
|
|
10165
|
-
},
|
|
10166
|
-
{
|
|
10167
|
-
stat: 'Reactivity',
|
|
10168
|
-
capability: 'Gathering',
|
|
10169
|
-
attribute: 'speed',
|
|
10170
|
-
rationale: 'Reactive gases manage heat/friction during gathering',
|
|
10171
|
-
},
|
|
10172
|
-
{
|
|
10173
|
-
stat: 'Reactivity',
|
|
10174
|
-
capability: 'Launch',
|
|
10175
|
-
attribute: 'drain',
|
|
10176
|
-
rationale: 'Reactive gas medium reduces electromagnetic resistance',
|
|
10177
|
-
},
|
|
10178
|
-
{
|
|
10179
|
-
stat: 'Thermal',
|
|
10180
|
-
capability: 'Crafter',
|
|
10181
|
-
attribute: 'quality',
|
|
10182
|
-
rationale: 'Precise thermal control during fabrication',
|
|
10183
|
-
},
|
|
10184
|
-
{
|
|
10185
|
-
stat: 'Thermal',
|
|
10186
|
-
capability: 'Gathering',
|
|
10187
|
-
attribute: 'drain',
|
|
10188
|
-
rationale: 'Thermal management reduces energy waste during gathering',
|
|
10189
|
-
},
|
|
10190
|
-
{
|
|
10191
|
-
stat: 'Thermal',
|
|
10192
|
-
capability: 'Energy',
|
|
10193
|
-
attribute: 'capacity',
|
|
10194
|
-
rationale: 'Thermal management enables denser energy storage',
|
|
10195
|
-
},
|
|
10196
|
-
{
|
|
10197
|
-
stat: 'Resonance',
|
|
10198
|
-
capability: 'Energy',
|
|
10199
|
-
attribute: 'capacity',
|
|
10200
|
-
rationale: 'Resonating crystals store energy in fields',
|
|
10201
|
-
},
|
|
10202
|
-
{
|
|
10203
|
-
stat: 'Resonance',
|
|
10204
|
-
capability: 'Warp',
|
|
10205
|
-
attribute: 'range',
|
|
10206
|
-
rationale: 'Resonant crystals amplify warp field projection',
|
|
10207
|
-
},
|
|
10208
|
-
{
|
|
10209
|
-
stat: 'Resonance',
|
|
10210
|
-
capability: 'Launch',
|
|
10211
|
-
attribute: 'range',
|
|
10212
|
-
rationale: 'Resonant crystals focus electromagnetic launch field',
|
|
10213
|
-
},
|
|
10214
|
-
{
|
|
10215
|
-
stat: 'Resonance',
|
|
10216
|
-
capability: 'Launch',
|
|
10217
|
-
attribute: 'capacity',
|
|
10218
|
-
rationale: 'Stronger resonant field launches heavier payloads',
|
|
10219
|
-
},
|
|
10220
|
-
{
|
|
10221
|
-
stat: 'Hardness',
|
|
10222
|
-
capability: 'Crafter',
|
|
10223
|
-
attribute: 'speed',
|
|
10224
|
-
rationale: 'Hard tooling surfaces cut and shape materials faster',
|
|
10225
|
-
},
|
|
10226
|
-
{
|
|
10227
|
-
stat: 'Hardness',
|
|
10228
|
-
capability: 'Launch',
|
|
10229
|
-
attribute: 'drain',
|
|
10230
|
-
rationale: 'Hard rail surfaces reduce friction, less energy wasted',
|
|
10231
|
-
},
|
|
10232
|
-
{
|
|
10233
|
-
stat: 'Clarity',
|
|
10234
|
-
capability: 'Energy',
|
|
10235
|
-
attribute: 'recharge',
|
|
10236
|
-
rationale: 'Flawless crystals enable smoother energy flow during recharge',
|
|
10237
|
-
},
|
|
10238
|
-
{
|
|
10239
|
-
stat: 'Clarity',
|
|
10240
|
-
capability: 'Crafter',
|
|
10241
|
-
attribute: 'quality',
|
|
10242
|
-
rationale: 'Precision optics for calibration during fabrication',
|
|
10243
|
-
},
|
|
10244
|
-
{
|
|
10245
|
-
stat: 'Clarity',
|
|
10246
|
-
capability: 'Crafter',
|
|
10247
|
-
attribute: 'drain',
|
|
10248
|
-
rationale: 'Precision computing optimizes energy routing in factory',
|
|
10249
|
-
},
|
|
10250
|
-
{
|
|
10251
|
-
stat: 'Plasticity',
|
|
10252
|
-
capability: 'Crafter',
|
|
10253
|
-
attribute: 'speed',
|
|
10254
|
-
rationale: 'Easily reshaped materials speed up processing',
|
|
10255
|
-
},
|
|
10256
|
-
{
|
|
10257
|
-
stat: 'Plasticity',
|
|
10258
|
-
capability: 'Movement',
|
|
10259
|
-
attribute: 'thrust',
|
|
10260
|
-
rationale: 'Flexible polymer seals reduce friction in propulsion',
|
|
10261
|
-
},
|
|
10262
|
-
{
|
|
10263
|
-
stat: 'Plasticity',
|
|
10264
|
-
capability: 'Loader',
|
|
10265
|
-
attribute: 'thrust',
|
|
10266
|
-
rationale: 'Flexible joints improve loader force transfer',
|
|
10267
|
-
},
|
|
10268
|
-
{
|
|
10269
|
-
stat: 'Insulation',
|
|
10270
|
-
capability: 'Movement',
|
|
10271
|
-
attribute: 'drain',
|
|
10272
|
-
rationale: 'Better insulation reduces energy loss during movement',
|
|
10273
|
-
},
|
|
10274
|
-
{
|
|
10275
|
-
stat: 'Insulation',
|
|
10276
|
-
capability: 'Gathering',
|
|
10277
|
-
attribute: 'drain',
|
|
10278
|
-
rationale: 'Better insulation reduces energy loss during gathering',
|
|
10279
|
-
},
|
|
10280
|
-
{
|
|
10281
|
-
stat: 'Insulation',
|
|
10282
|
-
capability: 'Crafter',
|
|
10283
|
-
attribute: 'drain',
|
|
10284
|
-
rationale: 'Better insulation reduces energy loss during crafting',
|
|
11202
|
+
const invertedAttributes = new Set(['drain', 'mass']);
|
|
11203
|
+
function isInvertedAttribute(attribute) {
|
|
11204
|
+
return invertedAttributes.has(attribute);
|
|
11205
|
+
}
|
|
11206
|
+
function getCapabilityAttributes(capability) {
|
|
11207
|
+
if (capability) {
|
|
11208
|
+
return capabilityAttributes.filter((a) => a.capability === capability);
|
|
11209
|
+
}
|
|
11210
|
+
return capabilityAttributes;
|
|
11211
|
+
}
|
|
11212
|
+
|
|
11213
|
+
const ENTITY_HULL_SLOTS = {
|
|
11214
|
+
0: { capability: 'Storage', attribute: 'capacity' },
|
|
11215
|
+
1: { capability: 'Hull', attribute: 'mass' },
|
|
11216
|
+
2: { capability: 'Storage', attribute: 'capacity' },
|
|
11217
|
+
3: { capability: 'Storage', attribute: 'capacity' },
|
|
11218
|
+
};
|
|
11219
|
+
const SLOT_FORMULAS = {
|
|
11220
|
+
engine: {
|
|
11221
|
+
0: { capability: 'Movement', attribute: 'thrust' },
|
|
11222
|
+
1: { capability: 'Movement', attribute: 'drain' },
|
|
10285
11223
|
},
|
|
10286
|
-
{
|
|
10287
|
-
|
|
10288
|
-
capability: '
|
|
10289
|
-
attribute: 'drain',
|
|
10290
|
-
rationale: 'Better insulation reduces energy loss during launch',
|
|
11224
|
+
generator: {
|
|
11225
|
+
0: { capability: 'Energy', attribute: 'capacity' },
|
|
11226
|
+
1: { capability: 'Energy', attribute: 'recharge' },
|
|
10291
11227
|
},
|
|
10292
|
-
{
|
|
10293
|
-
|
|
10294
|
-
capability: '
|
|
10295
|
-
attribute: '
|
|
10296
|
-
|
|
11228
|
+
gatherer: {
|
|
11229
|
+
0: { capability: 'Gathering', attribute: 'yield' },
|
|
11230
|
+
1: { capability: 'Gathering', attribute: 'depth' },
|
|
11231
|
+
3: { capability: 'Gathering', attribute: 'drain' },
|
|
11232
|
+
4: { capability: 'Gathering', attribute: 'speed' },
|
|
10297
11233
|
},
|
|
10298
|
-
{
|
|
10299
|
-
|
|
10300
|
-
capability: '
|
|
10301
|
-
attribute: 'speed',
|
|
10302
|
-
rationale: 'Purer bio-lubricants reduce friction during gathering',
|
|
11234
|
+
loader: {
|
|
11235
|
+
0: { capability: 'Loader', attribute: 'mass' },
|
|
11236
|
+
1: { capability: 'Loader', attribute: 'thrust' },
|
|
10303
11237
|
},
|
|
10304
|
-
{
|
|
10305
|
-
|
|
10306
|
-
capability: '
|
|
10307
|
-
attribute: 'capacity',
|
|
10308
|
-
rationale: 'Purer organic electrolytes store more charge',
|
|
11238
|
+
crafter: {
|
|
11239
|
+
0: { capability: 'Crafter', attribute: 'speed' },
|
|
11240
|
+
1: { capability: 'Crafter', attribute: 'drain' },
|
|
10309
11241
|
},
|
|
10310
|
-
{
|
|
10311
|
-
|
|
10312
|
-
capability: '
|
|
10313
|
-
attribute: '
|
|
10314
|
-
|
|
11242
|
+
storage: {
|
|
11243
|
+
0: { capability: 'Storage', attribute: 'bonus' },
|
|
11244
|
+
1: { capability: 'Storage', attribute: 'bonus' },
|
|
11245
|
+
2: { capability: 'Storage', attribute: 'bonus' },
|
|
11246
|
+
3: { capability: 'Storage', attribute: 'bonus' },
|
|
10315
11247
|
},
|
|
10316
|
-
{
|
|
10317
|
-
|
|
10318
|
-
capability: 'Hauler',
|
|
10319
|
-
attribute: '
|
|
10320
|
-
rationale: 'Energy-transfer efficiency reduces the thrust penalty from each hauled target.',
|
|
11248
|
+
hauler: {
|
|
11249
|
+
0: { capability: 'Hauler', attribute: 'capacity' },
|
|
11250
|
+
1: { capability: 'Hauler', attribute: 'efficiency' },
|
|
11251
|
+
2: { capability: 'Hauler', attribute: 'drain' },
|
|
10321
11252
|
},
|
|
10322
|
-
{
|
|
10323
|
-
|
|
10324
|
-
capability: 'Hauler',
|
|
10325
|
-
attribute: 'drain',
|
|
10326
|
-
rationale: 'Clarity-focused energy routing reduces per-target drain during haul-beam operation.',
|
|
11253
|
+
warp: {
|
|
11254
|
+
0: { capability: 'Warp', attribute: 'range' },
|
|
10327
11255
|
},
|
|
10328
|
-
|
|
10329
|
-
|
|
10330
|
-
|
|
10331
|
-
|
|
11256
|
+
'ship-t1': ENTITY_HULL_SLOTS,
|
|
11257
|
+
'container-t1': ENTITY_HULL_SLOTS,
|
|
11258
|
+
'warehouse-t1': ENTITY_HULL_SLOTS,
|
|
11259
|
+
'extractor-t1': ENTITY_HULL_SLOTS,
|
|
11260
|
+
'container-t2': ENTITY_HULL_SLOTS,
|
|
11261
|
+
};
|
|
11262
|
+
|
|
11263
|
+
const KIND_TO_ITEM_ID = {
|
|
11264
|
+
engine: ITEM_ENGINE_T1,
|
|
11265
|
+
generator: ITEM_GENERATOR_T1,
|
|
11266
|
+
gatherer: ITEM_GATHERER_T1,
|
|
11267
|
+
loader: ITEM_LOADER_T1,
|
|
11268
|
+
crafter: ITEM_CRAFTER_T1,
|
|
11269
|
+
storage: ITEM_STORAGE_T1,
|
|
11270
|
+
hauler: ITEM_HAULER_T1,
|
|
11271
|
+
warp: ITEM_WARP_T1,
|
|
11272
|
+
'ship-t1': ITEM_SHIP_T1_PACKED,
|
|
11273
|
+
'container-t1': ITEM_CONTAINER_T1_PACKED,
|
|
11274
|
+
'warehouse-t1': ITEM_WAREHOUSE_T1_PACKED,
|
|
11275
|
+
'extractor-t1': ITEM_EXTRACTOR_T1_PACKED,
|
|
11276
|
+
'container-t2': ITEM_CONTAINER_T2_PACKED,
|
|
11277
|
+
};
|
|
11278
|
+
function isCategoryInput(input) {
|
|
11279
|
+
return 'category' in input;
|
|
10332
11280
|
}
|
|
10333
|
-
function
|
|
10334
|
-
|
|
10335
|
-
|
|
11281
|
+
function traceToRawCategoryStat(recipe, source, visited = new Set()) {
|
|
11282
|
+
const input = recipe.inputs[source.inputIndex];
|
|
11283
|
+
if (!input)
|
|
11284
|
+
return undefined;
|
|
11285
|
+
if (isCategoryInput(input)) {
|
|
11286
|
+
const defs = getStatDefinitions(input.category);
|
|
11287
|
+
return defs[source.statIndex];
|
|
10336
11288
|
}
|
|
10337
|
-
|
|
11289
|
+
if (visited.has(input.itemId))
|
|
11290
|
+
return undefined;
|
|
11291
|
+
const subRecipe = getRecipe(input.itemId);
|
|
11292
|
+
if (!subRecipe)
|
|
11293
|
+
return undefined;
|
|
11294
|
+
const subSlot = subRecipe.statSlots[source.statIndex];
|
|
11295
|
+
if (!subSlot)
|
|
11296
|
+
return undefined;
|
|
11297
|
+
const subSource = subSlot.sources[0];
|
|
11298
|
+
if (!subSource)
|
|
11299
|
+
return undefined;
|
|
11300
|
+
const nextVisited = new Set(visited);
|
|
11301
|
+
nextVisited.add(input.itemId);
|
|
11302
|
+
return traceToRawCategoryStat(subRecipe, subSource, nextVisited);
|
|
11303
|
+
}
|
|
11304
|
+
let cached;
|
|
11305
|
+
function deriveStatMappings() {
|
|
11306
|
+
if (cached)
|
|
11307
|
+
return cached;
|
|
11308
|
+
const out = [];
|
|
11309
|
+
const seen = new Set();
|
|
11310
|
+
for (const [kind, slots] of Object.entries(SLOT_FORMULAS)) {
|
|
11311
|
+
const itemId = KIND_TO_ITEM_ID[kind];
|
|
11312
|
+
const recipe = getRecipe(itemId);
|
|
11313
|
+
if (!recipe)
|
|
11314
|
+
continue;
|
|
11315
|
+
for (const [slotIdxStr, consumer] of Object.entries(slots)) {
|
|
11316
|
+
const slotIdx = Number(slotIdxStr);
|
|
11317
|
+
const slot = recipe.statSlots[slotIdx];
|
|
11318
|
+
if (!slot)
|
|
11319
|
+
continue;
|
|
11320
|
+
for (const source of slot.sources) {
|
|
11321
|
+
const stat = traceToRawCategoryStat(recipe, source);
|
|
11322
|
+
if (!stat)
|
|
11323
|
+
continue;
|
|
11324
|
+
const key = `${stat.label}|${consumer.capability}|${consumer.attribute}`;
|
|
11325
|
+
if (seen.has(key))
|
|
11326
|
+
continue;
|
|
11327
|
+
seen.add(key);
|
|
11328
|
+
out.push({
|
|
11329
|
+
stat: stat.label,
|
|
11330
|
+
capability: consumer.capability,
|
|
11331
|
+
attribute: consumer.attribute,
|
|
11332
|
+
});
|
|
11333
|
+
}
|
|
11334
|
+
}
|
|
11335
|
+
}
|
|
11336
|
+
cached = out;
|
|
11337
|
+
return out;
|
|
10338
11338
|
}
|
|
10339
11339
|
function getStatMappings() {
|
|
10340
|
-
return
|
|
11340
|
+
return deriveStatMappings();
|
|
10341
11341
|
}
|
|
10342
11342
|
function getStatMappingsForStat(stat) {
|
|
10343
|
-
return
|
|
11343
|
+
return deriveStatMappings().filter((m) => m.stat === stat);
|
|
10344
11344
|
}
|
|
10345
11345
|
function getStatMappingsForCapability(capability) {
|
|
10346
|
-
return
|
|
11346
|
+
return deriveStatMappings().filter((m) => m.capability === capability);
|
|
10347
11347
|
}
|
|
10348
11348
|
|
|
10349
11349
|
function toNum(v) {
|
|
@@ -10415,7 +11415,7 @@ function resolveComponent(id, stats) {
|
|
|
10415
11415
|
stats: resolvedStats,
|
|
10416
11416
|
};
|
|
10417
11417
|
}
|
|
10418
|
-
function computeCapabilityGroup(moduleType, stats) {
|
|
11418
|
+
function computeCapabilityGroup(moduleType, stats, tier) {
|
|
10419
11419
|
switch (moduleType) {
|
|
10420
11420
|
case MODULE_ENGINE: {
|
|
10421
11421
|
const caps = computeEngineCapabilities(stats);
|
|
@@ -10438,7 +11438,7 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
10438
11438
|
};
|
|
10439
11439
|
}
|
|
10440
11440
|
case MODULE_GATHERER: {
|
|
10441
|
-
const caps = computeGathererCapabilities(stats);
|
|
11441
|
+
const caps = computeGathererCapabilities(stats, tier);
|
|
10442
11442
|
return {
|
|
10443
11443
|
capability: 'Gatherer',
|
|
10444
11444
|
attributes: [
|
|
@@ -10482,10 +11482,11 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
10482
11482
|
};
|
|
10483
11483
|
}
|
|
10484
11484
|
case MODULE_STORAGE: {
|
|
10485
|
-
const str = stats.strength
|
|
10486
|
-
const
|
|
10487
|
-
const
|
|
10488
|
-
const
|
|
11485
|
+
const str = stats.strength;
|
|
11486
|
+
const den = stats.density;
|
|
11487
|
+
const hrd = stats.hardness;
|
|
11488
|
+
const sat = stats.saturation;
|
|
11489
|
+
const statSum = str + den + hrd + sat;
|
|
10489
11490
|
const pct = 10 + Math.floor((statSum * 10) / 2997);
|
|
10490
11491
|
return { capability: 'Storage', attributes: [{ label: 'Capacity Bonus', value: pct }] };
|
|
10491
11492
|
}
|
|
@@ -10499,7 +11500,7 @@ function resolveModule(id, stats) {
|
|
|
10499
11500
|
if (stats !== undefined) {
|
|
10500
11501
|
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
10501
11502
|
const modType = getModuleCapabilityType(id);
|
|
10502
|
-
const group = computeCapabilityGroup(modType, decoded);
|
|
11503
|
+
const group = computeCapabilityGroup(modType, decoded, item.tier);
|
|
10503
11504
|
if (group)
|
|
10504
11505
|
attributes = [group];
|
|
10505
11506
|
}
|
|
@@ -10520,6 +11521,8 @@ function hullCapsForEntity(itemId, decoded) {
|
|
|
10520
11521
|
return computeShipHullCapabilities(decoded);
|
|
10521
11522
|
case ITEM_WAREHOUSE_T1_PACKED:
|
|
10522
11523
|
return computeWarehouseHullCapabilities(decoded);
|
|
11524
|
+
case ITEM_EXTRACTOR_T1_PACKED:
|
|
11525
|
+
return computeShipHullCapabilities(decoded);
|
|
10523
11526
|
case ITEM_CONTAINER_T1_PACKED:
|
|
10524
11527
|
return computeContainerCapabilities(decoded);
|
|
10525
11528
|
case ITEM_CONTAINER_T2_PACKED:
|
|
@@ -10555,14 +11558,17 @@ function resolveEntity(id, stats, modules) {
|
|
|
10555
11558
|
const modStats = BigInt(mod.installed.stats.toString());
|
|
10556
11559
|
const decodedStats = decodeCraftedItemStats(modItemId, modStats);
|
|
10557
11560
|
const modType = getModuleCapabilityType(modItemId);
|
|
10558
|
-
const group = computeCapabilityGroup(modType, decodedStats);
|
|
10559
11561
|
let modName = 'Module';
|
|
11562
|
+
let modTier = 1;
|
|
10560
11563
|
try {
|
|
10561
|
-
|
|
11564
|
+
const modItem = getItem(modItemId);
|
|
11565
|
+
modName = modItem.name;
|
|
11566
|
+
modTier = modItem.tier;
|
|
10562
11567
|
}
|
|
10563
11568
|
catch {
|
|
10564
11569
|
modName = itemMetadata[modItemId]?.name ?? 'Module';
|
|
10565
11570
|
}
|
|
11571
|
+
const group = computeCapabilityGroup(modType, decodedStats, modTier);
|
|
10566
11572
|
return {
|
|
10567
11573
|
name: modName,
|
|
10568
11574
|
installed: true,
|
|
@@ -10778,7 +11784,7 @@ function idiv(a, b) {
|
|
|
10778
11784
|
}
|
|
10779
11785
|
function computeBaseHullmass(stats) {
|
|
10780
11786
|
const density = decodeStat(stats, 1);
|
|
10781
|
-
return
|
|
11787
|
+
return 100000 - 75 * density;
|
|
10782
11788
|
}
|
|
10783
11789
|
function computeBaseCapacityShip(stats) {
|
|
10784
11790
|
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
@@ -10790,22 +11796,28 @@ function computeBaseCapacityWarehouse(stats) {
|
|
|
10790
11796
|
}
|
|
10791
11797
|
const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
|
|
10792
11798
|
const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
|
|
10793
|
-
const computeGeneratorCap = (
|
|
10794
|
-
const computeGeneratorRech = (
|
|
11799
|
+
const computeGeneratorCap = (com) => 300 + idiv(com, 6);
|
|
11800
|
+
const computeGeneratorRech = (fin) => 1 + idiv(fin * 3, 1000);
|
|
10795
11801
|
const computeGathererYield = (str) => 200 + str;
|
|
10796
11802
|
const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
|
|
10797
|
-
const computeGathererDepth = (tol) =>
|
|
11803
|
+
const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
|
|
10798
11804
|
const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
|
|
10799
|
-
const computeLoaderMass = (
|
|
11805
|
+
const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
|
|
10800
11806
|
const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
|
|
10801
11807
|
const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
|
|
10802
|
-
const computeCrafterDrain = (
|
|
11808
|
+
const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
|
|
11809
|
+
const computeHaulerCapacity = (fin) => Math.max(1, 1 + idiv(fin, 400));
|
|
11810
|
+
const computeHaulerEfficiency = (con) => 2000 + con * 6;
|
|
11811
|
+
const computeHaulerDrain = (com) => Math.max(3, 15 - idiv(com, 80));
|
|
11812
|
+
const computeWarpRange = (stat) => 100 + stat * 3;
|
|
10803
11813
|
function entityDisplayName(itemId) {
|
|
10804
11814
|
switch (itemId) {
|
|
10805
11815
|
case ITEM_SHIP_T1_PACKED:
|
|
10806
11816
|
return 'Ship';
|
|
10807
11817
|
case ITEM_WAREHOUSE_T1_PACKED:
|
|
10808
11818
|
return 'Warehouse';
|
|
11819
|
+
case ITEM_EXTRACTOR_T1_PACKED:
|
|
11820
|
+
return 'Extractor';
|
|
10809
11821
|
case ITEM_CONTAINER_T1_PACKED:
|
|
10810
11822
|
return 'Container';
|
|
10811
11823
|
case ITEM_CONTAINER_T2_PACKED:
|
|
@@ -10828,6 +11840,10 @@ function moduleDisplayName(itemId) {
|
|
|
10828
11840
|
return 'Crafter';
|
|
10829
11841
|
case ITEM_STORAGE_T1:
|
|
10830
11842
|
return 'Storage';
|
|
11843
|
+
case ITEM_HAULER_T1:
|
|
11844
|
+
return 'Hauler';
|
|
11845
|
+
case ITEM_WARP_T1:
|
|
11846
|
+
return 'Warp';
|
|
10831
11847
|
default:
|
|
10832
11848
|
return 'Module';
|
|
10833
11849
|
}
|
|
@@ -10858,7 +11874,8 @@ function formatModuleLine(slot, itemId, stats) {
|
|
|
10858
11874
|
const tol = decodeStat(stats, 1);
|
|
10859
11875
|
const con = decodeStat(stats, 3);
|
|
10860
11876
|
const ref = decodeStat(stats, 4);
|
|
10861
|
-
|
|
11877
|
+
const tier = getItem(itemId).tier;
|
|
11878
|
+
out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
|
|
10862
11879
|
break;
|
|
10863
11880
|
}
|
|
10864
11881
|
case MODULE_LOADER: {
|
|
@@ -10882,6 +11899,18 @@ function formatModuleLine(slot, itemId, stats) {
|
|
|
10882
11899
|
out += ` +${pct}% capacity`;
|
|
10883
11900
|
break;
|
|
10884
11901
|
}
|
|
11902
|
+
case MODULE_HAULER: {
|
|
11903
|
+
const fin = decodeStat(stats, 0);
|
|
11904
|
+
const con = decodeStat(stats, 1);
|
|
11905
|
+
const com = decodeStat(stats, 2);
|
|
11906
|
+
out += ` Capacity ${computeHaulerCapacity(fin)} Efficiency ${computeHaulerEfficiency(con)} Drain ${computeHaulerDrain(com)}`;
|
|
11907
|
+
break;
|
|
11908
|
+
}
|
|
11909
|
+
case MODULE_WARP: {
|
|
11910
|
+
const stat = decodeStat(stats, 0);
|
|
11911
|
+
out += ` Range ${computeWarpRange(stat)}`;
|
|
11912
|
+
break;
|
|
11913
|
+
}
|
|
10885
11914
|
}
|
|
10886
11915
|
return out;
|
|
10887
11916
|
}
|
|
@@ -10894,6 +11923,9 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
|
10894
11923
|
else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
|
|
10895
11924
|
baseCapacity = computeBaseCapacityWarehouse(hullStats);
|
|
10896
11925
|
}
|
|
11926
|
+
else if (itemId === ITEM_EXTRACTOR_T1_PACKED) {
|
|
11927
|
+
baseCapacity = computeBaseCapacityShip(hullStats);
|
|
11928
|
+
}
|
|
10897
11929
|
let out = entityDisplayName(itemId);
|
|
10898
11930
|
out += ` - Hull ${hullMass} mass`;
|
|
10899
11931
|
if (baseCapacity > 0) {
|
|
@@ -10907,6 +11939,118 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
|
10907
11939
|
return out;
|
|
10908
11940
|
}
|
|
10909
11941
|
|
|
11942
|
+
function deserializeAtomicData(data, schema) {
|
|
11943
|
+
let rawData;
|
|
11944
|
+
if (data && typeof data === 'object' && 'immutable_serialized_data' in data) {
|
|
11945
|
+
rawData = data
|
|
11946
|
+
.immutable_serialized_data;
|
|
11947
|
+
}
|
|
11948
|
+
else {
|
|
11949
|
+
rawData = data;
|
|
11950
|
+
}
|
|
11951
|
+
let bytes;
|
|
11952
|
+
if (typeof rawData === 'string') {
|
|
11953
|
+
const hex = rawData;
|
|
11954
|
+
bytes = new Uint8Array(hex.length / 2);
|
|
11955
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
11956
|
+
bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
11957
|
+
}
|
|
11958
|
+
}
|
|
11959
|
+
else if (Array.isArray(rawData)) {
|
|
11960
|
+
bytes = new Uint8Array(rawData);
|
|
11961
|
+
}
|
|
11962
|
+
else {
|
|
11963
|
+
bytes = rawData;
|
|
11964
|
+
}
|
|
11965
|
+
let offset = 0;
|
|
11966
|
+
function readVarint() {
|
|
11967
|
+
let result = 0;
|
|
11968
|
+
let multiplier = 1;
|
|
11969
|
+
while (bytes[offset] >= 128) {
|
|
11970
|
+
result += (bytes[offset] - 128) * multiplier;
|
|
11971
|
+
offset++;
|
|
11972
|
+
multiplier *= 128;
|
|
11973
|
+
}
|
|
11974
|
+
result += bytes[offset] * multiplier;
|
|
11975
|
+
offset++;
|
|
11976
|
+
return result;
|
|
11977
|
+
}
|
|
11978
|
+
function readVarint64() {
|
|
11979
|
+
let result = 0n;
|
|
11980
|
+
let multiplier = 1n;
|
|
11981
|
+
while (bytes[offset] >= 128) {
|
|
11982
|
+
result += BigInt(bytes[offset] - 128) * multiplier;
|
|
11983
|
+
offset++;
|
|
11984
|
+
multiplier *= 128n;
|
|
11985
|
+
}
|
|
11986
|
+
result += BigInt(bytes[offset]) * multiplier;
|
|
11987
|
+
offset++;
|
|
11988
|
+
return result;
|
|
11989
|
+
}
|
|
11990
|
+
function readZigzagInt64() {
|
|
11991
|
+
const unsigned = readVarint64();
|
|
11992
|
+
if (unsigned % 2n === 0n) {
|
|
11993
|
+
return unsigned / 2n;
|
|
11994
|
+
}
|
|
11995
|
+
else {
|
|
11996
|
+
return -(unsigned / 2n) - 1n;
|
|
11997
|
+
}
|
|
11998
|
+
}
|
|
11999
|
+
function readString() {
|
|
12000
|
+
const length = readVarint();
|
|
12001
|
+
const str = new TextDecoder().decode(bytes.slice(offset, offset + length));
|
|
12002
|
+
offset += length;
|
|
12003
|
+
return str;
|
|
12004
|
+
}
|
|
12005
|
+
const RESERVED = 4;
|
|
12006
|
+
const result = {};
|
|
12007
|
+
while (offset < bytes.length) {
|
|
12008
|
+
const fieldIndex = readVarint() - RESERVED;
|
|
12009
|
+
const field = schema[fieldIndex];
|
|
12010
|
+
if (!field)
|
|
12011
|
+
break;
|
|
12012
|
+
switch (field.type) {
|
|
12013
|
+
case 'uint16':
|
|
12014
|
+
result[field.name] = readVarint();
|
|
12015
|
+
break;
|
|
12016
|
+
case 'uint32':
|
|
12017
|
+
result[field.name] = readVarint();
|
|
12018
|
+
break;
|
|
12019
|
+
case 'uint64':
|
|
12020
|
+
result[field.name] = readVarint64();
|
|
12021
|
+
break;
|
|
12022
|
+
case 'int32':
|
|
12023
|
+
result[field.name] = readZigzagInt64();
|
|
12024
|
+
break;
|
|
12025
|
+
case 'int64':
|
|
12026
|
+
result[field.name] = readZigzagInt64();
|
|
12027
|
+
break;
|
|
12028
|
+
case 'string':
|
|
12029
|
+
result[field.name] = readString();
|
|
12030
|
+
break;
|
|
12031
|
+
case 'uint16[]': {
|
|
12032
|
+
const len = readVarint();
|
|
12033
|
+
const arr = [];
|
|
12034
|
+
for (let i = 0; i < len; i++)
|
|
12035
|
+
arr.push(readVarint());
|
|
12036
|
+
result[field.name] = arr;
|
|
12037
|
+
break;
|
|
12038
|
+
}
|
|
12039
|
+
case 'uint64[]': {
|
|
12040
|
+
const len = readVarint();
|
|
12041
|
+
const arr = [];
|
|
12042
|
+
for (let i = 0; i < len; i++)
|
|
12043
|
+
arr.push(readVarint64());
|
|
12044
|
+
result[field.name] = arr;
|
|
12045
|
+
break;
|
|
12046
|
+
}
|
|
12047
|
+
default:
|
|
12048
|
+
throw new Error(`Unknown type: ${field.type}`);
|
|
12049
|
+
}
|
|
12050
|
+
}
|
|
12051
|
+
return result;
|
|
12052
|
+
}
|
|
12053
|
+
|
|
10910
12054
|
var index = /*#__PURE__*/Object.freeze({
|
|
10911
12055
|
__proto__: null,
|
|
10912
12056
|
readCommonBase: readCommonBase,
|
|
@@ -10931,10 +12075,15 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
10931
12075
|
computeLoaderThrust: computeLoaderThrust,
|
|
10932
12076
|
computeCrafterSpeed: computeCrafterSpeed,
|
|
10933
12077
|
computeCrafterDrain: computeCrafterDrain,
|
|
12078
|
+
computeHaulerCapacity: computeHaulerCapacity,
|
|
12079
|
+
computeHaulerEfficiency: computeHaulerEfficiency,
|
|
12080
|
+
computeHaulerDrain: computeHaulerDrain,
|
|
12081
|
+
computeWarpRange: computeWarpRange,
|
|
10934
12082
|
entityDisplayName: entityDisplayName,
|
|
10935
12083
|
moduleDisplayName: moduleDisplayName,
|
|
10936
12084
|
formatModuleLine: formatModuleLine,
|
|
10937
|
-
buildEntityDescription: buildEntityDescription
|
|
12085
|
+
buildEntityDescription: buildEntityDescription,
|
|
12086
|
+
deserializeAtomicData: deserializeAtomicData
|
|
10938
12087
|
});
|
|
10939
12088
|
|
|
10940
12089
|
function formatMass(kg) {
|
|
@@ -10971,5 +12120,5 @@ function describeItem(resolved, opts) {
|
|
|
10971
12120
|
return `${tier} ${resolved.name} · ${mass}`;
|
|
10972
12121
|
}
|
|
10973
12122
|
|
|
10974
|
-
export { ActionsManager, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CANCEL_PAIRED_HAS_PENDING, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND,
|
|
12123
|
+
export { ActionsManager, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CANCEL_PAIRED_HAS_PENDING, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_NOT_FOUND, CONTAINER_Z, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, Container, Coordinates, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityClass, EntityInventory, EntityType, EpochsManager, Extractor, Factory, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FOCUSING_ARRAY, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GENERATOR_T1, ITEM_HAULER_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MATTER_CONDUIT, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_SURVEY_PROBE, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, InventoryAccessor, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE, MODULE_ANY, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STORAGE, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, Nexus, PLANETARY_STRUCTURE_Z, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PLAYER_NOT_JOINED, PRECISION$1 as PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STARTER_ALREADY_CLAIMED, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Ship, Shipload, SubscriptionsManager, TIER_ADJECTIVES, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, Warehouse, WebSocketConnection, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildEntityDescription, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcLoadDuration, calcStacksMass, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capabilityAttributes, capabilityNames, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItem, cargoItemToStack, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryIconShapes, categoryIcons, categoryLabel, categoryLabelFromIndex, componentIcon, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass, computeComponentStats, computeContainerCapabilities, computeContainerT2Capabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityStats, computeExtractorCapabilities, computeFactoryCapabilities, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererSpeed, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerDrain$1 as computeHaulerDrain, computeHaulerEfficiency, computeInputMass, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeShipCapabilities, computeShipHullCapabilities, computeStorageCapabilities, computeWarehouseCapabilities, computeWarehouseHullCapabilities, computeWarpRange, containerTraits, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, encodeGatheredCargoStats, encodeStats, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, extractorTraits, factoryTraits, findItemByCategoryAndTier, findNearbyPlanets, flightSpeedFactor, formatMass, formatMassDelta, formatModuleLine, formatTier, gathererDepthForTier, getCapabilityAttributes, getCategoryInfo, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEntityTraits, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getLocationCandidates, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getRecipe, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, interpolateFlightPosition, isContainer, isCraftedItem, isExtractor, isFactory, isFull$1 as isFull, isFullFromMass, isGatherableLocation, isInvertedAttribute, isLocationBuildable, isModuleItem, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isWarehouse, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, lerp$1 as lerp, makeContainer, makeExtractor, makeFactory, makeNexus, makeShip, makeWarehouse, mapEntity, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, needsRecharge, parseWireEntity, projectEntity, projectEntityAt, projectFromCurrentState, projectFromCurrentStateAt, readCommonBase, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveStats, rollTier, rollWithinTier, rotation, schedule, setSubscriptionsDebug, shipTraits, stackKey, stackToCargoItem, stacksEqual, taskCargoChanges, tierAdjective, tierColors, toLocation, typeLabel, validateSchedule, warehouseTraits };
|
|
10975
12124
|
//# sourceMappingURL=shipload.m.js.map
|