diff --git a/offchain/constants.ts b/offchain/constants.ts index b295b92..0d98f9b 100644 --- a/offchain/constants.ts +++ b/offchain/constants.ts @@ -6,7 +6,7 @@ const admin_token: AssetClassT = { name: fromText("asteriaAdmin"), }; const ship_mint_lovelace_fee = 3_000_000n; -const max_asteria_mining = 100n; +const max_asteria_mining = 50n; const max_speed: SpeedT = { distance: 1n, time: 30n * 1000n, //milliseconds diff --git a/offchain/script-refs/asteria-ref.json b/offchain/script-refs/asteria-ref.json index 9d1b867..608e399 100644 --- a/offchain/script-refs/asteria-ref.json +++ b/offchain/script-refs/asteria-ref.json @@ -1 +1 @@ -{"txHash":"dc3f0b00161f7c7db78734fb458d34f591b182991dab9df7bfae3be031a25631"} \ No newline at end of file +{"txHash":"8734a7c57080e71f04618fa59cc94f5216eecda8a3ff2229947087838074aa8d"} \ No newline at end of file diff --git a/offchain/script-refs/pellet-ref.json b/offchain/script-refs/pellet-ref.json index 93abe1e..ccfbba6 100644 --- a/offchain/script-refs/pellet-ref.json +++ b/offchain/script-refs/pellet-ref.json @@ -1 +1 @@ -{"txHash":"2ead0a8f05c4ff750b708da18e0f56d72d5d91af313b5a611661d546e78cfa69"} \ No newline at end of file +{"txHash":"7c215f620bdb549479eefec6bc8b97aed6f4b8d48bc99775d5560190475f0b45"} \ No newline at end of file diff --git a/offchain/script-refs/spacetime-ref.json b/offchain/script-refs/spacetime-ref.json index 965ffa3..50b81ea 100644 --- a/offchain/script-refs/spacetime-ref.json +++ b/offchain/script-refs/spacetime-ref.json @@ -1 +1 @@ -{"txHash":"98f9f1163a9395261ee27a0eaded2224d5e953b796bd7aa911c1eed7383bc542"} \ No newline at end of file +{"txHash":"669b5cc55b7c93c1728cb0413a69ad319d87cdfdf650cbef162792554bca328f"} \ No newline at end of file diff --git a/offchain/transactions/admin/asteria/create-asteria.ts b/offchain/transactions/admin/asteria/create-asteria.ts index 969c211..46d1475 100644 --- a/offchain/transactions/admin/asteria/create-asteria.ts +++ b/offchain/transactions/admin/asteria/create-asteria.ts @@ -55,7 +55,6 @@ async function createAsteria(admin_token: AssetClassT): Promise { { inline: asteriaDatum }, { [adminTokenUnit]: BigInt(1), - lovelace: 2_000_000n, } ) .complete(); diff --git a/offchain/transactions/admin/deploy/deploy-asteria.ts b/offchain/transactions/admin/deploy/deploy-asteria.ts index aadee98..ffea0dc 100644 --- a/offchain/transactions/admin/deploy/deploy-asteria.ts +++ b/offchain/transactions/admin/deploy/deploy-asteria.ts @@ -30,7 +30,7 @@ async function deployAsteria( .payToContract( deployAddressBech32, { inline: Data.void(), scriptRef: asteriaValidator }, - { lovelace: 2_000_000n } + {} ) .complete(); diff --git a/offchain/transactions/admin/deploy/deploy-pellet.ts b/offchain/transactions/admin/deploy/deploy-pellet.ts index 1f8fa87..4c27e9c 100644 --- a/offchain/transactions/admin/deploy/deploy-pellet.ts +++ b/offchain/transactions/admin/deploy/deploy-pellet.ts @@ -21,7 +21,7 @@ async function deployPellet(admin_token: AssetClassT): Promise { .payToContract( deployAddressBech32, { inline: Data.void(), scriptRef: pelletValidator }, - { lovelace: 2_000_000n } + {} ) .complete(); diff --git a/offchain/transactions/admin/deploy/deploy-spacetime.ts b/offchain/transactions/admin/deploy/deploy-spacetime.ts index 507b8bd..2efada5 100644 --- a/offchain/transactions/admin/deploy/deploy-spacetime.ts +++ b/offchain/transactions/admin/deploy/deploy-spacetime.ts @@ -72,7 +72,7 @@ async function deploySpacetime( .payToContract( deployAddressBech32, { inline: Data.void(), scriptRef: spacetimeValidator }, - { lovelace: 2_000_000n } + {} ) .complete(); diff --git a/offchain/transactions/admin/pellets/create-pellets.ts b/offchain/transactions/admin/pellets/create-pellets.ts index 705a9ee..9bbce64 100644 --- a/offchain/transactions/admin/pellets/create-pellets.ts +++ b/offchain/transactions/admin/pellets/create-pellets.ts @@ -57,7 +57,6 @@ async function createPellets( { inline: pelletDatum }, { [adminTokenUnit]: BigInt(1), - lovelace: 2_000_000n, ...prize_tokens, } ); diff --git a/offchain/transactions/user/create-ship.ts b/offchain/transactions/user/create-ship.ts index 5593829..825cc1b 100644 --- a/offchain/transactions/user/create-ship.ts +++ b/offchain/transactions/user/create-ship.ts @@ -114,7 +114,6 @@ async function createShip( { inline: shipDatum }, { [shipTokenUnit]: BigInt(1), - lovelace: 2_000_000n, } ) .payToContract( diff --git a/offchain/transactions/user/mine-asteria.ts b/offchain/transactions/user/mine-asteria.ts index c1e13b6..80c09d2 100644 --- a/offchain/transactions/user/mine-asteria.ts +++ b/offchain/transactions/user/mine-asteria.ts @@ -72,9 +72,9 @@ async function mineAsteria( if (!asteria.datum) { throw Error("Asteria datum not found"); } - const rewards = asteria.assets.lovelace - 2_000_000n; + const rewards = asteria.assets.lovelace; const minedRewards = BigInt( - (Number(rewards) * Number(max_asteria_mining)) / 100 + Math.floor((Number(rewards) * Number(max_asteria_mining)) / 100) ); const asteriaInputDatum = Data.from( @@ -120,7 +120,7 @@ async function mineAsteria( { inline: asteriaOutputDatum }, { [adminTokenUnit]: BigInt(1), - lovelace: rewards - minedRewards + 2_000_000n, + lovelace: rewards - minedRewards, } ) .payToAddress(await lucid.wallet.address(), { diff --git a/onchain/docs/mvp-design/design.md b/onchain/docs/mvp-design/design.md index 971f4a7..3274047 100644 --- a/onchain/docs/mvp-design/design.md +++ b/onchain/docs/mvp-design/design.md @@ -24,7 +24,7 @@ Each ship will be identified by a `ShipToken`, with a fixed policy id but a toke >#### Address > ->- Parameterized on `AdminToken`, Asteria validator address, pellet validator address, MAX_SPEED, MAX_SHIP_FUEL, FUEL_PER_STEP, INITIAL_FUEL and MIN_ASTERIA_DISTANCE. +>- Parameterized on `AdminToken`, Asteria validator address, pellet validator address, MAX_SPEED, MAX_SHIP_FUEL, FUEL_PER_STEP, INITIAL_FUEL and MIN_ASTERIA_DISTANCE. The validator corresponding to this address is in `spacetime.ak`. > >#### Datum > @@ -171,17 +171,20 @@ Pays the admin the value locked in the `PelletState` UTxO. - `AdminToken` is present in some wallet input. +## Ship Multivalidator + +Includes the Spacetime validator and the Shipyard policy. + ### SpaceTime validator - Params: `AdminToken`, Asteria validator address, pellet validator address, MAX_SPEED, MAX_SHIP_FUEL, FUEL_PER_STEP, INITIAL_FUEL and MIN_ASTERIA_DISTANCE. #### *MoveShip Redeemer (includes delta_x and delta_y displacements)* -- `ShipToken` is present. -- there is a single `ShipState` input. +- the `ShipState` input is the only script input. - there is a single `ShipState` output. - the `PilotToken` is present in an input. -- the `ShipState` output value doesn't change. +- the `ShipState` output value only has the `ShipToken` and some amount of ada. - the `ShipState` input has enough fuel to move the desired delta. - the distance advanced divided by the tx validity range (posix time) doesn't exceed the maximum speed. - the `ShipState` input `last_move_latest_time` datum field is not greater than the earliest posix time of the tx validity range. @@ -192,34 +195,30 @@ Pays the admin the value locked in the `PelletState` UTxO. #### *GatherFuel Redeemer (includes gathering amount)* -- `ShipToken` is present. -- there is a single `ShipState` input. +- there are two script inputs: `ShipState` and `PelletState`. - there is a single `ShipState` output. - `PilotToken` is present. -- there is a `PelletState` input with the same x and y datum coordinates as the `ShipState` UTxO. +- the `ShipState` output value only has the `ShipToken` and some amount of ada. +- the `PelletState` input has the same x and y datum coordinates as the `ShipState` UTxO. - the amount specified plus the fuel before charging does not exceed `MAX_SHIP_FUEL` capacity. - the amount specified is added to the output `ShipState` fuel datum field, and the other fields remain unchanged. -- the `ShipState` output value is the same as the input. - `ShipState` datum's `last_move_latest_time` is not greater than the earliest posix time of the tx validity range. #### *MineAsteria Redeemer* -- there is a single `ShipState` input. +- there are two script inputs: `ShipState` and `AsteriaUTxO`. - `PilotToken` is present. -- `ShipToken` is present. - `ShipToken` is burnt. -- `AsteriaUTxO` is input. - `ShipState` position is (0,0). - `ShipState` datum's `last_move_latest_time` is not greater than the earliest posix time of the tx validity range. #### *Quit Redeemer* -- `ShipToken` is present. -- there is a single `ShipState` input. +- the `ShipState` input is the only script input. - the `PilotToken` is present in an input. - `ShipToken` is burnt. -### Ship minting policy or "ShipyardPolicy" +### Shipyard policy - Params: same as SpaceTime validator. @@ -235,9 +234,8 @@ Pays the admin the value locked in the `PelletState` UTxO. - the `ShipState` output datum has the `ship_token_name` set as the name of the `ShipToken`. - the `ShipState` output datum has the `pilot_token_name` set as the name of the `PilotToken`. - the `ShipState` output datum has the `last_move_latest_time` set as the latest posix time of the tx validity range. -- the `ShipToken` is paid to the `SpaceTimeScript` validator address. +- the `ShipState` output value only has the `ShipToken` and some amount of ada. #### *BurnShip Redeemer* -- there is a `ShipState` input. - only one token is burnt. diff --git a/onchain/docs/mvp-design/img/consumeAsteria.png b/onchain/docs/mvp-design/img/consumeAsteria.png index f29adc6..840775d 100644 Binary files a/onchain/docs/mvp-design/img/consumeAsteria.png and b/onchain/docs/mvp-design/img/consumeAsteria.png differ diff --git a/onchain/docs/mvp-design/img/createShip.png b/onchain/docs/mvp-design/img/createShip.png index ac9c617..9df69e5 100644 Binary files a/onchain/docs/mvp-design/img/createShip.png and b/onchain/docs/mvp-design/img/createShip.png differ diff --git a/onchain/docs/mvp-design/img/mineAsteria.png b/onchain/docs/mvp-design/img/mineAsteria.png index ccf3249..43e6342 100644 Binary files a/onchain/docs/mvp-design/img/mineAsteria.png and b/onchain/docs/mvp-design/img/mineAsteria.png differ diff --git a/onchain/src/lib/asteria/utils.ak b/onchain/src/lib/asteria/utils.ak index afd6ecd..40a8361 100644 --- a/onchain/src/lib/asteria/utils.ak +++ b/onchain/src/lib/asteria/utils.ak @@ -1,26 +1,9 @@ use aiken/bytearray.{length, take} -use aiken/dict.{keys} -use aiken/list.{any} use aiken/math -use aiken/transaction.{Output} use aiken/transaction/credential.{ Address, ScriptCredential, VerificationKeyCredential, } -use aiken/transaction/value.{AssetName, PolicyId, tokens} - -pub fn is_ship_token_in_utxo(utxo: Output, shipyard_policy: PolicyId) -> Bool { - let token_names = keys(tokens(utxo.value, shipyard_policy)) - any(token_names, fn(name) { has_prefix("SHIP", name) }) -} - -pub fn is_pilot_token_in_utxo( - utxo: Output, - shipyard_policy: PolicyId, - pilot_token_name: AssetName, -) -> Bool { - let token_names = keys(tokens(utxo.value, shipyard_policy)) - any(token_names, fn(name) { name == pilot_token_name }) -} +use aiken/transaction/value.{AssetName} pub fn has_prefix(prefix: ByteArray, name: AssetName) -> Bool { take(name, length(prefix)) == prefix @@ -34,9 +17,9 @@ pub fn required_fuel(distance: Int, fuel_per_step: Int) -> Int { distance * fuel_per_step } -pub fn is_wallet_address(address: Address) -> Bool { +pub fn is_script_address(address: Address) -> Bool { when address.payment_credential is { - VerificationKeyCredential(_) -> True - ScriptCredential(_) -> False + VerificationKeyCredential(_) -> False + ScriptCredential(_) -> True } } diff --git a/onchain/src/plutus.json b/onchain/src/plutus.json index 36e5e94..d19a120 100644 --- a/onchain/src/plutus.json +++ b/onchain/src/plutus.json @@ -45,8 +45,8 @@ } } ], - "compiledCode": "590dc50100003232323232323232323232323232322232232232323232232323232253330173232323232323232533301f300c3021375400e264646464a66604e0022a6604803a2c264a66605060560042646464646464a666054603800c264a66605e0022a6605804c2c264a6660606066004264a66605a6032605e6ea80044c8c8c8c8c8c94ccc0cd4ccc0cccdd79805181b1baa008374c6644a66606a604e0582002264646600200200644a66607800226607a66ec13001014000374c00697adef6c60132323232533303c3375e66012911000024c103d879800013304133760981014000374c00e00a2a66607866e3d22100002132533303d302f303f375400226608466ec1301014000304330403754002008200864a66607aa66608200229445280a6103d87a80001301833042374c00297ae03233001001002225333042001133043337609801014000375006a97adef6c6013232323253330423375e6601e911000024c103d879800013304733760981014000375007200a2a66608466e3d22100002132533304330353045375400226609066ec1301014000304930463754002008200864a666086606a002298103d87a80001301e33048375000297ae03370000207226608e66ec0dd48011ba800133006006003375a60880066eb8c108008c118008c1100044cc104cdd81ba9002374c0026600c00c0066eacc0f800cdd7181e0011820001181f0009919001191980080080111299981e0008a4c264a66607a00229309919299981d9816981e9baa33008375c607a60820086eb8c0f40084cc014014cc10000800454cc0f12401326b65797320696e206173736f63696174697665206c697374206172656e277420696e20617363656e64696e67206f7264657200163041002303f001303f0013303a33760981014000375005897adef6c60225333035337200040022980103d8798000153330353371e0040022980103d87a800014c103d87b800037566014606c6ea8c028c0d8dd50080a511533034491146d7573745f6164645f666565203f2046616c73650014a02a666066a666066006294454cc0d12411d6d7573745f686f6c645f61646d696e5f746f6b656e203f2046616c73650014a02a666066a666066004294454cc0d12411e6d7573745f696e6372656d656e745f636f756e746572203f2046616c73650014a02a666066002294454cc0d12401256d7573745f70726573657276655f73686970796172645f706f6c696379203f2046616c73650014a029405280a503371e6eb8c024c0d4dd500200a19b87375a602260686ea800ccdc000a2400466e2120003330093756600e60666ea8c01cc0ccdd50069bae3010303337540526eb8c01cc0ccdd501499810000816299999981b00088008a998178158b0a998178158b0a998178158b0a998178158b181998181baa001153302e029163004302f37540022a6605a04e2c60620026601201e466ebcc02cc0b8dd5000980598171baa3002302e3754010264a666056603000e264a6660600022a6605a04e2c264a6660626068004264a66605c603460606ea80044c8c8c94ccc0c4c08cc0ccdd51980380b91919198008009980100119299981a9811181b9baa00114bd6f7b63009bab303b303837540026601c6eacc02cc0dcdd51805981b9baa00301622533303900114a0264a66606c66e3cccdc6240006e35221045348495000375c607800491104534849500014a2266006006002607800244a666070002297ae01330393036303a00133002002303b001132533303230243034375400226464a666068a66606864646466e24cdc11bad303d001375a607a607c00466e08dd6981e8011bad303d303e00130393754646460266607a6ea0cdc11bad303e002375a607c0026607a6ea0cdc11bad303e303f002375a607c607e00297ae0303a375464646464602c660806ea0cdc099b82375a608200800266e08dd69820801001998201ba83370400600297ae0375a6080608200260786ea8c0fcc0f0dd50041bad303e303f001303a375460069001181c9baa30023370060086eacc034c0e4dd51806981c9baa013483fe47d004c0e0dd5180099b8030033756601860706ea802520ff91f401230103303a3750002660749810101004bd700a51153303549011f6d7573745f726573706563745f6d61785f6d696e696e67203f2046616c73650014a02a666068002294454cc0d524011b6d7573745f70726573657276655f646174756d203f2046616c73650014a02940cdd78130021199806000a4410048810015330334913f65787065637420536f6d652870657263656e7461676529203d20726174696f6e616c2e6e6577286d61785f617374657269615f6d696e696e672c20313030290016533303130234832004530103d87a80001533303133710906400a4000260186606c60186606c6ea0cdc0a400004c6606c6ea0cdc024000906380a5eb812f5c0260186606c60186606c6ea0098cc0d9301021864004bd7025eb8054cc0c92401b565787065637420536f6d65285f29203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207574696c732e69735f736869705f746f6b656e5f696e5f7574786f28696e7075742e6f75747075742c2073686970796172645f706f6c696379290a2020202020202020202020207d2c0a202020202020202020202900163302100102d53333330370011001153303002c16153303002c16153303002c16153303002c163034303137540022a6605e0542c600a60606ea800454cc0b80a058c0c8004cc0280408cdd7980618179baa001300c302f37546006605e6ea802454ccc0ad4ccc0acc074c0b4dd519800808929998162999816180f18171baa300c302f37546018605e6ea8c00cc0bcdd50008a5114a0266e21200033300537566006605e6ea8c00cc0bcdd50009bae300c302f375404a6eb8c00cc0bcdd50128a5014a229405288a998162481296f7074696f6e2e69735f736f6d652861646d696e5f746f6b656e5f696e70757429203f2046616c73650014a044646600200200644a6660640022980103d87a800013232533303030050021300b330350024bd70099802002000981b001181a0009181818188009181798181818000911192999815980c18169baa0011480004dd6981898171baa00132533302b3018302d37540022980103d87a80001323300100137566064605e6ea8008894ccc0c4004530103d87a8000132323253330303371e00e6eb8c0c800c4c02ccc0d4dd4000a5eb804cc014014008dd69819001181a8011819800998020018011119198008008019129998170008a60103d87a80001323232533302d3371e00c6eb8c0bc00c4c020cc0c8dd3000a5eb804cc014014008dd59817801181900118180009ba548000c098dd50090a9981280f0b181480099800804119baf30033026375400200844646600200200644a666052002297ae0132325333027300500213302c00233004004001133004004001302d002302b0012302700130253022375400e2a6604092123657870656374205370656e6428617374657269615f72656629203d20707572706f73650016375c6048604a0046eb4c08c004c07cdd50079bac3021302230220023758604000260386ea8c07c008c078c07c004c068dd50008a4c2a660309211856616c696461746f722072657475726e65642066616c7365001365632533301630080011533301a301937540082930a9980b80a0b0a99980b18018008a99980d180c9baa004149854cc05c0505854ccc058c00800454ccc068c064dd50020a4c2a6602e0282c2a6602e0282c602e6ea800cdc3a40086e1d2002533333301a00110011533013010161533013010161533013010161533013010163300100300f225333011300330133754004264a66602c0022a660260042c26464a6660300022a6602a0082c264a66603260380042930a9980b0028b19299999980e8008a9980b0028b0a9980b0028b0a9980b0028b0a9980b0028b09bae001301a001301a00232533333301b0011533014003161533014003161533014003161375a0022a660280062c603000260286ea800854cc04800458dc3a4000a66666602a00220022a6601c0182c2a6601c0182c2a6601c0182c2a6601c0182c6eb4004dd6800a4967657870656374205b617374657269615f696e7075745d203d0a2020202020206c6973742e66696c74657228696e707574732c20666e28696e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d20617374657269615f726566207d290049019c657870656374205b617374657269615f6f75747075745d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d20617374657269615f696e7075742e6f75747075742e61646472657373207d2c0a20202020202020202020290049013f65787065637420496e6c696e65446174756d28617374657269615f6f75747075745f646174756d29203d20617374657269615f6f75747075742e646174756d0049014065787065637420617374657269615f6f75747075745f646174756d3a2041737465726961446174756d203d20617374657269615f6f75747075745f646174756d0049011972656465656d65723a204173746572696152656465656d657200490113646174756d3a2041737465726961446174756d005734ae7155ceaab9e5573eae815d0aba257481", - "hash": "fc3372061c28da6bb5dcc0bb87dbd0cb78a664b13e80fc80fc4de4bd" + "compiledCode": "590df501000032323232323232323232323232322232232232323232232323232253330163232323232323232533301e300c3020375400e264646464a666044602a60486ea80044c8c8c8c8c8c8c94ccc0a4c0700184c94ccc0b800454cc0ac094584c94ccc0bcc0c80084c94ccc0b0c064c0b8dd500089919191919192999819299981919baf300b303537540106e98cc894ccc0d0c09c0b040044c8c8cc00400400c894ccc0ec0044cc0f0cdd82601014000374c00697adef6c60132323232533303b3375e66012911000024c103d879800013304033760981014000374c00e00a2a66607666e3d22100002132533303c302f303e375400226608266ec13010140003042303f3754002008200864a666078a66608000229445280a6103d87a80001301d33041374c00297ae03233001001002225333041001133042337609801014000375006a97adef6c6013232323253330413375e6601e911000024c103d879800013304633760981014000375007200a2a66608266e3d22100002132533304230353044375400226608e66ec1301014000304830453754002008200864a666084606a002298103d87a80001302333047375000297ae03370000207226608c66ec0dd48011ba800133006006003375a60860066eb8c104008c114008c10c0044cc100cdd81ba9002374c0026600c00c0066eacc0f400cdd7181d801181f801181e8009919001191980080080111299981d8008a4c264a66607800229309919299981d1816981e1baa33008375c607860800086eb8c0f00084cc014014cc0fc00800454cc0ed2401326b65797320696e206173736f63696174697665206c697374206172656e277420696e20617363656e64696e67206f7264657200163040002303e001303e0013303933760981014000375005897adef6c60225333034337200040022980103d8798000153330343371e0040022980103d87a800014c103d87b800037566016606a6ea8c02cc0d4dd50080a511533033491146d7573745f6164645f666565203f2046616c73650014a02a666064a666064006294454cc0cd2411d6d7573745f686f6c645f61646d696e5f746f6b656e203f2046616c73650014a02a666064a666064004294454cc0cd2411e6d7573745f696e6372656d656e745f636f756e746572203f2046616c73650014a02a666064002294454cc0cd2401256d7573745f70726573657276655f73686970796172645f706f6c696379203f2046616c73650014a029405280a503371e6eb8c028c0d0dd500200a19b87375a602460666ea800ccdc000a2400466e21200033300a3756601060646ea8c020c0c8dd50069bae3011303237540526eb8c020c0c8dd501499810000815a99999981a80088008a998170150b0a998170150b0a998170150b0a998170150b181918179baa001153302d028163005302e37540022a6605804c2c60600026600201e466ebcc030c0b4dd5000980618169baa3003302d37540102a666052602e00c264a66605c0022a6605604a2c264a66605e6064004264a6660586032605c6ea80044c8c8c94ccc0bcc088c0c4dd51980780b1191980080099198008009929998199810981a9baa00114bd6f7b63009bab3039303637540026601c6eacc02cc0d4dd51805981a9baa00301522533303700114bd7009981c181a981c80099801001181d00091299981b0008a5013253330333371e666e312000371a911045348495000375c607200491104534849500014a22660060060026072002264a666060604660646ea80044c8c94ccc0c94ccc0c8c8c8c8cdc499b82375a60760026eb4c0ecc0f0008cdc11bad303b002375a60766078002606e6ea8c8c8c05ccc0ecdd419b82375a60780046eb4c0f0004cc0ecdd419b82375a6078607a0046eb4c0f0c0f40052f5c060706ea8c8c8c8c8c068cc0f8dd419b81337046eb4c0fc010004cdc11bad303f0020033303e375066e0800c0052f5c06eb4c0f8c0fc004c0e8dd5181e981d1baa008375a6078607a00260706ea8c00d200230373754600460086eacc034c0dcdd51806981b9baa01230363754600260066eacc030c0d8dd50049180a1981c1ba8001330384c010101004bd700a51153303349011f6d7573745f726573706563745f6d61785f6d696e696e67203f2046616c73650014a02a666064002294454cc0cd24011b6d7573745f70726573657276655f646174756d203f2046616c73650014a02940cdd78128021199806000a4410048810015330314913f65787065637420536f6d652870657263656e7461676529203d20726174696f6e616c2e6e6577286d61785f617374657269615f6d696e696e672c20313030290016533302f30224832004530103d87a80001533302f33710906400a400026020660686020660686ea0cdc0a400004a660686ea0cdc024000906380a5eb812f5c026020660686020660686ea0094cc0d1301021864004bd7025eb8054cc0c12401ff65787065637420536f6d65285f29203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020206c6973742e616e79280a20202020202020202020202020202020646963742e6b6579732876616c75652e746f6b656e7328696e7075742e6f75747075742e76616c75652c2073686970796172645f706f6c69637929292c0a20202020202020202020202020202020666e286e616d6529207b207574696c732e6861735f707265666978282253484950222c206e616d6529207d2c0a202020202020202020202020202020290a2020202020202020202020207d2c0a202020202020202020202900163302000102b53333330350011001153302e02a16153302e02a16153302e02a16153302e02a163032302f37540022a6605a0502c600a605c6ea800454cc0b009858c0c0004cc00403c8cdd7980618169baa001300c302d37546006605a6ea802054ccc0a54ccc0a4c070c0acdd519804808129998151998152999815180e98161baa300c302d37546018605a6ea8c00cc0b4dd50008a5014a294128899b8848000ccc014dd5980198169baa3003302d37540026eb8c030c0b4dd50121bae3003302d375404829405288a5014a22a660549201296f7074696f6e2e69735f736f6d652861646d696e5f746f6b656e5f696e70757429203f2046616c73650014a044646600200200644a666060002297ae013232533302e300500213303300233004004001133004004001303400230320012302e302f0012302d302e302e0012223253330293017302b37540022900009bad302f302c375400264a666052602e60566ea8004530103d87a80001323300100137566060605a6ea8008894ccc0bc004530103d87a80001323232533302e3371e00e6eb8c0c000c4c03ccc0ccdd4000a5eb804cc014014008dd6981800118198011818800998020018011119198008008019129998160008a60103d87a80001323232533302b3371e00c6eb8c0b400c4c030cc0c0dd3000a5eb804cc014014008dd598168011818001181700098129baa0123028302537540022a6604692013c65787065637420536f6d6528617374657269615f696e70757429203d2066696e645f696e70757428696e707574732c20617374657269615f726566290016323300200923375e600a604c6ea8004008c09cc090dd50051119198008008019129998140008a60103d87a80001323253330263005002130073302b0024bd70099802002000981600118150009ba5480008c09400454cc07d24123657870656374205370656e6428617374657269615f72656629203d20707572706f73650016375c604660480046eb4c088004c078dd50079bac3020302130210023758603e00260366ea8c078008c074c078004c064dd50008a4c2a6602e9211856616c696461746f722072657475726e65642066616c73650013656325333015300800115333019301837540082930a9980b0098b0a99980a98018008a99980c980c1baa004149854cc05804c5854ccc054c00800454ccc064c060dd50020a4c2a6602c0262c2a6602c0262c602c6ea800cdc3a40086e1d200253333330190011001153301200f16153301200f16153301200f16153301200f163300100300e225333010300330123754004264a66602a0022a660240042c26464a66602e0022a660280082c264a66603060360042930a9980a8028b19299999980e0008a9980a8028b0a9980a8028b0a9980a8028b0a9980a8028b09bae0013019001301900232533333301a0011533013003161533013003161533013003161375a0022a660260062c602e00260266ea800854cc04400458dc3a4000a66666602800220022a6601a0162c2a6601a0162c2a6601a0162c2a6601a0162c6eb4004dd6800a499c657870656374205b617374657269615f6f75747075745d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d20617374657269615f696e7075742e6f75747075742e61646472657373207d2c0a20202020202020202020290049013f65787065637420496e6c696e65446174756d28617374657269615f6f75747075745f646174756d29203d20617374657269615f6f75747075742e646174756d0049014065787065637420617374657269615f6f75747075745f646174756d3a2041737465726961446174756d203d20617374657269615f6f75747075745f646174756d0049011972656465656d65723a204173746572696152656465656d657200490113646174756d3a2041737465726961446174756d005734ae7155ceaab9e5573eae815d0aba257481", + "hash": "04bb9fa4cbf75e950f67bd4a30b04253326517628fea18d7f3babd10" }, { "title": "deploy.spend", @@ -70,8 +70,8 @@ } } ], - "compiledCode": "5901b101000032323232323232322222533300553330053370e900018039baa3232330010013758600460146ea8c008c028dd50019129998060008a60103d87a80001323253323300b32533300c533300c3370e900018071baa3007300f3754600e601e6ea8c004c03cdd50020a5114a0266e2120003332223253330103370e900118091baa0011480004dd6980b18099baa0013253330103370e900118091baa00114c103d87a8000132330010013756602e60286ea8008894ccc058004530103d87a8000132323253330153371e00e6eb8c05c00c4c02ccc068dd4000a5eb804cc014014008dd6980b801180d001180c000991980080080211299980a8008a6103d87a8000132323253330143371e00e6eb8c05800c4c028cc064dd3000a5eb804cc014014008dd5980b001180c801180b8009bab3001300f37546002601e6ea8010dd7180398079baa00b375c6002601e6ea802c5281180918098008980099808001a5eb80dd2a40002660080080026020004601c0024601800229445280a4c2a6600c9211856616c696461746f722072657475726e65642066616c736500136565734ae7155ceaab9e5573eae815d0aba201", - "hash": "01decf81816db66f7d3626bf9ec0a381f53357313b8614f3bab70c00" + "compiledCode": "5901b701000032323232323232322222533300553330053370e900018039baa3232330010013758600460146ea8c008c028dd50019129998060008a60103d87a80001323253323300b32533300c33300c533300c3370e900018071baa3007300f3754600e601e6ea8c004c03cdd50020a5014a294128899b8848000ccc888c94ccc040cdc3a400460246ea8004520001375a602c60266ea8004c94ccc040cdc3a400460246ea8004530103d87a8000132330010013756602e60286ea8008894ccc058004530103d87a8000132323253330153371e00e6eb8c05c00c4c02ccc068dd4000a5eb804cc014014008dd6980b801180d001180c000991980080080211299980a8008a6103d87a8000132323253330143371e00e6eb8c05800c4c028cc064dd3000a5eb804cc014014008dd5980b001180c801180b8009bab3001300f37546002601e6ea8010dd7180398079baa00b375c6002601e6ea802c5281180918098008980099808001a5eb80dd2a40002660080080026020004601c0024601800229445280a4c2a6600c9211856616c696461746f722072657475726e65642066616c736500136565734ae7155ceaab9e5573eae815d0aba201", + "hash": "d987ad9f8f492b43816ced8dc252c675188c4e9b014b4877ee83bb99" }, { "title": "pellet.spend", @@ -95,8 +95,8 @@ } } ], - "compiledCode": "590941010000323232323232323232323232323222323232322323232253330113232323232323232323232533301c3013301e375401e264646464a666040602460446ea80384c8c8c94ccc09c00454cc090078584c94ccc0a0c0ac0084c94ccc0a400454cc098084584c94ccc0a8c0b40084c94ccc09ccdc3a400860526ea80044c8c8c94ccc0a8c084c0b0dd51980880b119191980080099801001192999817181018181baa00114bd6f7b63009bab3034303137540026602c6eacc04cc0c0dd5180998181baa00300e22533303200114a0264a66605e66e3cccdc6240006e352201045348495000375c606a00491104534849500014a2266006006002606a00244a666062002297ae0133032302f30330013300200230340011323232533302d533302d3371202201e294454cc0b92401176861735f656e6f7567685f6675656c203f2046616c73650014a02a66605aa66605a002294454cc0b924117646174756d5f7570646174655f6f6b203f2046616c73650014a02a66605aa66605a006294454cc0b9241216f776e5f696e7075745f6861735f61646d696e5f746f6b656e203f2046616c73650014a02a66605a004294454cc0b92401226f776e5f6f75747075745f6861735f61646d696e5f746f6b656e203f2046616c73650014a029405280a503375e008602c660626ea0cdc0807008181998179baa024301d33301337566022605c6ea8018dd7180818171baa025375c6022605c6ea8094c070ccc048dd5980818169baa3010302d375400e6eb8c03cc0b4dd50121bae3010302d37540482a66056921b565787065637420536f6d65285f29203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207574696c732e69735f736869705f746f6b656e5f696e5f7574786f28696e7075742e6f75747075742c2073686970796172645f706f6c696379290a2020202020202020202020207d2c0a202020202020202020202900163301f00102653333330300011001153302902516153302902516153302902516153302902516302d302a37540022a6605092013065787065637420496e6c696e65446174756d286f75745f646174756d29203d206f776e5f6f75747075742e646174756d0016302c302d302d302937540022a6604e0442c60560026600601e466ebcc028c0a0dd5000980518141baa300b302837540042a6604a03e2c60520026600201c466ebcc020c098dd50008019119198008008019129998148008a5eb804c8c94ccc09cc0140084cc0b0008cc0100100044cc010010004c0b4008c0ac004c098c08cdd50070a99810a4920657870656374205370656e64287574786f5f72656629203d20707572706f73650016375c604a604c604c604c0046eb4c090004c080dd500a9bad3022301f375401e2a666038a6660386026603c6ea8cc00c02094ccc0754ccc074c050c07cdd5180118101baa300230203754600660406ea80045288a5013371090001998029bab300330203754600660406ea8004dd7180118101baa017375c600660406ea805c5280a5114a0294454cc0752401296f7074696f6e2e69735f736f6d652861646d696e5f746f6b656e5f696e70757429203f2046616c73650014a04604400246042604400244646600200200644a6660420022980103d87a800013232533301f300500213009330240024bd700998020020009812801181180091119299980e1807180f1baa0011480004dd69811180f9baa00132533301c300e301e37540022980103d87a8000132330010013756604660406ea8008894ccc088004530103d87a8000132323253330213371e00e6eb8c08c00c4c02ccc098dd4000a5eb804cc014014008dd69811801181300118120009980200180111191980080080191299980f8008a60103d87a80001323232533301e3371e00c6eb8c08000c4c020cc08cdd3000a5eb804cc014014008dd59810001181180118108009ba548000dd6180d980e180e0011bac301a0013016375460320046030603200260286ea8004526153301249011856616c696461746f722072657475726e65642066616c7365001365632533301030070011325333015001153301200f1613253330163019002149854cc04c04058c94cccccc06800454cc04c0405854cc04c0405854cc04c040584dd68008a998098080b180b80098099baa00315333010300200115333014301337540062930a998088070b0a998088070b18089baa002370e9001299999980a80088008a998070058b0a998070058b0a998070058b0a998070058b19800801805112999806180198071baa0021325333011001153300e002161323253330130011533010004161323253330150011533012006161323253330170011533014008161325333018301b002149854cc05402458c94cccccc07000454cc0540245854cc0540245854cc0540245854cc054024584dd7000980c800980c80119299999980d0008a998098038b0a998098038b0a998098038b09bad001153301300716301700130170023253333330180011533011005161533011005161533011005161375a0022a6602200a2c602a002602a00464a66666602c0022a6601e0062c2a6601e0062c2a6601e0062c26eb400454cc03c00c58c04c004c03cdd50010a998068008b1b87480014cccccc040004400454cc02401c5854cc02401c5854cc02401c5854cc02401c59240164657870656374205b6f776e5f696e7075745d203d0a202020202020202020206c6973742e66696c74657228696e707574732c20666e28696e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d207574786f5f726566207d290049018f657870656374205b6f776e5f6f75747075745d203d0a2020202020202020202066696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d206f776e5f696e7075742e6f75747075742e61646472657373207d2c0a202020202020202020202900490129657870656374206f75745f646174756d3a2050656c6c6574446174756d203d206f75745f646174756d0049011872656465656d65723a2050656c6c657452656465656d657200490112646174756d3a2050656c6c6574446174756d005734ae7155ceaab9e5573eae815d0aba257481", - "hash": "4af787b962f1e5430cc9dac37a42a530b6c7d2f43b0831952c5b5add" + "compiledCode": "5909740100003232323232323232323232323222323232322323232253330103232323232323232323232533301b3013301d375401e264646464a66603e602460426ea80384c94ccc080c060c088dd50008991929998130008a9981180f0b09929998139815001099299981219b8748010c098dd500089919192999813980f98149baa3300d01423233001001323300100132533302b301e302d3754002297adef6c60137566062605c6ea8004cc050dd5980918169baa3012302d375400601844a66605e002297ae0133030302d303100133002002303200122533302e00114a0264a66605666e3cccdc6240006e35221045348495000375c606200491104534849500014a226600600600260620022646464a666054a66605466e2403c0345288a99815a49176861735f656e6f7567685f6675656c203f2046616c73650014a02a666054a666054002294454cc0ad24117646174756d5f7570646174655f6f6b203f2046616c73650014a02a666054a666054006294454cc0ad241216f776e5f696e7075745f6861735f61646d696e5f746f6b656e203f2046616c73650014a02a666054004294454cc0ad2401226f776e5f6f75747075745f6861735f61646d696e5f746f6b656e203f2046616c73650014a029405280a503375e00860286605c6ea0cdc0806007181818161baa022301b3330113756602060566ea8018dd7180798159baa023375c602060566ea808cc068ccc040dd5980798151baa300f302a375400e6eb8c038c0a8dd50111bae300f302a37540442a66050921ff65787065637420536f6d65285f29203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020206c6973742e616e79280a20202020202020202020202020202020646963742e6b6579732876616c75652e746f6b656e7328696e7075742e6f75747075742e76616c75652c2073686970796172645f706f6c69637929292c0a20202020202020202020202020202020666e286e616d6529207b207574696c732e6861735f707265666978282253484950222c206e616d6529207d2c0a202020202020202020202020202020290a2020202020202020202020207d2c0a202020202020202020202900163301d001023533333302d0011001153302602216153302602216153302602216153302602216302a302737540022a6604a92013065787065637420496e6c696e65446174756d286f75745f646174756d29203d206f776e5f6f75747075742e646174756d00163029302a302a302637540022a6604803e2c6050002646600200201c44a66604e002297ae01323253330253375e601860506ea8008c030c0a0dd5180698141baa00513302a00233004004001133004004001302b00230290013026302337540022a660429213765787065637420536f6d65286f776e5f696e70757429203d2066696e645f696e70757428696e707574732c2070656c6c65745f726566290016323300600d23375e601060486ea8004008c094c088dd50070a9981024922657870656374205370656e642870656c6c65745f72656629203d20707572706f73650016375c6048604a604a604a0046eb4c08c004c07cdd500a9bad3021301e375401e2a666036a6660366026603a6ea8cc00402094ccc070ccc0714ccc070c050c078dd51801980f9baa3003301f37546008603e6ea80045280a514a09444cdc42400066600a6eacc010c07cdd51802180f9baa001375c6006603e6ea805cdd71802180f9baa01714a029445280a51153301c491296f7074696f6e2e69735f736f6d652861646d696e5f746f6b656e5f696e70757429203f2046616c73650014a044646600200200644a6660440022980103d87a800013232533302030050021300b330250024bd7009980200200098130011812000918100009180f981000091119299980d9807180e9baa0011480004dd69810980f1baa00132533301b300e301d37540022980103d87a80001323300100137566044603e6ea8008894ccc084004530103d87a8000132323253330203371e00e6eb8c08800c4c02ccc094dd4000a5eb804cc014014008dd69811001181280118118009980200180111191980080080191299980f0008a60103d87a80001323232533301d3371e00c6eb8c07c00c4c020cc088dd3000a5eb804cc014014008dd5980f801181100118100009ba548000dd6180d180d980d8011bac3019001301537546030004602e603000260266ea8004526153301149011856616c696461746f722072657475726e65642066616c7365001365632533300f30070011325333014001153301100e1613253330153018002149854cc04803c58c94cccccc06400454cc04803c5854cc04803c5854cc04803c584dd68008a998090078b180b00098091baa0031533300f300200115333013301237540062930a998080068b0a998080068b18081baa002370e9001299999980a00088008a998068050b0a998068050b0a998068050b0a998068050b19800801804912999805980198069baa0021325333010001153300d00216132325333012001153300f004161323253330140011533011006161323253330160011533013008161325333017301a002149854cc05002458c94cccccc06c00454cc0500245854cc0500245854cc0500245854cc050024584dd7000980c000980c00119299999980c8008a998090038b0a998090038b0a998090038b09bad001153301200716301600130160023253333330170011533010005161533010005161533010005161375a0022a6602000a2c6028002602800464a66666602a0022a6601c0062c2a6601c0062c2a6601c0062c26eb400454cc03800c58c048004c038dd50010a998060008b1b87480014cccccc03c004400454cc0200185854cc0200185854cc0200185854cc0200185924018f657870656374205b6f776e5f6f75747075745d203d0a2020202020202020202066696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d206f776e5f696e7075742e6f75747075742e61646472657373207d2c0a202020202020202020202900490129657870656374206f75745f646174756d3a2050656c6c6574446174756d203d206f75745f646174756d0049011872656465656d65723a2050656c6c657452656465656d657200490112646174756d3a2050656c6c6574446174756d005734ae7155ceaab9e5573eae815d0aba257481", + "hash": "685582116e8a61470d458a0abb4cc83e24dbc9d56e637fe01ab00e05" }, { "title": "spacetime.spend", @@ -126,7 +126,7 @@ } }, { - "title": "_admin_token", + "title": "admin_token", "schema": { "$ref": "#/definitions/asteria~1types~1AssetClass" } @@ -162,8 +162,8 @@ } } ], - "compiledCode": "592abf01000032323232323232323232323232323232323232323232323232232232222322322322322232533333302a00215323232323233302730013029375400e2a660509211c52756e6e696e672032206172672076616c696461746f72206d696e74001323253330293232323232323232325333032300c30343754010264646464646464a666072602660766ea80484c8c94ccc0ecc054c0f4dd500089919299981e980c181f9baa001132323232325333046001153304303c161325333047304a00213253330443020375a608e004264a6660920022a6608c0802c264a666094609a004264a66608e60466eb4c1280084c94ccc13000454cc124110584c94ccc134c1400084c94ccc128c094c130dd50008991919192999827181518281baa001132323232323232323232323232323232323253330605333060303b33230010012253330660011480004cdc0240046600400460d2002056294454cc1852411c6d7573745f6d696e745f74776f5f617373657473203f2046616c73650014a02a6660c0a6660c0010294454cc1852411e6d7573745f726573706563745f736869705f6e616d65203f2046616c73650014a02a6660c0a6660c000e294454cc1852411f6d7573745f726573706563745f70696c6f745f6e616d65203f2046616c73650014a02a6660c0a6660c000c294454cc185241216d7573745f726573706563745f6d696e5f64697374616e6365203f2046616c73650014a02a6660c0a6660c000a294454cc1852411e6d7573745f686176655f696e697469616c5f6675656c203f2046616c73650014a02a6660c0a6660c0008294454cc1852411b6d7573745f686176655f736869705f6e616d65203f2046616c73650014a02a6660c0a6660c0006294454cc1852411c6d7573745f686176655f70696c6f745f6e616d65203f2046616c73650014a02a6660c0a6660c0004294454cc1852411d6d7573745f686176655f6c61746573745f74696d65203f2046616c73650014a02a6660c0002294454cc18524011c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a029405280a5014a029405280a5014a0607664a6660c0607860c46ea8004520001375a60cc60c66ea8004c94ccc180c0f0c188dd50008a6103d87a800013233001001375660ce60c86ea8008894ccc198004530103d87a800013232325333065300e375c60ce00626084660d46ea00052f5c026600a00a0046eb4c19c008c1a8008c1a0004cc0b0dd5981418311baa01702d3370e6eb4c190c194c194c194c194c194c184dd50099bad30643061375402266e3cdd71831983218321832183218301baa0120173005375c60c460c660c660c660be6ea8044cdc39bad3022305e375402007e66e240f0c8cdc018009bad3024305e375402060026eb4c080c178dd50081299982d99b88001480004c0e40044004cdc780999801a450550494c4f540030043005375a604060b86ea806cc004cc009220104534849500030033004375a603e60b66ea8068dc780a1119b8a0020012373000246e64cc008dd4000a441003001001222533333305d00213232323232323300b0020013371491010128000025333059337100069007099b80483c80400c54ccc164cdc4001a410004266e00cdc0241002800690068a9982d24929576861742061726520796f7520646f696e673f204e6f2049206d65616e2c20736572696f75736c792e0016533305c0011337149101035b5d2900004133714911035b5f2000375c60b666600e00266ec1300102415d00375266e292210129000042233760980103422c2000375266601001000466e28dd7182e0009bae305d001375860b40046eb4c160004c8cdd81ba83058001374e60b20026ea80084c94ccc1680044cdc5245027b7d00002133714911037b5f2000375c60b264646600200200644a6660ba00220062664466ec130103422c2000375266601201260ba00466e29221023a2000333009009305e002337146eb8c174004dd7182f000982f80099801001183000099bb04c10342207d0037520046eac0084c94ccc1680044cdc52441025b5d00002133714911035b5f2000375c60b266600a00266ec1300102415d0037520044466ec1300103422c2000375266600c00c00466e28dd7182d0009bae305b001375800426600a6eb40080044c8c8cdc524410268270000132333001001337006e3400920013371491101270000322253330593371000490000800899191919980300319b8000548004cdc599b80002533305c33710004900a0a40c02903719b8b33700002a6660b866e2000520141481805206e0043370c004901019b8300148080cdc70020011bae002222323300100100422533305a0011004133003305c00133002002305d001223233001001003225333054302e00113371491101300000315333054337100029000099b8a489012d0033002002303200113300533708002900a19b8b3370066e1400520144818000cc0040048894ccc144cdc4801240002002266600600666e1000920143371666e00cdc28012402890300008a998278218b180a18281baa301630503754038a666098604c609c6ea80044c94ccc14400454cc138128584c8c94ccc14c00454cc140130584c8c94ccc15400454cc148138584c8c94ccc15c00454cc150140584c8c94ccc16400454cc158148584c8c94ccc16c00454cc160150584c94ccc170c17c0085261533059055163253333330600011533059055161533059055161533059055161375a0022a660b20aa2c60ba00260ba00464a6666660bc0022a660ae0a62c2a660ae0a62c2a660ae0a62c2a660ae0a62c26eb8004c16c004c16c008c94cccccc17000454cc1541445854cc1541445854cc1541445854cc154144584dd7000982c800982c80119299999982d0008a998298278b0a998298278b0a998298278b09bad001153305304f1630570013057002325333333058001153305104d16153305104d16153305104d161375a0022a660a209a2c60aa00260aa00464a6666660ac0022a6609e0962c2a6609e0962c2a6609e0962c26eb400454cc13c12c58c14c004c13cdd50008a998268248b299999982980088008a998260240b0a998260240b0a998260240b0a998260240b182818269baa001153304b4913165787065637420496e6c696e65446174756d28736869705f646174756d29203d20736869705f73746174652e646174756d0016300e304c37540022a6609408a2c609c002646600200203444a66609a002297ae013232533304b32533304c3028304e3754002266e3c068dd7182918279baa00114a06024609c6ea8c048c138dd500109982800119802002000899802002000982880118278008a998240210b1bae3048001153304704116304b0013300400f23300f48810550494c4f5400375c608e0022a6608a07c2c6eb8c11400454cc1100f458c120004cc0040308cc031221045348495000375c608800244646600200200644a666090002297adef6c60132325333046300500213304b00233004004001133004004001304c002304a001533303f301930413754002264a6660880022a660820722c26464a66608c0022a660860762c264a66608e60940042930a9982201e0b1929999998258008a9982201e0b0a9982201e0b0a9982201e0b0a9982201e0b09bae00130480013048002325333333049001153304203a16153304203a16153304203a161375a0022a660840742c608c00260846ea800454cc1000e0594cccccc118004400454cc0fc0dc5854cc0fc0dc5854cc0fc0dc5854cc0fc0dc58c10cc100dd50008a9981f24813e65787065637420496e6c696e65446174756d28617374657269615f646174756d29203d20617374657269615f696e7075742e6f75747075742e646174756d00163001303f3754600a607e6ea8c108c0fcdd500111821182198218008a9981e249ff65787065637420536f6d6528617374657269615f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656d6e7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d20617374657269615f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900163300200e232533303c3016303e375400229404cdc79bae3042303f37540020506004607c6ea8c008c0f8dd51802181f1baa00123040001132533303e005153303b03816132533303f30420061533303b3370e90009bad303e0011533303b533303b3015303d375400429445280a51153303c4901226f7074696f6e2e69735f736f6d6528736869705f696e70757429203f2046616c73650014a02a660780722c2a660780722c608000a6600201a464646600200266004004660106eacc014c0fcdd51802981f9baa00300a22533304100114a0264a66607c66010911045348495000375c608800429444cc00c00c004c110004894ccc10000452f5c0266082607c608400266004004608600244646600200200644a6660800022980103d87a800013232533303e30050021301b330430024bd70099802002000982200118210009181f181f8009119b8f33371890001b8d00200100233001323300100100622533303b00114bd6f7b630099191919299981d99b8f489000021003133040337606ea4008dd3000998030030019bab303d003375c6076004607e004607a0020064464a66606e602660726ea800452f5bded8c026eacc0f4c0e8dd50009980180100091191980080080191299981d8008a60103d87a80001323232533303a3371e00c6eb8c0f000c4c05ccc0fcdd3000a5eb804cc014014008dd5981e001181f801181e8009bae3038303537540102a6606692120657870656374204d696e7428706f6c6963795f696429203d20707572706f7365001630373038303830380023756606c002606c606c0046eb0c0d0004c0d0c0d0008dd6181900098171baa303100230303031001302c37540122930a9981524811856616c696461746f722072657475726e65642066616c7365001365632533302930030011533302d302c37540042930a998150140b0a99981498028008a99981698161baa002149854cc0a80a05854cc0a80a058c0a8dd5000a99999981780408040a998140130b0a998140130b0a998140130b0a998140130b0a998142491d52756e6e696e672033206172672076616c696461746f72207370656e640013323232232322533302e3232323232323232323232323232323232323232323232325333046302030483754002264a66608e604660926ea80604c8c8c94ccc13800454cc12c0e8584c94ccc13cc1480084c94ccc130c0a0c138dd500089919192999827981498289baa3300201e232323300100133002002325333053302f30553754002297adef6c601375660b260ac6ea8004cc010dd59808182a9baa30103055375400600c44a6660ae00229404c94ccc150cdc79bae305a00201414a226600600600260b400244a6660ac002297ae013305730543058001330020023059001132323232532333054302e003132323232533305c001153305904916132533305d3060002132533305a3035305c3754002264646464a6660bc607460c06ea80044c8c94ccc180c0f0c188dd50008991919192999832181f18331baa00113232323232323232533306c533306c3370e6eb4c0a8c1bcdd500899b8003201714a22a660da921156d7573745f7570646174655f78203f2046616c73650014a02a6660d8a6660d800a294454cc1b5241156d7573745f7570646174655f79203f2046616c73650014a02a6660d8a6660d8008294454cc1b5241186d7573745f7570646174655f6675656c203f2046616c73650014a02a6660d8a6660d8006294454cc1b52411f6d7573745f7570646174655f75707065725f626f756e64203f2046616c73650014a02a6660d8a6660d8038294454cc1b52411c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660d8a6660d8010294454cc1b52411d6d7573745f686176655f656e6f7567685f6675656c203f2046616c73650014a02a6660d8a6660d800e294454cc1b5241206d7573745f70726573657276655f736869705f76616c7565203f2046616c73650014a02a6660d8a6660d800c294454cc1b5241216d7573745f70726573657276655f70696c6f745f746f6b656e203f2046616c73650014a02a6660d8a6660d8004294454cc1b52411e6d7573745f726573706563745f6d61785f7370656564203f2046616c73650014a02a6660d8002294454cc1b52401206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a029405280a5014a029405280a5014a02940c060034c8c8cdc499b82375a60e40046eb4c1c8c1cc004cdc11bad3072001375a60e460e600460dc6ea8094c1b4dd5183818369baa0073370e6eb4c1bcc1c0c1c0c1c0c1c0c1c0c1b0dd500700499b87375a604a60d66ea8034cdc081800319b87375a602a60d46ea8030cdc001580899b8f026375c60d860da60da60da60da60d26ea802ccdd7981198341baa302330683754036604660d06ea8034cdc48010160a99832a495865787065637420536f6d6528737065656429203d0a20202020202020202020726174696f6e616c2e6e65772864697374616e63652c2074785f6c61746573745f74696d65202d2074785f6561726c696573745f74696d652900163301f0023370200600a66e08004120c8cdc0180080698008061299983119b88001480004c1000044004dd6983318319baa001153306105516301c30623754603a60c46ea80a4dd6983218309baa001153305f05216301a30603754603460c06ea809ccc0d000413d4cccccc18c004400454cc1701385854cc1701385854cc1701385854cc17013858c180c174dd50008a9982d8260b1803982e1baa001153305a04a16305e0013300f02423375e602a60b66ea8004c054c16cdd5180b182d9baa00e375a60b860ba0046eb4c16c004c15cdd50148a99982a181800189919299982d0008a9982b8238b099299982d982f001099299982c1819982d1baa001132323232533305c3036305e3754002264a6660ba607060be6ea80044c8c8c8c94ccc184c0f4c18cdd5000899191919192999833299983300b0a5115330674911c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660cca6660cc00a294454cc19d241216d7573745f686176655f70656c6c65745f706f736974696f6e203f2046616c73650014a02a6660cca6660cc008294454cc19d241206d7573745f6e6f745f6578636565645f6361706163697479203f2046616c73650014a02a6660cca6660cc006294454cc19d241196d7573745f7570646174655f646174756d203f2046616c73650014a02a6660cca6660cc004294454cc19d241206d7573745f70726573657276655f736869705f76616c7565203f2046616c73650014a02a6660cc002294454cc19d2401206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a029405280a5014a02940c048dd6983598341baa0053375e604460ce6ea8c088c19cdd500d181118339baa00e3375e0146080660d06ea0cdc0015807983518331baa03c3371266e000a80381294ccc184cdc38139bad301f30643754006266e1c094dd6980798321baa00314a02a660c40aa2c603a60c66ea8c074c18cdd5015299982f981c98309baa0011325333064001153306105616132325333066001153306305816132325333068001153306505a1613232533306a001153306705c16132533306b306e002149854cc1a017458c94cccccc1bc00454cc1a01745854cc1a01745854cc1a01745854cc1a0174584dd7000983600098360011929999998368008a9983302d8b0a9983302d8b0a9983302d8b09bad001153306605b16306a001306a00232533333306b0011533064059161533064059161533064059161375a0022a660c80b22c60d000260d000464a6666660d20022a660c40ae2c2a660c40ae2c2a660c40ae2c26eb400454cc18815c58c198004c188dd50008a9983002a8b299999983300088008a9982f82a0b0a9982f82a0b0a9982f82a0b0a9982f82a0b183198301baa001153305e49013c65787065637420496e6c696e65446174756d2870656c6c65745f646174756d29203d2070656c6c65745f696e7075742e6f75747075742e646174756d0016300a305f3754603460be6ea8c188c17cdd50008a9982ea49ff65787065637420536f6d652870656c6c65745f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656e6b7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d2070656c6c65745f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900163300e02a232533305d3037305f375400229404cdc79bae306330603754002096603260be6ea8c064c17cdd5180d182f9baa0013303200104d53333330610011001153305a04c16153305a04c16153305a04c16153305a04c16305e305b37540022a660b20942c600a60b46ea800454cc16012058c170004cc0340888cdd79809982c9baa001301330593754602860b26ea8030dd6982d182b9baa0291325333055303000415333055302f3057375466010048464a6660ae606260b26ea8004528099b8f375c60ba60b46ea800410cc04cc164dd51809982c9baa301430593754002264a6660ac606460b06ea80044c8c8c94ccc1654ccc1640245288a9982d24811c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660b2a6660b2006294454cc169241226d7573745f686176655f617374657269615f706f736974696f6e203f2046616c73650014a02a6660b2a6660b2004294454cc1692411c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02a6660b2002294454cc1692401206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a029405280a503005375a60bc60b66ea800ccdc4199804180181100580ca400066ebcdd31982d99bb037500386ea00692f5bded8c06e98cc16d2f7b63001010000010100004bd6f7b6300a9982b8250b1809182c1baa30123058375403e2a660ac9201ff65787065637420536f6d65285f29203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656e7429202d3e0a20202020206120202020202020202020202020616464725f7061796d656e74203d3d20617374657269615f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900161325333056533305600614a22a660ae9211c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660ac002294454cc15d24011c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02940cdc4199803180081000480ba40004646600200200444a6660b6002297adef6c60132323232533305b3371e9101000021003133060337606ea4008dd3000998030030019bab305d003375c60b600460be00460ba0026e240488c164c168c168004c14cdd501318161998009bab300e30533754601c60a66ea8018010048888c94ccc14cc0bcc154dd50008a400026eb4c164c158dd50009929998299817982a9baa00114c0103d87a800013233001001375660b460ae6ea8008894ccc164004530103d87a8000132323253330583371e00e6eb8c16800c4c0d4cc174dd4000a5eb804cc014014008dd6982d001182e801182d800998020018010a99828249e165787065637420536f6d65285f29203d0a2020202020206c6973742e66696e64280a2020202020202020696e707574732c0a2020202020202020666e28696e70757429207b0a202020202020202020207574696c732e69735f70696c6f745f746f6b656e5f696e5f7574786f280a202020202020202020202020696e7075742e6f75747075742c0a20202020202020202020202073686970796172645f706f6c6963792c0a20202020202020202020202070696c6f745f746f6b656e5f6e616d652c0a20202020202020202020290a20202020202020207d2c0a20202020202029001622323300100100322533305600114c0103d87a8000132323253330553371e00c6eb8c15c00c4c0c8cc168dd3000a5eb804cc014014008dd5982b801182d001182c00091191980080080191299982a8008a6103d87a8000132325333053300500213030330580024bd70099802002000982c801182b8009bae3052304f37540022a6609a9215d6578706563742053637269707443726564656e7469616c2873686970796172645f706f6c69637929203d0a202020202020736869705f696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c00163008304e37546010609c6ea8c024c138dd50008a9982601d8b18280009980080c119baf3007304d375400200644646600200200644a6660a0002297ae013232533304e30050021330530023300400400113300400400130540023052001304d304a37540302a6609092120657870656374205370656e6428736869705f72656629203d20707572706f73650016304c304937540022a6608e92015865787065637420536f6d65286d61785f73706565645f726174696f6e616c29203d0a202020202020726174696f6e616c2e6e6577286d61785f73706565642e64697374616e63652c206d61785f73706565642e74696d6529001633001375a600460906ea80bcdd6980198241baa02f225333046302000114c103d87a80001533304633710002900009811998259811998259ba830240023304b3750604800297ae04bd7009811998259811998259ba80023304b375000297ae04bd70118250009182498250009bad30473048002375c608c002608c0046eb8c110004c110008dd6982100098210011bad30400013040002375a607c00260746ea8040c0f0c0f4c0f4c0f4008dd5981d800981d981d8011bac3039001303930390023758606e00260666ea8c0d8008c0d4c0d8004c0c4dd50008a4c2a6605e92011856616c696461746f722072657475726e65642066616c7365001365632533302d30070011325333032001153302f0251613232533303400115330310271613253330353038002149854cc0c80a058c94cccccc0e400454cc0c80a05854cc0c80a05854cc0c80a0584dd68008a998190140b181b000981b00119299999981b8008a998180130b0a998180130b0a998180130b09bad0011533030026163034001303037540042a66605a6012002264a6660640022a6605e04a2c264a666066606c0042930a998180130b19299999981b8008a998180130b0a998180130b0a998180130b09bad0011533030026163034001303037540042a66605a60100022a66606260606ea8008526153302e024161533302d3370e90030008a99981898181baa002149854cc0b80905854cc0b809058c0b8dd5000a99999981980088008a998160110b0a998160110b0a998160110b0a998160110b19800801010912999815180218161baa002132533302f001153302c00216132325333031001153302e00416132325333033001153303000616132325333035001153303200816132325333037001153303400a16132325333039001153303600c16132533303a303d002149854cc0dc03458c94cccccc0f800454cc0dc0345854cc0dc0345854cc0dc034584dd68008a9981b8068b181d800981d80119299999981e0008a9981a8058b0a9981a8058b0a9981a8058b0a9981a8058b09bae0013039001303900232533333303a0011533033009161533033009161533033009161533033009161375c002606e002606e00464a6666660700022a6606200e2c2a6606200e2c2a6606200e2c26eb400454cc0c401c58c0d4004c0d4008c94cccccc0d800454cc0bc0145854cc0bc0145854cc0bc014584dd68008a998178028b1819800981980119299999981a0008a998168018b0a998168018b0a998168018b09bad001153302d003163031001302d37540042a660560022ca66666605e01020102a6605003e2c2a6605003e2c2a6605003e2c2a6605003e2c605a60546ea801cdc3a40006e1d2004370e90011ba548000dc0a40002a660460022c2a660460022c2a660460022c2a660460022c920191496e636f72726563742072656465656d6572207479706520666f722076616c696461746f72207370656e642e0a2020202020202020202020202020202020202020446f75626c6520636865636b20796f7520686176652077726170706564207468652072656465656d657220747970652061732073706563696669656420696e20796f757220706c757475732e6a736f6e00375a0026eb4004dd68009bad001375c0026eb800524161657870656374205b736869705f696e7075745d203d0a2020202020206c6973742e66696c74657228696e707574732c20666e28696e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d20736869705f726566207d2900490196657870656374205b736869705f6f75747075745d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d20736869705f696e7075742e6f75747075742e61646472657373207d2c0a20202020202020202020290049013965787065637420496e6c696e65446174756d28736869705f6f75747075745f646174756d29203d20736869705f6f75747075742e646174756d0049013765787065637420736869705f6f75747075745f646174756d3a2053686970446174756d203d20736869705f6f75747075745f646174756d004901476578706563742046696e6974652874785f6561726c696573745f74696d6529203d2076616c69646974795f72616e67652e6c6f7765725f626f756e642e626f756e645f74797065004901456578706563742046696e6974652874785f6c61746573745f74696d6529203d2076616c69646974795f72616e67652e75707065725f626f756e642e626f756e645f747970650049012f6578706563742070656c6c65745f646174756d3a2050656c6c6574446174756d203d2070656c6c65745f646174756d0049011672656465656d65723a205368697052656465656d657200490110646174756d3a2053686970446174756d0049013265787065637420617374657269615f646174756d3a2041737465726961446174756d203d20617374657269615f646174756d0049019c657870656374205b28736869705f746f6b656e5f6e616d652c2031295d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206d696e7465645f746f6b656e732c0a202020202020202020202020666e28746f6b656e29207b207574696c732e6861735f707265666978282253484950222c20746f6b656e2e31737429207d2c0a20202020202020202020290049019e657870656374205b2870696c6f745f746f6b656e5f6e616d652c2031295d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206d696e7465645f746f6b656e732c0a202020202020202020202020666e28746f6b656e29207b207574696c732e6861735f707265666978282250494c4f54222c20746f6b656e2e31737429207d2c0a202020202020202020202900490153657870656374205b736869705f73746174655d203d0a202020202020202020207472616e73616374696f6e2e66696e645f7363726970745f6f757470757473286f7574707574732c20706f6c6963795f6964290049012965787065637420736869705f646174756d3a2053686970446174756d203d20736869705f646174756d00490120657870656374205b285f2c202d31295d203d206d696e7465645f746f6b656e730049011a72656465656d65723a20536869707961726452656465656d6572005734ae7155ceaab9e5573eae815d0aba257481", - "hash": "5aa1058f6f271e7cd8c2ef21836ca3c8b2a69d9e5659297338e348b2" + "compiledCode": "592c220100003232323232323232323232323232323232323232323232232232222322322322322232533333302800215323232323232323330273001302937540122a660509211c52756e6e696e672032206172672076616c696461746f72206d696e74001323253330293232323232323232325333032300c303437540102646464a66606a601e606e6ea80384c8c8c94ccc0e0c048c0e8dd500089919191919299981e980c181f9baa001132323232325333046001153304303e161325333047304a0021325333044301f30463754002264646464a666090604860946ea80044c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c94ccc1694ccc1680805288a9982da4811d6d7573745f62655f76616c69645f61737465726961203f2046616c73650014a02a6660b4a6660b400e294454cc16d241276d7573745f6d696e745f736869705f616e645f70696c6f745f746f6b656e73203f2046616c73650014a02a6660b4a6660b400c294454cc16d241216d7573745f726573706563745f6d696e5f64697374616e6365203f2046616c73650014a02a6660b4a6660b400a294454cc16d2411e6d7573745f686176655f696e697469616c5f6675656c203f2046616c73650014a02a6660b4a6660b4008294454cc16d2411b6d7573745f686176655f736869705f6e616d65203f2046616c73650014a02a6660b4a6660b4006294454cc16d2411c6d7573745f686176655f70696c6f745f6e616d65203f2046616c73650014a02a6660b4a6660b4004294454cc16d2411d6d7573745f686176655f6c61746573745f74696d65203f2046616c73650014a02a6660b4002294454cc16d2401226d7573745f686176655f746f6b656e5f616e645f6d696e616461203f2046616c73650014a029405280a5014a029405280a5053330593034332300100122533305f0011480004c0e8cc008008c188004c8cc004004dd59812982e9baa01822533305f00114bd7009919991119198008008019129998328008801899198339ba733067375200c660ce6ea4dd71832000998339ba8375a60ca00297ae03300300330690023067001375c60bc0026eacc17c004cc00c00cc18c008c1840044c0d4ccc080dd59812182e1baa01702700814a066e1cdd6982f182f982f982f982f982f982d9baa013375a60bc60b66ea8044cdc79bae305d305e305e305e305e305a375402400a66e3cdd7182e182e982e982e982c9baa0110053370e6eb4c07cc160dd500801d99b89038323370060026eb4c080c160dd500818009bad301a305837540204a6660aa66e2000520001303300110013375e6e98080dd3191919299982b1819240002002264646600200200644a6660ba0022660bc66ec0dd48139ba60034bd6f7b630099191919299982e98049980501580109983119bb037520566e9801c01454ccc174c0740084c94ccc178c0e0c180dd500089983199bb0375205860c860c26ea80040104010c94ccc1794ccc1880045288a5014c0103d87a80001303b33063374c00297ae03233001001002225333063001133064337606ea40353010101004bd6f7b630099191919299983198079980800880109983419bb03752022981010100005153330633371e022004264a6660c8607c60cc6ea80044cc1a4cdd81ba9012306a30673754002008200864a6660c8607c002298103d87a80001304133069375000297ae033700002900109983419bb037520046ea0004cc01801800cdd698328019bae306300230670023065001133062337606ea4008dd3000998030030019bab305f003375c60ba00460c200460be0026464004646600200200444a6660ba002293099299982f0008a4c26464a6660b8606c60bc6ea8cc024dd7182f18310021bae305e00213300500533061002001153305d491326b65797320696e206173736f63696174697665206c697374206172656e277420696e20617363656e64696e67206f7264657200163062002306000130600013305b337606ea401130010101004bd6f7b630299982a9818a4000297adef6c6013232330010014bd6f7b63011299982e00089982e99bb0375204c6e9800d2f5bded8c0264646464a6660b86010660120540042660c266ec0dd48151ba60070051533305c301c002133061337606ea40a8dd300380189983099bb037520046e98004cc01801800cdd5982f0019bae305c0023060002305e00132330010014bd6f7b63011299982d80089982e19bb0375200c98010101004bd6f7b630099191919299982d98039980400500109983019bb037520149810101000051533305b3371e0140042660c066ec0dd4805261010100003133060337606ea4008dd4000998030030019bad305d003375c60b600460be00460ba0026ebd300103d879800022533305533720004002298103d8798000153330553371e0040022980103d87a800014c103d87b8000330024890550494c4f540030033004375a603860aa6ea8050cc005220104534849500030023003375a603660a86ea804c88cdc500100091b9800123732660046ea00052201003001001222533333305700213232323232323300b0020013371491010128000025333053337100069007099b80483c80400c54ccc14ccdc4001a410004266e00cdc0241002800690068a9982a24929576861742061726520796f7520646f696e673f204e6f2049206d65616e2c20736572696f75736c792e001653330560011337149101035b5d2900004133714911035b5f2000375c60aa66600e00266ec1300102415d00375266e292210129000042233760980103422c2000375266601001000466e28dd7182b0009bae3057001375860a80046eb4c148004c8cdd81ba83052001374e60a60026ea80084c94ccc1500044cdc5245027b7d00002133714911037b5f2000375c60a664646600200200644a6660ae00220062664466ec130103422c2000375266601201260ae00466e29221023a20003330090093058002337146eb8c15c004dd7182c000982c80099801001182d00099bb04c10342207d0037520046eac0084c94ccc1500044cdc52441025b5d00002133714911035b5f2000375c60a666600a00266ec1300102415d0037520044466ec1300103422c2000375266600c00c00466e28dd7182a0009bae3055001375800426600a6eb40080044c8c8cdc524410268270000132333001001337006e3400920013371491101270000322253330533371000490000800899191919980300319b8000548004cdc599b80002533305633710004900a0a40c02903719b8b33700002a6660ac66e2000520141481805206e0043370c004901019b8300148080cdc70020011bae00222232330010010042253330540011004133003305600133002002305700122323300100100322533304e30280011337149110130000031533304e337100029000099b8a489012d0033002002302c00113300533708002900a19b8b3370066e1400520144818000cc0040048894ccc12ccdc4801240002002266600600666e1000920143371666e00cdc28012402890300008a9982481f0b180898251baa3012304a375402ca66608c604060906ea80044c94ccc12c00454cc120110584c8c94ccc13400454cc128118584c8c94ccc13c00454cc130120584c8c94ccc14400454cc138128584c8c94ccc14c00454cc140130584c8c94ccc15400454cc148138584c94ccc158c164008526153305304f1632533333305a001153305304f16153305304f16153305304f161375a0022a660a609e2c60ae00260ae00464a6666660b00022a660a209a2c2a660a209a2c2a660a209a2c2a660a209a2c26eb8004c154004c154008c94cccccc15800454cc13c12c5854cc13c12c5854cc13c12c5854cc13c12c584dd70009829800982980119299999982a0008a998268248b0a998268248b0a998268248b09bad001153304d0491630510013051002325333333052001153304b04716153304b04716153304b047161375a0022a6609608e2c609e002609e00464a6666660a00022a6609208a2c2a6609208a2c2a6609208a2c26eb400454cc12411458c134004c124dd50008a998238218b299999982680088008a998230210b0a998230210b0a998230210b0a998230210b182518239baa00115330454913165787065637420496e6c696e65446174756d28736869705f646174756d29203d20736869705f73746174652e646174756d00163008304637540022a6608807e2c6090002646600200202844a66608e002297ae01323253330453253330463022304837540022600c6eb8c130c124dd50008a50300f30483754601e60906ea80084cc128008cc0100100044cc010010004c12c008c124004dc7807299981f980c98209baa0011325333044001153304103b16132325333046001153304303d161325333047304a002149854cc1100f858c94cccccc12c00454cc1100f85854cc1100f85854cc1100f85854cc1100f8584dd7000982400098240011929999998248008a9982101e0b0a9982101e0b0a9982101e0b09bad001153304203c163046001304237540022a660800742ca66666608c00220022a6607e0722c2a6607e0722c2a6607e0722c2a6607e0722c608660806ea800454cc0f924013e65787065637420496e6c696e65446174756d28617374657269615f646174756d29203d20617374657269615f696e7075742e6f75747075742e646174756d00163001303f3754600e607e6ea80108c108c10cc10c004c068ccc004dd59802981e9baa3005303d37540046eb8c010c0f4dd50139bae3005303d375404e44464a66607a6032607e6ea8004520001375a608660806ea8004c94ccc0f4c064c0fcdd50008a60103d87a8000132330010013756608860826ea8008894ccc10c004530103d87a8000132323253330423371e00e6eb8c11000c4c07ccc11cdd4000a5eb804cc014014008dd698220011823801182280099804001801181f181d9baa001153303903016323300100100c22533303d00114c103d87a800013232533303b32533303c3016303e375400229404cdc79bae3042303f3754002054600a607c6ea8c014c0f8dd51803181f1baa00213018330400024bd700998020020009820801181f8009181e8009181e181e800899299981d0008a9981b81a0b099299981d981f0010a99981b99b8748004dd6981d0008a51153303803516153303803516303c001325333036301230383754002297adef6c6013756607860726ea8004cc00400800c88c8cc00400400c894ccc0f00045300103d87a80001323232533303b3371e00c6eb8c0f400c4c060cc100dd3000a5eb804cc014014008dd5981e8011820001181f000991980080080211299981c8008a5eb7bdb1804c8c8c8c94ccc0e4cdc7a44100002100313303e337606ea4008dd3000998030030019bab303b003375c6072004607a00460760026eb8c0e0c0d4dd50040a99819a4920657870656374204d696e7428706f6c6963795f696429203d20707572706f7365001630373038303830380023756606c002606c606c0046eb0c0d0004c0d0c0d0008dd6181900098171baa303100230303031001302c37540162930a9981524811856616c696461746f722072657475726e65642066616c7365001365632533302930030011533302d302c37540042930a998150140b0a99981498028008a99981698161baa002149854cc0a80a05854cc0a80a058c0a8dd5000a99999981780508050a998140130b0a998140130b0a998140130b0a998140130b0a998142491d52756e6e696e672033206172672076616c696461746f72207370656e640013323232232322533302e3232323232323232323232323232323232323232323232325333046302030483754002264a66608e604660926ea80604c8c94ccc124c08cc12cdd5000899192999825981398269baa00113232533304d3027304f37546600c03846466002002646600200264a6660a2605a60a66ea800452f5bded8c026eacc15cc150dd5000998021bab300e30533754601c60a66ea800c014894ccc15400452f5c02660ac60a660ae0026600400460b000244a6660a800229404c94ccc144cdc79bae305700201114a226600600600260ae002264646464646464646464a646660b06064016264646464a6660c00022a660ba09c2c264a6660c260c8004264a6660bc607260c06ea80044c8c8c8c94ccc188c0f8c190dd5000899192999832182018331baa00113232323253330683042306a37540022646464646464646464a6660e2a6660e266e1cdd69817983a1baa0123370006e030294454cc1c92401156d7573745f7570646174655f78203f2046616c73650014a02a6660e2a6660e2010294454cc1c9241156d7573745f7570646174655f79203f2046616c73650014a02a6660e2a6660e200e294454cc1c9241186d7573745f7570646174655f6675656c203f2046616c73650014a02a6660e2a6660e200c294454cc1c92411f6d7573745f7570646174655f75707065725f626f756e64203f2046616c73650014a02a6660e2a6660e2006294454cc1c92411d6d7573745f686176655f656e6f7567685f6675656c203f2046616c73650014a02a6660e2a6660e2012294454cc1c9241216d7573745f70726573657276655f70696c6f745f746f6b656e203f2046616c73650014a02a6660e2a6660e200a294454cc1c92411e6d7573745f726573706563745f6d61785f7370656564203f2046616c73650014a02a6660e2a6660e2008294454cc1c9241206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a02a6660e2a6660e2004294454cc1c9241226d7573745f686176655f746f6b656e5f616e645f6d696e616461203f2046616c73650014a02a6660e2002294454cc1c92401236d7573745f7370656e645f6f6e655f7363726970745f696e707574203f2046616c73650014a029405280a5014a029405280a5014a02940c130c080cc0680fc8c08cc0b8c1d0dd51817983a1baa001533306f304a301b301d3756605a60e46ea804c4c12cccc078dd5981698391baa01302403114a066e240200d8c05802cc8c8cdc499b82375a60e80046eb4c1d0c1d4004cdc11bad3074001375a60e860ea00460e06ea809cc1bcdd5183918379baa0053370e6eb4c1c4c1c8c1c8c1c8c1c8c1c8c1b8dd500600399b87375a604e60da6ea802ccdc081900219b87375a602860d86ea8028cdc001680799b8f028375c60dc60de60de60de60de60d66ea802454cc1a524015865787065637420536f6d6528737065656429203d0a20202020202020202020726174696f6e616c2e6e65772864697374616e63652c2074785f6c61746573745f74696d65202d2074785f6561726c696573745f74696d65290016330230023370200600a66e08004138c8cdc0180080698008061299983319b88001480004c1100044004dd6983518339baa001153306505a16302030663754604260cc6ea80b4dd6983418329baa001153306305716301e30643754603c60c86ea80accc0e00041514cccccc19c004400454cc18014c5854cc18014c5854cc18014c5854cc18014c58c190c184dd50008a9982f8288b180418301baa001153305e04f1630620013300502823375e603260be6ea8004c064c17cdd5180d182f9baa013375a60c060c20046eb4c17c004c16cdd50168a99982c181a00589919299982f0008a9982d8260b099299982f9831001099299982e181b982f1baa0011323232325333060303a306237540022646464a6660c6607c60ca6ea80044c8c8c8c94ccc19cc10cc1a4dd500089919191919192999836a9998368060a51153306e4911c6d7573745f62655f76616c69645f70656c6c6574203f2046616c73650014a02a6660daa6660da00c294454cc1b9241216d7573745f686176655f70656c6c65745f706f736974696f6e203f2046616c73650014a02a6660daa6660da00a294454cc1b9241206d7573745f6e6f745f6578636565645f6361706163697479203f2046616c73650014a02a6660daa6660da008294454cc1b9241196d7573745f7570646174655f646174756d203f2046616c73650014a02a6660daa6660da006294454cc1b9241206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a02a6660daa6660da004294454cc1b9241226d7573745f686176655f746f6b656e5f616e645f6d696e616461203f2046616c73650014a02a6660da002294454cc1b92401246d7573745f7370656e645f74776f5f7363726970745f696e70757473203f2046616c73650014a029405280a5014a029405281823980e1980b01d9180f981518381baa302b30703754002a6660d6608c602e60326eacc0a4c1b8dd50088982399980d1bab3029306e375402204005a2940c04cdd6983818369baa0043375e018608c660dc6ea0cdc0018808983818361baa0423371266e000c00401494ccc19ccdc38169bad3025306a3754006266e1c0acdd6980918351baa00314a02a660d00b82c604660d26ea8c08cc1a4dd50182999832981f98339baa001132533306a001153306705d1613232533306c001153306905f1613232533306e001153306b06116132325333070001153306d0631613253330713074002149854cc1b819058c94cccccc1d400454cc1b81905854cc1b81905854cc1b81905854cc1b8190584dd7000983900098390011929999998398008a998360310b0a998360310b0a998360310b09bad001153306c0621630700013070002325333333071001153306a06016153306a06016153306a060161375a0022a660d40c02c60dc00260dc00464a6666660de0022a660d00bc2c2a660d00bc2c2a660d00bc2c26eb400454cc1a017858c1b0004c1a0dd50008a9983302e0b299999983600088008a9983282d8b0a9983282d8b0a9983282d8b0a9983282d8b183498331baa001153306449013c65787065637420496e6c696e65446174756d2870656c6c65745f646174756d29203d2070656c6c65745f696e7075742e6f75747075742e646174756d0016300d30653754604060ca6ea8008c104ccc040dd5980f98321baa301f306437540026eb8c078c190dd50271bae301f3064375409c60cc60c66ea800454cc1852401ff65787065637420536f6d652870656c6c65745f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656e6b7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d2070656c6c65745f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900163301802e2325333061303b3063375400229404cdc79bae3067306437540020a2603a60c66ea8c074c18cdd5180f18319baa0013303600105253333330650011001153305e05116153305e05116153305e05116153305e051163062305f37540022a660ba09e2c600c60bc6ea800454cc17013458c180004cc00c0988cdd7980b982e9baa0013017305d3754603060ba6ea8044dd6982f182d9baa02d1325333059303400c132533305a3034305c375400226464a6660b8607060bc6ea80044c8c8c8c94ccc1814ccc1800185288a99830a491d6d7573745f62655f76616c69645f61737465726961203f2046616c73650014a02a6660c0a6660c0008294454cc185241226d7573745f686176655f617374657269615f706f736974696f6e203f2046616c73650014a02a6660c0a6660c0006294454cc1852411c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02a6660c0a6660c0004294454cc185241206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a02a6660c0002294454cc1852401246d7573745f7370656e645f74776f5f7363726970745f696e70757473203f2046616c73650014a029405280a5014a06074601e6601205c46024603a60c66ea8c078c18cdd500098039bad30643061375400666e20ccc030c0140a004807d20003375e6e98cc184cdd81ba8022375004097adef6c60374c660c297bdb181010000010100004bd6f7b6300a9982e8288b180c182f1baa3018305e375404a60746660126eacc060c174dd5180c182e9baa3060305d37540026eb8c05cc174dd50239bae3018305d375408e2a660b60a42c66024050464a6660b6606a60ba6ea8004528099b8f375c60c260bc6ea8004124c05cc174dd5180b982e9baa3018305d3754002264a6660b4a6660b466e20ccc024c00809403c071200014a22a660b692011c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02a6660b4002294454cc16d2401236d7573745f7370656e645f6f6e655f7363726970745f696e707574203f2046616c73650014a02940c0d4c024cc00c0a08c030c05cc174dd5180c182e9baa0012323300100100222533305f00114bd6f7b630099191919299982f99b8f489000021003133064337606ea4008dd3000998030030019bab3061003375c60be00460c600460c20026e2405888c8cc00400400c894ccc17800452f5c026464a6660b8600a0042660c20046600800800226600800800260c400460c0002460b860ba60ba002600200244a6660b2002290000981a19801001182e0009191980080080111299982c8008a5eb804c8ccc888c8cc00400400c894ccc17c004400c4c8cc184dd3998309ba90063306137526eb8c178004cc184dd41bad305f0014bd7019801801983180118308009bae3058001375660b20026600600660ba00460b600244464a6660aa606260ae6ea8004520001375a60b660b06ea8004c94ccc154c0c4c15cdd50008a6103d87a800013233001001375660b860b26ea8008894ccc16c004530103d87a80001323232533305a3371e00e6eb8c17000c4c0dccc17cdd4000a5eb804cc014014008dd6982e001182f801182e80099804001801180080091299982a8008a4000260606600400460b00024a66609e605260a26ea8c030c148dd50008a5014a2609e6ea808854cc139241f565787065637420536f6d65285f29203d0a2020202020206c6973742e66696e64280a2020202020202020696e707574732c0a2020202020202020666e28696e70757429207b0a202020202020202020206c6973742e616e79280a202020202020202020202020646963742e6b6579732876616c75652e746f6b656e7328696e7075742e6f75747075742e76616c75652c2073686970796172645f706f6c69637929292c0a202020202020202020202020666e286e616d6529207b206e616d65203d3d2070696c6f745f746f6b656e5f6e616d65207d2c0a20202020202020202020290a20202020202020207d2c0a20202020202029001622323300100100322533305400114c0103d87a8000132323253330533371e00c6eb8c15400c4c0c0cc160dd3000a5eb804cc014014008dd5982a801182c001182b0009bae3051304e37540022a660989215d6578706563742053637269707443726564656e7469616c2873686970796172645f706f6c69637929203d0a202020202020736869705f696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c00163007304d3754600e609a6ea8c020c134dd5000982798261baa001153304a49013665787065637420536f6d6528736869705f696e70757429203d2066696e645f696e70757428696e707574732c20736869705f726566290016323300201823375e600e609a6ea8004008c138c12cdd500c9119198008008019129998278008a60103d87a800013232533304d30050021302a330520024bd70099802002000982980118288008a99824248120657870656374205370656e6428736869705f72656629203d20707572706f73650016304c304937540022a6608e92015865787065637420536f6d65286d61785f73706565645f726174696f6e616c29203d0a202020202020726174696f6e616c2e6e6577286d61785f73706565642e64697374616e63652c206d61785f73706565642e74696d6529001633001375a600460906ea80c4dd6980198241baa031225333046302000114c103d87a80001533304633710002900009811998259811998259ba830240023304b3750604800297ae04bd7009811998259811998259ba80023304b375000297ae04bd70118250009182498250009bad30473048002375c608c002608c0046eb8c110004c110008dd6982100098210011bad30400013040002375a607c00260746ea8040c0f0c0f4c0f4c0f4008dd5981d800981d981d8011bac3039001303930390023758606e00260666ea8c0d8008c0d4c0d8004c0c4dd50008a4c2a6605e92011856616c696461746f722072657475726e65642066616c7365001365632533302d30070011325333032001153302f0271613232533303400115330310291613253330353038002149854cc0c80a858c94cccccc0e400454cc0c80a85854cc0c80a85854cc0c80a8584dd68008a998190150b181b000981b00119299999981b8008a998180140b0a998180140b0a998180140b09bad0011533030028163034001303037540042a66605a6012002264a6660640022a6605e04e2c264a666066606c0042930a998180140b19299999981b8008a998180140b0a998180140b0a998180140b09bad0011533030028163034001303037540042a66605a60100022a66606260606ea8008526153302e026161533302d3370e90030008a99981898181baa002149854cc0b80985854cc0b809858c0b8dd5000a99999981980088008a998160120b0a998160120b0a998160120b0a998160120b19800801011912999815180218161baa002132533302f001153302c00216132325333031001153302e00416132325333033001153303000616132325333035001153303200816132325333037001153303400a16132325333039001153303600c16132533303a303d002149854cc0dc03458c94cccccc0f800454cc0dc0345854cc0dc0345854cc0dc034584dd68008a9981b8068b181d800981d80119299999981e0008a9981a8058b0a9981a8058b0a9981a8058b0a9981a8058b09bae0013039001303900232533333303a0011533033009161533033009161533033009161533033009161375c002606e002606e00464a6666660700022a6606200e2c2a6606200e2c2a6606200e2c26eb400454cc0c401c58c0d4004c0d4008c94cccccc0d800454cc0bc0145854cc0bc0145854cc0bc014584dd68008a998178028b1819800981980119299999981a0008a998168018b0a998168018b0a998168018b09bad001153302d003163031001302d37540042a660560022ca66666605e01420142a660500422c2a660500422c2a660500422c2a660500422c605a60546ea8024dc3a40006e1d2004370e90011ba548000dc0a40006e012002371090000a998108008b0a998108008b0a998108008b0a998108008b248191496e636f72726563742072656465656d6572207479706520666f722076616c696461746f72207370656e642e0a2020202020202020202020202020202020202020446f75626c6520636865636b20796f7520686176652077726170706564207468652072656465656d657220747970652061732073706563696669656420696e20796f757220706c757475732e6a736f6e00375a0026eb4004dd68009bad001375c0026eb800524196657870656374205b736869705f6f75747075745d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d20736869705f696e7075742e6f75747075742e61646472657373207d2c0a20202020202020202020290049013965787065637420496e6c696e65446174756d28736869705f6f75747075745f646174756d29203d20736869705f6f75747075742e646174756d0049013765787065637420736869705f6f75747075745f646174756d3a2053686970446174756d203d20736869705f6f75747075745f646174756d004901476578706563742046696e6974652874785f6561726c696573745f74696d6529203d2076616c69646974795f72616e67652e6c6f7765725f626f756e642e626f756e645f74797065004901456578706563742046696e6974652874785f6c61746573745f74696d6529203d2076616c69646974795f72616e67652e75707065725f626f756e642e626f756e645f747970650049012f6578706563742070656c6c65745f646174756d3a2050656c6c6574446174756d203d2070656c6c65745f646174756d004901ff65787065637420536f6d6528617374657269615f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656d6e7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d20617374657269615f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a20202020202020202020290049011672656465656d65723a205368697052656465656d657200490110646174756d3a2053686970446174756d0049013265787065637420617374657269615f646174756d3a2041737465726961446174756d203d20617374657269615f646174756d00490153657870656374205b736869705f73746174655d203d0a202020202020202020207472616e73616374696f6e2e66696e645f7363726970745f6f757470757473286f7574707574732c20706f6c6963795f6964290049012965787065637420736869705f646174756d3a2053686970446174756d203d20736869705f646174756d00490120657870656374205b285f2c202d31295d203d206d696e7465645f746f6b656e730049011a72656465656d65723a20536869707961726452656465656d6572005734ae7155ceaab9e5573eae815d0aba257481", + "hash": "7f9d0e69b13f25c4c319ca0d17a0e0a3a864e244adcad0bcb5d4ad3f" }, { "title": "spacetime.mint", @@ -187,7 +187,7 @@ } }, { - "title": "_admin_token", + "title": "admin_token", "schema": { "$ref": "#/definitions/asteria~1types~1AssetClass" } @@ -223,8 +223,8 @@ } } ], - "compiledCode": "592abf01000032323232323232323232323232323232323232323232323232232232222322322322322232533333302a00215323232323233302730013029375400e2a660509211c52756e6e696e672032206172672076616c696461746f72206d696e74001323253330293232323232323232325333032300c30343754010264646464646464a666072602660766ea80484c8c94ccc0ecc054c0f4dd500089919299981e980c181f9baa001132323232325333046001153304303c161325333047304a00213253330443020375a608e004264a6660920022a6608c0802c264a666094609a004264a66608e60466eb4c1280084c94ccc13000454cc124110584c94ccc134c1400084c94ccc128c094c130dd50008991919192999827181518281baa001132323232323232323232323232323232323253330605333060303b33230010012253330660011480004cdc0240046600400460d2002056294454cc1852411c6d7573745f6d696e745f74776f5f617373657473203f2046616c73650014a02a6660c0a6660c0010294454cc1852411e6d7573745f726573706563745f736869705f6e616d65203f2046616c73650014a02a6660c0a6660c000e294454cc1852411f6d7573745f726573706563745f70696c6f745f6e616d65203f2046616c73650014a02a6660c0a6660c000c294454cc185241216d7573745f726573706563745f6d696e5f64697374616e6365203f2046616c73650014a02a6660c0a6660c000a294454cc1852411e6d7573745f686176655f696e697469616c5f6675656c203f2046616c73650014a02a6660c0a6660c0008294454cc1852411b6d7573745f686176655f736869705f6e616d65203f2046616c73650014a02a6660c0a6660c0006294454cc1852411c6d7573745f686176655f70696c6f745f6e616d65203f2046616c73650014a02a6660c0a6660c0004294454cc1852411d6d7573745f686176655f6c61746573745f74696d65203f2046616c73650014a02a6660c0002294454cc18524011c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a029405280a5014a029405280a5014a0607664a6660c0607860c46ea8004520001375a60cc60c66ea8004c94ccc180c0f0c188dd50008a6103d87a800013233001001375660ce60c86ea8008894ccc198004530103d87a800013232325333065300e375c60ce00626084660d46ea00052f5c026600a00a0046eb4c19c008c1a8008c1a0004cc0b0dd5981418311baa01702d3370e6eb4c190c194c194c194c194c194c184dd50099bad30643061375402266e3cdd71831983218321832183218301baa0120173005375c60c460c660c660c660be6ea8044cdc39bad3022305e375402007e66e240f0c8cdc018009bad3024305e375402060026eb4c080c178dd50081299982d99b88001480004c0e40044004cdc780999801a450550494c4f540030043005375a604060b86ea806cc004cc009220104534849500030033004375a603e60b66ea8068dc780a1119b8a0020012373000246e64cc008dd4000a441003001001222533333305d00213232323232323300b0020013371491010128000025333059337100069007099b80483c80400c54ccc164cdc4001a410004266e00cdc0241002800690068a9982d24929576861742061726520796f7520646f696e673f204e6f2049206d65616e2c20736572696f75736c792e0016533305c0011337149101035b5d2900004133714911035b5f2000375c60b666600e00266ec1300102415d00375266e292210129000042233760980103422c2000375266601001000466e28dd7182e0009bae305d001375860b40046eb4c160004c8cdd81ba83058001374e60b20026ea80084c94ccc1680044cdc5245027b7d00002133714911037b5f2000375c60b264646600200200644a6660ba00220062664466ec130103422c2000375266601201260ba00466e29221023a2000333009009305e002337146eb8c174004dd7182f000982f80099801001183000099bb04c10342207d0037520046eac0084c94ccc1680044cdc52441025b5d00002133714911035b5f2000375c60b266600a00266ec1300102415d0037520044466ec1300103422c2000375266600c00c00466e28dd7182d0009bae305b001375800426600a6eb40080044c8c8cdc524410268270000132333001001337006e3400920013371491101270000322253330593371000490000800899191919980300319b8000548004cdc599b80002533305c33710004900a0a40c02903719b8b33700002a6660b866e2000520141481805206e0043370c004901019b8300148080cdc70020011bae002222323300100100422533305a0011004133003305c00133002002305d001223233001001003225333054302e00113371491101300000315333054337100029000099b8a489012d0033002002303200113300533708002900a19b8b3370066e1400520144818000cc0040048894ccc144cdc4801240002002266600600666e1000920143371666e00cdc28012402890300008a998278218b180a18281baa301630503754038a666098604c609c6ea80044c94ccc14400454cc138128584c8c94ccc14c00454cc140130584c8c94ccc15400454cc148138584c8c94ccc15c00454cc150140584c8c94ccc16400454cc158148584c8c94ccc16c00454cc160150584c94ccc170c17c0085261533059055163253333330600011533059055161533059055161533059055161375a0022a660b20aa2c60ba00260ba00464a6666660bc0022a660ae0a62c2a660ae0a62c2a660ae0a62c2a660ae0a62c26eb8004c16c004c16c008c94cccccc17000454cc1541445854cc1541445854cc1541445854cc154144584dd7000982c800982c80119299999982d0008a998298278b0a998298278b0a998298278b09bad001153305304f1630570013057002325333333058001153305104d16153305104d16153305104d161375a0022a660a209a2c60aa00260aa00464a6666660ac0022a6609e0962c2a6609e0962c2a6609e0962c26eb400454cc13c12c58c14c004c13cdd50008a998268248b299999982980088008a998260240b0a998260240b0a998260240b0a998260240b182818269baa001153304b4913165787065637420496e6c696e65446174756d28736869705f646174756d29203d20736869705f73746174652e646174756d0016300e304c37540022a6609408a2c609c002646600200203444a66609a002297ae013232533304b32533304c3028304e3754002266e3c068dd7182918279baa00114a06024609c6ea8c048c138dd500109982800119802002000899802002000982880118278008a998240210b1bae3048001153304704116304b0013300400f23300f48810550494c4f5400375c608e0022a6608a07c2c6eb8c11400454cc1100f458c120004cc0040308cc031221045348495000375c608800244646600200200644a666090002297adef6c60132325333046300500213304b00233004004001133004004001304c002304a001533303f301930413754002264a6660880022a660820722c26464a66608c0022a660860762c264a66608e60940042930a9982201e0b1929999998258008a9982201e0b0a9982201e0b0a9982201e0b0a9982201e0b09bae00130480013048002325333333049001153304203a16153304203a16153304203a161375a0022a660840742c608c00260846ea800454cc1000e0594cccccc118004400454cc0fc0dc5854cc0fc0dc5854cc0fc0dc5854cc0fc0dc58c10cc100dd50008a9981f24813e65787065637420496e6c696e65446174756d28617374657269615f646174756d29203d20617374657269615f696e7075742e6f75747075742e646174756d00163001303f3754600a607e6ea8c108c0fcdd500111821182198218008a9981e249ff65787065637420536f6d6528617374657269615f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656d6e7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d20617374657269615f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900163300200e232533303c3016303e375400229404cdc79bae3042303f37540020506004607c6ea8c008c0f8dd51802181f1baa00123040001132533303e005153303b03816132533303f30420061533303b3370e90009bad303e0011533303b533303b3015303d375400429445280a51153303c4901226f7074696f6e2e69735f736f6d6528736869705f696e70757429203f2046616c73650014a02a660780722c2a660780722c608000a6600201a464646600200266004004660106eacc014c0fcdd51802981f9baa00300a22533304100114a0264a66607c66010911045348495000375c608800429444cc00c00c004c110004894ccc10000452f5c0266082607c608400266004004608600244646600200200644a6660800022980103d87a800013232533303e30050021301b330430024bd70099802002000982200118210009181f181f8009119b8f33371890001b8d00200100233001323300100100622533303b00114bd6f7b630099191919299981d99b8f489000021003133040337606ea4008dd3000998030030019bab303d003375c6076004607e004607a0020064464a66606e602660726ea800452f5bded8c026eacc0f4c0e8dd50009980180100091191980080080191299981d8008a60103d87a80001323232533303a3371e00c6eb8c0f000c4c05ccc0fcdd3000a5eb804cc014014008dd5981e001181f801181e8009bae3038303537540102a6606692120657870656374204d696e7428706f6c6963795f696429203d20707572706f7365001630373038303830380023756606c002606c606c0046eb0c0d0004c0d0c0d0008dd6181900098171baa303100230303031001302c37540122930a9981524811856616c696461746f722072657475726e65642066616c7365001365632533302930030011533302d302c37540042930a998150140b0a99981498028008a99981698161baa002149854cc0a80a05854cc0a80a058c0a8dd5000a99999981780408040a998140130b0a998140130b0a998140130b0a998140130b0a998142491d52756e6e696e672033206172672076616c696461746f72207370656e640013323232232322533302e3232323232323232323232323232323232323232323232325333046302030483754002264a66608e604660926ea80604c8c8c94ccc13800454cc12c0e8584c94ccc13cc1480084c94ccc130c0a0c138dd500089919192999827981498289baa3300201e232323300100133002002325333053302f30553754002297adef6c601375660b260ac6ea8004cc010dd59808182a9baa30103055375400600c44a6660ae00229404c94ccc150cdc79bae305a00201414a226600600600260b400244a6660ac002297ae013305730543058001330020023059001132323232532333054302e003132323232533305c001153305904916132533305d3060002132533305a3035305c3754002264646464a6660bc607460c06ea80044c8c94ccc180c0f0c188dd50008991919192999832181f18331baa00113232323232323232533306c533306c3370e6eb4c0a8c1bcdd500899b8003201714a22a660da921156d7573745f7570646174655f78203f2046616c73650014a02a6660d8a6660d800a294454cc1b5241156d7573745f7570646174655f79203f2046616c73650014a02a6660d8a6660d8008294454cc1b5241186d7573745f7570646174655f6675656c203f2046616c73650014a02a6660d8a6660d8006294454cc1b52411f6d7573745f7570646174655f75707065725f626f756e64203f2046616c73650014a02a6660d8a6660d8038294454cc1b52411c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660d8a6660d8010294454cc1b52411d6d7573745f686176655f656e6f7567685f6675656c203f2046616c73650014a02a6660d8a6660d800e294454cc1b5241206d7573745f70726573657276655f736869705f76616c7565203f2046616c73650014a02a6660d8a6660d800c294454cc1b5241216d7573745f70726573657276655f70696c6f745f746f6b656e203f2046616c73650014a02a6660d8a6660d8004294454cc1b52411e6d7573745f726573706563745f6d61785f7370656564203f2046616c73650014a02a6660d8002294454cc1b52401206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a029405280a5014a029405280a5014a02940c060034c8c8cdc499b82375a60e40046eb4c1c8c1cc004cdc11bad3072001375a60e460e600460dc6ea8094c1b4dd5183818369baa0073370e6eb4c1bcc1c0c1c0c1c0c1c0c1c0c1b0dd500700499b87375a604a60d66ea8034cdc081800319b87375a602a60d46ea8030cdc001580899b8f026375c60d860da60da60da60da60d26ea802ccdd7981198341baa302330683754036604660d06ea8034cdc48010160a99832a495865787065637420536f6d6528737065656429203d0a20202020202020202020726174696f6e616c2e6e65772864697374616e63652c2074785f6c61746573745f74696d65202d2074785f6561726c696573745f74696d652900163301f0023370200600a66e08004120c8cdc0180080698008061299983119b88001480004c1000044004dd6983318319baa001153306105516301c30623754603a60c46ea80a4dd6983218309baa001153305f05216301a30603754603460c06ea809ccc0d000413d4cccccc18c004400454cc1701385854cc1701385854cc1701385854cc17013858c180c174dd50008a9982d8260b1803982e1baa001153305a04a16305e0013300f02423375e602a60b66ea8004c054c16cdd5180b182d9baa00e375a60b860ba0046eb4c16c004c15cdd50148a99982a181800189919299982d0008a9982b8238b099299982d982f001099299982c1819982d1baa001132323232533305c3036305e3754002264a6660ba607060be6ea80044c8c8c8c94ccc184c0f4c18cdd5000899191919192999833299983300b0a5115330674911c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660cca6660cc00a294454cc19d241216d7573745f686176655f70656c6c65745f706f736974696f6e203f2046616c73650014a02a6660cca6660cc008294454cc19d241206d7573745f6e6f745f6578636565645f6361706163697479203f2046616c73650014a02a6660cca6660cc006294454cc19d241196d7573745f7570646174655f646174756d203f2046616c73650014a02a6660cca6660cc004294454cc19d241206d7573745f70726573657276655f736869705f76616c7565203f2046616c73650014a02a6660cc002294454cc19d2401206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a029405280a5014a02940c048dd6983598341baa0053375e604460ce6ea8c088c19cdd500d181118339baa00e3375e0146080660d06ea0cdc0015807983518331baa03c3371266e000a80381294ccc184cdc38139bad301f30643754006266e1c094dd6980798321baa00314a02a660c40aa2c603a60c66ea8c074c18cdd5015299982f981c98309baa0011325333064001153306105616132325333066001153306305816132325333068001153306505a1613232533306a001153306705c16132533306b306e002149854cc1a017458c94cccccc1bc00454cc1a01745854cc1a01745854cc1a01745854cc1a0174584dd7000983600098360011929999998368008a9983302d8b0a9983302d8b0a9983302d8b09bad001153306605b16306a001306a00232533333306b0011533064059161533064059161533064059161375a0022a660c80b22c60d000260d000464a6666660d20022a660c40ae2c2a660c40ae2c2a660c40ae2c26eb400454cc18815c58c198004c188dd50008a9983002a8b299999983300088008a9982f82a0b0a9982f82a0b0a9982f82a0b0a9982f82a0b183198301baa001153305e49013c65787065637420496e6c696e65446174756d2870656c6c65745f646174756d29203d2070656c6c65745f696e7075742e6f75747075742e646174756d0016300a305f3754603460be6ea8c188c17cdd50008a9982ea49ff65787065637420536f6d652870656c6c65745f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656e6b7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d2070656c6c65745f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900163300e02a232533305d3037305f375400229404cdc79bae306330603754002096603260be6ea8c064c17cdd5180d182f9baa0013303200104d53333330610011001153305a04c16153305a04c16153305a04c16153305a04c16305e305b37540022a660b20942c600a60b46ea800454cc16012058c170004cc0340888cdd79809982c9baa001301330593754602860b26ea8030dd6982d182b9baa0291325333055303000415333055302f3057375466010048464a6660ae606260b26ea8004528099b8f375c60ba60b46ea800410cc04cc164dd51809982c9baa301430593754002264a6660ac606460b06ea80044c8c8c94ccc1654ccc1640245288a9982d24811c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660b2a6660b2006294454cc169241226d7573745f686176655f617374657269615f706f736974696f6e203f2046616c73650014a02a6660b2a6660b2004294454cc1692411c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02a6660b2002294454cc1692401206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a029405280a503005375a60bc60b66ea800ccdc4199804180181100580ca400066ebcdd31982d99bb037500386ea00692f5bded8c06e98cc16d2f7b63001010000010100004bd6f7b6300a9982b8250b1809182c1baa30123058375403e2a660ac9201ff65787065637420536f6d65285f29203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656e7429202d3e0a20202020206120202020202020202020202020616464725f7061796d656e74203d3d20617374657269615f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900161325333056533305600614a22a660ae9211c6d7573745f686f6c645f736869705f746f6b656e203f2046616c73650014a02a6660ac002294454cc15d24011c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02940cdc4199803180081000480ba40004646600200200444a6660b6002297adef6c60132323232533305b3371e9101000021003133060337606ea4008dd3000998030030019bab305d003375c60b600460be00460ba0026e240488c164c168c168004c14cdd501318161998009bab300e30533754601c60a66ea8018010048888c94ccc14cc0bcc154dd50008a400026eb4c164c158dd50009929998299817982a9baa00114c0103d87a800013233001001375660b460ae6ea8008894ccc164004530103d87a8000132323253330583371e00e6eb8c16800c4c0d4cc174dd4000a5eb804cc014014008dd6982d001182e801182d800998020018010a99828249e165787065637420536f6d65285f29203d0a2020202020206c6973742e66696e64280a2020202020202020696e707574732c0a2020202020202020666e28696e70757429207b0a202020202020202020207574696c732e69735f70696c6f745f746f6b656e5f696e5f7574786f280a202020202020202020202020696e7075742e6f75747075742c0a20202020202020202020202073686970796172645f706f6c6963792c0a20202020202020202020202070696c6f745f746f6b656e5f6e616d652c0a20202020202020202020290a20202020202020207d2c0a20202020202029001622323300100100322533305600114c0103d87a8000132323253330553371e00c6eb8c15c00c4c0c8cc168dd3000a5eb804cc014014008dd5982b801182d001182c00091191980080080191299982a8008a6103d87a8000132325333053300500213030330580024bd70099802002000982c801182b8009bae3052304f37540022a6609a9215d6578706563742053637269707443726564656e7469616c2873686970796172645f706f6c69637929203d0a202020202020736869705f696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c00163008304e37546010609c6ea8c024c138dd50008a9982601d8b18280009980080c119baf3007304d375400200644646600200200644a6660a0002297ae013232533304e30050021330530023300400400113300400400130540023052001304d304a37540302a6609092120657870656374205370656e6428736869705f72656629203d20707572706f73650016304c304937540022a6608e92015865787065637420536f6d65286d61785f73706565645f726174696f6e616c29203d0a202020202020726174696f6e616c2e6e6577286d61785f73706565642e64697374616e63652c206d61785f73706565642e74696d6529001633001375a600460906ea80bcdd6980198241baa02f225333046302000114c103d87a80001533304633710002900009811998259811998259ba830240023304b3750604800297ae04bd7009811998259811998259ba80023304b375000297ae04bd70118250009182498250009bad30473048002375c608c002608c0046eb8c110004c110008dd6982100098210011bad30400013040002375a607c00260746ea8040c0f0c0f4c0f4c0f4008dd5981d800981d981d8011bac3039001303930390023758606e00260666ea8c0d8008c0d4c0d8004c0c4dd50008a4c2a6605e92011856616c696461746f722072657475726e65642066616c7365001365632533302d30070011325333032001153302f0251613232533303400115330310271613253330353038002149854cc0c80a058c94cccccc0e400454cc0c80a05854cc0c80a05854cc0c80a0584dd68008a998190140b181b000981b00119299999981b8008a998180130b0a998180130b0a998180130b09bad0011533030026163034001303037540042a66605a6012002264a6660640022a6605e04a2c264a666066606c0042930a998180130b19299999981b8008a998180130b0a998180130b0a998180130b09bad0011533030026163034001303037540042a66605a60100022a66606260606ea8008526153302e024161533302d3370e90030008a99981898181baa002149854cc0b80905854cc0b809058c0b8dd5000a99999981980088008a998160110b0a998160110b0a998160110b0a998160110b19800801010912999815180218161baa002132533302f001153302c00216132325333031001153302e00416132325333033001153303000616132325333035001153303200816132325333037001153303400a16132325333039001153303600c16132533303a303d002149854cc0dc03458c94cccccc0f800454cc0dc0345854cc0dc0345854cc0dc034584dd68008a9981b8068b181d800981d80119299999981e0008a9981a8058b0a9981a8058b0a9981a8058b0a9981a8058b09bae0013039001303900232533333303a0011533033009161533033009161533033009161533033009161375c002606e002606e00464a6666660700022a6606200e2c2a6606200e2c2a6606200e2c26eb400454cc0c401c58c0d4004c0d4008c94cccccc0d800454cc0bc0145854cc0bc0145854cc0bc014584dd68008a998178028b1819800981980119299999981a0008a998168018b0a998168018b0a998168018b09bad001153302d003163031001302d37540042a660560022ca66666605e01020102a6605003e2c2a6605003e2c2a6605003e2c2a6605003e2c605a60546ea801cdc3a40006e1d2004370e90011ba548000dc0a40002a660460022c2a660460022c2a660460022c2a660460022c920191496e636f72726563742072656465656d6572207479706520666f722076616c696461746f72207370656e642e0a2020202020202020202020202020202020202020446f75626c6520636865636b20796f7520686176652077726170706564207468652072656465656d657220747970652061732073706563696669656420696e20796f757220706c757475732e6a736f6e00375a0026eb4004dd68009bad001375c0026eb800524161657870656374205b736869705f696e7075745d203d0a2020202020206c6973742e66696c74657228696e707574732c20666e28696e70757429207b20696e7075742e6f75747075745f7265666572656e6365203d3d20736869705f726566207d2900490196657870656374205b736869705f6f75747075745d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d20736869705f696e7075742e6f75747075742e61646472657373207d2c0a20202020202020202020290049013965787065637420496e6c696e65446174756d28736869705f6f75747075745f646174756d29203d20736869705f6f75747075742e646174756d0049013765787065637420736869705f6f75747075745f646174756d3a2053686970446174756d203d20736869705f6f75747075745f646174756d004901476578706563742046696e6974652874785f6561726c696573745f74696d6529203d2076616c69646974795f72616e67652e6c6f7765725f626f756e642e626f756e645f74797065004901456578706563742046696e6974652874785f6c61746573745f74696d6529203d2076616c69646974795f72616e67652e75707065725f626f756e642e626f756e645f747970650049012f6578706563742070656c6c65745f646174756d3a2050656c6c6574446174756d203d2070656c6c65745f646174756d0049011672656465656d65723a205368697052656465656d657200490110646174756d3a2053686970446174756d0049013265787065637420617374657269615f646174756d3a2041737465726961446174756d203d20617374657269615f646174756d0049019c657870656374205b28736869705f746f6b656e5f6e616d652c2031295d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206d696e7465645f746f6b656e732c0a202020202020202020202020666e28746f6b656e29207b207574696c732e6861735f707265666978282253484950222c20746f6b656e2e31737429207d2c0a20202020202020202020290049019e657870656374205b2870696c6f745f746f6b656e5f6e616d652c2031295d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206d696e7465645f746f6b656e732c0a202020202020202020202020666e28746f6b656e29207b207574696c732e6861735f707265666978282250494c4f54222c20746f6b656e2e31737429207d2c0a202020202020202020202900490153657870656374205b736869705f73746174655d203d0a202020202020202020207472616e73616374696f6e2e66696e645f7363726970745f6f757470757473286f7574707574732c20706f6c6963795f6964290049012965787065637420736869705f646174756d3a2053686970446174756d203d20736869705f646174756d00490120657870656374205b285f2c202d31295d203d206d696e7465645f746f6b656e730049011a72656465656d65723a20536869707961726452656465656d6572005734ae7155ceaab9e5573eae815d0aba257481", - "hash": "5aa1058f6f271e7cd8c2ef21836ca3c8b2a69d9e5659297338e348b2" + "compiledCode": "592c220100003232323232323232323232323232323232323232323232232232222322322322322232533333302800215323232323232323330273001302937540122a660509211c52756e6e696e672032206172672076616c696461746f72206d696e74001323253330293232323232323232325333032300c303437540102646464a66606a601e606e6ea80384c8c8c94ccc0e0c048c0e8dd500089919191919299981e980c181f9baa001132323232325333046001153304303e161325333047304a0021325333044301f30463754002264646464a666090604860946ea80044c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c94ccc1694ccc1680805288a9982da4811d6d7573745f62655f76616c69645f61737465726961203f2046616c73650014a02a6660b4a6660b400e294454cc16d241276d7573745f6d696e745f736869705f616e645f70696c6f745f746f6b656e73203f2046616c73650014a02a6660b4a6660b400c294454cc16d241216d7573745f726573706563745f6d696e5f64697374616e6365203f2046616c73650014a02a6660b4a6660b400a294454cc16d2411e6d7573745f686176655f696e697469616c5f6675656c203f2046616c73650014a02a6660b4a6660b4008294454cc16d2411b6d7573745f686176655f736869705f6e616d65203f2046616c73650014a02a6660b4a6660b4006294454cc16d2411c6d7573745f686176655f70696c6f745f6e616d65203f2046616c73650014a02a6660b4a6660b4004294454cc16d2411d6d7573745f686176655f6c61746573745f74696d65203f2046616c73650014a02a6660b4002294454cc16d2401226d7573745f686176655f746f6b656e5f616e645f6d696e616461203f2046616c73650014a029405280a5014a029405280a5053330593034332300100122533305f0011480004c0e8cc008008c188004c8cc004004dd59812982e9baa01822533305f00114bd7009919991119198008008019129998328008801899198339ba733067375200c660ce6ea4dd71832000998339ba8375a60ca00297ae03300300330690023067001375c60bc0026eacc17c004cc00c00cc18c008c1840044c0d4ccc080dd59812182e1baa01702700814a066e1cdd6982f182f982f982f982f982f982d9baa013375a60bc60b66ea8044cdc79bae305d305e305e305e305e305a375402400a66e3cdd7182e182e982e982e982c9baa0110053370e6eb4c07cc160dd500801d99b89038323370060026eb4c080c160dd500818009bad301a305837540204a6660aa66e2000520001303300110013375e6e98080dd3191919299982b1819240002002264646600200200644a6660ba0022660bc66ec0dd48139ba60034bd6f7b630099191919299982e98049980501580109983119bb037520566e9801c01454ccc174c0740084c94ccc178c0e0c180dd500089983199bb0375205860c860c26ea80040104010c94ccc1794ccc1880045288a5014c0103d87a80001303b33063374c00297ae03233001001002225333063001133064337606ea40353010101004bd6f7b630099191919299983198079980800880109983419bb03752022981010100005153330633371e022004264a6660c8607c60cc6ea80044cc1a4cdd81ba9012306a30673754002008200864a6660c8607c002298103d87a80001304133069375000297ae033700002900109983419bb037520046ea0004cc01801800cdd698328019bae306300230670023065001133062337606ea4008dd3000998030030019bab305f003375c60ba00460c200460be0026464004646600200200444a6660ba002293099299982f0008a4c26464a6660b8606c60bc6ea8cc024dd7182f18310021bae305e00213300500533061002001153305d491326b65797320696e206173736f63696174697665206c697374206172656e277420696e20617363656e64696e67206f7264657200163062002306000130600013305b337606ea401130010101004bd6f7b630299982a9818a4000297adef6c6013232330010014bd6f7b63011299982e00089982e99bb0375204c6e9800d2f5bded8c0264646464a6660b86010660120540042660c266ec0dd48151ba60070051533305c301c002133061337606ea40a8dd300380189983099bb037520046e98004cc01801800cdd5982f0019bae305c0023060002305e00132330010014bd6f7b63011299982d80089982e19bb0375200c98010101004bd6f7b630099191919299982d98039980400500109983019bb037520149810101000051533305b3371e0140042660c066ec0dd4805261010100003133060337606ea4008dd4000998030030019bad305d003375c60b600460be00460ba0026ebd300103d879800022533305533720004002298103d8798000153330553371e0040022980103d87a800014c103d87b8000330024890550494c4f540030033004375a603860aa6ea8050cc005220104534849500030023003375a603660a86ea804c88cdc500100091b9800123732660046ea00052201003001001222533333305700213232323232323300b0020013371491010128000025333053337100069007099b80483c80400c54ccc14ccdc4001a410004266e00cdc0241002800690068a9982a24929576861742061726520796f7520646f696e673f204e6f2049206d65616e2c20736572696f75736c792e001653330560011337149101035b5d2900004133714911035b5f2000375c60aa66600e00266ec1300102415d00375266e292210129000042233760980103422c2000375266601001000466e28dd7182b0009bae3057001375860a80046eb4c148004c8cdd81ba83052001374e60a60026ea80084c94ccc1500044cdc5245027b7d00002133714911037b5f2000375c60a664646600200200644a6660ae00220062664466ec130103422c2000375266601201260ae00466e29221023a20003330090093058002337146eb8c15c004dd7182c000982c80099801001182d00099bb04c10342207d0037520046eac0084c94ccc1500044cdc52441025b5d00002133714911035b5f2000375c60a666600a00266ec1300102415d0037520044466ec1300103422c2000375266600c00c00466e28dd7182a0009bae3055001375800426600a6eb40080044c8c8cdc524410268270000132333001001337006e3400920013371491101270000322253330533371000490000800899191919980300319b8000548004cdc599b80002533305633710004900a0a40c02903719b8b33700002a6660ac66e2000520141481805206e0043370c004901019b8300148080cdc70020011bae00222232330010010042253330540011004133003305600133002002305700122323300100100322533304e30280011337149110130000031533304e337100029000099b8a489012d0033002002302c00113300533708002900a19b8b3370066e1400520144818000cc0040048894ccc12ccdc4801240002002266600600666e1000920143371666e00cdc28012402890300008a9982481f0b180898251baa3012304a375402ca66608c604060906ea80044c94ccc12c00454cc120110584c8c94ccc13400454cc128118584c8c94ccc13c00454cc130120584c8c94ccc14400454cc138128584c8c94ccc14c00454cc140130584c8c94ccc15400454cc148138584c94ccc158c164008526153305304f1632533333305a001153305304f16153305304f16153305304f161375a0022a660a609e2c60ae00260ae00464a6666660b00022a660a209a2c2a660a209a2c2a660a209a2c2a660a209a2c26eb8004c154004c154008c94cccccc15800454cc13c12c5854cc13c12c5854cc13c12c5854cc13c12c584dd70009829800982980119299999982a0008a998268248b0a998268248b0a998268248b09bad001153304d0491630510013051002325333333052001153304b04716153304b04716153304b047161375a0022a6609608e2c609e002609e00464a6666660a00022a6609208a2c2a6609208a2c2a6609208a2c26eb400454cc12411458c134004c124dd50008a998238218b299999982680088008a998230210b0a998230210b0a998230210b0a998230210b182518239baa00115330454913165787065637420496e6c696e65446174756d28736869705f646174756d29203d20736869705f73746174652e646174756d00163008304637540022a6608807e2c6090002646600200202844a66608e002297ae01323253330453253330463022304837540022600c6eb8c130c124dd50008a50300f30483754601e60906ea80084cc128008cc0100100044cc010010004c12c008c124004dc7807299981f980c98209baa0011325333044001153304103b16132325333046001153304303d161325333047304a002149854cc1100f858c94cccccc12c00454cc1100f85854cc1100f85854cc1100f85854cc1100f8584dd7000982400098240011929999998248008a9982101e0b0a9982101e0b0a9982101e0b09bad001153304203c163046001304237540022a660800742ca66666608c00220022a6607e0722c2a6607e0722c2a6607e0722c2a6607e0722c608660806ea800454cc0f924013e65787065637420496e6c696e65446174756d28617374657269615f646174756d29203d20617374657269615f696e7075742e6f75747075742e646174756d00163001303f3754600e607e6ea80108c108c10cc10c004c068ccc004dd59802981e9baa3005303d37540046eb8c010c0f4dd50139bae3005303d375404e44464a66607a6032607e6ea8004520001375a608660806ea8004c94ccc0f4c064c0fcdd50008a60103d87a8000132330010013756608860826ea8008894ccc10c004530103d87a8000132323253330423371e00e6eb8c11000c4c07ccc11cdd4000a5eb804cc014014008dd698220011823801182280099804001801181f181d9baa001153303903016323300100100c22533303d00114c103d87a800013232533303b32533303c3016303e375400229404cdc79bae3042303f3754002054600a607c6ea8c014c0f8dd51803181f1baa00213018330400024bd700998020020009820801181f8009181e8009181e181e800899299981d0008a9981b81a0b099299981d981f0010a99981b99b8748004dd6981d0008a51153303803516153303803516303c001325333036301230383754002297adef6c6013756607860726ea8004cc00400800c88c8cc00400400c894ccc0f00045300103d87a80001323232533303b3371e00c6eb8c0f400c4c060cc100dd3000a5eb804cc014014008dd5981e8011820001181f000991980080080211299981c8008a5eb7bdb1804c8c8c8c94ccc0e4cdc7a44100002100313303e337606ea4008dd3000998030030019bab303b003375c6072004607a00460760026eb8c0e0c0d4dd50040a99819a4920657870656374204d696e7428706f6c6963795f696429203d20707572706f7365001630373038303830380023756606c002606c606c0046eb0c0d0004c0d0c0d0008dd6181900098171baa303100230303031001302c37540162930a9981524811856616c696461746f722072657475726e65642066616c7365001365632533302930030011533302d302c37540042930a998150140b0a99981498028008a99981698161baa002149854cc0a80a05854cc0a80a058c0a8dd5000a99999981780508050a998140130b0a998140130b0a998140130b0a998140130b0a998142491d52756e6e696e672033206172672076616c696461746f72207370656e640013323232232322533302e3232323232323232323232323232323232323232323232325333046302030483754002264a66608e604660926ea80604c8c94ccc124c08cc12cdd5000899192999825981398269baa00113232533304d3027304f37546600c03846466002002646600200264a6660a2605a60a66ea800452f5bded8c026eacc15cc150dd5000998021bab300e30533754601c60a66ea800c014894ccc15400452f5c02660ac60a660ae0026600400460b000244a6660a800229404c94ccc144cdc79bae305700201114a226600600600260ae002264646464646464646464a646660b06064016264646464a6660c00022a660ba09c2c264a6660c260c8004264a6660bc607260c06ea80044c8c8c8c94ccc188c0f8c190dd5000899192999832182018331baa00113232323253330683042306a37540022646464646464646464a6660e2a6660e266e1cdd69817983a1baa0123370006e030294454cc1c92401156d7573745f7570646174655f78203f2046616c73650014a02a6660e2a6660e2010294454cc1c9241156d7573745f7570646174655f79203f2046616c73650014a02a6660e2a6660e200e294454cc1c9241186d7573745f7570646174655f6675656c203f2046616c73650014a02a6660e2a6660e200c294454cc1c92411f6d7573745f7570646174655f75707065725f626f756e64203f2046616c73650014a02a6660e2a6660e2006294454cc1c92411d6d7573745f686176655f656e6f7567685f6675656c203f2046616c73650014a02a6660e2a6660e2012294454cc1c9241216d7573745f70726573657276655f70696c6f745f746f6b656e203f2046616c73650014a02a6660e2a6660e200a294454cc1c92411e6d7573745f726573706563745f6d61785f7370656564203f2046616c73650014a02a6660e2a6660e2008294454cc1c9241206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a02a6660e2a6660e2004294454cc1c9241226d7573745f686176655f746f6b656e5f616e645f6d696e616461203f2046616c73650014a02a6660e2002294454cc1c92401236d7573745f7370656e645f6f6e655f7363726970745f696e707574203f2046616c73650014a029405280a5014a029405280a5014a02940c130c080cc0680fc8c08cc0b8c1d0dd51817983a1baa001533306f304a301b301d3756605a60e46ea804c4c12cccc078dd5981698391baa01302403114a066e240200d8c05802cc8c8cdc499b82375a60e80046eb4c1d0c1d4004cdc11bad3074001375a60e860ea00460e06ea809cc1bcdd5183918379baa0053370e6eb4c1c4c1c8c1c8c1c8c1c8c1c8c1b8dd500600399b87375a604e60da6ea802ccdc081900219b87375a602860d86ea8028cdc001680799b8f028375c60dc60de60de60de60de60d66ea802454cc1a524015865787065637420536f6d6528737065656429203d0a20202020202020202020726174696f6e616c2e6e65772864697374616e63652c2074785f6c61746573745f74696d65202d2074785f6561726c696573745f74696d65290016330230023370200600a66e08004138c8cdc0180080698008061299983319b88001480004c1100044004dd6983518339baa001153306505a16302030663754604260cc6ea80b4dd6983418329baa001153306305716301e30643754603c60c86ea80accc0e00041514cccccc19c004400454cc18014c5854cc18014c5854cc18014c5854cc18014c58c190c184dd50008a9982f8288b180418301baa001153305e04f1630620013300502823375e603260be6ea8004c064c17cdd5180d182f9baa013375a60c060c20046eb4c17c004c16cdd50168a99982c181a00589919299982f0008a9982d8260b099299982f9831001099299982e181b982f1baa0011323232325333060303a306237540022646464a6660c6607c60ca6ea80044c8c8c8c94ccc19cc10cc1a4dd500089919191919192999836a9998368060a51153306e4911c6d7573745f62655f76616c69645f70656c6c6574203f2046616c73650014a02a6660daa6660da00c294454cc1b9241216d7573745f686176655f70656c6c65745f706f736974696f6e203f2046616c73650014a02a6660daa6660da00a294454cc1b9241206d7573745f6e6f745f6578636565645f6361706163697479203f2046616c73650014a02a6660daa6660da008294454cc1b9241196d7573745f7570646174655f646174756d203f2046616c73650014a02a6660daa6660da006294454cc1b9241206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a02a6660daa6660da004294454cc1b9241226d7573745f686176655f746f6b656e5f616e645f6d696e616461203f2046616c73650014a02a6660da002294454cc1b92401246d7573745f7370656e645f74776f5f7363726970745f696e70757473203f2046616c73650014a029405280a5014a029405281823980e1980b01d9180f981518381baa302b30703754002a6660d6608c602e60326eacc0a4c1b8dd50088982399980d1bab3029306e375402204005a2940c04cdd6983818369baa0043375e018608c660dc6ea0cdc0018808983818361baa0423371266e000c00401494ccc19ccdc38169bad3025306a3754006266e1c0acdd6980918351baa00314a02a660d00b82c604660d26ea8c08cc1a4dd50182999832981f98339baa001132533306a001153306705d1613232533306c001153306905f1613232533306e001153306b06116132325333070001153306d0631613253330713074002149854cc1b819058c94cccccc1d400454cc1b81905854cc1b81905854cc1b81905854cc1b8190584dd7000983900098390011929999998398008a998360310b0a998360310b0a998360310b09bad001153306c0621630700013070002325333333071001153306a06016153306a06016153306a060161375a0022a660d40c02c60dc00260dc00464a6666660de0022a660d00bc2c2a660d00bc2c2a660d00bc2c26eb400454cc1a017858c1b0004c1a0dd50008a9983302e0b299999983600088008a9983282d8b0a9983282d8b0a9983282d8b0a9983282d8b183498331baa001153306449013c65787065637420496e6c696e65446174756d2870656c6c65745f646174756d29203d2070656c6c65745f696e7075742e6f75747075742e646174756d0016300d30653754604060ca6ea8008c104ccc040dd5980f98321baa301f306437540026eb8c078c190dd50271bae301f3064375409c60cc60c66ea800454cc1852401ff65787065637420536f6d652870656c6c65745f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656e6b7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d2070656c6c65745f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a202020202020202020202900163301802e2325333061303b3063375400229404cdc79bae3067306437540020a2603a60c66ea8c074c18cdd5180f18319baa0013303600105253333330650011001153305e05116153305e05116153305e05116153305e051163062305f37540022a660ba09e2c600c60bc6ea800454cc17013458c180004cc00c0988cdd7980b982e9baa0013017305d3754603060ba6ea8044dd6982f182d9baa02d1325333059303400c132533305a3034305c375400226464a6660b8607060bc6ea80044c8c8c8c94ccc1814ccc1800185288a99830a491d6d7573745f62655f76616c69645f61737465726961203f2046616c73650014a02a6660c0a6660c0008294454cc185241226d7573745f686176655f617374657269615f706f736974696f6e203f2046616c73650014a02a6660c0a6660c0006294454cc1852411c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02a6660c0a6660c0004294454cc185241206d7573745f726573706563745f6c61746573745f74696d65203f2046616c73650014a02a6660c0002294454cc1852401246d7573745f7370656e645f74776f5f7363726970745f696e70757473203f2046616c73650014a029405280a5014a06074601e6601205c46024603a60c66ea8c078c18cdd500098039bad30643061375400666e20ccc030c0140a004807d20003375e6e98cc184cdd81ba8022375004097adef6c60374c660c297bdb181010000010100004bd6f7b6300a9982e8288b180c182f1baa3018305e375404a60746660126eacc060c174dd5180c182e9baa3060305d37540026eb8c05cc174dd50239bae3018305d375408e2a660b60a42c66024050464a6660b6606a60ba6ea8004528099b8f375c60c260bc6ea8004124c05cc174dd5180b982e9baa3018305d3754002264a6660b4a6660b466e20ccc024c00809403c071200014a22a660b692011c6d7573745f6275726e5f736869705f746f6b656e203f2046616c73650014a02a6660b4002294454cc16d2401236d7573745f7370656e645f6f6e655f7363726970745f696e707574203f2046616c73650014a02940c0d4c024cc00c0a08c030c05cc174dd5180c182e9baa0012323300100100222533305f00114bd6f7b630099191919299982f99b8f489000021003133064337606ea4008dd3000998030030019bab3061003375c60be00460c600460c20026e2405888c8cc00400400c894ccc17800452f5c026464a6660b8600a0042660c20046600800800226600800800260c400460c0002460b860ba60ba002600200244a6660b2002290000981a19801001182e0009191980080080111299982c8008a5eb804c8ccc888c8cc00400400c894ccc17c004400c4c8cc184dd3998309ba90063306137526eb8c178004cc184dd41bad305f0014bd7019801801983180118308009bae3058001375660b20026600600660ba00460b600244464a6660aa606260ae6ea8004520001375a60b660b06ea8004c94ccc154c0c4c15cdd50008a6103d87a800013233001001375660b860b26ea8008894ccc16c004530103d87a80001323232533305a3371e00e6eb8c17000c4c0dccc17cdd4000a5eb804cc014014008dd6982e001182f801182e80099804001801180080091299982a8008a4000260606600400460b00024a66609e605260a26ea8c030c148dd50008a5014a2609e6ea808854cc139241f565787065637420536f6d65285f29203d0a2020202020206c6973742e66696e64280a2020202020202020696e707574732c0a2020202020202020666e28696e70757429207b0a202020202020202020206c6973742e616e79280a202020202020202020202020646963742e6b6579732876616c75652e746f6b656e7328696e7075742e6f75747075742e76616c75652c2073686970796172645f706f6c69637929292c0a202020202020202020202020666e286e616d6529207b206e616d65203d3d2070696c6f745f746f6b656e5f6e616d65207d2c0a20202020202020202020290a20202020202020207d2c0a20202020202029001622323300100100322533305400114c0103d87a8000132323253330533371e00c6eb8c15400c4c0c0cc160dd3000a5eb804cc014014008dd5982a801182c001182b0009bae3051304e37540022a660989215d6578706563742053637269707443726564656e7469616c2873686970796172645f706f6c69637929203d0a202020202020736869705f696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c00163007304d3754600e609a6ea8c020c134dd5000982798261baa001153304a49013665787065637420536f6d6528736869705f696e70757429203d2066696e645f696e70757428696e707574732c20736869705f726566290016323300201823375e600e609a6ea8004008c138c12cdd500c9119198008008019129998278008a60103d87a800013232533304d30050021302a330520024bd70099802002000982980118288008a99824248120657870656374205370656e6428736869705f72656629203d20707572706f73650016304c304937540022a6608e92015865787065637420536f6d65286d61785f73706565645f726174696f6e616c29203d0a202020202020726174696f6e616c2e6e6577286d61785f73706565642e64697374616e63652c206d61785f73706565642e74696d6529001633001375a600460906ea80c4dd6980198241baa031225333046302000114c103d87a80001533304633710002900009811998259811998259ba830240023304b3750604800297ae04bd7009811998259811998259ba80023304b375000297ae04bd70118250009182498250009bad30473048002375c608c002608c0046eb8c110004c110008dd6982100098210011bad30400013040002375a607c00260746ea8040c0f0c0f4c0f4c0f4008dd5981d800981d981d8011bac3039001303930390023758606e00260666ea8c0d8008c0d4c0d8004c0c4dd50008a4c2a6605e92011856616c696461746f722072657475726e65642066616c7365001365632533302d30070011325333032001153302f0271613232533303400115330310291613253330353038002149854cc0c80a858c94cccccc0e400454cc0c80a85854cc0c80a85854cc0c80a8584dd68008a998190150b181b000981b00119299999981b8008a998180140b0a998180140b0a998180140b09bad0011533030028163034001303037540042a66605a6012002264a6660640022a6605e04e2c264a666066606c0042930a998180140b19299999981b8008a998180140b0a998180140b0a998180140b09bad0011533030028163034001303037540042a66605a60100022a66606260606ea8008526153302e026161533302d3370e90030008a99981898181baa002149854cc0b80985854cc0b809858c0b8dd5000a99999981980088008a998160120b0a998160120b0a998160120b0a998160120b19800801011912999815180218161baa002132533302f001153302c00216132325333031001153302e00416132325333033001153303000616132325333035001153303200816132325333037001153303400a16132325333039001153303600c16132533303a303d002149854cc0dc03458c94cccccc0f800454cc0dc0345854cc0dc0345854cc0dc034584dd68008a9981b8068b181d800981d80119299999981e0008a9981a8058b0a9981a8058b0a9981a8058b0a9981a8058b09bae0013039001303900232533333303a0011533033009161533033009161533033009161533033009161375c002606e002606e00464a6666660700022a6606200e2c2a6606200e2c2a6606200e2c26eb400454cc0c401c58c0d4004c0d4008c94cccccc0d800454cc0bc0145854cc0bc0145854cc0bc014584dd68008a998178028b1819800981980119299999981a0008a998168018b0a998168018b0a998168018b09bad001153302d003163031001302d37540042a660560022ca66666605e01420142a660500422c2a660500422c2a660500422c2a660500422c605a60546ea8024dc3a40006e1d2004370e90011ba548000dc0a40006e012002371090000a998108008b0a998108008b0a998108008b0a998108008b248191496e636f72726563742072656465656d6572207479706520666f722076616c696461746f72207370656e642e0a2020202020202020202020202020202020202020446f75626c6520636865636b20796f7520686176652077726170706564207468652072656465656d657220747970652061732073706563696669656420696e20796f757220706c757475732e6a736f6e00375a0026eb4004dd68009bad001375c0026eb800524196657870656374205b736869705f6f75747075745d203d0a202020202020202020206c6973742e66696c746572280a2020202020202020202020206f7574707574732c0a202020202020202020202020666e286f757470757429207b206f75747075742e61646472657373203d3d20736869705f696e7075742e6f75747075742e61646472657373207d2c0a20202020202020202020290049013965787065637420496e6c696e65446174756d28736869705f6f75747075745f646174756d29203d20736869705f6f75747075742e646174756d0049013765787065637420736869705f6f75747075745f646174756d3a2053686970446174756d203d20736869705f6f75747075745f646174756d004901476578706563742046696e6974652874785f6561726c696573745f74696d6529203d2076616c69646974795f72616e67652e6c6f7765725f626f756e642e626f756e645f74797065004901456578706563742046696e6974652874785f6c61746573745f74696d6529203d2076616c69646974795f72616e67652e75707065725f626f756e642e626f756e645f747970650049012f6578706563742070656c6c65745f646174756d3a2050656c6c6574446174756d203d2070656c6c65745f646174756d004901ff65787065637420536f6d6528617374657269615f696e70757429203d0a202020202020202020206c6973742e66696e64280a202020202020202020202020696e707574732c0a202020202020202020202020666e28696e70757429207b0a20202020202020202020202020207768656e20696e7075742e6f75747075742e616464726573732e7061796d656e745f63726564656e7469616c206973207b0a20202020202020202020202020202020566572696669636174696f6e4b657943726564656e7469616c285f29202d3e2046616c73650a2020202020202020202020202020202053637269707443726564656e7469616c28616464725f7061796d656d6e7429202d3e0a202020202020202020202020202020202020616464725f7061796d656e74203d3d20617374657269615f76616c696461746f725f616464726573730a20202020202020202020202020207d0a2020202020202020202020207d2c0a20202020202020202020290049011672656465656d65723a205368697052656465656d657200490110646174756d3a2053686970446174756d0049013265787065637420617374657269615f646174756d3a2041737465726961446174756d203d20617374657269615f646174756d00490153657870656374205b736869705f73746174655d203d0a202020202020202020207472616e73616374696f6e2e66696e645f7363726970745f6f757470757473286f7574707574732c20706f6c6963795f6964290049012965787065637420736869705f646174756d3a2053686970446174756d203d20736869705f646174756d00490120657870656374205b285f2c202d31295d203d206d696e7465645f746f6b656e730049011a72656465656d65723a20536869707961726452656465656d6572005734ae7155ceaab9e5573eae815d0aba257481", + "hash": "7f9d0e69b13f25c4c319ca0d17a0e0a3a864e244adcad0bcb5d4ad3f" } ], "definitions": { diff --git a/onchain/src/validators/asteria.ak b/onchain/src/validators/asteria.ak index 5c398f6..e7e79cd 100644 --- a/onchain/src/validators/asteria.ak +++ b/onchain/src/validators/asteria.ak @@ -1,7 +1,10 @@ +use aiken/dict use aiken/list use aiken/math/rational.{compare_with, from_int} use aiken/option -use aiken/transaction.{InlineDatum, ScriptContext, Spend, Transaction} +use aiken/transaction.{ + InlineDatum, ScriptContext, Spend, Transaction, find_input, +} use aiken/transaction/value.{ada_asset_name, ada_policy_id} use asteria/types.{ AddNewShip, AssetClass, AsteriaDatum, AsteriaRedeemer, ConsumeAsteria, Mine, @@ -22,8 +25,7 @@ validator( let Transaction { inputs, outputs, .. } = transaction let AsteriaDatum { ship_counter, shipyard_policy } = datum expect Spend(asteria_ref) = purpose - expect [asteria_input] = - list.filter(inputs, fn(input) { input.output_reference == asteria_ref }) + expect Some(asteria_input) = find_input(inputs, asteria_ref) when redeemer is { AddNewShip -> { @@ -68,17 +70,20 @@ validator( expect InlineDatum(asteria_output_datum) = asteria_output.datum expect asteria_output_datum: AsteriaDatum = asteria_output_datum + // check if ship_token is present in some input expect Some(_) = list.find( inputs, fn(input) { - utils.is_ship_token_in_utxo(input.output, shipyard_policy) + list.any( + dict.keys(value.tokens(input.output.value, shipyard_policy)), + fn(name) { utils.has_prefix("SHIP", name) }, + ) }, ) expect Some(percentage) = rational.new(max_asteria_mining, 100) - let input_rewards = - value.lovelace_of(asteria_input.output.value) - 2_000_000 - let output_rewards = value.lovelace_of(asteria_output.value) - 2_000_000 + let input_rewards = value.lovelace_of(asteria_input.output.value) + let output_rewards = value.lovelace_of(asteria_output.value) let must_respect_max_mining = compare_with( from_int(output_rewards), @@ -96,11 +101,12 @@ validator( } ConsumeAsteria -> { + // check that there is a wallet input with the admin token let admin_token_input = list.find( inputs, fn(input) { - utils.is_wallet_address(input.output.address) && value.quantity_of( + not(utils.is_script_address(input.output.address)) && value.quantity_of( input.output.value, admin_token.policy, admin_token.name, diff --git a/onchain/src/validators/deploy.ak b/onchain/src/validators/deploy.ak index 1bc1ed6..3b7592f 100644 --- a/onchain/src/validators/deploy.ak +++ b/onchain/src/validators/deploy.ak @@ -12,7 +12,7 @@ validator(admin_token: AssetClass) { list.find( ctx.transaction.inputs, fn(input) { - utils.is_wallet_address(input.output.address) && value.quantity_of( + not(utils.is_script_address(input.output.address)) && value.quantity_of( input.output.value, admin_token.policy, admin_token.name, diff --git a/onchain/src/validators/pellet.ak b/onchain/src/validators/pellet.ak index d96fb9c..567d741 100644 --- a/onchain/src/validators/pellet.ak +++ b/onchain/src/validators/pellet.ak @@ -1,6 +1,9 @@ +use aiken/dict use aiken/list.{filter} use aiken/option -use aiken/transaction.{InlineDatum, Output, ScriptContext, Spend, Transaction} +use aiken/transaction.{ + InlineDatum, Output, ScriptContext, Spend, Transaction, find_input, +} use aiken/transaction/value.{quantity_of} use asteria/types.{ AssetClass, ConsumePellet, PelletDatum, PelletRedeemer, Provide, @@ -19,9 +22,8 @@ validator(admin_token: AssetClass) { Provide(amount) -> { let PelletDatum { fuel, shipyard_policy, .. } = datum - expect Spend(utxo_ref) = purpose - expect [own_input] = - list.filter(inputs, fn(input) { input.output_reference == utxo_ref }) + expect Spend(pellet_ref) = purpose + expect Some(own_input) = find_input(inputs, pellet_ref) expect [own_output] = filter( outputs, @@ -30,11 +32,15 @@ validator(admin_token: AssetClass) { expect InlineDatum(out_datum) = own_output.datum expect out_datum: PelletDatum = out_datum + // check if ship_token is present in some input expect Some(_) = list.find( inputs, fn(input) { - utils.is_ship_token_in_utxo(input.output, shipyard_policy) + list.any( + dict.keys(value.tokens(input.output.value, shipyard_policy)), + fn(name) { utils.has_prefix("SHIP", name) }, + ) }, ) @@ -59,11 +65,12 @@ validator(admin_token: AssetClass) { } ConsumePellet -> { + // check that there is a wallet input with the admin token let admin_token_input = list.find( inputs, fn(input) { - utils.is_wallet_address(input.output.address) && value.quantity_of( + not(utils.is_script_address(input.output.address)) && value.quantity_of( input.output.value, admin_token.policy, admin_token.name, diff --git a/onchain/src/validators/spacetime.ak b/onchain/src/validators/spacetime.ak index 1bf0da1..35785d0 100644 --- a/onchain/src/validators/spacetime.ak +++ b/onchain/src/validators/spacetime.ak @@ -3,9 +3,10 @@ use aiken/dict use aiken/interval.{Finite} use aiken/list use aiken/math/rational -use aiken/option use aiken/string -use aiken/transaction.{InlineDatum, Mint, ScriptContext, Spend, Transaction} +use aiken/transaction.{ + InlineDatum, Mint, ScriptContext, Spend, Transaction, find_input, +} use aiken/transaction/credential.{ Address, ScriptCredential, VerificationKeyCredential, } @@ -20,7 +21,7 @@ use asteria/utils validator( pellet_validator_address: ScriptAddress, asteria_validator_address: ScriptAddress, - _admin_token: AssetClass, + admin_token: AssetClass, max_speed: Speed, max_ship_fuel: Int, fuel_per_step: Int, @@ -43,26 +44,22 @@ validator( expect Some(max_speed_rational) = rational.new(max_speed.distance, max_speed.time) expect Spend(ship_ref) = purpose - expect [ship_input] = - list.filter(inputs, fn(input) { input.output_reference == ship_ref }) + expect Some(ship_input) = find_input(inputs, ship_ref) expect ScriptCredential(shipyard_policy) = ship_input.output.address.payment_credential + // check if pilot_token is present in some input expect Some(_) = list.find( inputs, fn(input) { - utils.is_pilot_token_in_utxo( - input.output, - shipyard_policy, - pilot_token_name, + list.any( + dict.keys(value.tokens(input.output.value, shipyard_policy)), + fn(name) { name == pilot_token_name }, ) }, ) - let must_hold_ship_token = - quantity_of(ship_input.output.value, shipyard_policy, ship_token_name) == 1 - when redeemer is { MoveShip(delta_x, delta_y) -> { expect [ship_output] = @@ -80,9 +77,6 @@ validator( expect Some(speed) = rational.new(distance, tx_latest_time - tx_earliest_time) - let must_have_enough_fuel = required_fuel <= fuel - let must_preserve_ship_value = - ship_input.output.value == ship_output.value let must_preserve_pilot_token = pilot_token_name == ship_output_datum.pilot_token_name let must_update_x = ship_output_datum.pos_x == pos_x + delta_x @@ -93,18 +87,32 @@ validator( let must_respect_max_speed = rational.compare_with(speed, <=, max_speed_rational) let must_respect_latest_time = last_move_latest_time <= tx_earliest_time + let must_have_enough_fuel = required_fuel <= fuel + let must_have_token_and_minada = + list.length(ship_output.value |> value.flatten) == 2 && quantity_of( + ship_output.value, + shipyard_policy, + ship_token_name, + ) == 1 + let must_spend_one_script_input = + list.length( + list.filter( + inputs, + fn(input) { utils.is_script_address(input.output.address) }, + ), + ) == 1 and { must_update_x?, must_update_y?, must_update_fuel?, must_update_upper_bound?, - must_hold_ship_token?, must_have_enough_fuel?, - must_preserve_ship_value?, must_preserve_pilot_token?, must_respect_max_speed?, must_respect_latest_time?, + must_have_token_and_minada?, + must_spend_one_script_input?, } } @@ -127,6 +135,13 @@ validator( } }, ) + let must_be_valid_pellet = + value.quantity_of( + pellet_input.output.value, + admin_token.policy, + admin_token.name, + ) > 0 + expect InlineDatum(pellet_datum) = pellet_input.output.datum expect pellet_datum: PelletDatum = pellet_datum expect Finite(tx_earliest_time) = validity_range.lower_bound.bound_type @@ -136,21 +151,34 @@ validator( let must_not_exceed_capacity = fuel + amount <= max_ship_fuel let must_update_datum = ship_output_datum == ShipDatum { ..datum, fuel: fuel + amount } - let must_preserve_ship_value = - ship_input.output.value == ship_output.value let must_respect_latest_time = last_move_latest_time <= tx_earliest_time + let must_have_token_and_minada = + list.length(ship_output.value |> value.flatten) == 2 && quantity_of( + ship_output.value, + shipyard_policy, + ship_token_name, + ) == 1 + let must_spend_two_script_inputs = + list.length( + list.filter( + inputs, + fn(input) { utils.is_script_address(input.output.address) }, + ), + ) == 2 and { - must_hold_ship_token?, + must_be_valid_pellet?, must_have_pellet_position?, must_not_exceed_capacity?, must_update_datum?, - must_preserve_ship_value?, must_respect_latest_time?, + must_have_token_and_minada?, + must_spend_two_script_inputs?, } } MineAsteria -> { - expect Some(_) = + // check that the Asteria UTxO is present as an input + expect Some(asteria_input) = list.find( inputs, fn(input) { @@ -161,27 +189,46 @@ validator( } }, ) + let must_be_valid_asteria = + value.quantity_of( + asteria_input.output.value, + admin_token.policy, + admin_token.name, + ) > 0 + expect Finite(tx_earliest_time) = validity_range.lower_bound.bound_type let must_have_asteria_position = (pos_x, pos_y) == (0, 0) let must_burn_ship_token = quantity_of(from_minted_value(mint), shipyard_policy, ship_token_name) < 0 let must_respect_latest_time = last_move_latest_time <= tx_earliest_time + let must_spend_two_script_inputs = + list.length( + list.filter( + inputs, + fn(input) { utils.is_script_address(input.output.address) }, + ), + ) == 2 and { - must_hold_ship_token?, + must_be_valid_asteria?, must_have_asteria_position?, must_burn_ship_token?, must_respect_latest_time?, + must_spend_two_script_inputs?, } } Quit -> { let must_burn_ship_token = quantity_of(from_minted_value(mint), shipyard_policy, ship_token_name) < 0 - and { - must_hold_ship_token?, - must_burn_ship_token?, - } + let must_spend_one_script_input = + list.length( + list.filter( + inputs, + fn(input) { utils.is_script_address(input.output.address) }, + ), + ) == 1 + must_burn_ship_token? && must_spend_one_script_input? } } } @@ -191,11 +238,9 @@ validator( let ScriptContext { transaction, purpose } = ctx let Transaction { inputs, outputs, mint, validity_range, .. } = transaction expect Mint(policy_id) = purpose - let minted_tokens = + let minted_value = mint |> value.from_minted_value - |> value.tokens(policy_id) - |> dict.to_list() when redeemer is { MintShip -> { @@ -210,37 +255,37 @@ validator( } }, ) + let must_be_valid_asteria = + value.quantity_of( + asteria_input.output.value, + admin_token.policy, + admin_token.name, + ) > 0 expect InlineDatum(asteria_datum) = asteria_input.output.datum expect asteria_datum: AsteriaDatum = asteria_datum - expect [(ship_token_name, 1)] = - list.filter( - minted_tokens, - fn(token) { utils.has_prefix("SHIP", token.1st) }, - ) - expect [(pilot_token_name, 1)] = - list.filter( - minted_tokens, - fn(token) { utils.has_prefix("PILOT", token.1st) }, - ) - expect [ship_state] = transaction.find_script_outputs(outputs, policy_id) expect InlineDatum(ship_datum) = ship_state.datum expect ship_datum: ShipDatum = ship_datum expect Finite(tx_latest_time) = validity_range.upper_bound.bound_type - let must_respect_ship_name = - ship_token_name == bytearray.concat( + let ship_token_name = + bytearray.concat( "SHIP", bytearray.from_string(string.from_int(asteria_datum.ship_counter)), ) - let must_respect_pilot_name = - pilot_token_name == bytearray.concat( + let pilot_token_name = + bytearray.concat( "PILOT", bytearray.from_string(string.from_int(asteria_datum.ship_counter)), ) - let must_mint_two_assets = list.length(minted_tokens) == 2 + let expected_minted_value = + value.from_asset(policy_id, ship_token_name, 1) + |> value.add(policy_id, pilot_token_name, 1) + + let must_mint_ship_and_pilot_tokens = + minted_value == expected_minted_value let must_respect_min_distance = utils.distance(ship_datum.pos_x, ship_datum.pos_y) >= min_asteria_distance let must_have_initial_fuel = ship_datum.fuel == initial_fuel @@ -249,30 +294,33 @@ validator( ship_datum.pilot_token_name == pilot_token_name let must_have_latest_time = ship_datum.last_move_latest_time == tx_latest_time - let must_hold_ship_token = - value.quantity_of(ship_state.value, policy_id, ship_token_name) == 1 + let must_have_token_and_minada = + list.length(ship_state.value |> value.flatten) == 2 && quantity_of( + ship_state.value, + policy_id, + ship_token_name, + ) == 1 and { - must_mint_two_assets?, - must_respect_ship_name?, - must_respect_pilot_name?, + must_be_valid_asteria?, + must_mint_ship_and_pilot_tokens?, must_respect_min_distance?, must_have_initial_fuel?, must_have_ship_name?, must_have_pilot_name?, must_have_latest_time?, - must_hold_ship_token?, + must_have_token_and_minada?, } } BurnShip -> { - let ship_input = - list.find( - inputs, - fn(input) { utils.is_ship_token_in_utxo(input.output, policy_id) }, - ) + let minted_tokens = + minted_value + |> value.tokens(policy_id) + |> dict.to_list() + // check that only one token is burnt expect [(_, -1)] = minted_tokens - option.is_some(ship_input)? + True } } } diff --git a/onchain/src/validators/tests/asteria.ak b/onchain/src/validators/tests/asteria.ak index c8301bf..eee1b91 100644 --- a/onchain/src/validators/tests/asteria.ak +++ b/onchain/src/validators/tests/asteria.ak @@ -178,7 +178,7 @@ type MineTestOptions { fn default_mine_options() { MineTestOptions { - lovelace_mined: 4_000_000, + lovelace_mined: 6_000_000, preserve_counter: True, include_ship_token: True, } @@ -186,7 +186,7 @@ fn default_mine_options() { fn mine(options: MineTestOptions) -> Bool { let ship_mint_lovelace_fee = 2_000 - let max_asteria_mining = 40 + let max_asteria_mining = 50 let ship_counter = 7 let admin_token = AssetClass { policy: mock.admin_policy, name: mock.admin_token_name } @@ -329,7 +329,7 @@ test mine_no_ship_token() fail { } test mine_exceed_mining() fail { - mine(MineTestOptions { ..default_mine_options(), lovelace_mined: 4_000_001 }) + mine(MineTestOptions { ..default_mine_options(), lovelace_mined: 6_000_001 }) } test mine_alter_counter() fail { diff --git a/onchain/src/validators/tests/pellet.ak b/onchain/src/validators/tests/pellet.ak index 8628a82..8cefb2b 100644 --- a/onchain/src/validators/tests/pellet.ak +++ b/onchain/src/validators/tests/pellet.ak @@ -197,41 +197,41 @@ test provide_ok() { provide(default_provide_test_options()) } -test provide_not_enough_fuel() fail { +test provide_no_ship_token() fail { let options = - ProvideTestOptions { ..default_provide_test_options(), provided_amount: 60 } + ProvideTestOptions { + ..default_provide_test_options(), + ship_token_amount: 0, + } provide(options) } -test provide_wrong_datum_update() fail { - let default = default_provide_test_options() +test provide_wrong_ship_token_name() fail { let options = ProvideTestOptions { - ..default, - datum_out: PelletDatum { ..default.datum_out, fuel: 1000 }, + ..default_provide_test_options(), + ship_token_name: "SHI7", } provide(options) } -test provide_no_ship_token() fail { +test provide_not_enough_fuel() fail { let options = - ProvideTestOptions { - ..default_provide_test_options(), - ship_token_amount: 0, - } + ProvideTestOptions { ..default_provide_test_options(), provided_amount: 60 } provide(options) } -test provide_wrong_ship_token_name() fail { +test provide_wrong_datum_update() fail { + let default = default_provide_test_options() let options = ProvideTestOptions { - ..default_provide_test_options(), - ship_token_name: "SHI7", + ..default, + datum_out: PelletDatum { ..default.datum_out, fuel: 1000 }, } provide(options) } -test provide_no_admin_token() fail { +test provide_no_admin_token_input() fail { let options = ProvideTestOptions { ..default_provide_test_options(), diff --git a/onchain/src/validators/tests/shipyard.ak b/onchain/src/validators/tests/shipyard.ak index 240e10b..7c9612d 100644 --- a/onchain/src/validators/tests/shipyard.ak +++ b/onchain/src/validators/tests/shipyard.ak @@ -282,6 +282,20 @@ test mint_ship_token_not_paid() fail { ship_mint(options) } +test mint_add_extra_token() fail { + let options = set_mint_test_options(default_args()) + let wrong_value = + from_lovelace(2_000_000) + |> add(options.shipyard_policy, options.ship_token_name, 1) + |> add("aaaa", "tokenA", 1) + let options = + MintTestOptions { + ..set_mint_test_options(default_args()), + ship_value: wrong_value, + } + ship_mint(options) +} + // ============================================================================================== // Burn Tests // ============================================================================================== @@ -410,12 +424,6 @@ test burn_ok() { ship_burn(set_burn_test_options()) } -test burn_no_ship_input() fail { - let options = - BurnTestOptions { ..set_burn_test_options(), include_ship_input: False } - ship_burn(options) -} - test burn_more_than_one() fail { let def_options = set_burn_test_options() let burnt_value = diff --git a/onchain/src/validators/tests/spacetime.ak b/onchain/src/validators/tests/spacetime.ak index fa912f8..40eef99 100644 --- a/onchain/src/validators/tests/spacetime.ak +++ b/onchain/src/validators/tests/spacetime.ak @@ -8,9 +8,7 @@ use aiken/transaction.{ use aiken/transaction/credential.{ Address, ScriptCredential, VerificationKeyCredential, } -use aiken/transaction/value.{ - ada_asset_name, ada_policy_id, add, from_lovelace, zero, -} +use aiken/transaction/value.{add, from_lovelace, lovelace_of, zero} use asteria/test_mock as mock use asteria/test_utils use asteria/types.{ @@ -32,7 +30,8 @@ type MoveTestOptions { include_ship_input: Bool, include_ship_output: Bool, include_pilot_token: Bool, - preserve_value: Bool, + include_ship_token_output: Bool, + exclude_extra_token: Bool, preserve_pilot_token: Bool, update_x: Bool, update_y: Bool, @@ -50,7 +49,8 @@ fn default_move_options() { include_ship_input: True, include_ship_output: True, include_pilot_token: True, - preserve_value: True, + include_ship_token_output: True, + exclude_extra_token: True, preserve_pilot_token: True, update_x: True, update_y: True, @@ -179,10 +179,14 @@ fn move(options: MoveTestOptions) -> Bool { let ship_out = Output { address: ship_address, - value: if options.preserve_value { - ship_in.output.value + value: if options.include_ship_token_output { + if options.exclude_extra_token { + ship_in.output.value + } else { + ship_in.output.value |> value.add("aaaa", "tokenA", 1) + } } else { - ship_in.output.value |> add(ada_policy_id, ada_asset_name, 1) + ship_in.output.value |> lovelace_of |> from_lovelace }, datum: InlineDatum(ship_datum_out), reference_script: None, @@ -271,10 +275,6 @@ test move_ok() { move(default_move_options()) } -test move_no_ship_token() fail { - move(MoveTestOptions { ..default_move_options(), include_ship_token: False }) -} - test move_no_ship_input() fail { move(MoveTestOptions { ..default_move_options(), include_ship_input: False }) } @@ -287,18 +287,33 @@ test move_no_pilot_token() fail { move(MoveTestOptions { ..default_move_options(), include_pilot_token: False }) } +test move_no_ship_token_output() fail { + move( + MoveTestOptions { + ..default_move_options(), + include_ship_token_output: False, + }, + ) +} + +test move_add_extra_token() fail { + move(MoveTestOptions { ..default_move_options(), exclude_extra_token: False }) +} + test move_not_enough_fuel() fail { move(MoveTestOptions { ..default_move_options(), initial_fuel: 5 }) } -test move_alter_ship_value() fail { - move(MoveTestOptions { ..default_move_options(), preserve_value: False }) +test move_exceed_max_speed() fail { + move(MoveTestOptions { ..default_move_options(), delta_x: 30, delta_y: 1 }) } -test move_alter_pilot_token() fail { - move( - MoveTestOptions { ..default_move_options(), preserve_pilot_token: False }, - ) +test move_no_respect_latest_time() fail { + move(MoveTestOptions { ..default_move_options(), respect_latest_time: False }) +} + +test move_no_update_fuel() fail { + move(MoveTestOptions { ..default_move_options(), update_fuel: False }) } test move_no_update_x() fail { @@ -309,20 +324,14 @@ test move_no_update_y() fail { move(MoveTestOptions { ..default_move_options(), update_y: False }) } -test move_no_update_fuel() fail { - move(MoveTestOptions { ..default_move_options(), update_fuel: False }) -} - test move_no_update_upper_bound() fail { move(MoveTestOptions { ..default_move_options(), update_latest_time: False }) } -test move_exceed_max_speed() fail { - move(MoveTestOptions { ..default_move_options(), delta_x: 30, delta_y: 1 }) -} - -test move_no_respect_latset_time() fail { - move(MoveTestOptions { ..default_move_options(), respect_latest_time: False }) +test move_alter_pilot_token() fail { + move( + MoveTestOptions { ..default_move_options(), preserve_pilot_token: False }, + ) } // ============================================================================================== @@ -336,8 +345,11 @@ type GatherTestOptions { ship_pos_y: Int, update_fuel: Bool, preserve_pos_x: Bool, + include_pilot_token: Bool, include_ship_token: Bool, respect_latest_time: Bool, + include_ship_token_output: Bool, + exclude_extra_token: Bool, } fn default_gather_options() { @@ -348,8 +360,11 @@ fn default_gather_options() { ship_pos_y: 10, update_fuel: True, preserve_pos_x: True, + include_pilot_token: True, include_ship_token: True, respect_latest_time: True, + include_ship_token_output: True, + exclude_extra_token: True, } } @@ -464,8 +479,12 @@ fn gather(options: GatherTestOptions) -> Bool { let pilot_in = { let output = { let value = - min_ada - |> add(mock.shipyard_policy, mock.pilot_token_name, 1) + if options.include_pilot_token { + min_ada + |> add(mock.shipyard_policy, mock.pilot_token_name, 1) + } else { + min_ada + } Output { address: pilot_address, value, @@ -483,7 +502,15 @@ fn gather(options: GatherTestOptions) -> Bool { let ship_out = Output { address: ship_address, - value: ship_in.output.value, + value: if options.include_ship_token_output { + if options.exclude_extra_token { + ship_in.output.value + } else { + ship_in.output.value |> value.add("aaaa", "tokenA", 1) + } + } else { + ship_in.output.value |> lovelace_of |> from_lovelace + }, datum: InlineDatum(ship_datum_out), reference_script: None, } @@ -563,9 +590,24 @@ test gather_ok() { gather(default_gather_options()) } -test gather_no_ship_token() fail { +test gather_no_pilot_token() fail { gather( - GatherTestOptions { ..default_gather_options(), include_ship_token: False }, + GatherTestOptions { ..default_gather_options(), include_pilot_token: False }, + ) +} + +test gather_no_ship_token_output() fail { + gather( + GatherTestOptions { + ..default_gather_options(), + include_ship_token_output: False, + }, + ) +} + +test gather_add_extra_token() fail { + gather( + GatherTestOptions { ..default_gather_options(), exclude_extra_token: False }, ) } @@ -604,6 +646,7 @@ test gather_no_respect_latset_time() fail { type MineTestOptions { ship_pos_x: Int, ship_pos_y: Int, + include_pilot_token: Bool, include_asteria_input: Bool, burn_ship_token: Bool, include_ship_token: Bool, @@ -614,6 +657,7 @@ fn default_mine_options() { MineTestOptions { ship_pos_x: 0, ship_pos_y: 0, + include_pilot_token: True, include_asteria_input: True, burn_ship_token: True, include_ship_token: True, @@ -705,8 +749,12 @@ fn mine(options: MineTestOptions) -> Bool { let pilot_in = { let output = { let value = - min_ada - |> add(mock.shipyard_policy, mock.pilot_token_name, 1) + if options.include_pilot_token { + min_ada + |> add(mock.shipyard_policy, mock.pilot_token_name, 1) + } else { + min_ada + } Output { address: pilot_address, value, @@ -814,16 +862,12 @@ test mine_mine_ok() { mine(default_mine_options()) } -test mine_no_ship_token() fail { - mine(MineTestOptions { ..default_mine_options(), include_ship_token: False }) -} - -test mine_wrong_x_pos() fail { - mine(MineTestOptions { ..default_mine_options(), ship_pos_x: 1 }) +test mine_no_pilot_token() fail { + mine(MineTestOptions { ..default_mine_options(), include_pilot_token: False }) } -test mine_wrong_y_pos() fail { - mine(MineTestOptions { ..default_mine_options(), ship_pos_y: 1 }) +test mine_ship_token_not_burnt() fail { + mine(MineTestOptions { ..default_mine_options(), burn_ship_token: False }) } test mine_no_asteria_input() fail { @@ -832,8 +876,16 @@ test mine_no_asteria_input() fail { ) } -test mine_ship_token_not_burnt() fail { - mine(MineTestOptions { ..default_mine_options(), burn_ship_token: False }) +test mine_wrong_x_pos() fail { + mine(MineTestOptions { ..default_mine_options(), ship_pos_x: 1 }) +} + +test mine_wrong_y_pos() fail { + mine(MineTestOptions { ..default_mine_options(), ship_pos_y: 1 }) +} + +test mine_no_respect_latset_time() fail { + mine(MineTestOptions { ..default_mine_options(), respect_latest_time: False }) } // ============================================================================================== @@ -842,11 +894,16 @@ test mine_ship_token_not_burnt() fail { type QuitTestOptions { burn_ship_token: Bool, + include_pilot_token: Bool, include_ship_token: Bool, } fn default_quit_options() { - QuitTestOptions { burn_ship_token: True, include_ship_token: True } + QuitTestOptions { + burn_ship_token: True, + include_pilot_token: True, + include_ship_token: True, + } } fn quit(options: QuitTestOptions) -> Bool { @@ -904,8 +961,12 @@ fn quit(options: QuitTestOptions) -> Bool { let pilot_in = { let output = { let value = - min_ada - |> add(mock.shipyard_policy, mock.pilot_token_name, 1) + if options.include_pilot_token { + min_ada + |> add(mock.shipyard_policy, mock.pilot_token_name, 1) + } else { + min_ada + } Output { address: pilot_address, value, @@ -999,10 +1060,10 @@ test quit_ok() { quit(default_quit_options()) } -test quit_ship_token_not_burnt() fail { - quit(QuitTestOptions { ..default_quit_options(), burn_ship_token: False }) +test quit_no_pilot_token() fail { + quit(QuitTestOptions { ..default_quit_options(), include_pilot_token: False }) } -test quit_no_ship_token() fail { - quit(QuitTestOptions { ..default_quit_options(), include_ship_token: False }) +test quit_ship_token_not_burnt() fail { + quit(QuitTestOptions { ..default_quit_options(), burn_ship_token: False }) }