{"network":"chipnet","category":null,"resultPublicKey":"03aebe45bea6f9721ce15ccb93d7481690bcf5f235cb0411e3b899b0bb53e42935","upgradePublicKey":"024bb4f9364ef459e2212cf29539ce54039cab5efc2213a8204d94af3320b6899d","arcadeArtifact":{"contractName":"FundedArcade","constructorInputs":[{"name":"category","type":"bytes32"},{"name":"resultKey","type":"pubkey"},{"name":"upgradeKey","type":"pubkey"}],"abi":[{"name":"migrate","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"approval","type":"datasig"}]},{"name":"migrateCabinet","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"approval","type":"datasig"}]},{"name":"transfer","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"nextOwner","type":"bytes20"}]},{"name":"withdraw","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"removed","type":"int"}]},{"name":"deposit","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"added","type":"int"}]},{"name":"fund","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"fee","type":"int"},{"name":"deadline","type":"int"},{"name":"ticket","type":"datasig"}]},{"name":"fundPvp","inputs":[{"name":"firstPk","type":"pubkey"},{"name":"firstSig","type":"sig"},{"name":"secondPk","type":"pubkey"},{"name":"secondSig","type":"sig"},{"name":"fee","type":"int"},{"name":"deadline","type":"int"},{"name":"ticket","type":"datasig"}]},{"name":"settle","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"result","type":"datasig"},{"name":"payout","type":"int"},{"name":"points","type":"int"}]},{"name":"release","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"}]},{"name":"claim","inputs":[{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"},{"name":"claimed","type":"int"}]}],"bytecode":"5379ce537a517e875379cf82777b9c9a7bcf527f757b879a OP_0 OP_DEFINE 7ca97bcf5a7f7701147f7588828c7f7701618851 OP_1 OP_DEFINE 76d178ce8876cc7cc69d51 OP_2 OP_DEFINE 76cd78c788528a OP_3 OP_DEFINE c0009cc0519c9b69c3539cc4539c9a6952ce008852d1008800c751c78800538a51538a9a6900ce7c517e87 OP_4 OP_DEFINE OP_3 OP_PICK OP_0 OP_NUMEQUAL OP_IF OP_INPUTINDEX OP_0 OP_NUMEQUALVERIFY OP_TXINPUTCOUNT OP_2 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_2 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_1 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_1 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OVER 0101 1e OP_0 OP_INVOKE OP_0 OP_2 OP_PICK 0103 20 OP_0 OP_INVOKE OP_BOOLOR OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2ROT OP_CHECKSIGVERIFY OP_0 OP_2 OP_INVOKE OP_VERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_NUMEQUALVERIFY OP_4 OP_ROLL 48534d31 OP_ROT OP_CAT OP_0 OP_OUTPUTBYTECODE OP_SHA256 OP_CAT OP_3 OP_ROLL OP_CHECKDATASIG OP_NIP OP_NIP OP_ELSE OP_3 OP_PICK OP_1 OP_NUMEQUAL OP_IF OP_INPUTINDEX OP_0 OP_NUMEQUAL OP_INPUTINDEX OP_1 OP_NUMEQUAL OP_BOOLOR OP_VERIFY OP_TXINPUTCOUNT OP_3 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_3 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_2 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_2 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_UTXOBYTECODE OP_1 OP_UTXOBYTECODE OP_EQUALVERIFY OP_0 OP_OVER 0102 18 OP_0 OP_INVOKE OP_VERIFY OP_1 OP_OVER 0103 20 OP_0 OP_INVOKE OP_VERIFY OP_0 OP_UTXOTOKENCOMMITMENT OP_10 OP_SPLIT OP_DROP OP_2 OP_SPLIT OP_NIP OP_1 OP_UTXOTOKENCOMMITMENT OP_10 OP_SPLIT OP_DROP OP_2 OP_SPLIT OP_NIP OP_EQUALVERIFY OP_1 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2ROT OP_CHECKSIGVERIFY OP_0 OP_2 OP_INVOKE OP_1 OP_2 OP_INVOKE OP_BOOLAND OP_VERIFY OP_0 OP_OUTPUTBYTECODE OP_1 OP_OUTPUTBYTECODE OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT OP_1 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENAMOUNT OP_1 OP_UTXOTOKENAMOUNT OP_NUMEQUALVERIFY OP_4 OP_ROLL 48534d31 OP_ROT OP_CAT OP_0 OP_OUTPUTBYTECODE OP_SHA256 OP_CAT OP_3 OP_ROLL OP_CHECKDATASIG OP_NIP OP_NIP OP_ELSE OP_3 OP_PICK OP_2 OP_NUMEQUAL OP_IF OP_6 OP_ROLL OP_SIZE 14 OP_EQUALVERIFY OP_INPUTINDEX OP_0 OP_NUMEQUALVERIFY OP_TXINPUTCOUNT OP_2 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_2 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_1 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_1 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_2 OP_PICK 0101 1e OP_0 OP_INVOKE OP_0 OP_3 OP_ROLL 0103 20 OP_0 OP_INVOKE OP_BOOLOR OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2ROT OP_CHECKSIGVERIFY OP_0 OP_3 OP_INVOKE OP_VERIFY OP_0 OP_UTXOTOKENCOMMITMENT OP_0 OP_OUTPUTTOKENCOMMITMENT OP_OVER OP_10 OP_SPLIT OP_DROP OP_3 OP_ROLL OP_CAT OP_ROT 1e OP_SPLIT OP_NIP OP_CAT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_NUMEQUAL OP_NIP OP_NIP OP_NIP OP_ELSE OP_3 OP_PICK OP_3 OP_NUMEQUAL OP_IF OP_INPUTINDEX OP_0 OP_NUMEQUALVERIFY OP_TXINPUTCOUNT OP_2 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_3 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_1 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_2 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OVER 0101 1e OP_0 OP_INVOKE OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_5 OP_ROLL OP_5 OP_PICK OP_CHECKSIGVERIFY OP_0 OP_3 OP_INVOKE OP_VERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_5 OP_PICK OP_0 OP_GREATERTHAN OP_6 OP_PICK OP_0 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_7 OP_PICK OP_SUB OP_NUMEQUALVERIFY OP_1 OP_OUTPUTBYTECODE 76a914 OP_6 OP_ROLL OP_HASH160 OP_CAT 88ac OP_CAT OP_EQUALVERIFY OP_4 OP_ROLL OP_2 OP_DIV OP_1 OP_OUTPUTTOKENAMOUNT OP_OVER OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_EQUALVERIFY OP_0 OP_GREATERTHAN OP_IF OP_1 OP_OUTPUTTOKENCATEGORY OP_OVER OP_EQUALVERIFY OP_ELSE OP_1 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUALVERIFY OP_ENDIF OP_2DROP OP_2DROP OP_1 OP_ELSE OP_3 OP_PICK OP_4 OP_NUMEQUAL OP_IF OP_INPUTINDEX OP_0 OP_NUMEQUALVERIFY OP_TXINPUTCOUNT OP_3 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_3 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OVER 0101 1e OP_0 OP_INVOKE OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2ROT OP_CHECKSIGVERIFY OP_0 OP_3 OP_INVOKE OP_VERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_1 OP_UTXOTOKENCATEGORY OP_OVER OP_EQUAL OP_1 OP_UTXOTOKENCOMMITMENT OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_2 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_2 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_4 OP_PICK OP_0 OP_GREATERTHAN OP_5 OP_PICK OP_1 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_6 OP_PICK OP_ADD OP_NUMEQUALVERIFY OP_1 OP_UTXOTOKENAMOUNT OP_5 OP_ROLL OP_SUB OP_1 OP_OUTPUTTOKENAMOUNT OP_OVER OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_EQUALVERIFY OP_1 OP_OUTPUTBYTECODE OP_1 OP_UTXOBYTECODE OP_EQUALVERIFY OP_1 OP_OUTPUTVALUE OP_1 OP_UTXOVALUE OP_NUMEQUALVERIFY OP_0 OP_GREATERTHAN OP_IF OP_1 OP_OUTPUTTOKENCATEGORY OP_OVER OP_EQUALVERIFY OP_ELSE OP_1 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUALVERIFY OP_ENDIF OP_2DROP OP_2DROP OP_1 OP_ELSE OP_3 OP_PICK OP_5 OP_NUMEQUAL OP_IF OP_DUP OP_4 OP_INVOKE OP_VERIFY OP_0 OP_OVER 0101 1e OP_0 OP_INVOKE OP_VERIFY OP_1 OP_OVER 0102 18 OP_0 OP_INVOKE OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2ROT OP_CHECKSIGVERIFY OP_4 OP_PICK OP_0 OP_GREATERTHAN OP_5 OP_PICK OP_0 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK 1073cd1d OP_GREATERTHANOREQUAL OP_6 OP_PICK ffffff7f OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK 100e OP_SUB OP_CHECKLOCKTIMEVERIFY OP_DROP OP_1 OP_UTXOTOKENCOMMITMENT OP_2 OP_SPLIT OP_NIP OP_8 OP_SPLIT OP_DROP OP_DUP OP_4 OP_SPLIT OP_NIP 00000000 OP_EQUALVERIFY 48534632 OP_ROT OP_CAT OP_0 OP_OUTPOINTTXHASH OP_CAT OP_0 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_1 OP_OUTPOINTTXHASH OP_CAT OP_1 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_5 OP_PICK OP_8 OP_NUM2BIN OP_CAT OP_6 OP_PICK OP_4 OP_NUM2BIN OP_CAT OP_7 OP_ROLL OP_SWAP OP_3 OP_ROLL OP_CHECKDATASIGVERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_ROT OP_4 OP_SPLIT OP_DROP OP_CAT OP_5 OP_ROLL OP_4 OP_NUM2BIN OP_CAT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_4 OP_PICK OP_SUB OP_NUMEQUALVERIFY OP_1 OP_UTXOTOKENCOMMITMENT OP_DUP OP_10 OP_SPLIT OP_NIP OP_2 OP_SPLIT OP_DROP OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_OVER 1027 OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_OVER OP_12 OP_SPLIT OP_NIP OP_8 OP_SPLIT OP_DROP OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_OVER OP_1 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK 1027 OP_DIV OP_2 OP_PICK OP_MUL OP_6 OP_PICK 1027 OP_MOD OP_3 OP_ROLL OP_MUL 1027 OP_DIV OP_ADD OP_SWAP OP_5 OP_PICK OP_ADD OP_SWAP OP_SUB OP_1 OP_OUTPUTTOKENCOMMITMENT OP_2 OP_PICK OP_12 OP_SPLIT OP_DROP OP_ROT OP_8 OP_NUM2BIN OP_CAT OP_ROT 14 OP_SPLIT OP_NIP OP_CAT OP_EQUALVERIFY OP_1 OP_OUTPUTTOKENAMOUNT OP_1 OP_UTXOTOKENAMOUNT OP_4 OP_ROLL OP_ADD OP_NUMEQUAL OP_NIP OP_NIP OP_ELSE OP_3 OP_PICK OP_6 OP_NUMEQUAL OP_IF OP_INPUTINDEX OP_2 OP_LESSTHANOREQUAL OP_VERIFY OP_TXINPUTCOUNT OP_5 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_5 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OVER 0101 1e OP_0 OP_INVOKE OP_1 OP_2 OP_PICK 0101 1e OP_0 OP_INVOKE OP_BOOLAND OP_VERIFY OP_2 OP_OVER 0102 18 OP_0 OP_INVOKE OP_VERIFY OP_0 OP_UTXOBYTECODE OP_1 OP_UTXOBYTECODE OP_EQUALVERIFY OP_0 OP_UTXOBYTECODE OP_2 OP_UTXOBYTECODE OP_EQUALVERIFY OP_0 OP_3 OP_INVOKE OP_1 OP_3 OP_INVOKE OP_BOOLAND OP_2 OP_3 OP_INVOKE OP_BOOLAND OP_VERIFY OP_3 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_4 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_3 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_4 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_6 OP_ROLL OP_6 OP_PICK OP_CHECKSIG OP_BOOLAND OP_VERIFY OP_1 OP_6 OP_PICK OP_8 OP_PICK OP_1 OP_INVOKE OP_7 OP_ROLL OP_7 OP_PICK OP_CHECKSIG OP_BOOLAND OP_VERIFY OP_2ROT OP_EQUAL OP_NOT OP_VERIFY OP_4 OP_PICK OP_0 OP_GREATERTHAN OP_5 OP_PICK OP_0 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_5 OP_PICK OP_1 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK 1073cd1d OP_GREATERTHANOREQUAL OP_6 OP_PICK ffffff7f OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK 100e OP_SUB OP_CHECKLOCKTIMEVERIFY OP_DROP OP_2 OP_UTXOTOKENCOMMITMENT OP_2 OP_SPLIT OP_NIP OP_8 OP_SPLIT OP_DROP OP_DUP OP_4 OP_SPLIT OP_NIP 00000000 OP_EQUALVERIFY 48535032 OP_ROT OP_CAT OP_0 OP_OUTPOINTTXHASH OP_CAT OP_0 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_1 OP_OUTPOINTTXHASH OP_CAT OP_1 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_2 OP_OUTPOINTTXHASH OP_CAT OP_2 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_5 OP_PICK OP_8 OP_NUM2BIN OP_CAT OP_6 OP_PICK OP_4 OP_NUM2BIN OP_CAT OP_7 OP_ROLL OP_SWAP OP_3 OP_ROLL OP_CHECKDATASIGVERIFY OP_4 OP_SPLIT OP_DROP OP_4 OP_ROLL OP_4 OP_NUM2BIN OP_CAT OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_2 OP_PICK OP_CAT OP_EQUALVERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT OP_1 OP_UTXOTOKENCOMMITMENT OP_ROT OP_CAT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_4 OP_PICK OP_SUB OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENAMOUNT OP_1 OP_UTXOTOKENAMOUNT OP_4 OP_PICK OP_SUB OP_NUMEQUALVERIFY OP_2 OP_UTXOTOKENCOMMITMENT OP_DUP OP_10 OP_SPLIT OP_NIP OP_2 OP_SPLIT OP_DROP OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_OVER 1027 OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_OVER OP_12 OP_SPLIT OP_NIP OP_8 OP_SPLIT OP_DROP OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_OVER OP_2 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK 1027 OP_DIV OP_2 OP_PICK OP_MUL OP_6 OP_PICK 1027 OP_MOD OP_3 OP_ROLL OP_MUL 1027 OP_DIV OP_ADD OP_SWAP OP_5 OP_PICK OP_ROT OP_SUB OP_2 OP_MUL OP_ADD OP_2 OP_OUTPUTTOKENCOMMITMENT OP_2 OP_PICK OP_12 OP_SPLIT OP_DROP OP_ROT OP_8 OP_NUM2BIN OP_CAT OP_ROT 14 OP_SPLIT OP_NIP OP_CAT OP_EQUALVERIFY OP_2 OP_OUTPUTTOKENAMOUNT OP_2 OP_UTXOTOKENAMOUNT OP_4 OP_ROLL OP_2 OP_MUL OP_ADD OP_NUMEQUAL OP_NIP OP_NIP OP_ELSE OP_3 OP_PICK OP_7 OP_NUMEQUAL OP_IF OP_DUP OP_4 OP_INVOKE OP_VERIFY OP_0 OP_OVER 0101 26 OP_0 OP_INVOKE OP_VERIFY OP_1 OP_OVER 0102 18 OP_0 OP_INVOKE OP_VERIFY OP_0 OP_5 OP_PICK OP_7 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2ROT OP_CHECKSIGVERIFY OP_1 OP_UTXOTOKENCOMMITMENT OP_12 OP_SPLIT OP_NIP OP_8 OP_SPLIT OP_DROP OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_OVER OP_1 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_6 OP_PICK OP_0 OP_GREATERTHANOREQUAL OP_7 OP_PICK OP_1 OP_UTXOTOKENAMOUNT OP_3 OP_ROLL OP_SUB OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_1 OP_UTXOTOKENCOMMITMENT 14 OP_SPLIT OP_NIP OP_BIN2NUM OP_7 OP_PICK OP_0 OP_GREATERTHANOREQUAL OP_8 OP_PICK ffffff7f OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_0 OP_UTXOTOKENCOMMITMENT 1e OP_SPLIT OP_NIP OP_4 OP_SPLIT OP_DROP OP_1 OP_UTXOTOKENCOMMITMENT OP_2 OP_SPLIT OP_NIP OP_4 OP_SPLIT OP_DROP OP_EQUALVERIFY 48535332 OP_ROT OP_CAT OP_0 OP_OUTPOINTTXHASH OP_CAT OP_0 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_1 OP_OUTPOINTTXHASH OP_CAT OP_1 OP_OUTPOINTINDEX OP_4 OP_NUM2BIN OP_CAT OP_6 OP_PICK OP_8 OP_NUM2BIN OP_CAT OP_7 OP_PICK OP_4 OP_NUM2BIN OP_CAT OP_5 OP_ROLL OP_SWAP OP_3 OP_ROLL OP_CHECKDATASIGVERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT 1e OP_SPLIT OP_DROP OP_EQUALVERIFY OP_4 OP_PICK OP_LESSTHAN OP_IF OP_1 OP_OUTPUTTOKENCOMMITMENT OP_1 OP_UTXOTOKENCOMMITMENT 14 OP_SPLIT OP_DROP OP_5 OP_PICK OP_4 OP_NUM2BIN OP_CAT OP_EQUALVERIFY OP_ELSE OP_1 OP_OUTPUTTOKENCOMMITMENT OP_1 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_ENDIF OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_4 OP_PICK OP_ADD OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENAMOUNT OP_1 OP_UTXOTOKENAMOUNT OP_4 OP_ROLL OP_SUB OP_NUMEQUAL OP_NIP OP_NIP OP_NIP OP_ELSE OP_3 OP_PICK OP_8 OP_NUMEQUAL OP_IF OP_INPUTINDEX OP_0 OP_NUMEQUALVERIFY OP_TXINPUTCOUNT OP_2 OP_NUMEQUAL OP_TXOUTPUTCOUNT OP_2 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_0 OP_SWAP 0101 26 OP_0 OP_INVOKE OP_VERIFY OP_1 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_1 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_4 OP_PICK OP_6 OP_PICK OP_1 OP_INVOKE OP_2ROT OP_CHECKSIG OP_BOOLAND OP_VERIFY OP_0 OP_3 OP_INVOKE OP_VERIFY OP_0 OP_UTXOTOKENCOMMITMENT 22 OP_SPLIT OP_NIP OP_BIN2NUM OP_CHECKLOCKTIMEVERIFY OP_DROP OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT 1e OP_SPLIT OP_DROP OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_NUMEQUAL OP_NIP OP_NIP OP_NIP OP_ELSE OP_3 OP_ROLL OP_9 OP_NUMEQUALVERIFY OP_DUP OP_4 OP_INVOKE OP_VERIFY OP_0 OP_OVER 0102 18 OP_0 OP_INVOKE OP_VERIFY OP_1 OP_SWAP 0103 20 OP_0 OP_INVOKE OP_VERIFY OP_0 OP_UTXOTOKENCOMMITMENT OP_10 OP_SPLIT OP_DROP OP_2 OP_SPLIT OP_NIP OP_1 OP_UTXOTOKENCOMMITMENT OP_10 OP_SPLIT OP_DROP OP_2 OP_SPLIT OP_NIP OP_EQUALVERIFY OP_1 OP_3 OP_PICK OP_5 OP_PICK OP_1 OP_INVOKE OP_VERIFY OP_2SWAP OP_CHECKSIGVERIFY OP_0 OP_UTXOTOKENCOMMITMENT OP_12 OP_SPLIT OP_NIP OP_8 OP_SPLIT OP_DROP OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_OVER OP_0 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_3 OP_PICK OP_0 OP_GREATERTHAN OP_4 OP_PICK OP_2 OP_PICK OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_12 OP_SPLIT OP_DROP OP_ROT OP_5 OP_PICK OP_SUB OP_8 OP_NUM2BIN OP_CAT OP_0 OP_UTXOTOKENCOMMITMENT 14 OP_SPLIT OP_NIP OP_CAT OP_EQUALVERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT OP_1 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_4 OP_PICK OP_SUB OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENAMOUNT OP_1 OP_UTXOTOKENAMOUNT OP_4 OP_ROLL OP_ADD OP_NUMEQUAL OP_NIP OP_NIP OP_ENDIF OP_ENDIF OP_ENDIF OP_ENDIF OP_ENDIF OP_ENDIF OP_ENDIF OP_ENDIF OP_ENDIF","source":"pragma cashscript ^0.14.0;\n\nfunction carry(int index) returns (bool) {\n    require(tx.outputs[index].tokenCategory == tx.inputs[index].tokenCategory);\n    require(tx.outputs[index].value == tx.inputs[index].value);\n    return true;\n}\n\nfunction keep(int index) returns (bool) {\n    require(tx.outputs[index].lockingBytecode == tx.inputs[index].lockingBytecode);\n    return carry(index);\n}\n\nfunction authorize(int index, pubkey pk, sig signature) returns (bool) {\n    require(hash160(pk) == tx.inputs[index].nftCommitment.split(10)[1].split(20)[0]);\n    \/\/ Commit to every input and output, including funding UTXOs and the recipient.\n    bytes encoded = bytes(signature);\n    require(encoded.split(encoded.length - 1)[1] == 0x61);\n    return true;\n}\n\nfunction shape(int index, bytes32 category, bytes2 role, int size) returns (bool) {\n    return tx.inputs[index].tokenCategory == category + 0x01\n        && tx.inputs[index].nftCommitment.length == size\n        && tx.inputs[index].nftCommitment.split(2)[0] == role;\n}\n\nfunction pair(bytes32 category) returns (bool) {\n    require(this.activeInputIndex == 0 || this.activeInputIndex == 1);\n    require(tx.inputs.length == 3 && tx.outputs.length == 3);\n    require(tx.inputs[2].tokenCategory == 0x);\n    require(tx.outputs[2].tokenCategory == 0x);\n    require(tx.inputs[0].lockingBytecode == tx.inputs[1].lockingBytecode);\n    require(keep(0) && keep(1));\n    return tx.inputs[0].tokenCategory == category + 0x01;\n}\n\n\/\/ One script owns continuation for all three roles. This avoids circular\n\/\/ avatar\/cabinet script hashes. Roles and state lengths are always checked.\n\/\/ Funded avatars are locked to one cabinet until settlement or owner timeout.\ncontract FundedArcade(bytes32 category, pubkey resultKey, pubkey upgradeKey) {\n    function migrate(pubkey pk, sig signature, datasig approval) {\n        require(this.activeInputIndex == 0);\n        require(tx.inputs.length == 2 && tx.outputs.length == 2);\n        require(tx.inputs[1].tokenCategory == 0x && tx.outputs[1].tokenCategory == 0x);\n        require(shape(0, category, 0x0101, 30) || shape(0, category, 0x0103, 32));\n        require(authorize(0, pk, signature));\n        require(checkSig(signature, pk));\n        require(carry(0));\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount);\n        require(checkDataSig(approval, 0x48534d31 + category + sha256(tx.outputs[0].lockingBytecode), upgradeKey));\n    }\n\n    function migrateCabinet(pubkey pk, sig signature, datasig approval) {\n        require(this.activeInputIndex == 0 || this.activeInputIndex == 1);\n        require(tx.inputs.length == 3 && tx.outputs.length == 3);\n        require(tx.inputs[2].tokenCategory == 0x && tx.outputs[2].tokenCategory == 0x);\n        require(tx.inputs[0].lockingBytecode == tx.inputs[1].lockingBytecode);\n        require(shape(0, category, 0x0102, 24));\n        require(shape(1, category, 0x0103, 32));\n        require(tx.inputs[0].nftCommitment.split(10)[0].split(2)[1] == tx.inputs[1].nftCommitment.split(10)[0].split(2)[1]);\n        require(authorize(1, pk, signature));\n        require(checkSig(signature, pk));\n        require(carry(0) && carry(1));\n        require(tx.outputs[0].lockingBytecode == tx.outputs[1].lockingBytecode);\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment);\n        require(tx.outputs[1].nftCommitment == tx.inputs[1].nftCommitment);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount);\n        require(tx.outputs[1].tokenAmount == tx.inputs[1].tokenAmount);\n        require(checkDataSig(approval, 0x48534d31 + category + sha256(tx.outputs[0].lockingBytecode), upgradeKey));\n    }\n\n    function transfer(pubkey pk, sig signature, bytes20 nextOwner) {\n        require(this.activeInputIndex == 0);\n        require(tx.inputs.length == 2 && tx.outputs.length == 2);\n        require(tx.inputs[1].tokenCategory == 0x && tx.outputs[1].tokenCategory == 0x);\n        require(shape(0, category, 0x0101, 30) || shape(0, category, 0x0103, 32));\n        require(authorize(0, pk, signature));\n        require(checkSig(signature, pk));\n        require(keep(0));\n        bytes state = tx.inputs[0].nftCommitment;\n        require(tx.outputs[0].nftCommitment == state.split(10)[0] + nextOwner + state.split(30)[1]);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount);\n    }\n\n    function withdraw(pubkey pk, sig signature, int removed) {\n        require(this.activeInputIndex == 0);\n        require(tx.inputs.length == 2 && tx.outputs.length == 3);\n        require(tx.inputs[1].tokenCategory == 0x && tx.outputs[2].tokenCategory == 0x);\n        require(shape(0, category, 0x0101, 30));\n        require(authorize(0, pk, signature));\n        require(checkSig(signature, pk));\n        require(keep(0));\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment);\n        require(removed > 0 && removed <= tx.inputs[0].tokenAmount);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount - removed);\n        require(tx.outputs[1].lockingBytecode == new LockingBytecodeP2PKH(hash160(pk)));\n        int received = removed \/ 2;\n        require(tx.outputs[1].tokenAmount == received);\n        require(tx.outputs[1].nftCommitment == 0x);\n        if (received > 0) {\n            require(tx.outputs[1].tokenCategory == category);\n        } else {\n            require(tx.outputs[1].tokenCategory == 0x);\n        }\n        \/\/ With no other token-bearing inputs or outputs, the omitted half\n        \/\/ really burns. Odd base units round the burn up.\n    }\n\n    function deposit(pubkey pk, sig signature, int added) {\n        require(this.activeInputIndex == 0);\n        require(tx.inputs.length == 3 && tx.outputs.length == 3);\n        require(shape(0, category, 0x0101, 30));\n        require(authorize(0, pk, signature));\n        require(checkSig(signature, pk));\n        require(keep(0));\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment);\n        require(tx.inputs[1].tokenCategory == category && tx.inputs[1].nftCommitment == 0x);\n        require(tx.inputs[2].tokenCategory == 0x && tx.outputs[2].tokenCategory == 0x);\n        require(added > 0 && added <= tx.inputs[1].tokenAmount);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount + added);\n        int change = tx.inputs[1].tokenAmount - added;\n        require(tx.outputs[1].tokenAmount == change);\n        require(tx.outputs[1].nftCommitment == 0x);\n        require(tx.outputs[1].lockingBytecode == tx.inputs[1].lockingBytecode);\n        require(tx.outputs[1].value == tx.inputs[1].value);\n        if (change > 0) {\n            require(tx.outputs[1].tokenCategory == category);\n        } else {\n            require(tx.outputs[1].tokenCategory == 0x);\n        }\n    }\n\n    function fund(pubkey pk, sig signature, int fee, int deadline, datasig ticket) {\n        require(pair(category));\n        require(shape(0, category, 0x0101, 30));\n        require(shape(1, category, 0x0102, 24));\n        require(authorize(0, pk, signature));\n        require(checkSig(signature, pk));\n        require(fee > 0 && fee <= tx.inputs[0].tokenAmount);\n        require(deadline >= 500003600 && deadline <= 2147483647);\n        require(tx.time >= deadline - 3600);\n        bytes cabinetId = tx.inputs[1].nftCommitment.split(2)[1].split(8)[0];\n        require(cabinetId.split(4)[1] == 0x00000000);\n        bytes message = 0x48534632 + category\n            + tx.inputs[0].outpointTransactionHash + toPaddedBytes(tx.inputs[0].outpointIndex, 4)\n            + tx.inputs[1].outpointTransactionHash + toPaddedBytes(tx.inputs[1].outpointIndex, 4)\n            + toPaddedBytes(fee, 8) + toPaddedBytes(deadline, 4);\n        require(checkDataSig(ticket, message, resultKey));\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment + cabinetId.split(4)[0] + toPaddedBytes(deadline, 4));\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount - fee);\n        bytes state = tx.inputs[1].nftCommitment;\n        int rewardBps = int(state.split(10)[1].split(2)[0]);\n        require(rewardBps >= 0 && rewardBps <= 10000);\n        int earned = int(state.split(12)[1].split(8)[0]);\n        require(earned >= 0 && earned <= tx.inputs[1].tokenAmount);\n        \/\/ Divide first so a max-supply-sized amount cannot overflow on * bps.\n        int rewards = (fee \/ 10000) * rewardBps + ((fee % 10000) * rewardBps) \/ 10000;\n        int nextEarned = earned + fee - rewards;\n        require(tx.outputs[1].nftCommitment == state.split(12)[0] + toPaddedBytes(nextEarned, 8) + state.split(20)[1]);\n        require(tx.outputs[1].tokenAmount == tx.inputs[1].tokenAmount + fee);\n    }\n\n    function fundPvp(pubkey firstPk, sig firstSig, pubkey secondPk, sig secondSig, int fee, int deadline, datasig ticket) {\n        require(this.activeInputIndex <= 2);\n        require(tx.inputs.length == 5 && tx.outputs.length == 5);\n        require(shape(0, category, 0x0101, 30) && shape(1, category, 0x0101, 30));\n        require(shape(2, category, 0x0102, 24));\n        require(tx.inputs[0].lockingBytecode == tx.inputs[1].lockingBytecode);\n        require(tx.inputs[0].lockingBytecode == tx.inputs[2].lockingBytecode);\n        require(keep(0) && keep(1) && keep(2));\n        require(tx.inputs[3].tokenCategory == 0x && tx.inputs[4].tokenCategory == 0x);\n        require(tx.outputs[3].tokenCategory == 0x && tx.outputs[4].tokenCategory == 0x);\n        require(authorize(0, firstPk, firstSig) && checkSig(firstSig, firstPk));\n        require(authorize(1, secondPk, secondSig) && checkSig(secondSig, secondPk));\n        require(firstPk != secondPk);\n        require(fee > 0 && fee <= tx.inputs[0].tokenAmount && fee <= tx.inputs[1].tokenAmount);\n        require(deadline >= 500003600 && deadline <= 2147483647);\n        require(tx.time >= deadline - 3600);\n        bytes cabinetId = tx.inputs[2].nftCommitment.split(2)[1].split(8)[0];\n        require(cabinetId.split(4)[1] == 0x00000000);\n        bytes message = 0x48535032 + category\n            + tx.inputs[0].outpointTransactionHash + toPaddedBytes(tx.inputs[0].outpointIndex, 4)\n            + tx.inputs[1].outpointTransactionHash + toPaddedBytes(tx.inputs[1].outpointIndex, 4)\n            + tx.inputs[2].outpointTransactionHash + toPaddedBytes(tx.inputs[2].outpointIndex, 4)\n            + toPaddedBytes(fee, 8) + toPaddedBytes(deadline, 4);\n        require(checkDataSig(ticket, message, resultKey));\n        bytes active = cabinetId.split(4)[0] + toPaddedBytes(deadline, 4);\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment + active);\n        require(tx.outputs[1].nftCommitment == tx.inputs[1].nftCommitment + active);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount - fee);\n        require(tx.outputs[1].tokenAmount == tx.inputs[1].tokenAmount - fee);\n        bytes state = tx.inputs[2].nftCommitment;\n        int rewardBps = int(state.split(10)[1].split(2)[0]);\n        require(rewardBps >= 0 && rewardBps <= 10000);\n        int earned = int(state.split(12)[1].split(8)[0]);\n        require(earned >= 0 && earned <= tx.inputs[2].tokenAmount);\n        int rewards = (fee \/ 10000) * rewardBps + ((fee % 10000) * rewardBps) \/ 10000;\n        int nextEarned = earned + (fee - rewards) * 2;\n        require(tx.outputs[2].nftCommitment == state.split(12)[0] + toPaddedBytes(nextEarned, 8) + state.split(20)[1]);\n        require(tx.outputs[2].tokenAmount == tx.inputs[2].tokenAmount + fee * 2);\n    }\n\n    function settle(pubkey pk, sig signature, datasig result, int payout, int points) {\n        require(pair(category));\n        require(shape(0, category, 0x0101, 38));\n        require(shape(1, category, 0x0102, 24));\n        require(authorize(0, pk, signature));\n        require(checkSig(signature, pk));\n        int earned = int(tx.inputs[1].nftCommitment.split(12)[1].split(8)[0]);\n        require(earned >= 0 && earned <= tx.inputs[1].tokenAmount);\n        require(payout >= 0 && payout <= tx.inputs[1].tokenAmount - earned);\n        int record = int(tx.inputs[1].nftCommitment.split(20)[1]);\n        require(points >= 0 && points <= 2147483647);\n        require(tx.inputs[0].nftCommitment.split(30)[1].split(4)[0] == tx.inputs[1].nftCommitment.split(2)[1].split(4)[0]);\n        \/\/ Bind a verified result to these exact UTXOs and this payout.\n        bytes message = 0x48535332 + category\n            + tx.inputs[0].outpointTransactionHash + toPaddedBytes(tx.inputs[0].outpointIndex, 4)\n            + tx.inputs[1].outpointTransactionHash + toPaddedBytes(tx.inputs[1].outpointIndex, 4)\n            + toPaddedBytes(payout, 8) + toPaddedBytes(points, 4);\n        require(checkDataSig(result, message, resultKey));\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment.split(30)[0]);\n        if (points > record) {\n            require(tx.outputs[1].nftCommitment == tx.inputs[1].nftCommitment.split(20)[0] + toPaddedBytes(points, 4));\n        } else {\n            require(tx.outputs[1].nftCommitment == tx.inputs[1].nftCommitment);\n        }\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount + payout);\n        require(tx.outputs[1].tokenAmount == tx.inputs[1].tokenAmount - payout);\n    }\n\n    function release(pubkey pk, sig signature) {\n        require(this.activeInputIndex == 0);\n        require(tx.inputs.length == 2 && tx.outputs.length == 2);\n        require(shape(0, category, 0x0101, 38));\n        require(tx.inputs[1].tokenCategory == 0x && tx.outputs[1].tokenCategory == 0x);\n        require(authorize(0, pk, signature) && checkSig(signature, pk));\n        require(keep(0));\n        require(tx.time >= int(tx.inputs[0].nftCommitment.split(34)[1]));\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment.split(30)[0]);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount);\n    }\n\n    function claim(pubkey pk, sig signature, int claimed) {\n        require(pair(category));\n        require(shape(0, category, 0x0102, 24));\n        require(shape(1, category, 0x0103, 32));\n        require(tx.inputs[0].nftCommitment.split(10)[0].split(2)[1]\n            == tx.inputs[1].nftCommitment.split(10)[0].split(2)[1]);\n        require(authorize(1, pk, signature));\n        require(checkSig(signature, pk));\n        int earned = int(tx.inputs[0].nftCommitment.split(12)[1].split(8)[0]);\n        require(earned >= 0 && earned <= tx.inputs[0].tokenAmount);\n        require(claimed > 0 && claimed <= earned);\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment.split(12)[0] + toPaddedBytes(earned - claimed, 8) + tx.inputs[0].nftCommitment.split(20)[1]);\n        require(tx.outputs[1].nftCommitment == tx.inputs[1].nftCommitment);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount - claimed);\n        require(tx.outputs[1].tokenAmount == tx.inputs[1].tokenAmount + claimed);\n    }\n}\n","fingerprint":"8b0203793ed4e577e779420b920ad514150ac442ada49b517e569f011a2dc189","debug":{"bytecode":"185379ce537a517e875379cf82777b9c9a7bcf527f757b879a0089147ca97bcf5a7f7701147f7588828c7f770161885151890b76d178ce8876cc7cc69d5152890776cd78c788528a53892bc0009cc0519c9b69c3539cc4539c9a6952ce008852d1008800c751c78800538a51538a9a6900ce7c517e8754895379009c63c0009dc3529cc4529c9a6951ce008751d100879a690078020101011e008a0052790201030120008a9b690055795779518a6971ad00528a6900d200cf8800d300d09d547a0448534d317b7e00cda87e537aba7777675379519c63c0009cc0519c9b69c3539cc4539c9a6952ce008752d100879a6900c751c78800780201020118008a6951780201030120008a6900cf5a7f75527f7751cf5a7f75527f77885155795779518a6971ad00528a51528a9a6900cd51cd8800d200cf8851d251cf8800d300d09d51d351d09d547a0448534d317b7e00cda87e537aba7777675379529c63567a82011488c0009dc3529cc4529c9a6951ce008751d100879a69005279020101011e008a00537a0201030120008a9b690055795779518a6971ad00538a6900cf00d2785a7f75537a7e7b011e7f777e8800d300d09c777777675379539c63c0009dc3529cc4539c9a6951ce008752d100879a690078020101011e008a690055795779518a69557a5579ad00538a6900d200cf88557900a0567900d0a19a6900d300d05779949d51cd0376a914567aa97e0288ac7e88547a529651d3789d51d2008800a06351d178886751d10088686d6d51675379549c63c0009dc3539cc4539c9a690078020101011e008a690055795779518a6971ad00538a6900d200cf8851ce788751cf00879a6952ce008752d100879a69547900a0557951d0a19a6900d300d05679939d51d0557a9451d3789d51d2008851cd51c78851cc51c69d00a06351d178886751d10088686d6d51675379559c6376548a690078020101011e008a6951780201020118008a690055795779518a6971ad547900a0557900d0a19a695579041073cd1da2567904ffffff7fa19a69557902100e94b17551cf527f77587f7576547f7704000000008804485346327b7e00c87e00c954807e51c87e51c954807e557958807e567954807e577a7c537abb00d200cf7b547f757e557a54807e8800d300d05479949d51cf765a7f77527f75817600a278021027a19a69785c7f77587f75817600a27851d0a19a69557902102796527995567902102797537a9502102796937c5579937c9451d252795c7f757b58807e7b01147f777e8851d351d0547a939c7777675379569c63c052a169c3559cc4559c9a690078020101011e008a515279020101011e008a9a6952780201020118008a6900c751c78800c752c78800538a51538a9a52538a9a6953ce008754ce00879a6953d1008754d100879a690055795779518a567a5679ac9a695156795879518a577a5779ac9a6971879169547900a0557900d0a19a557951d0a19a695579041073cd1da2567904ffffff7fa19a69557902100e94b17552cf527f77587f7576547f7704000000008804485350327b7e00c87e00c954807e51c87e51c954807e52c87e52c954807e557958807e567954807e577a7c537abb547f75547a54807e00d200cf52797e8851d251cf7b7e8800d300d05479949d51d351d05479949d52cf765a7f77527f75817600a278021027a19a69785c7f77587f75817600a27852d0a19a69557902102796527995567902102797537a9502102796937c55797b9452959352d252795c7f757b58807e7b01147f777e8852d352d0547a5295939c7777675379579c6376548a6900780201010126008a6951780201020118008a690055795779518a6971ad51cf5c7f77587f75817600a27851d0a19a69567900a2577951d0537a94a19a6951cf01147f7781577900a2587904ffffff7fa19a6900cf011e7f77547f7551cf527f77547f758804485353327b7e00c87e00c954807e51c87e51c954807e567958807e577954807e557a7c537abb00d200cf011e7f758854799f6351d251cf01147f75557954807e886751d251cf886800d300d05479939d51d351d0547a949c777777675379589c63c0009dc3529cc4529c9a69007c0201010126008a6951ce008751d100879a690054795679518a71ac9a6900538a6900cf01227f7781b17500d200cf011e7f758800d300d09c77777767537a599d76548a6900780201020118008a69517c0201030120008a6900cf5a7f75527f7751cf5a7f75527f77885153795579518a6972ad00cf5c7f77587f75817600a27800d0a19a69537900a054795279a19a6900d200cf5c7f757b55799458807e00cf01147f777e8851d251cf8800d300d05479949d51d351d0547a939c7777686868686868686868","sourceMap":"22::26:1;;::::1;14::20::0;;::::1;3::7::0;;::::1;9::12::0;;::::1;28::36::0;;::::1;42:4:53:5:0;;;;;43:16:43:37;:41::42;:8::44:1;44:16:44:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;45:26:45:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;46:22:46:23:0;:25::33;:35::41;:43::45;:16::46:1;;:56::57:0;:59::67;;:69::75;:77::79;:50::80:1;;:16;:8::82;47:26:47:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;48:25:48:38:0;:8::41:1;49:22:49:23:0;:16::24:1;;:8::26;50:27:50:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;51:27:51:28:0;:16::41:1;:55::56:0;:45::69:1;:8::71;52:29:52:37:0;;:39::49;:52::60;:39:::1;:81::82:0;:70::99:1;:63::100;:39;:102::112:0;;:8::115:1;42:65:53:5;;:4;55::72::0;;;;;56:16:56:37;:41::42;:16:::1;:46::67:0;:71::72;:46:::1;:16;:8::74;57:16:57:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;58:26:58:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;59:26:59:27:0;:16::44:1;:58::59:0;:48::76:1;:8::78;60:22:60:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;61:22:61:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;62:26:62:27:0;:16::42:1;:49::51:0;:16::52:1;:::55;:62::63:0;:16::64:1;:::67;:81::82:0;:71::97:1;:104::106:0;:71::107:1;:::110;:117::118:0;:71::119:1;:::122;:8::124;63:26:63:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;64:25:64:38:0;:8::41:1;65:22:65:23:0;:16::24:1;;:34::35:0;:28::36:1;;:16;:8::38;66:27:66:28:0;:16::45:1;:60::61:0;:49::78:1;:8::80;67:27:67:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;68:27:68:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;69:27:69:28:0;:16::41:1;:55::56:0;:45::69:1;:8::71;70:27:70:28:0;:16::41:1;:55::56:0;:45::69:1;:8::71;71:29:71:37:0;;:39::49;:52::60;:39:::1;:81::82:0;:70::99:1;:63::100;:39;:102::112:0;;:8::115:1;55:72:72:5;;:4;74::85::0;;;;;:48:74:65;;;;;75:16:75:37;:41::42;:8::44:1;76:16:76:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;77:26:77:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;78:22:78:23:0;:25::33;;:35::41;:43::45;:16::46:1;;:56::57:0;:59::67;;:69::75;:77::79;:50::80:1;;:16;:8::82;79:26:79:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;80:25:80:38:0;:8::41:1;81:21:81:22:0;:16::23:1;;:8::25;82:32:82:33:0;:22::48:1;83:27:83:28:0;:16::43:1;:47::52:0;:59::61;:47::62:1;:::65;:68::77:0;;:47:::1;:80::85:0;:92::94;:80::95:1;:::98;:47;:8::100;84:27:84:28:0;:16::41:1;:55::56:0;:45::69:1;:8::71;74:67:85:5;;;:4;87::109::0;;;;;88:16:88:37;:41::42;:8::44:1;89:16:89:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;90:26:90:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;91:22:91:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;92:26:92:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;93:25:93:34:0;;:36::38;;:8::41:1;94:21:94:22:0;:16::23:1;;:8::25;95:27:95:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;96:16:96:23:0;;:26::27;:16:::1;:31::38:0;;:52::53;:42::66:1;:31;:16;:8::68;97:27:97:28:0;:16::41:1;:55::56:0;:45::69:1;:72::79:0;;:45:::1;:8::81;98:27:98:28:0;:16::45:1;:49::86:0;:82::84;;:74::85:1;:49::86;;;:8::88;99:23:99:30:0;;:33::34;:23:::1;100:27:100:28:0;:16::41:1;:45::53:0;:8::55:1;101:27:101:28:0;:16::43:1;:47::49:0;:8::51:1;102:23:102:24:0;:12:::1;:26:104:9:0;103:31:103:32;:20::47:1;:51::59:0;:12::61:1;104:15:106:9:0;105:31:105:32;:20::47:1;:51::53:0;:12::55:1;104:15:106:9;87:61:109:5;;;:4;111::133::0;;;;;112:16:112:37;:41::42;:8::44:1;113:16:113:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;114:22:114:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;115:26:115:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;116:25:116:38:0;:8::41:1;117:21:117:22:0;:16::23:1;;:8::25;118:27:118:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;119:26:119:27:0;:16::42:1;:46::54:0;:16:::1;:68::69:0;:58::84:1;:88::90:0;:58:::1;:16;:8::92;120:26:120:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;121:16:121:21:0;;:24::25;:16:::1;:29::34:0;;:48::49;:38::62:1;:29;:16;:8::64;122:27:122:28:0;:16::41:1;:55::56:0;:45::69:1;:72::77:0;;:45:::1;:8::79;123:31:123:32:0;:21::45:1;:48::53:0;;:21:::1;124:27:124:28:0;:16::41:1;:45::51:0;:8::53:1;125:27:125:28:0;:16::43:1;:47::49:0;:8::51:1;126:27:126:28:0;:16::45:1;:59::60:0;:49::77:1;:8::79;127:27:127:28:0;:16::35:1;:49::50:0;:39::57:1;:8::59;128:21:128:22:0;:12:::1;:24:130:9:0;129:31:129:32;:20::47:1;:51::59:0;:12::61:1;130:15:132:9:0;131:31:131:32;:20::47:1;:51::53:0;:12::55:1;130:15:132:9;111:58:133:5;;;:4;135::163::0;;;;;136:21:136:29;:16::30:1;;:8::32;137:22:137:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;138:22:138:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;139:26:139:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;140:25:140:38:0;:8::41:1;141:16:141:19:0;;:22::23;:16:::1;:27::30:0;;:44::45;:34::58:1;:27;:16;:8::60;142:16:142:24:0;;:28::37;:16:::1;:41::49:0;;:53::63;:41:::1;:16;:8::65;143:27:143:35:0;;:38::42;:27:::1;:8::44;;144:36:144:37:0;:26::52:1;:59::60:0;:26::61:1;:::64;:71::72:0;:26::73:1;:::76;145:16:145:25:0;:32::33;:16::34:1;:::37;:41::51:0;:8::53:1;146:24:146:34:0;:37::45;:24:::1;147::147:25:0;:14::50:1;146:24;147:77::78:0;:67::93:1;:95::96:0;:53::97:1;146:24;148::148:25:0;:14::50:1;146:24;148:77::78:0;:67::93:1;:95::96:0;:53::97:1;146:24;149:28:149:31:0;;:33::34;:14::35:1;146:24;149:52::60:0;;:62::63;:38::64:1;146:24;150:29:150:35:0;;:37::44;:46::55;;:8::58:1;151:27:151:28:0;:16::43:1;:57::58:0;:47::73:1;:76::85:0;:92::93;:76::94:1;:::97;:47;:114::122:0;;:124::125;:100::126:1;:47;:8::128;152:27:152:28:0;:16::41:1;:55::56:0;:45::69:1;:72::75:0;;:45:::1;:8::77;153:32:153:33:0;:22::48:1;154:28:154:33:0;:40::42;:28::43:1;:::46;:53::54:0;:28::55:1;:::58;:24::59;155:16:155:25:0;:29::30;:16:::1;:34::43:0;:47::52;:34:::1;:16;:8::54;156:25:156:30:0;:37::39;:25::40:1;:::43;:50::51:0;:25::52:1;:::55;:21::56;157:16:157:22:0;:26::27;:16:::1;:31::37:0;:51::52;:41::65:1;:31;:16;:8::67;159:23:159:26:0;;:29::34;:23:::1;:38::47:0;;:22:::1;:52::55:0;;:58::63;:52:::1;:67::76:0;;:51:::1;:80::85:0;:50:::1;:22;160:25:160:31:0;:34::37;;:25:::1;:40::47:0;:25:::1;161:27:161:28:0;:16::43:1;:47::52:0;;:59::61;:47::62:1;:::65;:82::92:0;:94::95;:68::96:1;:47;:99::104:0;:111::113;:99::114:1;:::117;:47;:8::119;162:27:162:28:0;:16::41:1;:55::56:0;:45::69:1;:72::75:0;;:45:::1;:8::77;135:83:163:5;;:4;165::203::0;;;;;166:16:166:37;:41::42;:16:::1;:8::44;167:16:167:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;168:22:168:23:0;:25::33;:35::41;:43::45;:16::46:1;;:56::57:0;:59::67;;:69::75;:77::79;:50::80:1;;:16;:8::82;169:22:169:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;170:26:170:27:0;:16::44:1;:58::59:0;:48::76:1;:8::78;171:26:171:27:0;:16::44:1;:58::59:0;:48::76:1;:8::78;172:21:172:22:0;:16::23:1;;:32::33:0;:27::34:1;;:16;:43::44:0;:38::45:1;;:16;:8::47;173:26:173:27:0;:16::42:1;:46::48:0;:16:::1;:62::63:0;:52::78:1;:82::84:0;:52:::1;:16;:8::86;174:27:174:28:0;:16::43:1;:47::49:0;:16:::1;:64::65:0;:53::80:1;:84::86:0;:53:::1;:16;:8::88;175:26:175:27:0;:29::36;;:38::46;;:16::47:1;;:60::68:0;;:70::77;;:51::78:1;:16;:8::80;176:26:176:27:0;:29::37;;:39::48;;:16::49:1;;:62::71:0;;:73::81;;:53::82:1;:16;:8::84;177:16:177:35:0;::::1;;:8::37;178:16:178:19:0;;:22::23;:16:::1;:27::30:0;;:44::45;:34::58:1;:27;:16;:62::65:0;;:79::80;:69::93:1;:62;:16;:8::95;179:16:179:24:0;;:28::37;:16:::1;:41::49:0;;:53::63;:41:::1;:16;:8::65;180:27:180:35:0;;:38::42;:27:::1;:8::44;;181:36:181:37:0;:26::52:1;:59::60:0;:26::61:1;:::64;:71::72:0;:26::73:1;:::76;182:16:182:25:0;:32::33;:16::34:1;:::37;:41::51:0;:8::53:1;183:24:183:34:0;:37::45;:24:::1;184::184:25:0;:14::50:1;183:24;184:77::78:0;:67::93:1;:95::96:0;:53::97:1;183:24;185::185:25:0;:14::50:1;183:24;185:77::78:0;:67::93:1;:95::96:0;:53::97:1;183:24;186::186:25:0;:14::50:1;183:24;186:77::78:0;:67::93:1;:95::96:0;:53::97:1;183:24;187:28:187:31:0;;:33::34;:14::35:1;183:24;187:52::60:0;;:62::63;:38::64:1;183:24;188:29:188:35:0;;:37::44;:46::55;;:8::58:1;189:39:189:40:0;:23::41:1;:::44;:61::69:0;;:71::72;:47::73:1;:23;190:27:190:28:0;:16::43:1;:57::58:0;:47::73:1;:76::82:0;;:47:::1;:8::84;191:27:191:28:0;:16::43:1;:57::58:0;:47::73:1;:76::82:0;:47:::1;:8::84;192:27:192:28:0;:16::41:1;:55::56:0;:45::69:1;:72::75:0;;:45:::1;:8::77;193:27:193:28:0;:16::41:1;:55::56:0;:45::69:1;:72::75:0;;:45:::1;:8::77;194:32:194:33:0;:22::48:1;195:28:195:33:0;:40::42;:28::43:1;:::46;:53::54:0;:28::55:1;:::58;:24::59;196:16:196:25:0;:29::30;:16:::1;:34::43:0;:47::52;:34:::1;:16;:8::54;197:25:197:30:0;:37::39;:25::40:1;:::43;:50::51:0;:25::52:1;:::55;:21::56;198:16:198:22:0;:26::27;:16:::1;:31::37:0;:51::52;:41::65:1;:31;:16;:8::67;199:23:199:26:0;;:29::34;:23:::1;:38::47:0;;:22:::1;:52::55:0;;:58::63;:52:::1;:67::76:0;;:51:::1;:80::85:0;:50:::1;:22;200:25:200:31:0;:35::38;;:41::48;:35:::1;:52::53:0;:34:::1;:25;201:27:201:28:0;:16::43:1;:47::52:0;;:59::61;:47::62:1;:::65;:82::92:0;:94::95;:68::96:1;:47;:99::104:0;:111::113;:99::114:1;:::117;:47;:8::119;202:27:202:28:0;:16::41:1;:55::56:0;:45::69:1;:72::75:0;;:78::79;:72:::1;:45;:8::81;165:122:203:5;;:4;205::231::0;;;;;206:21:206:29;:16::30:1;;:8::32;207:22:207:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;208:22:208:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;209:26:209:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;210:25:210:38:0;:8::41:1;211:35:211:36:0;:25::51:1;:58::60:0;:25::61:1;:::64;:71::72:0;:25::73:1;:::76;:21::77;212:16:212:22:0;:26::27;:16:::1;:31::37:0;:51::52;:41::65:1;:31;:16;:8::67;213:16:213:22:0;;:26::27;:16:::1;:31::37:0;;:51::52;:41::65:1;:68::74:0;;:41:::1;:31;:16;:8::76;214:35:214:36:0;:25::51:1;:58::60:0;:25::61:1;:::64;:21::65;215:16:215:22:0;;:26::27;:16:::1;:31::37:0;;:41::51;:31:::1;:16;:8::53;216:26:216:27:0;:16::42:1;:49::51:0;:16::52:1;:::55;:62::63:0;:16::64:1;:::67;:81::82:0;:71::97:1;:104::105:0;:71::106:1;:::109;:116::117:0;:71::118:1;:::121;:8::123;218:24:218:34:0;:37::45;:24:::1;219::219:25:0;:14::50:1;218:24;219:77::78:0;:67::93:1;:95::96:0;:53::97:1;218:24;220::220:25:0;:14::50:1;218:24;220:77::78:0;:67::93:1;:95::96:0;:53::97:1;218:24;221:28:221:34:0;;:36::37;:14::38:1;218:24;221:55::61:0;;:63::64;:41::65:1;218:24;222:29:222:35:0;;:37::44;:46::55;;:8::58:1;223:27:223:28:0;:16::43:1;:57::58:0;:47::73:1;:80::82:0;:47::83:1;:::86;:8::88;224:12:224:18:0;;:::27:1;:29:226:9:0;225:31:225:32;:20::47:1;:61::62:0;:51::77:1;:84::86:0;:51::87:1;:::90;:107::113:0;;:115::116;:93::117:1;:51;:12::119;226:15:228:9:0;227:31:227:32;:20::47:1;:61::62:0;:51::77:1;:12::79;226:15:228:9;229:27:229:28:0;:16::41:1;:55::56:0;:45::69:1;:72::78:0;;:45:::1;:8::80;230:27:230:28:0;:16::41:1;:55::56:0;:45::69:1;:72::78:0;;:45:::1;:8::80;205:86:231:5;;;:4;233::243::0;;;;;234:16:234:37;:41::42;:8::44:1;235:16:235:32:0;:36::37;:16:::1;:41::58:0;:62::63;:41:::1;:16;:8::65;236:22:236:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;237:26:237:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;238:26:238:27:0;:29::31;;:33::42;;:16::43:1;;:56::69:0;:47::70:1;:16;:8::72;239:21:239:22:0;:16::23:1;;:8::25;240:41:240:42:0;:31::57:1;:64::66:0;:31::67:1;:::70;:27::71;:8::73;;241:27:241:28:0;:16::43:1;:57::58:0;:47::73:1;:80::82:0;:47::83:1;:::86;:8::88;242:27:242:28:0;:16::41:1;:55::56:0;:45::69:1;:8::71;233:47:243:5;;;:4;245::260::0;;;;246:21:246:29;:16::30:1;;:8::32;247:22:247:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;248:22:248:23:0;:25::33;:35::41;:43::45;:16::46:1;;:8::48;249:26:249:27:0;:16::42:1;:49::51:0;:16::52:1;:::55;:62::63:0;:16::64:1;:::67;250:25:250:26:0;:15::41:1;:48::50:0;:15::51:1;:::54;:61::62:0;:15::63:1;:::66;249:8::68;251:26:251:27:0;:29::31;;:33::42;;:16::43:1;;:8::45;252:25:252:38:0;:8::41:1;253:35:253:36:0;:25::51:1;:58::60:0;:25::61:1;:::64;:71::72:0;:25::73:1;:::76;:21::77;254:16:254:22:0;:26::27;:16:::1;:31::37:0;:51::52;:41::65:1;:31;:16;:8::67;255:16:255:23:0;;:26::27;:16:::1;:31::38:0;;:42::48;;:31:::1;:16;:8::50;256:27:256:28:0;:16::43:1;:57::58:0;:47::73:1;:80::82:0;:47::83:1;:::86;:103::109:0;:112::119;;:103:::1;:121::122:0;:89::123:1;:47;:136::137:0;:126::152:1;:159::161:0;:126::162:1;:::165;:47;:8::167;257:27:257:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;258:27:258:28:0;:16::41:1;:55::56:0;:45::69:1;:72::79:0;;:45:::1;:8::81;259:27:259:28:0;:16::41:1;:55::56:0;:45::69:1;:72::79:0;;:45:::1;:8::81;245:58:260:5;;41:0:261:1;;;;;;;;","logs":[],"requires":[{"ip":25,"line":43},{"ip":33,"line":44},{"ip":43,"line":45},{"ip":58,"line":46},{"ip":66,"line":47},{"ip":68,"line":48},{"ip":72,"line":49},{"ip":77,"line":50},{"ip":82,"line":51},{"ip":95,"line":52},{"ip":110,"line":56},{"ip":118,"line":57},{"ip":128,"line":58},{"ip":133,"line":59},{"ip":140,"line":60},{"ip":147,"line":61},{"ip":164,"line":62},{"ip":172,"line":63},{"ip":174,"line":64},{"ip":182,"line":65},{"ip":187,"line":66},{"ip":192,"line":67},{"ip":197,"line":68},{"ip":202,"line":69},{"ip":207,"line":70},{"ip":220,"line":71},{"ip":235,"line":75},{"ip":243,"line":76},{"ip":253,"line":77},{"ip":269,"line":78},{"ip":277,"line":79},{"ip":279,"line":80},{"ip":283,"line":81},{"ip":300,"line":83},{"ip":306,"line":84},{"ip":317,"line":88},{"ip":325,"line":89},{"ip":335,"line":90},{"ip":342,"line":91},{"ip":350,"line":92},{"ip":355,"line":93},{"ip":359,"line":94},{"ip":364,"line":95},{"ip":375,"line":96},{"ip":383,"line":97},{"ip":393,"line":98},{"ip":401,"line":100},{"ip":405,"line":101},{"ip":412,"line":103},{"ip":417,"line":105},{"ip":430,"line":112},{"ip":438,"line":113},{"ip":445,"line":114},{"ip":453,"line":115},{"ip":455,"line":116},{"ip":459,"line":117},{"ip":464,"line":118},{"ip":474,"line":119},{"ip":484,"line":120},{"ip":495,"line":121},{"ip":503,"line":122},{"ip":512,"line":124},{"ip":516,"line":125},{"ip":521,"line":126},{"ip":526,"line":127},{"ip":533,"line":129},{"ip":538,"line":131},{"ip":552,"line":136},{"ip":559,"line":137},{"ip":566,"line":138},{"ip":574,"line":139},{"ip":576,"line":140},{"ip":587,"line":141},{"ip":597,"line":142},{"ip":602,"line":143},{"ip":617,"line":145},{"ip":652,"line":150},{"ip":667,"line":151},{"ip":675,"line":152},{"ip":693,"line":155},{"ip":710,"line":157},{"ip":750,"line":161},{"ip":759,"line":162},{"ip":770,"line":166},{"ip":778,"line":167},{"ip":793,"line":168},{"ip":800,"line":169},{"ip":805,"line":170},{"ip":810,"line":171},{"ip":822,"line":172},{"ip":832,"line":173},{"ip":842,"line":174},{"ip":856,"line":175},{"ip":870,"line":176},{"ip":874,"line":177},{"ip":891,"line":178},{"ip":901,"line":179},{"ip":906,"line":180},{"ip":921,"line":182},{"ip":964,"line":188},{"ip":980,"line":190},{"ip":987,"line":191},{"ip":995,"line":192},{"ip":1003,"line":193},{"ip":1021,"line":196},{"ip":1038,"line":198},{"ip":1080,"line":201},{"ip":1091,"line":202},{"ip":1102,"line":206},{"ip":1109,"line":207},{"ip":1116,"line":208},{"ip":1124,"line":209},{"ip":1126,"line":210},{"ip":1144,"line":212},{"ip":1158,"line":213},{"ip":1174,"line":215},{"ip":1191,"line":216},{"ip":1226,"line":222},{"ip":1234,"line":223},{"ip":1251,"line":225},{"ip":1257,"line":227},{"ip":1266,"line":229},{"ip":1275,"line":230},{"ip":1286,"line":234},{"ip":1294,"line":235},{"ip":1301,"line":236},{"ip":1311,"line":237},{"ip":1322,"line":238},{"ip":1326,"line":239},{"ip":1333,"line":240},{"ip":1342,"line":241},{"ip":1348,"line":242},{"ip":1359,"line":246},{"ip":1366,"line":247},{"ip":1373,"line":248},{"ip":1390,"line":249},{"ip":1398,"line":251},{"ip":1400,"line":252},{"ip":1418,"line":254},{"ip":1429,"line":255},{"ip":1450,"line":256},{"ip":1455,"line":257},{"ip":1463,"line":258},{"ip":1472,"line":259}],"sourceTags":"92:93:sc;217:218:sc;225:229:pv;303:305:sc;756:757:sc;1088:1089:sc;1272:1274:sc;1345:1347:sc;1469:1470:sc","functions":[{"id":0,"name":"shape","inputs":[{"name":"index","type":"int"},{"name":"category","type":"bytes32"},{"name":"role","type":"bytes2"},{"name":"size","type":"int"}],"bytecode":"5379ce537a517e875379cf82777b9c9a7bcf527f757b879a","sourceMap":"23:21:23:26;;:11::41:1;:45::53:0;;:56::60;:45:::1;:11;24:21:24:26:0;;:11::41:1;:::48;;:52::56:0;:11:::1;23;25:21:25:26:0;:11::41:1;:48::49:0;:11::50:1;:::53;:57::61:0;:11:::1;23","logs":[],"requires":[]},{"id":1,"name":"authorize","inputs":[{"name":"index","type":"int"},{"name":"pk","type":"pubkey"},{"name":"signature","type":"sig"}],"bytecode":"7ca97bcf5a7f7701147f7588828c7f7701618851","sourceMap":"15:20:15:22;:12::23:1;:37::42:0;:27::57:1;:64::66:0;:27::67:1;:::70;:77::79:0;:27::80:1;:::83;:4::85;18:12:18:40;:26::44;:12::45;:::48;:52::56:0;:4::58:1;19:11:19:15:0","logs":[],"requires":[{"ip":10,"line":15},{"ip":16,"line":18}]},{"id":2,"name":"carry","inputs":[{"name":"index","type":"int"}],"bytecode":"76d178ce8876cc7cc69d51","sourceMap":"4:23:4:28;:12::43:1;:57::62:0;:47::77:1;:4::79;5:23:5:28:0;:12::35:1;:49::54:0;:39::61:1;:4::63;6:11:6:15:0","logs":[],"requires":[{"ip":4,"line":4},{"ip":9,"line":5}]},{"id":3,"name":"keep","inputs":[{"name":"index","type":"int"}],"bytecode":"76cd78c788528a","sourceMap":"10:23:10:28;:12::45:1;:59::64:0;:49::81:1;:4::83;11:11:11:23;","logs":[],"requires":[{"ip":4,"line":10}]},{"id":4,"name":"pair","inputs":[{"name":"category","type":"bytes32"}],"bytecode":"c0009cc0519c9b69c3539cc4539c9a6952ce008852d1008800c751c78800538a51538a9a6900ce7c517e87","sourceMap":"29:12:29:33;:37::38;:12:::1;:42::63:0;:67::68;:42:::1;:12;:4::70;30:12:30:28:0;:32::33;:12:::1;:37::54:0;:58::59;:37:::1;:12;:4::61;31:22:31:23:0;:12::38:1;:42::44:0;:4::46:1;32:23:32:24:0;:12::39:1;:43::45:0;:4::47:1;33:22:33:23:0;:12::40:1;:54::55:0;:44::72:1;:4::74;34:17:34:18:0;:12::19:1;;:28::29:0;:23::30:1;;:12;:4::32;35:21:35:22:0;:11::37:1;:41::49:0;:52::56;:41:::1;:11","logs":[],"requires":[{"ip":7,"line":29},{"ip":15,"line":30},{"ip":19,"line":31},{"ip":23,"line":32},{"ip":28,"line":33},{"ip":36,"line":34}]}]},"compiler":{"name":"cashc","version":"0.14.0","options":{"enforceFunctionParameterTypes":true,"enforceLocktimeGuard":true}},"updatedAt":"2026-11-07T15:09:46.369Z"},"mintArtifact":{"contractName":"Mint","constructorInputs":[{"name":"category","type":"bytes32"},{"name":"arcadeLock","type":"bytes"},{"name":"issuer","type":"pubkey"}],"abi":[{"name":"migrate","inputs":[{"name":"signature","type":"sig"}]},{"name":"issue","inputs":[{"name":"signature","type":"sig"},{"name":"owner","type":"bytes20"},{"name":"starterScore","type":"int"},{"name":"cabinet","type":"bool"},{"name":"rewardBps","type":"int"},{"name":"platformBps","type":"int"}]}],"bytecode":"OP_3 OP_PICK OP_0 OP_NUMEQUAL OP_IF OP_4 OP_PICK OP_3 OP_ROLL OP_CHECKSIGVERIFY OP_3 OP_ROLL OP_SIZE OP_1SUB OP_SPLIT OP_NIP 61 OP_EQUALVERIFY OP_INPUTINDEX OP_0 OP_NUMEQUAL OP_TXINPUTCOUNT OP_2 OP_NUMEQUAL OP_BOOLAND OP_TXOUTPUTCOUNT OP_2 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_0 OP_UTXOTOKENCATEGORY OP_SWAP OP_2 OP_CAT OP_EQUALVERIFY OP_1 OP_UTXOTOKENCATEGORY OP_0 OP_EQUAL OP_1 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OUTPUTTOKENCATEGORY OP_0 OP_UTXOTOKENCATEGORY OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_0 OP_UTXOTOKENCOMMITMENT OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_NUMEQUALVERIFY OP_0 OP_OUTPUTVALUE OP_0 OP_UTXOVALUE OP_NUMEQUAL OP_NIP OP_NIP OP_ELSE OP_3 OP_ROLL OP_1 OP_NUMEQUALVERIFY OP_4 OP_ROLL OP_SIZE 14 OP_EQUALVERIFY OP_6 OP_ROLL OP_0NOTEQUAL OP_5 OP_PICK OP_5 OP_ROLL OP_CHECKSIGVERIFY OP_4 OP_ROLL OP_SIZE OP_1SUB OP_SPLIT OP_NIP 61 OP_EQUALVERIFY OP_INPUTINDEX OP_0 OP_NUMEQUAL OP_TXINPUTCOUNT OP_2 OP_NUMEQUAL OP_BOOLAND OP_VERIFY OP_0 OP_UTXOTOKENCATEGORY OP_3 OP_PICK OP_2 OP_CAT OP_EQUALVERIFY OP_0 OP_UTXOTOKENCOMMITMENT OP_SIZE OP_NIP OP_8 OP_NUMEQUALVERIFY OP_1 OP_UTXOTOKENCATEGORY OP_0 OP_EQUALVERIFY OP_0 OP_UTXOTOKENCOMMITMENT OP_BIN2NUM OP_DUP OP_0 OP_GREATERTHANOREQUAL OP_VERIFY OP_5 OP_PICK OP_0 OP_GREATERTHANOREQUAL OP_6 OP_PICK OP_0 OP_UTXOTOKENAMOUNT OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_0 OP_OUTPUTBYTECODE OP_0 OP_UTXOBYTECODE OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENCATEGORY OP_0 OP_UTXOTOKENCATEGORY OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENCOMMITMENT OP_OVER OP_1ADD OP_8 OP_NUM2BIN OP_EQUALVERIFY OP_0 OP_OUTPUTTOKENAMOUNT OP_0 OP_UTXOTOKENAMOUNT OP_7 OP_PICK OP_SUB OP_NUMEQUALVERIFY OP_0 OP_OUTPUTVALUE OP_0 OP_UTXOVALUE OP_NUMEQUALVERIFY OP_1 OP_OUTPUTBYTECODE OP_5 OP_PICK OP_EQUALVERIFY OP_1 OP_OUTPUTTOKENCATEGORY OP_4 OP_PICK OP_1 OP_CAT OP_EQUALVERIFY OP_1 OP_OUTPUTTOKENAMOUNT OP_6 OP_ROLL OP_NUMEQUALVERIFY OP_8 OP_NUM2BIN OP_SWAP OP_IF OP_TXOUTPUTCOUNT OP_4 OP_NUMEQUALVERIFY OP_4 OP_PICK OP_0 OP_GREATERTHANOREQUAL OP_5 OP_PICK 1027 OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_5 OP_PICK OP_0 OP_GREATERTHANOREQUAL OP_6 OP_PICK 1027 OP_LESSTHANOREQUAL OP_BOOLAND OP_VERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT 0102 OP_2 OP_PICK OP_CAT OP_6 OP_PICK OP_2 OP_NUM2BIN OP_CAT OP_0 OP_8 OP_NUM2BIN OP_CAT OP_0 OP_4 OP_NUM2BIN OP_CAT OP_EQUALVERIFY OP_2 OP_OUTPUTBYTECODE OP_4 OP_PICK OP_EQUALVERIFY OP_2 OP_OUTPUTTOKENCATEGORY OP_3 OP_PICK OP_1 OP_CAT OP_EQUALVERIFY OP_2 OP_OUTPUTTOKENCOMMITMENT 0103 OP_2 OP_PICK OP_CAT OP_3 OP_PICK OP_CAT OP_7 OP_PICK OP_2 OP_NUM2BIN OP_CAT OP_EQUALVERIFY OP_2 OP_OUTPUTTOKENAMOUNT OP_0 OP_NUMEQUALVERIFY OP_3 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUALVERIFY OP_ELSE OP_TXOUTPUTCOUNT OP_3 OP_NUMEQUALVERIFY OP_1 OP_OUTPUTTOKENCOMMITMENT 0101 OP_2 OP_PICK OP_CAT OP_3 OP_PICK OP_CAT OP_EQUALVERIFY OP_2 OP_OUTPUTTOKENCATEGORY OP_0 OP_EQUALVERIFY OP_ENDIF OP_2DROP OP_2DROP OP_2DROP OP_1 OP_ENDIF","source":"pragma cashscript ^0.14.0;\n\n\/\/ The existing category's minting NFT must enter this covenant before issuance.\n\/\/ Its eight-byte commitment is the next serial. No genesis or broadcast here.\ncontract Mint(bytes32 category, bytes arcadeLock, pubkey issuer) {\n    function migrate(sig signature) {\n        require(checkSig(signature, issuer));\n        bytes encoded = bytes(signature);\n        require(encoded.split(encoded.length - 1)[1] == 0x61);\n        require(this.activeInputIndex == 0 && tx.inputs.length == 2 && tx.outputs.length == 2);\n        require(tx.inputs[0].tokenCategory == category + 0x02);\n        require(tx.inputs[1].tokenCategory == 0x && tx.outputs[1].tokenCategory == 0x);\n        require(tx.outputs[0].tokenCategory == tx.inputs[0].tokenCategory);\n        require(tx.outputs[0].nftCommitment == tx.inputs[0].nftCommitment);\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount);\n        require(tx.outputs[0].value == tx.inputs[0].value);\n    }\n\n    function issue(sig signature, bytes20 owner, int starterScore, bool cabinet, int rewardBps, int platformBps) {\n        require(checkSig(signature, issuer));\n        bytes encoded = bytes(signature);\n        require(encoded.split(encoded.length - 1)[1] == 0x61);\n        require(this.activeInputIndex == 0 && tx.inputs.length == 2);\n        require(tx.inputs[0].tokenCategory == category + 0x02);\n        require(tx.inputs[0].nftCommitment.length == 8);\n        require(tx.inputs[1].tokenCategory == 0x);\n        int serial = int(tx.inputs[0].nftCommitment);\n        require(serial >= 0);\n        require(starterScore >= 0 && starterScore <= tx.inputs[0].tokenAmount);\n        require(tx.outputs[0].lockingBytecode == tx.inputs[0].lockingBytecode);\n        require(tx.outputs[0].tokenCategory == tx.inputs[0].tokenCategory);\n        require(tx.outputs[0].nftCommitment == toPaddedBytes(serial + 1, 8));\n        require(tx.outputs[0].tokenAmount == tx.inputs[0].tokenAmount - starterScore);\n        require(tx.outputs[0].value == tx.inputs[0].value);\n        require(tx.outputs[1].lockingBytecode == arcadeLock);\n        require(tx.outputs[1].tokenCategory == category + 0x01);\n        require(tx.outputs[1].tokenAmount == starterScore);\n        bytes identity = toPaddedBytes(serial, 8);\n        if (cabinet) {\n            require(tx.outputs.length == 4);\n            require(rewardBps >= 0 && rewardBps <= 10000);\n            require(platformBps >= 0 && platformBps <= 10000);\n            require(tx.outputs[1].nftCommitment == 0x0102 + identity + toPaddedBytes(rewardBps, 2) + toPaddedBytes(0, 8) + toPaddedBytes(0, 4));\n            require(tx.outputs[2].lockingBytecode == arcadeLock);\n            require(tx.outputs[2].tokenCategory == category + 0x01);\n            require(tx.outputs[2].nftCommitment == 0x0103 + identity + owner + toPaddedBytes(platformBps, 2));\n            require(tx.outputs[2].tokenAmount == 0);\n            require(tx.outputs[3].tokenCategory == 0x);\n        } else {\n            require(tx.outputs.length == 3);\n            require(tx.outputs[1].nftCommitment == 0x0101 + identity + owner);\n            require(tx.outputs[2].tokenCategory == 0x);\n        }\n    }\n}\n","fingerprint":"fe83342901c45a4912fc10cbb111737c4e059bfdcf794a706fb05e7ed1489673","debug":{"bytecode":"5379009c635479537aad537a828c7f77016188c0009cc3529c9ac4529c9a6900ce7c527e8851ce008751d100879a6900d100ce8800d200cf8800d300d09d00cc00c69c777767537a519d547a82011488567a925579557aad547a828c7f77016188c0009cc3529c9a6900ce5379527e8800cf8277589d51ce008800cf817600a269557900a2567900d0a19a6900cd00c78800d100ce8800d2788b58808800d300d05779949d00cc00c69d51cd55798851d15479517e8851d3567a9d58807c63c4549d547900a25579021027a19a69557900a25679021027a19a6951d202010252797e567952807e0058807e0054807e8852cd54798852d15379517e8852d202010352797e53797e577952807e8852d3009d53d1008867c4539d51d202010152797e53797e8852d10088686d6d6d5168","sourceMap":"6:4:17:5;;;;;7:25:7:34;;:36::42;;:8::45:1;8:30:8:39:0;;9:16:9:44:1;:30::48;:16::49;:::52;:56::60:0;:8::62:1;10:16:10:37:0;:41::42;:16:::1;:46::62:0;:66::67;:46:::1;:16;:71::88:0;:92::93;:71:::1;:16;:8::95;11:26:11:27:0;:16::42:1;:46::54:0;:57::61;:46:::1;:8::63;12:26:12:27:0;:16::42:1;:46::48:0;:16:::1;:63::64:0;:52::79:1;:83::85:0;:52:::1;:16;:8::87;13:27:13:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;14:27:14:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;15:27:15:28:0;:16::41:1;:55::56:0;:45::69:1;:8::71;16:27:16:28:0;:16::35:1;:49::50:0;:39::57:1;:8::59;6:36:17:5;;:4;19::54::0;;;;:34:19:47;;;;;:67::79;;;20:25:20:34;;:36::42;;:8::45:1;21:30:21:39:0;;22:16:22:44:1;:30::48;:16::49;:::52;:56::60:0;:8::62:1;23:16:23:37:0;:41::42;:16:::1;:46::62:0;:66::67;:46:::1;:16;:8::69;24:26:24:27:0;:16::42:1;:46::54:0;;:57::61;:46:::1;:8::63;25:26:25:27:0;:16::42:1;:::49;;:53::54:0;:8::56:1;26:26:26:27:0;:16::42:1;:46::48:0;:8::50:1;27:35:27:36:0;:25::51:1;:21::52;28:16:28:22:0;:26::27;:16:::1;:8::29;29:16:29:28:0;;:32::33;:16:::1;:37::49:0;;:63::64;:53::77:1;:37;:16;:8::79;30:27:30:28:0;:16::45:1;:59::60:0;:49::77:1;:8::79;31:27:31:28:0;:16::43:1;:57::58:0;:47::73:1;:8::75;32:27:32:28:0;:16::43:1;:61::67:0;:::71:1;:73::74:0;:47::75:1;:8::77;33:27:33:28:0;:16::41:1;:55::56:0;:45::69:1;:72::84:0;;:45:::1;:8::86;34:27:34:28:0;:16::35:1;:49::50:0;:39::57:1;:8::59;35:27:35:28:0;:16::45:1;:49::59:0;;:8::61:1;36:27:36:28:0;:16::43:1;:47::55:0;;:58::62;:47:::1;:8::64;37:27:37:28:0;:16::41:1;:45::57:0;;:8::59:1;38:47:38:48:0;:25::49:1;39:12:39:19:0;:21:49:9;40:20:40:37;:41::42;:12::44:1;41:20:41:29:0;;:33::34;:20:::1;:38::47:0;;:51::56;:38:::1;:20;:12::58;42:20:42:31:0;;:35::36;:20:::1;:40::51:0;;:55::60;:40:::1;:20;:12::62;43:31:43:32:0;:20::47:1;:51::57:0;:60::68;;:51:::1;:85::94:0;;:96::97;:71::98:1;:51;:115::116:0;:118::119;:101::120:1;:51;:137::138:0;:140::141;:123::142:1;:51;:12::144;44:31:44:32:0;:20::49:1;:53::63:0;;:12::65:1;45:31:45:32:0;:20::47:1;:51::59:0;;:62::66;:51:::1;:12::68;46:31:46:32:0;:20::47:1;:51::57:0;:60::68;;:51:::1;:71::76:0;;:51:::1;:93::104:0;;:106::107;:79::108:1;:51;:12::110;47:31:47:32:0;:20::45:1;:49::50:0;:12::52:1;48:31:48:32:0;:20::47:1;:51::53:0;:12::55:1;49:15:53:9:0;50:20:50:37;:41::42;:12::44:1;51:31:51:32:0;:20::47:1;:51::57:0;:60::68;;:51:::1;:71::76:0;;:51:::1;:12::78;52:31:52:32:0;:20::47:1;:51::53:0;:12::55:1;49:15:53:9;19:113:54:5;;;;5:0:55:1","logs":[],"requires":[{"ip":12,"line":7},{"ip":20,"line":9},{"ip":32,"line":10},{"ip":38,"line":11},{"ip":48,"line":12},{"ip":53,"line":13},{"ip":58,"line":14},{"ip":63,"line":15},{"ip":69,"line":16},{"ip":88,"line":20},{"ip":96,"line":22},{"ip":104,"line":23},{"ip":111,"line":24},{"ip":117,"line":25},{"ip":121,"line":26},{"ip":128,"line":28},{"ip":139,"line":29},{"ip":144,"line":30},{"ip":149,"line":31},{"ip":156,"line":32},{"ip":164,"line":33},{"ip":169,"line":34},{"ip":174,"line":35},{"ip":181,"line":36},{"ip":186,"line":37},{"ip":193,"line":40},{"ip":203,"line":41},{"ip":213,"line":42},{"ip":233,"line":43},{"ip":238,"line":44},{"ip":245,"line":45},{"ip":260,"line":46},{"ip":264,"line":47},{"ip":268,"line":48},{"ip":272,"line":50},{"ip":282,"line":51},{"ip":286,"line":52}],"sourceTags":"66:67:sc;73:77:pv;78:80:pv"},"compiler":{"name":"cashc","version":"0.14.0","options":{"enforceFunctionParameterTypes":true,"enforceLocktimeGuard":true}},"updatedAt":"2026-11-07T15:09:46.376Z"},"arcadeAddress":null,"mintAddress":null}