@shipload/sdk 2.0.0-rc13 → 2.0.0-rc14
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 +133 -56
- package/lib/shipload.js +629 -332
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +619 -331
- package/lib/shipload.m.js.map +1 -1
- package/package.json +1 -1
- package/src/capabilities/modules.ts +3 -3
- package/src/capabilities/storage.ts +6 -9
- package/src/contracts/server.ts +37 -34
- package/src/data/colors.ts +19 -1
- package/src/data/recipes.ts +3 -3
- package/src/derivation/crafting.ts +46 -32
- package/src/derivation/stratum.ts +12 -0
- package/src/entities/container.ts +1 -0
- package/src/entities/makers.ts +126 -11
- package/src/entities/ship-deploy.ts +9 -14
- package/src/entities/ship.ts +16 -4
- package/src/entities/warehouse.ts +36 -1
- package/src/index-module.ts +21 -4
- package/src/managers/actions.ts +48 -8
- package/src/nft/description.ts +31 -30
- package/src/nft/deserializers.ts +8 -8
- package/src/resolution/describe-module.ts +165 -0
- package/src/resolution/resolve-item.ts +60 -37
- package/src/scheduling/projection.ts +3 -1
- package/src/types/capabilities.ts +5 -0
package/lib/shipload.js
CHANGED
|
@@ -213,7 +213,7 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
213
213
|
Contract: Contract$1
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNglodWxsX3NlZWQGdWludDY0DG1vZHVsZV9pdGVtcwh1aW50MTZbXQxtb2R1bGVfc2VlZHMIdWludDY0W10GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAFEndhcmVob3VzZV9jYXBhY2l0eQZ1aW50MzILd2FyZWhvdXNlX3oGdWludDE2EmNvbnRhaW5lcl9odWxsbWFzcwZ1aW50MzISY29udGFpbmVyX2NhcGFjaXR5BnVpbnQzMgtjb250YWluZXJfegZ1aW50MTYLZW50aXR5X2luZm8AGAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10LZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACGdldGl0ZW1zAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OAxnZXRyZXNvdXJjZXMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OA9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAwxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoBHNpemUGdWludDE2DmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwACBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAxsb2NhdGlvbl9yb3cABgJpZAZ1aW50NjQFb3duZXIEbmFtZQtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQhzY2hlZHVsZQlzY2hlZHVsZT8PbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkC2NhcmdvX3NlZWQ/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwluZXh1c19yb3cABAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwZlbmVyZ3kHdWludDE2PwljYXJnb21hc3MGdWludDMyB2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/B2xvYWRlcnMNbG9hZGVyX3N0YXRzPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/CnNwYXduY2FyZ28AAwllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAtzcGF3bnBhY2tlZAAECWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYJaHVsbF9zZWVkBnVpbnQ2NAlpbnN0YWxsZWQMY2FyZ29fc2VlZFtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQEc2VlZAZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABgtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBnRyYXZlbAAFC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwADAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwljYXJnb21hc3MGdWludDMyB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwR3YXJwAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADHdpcGVzZXF1ZW5jZQAABHdyYXAABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0NAAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAQKFpdjIHYWR2YW5jZdMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkdmFuY2UKc3VtbWFyeTogJ0FkdmFuY2UgdHVybicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWR2YW5jZSB0aGUgZ2FtZSB0byB0aGUgbmV4dCB0dXJuLgAAAACANFU8BWJsZW5k/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBhIG5ldyBibGVuZGVkIHNlZWQuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0efwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzZWVkLCBhbmQgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIG1vZHVsZSBpdGVtIGlkcyBhbmQgc2VlZHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZGlzcGxheSBwYWNrZWQgZW50aXRpZXMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YdwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AAFZRJyqzYgpnZXRtb2R1bGVztAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAABd0+U1s2IKZ2V0bmZ0aW5mb6QELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AALjKm1izYglnZXRwbGF5ZXL9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwbGF5ZXIKc3VtbWFyeTogJ0dldCBwbGF5ZXIgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwbGF5ZXIgaW5jbHVkaW5nIGJhbGFuY2UsIGRlYnQsIG5ldHdvcnRoLCBlbnRpdHkgY291bnRzLCBhbmQgcHJpY2luZyBmb3IgbmV4dCBwdXJjaGFzZXMuIFJldHVybnMgaXNfcGxheWVyPWZhbHNlIGlmIHRoZSBhY2NvdW50IGhhcyBub3Qgam9pbmVkIHRoZSBnYW1lLgAAUNUhdbNiCWdldHJlY2lwZdoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAABW1SF1s2IKZ2V0cmVjaXBlc+ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4AAABA7UixugdyZXNvbHZl0AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVzb2x2ZQpzdW1tYXJ5OiAnQ29tcGxldGUgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXNvbHZlIGNvbXBsZXRlZCB0YXNrcyBpbiBhbiBlbnRpdHkncyBzY2hlZHVsZSwgYXBwbHlpbmcgdGhlaXIgZWZmZWN0cyAocmVjaGFyZ2UgZW5lcmd5LCB1cGRhdGUgbG9jYXRpb24sIGxvYWQvdW5sb2FkIGNhcmdvKS4gSWYgY291bnQgaXMgc3BlY2lmaWVkLCByZXNvbHZlIGV4YWN0bHkgdGhhdCBtYW55IHRhc2tzOyBvdGhlcndpc2UgcmVzb2x2ZSBhbGwgY29tcGxldGVkIHRhc2tzLiBGYWlscyBpZiBjb3VudCBleGNlZWRzIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRhc2tzLgAAACrqRKW8CHJtbW9kdWxlvAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1tb2R1bGUKc3VtbWFyeTogJ1JlbW92ZSBhIG1vZHVsZSBmcm9tIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIGFuIGluc3RhbGxlZCBtb2R1bGUgZnJvbSBhIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIGlzIHJldHVybmVkIHRvIGNhcmdvLiBGYWlscyBpZiB0aGUgZW50aXR5IGRvZXMgbm90IGhhdmUgZW5vdWdoIGNhcmdvIGNhcGFjaXR5IHRvIGhvbGQgdGhlIHJldHVybmVkIG1vZHVsZS4AAABsobymvAhybW5mdGNmZ6EDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbmZ0Y2ZnCnN1bW1hcnk6ICdSZW1vdmUgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSB0aGUgQXRvbWljQXNzZXRzIHRlbXBsYXRlIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBpZCBmcm9tIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gQWZ0ZXIgcmVtb3ZhbCB0aGUgaXRlbSBjYW4gbm8gbG9uZ2VyIGJlIHdyYXBwZWQgb3IgdW53cmFwcGVkIHVudGlsIGEgbmV3IG1hcHBpbmcgaXMgc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAACQo8EEc2FsdNgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNhbHQKc3VtbWFyeTogJ0FwcGVuZCBTYWx0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZGQgYWRkaXRpb25hbCBzYWx0IHRvIHRoZSBuZXh0IGVwb2NoIHNlZWQuAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4NAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAC4ajqTJ0UDaTY0AAANY29udGFpbmVyX3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAAJO6bBCNA2k2NAAADGxvY2F0aW9uX3JvdwAAAAAArLuaA2k2NAAACW5leHVzX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAAArKrPA2k2NAAACXR5cGVzX3JvdwAAUFjTpq7hA2k2NAAADXdhcmVob3VzZV9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAHgAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8ATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAABYquyyYgppdGVtc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHSAFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHM=');
|
|
216
|
+
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C2VudGl0eV9uYW1lBnN0cmluZwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDE2CHJlY2hhcmdlBnVpbnQxNhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MTYPZW50aXR5X2RlZmF1bHRzAAUSd2FyZWhvdXNlX2NhcGFjaXR5BnVpbnQzMgt3YXJlaG91c2VfegZ1aW50MTYSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAYBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdBmdhdGhlcgAEBnNvdXJjZQplbnRpdHlfcmVmC2Rlc3RpbmF0aW9uCmVudGl0eV9yZWYHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyDmdhdGhlcmVyX3N0YXRzAAQFeWllbGQGdWludDE2BWRyYWluBnVpbnQxNgVkZXB0aAZ1aW50MTYFc3BlZWQGdWludDE2CWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAAhnZXRpdGVtcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQKZ2V0bW9kdWxlcwAACWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUJZ2V0cmVjaXBlAAEOb3V0cHV0X2l0ZW1faWQGdWludDE2CmdldHJlY2lwZXMAAgtsb3dlcl9ib3VuZAZ1aW50MTYFbGltaXQFdWludDgMZ2V0cmVzb3VyY2VzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMAAwhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MTYEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYABQJpZAZ1aW50MTYEbWFzcwZ1aW50MzIEdHlwZQV1aW50OAdzdWJ0eXBlBXVpbnQ4BHRpZXIFdWludDgPaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwpzcGF3bmNhcmdvAAMJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQLc3Bhd25wYWNrZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDE2Cmh1bGxfc3RhdHMGdWludDY0CWluc3RhbGxlZA9wYWNrZWRfbW9kdWxlW10Lc3Bhd25zZWVkZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnDXdhcmVob3VzZV9yb3cACwJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/CWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycw1sb2FkZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/BHdhcnAABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAAMd2lwZXNlcXVlbmNlAAAEd3JhcAAFBW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CGNhcmdvX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQ0AABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHn9Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAAAAAKh4zFQGZW5hYmxl3QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgCwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLgBMNkmq7LJiC2dldGl0ZW1kYXRh3AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgAAVlEnKrNiCmdldG1vZHVsZXO0Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R1bGVzCnN1bW1hcnk6ICdHZXQgYWxsIG1vZHVsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIG1vZHVsZXMsIGluY2x1ZGluZyBlYWNoIG1vZHVsZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgaW5zdGFsbGFibGUgZXF1aXBtZW50LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZvpAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuAABQ1SF1s2IJZ2V0cmVjaXBl2gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlCnN1bW1hcnk6ICdHZXQgYSBzaW5nbGUgY3JhZnRpbmcgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcmVjaXBlIHdob3NlIG91dHB1dCBtYXRjaGVzIHRoZSBnaXZlbiBpdGVtIGlkLCBpbmNsdWRpbmcgaXRzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRpc3BsYXkgY3JhZnRpbmcgcmVxdWlyZW1lbnRzLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAFbVIXWzYgpnZXRyZWNpcGVz4AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS6AFbqaYnWzYgxnZXRyZXNvdXJjZXO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaPgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAABAhNKwaQdoYXNoNTEy+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaDUxMgpzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTUxMiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGE1MTIgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAAAAkN10BGluaXT6AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBpbml0CnN1bW1hcnk6ICdJbml0aWFsaXplIGdhbWUgc2VlZCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhbGl6ZSBhIHRoZSBnYW1lcyBzZWVkIGFuZCBzZWVkIHZhbHVlcyB0byBib290c3RyYXAgZ2FtZSBzdGF0ZS4AAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLgAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAAJCjwQRzYWx02AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4AAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABl16DJTcUKc3Bhd25jYXJnb8UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduY2FyZ28Kc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkoLI1MlNxQtzcGF3bnBhY2tlZOcBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXducGFja2VkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gYSBwYWNrZWQgZW50aXR5IHdpdGggaW5zdGFsbGVkIG1vZHVsZXMgb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJJKSuHJTcULc3Bhd25zZWVkZWTNAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnNlZWRlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIHNlZWRlZCBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAABXLTzNzQh0cmFuc2ZlcsgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYW5zZmVyCnN1bW1hcnk6ICdUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIGVudGl0aWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIHR3byBlbnRpdGllcyBhdCB0aGUgc2FtZSBsb2NhdGlvbi4gQm90aCBlbnRpdGllcyBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGF0IGxlYXN0IG9uZSBtdXN0IGhhdmUgbG9hZGVycy4gQ3JlYXRlcyBsb2FkIGFuZCB1bmxvYWQgdGFza3Mgb24gYm90aCBlbnRpdGllcyB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIGNvbWJpbmVkIGxvYWRlciBjYXBhY2l0eSBhbmQgWi1kaXN0YW5jZSBiZXR3ZWVuIHRoZW0uAAAAAES1zc0GdHJhdmVs+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIGEgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgdHJhdmVsIG9mIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGEgbmV3IGRlc3RpbmF0aW9uLgAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0toNBU2iqsquMMd2lwZXNlcXVlbmNlwgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZXNlcXVlbmNlCnN1bW1hcnk6ICdERUJVRzogd2lwZXNlcXVlbmNlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAUM3lBHdyYXD+Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3cmFwCnN1bW1hcnk6ICdXcmFwIGNhcmdvIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpXcmFwIGEgcXVhbnRpdHkgb2YgY2FyZ28gZnJvbSBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byB0aGUgc3BlY2lmaWVkIG93bmVyLiBUaGUgZW50aXR5IG11c3QgYmUgYXQgYSBuZXh1cywgaGF2ZSBsb2FkZXJzLCBhbmQgY29udGFpbiBlbm91Z2ggb2YgdGhlIHJlcXVlc3RlZCBjYXJnby4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIHJlbW92ZXMgdGhlIGNhcmdvIGZyb20gdGhlIGVudGl0eSBhbmQgbWludHMgdGhlIE5GVCB1c2luZyB0aGUgdGVtcGxhdGUgY29uZmlndXJlZCBmb3IgdGhhdCBpdGVtIGlkLg0AAAAAAMquQQNpNjQAAAljYXJnb19yb3cAALhqOpMnRQNpNjQAAA1jb250YWluZXJfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AAAAk7psEI0DaTY0AAAMbG9jYXRpb25fcm93AAAAAACsu5oDaTY0AAAJbmV4dXNfcm93AABgbk2K8poDaTY0AAANbmZ0Y29uZmlnX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAeAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAgM8uT4WwSgZzdHJpbmcAAAAAXNWyYQx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdIAVuppidbNiEHJlc291cmNlc19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
|
|
217
217
|
const abi = antelope.ABI.from(abiBlob);
|
|
218
218
|
var Types;
|
|
219
219
|
(function (Types) {
|
|
@@ -265,25 +265,25 @@ var Types;
|
|
|
265
265
|
antelope.Struct.type('advance')
|
|
266
266
|
], advance);
|
|
267
267
|
Types.advance = advance;
|
|
268
|
-
let
|
|
268
|
+
let packed_module = class packed_module extends antelope.Struct {
|
|
269
269
|
};
|
|
270
270
|
tslib.__decorate([
|
|
271
271
|
antelope.Struct.field(antelope.UInt16)
|
|
272
|
-
],
|
|
272
|
+
], packed_module.prototype, "item_id", void 0);
|
|
273
273
|
tslib.__decorate([
|
|
274
274
|
antelope.Struct.field(antelope.UInt64)
|
|
275
|
-
],
|
|
276
|
-
|
|
277
|
-
antelope.Struct.type('
|
|
278
|
-
],
|
|
279
|
-
Types.
|
|
275
|
+
], packed_module.prototype, "stats", void 0);
|
|
276
|
+
packed_module = tslib.__decorate([
|
|
277
|
+
antelope.Struct.type('packed_module')
|
|
278
|
+
], packed_module);
|
|
279
|
+
Types.packed_module = packed_module;
|
|
280
280
|
let module_entry = class module_entry extends antelope.Struct {
|
|
281
281
|
};
|
|
282
282
|
tslib.__decorate([
|
|
283
283
|
antelope.Struct.field(antelope.UInt8)
|
|
284
284
|
], module_entry.prototype, "type", void 0);
|
|
285
285
|
tslib.__decorate([
|
|
286
|
-
antelope.Struct.field(
|
|
286
|
+
antelope.Struct.field(packed_module, { optional: true })
|
|
287
287
|
], module_entry.prototype, "installed", void 0);
|
|
288
288
|
module_entry = tslib.__decorate([
|
|
289
289
|
antelope.Struct.type('module_entry')
|
|
@@ -298,8 +298,8 @@ var Types;
|
|
|
298
298
|
antelope.Struct.field(antelope.UInt32)
|
|
299
299
|
], cargo_item.prototype, "quantity", void 0);
|
|
300
300
|
tslib.__decorate([
|
|
301
|
-
antelope.Struct.field(antelope.UInt64
|
|
302
|
-
], cargo_item.prototype, "
|
|
301
|
+
antelope.Struct.field(antelope.UInt64)
|
|
302
|
+
], cargo_item.prototype, "stats", void 0);
|
|
303
303
|
tslib.__decorate([
|
|
304
304
|
antelope.Struct.field(module_entry, { array: true })
|
|
305
305
|
], cargo_item.prototype, "modules", void 0);
|
|
@@ -389,7 +389,7 @@ var Types;
|
|
|
389
389
|
], cargo_row.prototype, "quantity", void 0);
|
|
390
390
|
tslib.__decorate([
|
|
391
391
|
antelope.Struct.field(antelope.UInt64)
|
|
392
|
-
], cargo_row.prototype, "
|
|
392
|
+
], cargo_row.prototype, "stats", void 0);
|
|
393
393
|
tslib.__decorate([
|
|
394
394
|
antelope.Struct.field(module_entry, { array: true })
|
|
395
395
|
], cargo_row.prototype, "modules", void 0);
|
|
@@ -653,7 +653,7 @@ var Types;
|
|
|
653
653
|
], deploy.prototype, "packed_item_id", void 0);
|
|
654
654
|
tslib.__decorate([
|
|
655
655
|
antelope.Struct.field(antelope.UInt64)
|
|
656
|
-
], deploy.prototype, "
|
|
656
|
+
], deploy.prototype, "stats", void 0);
|
|
657
657
|
tslib.__decorate([
|
|
658
658
|
antelope.Struct.field('string')
|
|
659
659
|
], deploy.prototype, "entity_name", void 0);
|
|
@@ -668,13 +668,13 @@ var Types;
|
|
|
668
668
|
], descentity.prototype, "item_id", void 0);
|
|
669
669
|
tslib.__decorate([
|
|
670
670
|
antelope.Struct.field(antelope.UInt64)
|
|
671
|
-
], descentity.prototype, "
|
|
671
|
+
], descentity.prototype, "hull_stats", void 0);
|
|
672
672
|
tslib.__decorate([
|
|
673
673
|
antelope.Struct.field(antelope.UInt16, { array: true })
|
|
674
674
|
], descentity.prototype, "module_items", void 0);
|
|
675
675
|
tslib.__decorate([
|
|
676
676
|
antelope.Struct.field(antelope.UInt64, { array: true })
|
|
677
|
-
], descentity.prototype, "
|
|
677
|
+
], descentity.prototype, "module_stats", void 0);
|
|
678
678
|
descentity = tslib.__decorate([
|
|
679
679
|
antelope.Struct.type('descentity')
|
|
680
680
|
], descentity);
|
|
@@ -922,11 +922,11 @@ var Types;
|
|
|
922
922
|
let gather = class gather extends antelope.Struct {
|
|
923
923
|
};
|
|
924
924
|
tslib.__decorate([
|
|
925
|
-
antelope.Struct.field(
|
|
926
|
-
], gather.prototype, "
|
|
925
|
+
antelope.Struct.field(entity_ref)
|
|
926
|
+
], gather.prototype, "source", void 0);
|
|
927
927
|
tslib.__decorate([
|
|
928
|
-
antelope.Struct.field(
|
|
929
|
-
], gather.prototype, "
|
|
928
|
+
antelope.Struct.field(entity_ref)
|
|
929
|
+
], gather.prototype, "destination", void 0);
|
|
930
930
|
tslib.__decorate([
|
|
931
931
|
antelope.Struct.field(antelope.UInt16)
|
|
932
932
|
], gather.prototype, "stratum", void 0);
|
|
@@ -1742,7 +1742,7 @@ var Types;
|
|
|
1742
1742
|
], ship_row.prototype, "name", void 0);
|
|
1743
1743
|
tslib.__decorate([
|
|
1744
1744
|
antelope.Struct.field(antelope.UInt64)
|
|
1745
|
-
], ship_row.prototype, "
|
|
1745
|
+
], ship_row.prototype, "stats", void 0);
|
|
1746
1746
|
tslib.__decorate([
|
|
1747
1747
|
antelope.Struct.field(coordinates)
|
|
1748
1748
|
], ship_row.prototype, "coordinates", void 0);
|
|
@@ -1814,9 +1814,9 @@ var Types;
|
|
|
1814
1814
|
], spawnpacked.prototype, "item_id", void 0);
|
|
1815
1815
|
tslib.__decorate([
|
|
1816
1816
|
antelope.Struct.field(antelope.UInt64)
|
|
1817
|
-
], spawnpacked.prototype, "
|
|
1817
|
+
], spawnpacked.prototype, "hull_stats", void 0);
|
|
1818
1818
|
tslib.__decorate([
|
|
1819
|
-
antelope.Struct.field(
|
|
1819
|
+
antelope.Struct.field(packed_module, { array: true })
|
|
1820
1820
|
], spawnpacked.prototype, "installed", void 0);
|
|
1821
1821
|
spawnpacked = tslib.__decorate([
|
|
1822
1822
|
antelope.Struct.type('spawnpacked')
|
|
@@ -1835,7 +1835,7 @@ var Types;
|
|
|
1835
1835
|
], spawnseeded.prototype, "quantity", void 0);
|
|
1836
1836
|
tslib.__decorate([
|
|
1837
1837
|
antelope.Struct.field(antelope.UInt64)
|
|
1838
|
-
], spawnseeded.prototype, "
|
|
1838
|
+
], spawnseeded.prototype, "stats", void 0);
|
|
1839
1839
|
spawnseeded = tslib.__decorate([
|
|
1840
1840
|
antelope.Struct.type('spawnseeded')
|
|
1841
1841
|
], spawnseeded);
|
|
@@ -1920,6 +1920,9 @@ var Types;
|
|
|
1920
1920
|
tslib.__decorate([
|
|
1921
1921
|
antelope.Struct.field(antelope.UInt16)
|
|
1922
1922
|
], transfer.prototype, "item_id", void 0);
|
|
1923
|
+
tslib.__decorate([
|
|
1924
|
+
antelope.Struct.field(antelope.UInt64)
|
|
1925
|
+
], transfer.prototype, "stats", void 0);
|
|
1923
1926
|
tslib.__decorate([
|
|
1924
1927
|
antelope.Struct.field(antelope.UInt32)
|
|
1925
1928
|
], transfer.prototype, "quantity", void 0);
|
|
@@ -1976,7 +1979,7 @@ var Types;
|
|
|
1976
1979
|
], warehouse_row.prototype, "name", void 0);
|
|
1977
1980
|
tslib.__decorate([
|
|
1978
1981
|
antelope.Struct.field(antelope.UInt64)
|
|
1979
|
-
], warehouse_row.prototype, "
|
|
1982
|
+
], warehouse_row.prototype, "stats", void 0);
|
|
1980
1983
|
tslib.__decorate([
|
|
1981
1984
|
antelope.Struct.field(coordinates)
|
|
1982
1985
|
], warehouse_row.prototype, "coordinates", void 0);
|
|
@@ -5357,13 +5360,13 @@ const moduleRecipes = [
|
|
|
5357
5360
|
{ itemId: ITEM_FOCUSING_ARRAY, quantity: 3 },
|
|
5358
5361
|
],
|
|
5359
5362
|
stats: [
|
|
5360
|
-
{ key: '
|
|
5363
|
+
{ key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
|
|
5361
5364
|
{
|
|
5362
|
-
key: '
|
|
5365
|
+
key: 'conductivity',
|
|
5363
5366
|
sourceComponentId: ITEM_FOCUSING_ARRAY,
|
|
5364
5367
|
sourceStatKey: 'conductivity',
|
|
5365
5368
|
},
|
|
5366
|
-
{ key: '
|
|
5369
|
+
{ key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
|
|
5367
5370
|
{ key: 'ductility', sourceComponentId: ITEM_FOCUSING_ARRAY, sourceStatKey: 'ductility' },
|
|
5368
5371
|
],
|
|
5369
5372
|
},
|
|
@@ -5676,40 +5679,40 @@ function deriveResourceStats(seed) {
|
|
|
5676
5679
|
}
|
|
5677
5680
|
|
|
5678
5681
|
function encodeStats(values) {
|
|
5679
|
-
let
|
|
5682
|
+
let stats = 0n;
|
|
5680
5683
|
for (let i = 0; i < values.length && i < 6; i++) {
|
|
5681
|
-
|
|
5684
|
+
stats |= BigInt(values[i] & 0x3ff) << BigInt(i * 10);
|
|
5682
5685
|
}
|
|
5683
|
-
return
|
|
5686
|
+
return stats;
|
|
5684
5687
|
}
|
|
5685
|
-
function decodeStat(
|
|
5686
|
-
return Number((
|
|
5688
|
+
function decodeStat(stats, index) {
|
|
5689
|
+
return Number((stats >> BigInt(index * 10)) & 0x3ffn);
|
|
5687
5690
|
}
|
|
5688
|
-
function decodeStats(
|
|
5689
|
-
const
|
|
5691
|
+
function decodeStats(stats, count) {
|
|
5692
|
+
const result = [];
|
|
5690
5693
|
for (let i = 0; i < count; i++) {
|
|
5691
|
-
|
|
5694
|
+
result.push(decodeStat(stats, i));
|
|
5692
5695
|
}
|
|
5693
|
-
return
|
|
5696
|
+
return result;
|
|
5694
5697
|
}
|
|
5695
|
-
function mapStatsToKeys(
|
|
5696
|
-
const values = decodeStats(
|
|
5698
|
+
function mapStatsToKeys(stats, statDefs) {
|
|
5699
|
+
const values = decodeStats(stats, statDefs.length);
|
|
5697
5700
|
const result = {};
|
|
5698
5701
|
for (let i = 0; i < statDefs.length; i++) {
|
|
5699
5702
|
result[statDefs[i].key] = values[i];
|
|
5700
5703
|
}
|
|
5701
5704
|
return result;
|
|
5702
5705
|
}
|
|
5703
|
-
function decodeCraftedItemStats(itemId,
|
|
5706
|
+
function decodeCraftedItemStats(itemId, stats) {
|
|
5704
5707
|
const comp = getComponentById(itemId);
|
|
5705
5708
|
if (comp)
|
|
5706
|
-
return mapStatsToKeys(
|
|
5709
|
+
return mapStatsToKeys(stats, comp.stats);
|
|
5707
5710
|
const entityRecipe = entityRecipes.find((r) => r.packedItemId === itemId);
|
|
5708
5711
|
if (entityRecipe)
|
|
5709
|
-
return mapStatsToKeys(
|
|
5712
|
+
return mapStatsToKeys(stats, entityRecipe.stats);
|
|
5710
5713
|
const moduleRecipe = moduleRecipes.find((r) => r.itemId === itemId);
|
|
5711
5714
|
if (moduleRecipe)
|
|
5712
|
-
return mapStatsToKeys(
|
|
5715
|
+
return mapStatsToKeys(stats, moduleRecipe.stats);
|
|
5713
5716
|
return {};
|
|
5714
5717
|
}
|
|
5715
5718
|
function blendStacks(stacks, statKey) {
|
|
@@ -5762,12 +5765,12 @@ function computeEntityStats(entityRecipeId, componentStacks) {
|
|
|
5762
5765
|
return { key: stat.key, value: Math.max(1, Math.min(999, value)) };
|
|
5763
5766
|
});
|
|
5764
5767
|
}
|
|
5765
|
-
function decodeStackStats(itemId,
|
|
5768
|
+
function decodeStackStats(itemId, stats) {
|
|
5766
5769
|
if (itemId >= 10000) {
|
|
5767
|
-
return decodeCraftedItemStats(itemId, BigInt(
|
|
5770
|
+
return decodeCraftedItemStats(itemId, BigInt(stats.toString()));
|
|
5768
5771
|
}
|
|
5769
|
-
const
|
|
5770
|
-
return { stat1:
|
|
5772
|
+
const s = BigInt(stats.toString());
|
|
5773
|
+
return { stat1: decodeStat(s, 0), stat2: decodeStat(s, 1), stat3: decodeStat(s, 2) };
|
|
5771
5774
|
}
|
|
5772
5775
|
const categoryItemMass = {
|
|
5773
5776
|
metal: 30000,
|
|
@@ -5821,25 +5824,24 @@ function blendCrossGroup(sources) {
|
|
|
5821
5824
|
function blendCargoStacks(itemId, stacks) {
|
|
5822
5825
|
const decoded = stacks.map((s) => ({
|
|
5823
5826
|
quantity: s.quantity,
|
|
5824
|
-
stats: decodeStackStats(itemId, s.
|
|
5827
|
+
stats: decodeStackStats(itemId, s.stats),
|
|
5825
5828
|
}));
|
|
5826
5829
|
const allKeys = Object.keys(decoded[0]?.stats ?? {});
|
|
5827
5830
|
const blended = allKeys.map((key) => Math.max(1, Math.min(999, blendStacks(decoded, key))));
|
|
5828
5831
|
return antelope.UInt64.from(encodeStats(blended));
|
|
5829
5832
|
}
|
|
5830
|
-
function decodeRawStackToCategoryStats(
|
|
5831
|
-
const raw = deriveResourceStats(seed);
|
|
5833
|
+
function decodeRawStackToCategoryStats(stats, category) {
|
|
5832
5834
|
const defs = getStatDefinitions(category);
|
|
5833
5835
|
const result = {};
|
|
5834
5836
|
if (defs[0])
|
|
5835
|
-
result[defs[0].key] =
|
|
5837
|
+
result[defs[0].key] = decodeStat(stats, 0);
|
|
5836
5838
|
if (defs[1])
|
|
5837
|
-
result[defs[1].key] =
|
|
5839
|
+
result[defs[1].key] = decodeStat(stats, 1);
|
|
5838
5840
|
if (defs[2])
|
|
5839
|
-
result[defs[2].key] =
|
|
5841
|
+
result[defs[2].key] = decodeStat(stats, 2);
|
|
5840
5842
|
return result;
|
|
5841
5843
|
}
|
|
5842
|
-
function
|
|
5844
|
+
function computeCraftedOutputStats(outputItemId, slotInputs) {
|
|
5843
5845
|
var _a;
|
|
5844
5846
|
const component = getComponentById(outputItemId);
|
|
5845
5847
|
if (component) {
|
|
@@ -5851,8 +5853,8 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5851
5853
|
const stacks = slot.stacks.map((s) => ({
|
|
5852
5854
|
quantity: s.quantity,
|
|
5853
5855
|
stats: slotIsComponent
|
|
5854
|
-
? decodeCraftedItemStats(slot.itemId, s.
|
|
5855
|
-
: decodeRawStackToCategoryStats(s.
|
|
5856
|
+
? decodeCraftedItemStats(slot.itemId, s.stats)
|
|
5857
|
+
: decodeRawStackToCategoryStats(s.stats, slot.category),
|
|
5856
5858
|
}));
|
|
5857
5859
|
categoryStacks.push({ category: slot.category, stacks });
|
|
5858
5860
|
}
|
|
@@ -5874,7 +5876,7 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5874
5876
|
for (const s of slot.stacks) {
|
|
5875
5877
|
list.push({
|
|
5876
5878
|
quantity: s.quantity,
|
|
5877
|
-
stats: decodeCraftedItemStats(slot.itemId, s.
|
|
5879
|
+
stats: decodeCraftedItemStats(slot.itemId, s.stats),
|
|
5878
5880
|
});
|
|
5879
5881
|
}
|
|
5880
5882
|
}
|
|
@@ -5885,7 +5887,11 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5885
5887
|
});
|
|
5886
5888
|
return antelope.UInt64.from(encodeStats(ordered));
|
|
5887
5889
|
}
|
|
5888
|
-
throw new Error(`
|
|
5890
|
+
throw new Error(`computeCraftedOutputStats: no recipe found for outputItemId=${outputItemId}`);
|
|
5891
|
+
}
|
|
5892
|
+
function encodeGatheredCargoStats(depositSeed) {
|
|
5893
|
+
const raw = deriveResourceStats(depositSeed);
|
|
5894
|
+
return antelope.UInt64.from(encodeStats([raw.stat1, raw.stat2, raw.stat3]));
|
|
5889
5895
|
}
|
|
5890
5896
|
|
|
5891
5897
|
const itemsById = new Map();
|
|
@@ -6259,6 +6265,9 @@ function capsHasGatherer(caps) {
|
|
|
6259
6265
|
function capsHasMass(caps) {
|
|
6260
6266
|
return caps.hullmass !== undefined;
|
|
6261
6267
|
}
|
|
6268
|
+
function capsHasHauler(caps) {
|
|
6269
|
+
return caps.hauler !== undefined;
|
|
6270
|
+
}
|
|
6262
6271
|
|
|
6263
6272
|
function calcCargoItemMass(item) {
|
|
6264
6273
|
const itemDef = getItem(item.item_id);
|
|
@@ -6313,7 +6322,7 @@ function cargoItemToStack(item) {
|
|
|
6313
6322
|
return {
|
|
6314
6323
|
item_id: antelope.UInt16.from(item.item_id),
|
|
6315
6324
|
quantity: antelope.UInt32.from(item.quantity),
|
|
6316
|
-
|
|
6325
|
+
stats: item.stats,
|
|
6317
6326
|
modules: item.modules ?? [],
|
|
6318
6327
|
};
|
|
6319
6328
|
}
|
|
@@ -6321,23 +6330,18 @@ function stackToCargoItem(stack) {
|
|
|
6321
6330
|
return Types.cargo_item.from({
|
|
6322
6331
|
item_id: stack.item_id,
|
|
6323
6332
|
quantity: stack.quantity,
|
|
6324
|
-
|
|
6333
|
+
stats: stack.stats,
|
|
6325
6334
|
modules: stack.modules,
|
|
6326
6335
|
});
|
|
6327
6336
|
}
|
|
6328
|
-
function
|
|
6329
|
-
if (!a && !b)
|
|
6330
|
-
return true;
|
|
6331
|
-
if (!a || !b)
|
|
6332
|
-
return false;
|
|
6337
|
+
function statsEquals(a, b) {
|
|
6333
6338
|
return a.equals(b);
|
|
6334
6339
|
}
|
|
6335
6340
|
function stackIdentityEqual(a, b) {
|
|
6336
|
-
return a.item_id.equals(b.item_id) &&
|
|
6341
|
+
return a.item_id.equals(b.item_id) && statsEquals(a.stats, b.stats);
|
|
6337
6342
|
}
|
|
6338
6343
|
function stackKey(s) {
|
|
6339
|
-
|
|
6340
|
-
return `${s.item_id.toNumber()}:${seedVal}`;
|
|
6344
|
+
return `${s.item_id.toNumber()}:${s.stats.toString()}`;
|
|
6341
6345
|
}
|
|
6342
6346
|
function stacksEqual(a, b) {
|
|
6343
6347
|
return stackIdentityEqual(a, b) && a.quantity.equals(b.quantity);
|
|
@@ -6661,7 +6665,9 @@ function applyGatherTask(projected, task, options) {
|
|
|
6661
6665
|
if (!options.complete)
|
|
6662
6666
|
return;
|
|
6663
6667
|
applyEnergyCost(projected, task);
|
|
6664
|
-
|
|
6668
|
+
if (!task.entitytarget) {
|
|
6669
|
+
applyAddCargoTask(projected, task);
|
|
6670
|
+
}
|
|
6665
6671
|
}
|
|
6666
6672
|
function applyCraftTask(projected, task) {
|
|
6667
6673
|
applyEnergyCost(projected, task);
|
|
@@ -6957,9 +6963,19 @@ function needsRecharge(entity) {
|
|
|
6957
6963
|
}
|
|
6958
6964
|
|
|
6959
6965
|
class Ship extends Types.entity_info {
|
|
6966
|
+
constructor() {
|
|
6967
|
+
super(...arguments);
|
|
6968
|
+
this._modules = [];
|
|
6969
|
+
}
|
|
6960
6970
|
get name() {
|
|
6961
6971
|
return this.entity_name;
|
|
6962
6972
|
}
|
|
6973
|
+
get modules() {
|
|
6974
|
+
return this._modules;
|
|
6975
|
+
}
|
|
6976
|
+
setModules(modules) {
|
|
6977
|
+
this._modules = modules;
|
|
6978
|
+
}
|
|
6963
6979
|
get inv() {
|
|
6964
6980
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
6965
6981
|
}
|
|
@@ -7078,10 +7094,188 @@ class Ship extends Types.entity_info {
|
|
|
7078
7094
|
}
|
|
7079
7095
|
}
|
|
7080
7096
|
|
|
7097
|
+
function computeShipHullCapabilities(stats) {
|
|
7098
|
+
const density = stats.density ?? 500;
|
|
7099
|
+
const strength = stats.strength ?? 500;
|
|
7100
|
+
const ductility = stats.ductility ?? 500;
|
|
7101
|
+
const purity = stats.purity ?? 500;
|
|
7102
|
+
const hullmass = 25000 + 75 * density;
|
|
7103
|
+
const statSum = strength + ductility + purity;
|
|
7104
|
+
const exponent = statSum / 2997.0;
|
|
7105
|
+
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
7106
|
+
return { hullmass, capacity };
|
|
7107
|
+
}
|
|
7108
|
+
function computeEngineCapabilities(stats) {
|
|
7109
|
+
const vol = stats.volatility ?? 500;
|
|
7110
|
+
const thm = stats.thermal ?? 500;
|
|
7111
|
+
return {
|
|
7112
|
+
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
7113
|
+
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
7114
|
+
};
|
|
7115
|
+
}
|
|
7116
|
+
function computeGeneratorCapabilities(stats) {
|
|
7117
|
+
const res = stats.resonance ?? 500;
|
|
7118
|
+
const clr = stats.clarity ?? 500;
|
|
7119
|
+
return {
|
|
7120
|
+
capacity: 300 + Math.floor(res / 6),
|
|
7121
|
+
recharge: 1 + Math.floor((clr * 3) / 1000),
|
|
7122
|
+
};
|
|
7123
|
+
}
|
|
7124
|
+
function computeGathererCapabilities(stats) {
|
|
7125
|
+
const str = stats.strength ?? 500;
|
|
7126
|
+
const con = stats.conductivity ?? 500;
|
|
7127
|
+
const ref = stats.reflectivity ?? 500;
|
|
7128
|
+
const tol = stats.tolerance ?? 500;
|
|
7129
|
+
return {
|
|
7130
|
+
yield: 200 + str,
|
|
7131
|
+
drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
|
|
7132
|
+
depth: 200 + Math.floor((tol * 3) / 2),
|
|
7133
|
+
speed: 100 + Math.floor((ref * 4) / 5),
|
|
7134
|
+
};
|
|
7135
|
+
}
|
|
7136
|
+
function computeLoaderCapabilities(stats) {
|
|
7137
|
+
const duc = stats.ductility ?? 500;
|
|
7138
|
+
const pla = stats.plasticity ?? 500;
|
|
7139
|
+
return {
|
|
7140
|
+
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
7141
|
+
thrust: 1 + Math.floor(pla / 500),
|
|
7142
|
+
quantity: 1,
|
|
7143
|
+
};
|
|
7144
|
+
}
|
|
7145
|
+
function computeManufacturingCapabilities(stats) {
|
|
7146
|
+
const rea = stats.reactivity ?? 500;
|
|
7147
|
+
const clr = stats.clarity ?? 500;
|
|
7148
|
+
return {
|
|
7149
|
+
speed: 100 + Math.floor((rea * 4) / 5),
|
|
7150
|
+
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
7151
|
+
};
|
|
7152
|
+
}
|
|
7153
|
+
function computeHaulerCapabilities(stats) {
|
|
7154
|
+
const res = stats.resonance ?? 500;
|
|
7155
|
+
const con = stats.conductivity ?? 500;
|
|
7156
|
+
const clr = stats.clarity ?? 500;
|
|
7157
|
+
return {
|
|
7158
|
+
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
7159
|
+
efficiency: 2000 + con * 6,
|
|
7160
|
+
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
7161
|
+
};
|
|
7162
|
+
}
|
|
7163
|
+
function computeStorageCapabilities(stats, baseCapacity) {
|
|
7164
|
+
const strength = stats.strength ?? 500;
|
|
7165
|
+
const ductility = stats.ductility ?? 500;
|
|
7166
|
+
const purity = stats.purity ?? 500;
|
|
7167
|
+
const statSum = strength + ductility + purity;
|
|
7168
|
+
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
7169
|
+
return { capacityBonus };
|
|
7170
|
+
}
|
|
7171
|
+
function computeWarehouseHullCapabilities(stats) {
|
|
7172
|
+
const density = stats.density ?? 500;
|
|
7173
|
+
const strength = stats.strength ?? 500;
|
|
7174
|
+
const ductility = stats.ductility ?? 500;
|
|
7175
|
+
const purity = stats.purity ?? 500;
|
|
7176
|
+
const hullmass = 25000 + 75 * density;
|
|
7177
|
+
const statSum = strength + ductility + purity;
|
|
7178
|
+
const exponent = statSum / 2997.0;
|
|
7179
|
+
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
7180
|
+
return { hullmass, capacity };
|
|
7181
|
+
}
|
|
7182
|
+
function computeShipCapabilities(modules) {
|
|
7183
|
+
const ship = {};
|
|
7184
|
+
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
7185
|
+
if (engineModules.length > 0) {
|
|
7186
|
+
let totalThrust = 0;
|
|
7187
|
+
let totalDrain = 0;
|
|
7188
|
+
for (const m of engineModules) {
|
|
7189
|
+
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7190
|
+
totalThrust += caps.thrust;
|
|
7191
|
+
totalDrain += caps.drain;
|
|
7192
|
+
}
|
|
7193
|
+
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
7194
|
+
}
|
|
7195
|
+
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
7196
|
+
if (generatorModules.length > 0) {
|
|
7197
|
+
let totalCapacity = 0;
|
|
7198
|
+
let totalRecharge = 0;
|
|
7199
|
+
for (const m of generatorModules) {
|
|
7200
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7201
|
+
totalCapacity += caps.capacity;
|
|
7202
|
+
totalRecharge += caps.recharge;
|
|
7203
|
+
}
|
|
7204
|
+
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
7205
|
+
}
|
|
7206
|
+
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
7207
|
+
if (gathererModules.length > 0) {
|
|
7208
|
+
let totalYield = 0;
|
|
7209
|
+
let totalDrain = 0;
|
|
7210
|
+
let totalDepth = 0;
|
|
7211
|
+
let totalSpeed = 0;
|
|
7212
|
+
for (const m of gathererModules) {
|
|
7213
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7214
|
+
totalYield += caps.yield;
|
|
7215
|
+
totalDrain += caps.drain;
|
|
7216
|
+
totalDepth += caps.depth;
|
|
7217
|
+
totalSpeed += caps.speed;
|
|
7218
|
+
}
|
|
7219
|
+
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
7220
|
+
}
|
|
7221
|
+
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
7222
|
+
if (haulerModules.length > 0) {
|
|
7223
|
+
let totalCapacity = 0;
|
|
7224
|
+
let weightedEffNum = 0;
|
|
7225
|
+
let totalDrain = 0;
|
|
7226
|
+
for (const m of haulerModules) {
|
|
7227
|
+
const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7228
|
+
totalCapacity += caps.capacity;
|
|
7229
|
+
weightedEffNum += caps.efficiency * caps.capacity;
|
|
7230
|
+
totalDrain += caps.drain;
|
|
7231
|
+
}
|
|
7232
|
+
ship.hauler = {
|
|
7233
|
+
capacity: totalCapacity,
|
|
7234
|
+
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
7235
|
+
drain: totalDrain,
|
|
7236
|
+
};
|
|
7237
|
+
}
|
|
7238
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7239
|
+
if (loaderModules.length > 0) {
|
|
7240
|
+
let totalMass = 0;
|
|
7241
|
+
let totalThrust = 0;
|
|
7242
|
+
let totalQuantity = 0;
|
|
7243
|
+
for (const m of loaderModules) {
|
|
7244
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7245
|
+
totalMass += caps.mass;
|
|
7246
|
+
totalThrust += caps.thrust;
|
|
7247
|
+
totalQuantity += caps.quantity;
|
|
7248
|
+
}
|
|
7249
|
+
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7250
|
+
}
|
|
7251
|
+
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
7252
|
+
if (crafterModules.length > 0) {
|
|
7253
|
+
let totalSpeed = 0;
|
|
7254
|
+
let totalDrain = 0;
|
|
7255
|
+
for (const m of crafterModules) {
|
|
7256
|
+
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7257
|
+
totalSpeed += caps.speed;
|
|
7258
|
+
totalDrain += caps.drain;
|
|
7259
|
+
}
|
|
7260
|
+
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
7261
|
+
}
|
|
7262
|
+
return ship;
|
|
7263
|
+
}
|
|
7264
|
+
|
|
7081
7265
|
class Warehouse extends Types.entity_info {
|
|
7266
|
+
constructor() {
|
|
7267
|
+
super(...arguments);
|
|
7268
|
+
this._modules = [];
|
|
7269
|
+
}
|
|
7082
7270
|
get name() {
|
|
7083
7271
|
return this.entity_name;
|
|
7084
7272
|
}
|
|
7273
|
+
get modules() {
|
|
7274
|
+
return this._modules;
|
|
7275
|
+
}
|
|
7276
|
+
setModules(modules) {
|
|
7277
|
+
this._modules = modules;
|
|
7278
|
+
}
|
|
7085
7279
|
get inv() {
|
|
7086
7280
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
7087
7281
|
}
|
|
@@ -7130,6 +7324,23 @@ class Warehouse extends Types.entity_info {
|
|
|
7130
7324
|
return hull.adding(this.totalCargoMass);
|
|
7131
7325
|
}
|
|
7132
7326
|
}
|
|
7327
|
+
function computeWarehouseCapabilities(modules) {
|
|
7328
|
+
const warehouse = {};
|
|
7329
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7330
|
+
if (loaderModules.length > 0) {
|
|
7331
|
+
let totalMass = 0;
|
|
7332
|
+
let totalThrust = 0;
|
|
7333
|
+
let totalQuantity = 0;
|
|
7334
|
+
for (const m of loaderModules) {
|
|
7335
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7336
|
+
totalMass += caps.mass;
|
|
7337
|
+
totalThrust += caps.thrust;
|
|
7338
|
+
totalQuantity += caps.quantity;
|
|
7339
|
+
}
|
|
7340
|
+
warehouse.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7341
|
+
}
|
|
7342
|
+
return warehouse;
|
|
7343
|
+
}
|
|
7133
7344
|
|
|
7134
7345
|
class Container extends Types.entity_info {
|
|
7135
7346
|
get name() {
|
|
@@ -7390,13 +7601,14 @@ class ActionsManager extends BaseManager {
|
|
|
7390
7601
|
id: antelope.UInt64.from(shipId),
|
|
7391
7602
|
});
|
|
7392
7603
|
}
|
|
7393
|
-
transfer(sourceType, sourceId, destType, destId,
|
|
7604
|
+
transfer(sourceType, sourceId, destType, destId, itemId, stats, quantity) {
|
|
7394
7605
|
return this.server.action('transfer', {
|
|
7395
7606
|
source_type: sourceType,
|
|
7396
7607
|
source_id: antelope.UInt64.from(sourceId),
|
|
7397
7608
|
dest_type: destType,
|
|
7398
7609
|
dest_id: antelope.UInt64.from(destId),
|
|
7399
|
-
item_id: antelope.UInt16.from(
|
|
7610
|
+
item_id: antelope.UInt16.from(itemId),
|
|
7611
|
+
stats: antelope.UInt64.from(stats),
|
|
7400
7612
|
quantity: antelope.UInt32.from(quantity),
|
|
7401
7613
|
});
|
|
7402
7614
|
}
|
|
@@ -7411,10 +7623,16 @@ class ActionsManager extends BaseManager {
|
|
|
7411
7623
|
account: antelope.Name.from(account),
|
|
7412
7624
|
});
|
|
7413
7625
|
}
|
|
7414
|
-
gather(
|
|
7626
|
+
gather(source, destination, stratum, quantity) {
|
|
7415
7627
|
return this.server.action('gather', {
|
|
7416
|
-
|
|
7417
|
-
|
|
7628
|
+
source: Types.entity_ref.from({
|
|
7629
|
+
entity_type: source.entityType,
|
|
7630
|
+
entity_id: antelope.UInt64.from(source.entityId),
|
|
7631
|
+
}),
|
|
7632
|
+
destination: Types.entity_ref.from({
|
|
7633
|
+
entity_type: destination.entityType,
|
|
7634
|
+
entity_id: antelope.UInt64.from(destination.entityId),
|
|
7635
|
+
}),
|
|
7418
7636
|
stratum: antelope.UInt16.from(stratum),
|
|
7419
7637
|
quantity: antelope.UInt32.from(quantity),
|
|
7420
7638
|
});
|
|
@@ -7447,12 +7665,12 @@ class ActionsManager extends BaseManager {
|
|
|
7447
7665
|
inputs: cargoInputs,
|
|
7448
7666
|
});
|
|
7449
7667
|
}
|
|
7450
|
-
deploy(entityType, entityId, packedItemId,
|
|
7668
|
+
deploy(entityType, entityId, packedItemId, stats, entityName) {
|
|
7451
7669
|
return this.server.action('deploy', {
|
|
7452
7670
|
entity_type: entityType,
|
|
7453
7671
|
id: antelope.UInt64.from(entityId),
|
|
7454
7672
|
packed_item_id: antelope.UInt16.from(packedItemId),
|
|
7455
|
-
|
|
7673
|
+
stats: antelope.UInt64.from(stats),
|
|
7456
7674
|
entity_name: entityName,
|
|
7457
7675
|
});
|
|
7458
7676
|
}
|
|
@@ -7473,6 +7691,15 @@ class ActionsManager extends BaseManager {
|
|
|
7473
7691
|
target_cargo_id: antelope.UInt64.from(targetCargoId),
|
|
7474
7692
|
});
|
|
7475
7693
|
}
|
|
7694
|
+
wrap(owner, entityType, entityId, cargoId, quantity) {
|
|
7695
|
+
return this.server.action('wrap', {
|
|
7696
|
+
owner: antelope.Name.from(owner),
|
|
7697
|
+
entity_type: entityType,
|
|
7698
|
+
entity_id: antelope.UInt64.from(entityId),
|
|
7699
|
+
cargo_id: antelope.UInt64.from(cargoId),
|
|
7700
|
+
quantity: antelope.UInt64.from(quantity),
|
|
7701
|
+
});
|
|
7702
|
+
}
|
|
7476
7703
|
joinGame(account, companyName) {
|
|
7477
7704
|
return [this.foundCompany(account, companyName), this.join(account)];
|
|
7478
7705
|
}
|
|
@@ -7612,6 +7839,51 @@ class Shipload {
|
|
|
7612
7839
|
}
|
|
7613
7840
|
}
|
|
7614
7841
|
|
|
7842
|
+
function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
|
|
7843
|
+
const slots = getEntitySlotLayout(packedEntityItemId);
|
|
7844
|
+
const result = slots.map((s) => ({ type: s.type, installed: undefined }));
|
|
7845
|
+
for (const mod of modules) {
|
|
7846
|
+
const itemId = Number(antelope.UInt16.from(mod.itemId).value.toString());
|
|
7847
|
+
const modType = getModuleCapabilityType(itemId);
|
|
7848
|
+
const slotIdx = result.findIndex((r) => !r.installed && moduleAccepts(r.type, modType));
|
|
7849
|
+
if (slotIdx === -1) {
|
|
7850
|
+
const recipe = getModuleRecipeByItemId(itemId);
|
|
7851
|
+
const modName = recipe?.name ?? `item ${itemId}`;
|
|
7852
|
+
throw new Error(`No compatible slot for module ${modName} (type ${modType}) on ${entityLabel}`);
|
|
7853
|
+
}
|
|
7854
|
+
result[slotIdx].installed = Types.packed_module.from({
|
|
7855
|
+
item_id: antelope.UInt16.from(mod.itemId),
|
|
7856
|
+
stats: antelope.UInt64.from(mod.stats),
|
|
7857
|
+
});
|
|
7858
|
+
}
|
|
7859
|
+
return result.map((r) => Types.module_entry.from({
|
|
7860
|
+
type: antelope.UInt8.from(r.type),
|
|
7861
|
+
installed: r.installed,
|
|
7862
|
+
}));
|
|
7863
|
+
}
|
|
7864
|
+
function decodePackedInput(m) {
|
|
7865
|
+
return {
|
|
7866
|
+
itemId: Number(antelope.UInt16.from(m.itemId).value.toString()),
|
|
7867
|
+
stats: BigInt(antelope.UInt64.from(m.stats).toString()),
|
|
7868
|
+
};
|
|
7869
|
+
}
|
|
7870
|
+
function computeStorageBonus(decoded, baseCapacity) {
|
|
7871
|
+
let totalBonus = 0;
|
|
7872
|
+
for (const m of decoded) {
|
|
7873
|
+
if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
|
|
7874
|
+
continue;
|
|
7875
|
+
const stats = decodeCraftedItemStats(m.itemId, m.stats);
|
|
7876
|
+
const { capacityBonus } = computeStorageCapabilities(stats, baseCapacity);
|
|
7877
|
+
totalBonus += capacityBonus;
|
|
7878
|
+
}
|
|
7879
|
+
return totalBonus;
|
|
7880
|
+
}
|
|
7881
|
+
function deriveShipFromModules(modules, baseCapacity) {
|
|
7882
|
+
const decoded = modules.map(decodePackedInput);
|
|
7883
|
+
const capabilities = computeShipCapabilities(decoded);
|
|
7884
|
+
const totalBonus = computeStorageBonus(decoded, baseCapacity);
|
|
7885
|
+
return { capabilities, finalCapacity: baseCapacity + totalBonus };
|
|
7886
|
+
}
|
|
7615
7887
|
function makeShip(state) {
|
|
7616
7888
|
const info = {
|
|
7617
7889
|
type: antelope.Name.from('ship'),
|
|
@@ -7628,20 +7900,38 @@ function makeShip(state) {
|
|
|
7628
7900
|
};
|
|
7629
7901
|
if (state.hullmass !== undefined)
|
|
7630
7902
|
info.hullmass = antelope.UInt32.from(state.hullmass);
|
|
7631
|
-
if (state.capacity !== undefined)
|
|
7632
|
-
info.capacity = antelope.UInt32.from(state.capacity);
|
|
7633
7903
|
if (state.energy !== undefined)
|
|
7634
7904
|
info.energy = antelope.UInt16.from(state.energy);
|
|
7635
|
-
if (state.engines)
|
|
7636
|
-
info.engines = state.engines;
|
|
7637
|
-
if (state.generator)
|
|
7638
|
-
info.generator = state.generator;
|
|
7639
|
-
if (state.loaders)
|
|
7640
|
-
info.loaders = state.loaders;
|
|
7641
7905
|
if (state.schedule)
|
|
7642
7906
|
info.schedule = state.schedule;
|
|
7907
|
+
let moduleEntries = [];
|
|
7908
|
+
if (state.modules && state.modules.length > 0) {
|
|
7909
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
|
|
7910
|
+
const { capabilities, finalCapacity } = deriveShipFromModules(state.modules, state.capacity ?? 0);
|
|
7911
|
+
if (capabilities.engines)
|
|
7912
|
+
info.engines = capabilities.engines;
|
|
7913
|
+
if (capabilities.generator)
|
|
7914
|
+
info.generator = capabilities.generator;
|
|
7915
|
+
if (capabilities.gatherer)
|
|
7916
|
+
info.gatherer = capabilities.gatherer;
|
|
7917
|
+
if (capabilities.hauler)
|
|
7918
|
+
info.hauler = capabilities.hauler;
|
|
7919
|
+
if (capabilities.loaders)
|
|
7920
|
+
info.loaders = capabilities.loaders;
|
|
7921
|
+
if (capabilities.crafter)
|
|
7922
|
+
info.crafter = capabilities.crafter;
|
|
7923
|
+
if (state.capacity !== undefined)
|
|
7924
|
+
info.capacity = antelope.UInt32.from(finalCapacity);
|
|
7925
|
+
}
|
|
7926
|
+
else {
|
|
7927
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, [], 'Ship T1');
|
|
7928
|
+
if (state.capacity !== undefined)
|
|
7929
|
+
info.capacity = antelope.UInt32.from(state.capacity);
|
|
7930
|
+
}
|
|
7643
7931
|
const entityInfo = Types.entity_info.from(info);
|
|
7644
|
-
|
|
7932
|
+
const ship = new Ship(entityInfo);
|
|
7933
|
+
ship.setModules(moduleEntries);
|
|
7934
|
+
return ship;
|
|
7645
7935
|
}
|
|
7646
7936
|
function makeWarehouse(state) {
|
|
7647
7937
|
const info = {
|
|
@@ -7660,12 +7950,25 @@ function makeWarehouse(state) {
|
|
|
7660
7950
|
};
|
|
7661
7951
|
if (state.hullmass !== undefined)
|
|
7662
7952
|
info.hullmass = antelope.UInt32.from(state.hullmass);
|
|
7663
|
-
if (state.loaders)
|
|
7664
|
-
info.loaders = state.loaders;
|
|
7665
7953
|
if (state.schedule)
|
|
7666
7954
|
info.schedule = state.schedule;
|
|
7955
|
+
let moduleEntries = [];
|
|
7956
|
+
if (state.modules && state.modules.length > 0) {
|
|
7957
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
|
|
7958
|
+
const decoded = state.modules.map(decodePackedInput);
|
|
7959
|
+
const capabilities = computeWarehouseCapabilities(decoded);
|
|
7960
|
+
if (capabilities.loaders)
|
|
7961
|
+
info.loaders = capabilities.loaders;
|
|
7962
|
+
const totalBonus = computeStorageBonus(decoded, state.capacity);
|
|
7963
|
+
info.capacity = antelope.UInt32.from(state.capacity + totalBonus);
|
|
7964
|
+
}
|
|
7965
|
+
else {
|
|
7966
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, [], 'Warehouse T1');
|
|
7967
|
+
}
|
|
7667
7968
|
const entityInfo = Types.entity_info.from(info);
|
|
7668
|
-
|
|
7969
|
+
const warehouse = new Warehouse(entityInfo);
|
|
7970
|
+
warehouse.setModules(moduleEntries);
|
|
7971
|
+
return warehouse;
|
|
7669
7972
|
}
|
|
7670
7973
|
function makeContainer(state) {
|
|
7671
7974
|
const entityInfo = Types.entity_info.from({
|
|
@@ -7677,7 +7980,7 @@ function makeContainer(state) {
|
|
|
7677
7980
|
hullmass: antelope.UInt32.from(state.hullmass),
|
|
7678
7981
|
capacity: antelope.UInt32.from(state.capacity),
|
|
7679
7982
|
cargomass: antelope.UInt32.from(state.cargomass || 0),
|
|
7680
|
-
cargo: [],
|
|
7983
|
+
cargo: state.cargo || [],
|
|
7681
7984
|
is_idle: !state.schedule,
|
|
7682
7985
|
current_task_elapsed: antelope.UInt32.from(0),
|
|
7683
7986
|
current_task_remaining: antelope.UInt32.from(0),
|
|
@@ -7837,6 +8140,13 @@ const tierColors = {
|
|
|
7837
8140
|
t4: '#c084fc',
|
|
7838
8141
|
t5: '#fbbf24',
|
|
7839
8142
|
};
|
|
8143
|
+
const tierLabels = {
|
|
8144
|
+
t1: 'Common',
|
|
8145
|
+
t2: 'Uncommon',
|
|
8146
|
+
t3: 'Rare',
|
|
8147
|
+
t4: 'Epic',
|
|
8148
|
+
t5: 'Legendary',
|
|
8149
|
+
};
|
|
7840
8150
|
const categoryIcons = {
|
|
7841
8151
|
metal: '⬡',
|
|
7842
8152
|
precious: '◈',
|
|
@@ -7844,9 +8154,16 @@ const categoryIcons = {
|
|
|
7844
8154
|
mineral: '◇',
|
|
7845
8155
|
organic: '❋',
|
|
7846
8156
|
};
|
|
8157
|
+
const categoryIconShapes = {
|
|
8158
|
+
metal: 'hex',
|
|
8159
|
+
precious: 'diamond',
|
|
8160
|
+
gas: 'circle',
|
|
8161
|
+
mineral: 'square',
|
|
8162
|
+
organic: 'star',
|
|
8163
|
+
};
|
|
7847
8164
|
const componentIcon = '▣';
|
|
7848
8165
|
const moduleIcon = '⬢';
|
|
7849
|
-
const
|
|
8166
|
+
const itemAbbreviations = {
|
|
7850
8167
|
10001: 'HP',
|
|
7851
8168
|
10002: 'CL',
|
|
7852
8169
|
10003: 'TC',
|
|
@@ -8388,194 +8705,21 @@ function getStatMappingsForCapability(capability) {
|
|
|
8388
8705
|
return statMappings.filter((m) => m.capability === capability);
|
|
8389
8706
|
}
|
|
8390
8707
|
|
|
8391
|
-
function computeShipHullCapabilities(stats) {
|
|
8392
|
-
const density = stats.density ?? 500;
|
|
8393
|
-
const strength = stats.strength ?? 500;
|
|
8394
|
-
const ductility = stats.ductility ?? 500;
|
|
8395
|
-
const purity = stats.purity ?? 500;
|
|
8396
|
-
const hullmass = 25000 + 75 * density;
|
|
8397
|
-
const statSum = strength + ductility + purity;
|
|
8398
|
-
const exponent = statSum / 2997.0;
|
|
8399
|
-
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
8400
|
-
return { hullmass, capacity };
|
|
8401
|
-
}
|
|
8402
|
-
function computeEngineCapabilities(stats) {
|
|
8403
|
-
const vol = stats.volatility ?? 500;
|
|
8404
|
-
const thm = stats.thermal ?? 500;
|
|
8405
|
-
return {
|
|
8406
|
-
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
8407
|
-
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
8408
|
-
};
|
|
8409
|
-
}
|
|
8410
|
-
function computeGeneratorCapabilities(stats) {
|
|
8411
|
-
const res = stats.resonance ?? 500;
|
|
8412
|
-
const clr = stats.clarity ?? 500;
|
|
8413
|
-
return {
|
|
8414
|
-
capacity: 300 + Math.floor(res / 6),
|
|
8415
|
-
recharge: 5 + Math.floor((clr * 15) / 1000),
|
|
8416
|
-
};
|
|
8417
|
-
}
|
|
8418
|
-
function computeGathererCapabilities(stats) {
|
|
8419
|
-
const str = stats.strength ?? 500;
|
|
8420
|
-
const con = stats.conductivity ?? 500;
|
|
8421
|
-
const ref = stats.reflectivity ?? 500;
|
|
8422
|
-
const tol = stats.tolerance ?? 500;
|
|
8423
|
-
return {
|
|
8424
|
-
yield: 200 + str,
|
|
8425
|
-
drain: Math.max(10, 50 - Math.floor(con / 20)),
|
|
8426
|
-
depth: 200 + Math.floor((tol * 3) / 2),
|
|
8427
|
-
speed: 100 + Math.floor((ref * 4) / 5),
|
|
8428
|
-
};
|
|
8429
|
-
}
|
|
8430
|
-
function computeLoaderCapabilities(stats) {
|
|
8431
|
-
const duc = stats.ductility ?? 500;
|
|
8432
|
-
const pla = stats.plasticity ?? 500;
|
|
8433
|
-
return {
|
|
8434
|
-
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
8435
|
-
thrust: 1 + Math.floor(pla / 500),
|
|
8436
|
-
quantity: 1,
|
|
8437
|
-
};
|
|
8438
|
-
}
|
|
8439
|
-
function computeManufacturingCapabilities(stats) {
|
|
8440
|
-
const rea = stats.reactivity ?? 500;
|
|
8441
|
-
const clr = stats.clarity ?? 500;
|
|
8442
|
-
return {
|
|
8443
|
-
speed: 100 + Math.floor((rea * 4) / 5),
|
|
8444
|
-
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
8445
|
-
};
|
|
8446
|
-
}
|
|
8447
|
-
function computeHaulerCapabilities(stats) {
|
|
8448
|
-
const res = stats.resonance ?? 500;
|
|
8449
|
-
const con = stats.conductivity ?? 500;
|
|
8450
|
-
const clr = stats.clarity ?? 500;
|
|
8451
|
-
return {
|
|
8452
|
-
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
8453
|
-
efficiency: 2000 + con * 6,
|
|
8454
|
-
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
8455
|
-
};
|
|
8456
|
-
}
|
|
8457
|
-
function computeStorageCapabilities(stats, baseCapacity) {
|
|
8458
|
-
const strength = stats.strength ?? 500;
|
|
8459
|
-
const ductility = stats.ductility ?? 500;
|
|
8460
|
-
const purity = stats.purity ?? 500;
|
|
8461
|
-
const statSum = strength + ductility + purity;
|
|
8462
|
-
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
8463
|
-
return { capacityBonus };
|
|
8464
|
-
}
|
|
8465
|
-
function computeWarehouseHullCapabilities(stats) {
|
|
8466
|
-
const density = stats.density ?? 500;
|
|
8467
|
-
const strength = stats.strength ?? 500;
|
|
8468
|
-
const ductility = stats.ductility ?? 500;
|
|
8469
|
-
const purity = stats.purity ?? 500;
|
|
8470
|
-
const hullmass = 25000 + 75 * density;
|
|
8471
|
-
const statSum = strength + ductility + purity;
|
|
8472
|
-
const exponent = statSum / 2997.0;
|
|
8473
|
-
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
8474
|
-
return { hullmass, capacity };
|
|
8475
|
-
}
|
|
8476
|
-
function computeShipCapabilities(modules) {
|
|
8477
|
-
const ship = {};
|
|
8478
|
-
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
8479
|
-
if (engineModules.length > 0) {
|
|
8480
|
-
let totalThrust = 0;
|
|
8481
|
-
let totalDrain = 0;
|
|
8482
|
-
for (const m of engineModules) {
|
|
8483
|
-
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8484
|
-
totalThrust += caps.thrust;
|
|
8485
|
-
totalDrain += caps.drain;
|
|
8486
|
-
}
|
|
8487
|
-
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
8488
|
-
}
|
|
8489
|
-
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
8490
|
-
if (generatorModules.length > 0) {
|
|
8491
|
-
let totalCapacity = 0;
|
|
8492
|
-
let totalRecharge = 0;
|
|
8493
|
-
for (const m of generatorModules) {
|
|
8494
|
-
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8495
|
-
totalCapacity += caps.capacity;
|
|
8496
|
-
totalRecharge += caps.recharge;
|
|
8497
|
-
}
|
|
8498
|
-
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
8499
|
-
}
|
|
8500
|
-
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
8501
|
-
if (gathererModules.length > 0) {
|
|
8502
|
-
let totalYield = 0;
|
|
8503
|
-
let totalDrain = 0;
|
|
8504
|
-
let totalDepth = 0;
|
|
8505
|
-
let totalSpeed = 0;
|
|
8506
|
-
for (const m of gathererModules) {
|
|
8507
|
-
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8508
|
-
totalYield += caps.yield;
|
|
8509
|
-
totalDrain += caps.drain;
|
|
8510
|
-
totalDepth += caps.depth;
|
|
8511
|
-
totalSpeed += caps.speed;
|
|
8512
|
-
}
|
|
8513
|
-
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
8514
|
-
}
|
|
8515
|
-
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
8516
|
-
if (haulerModules.length > 0) {
|
|
8517
|
-
let totalCapacity = 0;
|
|
8518
|
-
let weightedEffNum = 0;
|
|
8519
|
-
let totalDrain = 0;
|
|
8520
|
-
for (const m of haulerModules) {
|
|
8521
|
-
const decoded = decodeCraftedItemStats(m.itemId, m.seed);
|
|
8522
|
-
const caps = computeHaulerCapabilities({
|
|
8523
|
-
resonance: decoded.capacity,
|
|
8524
|
-
conductivity: decoded.efficiency,
|
|
8525
|
-
clarity: decoded.drain,
|
|
8526
|
-
});
|
|
8527
|
-
totalCapacity += caps.capacity;
|
|
8528
|
-
weightedEffNum += caps.efficiency * caps.capacity;
|
|
8529
|
-
totalDrain += caps.drain;
|
|
8530
|
-
}
|
|
8531
|
-
ship.hauler = {
|
|
8532
|
-
capacity: totalCapacity,
|
|
8533
|
-
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
8534
|
-
drain: totalDrain,
|
|
8535
|
-
};
|
|
8536
|
-
}
|
|
8537
|
-
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
8538
|
-
if (loaderModules.length > 0) {
|
|
8539
|
-
let totalMass = 0;
|
|
8540
|
-
let totalThrust = 0;
|
|
8541
|
-
let totalQuantity = 0;
|
|
8542
|
-
for (const m of loaderModules) {
|
|
8543
|
-
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8544
|
-
totalMass += caps.mass;
|
|
8545
|
-
totalThrust += caps.thrust;
|
|
8546
|
-
totalQuantity += caps.quantity;
|
|
8547
|
-
}
|
|
8548
|
-
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
8549
|
-
}
|
|
8550
|
-
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
8551
|
-
if (crafterModules.length > 0) {
|
|
8552
|
-
let totalSpeed = 0;
|
|
8553
|
-
let totalDrain = 0;
|
|
8554
|
-
for (const m of crafterModules) {
|
|
8555
|
-
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8556
|
-
totalSpeed += caps.speed;
|
|
8557
|
-
totalDrain += caps.drain;
|
|
8558
|
-
}
|
|
8559
|
-
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
8560
|
-
}
|
|
8561
|
-
return ship;
|
|
8562
|
-
}
|
|
8563
|
-
|
|
8564
8708
|
function toNum(v) {
|
|
8565
8709
|
return Number(antelope.UInt16.from(v).value.toString());
|
|
8566
8710
|
}
|
|
8567
|
-
function
|
|
8711
|
+
function toBigStats(v) {
|
|
8568
8712
|
return BigInt(antelope.UInt64.from(v).toString());
|
|
8569
8713
|
}
|
|
8570
|
-
function resolveResource(id,
|
|
8714
|
+
function resolveResource(id, stats) {
|
|
8571
8715
|
const item = getItem(id);
|
|
8572
8716
|
const cat = item.category;
|
|
8573
|
-
let
|
|
8574
|
-
if (
|
|
8575
|
-
const
|
|
8717
|
+
let resolvedStats;
|
|
8718
|
+
if (stats !== undefined) {
|
|
8719
|
+
const bigStats = toBigStats(stats);
|
|
8576
8720
|
const defs = getStatDefinitions(cat);
|
|
8577
|
-
const values = [
|
|
8578
|
-
|
|
8721
|
+
const values = [decodeStat(bigStats, 0), decodeStat(bigStats, 1), decodeStat(bigStats, 2)];
|
|
8722
|
+
resolvedStats = defs.map((d, i) => ({
|
|
8579
8723
|
key: d.key,
|
|
8580
8724
|
label: d.label,
|
|
8581
8725
|
abbreviation: d.abbreviation,
|
|
@@ -8589,19 +8733,20 @@ function resolveResource(id, seed) {
|
|
|
8589
8733
|
itemId: id,
|
|
8590
8734
|
name: String(item.name),
|
|
8591
8735
|
icon: categoryIcons[cat] ?? '⬡',
|
|
8736
|
+
abbreviation: null,
|
|
8592
8737
|
category: cat,
|
|
8593
8738
|
tier: item.tier,
|
|
8594
8739
|
mass: Number(item.mass.value.toString()),
|
|
8595
8740
|
itemType: 'resource',
|
|
8596
|
-
stats,
|
|
8741
|
+
stats: resolvedStats,
|
|
8597
8742
|
};
|
|
8598
8743
|
}
|
|
8599
|
-
function resolveComponent(id,
|
|
8744
|
+
function resolveComponent(id, stats) {
|
|
8600
8745
|
const comp = getComponentById(id);
|
|
8601
|
-
let
|
|
8602
|
-
if (
|
|
8603
|
-
const decoded = decodeCraftedItemStats(id,
|
|
8604
|
-
|
|
8746
|
+
let resolvedStats;
|
|
8747
|
+
if (stats !== undefined) {
|
|
8748
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8749
|
+
resolvedStats = Object.entries(decoded).map(([key, value]) => {
|
|
8605
8750
|
const allDefs = getStatDefinitions('metal')
|
|
8606
8751
|
.concat(getStatDefinitions('precious'))
|
|
8607
8752
|
.concat(getStatDefinitions('gas'))
|
|
@@ -8624,11 +8769,12 @@ function resolveComponent(id, seed) {
|
|
|
8624
8769
|
return {
|
|
8625
8770
|
itemId: id,
|
|
8626
8771
|
name: comp.name,
|
|
8627
|
-
icon:
|
|
8772
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8773
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8628
8774
|
tier: 't1',
|
|
8629
8775
|
mass: comp.mass,
|
|
8630
8776
|
itemType: 'component',
|
|
8631
|
-
stats,
|
|
8777
|
+
stats: resolvedStats,
|
|
8632
8778
|
};
|
|
8633
8779
|
}
|
|
8634
8780
|
function computeCapabilityGroup(moduleType, stats) {
|
|
@@ -8686,6 +8832,17 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8686
8832
|
],
|
|
8687
8833
|
};
|
|
8688
8834
|
}
|
|
8835
|
+
case MODULE_HAULER: {
|
|
8836
|
+
const caps = computeHaulerCapabilities(stats);
|
|
8837
|
+
return {
|
|
8838
|
+
capability: 'Hauler',
|
|
8839
|
+
attributes: [
|
|
8840
|
+
{ label: 'Capacity', value: caps.capacity },
|
|
8841
|
+
{ label: 'Efficiency', value: caps.efficiency },
|
|
8842
|
+
{ label: 'Drain', value: caps.drain },
|
|
8843
|
+
],
|
|
8844
|
+
};
|
|
8845
|
+
}
|
|
8689
8846
|
case MODULE_STORAGE: {
|
|
8690
8847
|
const str = stats.strength ?? 500;
|
|
8691
8848
|
const duc = stats.ductility ?? 500;
|
|
@@ -8698,36 +8855,37 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8698
8855
|
return undefined;
|
|
8699
8856
|
}
|
|
8700
8857
|
}
|
|
8701
|
-
function resolveModule(id,
|
|
8858
|
+
function resolveModule(id, stats) {
|
|
8702
8859
|
const recipe = getModuleRecipeByItemId(id);
|
|
8703
8860
|
let attributes;
|
|
8704
|
-
if (
|
|
8705
|
-
const
|
|
8861
|
+
if (stats !== undefined) {
|
|
8862
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8706
8863
|
const modType = getModuleCapabilityType(id);
|
|
8707
|
-
const group = computeCapabilityGroup(modType,
|
|
8864
|
+
const group = computeCapabilityGroup(modType, decoded);
|
|
8708
8865
|
if (group)
|
|
8709
8866
|
attributes = [group];
|
|
8710
8867
|
}
|
|
8711
8868
|
return {
|
|
8712
8869
|
itemId: id,
|
|
8713
8870
|
name: recipe.name,
|
|
8714
|
-
icon:
|
|
8871
|
+
icon: itemAbbreviations[id] ?? moduleIcon,
|
|
8872
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8715
8873
|
tier: 't1',
|
|
8716
8874
|
mass: 0,
|
|
8717
8875
|
itemType: 'module',
|
|
8718
8876
|
attributes,
|
|
8719
8877
|
};
|
|
8720
8878
|
}
|
|
8721
|
-
function resolveEntity(id,
|
|
8879
|
+
function resolveEntity(id, stats, modules) {
|
|
8722
8880
|
const recipe = getEntityRecipeByItemId(id);
|
|
8723
8881
|
let attributes;
|
|
8724
8882
|
let moduleSlots;
|
|
8725
|
-
if (
|
|
8726
|
-
const
|
|
8883
|
+
if (stats !== undefined) {
|
|
8884
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8727
8885
|
attributes = [];
|
|
8728
8886
|
const isShip = recipe.id === 'ship-t1';
|
|
8729
8887
|
if (isShip) {
|
|
8730
|
-
const hullCaps = computeShipHullCapabilities(
|
|
8888
|
+
const hullCaps = computeShipHullCapabilities(decoded);
|
|
8731
8889
|
attributes.push({
|
|
8732
8890
|
capability: 'Hull',
|
|
8733
8891
|
attributes: [
|
|
@@ -8737,7 +8895,7 @@ function resolveEntity(id, seed, modules) {
|
|
|
8737
8895
|
});
|
|
8738
8896
|
}
|
|
8739
8897
|
else {
|
|
8740
|
-
const containerCaps = computeContainerCapabilities(
|
|
8898
|
+
const containerCaps = computeContainerCapabilities(decoded);
|
|
8741
8899
|
attributes.push({
|
|
8742
8900
|
capability: 'Hull',
|
|
8743
8901
|
attributes: [
|
|
@@ -8752,10 +8910,10 @@ function resolveEntity(id, seed, modules) {
|
|
|
8752
8910
|
const mod = modules?.[i];
|
|
8753
8911
|
if (mod?.installed) {
|
|
8754
8912
|
const modItemId = Number(mod.installed.item_id.value.toString());
|
|
8755
|
-
const
|
|
8756
|
-
const
|
|
8913
|
+
const modStats = BigInt(mod.installed.stats.toString());
|
|
8914
|
+
const decodedStats = decodeCraftedItemStats(modItemId, modStats);
|
|
8757
8915
|
const modType = getModuleCapabilityType(modItemId);
|
|
8758
|
-
const group = computeCapabilityGroup(modType,
|
|
8916
|
+
const group = computeCapabilityGroup(modType, decodedStats);
|
|
8759
8917
|
const modRecipe = getModuleRecipeByItemId(modItemId);
|
|
8760
8918
|
return {
|
|
8761
8919
|
name: modRecipe?.name ?? 'Module',
|
|
@@ -8769,7 +8927,8 @@ function resolveEntity(id, seed, modules) {
|
|
|
8769
8927
|
return {
|
|
8770
8928
|
itemId: id,
|
|
8771
8929
|
name: recipe.name,
|
|
8772
|
-
icon:
|
|
8930
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8931
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8773
8932
|
tier: 't1',
|
|
8774
8933
|
mass: 0,
|
|
8775
8934
|
itemType: 'entity',
|
|
@@ -8777,28 +8936,157 @@ function resolveEntity(id, seed, modules) {
|
|
|
8777
8936
|
moduleSlots,
|
|
8778
8937
|
};
|
|
8779
8938
|
}
|
|
8780
|
-
function resolveItem(itemId,
|
|
8939
|
+
function resolveItem(itemId, stats, modules) {
|
|
8781
8940
|
const id = toNum(itemId);
|
|
8782
8941
|
if (isModuleItem(id))
|
|
8783
|
-
return resolveModule(id,
|
|
8942
|
+
return resolveModule(id, stats);
|
|
8784
8943
|
if (getComponentById(id))
|
|
8785
|
-
return resolveComponent(id,
|
|
8944
|
+
return resolveComponent(id, stats);
|
|
8786
8945
|
if (getEntityRecipeByItemId(id))
|
|
8787
|
-
return resolveEntity(id,
|
|
8788
|
-
return resolveResource(id,
|
|
8946
|
+
return resolveEntity(id, stats, modules);
|
|
8947
|
+
return resolveResource(id, stats);
|
|
8948
|
+
}
|
|
8949
|
+
|
|
8950
|
+
const TEMPLATES = {
|
|
8951
|
+
engine: {
|
|
8952
|
+
id: 'module.engine.description',
|
|
8953
|
+
template: 'generates {thrust} thrust for travel while draining {drain} energy per distance travelled',
|
|
8954
|
+
params: [
|
|
8955
|
+
['thrust', 'Thrust'],
|
|
8956
|
+
['drain', 'Drain'],
|
|
8957
|
+
],
|
|
8958
|
+
highlightKeys: ['thrust', 'drain'],
|
|
8959
|
+
},
|
|
8960
|
+
generator: {
|
|
8961
|
+
id: 'module.generator.description',
|
|
8962
|
+
template: 'holds {capacity} maximum energy and restores {recharge} per second while recharging',
|
|
8963
|
+
params: [
|
|
8964
|
+
['capacity', 'Capacity'],
|
|
8965
|
+
['recharge', 'Recharge'],
|
|
8966
|
+
],
|
|
8967
|
+
highlightKeys: ['capacity', 'recharge'],
|
|
8968
|
+
},
|
|
8969
|
+
gatherer: {
|
|
8970
|
+
id: 'module.gatherer.description',
|
|
8971
|
+
template: 'mines resources at {yield} speed to a max depth of {depth} with {speed} gather speed while draining {drain} energy per second',
|
|
8972
|
+
params: [
|
|
8973
|
+
['yield', 'Yield'],
|
|
8974
|
+
['drain', 'Drain'],
|
|
8975
|
+
['depth', 'Depth'],
|
|
8976
|
+
['speed', 'Speed'],
|
|
8977
|
+
],
|
|
8978
|
+
highlightKeys: ['yield', 'depth', 'speed', 'drain'],
|
|
8979
|
+
},
|
|
8980
|
+
loader: {
|
|
8981
|
+
id: 'module.loader.description',
|
|
8982
|
+
template: '{quantity} loader that generates {thrust} thrust with a weight of {mass} per unit',
|
|
8983
|
+
params: [
|
|
8984
|
+
['quantity', 'Quantity'],
|
|
8985
|
+
['thrust', 'Thrust'],
|
|
8986
|
+
['mass', 'Mass'],
|
|
8987
|
+
],
|
|
8988
|
+
highlightKeys: ['quantity', 'thrust', 'mass'],
|
|
8989
|
+
},
|
|
8990
|
+
manufacturing: {
|
|
8991
|
+
id: 'module.manufacturing.description',
|
|
8992
|
+
template: 'manufactures items at {speed} speed while draining {drain} energy per second',
|
|
8993
|
+
params: [
|
|
8994
|
+
['speed', 'Speed'],
|
|
8995
|
+
['drain', 'Drain'],
|
|
8996
|
+
],
|
|
8997
|
+
highlightKeys: ['speed', 'drain'],
|
|
8998
|
+
},
|
|
8999
|
+
storage: {
|
|
9000
|
+
id: 'module.storage.description',
|
|
9001
|
+
template: 'boosts cargo capacity by {bonus}%',
|
|
9002
|
+
params: [['bonus', 'Capacity Bonus']],
|
|
9003
|
+
highlightKeys: ['bonus'],
|
|
9004
|
+
},
|
|
9005
|
+
hauler: {
|
|
9006
|
+
id: 'module.hauler.description',
|
|
9007
|
+
template: 'locks onto up to {capacity} targets at {efficiency} efficiency while draining {drain} energy per distance travelled per target',
|
|
9008
|
+
params: [
|
|
9009
|
+
['capacity', 'Capacity'],
|
|
9010
|
+
['efficiency', 'Efficiency'],
|
|
9011
|
+
['drain', 'Drain'],
|
|
9012
|
+
],
|
|
9013
|
+
highlightKeys: ['capacity', 'efficiency', 'drain'],
|
|
9014
|
+
},
|
|
9015
|
+
};
|
|
9016
|
+
function describeModule(input) {
|
|
9017
|
+
if (!input.attributes || input.attributes.length === 0)
|
|
9018
|
+
return null;
|
|
9019
|
+
const key = input.capability.toLowerCase();
|
|
9020
|
+
const spec = TEMPLATES[key];
|
|
9021
|
+
if (!spec)
|
|
9022
|
+
return null;
|
|
9023
|
+
const params = {};
|
|
9024
|
+
for (const [paramName, attrLabel] of spec.params) {
|
|
9025
|
+
const attr = input.attributes.find((a) => a.label === attrLabel);
|
|
9026
|
+
if (attr)
|
|
9027
|
+
params[paramName] = attr.value;
|
|
9028
|
+
}
|
|
9029
|
+
return {
|
|
9030
|
+
id: spec.id,
|
|
9031
|
+
template: spec.template,
|
|
9032
|
+
params,
|
|
9033
|
+
highlightKeys: spec.highlightKeys,
|
|
9034
|
+
};
|
|
9035
|
+
}
|
|
9036
|
+
function describeModuleForItem(resolved) {
|
|
9037
|
+
if (resolved.itemType !== 'module')
|
|
9038
|
+
return null;
|
|
9039
|
+
const group = resolved.attributes?.[0];
|
|
9040
|
+
if (!group)
|
|
9041
|
+
return null;
|
|
9042
|
+
return describeModule({ capability: group.capability, attributes: group.attributes });
|
|
9043
|
+
}
|
|
9044
|
+
function describeModuleForSlot(slot) {
|
|
9045
|
+
if (!slot.installed || !slot.name || !slot.attributes)
|
|
9046
|
+
return null;
|
|
9047
|
+
return describeModule({ capability: slot.name, attributes: slot.attributes });
|
|
9048
|
+
}
|
|
9049
|
+
function renderDescription(desc, options) {
|
|
9050
|
+
const translate = options?.translate ?? ((_id, fallback) => fallback);
|
|
9051
|
+
const formatNumber = options?.formatNumber ?? ((n) => n.toLocaleString('en-US'));
|
|
9052
|
+
const tpl = translate(desc.id, desc.template);
|
|
9053
|
+
const spans = [];
|
|
9054
|
+
const regex = /\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
9055
|
+
let lastIndex = 0;
|
|
9056
|
+
let m;
|
|
9057
|
+
while ((m = regex.exec(tpl)) !== null) {
|
|
9058
|
+
if (m.index > lastIndex) {
|
|
9059
|
+
spans.push({ text: tpl.slice(lastIndex, m.index) });
|
|
9060
|
+
}
|
|
9061
|
+
const paramName = m[1] ?? '';
|
|
9062
|
+
const raw = desc.params[paramName];
|
|
9063
|
+
if (raw === undefined) {
|
|
9064
|
+
spans.push({ text: `{${paramName}}` });
|
|
9065
|
+
}
|
|
9066
|
+
else {
|
|
9067
|
+
const formatted = typeof raw === 'number' ? formatNumber(raw) : raw;
|
|
9068
|
+
const highlight = desc.highlightKeys.includes(paramName);
|
|
9069
|
+
spans.push(highlight ? { text: formatted, highlight: true } : { text: formatted });
|
|
9070
|
+
}
|
|
9071
|
+
lastIndex = m.index + m[0].length;
|
|
9072
|
+
}
|
|
9073
|
+
if (lastIndex < tpl.length) {
|
|
9074
|
+
spans.push({ text: tpl.slice(lastIndex) });
|
|
9075
|
+
}
|
|
9076
|
+
return spans;
|
|
8789
9077
|
}
|
|
8790
9078
|
|
|
8791
9079
|
function readCommonBase(data) {
|
|
8792
9080
|
return {
|
|
8793
9081
|
quantity: Number(data.quantity),
|
|
8794
|
-
|
|
9082
|
+
stats: String(data.stats),
|
|
8795
9083
|
origin_x: String(data.origin_x),
|
|
8796
9084
|
origin_y: String(data.origin_y),
|
|
8797
9085
|
};
|
|
8798
9086
|
}
|
|
8799
9087
|
function deserializeScalar(data, itemId) {
|
|
8800
9088
|
const base = readCommonBase(data);
|
|
8801
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9089
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats };
|
|
8802
9090
|
}
|
|
8803
9091
|
const deserializeResource = deserializeScalar;
|
|
8804
9092
|
const deserializeComponent = deserializeScalar;
|
|
@@ -8806,15 +9094,15 @@ const deserializeModule = deserializeScalar;
|
|
|
8806
9094
|
function deserializeEntity(data, itemId) {
|
|
8807
9095
|
const base = readCommonBase(data);
|
|
8808
9096
|
const moduleItems = (data.module_items ?? []).map((v) => Number(v));
|
|
8809
|
-
const
|
|
9097
|
+
const moduleStats = (data.module_stats ?? []).map((v) => String(v));
|
|
8810
9098
|
const layout = getEntitySlotLayout(itemId);
|
|
8811
9099
|
const modules = layout.map((slot, i) => ({
|
|
8812
9100
|
type: slot.type,
|
|
8813
9101
|
installed: moduleItems[i] && moduleItems[i] !== 0
|
|
8814
|
-
? { item_id: moduleItems[i],
|
|
9102
|
+
? { item_id: moduleItems[i], stats: moduleStats[i] }
|
|
8815
9103
|
: undefined,
|
|
8816
9104
|
}));
|
|
8817
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9105
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats, modules };
|
|
8818
9106
|
}
|
|
8819
9107
|
function deserializeAsset(data, itemId) {
|
|
8820
9108
|
const type = itemTypeCode(itemId);
|
|
@@ -8833,24 +9121,24 @@ function deserializeAsset(data, itemId) {
|
|
|
8833
9121
|
function idiv(a, b) {
|
|
8834
9122
|
return Math.floor(a / b);
|
|
8835
9123
|
}
|
|
8836
|
-
function computeBaseHullmass(
|
|
8837
|
-
const density = decodeStat(
|
|
9124
|
+
function computeBaseHullmass(stats) {
|
|
9125
|
+
const density = decodeStat(stats, 1);
|
|
8838
9126
|
return 25000 + 75 * density;
|
|
8839
9127
|
}
|
|
8840
|
-
function computeBaseCapacityShip(
|
|
8841
|
-
const s = decodeStat(
|
|
9128
|
+
function computeBaseCapacityShip(stats) {
|
|
9129
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8842
9130
|
return Math.floor(1000000 * Math.pow(10, s / 2997));
|
|
8843
9131
|
}
|
|
8844
|
-
function computeBaseCapacityWarehouse(
|
|
8845
|
-
const s = decodeStat(
|
|
9132
|
+
function computeBaseCapacityWarehouse(stats) {
|
|
9133
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8846
9134
|
return Math.floor(20000000 * Math.pow(10, s / 2997));
|
|
8847
9135
|
}
|
|
8848
9136
|
const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
|
|
8849
9137
|
const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
|
|
8850
9138
|
const computeGeneratorCap = (res) => 300 + idiv(res, 6);
|
|
8851
|
-
const computeGeneratorRech = (clr) =>
|
|
9139
|
+
const computeGeneratorRech = (clr) => 1 + idiv(clr * 3, 1000);
|
|
8852
9140
|
const computeGathererYield = (str) => 200 + str;
|
|
8853
|
-
const computeGathererDrain = (con) => Math.max(
|
|
9141
|
+
const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
|
|
8854
9142
|
const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
|
|
8855
9143
|
const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
|
|
8856
9144
|
const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
|
|
@@ -8889,7 +9177,7 @@ function moduleDisplayName(itemId) {
|
|
|
8889
9177
|
return 'Module';
|
|
8890
9178
|
}
|
|
8891
9179
|
}
|
|
8892
|
-
function formatModuleLine(slot, itemId,
|
|
9180
|
+
function formatModuleLine(slot, itemId, stats) {
|
|
8893
9181
|
let out = `Slot ${slot} - `;
|
|
8894
9182
|
if (itemId === 0) {
|
|
8895
9183
|
out += '(empty)';
|
|
@@ -8899,41 +9187,41 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8899
9187
|
const subtype = getModuleCapabilityType(itemId);
|
|
8900
9188
|
switch (subtype) {
|
|
8901
9189
|
case MODULE_ENGINE: {
|
|
8902
|
-
const vol = decodeStat(
|
|
8903
|
-
const thm = decodeStat(
|
|
9190
|
+
const vol = decodeStat(stats, 0);
|
|
9191
|
+
const thm = decodeStat(stats, 1);
|
|
8904
9192
|
out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
|
|
8905
9193
|
break;
|
|
8906
9194
|
}
|
|
8907
9195
|
case MODULE_GENERATOR: {
|
|
8908
|
-
const res = decodeStat(
|
|
8909
|
-
const clr = decodeStat(
|
|
9196
|
+
const res = decodeStat(stats, 0);
|
|
9197
|
+
const clr = decodeStat(stats, 1);
|
|
8910
9198
|
out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
|
|
8911
9199
|
break;
|
|
8912
9200
|
}
|
|
8913
9201
|
case MODULE_GATHERER: {
|
|
8914
|
-
const str = decodeStat(
|
|
8915
|
-
const tol = decodeStat(
|
|
8916
|
-
const con = decodeStat(
|
|
8917
|
-
const ref = decodeStat(
|
|
9202
|
+
const str = decodeStat(stats, 0);
|
|
9203
|
+
const tol = decodeStat(stats, 1);
|
|
9204
|
+
const con = decodeStat(stats, 3);
|
|
9205
|
+
const ref = decodeStat(stats, 4);
|
|
8918
9206
|
out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
|
|
8919
9207
|
break;
|
|
8920
9208
|
}
|
|
8921
9209
|
case MODULE_LOADER: {
|
|
8922
|
-
const duc = decodeStat(
|
|
8923
|
-
const pla = decodeStat(
|
|
9210
|
+
const duc = decodeStat(stats, 0);
|
|
9211
|
+
const pla = decodeStat(stats, 1);
|
|
8924
9212
|
out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
|
|
8925
9213
|
break;
|
|
8926
9214
|
}
|
|
8927
9215
|
case MODULE_CRAFTER: {
|
|
8928
|
-
const rea = decodeStat(
|
|
8929
|
-
const clr = decodeStat(
|
|
9216
|
+
const rea = decodeStat(stats, 0);
|
|
9217
|
+
const clr = decodeStat(stats, 1);
|
|
8930
9218
|
out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
|
|
8931
9219
|
break;
|
|
8932
9220
|
}
|
|
8933
9221
|
case MODULE_STORAGE: {
|
|
8934
|
-
const str = decodeStat(
|
|
8935
|
-
const duc = decodeStat(
|
|
8936
|
-
const pur = decodeStat(
|
|
9222
|
+
const str = decodeStat(stats, 0);
|
|
9223
|
+
const duc = decodeStat(stats, 1);
|
|
9224
|
+
const pur = decodeStat(stats, 2);
|
|
8937
9225
|
const sum = str + duc + pur;
|
|
8938
9226
|
const pct = 10 + idiv(sum * 10, 2997);
|
|
8939
9227
|
out += ` +${pct}% capacity`;
|
|
@@ -8942,14 +9230,14 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8942
9230
|
}
|
|
8943
9231
|
return out;
|
|
8944
9232
|
}
|
|
8945
|
-
function buildEntityDescription(itemId,
|
|
8946
|
-
const hullMass = computeBaseHullmass(
|
|
9233
|
+
function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
9234
|
+
const hullMass = computeBaseHullmass(hullStats);
|
|
8947
9235
|
let baseCapacity = 0;
|
|
8948
9236
|
if (itemId === ITEM_SHIP_T1_PACKED) {
|
|
8949
|
-
baseCapacity = computeBaseCapacityShip(
|
|
9237
|
+
baseCapacity = computeBaseCapacityShip(hullStats);
|
|
8950
9238
|
}
|
|
8951
9239
|
else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
|
|
8952
|
-
baseCapacity = computeBaseCapacityWarehouse(
|
|
9240
|
+
baseCapacity = computeBaseCapacityWarehouse(hullStats);
|
|
8953
9241
|
}
|
|
8954
9242
|
let out = entityDisplayName(itemId);
|
|
8955
9243
|
out += ` - Hull ${hullMass} mass`;
|
|
@@ -8958,7 +9246,7 @@ function buildEntityDescription(itemId, hullSeed, moduleItems, moduleSeeds) {
|
|
|
8958
9246
|
}
|
|
8959
9247
|
out += '\n\n';
|
|
8960
9248
|
for (let i = 0; i < moduleItems.length; i++) {
|
|
8961
|
-
out += formatModuleLine(i, moduleItems[i],
|
|
9249
|
+
out += formatModuleLine(i, moduleItems[i], moduleStats[i] ?? 0n);
|
|
8962
9250
|
out += '\n';
|
|
8963
9251
|
}
|
|
8964
9252
|
return out;
|
|
@@ -9162,6 +9450,7 @@ exports.capabilityAttributes = capabilityAttributes;
|
|
|
9162
9450
|
exports.capabilityNames = capabilityNames;
|
|
9163
9451
|
exports.capsHasCrafter = capsHasCrafter;
|
|
9164
9452
|
exports.capsHasGatherer = capsHasGatherer;
|
|
9453
|
+
exports.capsHasHauler = capsHasHauler;
|
|
9165
9454
|
exports.capsHasLoaders = capsHasLoaders;
|
|
9166
9455
|
exports.capsHasMass = capsHasMass;
|
|
9167
9456
|
exports.capsHasMovement = capsHasMovement;
|
|
@@ -9169,6 +9458,7 @@ exports.capsHasStorage = capsHasStorage;
|
|
|
9169
9458
|
exports.cargoItemToStack = cargoItemToStack;
|
|
9170
9459
|
exports.cargoUtils = cargoUtils;
|
|
9171
9460
|
exports.categoryColors = categoryColors;
|
|
9461
|
+
exports.categoryIconShapes = categoryIconShapes;
|
|
9172
9462
|
exports.categoryIcons = categoryIcons;
|
|
9173
9463
|
exports.categoryItemMass = categoryItemMass;
|
|
9174
9464
|
exports.componentIcon = componentIcon;
|
|
@@ -9179,7 +9469,7 @@ exports.computeBaseHullmass = computeBaseHullmass;
|
|
|
9179
9469
|
exports.computeComponentStats = computeComponentStats;
|
|
9180
9470
|
exports.computeContainerCapabilities = computeContainerCapabilities;
|
|
9181
9471
|
exports.computeContainerT2Capabilities = computeContainerT2Capabilities;
|
|
9182
|
-
exports.
|
|
9472
|
+
exports.computeCraftedOutputStats = computeCraftedOutputStats;
|
|
9183
9473
|
exports.computeCrafterDrain = computeCrafterDrain;
|
|
9184
9474
|
exports.computeCrafterSpeed = computeCrafterSpeed;
|
|
9185
9475
|
exports.computeEngineCapabilities = computeEngineCapabilities;
|
|
@@ -9205,6 +9495,7 @@ exports.computeManufacturingCapabilities = computeManufacturingCapabilities;
|
|
|
9205
9495
|
exports.computeShipCapabilities = computeShipCapabilities;
|
|
9206
9496
|
exports.computeShipHullCapabilities = computeShipHullCapabilities;
|
|
9207
9497
|
exports.computeStorageCapabilities = computeStorageCapabilities;
|
|
9498
|
+
exports.computeWarehouseCapabilities = computeWarehouseCapabilities;
|
|
9208
9499
|
exports.computeWarehouseHullCapabilities = computeWarehouseHullCapabilities;
|
|
9209
9500
|
exports.coordsToLocationId = coordsToLocationId;
|
|
9210
9501
|
exports.createInventoryAccessor = createInventoryAccessor;
|
|
@@ -9220,6 +9511,9 @@ exports.deriveLocationSize = deriveLocationSize;
|
|
|
9220
9511
|
exports.deriveLocationStatic = deriveLocationStatic;
|
|
9221
9512
|
exports.deriveResourceStats = deriveResourceStats;
|
|
9222
9513
|
exports.deriveStratum = deriveStratum;
|
|
9514
|
+
exports.describeModule = describeModule;
|
|
9515
|
+
exports.describeModuleForItem = describeModuleForItem;
|
|
9516
|
+
exports.describeModuleForSlot = describeModuleForSlot;
|
|
9223
9517
|
exports.deserializeAsset = deserializeAsset;
|
|
9224
9518
|
exports.deserializeComponent = deserializeComponent;
|
|
9225
9519
|
exports.deserializeEntity = deserializeEntity;
|
|
@@ -9227,6 +9521,7 @@ exports.deserializeModule = deserializeModule;
|
|
|
9227
9521
|
exports.deserializeResource = deserializeResource;
|
|
9228
9522
|
exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
|
|
9229
9523
|
exports.distanceBetweenPoints = distanceBetweenPoints;
|
|
9524
|
+
exports.encodeGatheredCargoStats = encodeGatheredCargoStats;
|
|
9230
9525
|
exports.encodeStats = encodeStats;
|
|
9231
9526
|
exports.energyPercent = energyPercent;
|
|
9232
9527
|
exports.entityDisplayName = entityDisplayName;
|
|
@@ -9288,8 +9583,8 @@ exports.isGatherableLocation = isGatherableLocation;
|
|
|
9288
9583
|
exports.isInvertedAttribute = isInvertedAttribute;
|
|
9289
9584
|
exports.isModuleItem = isModuleItem;
|
|
9290
9585
|
exports.isRelatedItem = isRelatedItem;
|
|
9586
|
+
exports.itemAbbreviations = itemAbbreviations;
|
|
9291
9587
|
exports.itemCategory = itemCategory;
|
|
9292
|
-
exports.itemIcons = itemIcons;
|
|
9293
9588
|
exports.itemIds = itemIds;
|
|
9294
9589
|
exports.itemOffset = itemOffset;
|
|
9295
9590
|
exports.itemTier = itemTier;
|
|
@@ -9309,6 +9604,7 @@ exports.projectEntity = projectEntity;
|
|
|
9309
9604
|
exports.projectEntityAt = projectEntityAt;
|
|
9310
9605
|
exports.readCommonBase = readCommonBase;
|
|
9311
9606
|
exports.removeFromStacks = removeFromStacks;
|
|
9607
|
+
exports.renderDescription = renderDescription;
|
|
9312
9608
|
exports.resolveItem = resolveItem;
|
|
9313
9609
|
exports.resolveStats = resolveStats;
|
|
9314
9610
|
exports.rollTier = rollTier;
|
|
@@ -9320,6 +9616,7 @@ exports.stackToCargoItem = stackToCargoItem;
|
|
|
9320
9616
|
exports.stacksEqual = stacksEqual;
|
|
9321
9617
|
exports.statMappings = statMappings;
|
|
9322
9618
|
exports.tierColors = tierColors;
|
|
9619
|
+
exports.tierLabels = tierLabels;
|
|
9323
9620
|
exports.toLocation = toLocation;
|
|
9324
9621
|
exports.validateSchedule = validateSchedule;
|
|
9325
9622
|
//# sourceMappingURL=shipload.js.map
|