diff --git a/artifacts/erc20_deployment.hex b/artifacts/erc20_deployment.hex index beaf151..4f65913 100644 --- a/artifacts/erc20_deployment.hex +++ b/artifacts/erc20_deployment.hex @@ -1 +1 @@ -0x61010080604052346101c15760a08161231b80380380916100208285610231565b8339810103126101c15761003381610268565b9061004060208201610268565b6040820151608060608401519301519160a05260c0523360805260018060a01b0383169283156102225760e0528115801580610219575b6100fc575b60405161209e908161027d82396080518181816101660152818161040c015281816105790152610a87015260a05181818161045e015261084c015260c0518181816101f2015261082a015260e05181818161028501528181610353015281816105000152818161061a0152818161086e01528181610f8501526110170152f35b60ff60075460081c1661020a576101fb5780156101ec57815f55816002558060015581018091116101d8575f91606460209260405194859384926323b872dd60e01b845233600485015230602485015260448401525af19081156101cd575f9161018e575b501561017f5761010061ff001960075416176007555f80808061007c565b63022e258160e11b5f5260045ffd5b90506020813d6020116101c5575b816101a960209383610231565b810103126101c1575180151581036101c1575f610161565b5f80fd5b3d915061019c565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b50811515610077565b63d92e233d60e01b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761025457604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101c15756fe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101545780631aa7c0ec1461014f5780632feef2ec1461014a578063308657d71461014557806333ee5f35146101405780633d2691bc1461013b57806355a373d6146101365780635a4fd645146101315780636b892b221461012c57806380f323a71461012757806381972d00146101225780638677ab231461011d5780638bd03d0a146101185780639940686e14610113578063a65e2cfd1461010e578063cb766a5614610109578063d415b3f914610104578063ede7f6a3146100ff578063f3a504f2146100fa5763fe03a460146100f5575f80fd5b610961565b61093c565b6106f9565b6106dc565b6106b8565b610560565b6104aa565b61048d565b610449565b6103fa565b6103dd565b6102d0565b6102b4565b610270565b610254565b610237565b610215565b6101db565b6101b3565b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b346101af575f3660031901126101af576003546040516001600160a01b039091168152602090f35b346101af575f3660031901126101af5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101af575f3660031901126101af57602060ff600754166040519015158152f35b346101af575f3660031901126101af576020600454604051908152f35b346101af575f3660031901126101af5760206040516101008152f35b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af5760205f54604051908152f35b346101af575f3660031901126101af576102f2600160ff196007541617600755565b6102fa610a77565b610302610ab7565b61030a610aee565b61032161ff0019600754166007555f6001555f8055565b80156103ce5760405163a9059cbb60e01b815233600482015260248101919091526020816044815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f9161039a575b501561038b57005b63022e258160e11b5f5260045ffd5b6103bc915060203d6020116103c2575b6103b48183610992565b8101906109b9565b5f610383565b503d6103aa565b6109d1565b6353cd7f7960e01b5f5260045ffd5b346101af575f3660031901126101af576020600554604051908152f35b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19166001179055005b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af576020600154604051908152f35b346101af5760203660031901126101af576004356104c6610b00565b6104cf81610b49565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f91610541575b501561038b5761053f90610ba4565b005b61055a915060203d6020116103c2576103b48183610992565b5f610530565b346101af5760403660031901126101af576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a05760075460081c60ff166106a957811561069a57801561068b576105cf826105d4935f55600255565b600155565b61061560206105e860025460015490610a1f565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f9161066c575b501561038b5761053f61010061ff00196007541617600755565b610685915060203d6020116103c2576103b48183610992565b5f610652565b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b346101af575f3660031901126101af5760206106d2610a2c565b6040519015158152f35b346101af575f3660031901126101af576020600254604051908152f35b346101af5760403660031901126101af5760043567ffffffffffffffff81116101af578060040160a060031983360301126101af5760243561073b8280610a44565b6007546107509060081c60ff161590565b1590565b61092d57600354610771906001600160a01b03165b6001600160a01b031690565b331480159061091c575b61090d574383116108fe576101006107938443610be9565b116108ef57824080156108e0576107ab368385610c12565b60208151910120036108d1576107c091611074565b036108c2576107d86107d28280610a44565b90610c76565b9161081261074c60248301946107ee8686610a44565b906107fc6044870188610a44565b9061080a606489018a610a44565b949093610ce6565b6108b35760846108286108989461074c94610a44565b7f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000939101359190610d6a565b6108a45761053f610f04565b6364fa89e160e11b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b5061092861074c610a2c565b61077b565b636af784dd60e11b5f5260045ffd5b346101af575f3660031901126101af57602060ff60075460081c166040519015158152f35b346101af575f3660031901126101af576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176109b457604052565b61097e565b908160209103126101af575180151581036101af5790565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b90600182018092116109fe57565b6109dc565b60010190816001116109fe57565b90601582018092116109fe57565b919082018092116109fe57565b6004548015159081610a3c575090565b905042111590565b903590601e19813603018212156101af570180359067ffffffffffffffff82116101af576020019181360383136101af57565b60ff60075460081c161561092d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a057565b610abf610a2c565b610adf576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116109fe5790565b6004548015159081610b3f575b50610b1457565b6005545f548181018091116109fe575f556006549081018091116109fe57600655610b3d610ab7565b565b905042115f610b0d565b60075460ff8160081c161561092d5760ff16610b9557610b67610a2c565b610b86575f5460011c11610b7757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600354161760035561012c42018042116109fe57600455600555565b6001198101919082116109fe57565b5f198101919082116109fe57565b919082039182116109fe57565b67ffffffffffffffff81116109b457601f01601f191660200190565b929192610c1e82610bf6565b91610c2c6040519384610992565b8294818452818301116101af578281602093845f960137010152565b634e487b7160e01b5f52603260045260245ffd5b9015610c655790565b610c48565b90821015610c65570190565b90610c818183611130565b905f5b60058110610cd15750600560fd1b906001600160f81b031990610ca990849086610c6a565b351603610cc2576001810181116109fe57016001013590565b633954003560e11b5f5260045ffd5b91610cdf6001918386611264565b9201610c84565b610cfc610d0492939495610d0a98973691610c12565b923691610c12565b906113ec565b90565b60ff60f6199116019060ff82116109fe57565b60ff607f199116019060ff82116109fe57565b60ff60bf199116019060ff82116109fe57565b60ff60b6199116019060ff82116109fe57565b60ff166001019060ff82116109fe57565b9594939291905f818881151580610ee8575b610eda575b610daa610da4610d968560c09560ff95610c6a565b356001600160f81b03191690565b60f81c90565b1610610ea457808860f860ff610dc8610da4610d9688978887610c6a565b1610610eca57610df5610df0610deb610da4610d9686610e0198610dfb97610c6a565b610d0d565b610d59565b60ff1690565b90610a1f565b81885f5b60038110610eb35750610df5610da4610d968560c095610e2495610c6a565b10610ea457808860f8610e42610df5610da4610d9688978887610c6a565b10610e9357610df5610df0610deb610da4610d9686610e6498610dfb97610c6a565b915b5f905b808210610e7c575050610d0a9596611599565b9092610e8b600191848b611264565b930190610e69565b50610e9e91506109f0565b91610e66565b631bd5dcf760e31b5f5260045ffd5b92600192610ec092611264565b9101888391610e05565b50610ed591506109f0565b610e01565b506001915082905088610d81565b50608060ff610efd610da4610d968686610c5c565b1610610d7c565b610f0c611669565b6003546001600160a01b0316610f496001600160601b0360a01b600354166003555f6005555f60045561ff0019600754166007555f6001555f8055565b4662aa36a703610fe557604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91610fc6575b505b1561038b57565b610fdf915060203d6020116103c2576103b48183610992565b5f610fbd565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91611055575b50610fbf565b61106e915060203d6020116103c2576103b48183610992565b5f61104f565b61107e8282611130565b915f5b6008811061111b575061109b610da4610d96858486610c6a565b925f9260ff851694608086105f146110b557505050505090565b6110c69193949550610df590610d20565b915f935b8385106110d957505050505090565b90919293946110ea60019160081b90565b61110f610df5610da4610d966111088b6111038b6109f0565b610a1f565b8789610c6a565b179501939291906110ca565b926111296001918385611264565b9301611081565b5f600360fe1b6001600160f81b031961114c610d968686610c5c565b161061122c57601f60fb1b6001600160f81b031961116d610d968686610c5c565b161061125b5780610dfb610df5610df0610deb610da4610d96611191978a8a610c6a565b905b61a5bd46148015611250575b6111aa575b50905090565b5f5b6003811061123b5750600360fe1b6111d86111cb610d96858786610c6a565b6001600160f81b03191690565b1061122c57601f60fb1b6111f36111cb610d96858786610c6a565b1061121c57610df5610df0610deb610da4610d968661121598610dfb97610c6a565b805f6111a4565b5061122791506109f0565b611215565b63c0098bd960e01b5f5260045ffd5b916112496001918584611264565b92016111ac565b5061a5bf461461119f565b50600190611193565b9190808210156113bf5761127f610da4610d96848487610c6a565b9060ff8216608081101561129a57505050610d0a91506109f0565b91929160b88110156112c2575050610d0a9250610df56112bc610dfb926109f0565b92610d20565b90929060c08110156113385750610df56112de91949394610d46565b915f935f915b8483106112ff57505050610d0a9291611103611103926109f0565b90919461130e60019160081b90565b61132e610df5610da4610d966113278b6111038b6109f0565b8888610c6a565b17950191906112e4565b90929060f8111561135e5750610d0a9250610df5611358610dfb926109f0565b92610d33565b9291610df561136c91610d0d565b915f935f915b84831061138d57505050610d0a9291611103611103926109f0565b90919461139c60019160081b90565b6113b5610df5610da4610d966113278b6111038b6109f0565b1795019190611372565b6318d76ae160e11b5f5260045ffd5b805115610c655760200190565b908151811015610c65570160200190565b919390929190600360fe1b6001600160f81b031961140d610d968689610c5c565b161061158a57601f60fb1b6001600160f81b031961142e610d968689610c5c565b16106115805761145261144d610df5610deb610da4610d96888b610c5c565b610a03565b9492905b945f5b82821061146b57505050505050505f90565b6114896114828361147d36878a610c12565b6116da565b9093610a1f565b96825160208401200361151e57600360fe1b6114b86111cb6114aa856113ce565b516001600160f81b03191690565b1061151e578590846001601f60fb1b6114d66111cb6114aa886113ce565b1015611562575b6114e78186611881565b6011810361152957506114f994611a0c565b94911561151e5784156115125793915b91959093611459565b50505050505050600190565b505050505050505f90565b90935060021415905061155657848792611542946118c6565b94911561151e578415611512579391611509565b50505050505050505f90565b5061157b61144d610df5610deb610da46114aa896113ce565b6114dd565b6001949290611456565b63ebb47d1d60e01b5f5260045ffd5b91949392948060c060ff6115b4610da4610d9685888a610c6a565b1610610ea45760f860ff6115cf610da4610d9685888a610c6a565b1610611659575080610dfb610df5610df0610deb610da4610d966115f497898b610c6a565b945b609460ff61160b610da4610d968a8789610c6a565b160361164a576001600160a01b03168286016001013560601c0361163b57611635610d0a95610a11565b91611b21565b63a087f96f60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b61166391506109f0565b946115f6565b6005545f5481018091116109fe5760015481018091116109fe5790565b604080519091906116978382610992565b6001815291601f1901366020840137565b906116b282610bf6565b6116bf6040519182610992565b82815280926116d0601f1991610bf6565b0190602036910137565b80518210156113bf576116f3610da46114aa84846113db565b9160ff8316608081101561172c5750505061170c611686565b9060f81b6001600160f81b0319165f1a611725826113ce565b5390600190565b919392909160b88110156117965750610df561174791610d20565b90611751826116a8565b935f5b83811061176757505050610d0a90610a03565b806117836114aa61177d600194611103886109f0565b856113db565b5f1a61178f82896113db565b5301611754565b60c0111561183457610df56117aa91610d46565b5f915f5b82811061180657506117bf836116a8565b945f5b8481106117d95750505090611103610d0a92610a03565b806117f36114aa61177d600194611103896111038a6109f0565b5f1a6117ff828a6113db565b53016117c2565b9260019060081b61182c610df5610da46114aa61182689611103896109f0565b8b6113db565b1793016117ae565b50916118408382611cd8565b9261184a846116a8565b915f5b85811061185b575050509190565b8061186e6114aa61177d60019487610a1f565b5f1a61187a82876113db565b530161184d565b5f92915b81518110156118ac576118988183611cd8565b81018091116109fe57600190930192611885565b5050565b908160011b91808304600214901517156109fe57565b839492916118d481836116da565b93906118f360206118ea610da46114aa856113ce565b16151591611e05565b978891156119955750611907905187610a1f565b61191182516118b0565b14611926575b505050505050505f905f905f90565b86866001928251611983575b505050611940575b80611917565b6119539261194d91610a1f565b906116da565b5060208151910120906020815191012014611971578080808061193a565b61197c915190610a1f565b6001915f90565b61198d9350611f6e565b86865f611932565b6119a6939495965061074c92611f6e565b6119ff576119b79261194d91610a1f565b50908151602081145f146119df575060206119d7920151925b5190610a1f565b916001929190565b80156119f35760206119d7930120926119d0565b505050505f905f905f90565b50505050505f905f905f90565b91909293611a1a82516118b0565b851015611ac45750610da46114aa611a3c92611a368760011c90565b906113db565b60018416611abb5760041c600f16915b905f925b60ff81168410611a9b5750611a6592506116da565b5080518015611a90576119d79160208203611a8657602091500151916109f0565b60200120916109f0565b5050505f905f905f90565b90916001611aaf82610dfb60ff9487611cd8565b94019392919050611a50565b600f1691611a4c565b9290509392935f915b60108310611b0757611adf92506116da565b50602081519101209060208151910120145f14611afe57600191905f90565b5f915081908190565b90611b1881610dfb60019385611cd8565b92019190611acd565b929190918160c060ff611b3b610da4610d9687898b610c6a565b1610610ea45760f860ff611b56610da4610d9687898b610c6a565b1610611cc95780610dfb610df5610df0610deb610da4610d96611b7a978b8d610c6a565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ba682868861202c565b03611cba57610765610765611bc9611bc2611bd094888a611264565b8789611264565b868861202c565b6001600160a01b03918216911603611cab57611bed908284611264565b905f91611c01610da4610d96838588610c6a565b60ff811694906080861015611c2f5750505050505b03611c2057600190565b6355e97b0d60e01b5f5260045ffd5b9091929394608081145f14611c4a575050505050505f611c16565b60a010610ea457610df5611c6091939293610d20565b915f935b838510611c75575050505050611c16565b9091929394611c8660019160081b90565b611c9f610df5610da4610d966111088b6111038b6109f0565b17950193929190611c64565b634cd4b7b160e01b5f5260045ffd5b6324da545d60e11b5f5260045ffd5b50611cd3826109f0565b611b7a565b9081518110156113bf57611cf2610da46114aa83856113db565b9160ff83166080811015611d095750505050600190565b60b8811015611d2457505050610df5610df0610d0a92610d20565b60c0811015611d90575091610df5611d3b91610d46565b905f925f915b838310611d585750505090611103610d0a92610a03565b909193611d6760019160081b90565b611d86610df5610da46114aa611d808a611103896109f0565b886113db565b1794019190611d41565b60f81115611da9575050610df5610df0610d0a92610d33565b91610df5611db691610d0d565b905f925f915b838310611dd35750505090611103610d0a92610a03565b909193611de260019160081b90565b611dfb610df5610da46114aa611d808a611103896109f0565b1794019190611dbc565b90815115610b3d57611e1c610da46114aa846113ce565b6010811615611eeb57611e3f611e3a611e3585516118b0565b610bdb565b6116a8565b9060f81b600f60f81b165f1a611e54826113ce565b5360015b8351811015611ee65780611e93611e83611e7a610da46114aa6001968a6113db565b60041c600f1690565b60f81b6001600160f81b03191690565b611eac611ea2611e35846118b0565b915f1a91856113db565b53611ed3600f611ec2610da46114aa858a6113db565b1660f81b6001600160f81b03191690565b611edf611ea2836118b0565b5301611e58565b509150565b50611f01611e3a611efc84516118b0565b610bcc565b60015b8351811015611ee65780611f26611e83611e7a610da46114aa6001968a6113db565b611f3a611ea2611f3584610bdb565b6118b0565b53611f50600f611ec2610da46114aa858a6113db565b611f67611ea2611f62611f3585610bdb565b6109f0565b5301611f04565b919091611f7c825184610a1f565b611f8682516118b0565b10612025575f5b825181101561201c57611fa9611fa38286610a1f565b60011690565b611ffe57611fd2611e7a610da46114aa611fcc611fc6868a610a1f565b60011c90565b866113db565b60ff611fe7610df5610da46114aa86896113db565b911603611ff657600101611f8d565b505050505f90565b600f612016610da46114aa611fcc611fc6868a610a1f565b16611fd2565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b03199061204a90849086610c6a565b35160361205957016001013590565b63f0ff325b60e01b5f5260045ffdfea264697066735822122028c96b0e3c2075e4a273041c863c4e813c898fa651607c92e57dad2760f392cd64736f6c634300081e0033 +0x60c0806040523461015b576060816120c8803803809161001f8285610190565b83398101031261015b578051906001600160a01b03821680830361015b5760406020830151920151923360805281156101815760a052811580156100b7575b604051611f0090816101c88239608051818181610126015281816103a3015281816105f70152610829015260a051818181610228015281816102e2015281816104360152818161067c01528181610e4b0152610edd0152f35b610172576064825f94602094865560015560405194859384926323b872dd60e01b845233600485015230602485015260448401525af1908115610167575f91610128575b50156101195761010061ff001960055416176005555f80808061005e565b63022e258160e11b5f5260045ffd5b90506020813d60201161015f575b8161014360209383610190565b8101031261015b5751801515810361015b575f6100fb565b5f80fd5b3d9150610136565b6040513d5f823e3d90fd5b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b601f909101601f19168101906001600160401b038211908210176101b357604052565b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101145780631303a4841461010f5780631aa7c0ec1461010a578063308657d71461010557806333ee5f35146101005780633d2691bc146100fb57806355a373d6146100f65780636b892b22146100f157806380f323a7146100ec57806381972d00146100e75780639940686e146100e2578063b1dd0800146100dd578063c41020eb146100d8578063cb766a56146100d3578063d0e30db0146100ce5763f3a504f2146100c9575f80fd5b61074b565b61072f565b61070b565b6105de565b610496565b6103e0565b610391565b610374565b610257565b610213565b6101f7565b6101da565b6101b8565b610190565b610173565b3461016f575f36600319011261016f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610160576005805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461016f575f36600319011261016f576020600154604051908152f35b3461016f575f36600319011261016f576002546040516001600160a01b039091168152602090f35b3461016f575f36600319011261016f57602060ff600554166040519015158152f35b3461016f575f36600319011261016f576020600354604051908152f35b3461016f575f36600319011261016f5760206040516101008152f35b3461016f575f36600319011261016f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461016f575f36600319011261016f57610279600160ff196005541617600555565b610281610819565b6102896108b8565b6102916108f1565b5f5480156103655760206102dd916102b661ff0019600554166005555f80555f600155565b60405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f91610331575b501561032257005b63022e258160e11b5f5260045ffd5b610353915060203d602011610359575b61034b8183610784565b8101906107ab565b5f61031a565b503d610341565b6107c3565b6353cd7f7960e01b5f5260045ffd5b3461016f575f36600319011261016f576020600454604051908152f35b3461016f575f36600319011261016f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610160576005805460ff19166001179055005b3461016f57602036600319011261016f576004356103fc6108b8565b61040581610928565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610360575f91610477575b50156103225761047590610984565b005b610490915060203d6020116103595761034b8183610784565b5f610466565b3461016f57606036600319011261016f5760043567ffffffffffffffff811161016f57806004019060a0600319823603011261016f57604435916104e66024356104e083806107ce565b90610a28565b6104f96104f382806107ce565b90610b4c565b90610537610533602485019361050f85856107ce565b9061051d60448901876107ce565b9061052b60648b01896107ce565b949093610bbc565b1590565b6105cf5761059f9260846105516105ad9461055c946107ce565b919092013591610c40565b6040516bffffffffffffffffffffffff19606093841b8116602083019081529490931b909216603483015260488201526068810194909452929182906088820190565b03601f198101835282610784565b519020600154036105c057610475610dca565b635054097b60e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b3461016f57604036600319011261016f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101605760ff60055460081c166106fc5781156106ed578161064a602092610677945f55600155565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f916106ce575b50156103225761047561010061ff00196005541617600555565b6106e7915060203d6020116103595761034b8183610784565b5f6106b4565b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461016f575f36600319011261016f576020610725610801565b6040519015158152f35b3461016f575f36600319011261016f5760205f54604051908152f35b3461016f575f36600319011261016f57602060ff60055460081c166040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107a657604052565b610770565b9081602091031261016f5751801515810361016f5790565b6040513d5f823e3d90fd5b903590601e198136030182121561016f570180359067ffffffffffffffff821161016f5760200191813603831361016f57565b6003548015159081610811575090565b905042111590565b60ff60055460081c1615610859577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361016057565b636af784dd60e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b906001820180921161088a57565b610868565b600101908160011161088a57565b906015820180921161088a57565b9190820180921161088a57565b60035480151590816108e7575b506108cc57565b6004545f5490810180911161088a575f556108e56108f1565b565b905042115f6108c5565b6108f9610801565b610919576001600160601b0360a01b600254166002555f6004555f600355565b639cbc1de160e01b5f5260045ffd5b60055460ff8160081c16156108595760ff1661097557610946610801565b610966576101905f54041161095757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600254161760025561012c420180421161088a57600355600455565b60011981019190821161088a57565b5f1981019190821161088a57565b9190820391821161088a57565b67ffffffffffffffff81116107a657601f01601f191660200190565b9291926109fe826109d6565b91610a0c6040519384610784565b82948184528183011161016f578281602093845f960137010152565b90610a3c61053360055460ff9060081c1690565b61085957600254610a5d906001600160a01b03165b6001600160a01b031690565b3314801590610b0d575b610afe57438311610aef57610100610a7f84436109c9565b11610ae05782408015610ad157610a973683856109f2565b6020815191012003610ac257610aac91610f3a565b03610ab357565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610b19610533610801565b610a67565b634e487b7160e01b5f52603260045260245ffd5b9015610b3b5790565b610b1e565b90821015610b3b570190565b90610b578183610ff6565b905f5b60058110610ba75750600560fd1b906001600160f81b031990610b7f90849086610b40565b351603610b985760018101811161088a57016001013590565b633954003560e11b5f5260045ffd5b91610bb5600191838661112a565b9201610b5a565b610bd2610bda92939495610be0989736916109f2565b9236916109f2565b906112b2565b90565b60ff60f6199116019060ff821161088a57565b60ff607f199116019060ff821161088a57565b60ff60bf199116019060ff821161088a57565b60ff60b6199116019060ff821161088a57565b60ff166001019060ff821161088a57565b9291905f81151580610dae575b610da6575b60c060ff610c7b610c75610c6785878b610b40565b356001600160f81b03191690565b60f81c90565b1610610d745760f860ff610c96610c75610c6785878b610b40565b1610610d985780610cca610cc4610cbf610cba610c75610c67610cd097898d610b40565b610be3565b610c2f565b60ff1690565b906108ab565b5f5b60038110610d83575060c0610cf1610cc4610c75610c6785878b610b40565b10610d745760f8610d0c610cc4610c75610c6785878b610b40565b10610d655780610cca610cc4610cbf610cba610c75610c67610d2f97898d610b40565b915b5f905b808210610d4e575050610d47929361145f565b9192909190565b9092610d5d600191848861112a565b930190610d34565b610d6e9061087c565b91610d31565b631bd5dcf760e31b5f5260045ffd5b90610d91600191848861112a565b9101610cd2565b610da19061087c565b610cd0565b506001610c52565b50608060ff610dc3610c75610c67868a610b32565b1610610c4d565b610dd2611514565b6002546001600160a01b0316610e0f6001600160601b0360a01b600254166002555f6004555f60035561ff0019600554166005555f80555f600155565b4662aa36a703610eab57604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f91610e8c575b505b1561032257565b610ea5915060203d6020116103595761034b8183610784565b5f610e83565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f91610f1b575b50610e85565b610f34915060203d6020116103595761034b8183610784565b5f610f15565b610f448282610ff6565b915f5b60088110610fe15750610f61610c75610c67858486610b40565b925f9260ff851694608086105f14610f7b57505050505090565b610f8c9193949550610cc490610bf6565b915f935b838510610f9f57505050505090565b9091929394610fb060019160081b90565b610fd5610cc4610c75610c67610fce8b610fc98b61087c565b6108ab565b8789610b40565b17950193929190610f90565b92610fef600191838561112a565b9301610f47565b5f600360fe1b6001600160f81b0319611012610c678686610b32565b16106110f257601f60fb1b6001600160f81b0319611033610c678686610b32565b16106111215780610cca610cc4610cbf610cba610c75610c67611057978a8a610b40565b905b61a5bd46148015611116575b611070575b50905090565b5f5b600381106111015750600360fe1b61109e611091610c67858786610b40565b6001600160f81b03191690565b106110f257601f60fb1b6110b9611091610c67858786610b40565b106110e257610cc4610cbf610cba610c75610c67866110db98610cca97610b40565b805f61106a565b506110ed915061087c565b6110db565b63c0098bd960e01b5f5260045ffd5b9161110f600191858461112a565b9201611072565b5061a5bf4614611065565b50600190611059565b91908082101561128557611145610c75610c67848487610b40565b9060ff8216608081101561116057505050610be0915061087c565b91929160b8811015611188575050610be09250610cc4611182610cca9261087c565b92610bf6565b90929060c08110156111fe5750610cc46111a491949394610c1c565b915f935f915b8483106111c557505050610be09291610fc9610fc99261087c565b9091946111d460019160081b90565b6111f4610cc4610c75610c676111ed8b610fc98b61087c565b8888610b40565b17950191906111aa565b90929060f811156112245750610be09250610cc461121e610cca9261087c565b92610c09565b9291610cc461123291610be3565b915f935f915b84831061125357505050610be09291610fc9610fc99261087c565b90919461126260019160081b90565b61127b610cc4610c75610c676111ed8b610fc98b61087c565b1795019190611238565b6318d76ae160e11b5f5260045ffd5b805115610b3b5760200190565b908151811015610b3b570160200190565b919390929190600360fe1b6001600160f81b03196112d3610c678689610b32565b161061145057601f60fb1b6001600160f81b03196112f4610c678689610b32565b161061144657611318611313610cc4610cba610c75610c67888b610b32565b61088f565b9492905b945f5b82821061133157505050505050505f90565b61134f6113488361134336878a6109f2565b611579565b90936108ab565b9682516020840120036113e457600360fe1b61137e61109161137085611294565b516001600160f81b03191690565b106113e4578590846001601f60fb1b61139c61109161137088611294565b1015611428575b6113ad8186611720565b601181036113ef57506113bf946118ab565b9491156113e45784156113d85793915b9195909361131f565b50505050505050600190565b505050505050505f90565b90935060021415905061141c5784879261140894611765565b9491156113e45784156113d85793916113cf565b50505050505050505f90565b50611441611313610cc4610cba610c7561137089611294565b6113a3565b600194929061131c565b63ebb47d1d60e01b5f5260045ffd5b92918060c060ff611477610c75610c6785888b610b40565b1610610d745760f860ff611492610c75610c6785888b610b40565b1610611504575080610cca610cc4610cbf610cba610c75610c676114b797898c610b40565b925b609460ff6114ce610c75610c67888787610b40565b16036114f5576114f1916114eb6001868401013560601c9561089d565b916119c0565b9091565b63e6c4247b60e01b5f5260045ffd5b61150e915061087c565b926114b9565b6004545f54810180911161088a5790565b604080519091906115368382610784565b6001815291601f1901366020840137565b90611551826109d6565b61155e6040519182610784565b828152809261156f601f19916109d6565b0190602036910137565b805182101561128557611592610c7561137084846112a1565b9160ff831660808110156115cb575050506115ab611525565b9060f81b6001600160f81b0319165f1a6115c482611294565b5390600190565b919392909160b88110156116355750610cc46115e691610bf6565b906115f082611547565b935f5b83811061160657505050610be09061088f565b8061162261137061161c600194610fc98861087c565b856112a1565b5f1a61162e82896112a1565b53016115f3565b60c011156116d357610cc461164991610c1c565b5f915f5b8281106116a5575061165e83611547565b945f5b8481106116785750505090610fc9610be09261088f565b8061169261137061161c600194610fc989610fc98a61087c565b5f1a61169e828a6112a1565b5301611661565b9260019060081b6116cb610cc4610c756113706116c589610fc98961087c565b8b6112a1565b17930161164d565b50916116df8382611b3a565b926116e984611547565b915f5b8581106116fa575050509190565b8061170d61137061161c600194876108ab565b5f1a61171982876112a1565b53016116ec565b5f92915b815181101561174b576117378183611b3a565b810180911161088a57600190930192611724565b5050565b908160011b918083046002149015171561088a57565b839492916117738183611579565b93906117926020611789610c7561137085611294565b16151591611c67565b9788911561183457506117a69051876108ab565b6117b0825161174f565b146117c5575b505050505050505f905f905f90565b86866001928251611822575b5050506117df575b806117b6565b6117f2926117ec916108ab565b90611579565b506020815191012090602081519101201461181057808080806117d9565b61181b9151906108ab565b6001915f90565b61182c9350611dd0565b86865f6117d1565b611845939495965061053392611dd0565b61189e57611856926117ec916108ab565b50908151602081145f1461187e57506020611876920151925b51906108ab565b916001929190565b80156118925760206118769301209261186f565b505050505f905f905f90565b50505050505f905f905f90565b919092936118b9825161174f565b8510156119635750610c756113706118db926118d58760011c90565b906112a1565b6001841661195a5760041c600f16915b905f925b60ff8116841061193a57506119049250611579565b508051801561192f576118769160208203611925576020915001519161087c565b602001209161087c565b5050505f905f905f90565b9091600161194e82610cca60ff9487611b3a565b940193929190506118ef565b600f16916118eb565b9290509392935f915b601083106119a65761197e9250611579565b50602081519101209060208151910120145f1461199d57600191905f90565b5f915081908190565b906119b781610cca60019385611b3a565b9201919061196c565b909291925f908460c060ff6119dc610c75610c678a878a610b40565b1610610d745760f860ff6119f7610c75610c678a878a610b40565b1610611b2b5780610cca610cc4610cbf610cba610c75610c67611a1b97898c610b40565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611a47828487611e8e565b03611b1c57611a74610a51610a51611a6d611a66611a7c95878a61112a565b868961112a565b8588611e8e565b95828561112a565b611a8d610c75610c67838588610b40565b60ff811694906080861015611aa457505050505090565b909192939594608081145f14611abe57505f955050505050565b60a010610d7457610cc4611ad491939293610bf6565b915f935b838510611ae6575050505050565b9091929395611af760019160081b90565b611b10610cc4610c75610c67610fce8c610fc98b61087c565b17960193929190611ad8565b6324da545d60e11b5f5260045ffd5b50611b358561087c565b611a1b565b90815181101561128557611b54610c7561137083856112a1565b9160ff83166080811015611b6b5750505050600190565b60b8811015611b8657505050610cc4610cbf610be092610bf6565b60c0811015611bf2575091610cc4611b9d91610c1c565b905f925f915b838310611bba5750505090610fc9610be09261088f565b909193611bc960019160081b90565b611be8610cc4610c75611370611be28a610fc98961087c565b886112a1565b1794019190611ba3565b60f81115611c0b575050610cc4610cbf610be092610c09565b91610cc4611c1891610be3565b905f925f915b838310611c355750505090610fc9610be09261088f565b909193611c4460019160081b90565b611c5d610cc4610c75611370611be28a610fc98961087c565b1794019190611c1e565b908151156108e557611c7e610c7561137084611294565b6010811615611d4d57611ca1611c9c611c97855161174f565b6109bb565b611547565b9060f81b600f60f81b165f1a611cb682611294565b5360015b8351811015611d485780611cf5611ce5611cdc610c756113706001968a6112a1565b60041c600f1690565b60f81b6001600160f81b03191690565b611d0e611d04611c978461174f565b915f1a91856112a1565b53611d35600f611d24610c75611370858a6112a1565b1660f81b6001600160f81b03191690565b611d41611d048361174f565b5301611cba565b509150565b50611d63611c9c611d5e845161174f565b6109ac565b60015b8351811015611d485780611d88611ce5611cdc610c756113706001968a6112a1565b611d9c611d04611d97846109bb565b61174f565b53611db2600f611d24610c75611370858a6112a1565b611dc9611d04611dc4611d97856109bb565b61087c565b5301611d66565b919091611dde8251846108ab565b611de8825161174f565b10611e87575f5b8251811015611e7e57611e0b611e0582866108ab565b60011690565b611e6057611e34611cdc610c75611370611e2e611e28868a6108ab565b60011c90565b866112a1565b60ff611e49610cc4610c7561137086896112a1565b911603611e5857600101611def565b505050505f90565b600f611e78610c75611370611e2e611e28868a6108ab565b16611e34565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b031990611eac90849086610b40565b351603611ebb57016001013590565b63f0ff325b60e01b5f5260045ffdfea2646970667358221220f69ca5510c9db5d3d084b033bdfa5d26f08395915664f685cdd32a89225570e064736f6c634300081e0033 diff --git a/artifacts/erc20_runtime.hex b/artifacts/erc20_runtime.hex index 3b16c85..a6d2c3d 100644 --- a/artifacts/erc20_runtime.hex +++ b/artifacts/erc20_runtime.hex @@ -1 +1 @@ -0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101545780631aa7c0ec1461014f5780632feef2ec1461014a578063308657d71461014557806333ee5f35146101405780633d2691bc1461013b57806355a373d6146101365780635a4fd645146101315780636b892b221461012c57806380f323a71461012757806381972d00146101225780638677ab231461011d5780638bd03d0a146101185780639940686e14610113578063a65e2cfd1461010e578063cb766a5614610109578063d415b3f914610104578063ede7f6a3146100ff578063f3a504f2146100fa5763fe03a460146100f5575f80fd5b610961565b61093c565b6106f9565b6106dc565b6106b8565b610560565b6104aa565b61048d565b610449565b6103fa565b6103dd565b6102d0565b6102b4565b610270565b610254565b610237565b610215565b6101db565b6101b3565b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b346101af575f3660031901126101af576003546040516001600160a01b039091168152602090f35b346101af575f3660031901126101af5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101af575f3660031901126101af57602060ff600754166040519015158152f35b346101af575f3660031901126101af576020600454604051908152f35b346101af575f3660031901126101af5760206040516101008152f35b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af5760205f54604051908152f35b346101af575f3660031901126101af576102f2600160ff196007541617600755565b6102fa610a77565b610302610ab7565b61030a610aee565b61032161ff0019600754166007555f6001555f8055565b80156103ce5760405163a9059cbb60e01b815233600482015260248101919091526020816044815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f9161039a575b501561038b57005b63022e258160e11b5f5260045ffd5b6103bc915060203d6020116103c2575b6103b48183610992565b8101906109b9565b5f610383565b503d6103aa565b6109d1565b6353cd7f7960e01b5f5260045ffd5b346101af575f3660031901126101af576020600554604051908152f35b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19166001179055005b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af576020600154604051908152f35b346101af5760203660031901126101af576004356104c6610b00565b6104cf81610b49565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f91610541575b501561038b5761053f90610ba4565b005b61055a915060203d6020116103c2576103b48183610992565b5f610530565b346101af5760403660031901126101af576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a05760075460081c60ff166106a957811561069a57801561068b576105cf826105d4935f55600255565b600155565b61061560206105e860025460015490610a1f565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f9161066c575b501561038b5761053f61010061ff00196007541617600755565b610685915060203d6020116103c2576103b48183610992565b5f610652565b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b346101af575f3660031901126101af5760206106d2610a2c565b6040519015158152f35b346101af575f3660031901126101af576020600254604051908152f35b346101af5760403660031901126101af5760043567ffffffffffffffff81116101af578060040160a060031983360301126101af5760243561073b8280610a44565b6007546107509060081c60ff161590565b1590565b61092d57600354610771906001600160a01b03165b6001600160a01b031690565b331480159061091c575b61090d574383116108fe576101006107938443610be9565b116108ef57824080156108e0576107ab368385610c12565b60208151910120036108d1576107c091611074565b036108c2576107d86107d28280610a44565b90610c76565b9161081261074c60248301946107ee8686610a44565b906107fc6044870188610a44565b9061080a606489018a610a44565b949093610ce6565b6108b35760846108286108989461074c94610a44565b7f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000939101359190610d6a565b6108a45761053f610f04565b6364fa89e160e11b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b5061092861074c610a2c565b61077b565b636af784dd60e11b5f5260045ffd5b346101af575f3660031901126101af57602060ff60075460081c166040519015158152f35b346101af575f3660031901126101af576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176109b457604052565b61097e565b908160209103126101af575180151581036101af5790565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b90600182018092116109fe57565b6109dc565b60010190816001116109fe57565b90601582018092116109fe57565b919082018092116109fe57565b6004548015159081610a3c575090565b905042111590565b903590601e19813603018212156101af570180359067ffffffffffffffff82116101af576020019181360383136101af57565b60ff60075460081c161561092d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a057565b610abf610a2c565b610adf576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116109fe5790565b6004548015159081610b3f575b50610b1457565b6005545f548181018091116109fe575f556006549081018091116109fe57600655610b3d610ab7565b565b905042115f610b0d565b60075460ff8160081c161561092d5760ff16610b9557610b67610a2c565b610b86575f5460011c11610b7757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600354161760035561012c42018042116109fe57600455600555565b6001198101919082116109fe57565b5f198101919082116109fe57565b919082039182116109fe57565b67ffffffffffffffff81116109b457601f01601f191660200190565b929192610c1e82610bf6565b91610c2c6040519384610992565b8294818452818301116101af578281602093845f960137010152565b634e487b7160e01b5f52603260045260245ffd5b9015610c655790565b610c48565b90821015610c65570190565b90610c818183611130565b905f5b60058110610cd15750600560fd1b906001600160f81b031990610ca990849086610c6a565b351603610cc2576001810181116109fe57016001013590565b633954003560e11b5f5260045ffd5b91610cdf6001918386611264565b9201610c84565b610cfc610d0492939495610d0a98973691610c12565b923691610c12565b906113ec565b90565b60ff60f6199116019060ff82116109fe57565b60ff607f199116019060ff82116109fe57565b60ff60bf199116019060ff82116109fe57565b60ff60b6199116019060ff82116109fe57565b60ff166001019060ff82116109fe57565b9594939291905f818881151580610ee8575b610eda575b610daa610da4610d968560c09560ff95610c6a565b356001600160f81b03191690565b60f81c90565b1610610ea457808860f860ff610dc8610da4610d9688978887610c6a565b1610610eca57610df5610df0610deb610da4610d9686610e0198610dfb97610c6a565b610d0d565b610d59565b60ff1690565b90610a1f565b81885f5b60038110610eb35750610df5610da4610d968560c095610e2495610c6a565b10610ea457808860f8610e42610df5610da4610d9688978887610c6a565b10610e9357610df5610df0610deb610da4610d9686610e6498610dfb97610c6a565b915b5f905b808210610e7c575050610d0a9596611599565b9092610e8b600191848b611264565b930190610e69565b50610e9e91506109f0565b91610e66565b631bd5dcf760e31b5f5260045ffd5b92600192610ec092611264565b9101888391610e05565b50610ed591506109f0565b610e01565b506001915082905088610d81565b50608060ff610efd610da4610d968686610c5c565b1610610d7c565b610f0c611669565b6003546001600160a01b0316610f496001600160601b0360a01b600354166003555f6005555f60045561ff0019600754166007555f6001555f8055565b4662aa36a703610fe557604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91610fc6575b505b1561038b57565b610fdf915060203d6020116103c2576103b48183610992565b5f610fbd565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91611055575b50610fbf565b61106e915060203d6020116103c2576103b48183610992565b5f61104f565b61107e8282611130565b915f5b6008811061111b575061109b610da4610d96858486610c6a565b925f9260ff851694608086105f146110b557505050505090565b6110c69193949550610df590610d20565b915f935b8385106110d957505050505090565b90919293946110ea60019160081b90565b61110f610df5610da4610d966111088b6111038b6109f0565b610a1f565b8789610c6a565b179501939291906110ca565b926111296001918385611264565b9301611081565b5f600360fe1b6001600160f81b031961114c610d968686610c5c565b161061122c57601f60fb1b6001600160f81b031961116d610d968686610c5c565b161061125b5780610dfb610df5610df0610deb610da4610d96611191978a8a610c6a565b905b61a5bd46148015611250575b6111aa575b50905090565b5f5b6003811061123b5750600360fe1b6111d86111cb610d96858786610c6a565b6001600160f81b03191690565b1061122c57601f60fb1b6111f36111cb610d96858786610c6a565b1061121c57610df5610df0610deb610da4610d968661121598610dfb97610c6a565b805f6111a4565b5061122791506109f0565b611215565b63c0098bd960e01b5f5260045ffd5b916112496001918584611264565b92016111ac565b5061a5bf461461119f565b50600190611193565b9190808210156113bf5761127f610da4610d96848487610c6a565b9060ff8216608081101561129a57505050610d0a91506109f0565b91929160b88110156112c2575050610d0a9250610df56112bc610dfb926109f0565b92610d20565b90929060c08110156113385750610df56112de91949394610d46565b915f935f915b8483106112ff57505050610d0a9291611103611103926109f0565b90919461130e60019160081b90565b61132e610df5610da4610d966113278b6111038b6109f0565b8888610c6a565b17950191906112e4565b90929060f8111561135e5750610d0a9250610df5611358610dfb926109f0565b92610d33565b9291610df561136c91610d0d565b915f935f915b84831061138d57505050610d0a9291611103611103926109f0565b90919461139c60019160081b90565b6113b5610df5610da4610d966113278b6111038b6109f0565b1795019190611372565b6318d76ae160e11b5f5260045ffd5b805115610c655760200190565b908151811015610c65570160200190565b919390929190600360fe1b6001600160f81b031961140d610d968689610c5c565b161061158a57601f60fb1b6001600160f81b031961142e610d968689610c5c565b16106115805761145261144d610df5610deb610da4610d96888b610c5c565b610a03565b9492905b945f5b82821061146b57505050505050505f90565b6114896114828361147d36878a610c12565b6116da565b9093610a1f565b96825160208401200361151e57600360fe1b6114b86111cb6114aa856113ce565b516001600160f81b03191690565b1061151e578590846001601f60fb1b6114d66111cb6114aa886113ce565b1015611562575b6114e78186611881565b6011810361152957506114f994611a0c565b94911561151e5784156115125793915b91959093611459565b50505050505050600190565b505050505050505f90565b90935060021415905061155657848792611542946118c6565b94911561151e578415611512579391611509565b50505050505050505f90565b5061157b61144d610df5610deb610da46114aa896113ce565b6114dd565b6001949290611456565b63ebb47d1d60e01b5f5260045ffd5b91949392948060c060ff6115b4610da4610d9685888a610c6a565b1610610ea45760f860ff6115cf610da4610d9685888a610c6a565b1610611659575080610dfb610df5610df0610deb610da4610d966115f497898b610c6a565b945b609460ff61160b610da4610d968a8789610c6a565b160361164a576001600160a01b03168286016001013560601c0361163b57611635610d0a95610a11565b91611b21565b63a087f96f60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b61166391506109f0565b946115f6565b6005545f5481018091116109fe5760015481018091116109fe5790565b604080519091906116978382610992565b6001815291601f1901366020840137565b906116b282610bf6565b6116bf6040519182610992565b82815280926116d0601f1991610bf6565b0190602036910137565b80518210156113bf576116f3610da46114aa84846113db565b9160ff8316608081101561172c5750505061170c611686565b9060f81b6001600160f81b0319165f1a611725826113ce565b5390600190565b919392909160b88110156117965750610df561174791610d20565b90611751826116a8565b935f5b83811061176757505050610d0a90610a03565b806117836114aa61177d600194611103886109f0565b856113db565b5f1a61178f82896113db565b5301611754565b60c0111561183457610df56117aa91610d46565b5f915f5b82811061180657506117bf836116a8565b945f5b8481106117d95750505090611103610d0a92610a03565b806117f36114aa61177d600194611103896111038a6109f0565b5f1a6117ff828a6113db565b53016117c2565b9260019060081b61182c610df5610da46114aa61182689611103896109f0565b8b6113db565b1793016117ae565b50916118408382611cd8565b9261184a846116a8565b915f5b85811061185b575050509190565b8061186e6114aa61177d60019487610a1f565b5f1a61187a82876113db565b530161184d565b5f92915b81518110156118ac576118988183611cd8565b81018091116109fe57600190930192611885565b5050565b908160011b91808304600214901517156109fe57565b839492916118d481836116da565b93906118f360206118ea610da46114aa856113ce565b16151591611e05565b978891156119955750611907905187610a1f565b61191182516118b0565b14611926575b505050505050505f905f905f90565b86866001928251611983575b505050611940575b80611917565b6119539261194d91610a1f565b906116da565b5060208151910120906020815191012014611971578080808061193a565b61197c915190610a1f565b6001915f90565b61198d9350611f6e565b86865f611932565b6119a6939495965061074c92611f6e565b6119ff576119b79261194d91610a1f565b50908151602081145f146119df575060206119d7920151925b5190610a1f565b916001929190565b80156119f35760206119d7930120926119d0565b505050505f905f905f90565b50505050505f905f905f90565b91909293611a1a82516118b0565b851015611ac45750610da46114aa611a3c92611a368760011c90565b906113db565b60018416611abb5760041c600f16915b905f925b60ff81168410611a9b5750611a6592506116da565b5080518015611a90576119d79160208203611a8657602091500151916109f0565b60200120916109f0565b5050505f905f905f90565b90916001611aaf82610dfb60ff9487611cd8565b94019392919050611a50565b600f1691611a4c565b9290509392935f915b60108310611b0757611adf92506116da565b50602081519101209060208151910120145f14611afe57600191905f90565b5f915081908190565b90611b1881610dfb60019385611cd8565b92019190611acd565b929190918160c060ff611b3b610da4610d9687898b610c6a565b1610610ea45760f860ff611b56610da4610d9687898b610c6a565b1610611cc95780610dfb610df5610df0610deb610da4610d96611b7a978b8d610c6a565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ba682868861202c565b03611cba57610765610765611bc9611bc2611bd094888a611264565b8789611264565b868861202c565b6001600160a01b03918216911603611cab57611bed908284611264565b905f91611c01610da4610d96838588610c6a565b60ff811694906080861015611c2f5750505050505b03611c2057600190565b6355e97b0d60e01b5f5260045ffd5b9091929394608081145f14611c4a575050505050505f611c16565b60a010610ea457610df5611c6091939293610d20565b915f935b838510611c75575050505050611c16565b9091929394611c8660019160081b90565b611c9f610df5610da4610d966111088b6111038b6109f0565b17950193929190611c64565b634cd4b7b160e01b5f5260045ffd5b6324da545d60e11b5f5260045ffd5b50611cd3826109f0565b611b7a565b9081518110156113bf57611cf2610da46114aa83856113db565b9160ff83166080811015611d095750505050600190565b60b8811015611d2457505050610df5610df0610d0a92610d20565b60c0811015611d90575091610df5611d3b91610d46565b905f925f915b838310611d585750505090611103610d0a92610a03565b909193611d6760019160081b90565b611d86610df5610da46114aa611d808a611103896109f0565b886113db565b1794019190611d41565b60f81115611da9575050610df5610df0610d0a92610d33565b91610df5611db691610d0d565b905f925f915b838310611dd35750505090611103610d0a92610a03565b909193611de260019160081b90565b611dfb610df5610da46114aa611d808a611103896109f0565b1794019190611dbc565b90815115610b3d57611e1c610da46114aa846113ce565b6010811615611eeb57611e3f611e3a611e3585516118b0565b610bdb565b6116a8565b9060f81b600f60f81b165f1a611e54826113ce565b5360015b8351811015611ee65780611e93611e83611e7a610da46114aa6001968a6113db565b60041c600f1690565b60f81b6001600160f81b03191690565b611eac611ea2611e35846118b0565b915f1a91856113db565b53611ed3600f611ec2610da46114aa858a6113db565b1660f81b6001600160f81b03191690565b611edf611ea2836118b0565b5301611e58565b509150565b50611f01611e3a611efc84516118b0565b610bcc565b60015b8351811015611ee65780611f26611e83611e7a610da46114aa6001968a6113db565b611f3a611ea2611f3584610bdb565b6118b0565b53611f50600f611ec2610da46114aa858a6113db565b611f67611ea2611f62611f3585610bdb565b6109f0565b5301611f04565b919091611f7c825184610a1f565b611f8682516118b0565b10612025575f5b825181101561201c57611fa9611fa38286610a1f565b60011690565b611ffe57611fd2611e7a610da46114aa611fcc611fc6868a610a1f565b60011c90565b866113db565b60ff611fe7610df5610da46114aa86896113db565b911603611ff657600101611f8d565b505050505f90565b600f612016610da46114aa611fcc611fc6868a610a1f565b16611fd2565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b03199061204a90849086610c6a565b35160361205957016001013590565b63f0ff325b60e01b5f5260045ffdfea264697066735822122028c96b0e3c2075e4a273041c863c4e813c898fa651607c92e57dad2760f392cd64736f6c634300081e0033 +0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101145780631303a4841461010f5780631aa7c0ec1461010a578063308657d71461010557806333ee5f35146101005780633d2691bc146100fb57806355a373d6146100f65780636b892b22146100f157806380f323a7146100ec57806381972d00146100e75780639940686e146100e2578063b1dd0800146100dd578063c41020eb146100d8578063cb766a56146100d3578063d0e30db0146100ce5763f3a504f2146100c9575f80fd5b61074b565b61072f565b61070b565b6105de565b610496565b6103e0565b610391565b610374565b610257565b610213565b6101f7565b6101da565b6101b8565b610190565b610173565b3461016f575f36600319011261016f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610160576005805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461016f575f36600319011261016f576020600154604051908152f35b3461016f575f36600319011261016f576002546040516001600160a01b039091168152602090f35b3461016f575f36600319011261016f57602060ff600554166040519015158152f35b3461016f575f36600319011261016f576020600354604051908152f35b3461016f575f36600319011261016f5760206040516101008152f35b3461016f575f36600319011261016f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461016f575f36600319011261016f57610279600160ff196005541617600555565b610281610819565b6102896108b8565b6102916108f1565b5f5480156103655760206102dd916102b661ff0019600554166005555f80555f600155565b60405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f91610331575b501561032257005b63022e258160e11b5f5260045ffd5b610353915060203d602011610359575b61034b8183610784565b8101906107ab565b5f61031a565b503d610341565b6107c3565b6353cd7f7960e01b5f5260045ffd5b3461016f575f36600319011261016f576020600454604051908152f35b3461016f575f36600319011261016f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610160576005805460ff19166001179055005b3461016f57602036600319011261016f576004356103fc6108b8565b61040581610928565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610360575f91610477575b50156103225761047590610984565b005b610490915060203d6020116103595761034b8183610784565b5f610466565b3461016f57606036600319011261016f5760043567ffffffffffffffff811161016f57806004019060a0600319823603011261016f57604435916104e66024356104e083806107ce565b90610a28565b6104f96104f382806107ce565b90610b4c565b90610537610533602485019361050f85856107ce565b9061051d60448901876107ce565b9061052b60648b01896107ce565b949093610bbc565b1590565b6105cf5761059f9260846105516105ad9461055c946107ce565b919092013591610c40565b6040516bffffffffffffffffffffffff19606093841b8116602083019081529490931b909216603483015260488201526068810194909452929182906088820190565b03601f198101835282610784565b519020600154036105c057610475610dca565b635054097b60e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b3461016f57604036600319011261016f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101605760ff60055460081c166106fc5781156106ed578161064a602092610677945f55600155565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f916106ce575b50156103225761047561010061ff00196005541617600555565b6106e7915060203d6020116103595761034b8183610784565b5f6106b4565b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461016f575f36600319011261016f576020610725610801565b6040519015158152f35b3461016f575f36600319011261016f5760205f54604051908152f35b3461016f575f36600319011261016f57602060ff60055460081c166040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107a657604052565b610770565b9081602091031261016f5751801515810361016f5790565b6040513d5f823e3d90fd5b903590601e198136030182121561016f570180359067ffffffffffffffff821161016f5760200191813603831361016f57565b6003548015159081610811575090565b905042111590565b60ff60055460081c1615610859577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361016057565b636af784dd60e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b906001820180921161088a57565b610868565b600101908160011161088a57565b906015820180921161088a57565b9190820180921161088a57565b60035480151590816108e7575b506108cc57565b6004545f5490810180911161088a575f556108e56108f1565b565b905042115f6108c5565b6108f9610801565b610919576001600160601b0360a01b600254166002555f6004555f600355565b639cbc1de160e01b5f5260045ffd5b60055460ff8160081c16156108595760ff1661097557610946610801565b610966576101905f54041161095757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600254161760025561012c420180421161088a57600355600455565b60011981019190821161088a57565b5f1981019190821161088a57565b9190820391821161088a57565b67ffffffffffffffff81116107a657601f01601f191660200190565b9291926109fe826109d6565b91610a0c6040519384610784565b82948184528183011161016f578281602093845f960137010152565b90610a3c61053360055460ff9060081c1690565b61085957600254610a5d906001600160a01b03165b6001600160a01b031690565b3314801590610b0d575b610afe57438311610aef57610100610a7f84436109c9565b11610ae05782408015610ad157610a973683856109f2565b6020815191012003610ac257610aac91610f3a565b03610ab357565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610b19610533610801565b610a67565b634e487b7160e01b5f52603260045260245ffd5b9015610b3b5790565b610b1e565b90821015610b3b570190565b90610b578183610ff6565b905f5b60058110610ba75750600560fd1b906001600160f81b031990610b7f90849086610b40565b351603610b985760018101811161088a57016001013590565b633954003560e11b5f5260045ffd5b91610bb5600191838661112a565b9201610b5a565b610bd2610bda92939495610be0989736916109f2565b9236916109f2565b906112b2565b90565b60ff60f6199116019060ff821161088a57565b60ff607f199116019060ff821161088a57565b60ff60bf199116019060ff821161088a57565b60ff60b6199116019060ff821161088a57565b60ff166001019060ff821161088a57565b9291905f81151580610dae575b610da6575b60c060ff610c7b610c75610c6785878b610b40565b356001600160f81b03191690565b60f81c90565b1610610d745760f860ff610c96610c75610c6785878b610b40565b1610610d985780610cca610cc4610cbf610cba610c75610c67610cd097898d610b40565b610be3565b610c2f565b60ff1690565b906108ab565b5f5b60038110610d83575060c0610cf1610cc4610c75610c6785878b610b40565b10610d745760f8610d0c610cc4610c75610c6785878b610b40565b10610d655780610cca610cc4610cbf610cba610c75610c67610d2f97898d610b40565b915b5f905b808210610d4e575050610d47929361145f565b9192909190565b9092610d5d600191848861112a565b930190610d34565b610d6e9061087c565b91610d31565b631bd5dcf760e31b5f5260045ffd5b90610d91600191848861112a565b9101610cd2565b610da19061087c565b610cd0565b506001610c52565b50608060ff610dc3610c75610c67868a610b32565b1610610c4d565b610dd2611514565b6002546001600160a01b0316610e0f6001600160601b0360a01b600254166002555f6004555f60035561ff0019600554166005555f80555f600155565b4662aa36a703610eab57604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f91610e8c575b505b1561032257565b610ea5915060203d6020116103595761034b8183610784565b5f610e83565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610360575f91610f1b575b50610e85565b610f34915060203d6020116103595761034b8183610784565b5f610f15565b610f448282610ff6565b915f5b60088110610fe15750610f61610c75610c67858486610b40565b925f9260ff851694608086105f14610f7b57505050505090565b610f8c9193949550610cc490610bf6565b915f935b838510610f9f57505050505090565b9091929394610fb060019160081b90565b610fd5610cc4610c75610c67610fce8b610fc98b61087c565b6108ab565b8789610b40565b17950193929190610f90565b92610fef600191838561112a565b9301610f47565b5f600360fe1b6001600160f81b0319611012610c678686610b32565b16106110f257601f60fb1b6001600160f81b0319611033610c678686610b32565b16106111215780610cca610cc4610cbf610cba610c75610c67611057978a8a610b40565b905b61a5bd46148015611116575b611070575b50905090565b5f5b600381106111015750600360fe1b61109e611091610c67858786610b40565b6001600160f81b03191690565b106110f257601f60fb1b6110b9611091610c67858786610b40565b106110e257610cc4610cbf610cba610c75610c67866110db98610cca97610b40565b805f61106a565b506110ed915061087c565b6110db565b63c0098bd960e01b5f5260045ffd5b9161110f600191858461112a565b9201611072565b5061a5bf4614611065565b50600190611059565b91908082101561128557611145610c75610c67848487610b40565b9060ff8216608081101561116057505050610be0915061087c565b91929160b8811015611188575050610be09250610cc4611182610cca9261087c565b92610bf6565b90929060c08110156111fe5750610cc46111a491949394610c1c565b915f935f915b8483106111c557505050610be09291610fc9610fc99261087c565b9091946111d460019160081b90565b6111f4610cc4610c75610c676111ed8b610fc98b61087c565b8888610b40565b17950191906111aa565b90929060f811156112245750610be09250610cc461121e610cca9261087c565b92610c09565b9291610cc461123291610be3565b915f935f915b84831061125357505050610be09291610fc9610fc99261087c565b90919461126260019160081b90565b61127b610cc4610c75610c676111ed8b610fc98b61087c565b1795019190611238565b6318d76ae160e11b5f5260045ffd5b805115610b3b5760200190565b908151811015610b3b570160200190565b919390929190600360fe1b6001600160f81b03196112d3610c678689610b32565b161061145057601f60fb1b6001600160f81b03196112f4610c678689610b32565b161061144657611318611313610cc4610cba610c75610c67888b610b32565b61088f565b9492905b945f5b82821061133157505050505050505f90565b61134f6113488361134336878a6109f2565b611579565b90936108ab565b9682516020840120036113e457600360fe1b61137e61109161137085611294565b516001600160f81b03191690565b106113e4578590846001601f60fb1b61139c61109161137088611294565b1015611428575b6113ad8186611720565b601181036113ef57506113bf946118ab565b9491156113e45784156113d85793915b9195909361131f565b50505050505050600190565b505050505050505f90565b90935060021415905061141c5784879261140894611765565b9491156113e45784156113d85793916113cf565b50505050505050505f90565b50611441611313610cc4610cba610c7561137089611294565b6113a3565b600194929061131c565b63ebb47d1d60e01b5f5260045ffd5b92918060c060ff611477610c75610c6785888b610b40565b1610610d745760f860ff611492610c75610c6785888b610b40565b1610611504575080610cca610cc4610cbf610cba610c75610c676114b797898c610b40565b925b609460ff6114ce610c75610c67888787610b40565b16036114f5576114f1916114eb6001868401013560601c9561089d565b916119c0565b9091565b63e6c4247b60e01b5f5260045ffd5b61150e915061087c565b926114b9565b6004545f54810180911161088a5790565b604080519091906115368382610784565b6001815291601f1901366020840137565b90611551826109d6565b61155e6040519182610784565b828152809261156f601f19916109d6565b0190602036910137565b805182101561128557611592610c7561137084846112a1565b9160ff831660808110156115cb575050506115ab611525565b9060f81b6001600160f81b0319165f1a6115c482611294565b5390600190565b919392909160b88110156116355750610cc46115e691610bf6565b906115f082611547565b935f5b83811061160657505050610be09061088f565b8061162261137061161c600194610fc98861087c565b856112a1565b5f1a61162e82896112a1565b53016115f3565b60c011156116d357610cc461164991610c1c565b5f915f5b8281106116a5575061165e83611547565b945f5b8481106116785750505090610fc9610be09261088f565b8061169261137061161c600194610fc989610fc98a61087c565b5f1a61169e828a6112a1565b5301611661565b9260019060081b6116cb610cc4610c756113706116c589610fc98961087c565b8b6112a1565b17930161164d565b50916116df8382611b3a565b926116e984611547565b915f5b8581106116fa575050509190565b8061170d61137061161c600194876108ab565b5f1a61171982876112a1565b53016116ec565b5f92915b815181101561174b576117378183611b3a565b810180911161088a57600190930192611724565b5050565b908160011b918083046002149015171561088a57565b839492916117738183611579565b93906117926020611789610c7561137085611294565b16151591611c67565b9788911561183457506117a69051876108ab565b6117b0825161174f565b146117c5575b505050505050505f905f905f90565b86866001928251611822575b5050506117df575b806117b6565b6117f2926117ec916108ab565b90611579565b506020815191012090602081519101201461181057808080806117d9565b61181b9151906108ab565b6001915f90565b61182c9350611dd0565b86865f6117d1565b611845939495965061053392611dd0565b61189e57611856926117ec916108ab565b50908151602081145f1461187e57506020611876920151925b51906108ab565b916001929190565b80156118925760206118769301209261186f565b505050505f905f905f90565b50505050505f905f905f90565b919092936118b9825161174f565b8510156119635750610c756113706118db926118d58760011c90565b906112a1565b6001841661195a5760041c600f16915b905f925b60ff8116841061193a57506119049250611579565b508051801561192f576118769160208203611925576020915001519161087c565b602001209161087c565b5050505f905f905f90565b9091600161194e82610cca60ff9487611b3a565b940193929190506118ef565b600f16916118eb565b9290509392935f915b601083106119a65761197e9250611579565b50602081519101209060208151910120145f1461199d57600191905f90565b5f915081908190565b906119b781610cca60019385611b3a565b9201919061196c565b909291925f908460c060ff6119dc610c75610c678a878a610b40565b1610610d745760f860ff6119f7610c75610c678a878a610b40565b1610611b2b5780610cca610cc4610cbf610cba610c75610c67611a1b97898c610b40565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611a47828487611e8e565b03611b1c57611a74610a51610a51611a6d611a66611a7c95878a61112a565b868961112a565b8588611e8e565b95828561112a565b611a8d610c75610c67838588610b40565b60ff811694906080861015611aa457505050505090565b909192939594608081145f14611abe57505f955050505050565b60a010610d7457610cc4611ad491939293610bf6565b915f935b838510611ae6575050505050565b9091929395611af760019160081b90565b611b10610cc4610c75610c67610fce8c610fc98b61087c565b17960193929190611ad8565b6324da545d60e11b5f5260045ffd5b50611b358561087c565b611a1b565b90815181101561128557611b54610c7561137083856112a1565b9160ff83166080811015611b6b5750505050600190565b60b8811015611b8657505050610cc4610cbf610be092610bf6565b60c0811015611bf2575091610cc4611b9d91610c1c565b905f925f915b838310611bba5750505090610fc9610be09261088f565b909193611bc960019160081b90565b611be8610cc4610c75611370611be28a610fc98961087c565b886112a1565b1794019190611ba3565b60f81115611c0b575050610cc4610cbf610be092610c09565b91610cc4611c1891610be3565b905f925f915b838310611c355750505090610fc9610be09261088f565b909193611c4460019160081b90565b611c5d610cc4610c75611370611be28a610fc98961087c565b1794019190611c1e565b908151156108e557611c7e610c7561137084611294565b6010811615611d4d57611ca1611c9c611c97855161174f565b6109bb565b611547565b9060f81b600f60f81b165f1a611cb682611294565b5360015b8351811015611d485780611cf5611ce5611cdc610c756113706001968a6112a1565b60041c600f1690565b60f81b6001600160f81b03191690565b611d0e611d04611c978461174f565b915f1a91856112a1565b53611d35600f611d24610c75611370858a6112a1565b1660f81b6001600160f81b03191690565b611d41611d048361174f565b5301611cba565b509150565b50611d63611c9c611d5e845161174f565b6109ac565b60015b8351811015611d485780611d88611ce5611cdc610c756113706001968a6112a1565b611d9c611d04611d97846109bb565b61174f565b53611db2600f611d24610c75611370858a6112a1565b611dc9611d04611dc4611d97856109bb565b61087c565b5301611d66565b919091611dde8251846108ab565b611de8825161174f565b10611e87575f5b8251811015611e7e57611e0b611e0582866108ab565b60011690565b611e6057611e34611cdc610c75611370611e2e611e28868a6108ab565b60011c90565b866112a1565b60ff611e49610cc4610c7561137086896112a1565b911603611e5857600101611def565b505050505f90565b600f611e78610c75611370611e2e611e28868a6108ab565b16611e34565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b031990611eac90849086610b40565b351603611ebb57016001013590565b63f0ff325b60e01b5f5260045ffdfea2646970667358221220f69ca5510c9db5d3d084b033bdfa5d26f08395915664f685cdd32a89225570e064736f6c634300081e0033 diff --git a/artifacts/native_deployment.hex b/artifacts/native_deployment.hex index 1baa700..e3c3277 100644 --- a/artifacts/native_deployment.hex +++ b/artifacts/native_deployment.hex @@ -1 +1 @@ -0x60e0601f611e5838819003918201601f19168301916001600160401b038311848410176101205780849260809460405283398101031261011c578051906001600160a01b038216820361011c576020810151606060408301519201519260a05260c0523360805280151580610113575b6100c1575b604051611d23908161013582396080518181816101560152818161051e015281816105de0152610690015260a0518181816103070152610630015260c0518181816102e5015261038d0152f35b8181018082116100ff5734036100f057805f5560025560015561010061ff001960075416176007555f80610074565b63201c04ab60e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5081151561006f565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101445780631aa7c0ec1461013f57806323a8b41a1461013a5780632feef2ec14610135578063308657d71461013057806333ee5f351461012b5780633d2691bc146101265780635a4fd6451461012157806364c9ec6f1461011c5780636b892b221461011757806380f323a71461011257806381972d001461010d5780638677ab23146101085780638bd03d0a14610103578063a65e2cfd146100fe578063cb766a56146100f9578063d415b3f9146100f4578063f3a504f2146100ef5763fe03a460146100ea575f80fd5b6107b1565b61078c565b61076f565b61074b565b61067c565b61065f565b61061b565b6105cc565b6105af565b6104f4565b610427565b61040b565b6103ef565b6103d2565b6103b0565b610376565b6101cb565b6101a3565b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461019f575f36600319011261019f576003546040516001600160a01b039091168152602090f35b3461019f57604036600319011261019f5760043567ffffffffffffffff811161019f57806004019060c0600319823603011261019f5761021760243561021184806107ce565b9061093e565b61022a61022483806107ce565b90610aae565b602482019161026b61026761023f85876107ce565b61024f60448697939701896107ce565b60a48701979161025f898c6107ce565b949093610bb7565b1590565b610367576102676102b491608461028b61028588806107ce565b90610bde565b9161025f60648201966102ab6102a1898c6107ce565b959094018b6107ce565b9290918b6107ce565b610358576102676102c86102ce92856107ce565b90610c3f565b610349576102e26102679161032c936107ce565b907f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091610d0f565b61033a57610338610f2a565b005b633cff557560e11b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b3461019f575f36600319011261019f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461019f575f36600319011261019f57602060ff600754166040519015158152f35b3461019f575f36600319011261019f576020600454604051908152f35b3461019f575f36600319011261019f5760206040516101008152f35b3461019f575f36600319011261019f5760205f54604051908152f35b5f36600319011261019f5760045480151590816104ea575b506104b7575b60075460ff8160081c16156104a85760ff16610499576104636108d1565b61048a575f5460011c341061047b5761033834610f90565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b6005545f548181018091116104e5575f556006549081018091116104e5576006556104e0610fb8565b610445565b610886565b905042115f61043f565b3461019f575f36600319011261019f5760ff6001811960075416178060075560081c16156104a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361019057610554610fb8565b61055c610fef565b61057361ff0019600754166007555f6001555f8055565b80156105a0575f80808093335af161058961085c565b501561059157005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461019f575f36600319011261019f576020600554604051908152f35b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19166001179055005b3461019f575f36600319011261019f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461019f575f36600319011261019f576020600154604051908152f35b604036600319011261019f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101905760075460081c60ff1661073c57811561072d57801561071e576106e181836108c4565b340361070f576106f6826106fb935f55600255565b600155565b61033861010061ff00196007541617600755565b63201c04ab60e01b5f5260045ffd5b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461019f575f36600319011261019f5760206107656108d1565b6040519015158152f35b3461019f575f36600319011261019f576020600254604051908152f35b3461019f575f36600319011261019f57602060ff60075460081c166040519015158152f35b3461019f575f36600319011261019f576020600654604051908152f35b903590601e198136030182121561019f570180359067ffffffffffffffff821161019f5760200191813603831361019f57565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff81118382101761083b57604052565b610801565b67ffffffffffffffff811161083b57601f01601f191660200190565b3d15610881573d9061087561087083610840565b610815565b9182523d5f602084013e565b606090565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116104e557565b90601582018092116104e557565b60010190816001116104e557565b919082018092116104e557565b60045480151590816108e1575090565b905042111590565b6001198101919082116104e557565b5f198101919082116104e557565b919082039182116104e557565b92919261092261087083610840565b938285528282011161019f57815f926020928387013784010152565b9061095261026760075460ff9060081c1690565b6104a8576003546001600160a01b03163314801590610a12575b610a03574383116109f4576101006109848443610906565b116109e557824080156109d65761099c368385610913565b60208151910120036109c7576109b191611001565b036109b857565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610a1e6102676108d1565b61096c565b634e487b7160e01b5f52603260045260245ffd5b9015610a405790565b610a23565b90821015610a40570190565b60ff60f6199116019060ff82116104e557565b60ff607f199116019060ff82116104e557565b60ff60bf199116019060ff82116104e557565b60ff60b6199116019060ff82116104e557565b60ff166001019060ff82116104e557565b905f600360fe1b6001600160f81b0319610ad9610acb8587610a37565b356001600160f81b03191690565b1610610ba857601f60fb1b6001600160f81b0319610afa610acb8587610a37565b1610610b9f5780610b34610b2e610b29610b24610b1e610acb610b3a97898b610a45565b60f81c90565b610a51565b610a9d565b60ff1690565b906108c4565b905b5f5b60048110610b8a5750600560fd1b906001600160f81b031990610b6790610acb90859087610a45565b1603610b7b57610b769061089a565b013590565b633954003560e11b5f5260045ffd5b91610b9860019183866110b1565b9201610b3e565b50600190610b3c565b63c0098bd960e01b5f5260045ffd5b610bcd610bd592939495610bdb98973691610913565b923691610913565b90611239565b90565b90610be981836113f3565b905f5b60058110610c2a5750600560fd1b906001600160f81b031990610c1190849086610a45565b351603610b7b576001810181116104e557016001013590565b91610c3860019183866110b1565b9201610bec565b5f9082151580610cf3575b610cea575b60c060ff610c64610b1e610acb868887610a45565b1610610cdb57610b1e610acb82858560f860ff610c8e610b1e610acb839b60019d610cb89c610a45565b1610610cd25780610b34610b2e610b29610b24610b1e610acb610cb297898b610a45565b91610a45565b1603610cc357600190565b63e9dd8a9d60e01b5f5260045ffd5b610cb29061089a565b631bd5dcf760e31b5f5260045ffd5b60019150610c4f565b50608060ff610d08610b1e610acb8786610a37565b1610610c4a565b90916003905f84151580610f0e575b610ec6575b60c060ff610d38610b1e610acb858a8a610a45565b1610610cdb578060f860ff610d57610b1e610acb610d7d968b8b610a45565b1610610ebd5760ff610d76610b29610b24610b1e610acb868c8c610a45565b16906108c4565b915f905b808210610ea6575050609460ff610d9f610b1e610acb868989610a45565b1603610e97576001600160a01b03168282016001013560601c03610e8857610dc6906108a8565b91610dd8610b1e610acb858486610a45565b925f9260ff851694608086105f14610e095750505050505b03610dfa57600190565b6355e97b0d60e01b5f5260045ffd5b90919293946080145f14610e225750505050505f610df0565b610b2e610e3191939293610a64565b915f935b838510610e46575050505050610df0565b9091929394610e5760019160081b90565b610e7c610b2e610b1e610acb610e758b610e708b61089a565b6108c4565b8789610a45565b17950193929190610e35565b63c0ee95bb60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b9092610eb560019187876110b1565b930190610d81565b60ff6001610d76565b509050610ed9610b1e610acb8585610a37565b6001919060ff16808303610ef05750600491610d23565b600203610eff57600591610d23565b636fc3daa360e11b5f5260045ffd5b50608060ff610f23610b1e610acb8989610a37565b1610610d1e565b6005545f5481018091116104e55760015481018091116104e5575f808080936003546001600160601b0360a01b8116600355826005558260045561ff0019600754166007558260015582805560018060a01b03165af1610f8861085c565b501561059157565b336001600160601b0360a01b600354161760035561012c42018042116104e557600455600555565b610fc06108d1565b610fe0576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116104e55790565b61100b82826113f3565b915f5b6008811061109c5750611028610b1e610acb858486610a45565b925f9260ff851694608086105f1461104257505050505090565b6110539193949550610b2e90610a64565b915f935b83851061106657505050505090565b909192939461107760019160081b90565b611090610b2e610b1e610acb610e758b610e708b61089a565b17950193929190611057565b926110aa60019183856110b1565b930161100e565b91908082101561120c576110cc610b1e610acb848487610a45565b9060ff821660808110156110e757505050610bdb915061089a565b91929160b881101561110f575050610bdb9250610b2e611109610b349261089a565b92610a64565b90929060c08110156111855750610b2e61112b91949394610a8a565b915f935f915b84831061114c57505050610bdb9291610e70610e709261089a565b90919461115b60019160081b90565b61117b610b2e610b1e610acb6111748b610e708b61089a565b8888610a45565b1795019190611131565b90929060f811156111ab5750610bdb9250610b2e6111a5610b349261089a565b92610a77565b9291610b2e6111b991610a51565b915f935f915b8483106111da57505050610bdb9291610e70610e709261089a565b9091946111e960019160081b90565b611202610b2e610b1e610acb6111748b610e708b61089a565b17950191906111bf565b6318d76ae160e11b5f5260045ffd5b805115610a405760200190565b908151811015610a40570160200190565b919390929190600360fe1b6001600160f81b031961125a610acb8689610a37565b16106113e457601f60fb1b6001600160f81b031961127b610acb8689610a37565b16106113da5761129f61129a610b2e610b24610b1e610acb888b610a37565b6108b6565b9492905b945f5b8282106112b857505050505050505f90565b6112d66112cf836112ca36878a610913565b611550565b90936108c4565b96825160208401200361137857600360fe1b6113126113056112f78561121b565b516001600160f81b03191690565b6001600160f81b03191690565b10611378578590846001601f60fb1b6113306113056112f78861121b565b10156113bc575b61134181866116f7565b60118103611383575061135394611882565b94911561137857841561136c5793915b919590936112a6565b50505050505050600190565b505050505050505f90565b9093506002141590506113b05784879261139c9461173c565b94911561137857841561136c579391611363565b50505050505050505f90565b506113d561129a610b2e610b24610b1e6112f78961121b565b611337565b60019492906112a3565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b031961140f610acb8686610a37565b1610610ba857601f60fb1b6001600160f81b0319611430610acb8686610a37565b16106115025780610b34610b2e610b29610b24610b1e610acb611454978a8a610a45565b905b61a5bd461480156114f7575b61146d575b50905090565b5f5b600381106114e25750600360fe1b61148e611305610acb858786610a45565b10610ba857601f60fb1b6114a9611305610acb858786610a45565b106114d257610b2e610b29610b24610b1e610acb866114cb98610b3497610a45565b805f611467565b506114dd915061089a565b6114cb565b916114f060019185846110b1565b920161146f565b5061a5bf4614611462565b50600190611456565b60409061151782610815565b6001815291601f1901366020840137565b9061153561087083610840565b8281528092611546601f1991610840565b0190602036910137565b805182101561120c57611569610b1e6112f78484611228565b9160ff831660808110156115a25750505061158261150b565b9060f81b6001600160f81b0319165f1a61159b8261121b565b5390600190565b919392909160b881101561160c5750610b2e6115bd91610a64565b906115c782611528565b935f5b8381106115dd57505050610bdb906108b6565b806115f96112f76115f3600194610e708861089a565b85611228565b5f1a6116058289611228565b53016115ca565b60c011156116aa57610b2e61162091610a8a565b5f915f5b82811061167c575061163583611528565b945f5b84811061164f5750505090610e70610bdb926108b6565b806116696112f76115f3600194610e7089610e708a61089a565b5f1a611675828a611228565b5301611638565b9260019060081b6116a2610b2e610b1e6112f761169c89610e708961089a565b8b611228565b179301611624565b50916116b68382611997565b926116c084611528565b915f5b8581106116d1575050509190565b806116e46112f76115f3600194876108c4565b5f1a6116f08287611228565b53016116c3565b5f92915b81518110156117225761170e8183611997565b81018091116104e5576001909301926116fb565b5050565b908160011b91808304600214901517156104e557565b8394929161174a8183611550565b93906117696020611760610b1e6112f78561121b565b16151591611ac4565b9788911561180b575061177d9051876108c4565b6117878251611726565b1461179c575b505050505050505f905f905f90565b868660019282516117f9575b5050506117b6575b8061178d565b6117c9926117c3916108c4565b90611550565b50602081519101209060208151910120146117e757808080806117b0565b6117f29151906108c4565b6001915f90565b6118039350611c2f565b86865f6117a8565b61181c939495965061026792611c2f565b6118755761182d926117c3916108c4565b50908151602081145f146118555750602061184d920151925b51906108c4565b916001929190565b801561186957602061184d93012092611846565b505050505f905f905f90565b50505050505f905f905f90565b919092936118908251611726565b85101561193a5750610b1e6112f76118b2926118ac8760011c90565b90611228565b600184166119315760041c600f16915b905f925b60ff8116841061191157506118db9250611550565b50805180156119065761184d91602082036118fc576020915001519161089a565b602001209161089a565b5050505f905f905f90565b9091600161192582610b3460ff9487611997565b940193929190506118c6565b600f16916118c2565b9290509392935f915b6010831061197d576119559250611550565b50602081519101209060208151910120145f1461197457600191905f90565b5f915081908190565b9061198e81610b3460019385611997565b92019190611943565b90815181101561120c576119b1610b1e6112f78385611228565b9160ff831660808110156119c85750505050600190565b60b88110156119e357505050610b2e610b29610bdb92610a64565b60c0811015611a4f575091610b2e6119fa91610a8a565b905f925f915b838310611a175750505090610e70610bdb926108b6565b909193611a2660019160081b90565b611a45610b2e610b1e6112f7611a3f8a610e708961089a565b88611228565b1794019190611a00565b60f81115611a68575050610b2e610b29610bdb92610a77565b91610b2e611a7591610a51565b905f925f915b838310611a925750505090610e70610bdb926108b6565b909193611aa160019160081b90565b611aba610b2e610b1e6112f7611a3f8a610e708961089a565b1794019190611a7b565b90815115611c2d57611adb610b1e6112f78461121b565b6010811615611baa57611afe611af9611af48551611726565b6108f8565b611528565b9060f81b600f60f81b165f1a611b138261121b565b5360015b8351811015611ba55780611b52611b42611b39610b1e6112f76001968a611228565b60041c600f1690565b60f81b6001600160f81b03191690565b611b6b611b61611af484611726565b915f1a9185611228565b53611b92600f611b81610b1e6112f7858a611228565b1660f81b6001600160f81b03191690565b611b9e611b6183611726565b5301611b17565b509150565b50611bc0611af9611bbb8451611726565b6108e9565b60015b8351811015611ba55780611be5611b42611b39610b1e6112f76001968a611228565b611bf9611b61611bf4846108f8565b611726565b53611c0f600f611b81610b1e6112f7858a611228565b611c26611b61611c21611bf4856108f8565b61089a565b5301611bc3565b565b919091611c3d8251846108c4565b611c478251611726565b10611ce6575f5b8251811015611cdd57611c6a611c6482866108c4565b60011690565b611cbf57611c93611b39610b1e6112f7611c8d611c87868a6108c4565b60011c90565b86611228565b60ff611ca8610b2e610b1e6112f78689611228565b911603611cb757600101611c4e565b505050505f90565b600f611cd7610b1e6112f7611c8d611c87868a6108c4565b16611c93565b50505050600190565b5050505f9056fea2646970667358221220f4598e927f93dbeaa4a20f290936343400629961d598e1f51e8a971f4c36efcc64736f6c634300081e0033 +0x60a0601f611c4c38819003918201601f19168301916001600160401b038311848410176100905780849260209460405283398101031261008c57513360805234610071575b604051611ba790816100a58239608051818181610116015281816102b50152818161037701526105780152f35b345f5560015561010061ff001960055416176005555f610044565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101045780631303a484146100ff5780631aa7c0ec146100fa578063308657d7146100f557806333ee5f35146100f05780633d2691bc146100eb57806364c9ec6f146100e65780636b892b22146100e157806380f323a7146100dc57806381972d00146100d7578063b39c1d4d146100d2578063bf14c119146100cd578063cb766a56146100c8578063d0e30db0146100c35763f3a504f2146100be575f80fd5b61062f565b610613565b6105ef565b610567565b6103b4565b610365565b610348565b61028b565b610203565b6101e7565b6101ca565b6101a8565b610180565b610163565b3461015f575f36600319011261015f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610150576005805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461015f575f36600319011261015f576020600154604051908152f35b3461015f575f36600319011261015f576002546040516001600160a01b039091168152602090f35b3461015f575f36600319011261015f57602060ff600554166040519015158152f35b3461015f575f36600319011261015f576020600354604051908152f35b3461015f575f36600319011261015f5760206040516101008152f35b5f36600319011261015f57610216610775565b60055460ff8160081c161561027c5760ff1661026d5761023461070d565b61025e576101905f5404341061024f5761024d346107ae565b005b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b3461015f575f36600319011261015f5760ff6001811960055416178060055560081c161561027c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610150576102eb610775565b6102f36107d6565b5f548015610339575f8080809361031761ff0019600554166005555f80555f600155565b335af16103226106ab565b501561032a57005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461015f575f36600319011261015f576020600454604051908152f35b3461015f575f36600319011261015f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610150576005805460ff19166001179055005b3461015f57606036600319011261015f5760043567ffffffffffffffff811161015f57806004019060c0600319823603011261015f57604435906104046103fb84806106da565b6024359161086d565b61041761041184806106da565b906109dd565b602482019161045861045461042c85886106da565b61043c604486979397018a6106da565b60a48701979161044c898d6106da565b949093610ae6565b1590565b610558576104546104a191608461047861047289806106da565b90610b0d565b9161044c606482019661049861048e898d6106da565b959094018c6106da565b9290918c6106da565b610549576104546104b56104bb92866106da565b90610b6e565b61053a576104cf6104d591610518946106da565b90610c3e565b61050a60409492945193849260208401968791605493916001600160601b03199060601b168352601483015260348201520190565b03601f198101835282610668565b5190206001540361052b5761024d610e1e565b635054097b60e01b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b602036600319011261015f576004357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101505760055460ff8160081c166105e05734156105d157345f5560019190915561ff00191661010017600555005b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461015f575f36600319011261015f57602061060961070d565b6040519015158152f35b3461015f575f36600319011261015f5760205f54604051908152f35b3461015f575f36600319011261015f57602060ff60055460081c166040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761068a57604052565b610654565b67ffffffffffffffff811161068a57601f01601f191660200190565b3d156106d5573d906106bc8261068f565b916106ca6040519384610668565b82523d5f602084013e565b606090565b903590601e198136030182121561015f570180359067ffffffffffffffff821161015f5760200191813603831361015f57565b600354801515908161071d575090565b905042111590565b634e487b7160e01b5f52601160045260245ffd5b906001820180921161074757565b610725565b906015820180921161074757565b600101908160011161074757565b9190820180921161074757565b60035480151590816107a4575b5061078957565b6004545f54908101809111610747575f556107a26107d6565b565b905042115f610782565b336001600160601b0360a01b600254161760025561012c420180421161074757600355600455565b6107de61070d565b6107fe576001600160601b0360a01b600254166002555f6004555f600355565b639cbc1de160e01b5f5260045ffd5b60011981019190821161074757565b5f1981019190821161074757565b9190820391821161074757565b9291926108438261068f565b916108516040519384610668565b82948184528183011161015f578281602093845f960137010152565b9061088161045460055460ff9060081c1690565b61027c576002546001600160a01b03163314801590610941575b61093257438311610923576101006108b3844361082a565b116109145782408015610905576108cb368385610837565b60208151910120036108f6576108e091610e78565b036108e757565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b5061094d61045461070d565b61089b565b634e487b7160e01b5f52603260045260245ffd5b901561096f5790565b610952565b9082101561096f570190565b60ff60f6199116019060ff821161074757565b60ff607f199116019060ff821161074757565b60ff60bf199116019060ff821161074757565b60ff60b6199116019060ff821161074757565b60ff166001019060ff821161074757565b905f600360fe1b6001600160f81b0319610a086109fa8587610966565b356001600160f81b03191690565b1610610ad757601f60fb1b6001600160f81b0319610a296109fa8587610966565b1610610ace5780610a63610a5d610a58610a53610a4d6109fa610a6997898b610974565b60f81c90565b610980565b6109cc565b60ff1690565b90610768565b905b5f5b60048110610ab95750600560fd1b906001600160f81b031990610a96906109fa90859087610974565b1603610aaa57610aa590610739565b013590565b633954003560e11b5f5260045ffd5b91610ac76001918386610f28565b9201610a6d565b50600190610a6b565b63c0098bd960e01b5f5260045ffd5b610afc610b0492939495610b0a98973691610837565b923691610837565b906110b0565b90565b90610b18818361126a565b905f5b60058110610b595750600560fd1b906001600160f81b031990610b4090849086610974565b351603610aaa5760018101811161074757016001013590565b91610b676001918386610f28565b9201610b1b565b5f9082151580610c22575b610c19575b60c060ff610b93610a4d6109fa868887610974565b1610610c0a57610a4d6109fa82858560f860ff610bbd610a4d6109fa839b60019d610be79c610974565b1610610c015780610a63610a5d610a58610a53610a4d6109fa610be197898b610974565b91610974565b1603610bf257600190565b63e9dd8a9d60e01b5f5260045ffd5b610be190610739565b631bd5dcf760e31b5f5260045ffd5b60019150610b7e565b50608060ff610c37610a4d6109fa8786610966565b1610610b79565b600392915f908181151580610e02575b610dba575b60c060ff610c68610a4d6109fa85878a610974565b1610610c0a578060f860ff610c87610a4d6109fa610cad96888b610974565b1610610db15760ff610ca6610a58610a53610a4d6109fa86898c610974565b1690610768565b945f905b808210610d9a575050609460ff610ccf610a4d6109fa898689610974565b1603610d8b57610ce86001868501013560601c9561074c565b610cf9610a4d6109fa838588610974565b60ff811694906080861015610d1057505050505090565b9091929395946080145f14610d2857505f9450505050565b610a5d610d3791939293610993565b915f935b838510610d49575050505050565b9091929395610d5a60019160081b90565b610d7f610a5d610a4d6109fa610d788c610d738b610739565b610768565b8789610974565b17960193929190610d3b565b63e6c4247b60e01b5f5260045ffd5b9095610da96001918487610f28565b960190610cb1565b60ff6001610ca6565b509350610dcd610a4d6109fa8685610966565b6001949060ff16808603610de45750600494610c53565b600203610df357600594610c53565b636fc3daa360e11b5f5260045ffd5b50608060ff610e17610a4d6109fa8689610966565b1610610c4e565b6004545f548101809111610747575f808080936002546001600160601b0360a01b8116600255826004558260035561ff0019600554166005558280558260015560018060a01b03165af1610e706106ab565b501561032a57565b610e82828261126a565b915f5b60088110610f135750610e9f610a4d6109fa858486610974565b925f9260ff851694608086105f14610eb957505050505090565b610eca9193949550610a5d90610993565b915f935b838510610edd57505050505090565b9091929394610eee60019160081b90565b610f07610a5d610a4d6109fa610d788b610d738b610739565b17950193929190610ece565b92610f216001918385610f28565b9301610e85565b91908082101561108357610f43610a4d6109fa848487610974565b9060ff82166080811015610f5e57505050610b0a9150610739565b91929160b8811015610f86575050610b0a9250610a5d610f80610a6392610739565b92610993565b90929060c0811015610ffc5750610a5d610fa2919493946109b9565b915f935f915b848310610fc357505050610b0a9291610d73610d7392610739565b909194610fd260019160081b90565b610ff2610a5d610a4d6109fa610feb8b610d738b610739565b8888610974565b1795019190610fa8565b90929060f811156110225750610b0a9250610a5d61101c610a6392610739565b926109a6565b9291610a5d61103091610980565b915f935f915b84831061105157505050610b0a9291610d73610d7392610739565b90919461106060019160081b90565b611079610a5d610a4d6109fa610feb8b610d738b610739565b1795019190611036565b6318d76ae160e11b5f5260045ffd5b80511561096f5760200190565b90815181101561096f570160200190565b919390929190600360fe1b6001600160f81b03196110d16109fa8689610966565b161061125b57601f60fb1b6001600160f81b03196110f26109fa8689610966565b161061125157611116611111610a5d610a53610a4d6109fa888b610966565b61075a565b9492905b945f5b82821061112f57505050505050505f90565b61114d6111468361114136878a610837565b6113d6565b9093610768565b9682516020840120036111ef57600360fe1b61118961117c61116e85611092565b516001600160f81b03191690565b6001600160f81b03191690565b106111ef578590846001601f60fb1b6111a761117c61116e88611092565b1015611233575b6111b8818661157d565b601181036111fa57506111ca94611708565b9491156111ef5784156111e35793915b9195909361111d565b50505050505050600190565b505050505050505f90565b90935060021415905061122757848792611213946115c2565b9491156111ef5784156111e35793916111da565b50505050505050505f90565b5061124c611111610a5d610a53610a4d61116e89611092565b6111ae565b600194929061111a565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b03196112866109fa8686610966565b1610610ad757601f60fb1b6001600160f81b03196112a76109fa8686610966565b16106113795780610a63610a5d610a58610a53610a4d6109fa6112cb978a8a610974565b905b61a5bd4614801561136e575b6112e4575b50905090565b5f5b600381106113595750600360fe1b61130561117c6109fa858786610974565b10610ad757601f60fb1b61132061117c6109fa858786610974565b1061134957610a5d610a58610a53610a4d6109fa8661134298610a6397610974565b805f6112de565b506113549150610739565b611342565b916113676001918584610f28565b92016112e6565b5061a5bf46146112d9565b506001906112cd565b604080519091906113938382610668565b6001815291601f1901366020840137565b906113ae8261068f565b6113bb6040519182610668565b82815280926113cc601f199161068f565b0190602036910137565b8051821015611083576113ef610a4d61116e848461109f565b9160ff8316608081101561142857505050611408611382565b9060f81b6001600160f81b0319165f1a61142182611092565b5390600190565b919392909160b88110156114925750610a5d61144391610993565b9061144d826113a4565b935f5b83811061146357505050610b0a9061075a565b8061147f61116e611479600194610d7388610739565b8561109f565b5f1a61148b828961109f565b5301611450565b60c0111561153057610a5d6114a6916109b9565b5f915f5b82811061150257506114bb836113a4565b945f5b8481106114d55750505090610d73610b0a9261075a565b806114ef61116e611479600194610d7389610d738a610739565b5f1a6114fb828a61109f565b53016114be565b9260019060081b611528610a5d610a4d61116e61152289610d7389610739565b8b61109f565b1793016114aa565b509161153c838261181d565b92611546846113a4565b915f5b858110611557575050509190565b8061156a61116e61147960019487610768565b5f1a611576828761109f565b5301611549565b5f92915b81518110156115a857611594818361181d565b810180911161074757600190930192611581565b5050565b908160011b918083046002149015171561074757565b839492916115d081836113d6565b93906115ef60206115e6610a4d61116e85611092565b1615159161194a565b978891156116915750611603905187610768565b61160d82516115ac565b14611622575b505050505050505f905f905f90565b8686600192825161167f575b50505061163c575b80611613565b61164f9261164991610768565b906113d6565b506020815191012090602081519101201461166d5780808080611636565b611678915190610768565b6001915f90565b6116899350611ab3565b86865f61162e565b6116a2939495965061045492611ab3565b6116fb576116b39261164991610768565b50908151602081145f146116db575060206116d3920151925b5190610768565b916001929190565b80156116ef5760206116d3930120926116cc565b505050505f905f905f90565b50505050505f905f905f90565b9190929361171682516115ac565b8510156117c05750610a4d61116e611738926117328760011c90565b9061109f565b600184166117b75760041c600f16915b905f925b60ff81168410611797575061176192506113d6565b508051801561178c576116d391602082036117825760209150015191610739565b6020012091610739565b5050505f905f905f90565b909160016117ab82610a6360ff948761181d565b9401939291905061174c565b600f1691611748565b9290509392935f915b60108310611803576117db92506113d6565b50602081519101209060208151910120145f146117fa57600191905f90565b5f915081908190565b9061181481610a636001938561181d565b920191906117c9565b90815181101561108357611837610a4d61116e838561109f565b9160ff8316608081101561184e5750505050600190565b60b881101561186957505050610a5d610a58610b0a92610993565b60c08110156118d5575091610a5d611880916109b9565b905f925f915b83831061189d5750505090610d73610b0a9261075a565b9091936118ac60019160081b90565b6118cb610a5d610a4d61116e6118c58a610d7389610739565b8861109f565b1794019190611886565b60f811156118ee575050610a5d610a58610b0a926109a6565b91610a5d6118fb91610980565b905f925f915b8383106119185750505090610d73610b0a9261075a565b90919361192760019160081b90565b611940610a5d610a4d61116e6118c58a610d7389610739565b1794019190611901565b908151156107a257611961610a4d61116e84611092565b6010811615611a305761198461197f61197a85516115ac565b61081c565b6113a4565b9060f81b600f60f81b165f1a61199982611092565b5360015b8351811015611a2b57806119d86119c86119bf610a4d61116e6001968a61109f565b60041c600f1690565b60f81b6001600160f81b03191690565b6119f16119e761197a846115ac565b915f1a918561109f565b53611a18600f611a07610a4d61116e858a61109f565b1660f81b6001600160f81b03191690565b611a246119e7836115ac565b530161199d565b509150565b50611a4661197f611a4184516115ac565b61080d565b60015b8351811015611a2b5780611a6b6119c86119bf610a4d61116e6001968a61109f565b611a7f6119e7611a7a8461081c565b6115ac565b53611a95600f611a07610a4d61116e858a61109f565b611aac6119e7611aa7611a7a8561081c565b610739565b5301611a49565b919091611ac1825184610768565b611acb82516115ac565b10611b6a575f5b8251811015611b6157611aee611ae88286610768565b60011690565b611b4357611b176119bf610a4d61116e611b11611b0b868a610768565b60011c90565b8661109f565b60ff611b2c610a5d610a4d61116e868961109f565b911603611b3b57600101611ad2565b505050505f90565b600f611b5b610a4d61116e611b11611b0b868a610768565b16611b17565b50505050600190565b5050505f9056fea26469706673582212200914e236ea078015a495fd5f55d81429d19af970cf92b088baaf3804798be75764736f6c634300081e0033 diff --git a/artifacts/native_runtime.hex b/artifacts/native_runtime.hex index 365a03d..bcfc844 100644 --- a/artifacts/native_runtime.hex +++ b/artifacts/native_runtime.hex @@ -1 +1 @@ -0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101445780631aa7c0ec1461013f57806323a8b41a1461013a5780632feef2ec14610135578063308657d71461013057806333ee5f351461012b5780633d2691bc146101265780635a4fd6451461012157806364c9ec6f1461011c5780636b892b221461011757806380f323a71461011257806381972d001461010d5780638677ab23146101085780638bd03d0a14610103578063a65e2cfd146100fe578063cb766a56146100f9578063d415b3f9146100f4578063f3a504f2146100ef5763fe03a460146100ea575f80fd5b6107b1565b61078c565b61076f565b61074b565b61067c565b61065f565b61061b565b6105cc565b6105af565b6104f4565b610427565b61040b565b6103ef565b6103d2565b6103b0565b610376565b6101cb565b6101a3565b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461019f575f36600319011261019f576003546040516001600160a01b039091168152602090f35b3461019f57604036600319011261019f5760043567ffffffffffffffff811161019f57806004019060c0600319823603011261019f5761021760243561021184806107ce565b9061093e565b61022a61022483806107ce565b90610aae565b602482019161026b61026761023f85876107ce565b61024f60448697939701896107ce565b60a48701979161025f898c6107ce565b949093610bb7565b1590565b610367576102676102b491608461028b61028588806107ce565b90610bde565b9161025f60648201966102ab6102a1898c6107ce565b959094018b6107ce565b9290918b6107ce565b610358576102676102c86102ce92856107ce565b90610c3f565b610349576102e26102679161032c936107ce565b907f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091610d0f565b61033a57610338610f2a565b005b633cff557560e11b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b3461019f575f36600319011261019f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461019f575f36600319011261019f57602060ff600754166040519015158152f35b3461019f575f36600319011261019f576020600454604051908152f35b3461019f575f36600319011261019f5760206040516101008152f35b3461019f575f36600319011261019f5760205f54604051908152f35b5f36600319011261019f5760045480151590816104ea575b506104b7575b60075460ff8160081c16156104a85760ff16610499576104636108d1565b61048a575f5460011c341061047b5761033834610f90565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b6005545f548181018091116104e5575f556006549081018091116104e5576006556104e0610fb8565b610445565b610886565b905042115f61043f565b3461019f575f36600319011261019f5760ff6001811960075416178060075560081c16156104a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361019057610554610fb8565b61055c610fef565b61057361ff0019600754166007555f6001555f8055565b80156105a0575f80808093335af161058961085c565b501561059157005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461019f575f36600319011261019f576020600554604051908152f35b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19166001179055005b3461019f575f36600319011261019f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461019f575f36600319011261019f576020600154604051908152f35b604036600319011261019f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101905760075460081c60ff1661073c57811561072d57801561071e576106e181836108c4565b340361070f576106f6826106fb935f55600255565b600155565b61033861010061ff00196007541617600755565b63201c04ab60e01b5f5260045ffd5b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461019f575f36600319011261019f5760206107656108d1565b6040519015158152f35b3461019f575f36600319011261019f576020600254604051908152f35b3461019f575f36600319011261019f57602060ff60075460081c166040519015158152f35b3461019f575f36600319011261019f576020600654604051908152f35b903590601e198136030182121561019f570180359067ffffffffffffffff821161019f5760200191813603831361019f57565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff81118382101761083b57604052565b610801565b67ffffffffffffffff811161083b57601f01601f191660200190565b3d15610881573d9061087561087083610840565b610815565b9182523d5f602084013e565b606090565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116104e557565b90601582018092116104e557565b60010190816001116104e557565b919082018092116104e557565b60045480151590816108e1575090565b905042111590565b6001198101919082116104e557565b5f198101919082116104e557565b919082039182116104e557565b92919261092261087083610840565b938285528282011161019f57815f926020928387013784010152565b9061095261026760075460ff9060081c1690565b6104a8576003546001600160a01b03163314801590610a12575b610a03574383116109f4576101006109848443610906565b116109e557824080156109d65761099c368385610913565b60208151910120036109c7576109b191611001565b036109b857565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610a1e6102676108d1565b61096c565b634e487b7160e01b5f52603260045260245ffd5b9015610a405790565b610a23565b90821015610a40570190565b60ff60f6199116019060ff82116104e557565b60ff607f199116019060ff82116104e557565b60ff60bf199116019060ff82116104e557565b60ff60b6199116019060ff82116104e557565b60ff166001019060ff82116104e557565b905f600360fe1b6001600160f81b0319610ad9610acb8587610a37565b356001600160f81b03191690565b1610610ba857601f60fb1b6001600160f81b0319610afa610acb8587610a37565b1610610b9f5780610b34610b2e610b29610b24610b1e610acb610b3a97898b610a45565b60f81c90565b610a51565b610a9d565b60ff1690565b906108c4565b905b5f5b60048110610b8a5750600560fd1b906001600160f81b031990610b6790610acb90859087610a45565b1603610b7b57610b769061089a565b013590565b633954003560e11b5f5260045ffd5b91610b9860019183866110b1565b9201610b3e565b50600190610b3c565b63c0098bd960e01b5f5260045ffd5b610bcd610bd592939495610bdb98973691610913565b923691610913565b90611239565b90565b90610be981836113f3565b905f5b60058110610c2a5750600560fd1b906001600160f81b031990610c1190849086610a45565b351603610b7b576001810181116104e557016001013590565b91610c3860019183866110b1565b9201610bec565b5f9082151580610cf3575b610cea575b60c060ff610c64610b1e610acb868887610a45565b1610610cdb57610b1e610acb82858560f860ff610c8e610b1e610acb839b60019d610cb89c610a45565b1610610cd25780610b34610b2e610b29610b24610b1e610acb610cb297898b610a45565b91610a45565b1603610cc357600190565b63e9dd8a9d60e01b5f5260045ffd5b610cb29061089a565b631bd5dcf760e31b5f5260045ffd5b60019150610c4f565b50608060ff610d08610b1e610acb8786610a37565b1610610c4a565b90916003905f84151580610f0e575b610ec6575b60c060ff610d38610b1e610acb858a8a610a45565b1610610cdb578060f860ff610d57610b1e610acb610d7d968b8b610a45565b1610610ebd5760ff610d76610b29610b24610b1e610acb868c8c610a45565b16906108c4565b915f905b808210610ea6575050609460ff610d9f610b1e610acb868989610a45565b1603610e97576001600160a01b03168282016001013560601c03610e8857610dc6906108a8565b91610dd8610b1e610acb858486610a45565b925f9260ff851694608086105f14610e095750505050505b03610dfa57600190565b6355e97b0d60e01b5f5260045ffd5b90919293946080145f14610e225750505050505f610df0565b610b2e610e3191939293610a64565b915f935b838510610e46575050505050610df0565b9091929394610e5760019160081b90565b610e7c610b2e610b1e610acb610e758b610e708b61089a565b6108c4565b8789610a45565b17950193929190610e35565b63c0ee95bb60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b9092610eb560019187876110b1565b930190610d81565b60ff6001610d76565b509050610ed9610b1e610acb8585610a37565b6001919060ff16808303610ef05750600491610d23565b600203610eff57600591610d23565b636fc3daa360e11b5f5260045ffd5b50608060ff610f23610b1e610acb8989610a37565b1610610d1e565b6005545f5481018091116104e55760015481018091116104e5575f808080936003546001600160601b0360a01b8116600355826005558260045561ff0019600754166007558260015582805560018060a01b03165af1610f8861085c565b501561059157565b336001600160601b0360a01b600354161760035561012c42018042116104e557600455600555565b610fc06108d1565b610fe0576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116104e55790565b61100b82826113f3565b915f5b6008811061109c5750611028610b1e610acb858486610a45565b925f9260ff851694608086105f1461104257505050505090565b6110539193949550610b2e90610a64565b915f935b83851061106657505050505090565b909192939461107760019160081b90565b611090610b2e610b1e610acb610e758b610e708b61089a565b17950193929190611057565b926110aa60019183856110b1565b930161100e565b91908082101561120c576110cc610b1e610acb848487610a45565b9060ff821660808110156110e757505050610bdb915061089a565b91929160b881101561110f575050610bdb9250610b2e611109610b349261089a565b92610a64565b90929060c08110156111855750610b2e61112b91949394610a8a565b915f935f915b84831061114c57505050610bdb9291610e70610e709261089a565b90919461115b60019160081b90565b61117b610b2e610b1e610acb6111748b610e708b61089a565b8888610a45565b1795019190611131565b90929060f811156111ab5750610bdb9250610b2e6111a5610b349261089a565b92610a77565b9291610b2e6111b991610a51565b915f935f915b8483106111da57505050610bdb9291610e70610e709261089a565b9091946111e960019160081b90565b611202610b2e610b1e610acb6111748b610e708b61089a565b17950191906111bf565b6318d76ae160e11b5f5260045ffd5b805115610a405760200190565b908151811015610a40570160200190565b919390929190600360fe1b6001600160f81b031961125a610acb8689610a37565b16106113e457601f60fb1b6001600160f81b031961127b610acb8689610a37565b16106113da5761129f61129a610b2e610b24610b1e610acb888b610a37565b6108b6565b9492905b945f5b8282106112b857505050505050505f90565b6112d66112cf836112ca36878a610913565b611550565b90936108c4565b96825160208401200361137857600360fe1b6113126113056112f78561121b565b516001600160f81b03191690565b6001600160f81b03191690565b10611378578590846001601f60fb1b6113306113056112f78861121b565b10156113bc575b61134181866116f7565b60118103611383575061135394611882565b94911561137857841561136c5793915b919590936112a6565b50505050505050600190565b505050505050505f90565b9093506002141590506113b05784879261139c9461173c565b94911561137857841561136c579391611363565b50505050505050505f90565b506113d561129a610b2e610b24610b1e6112f78961121b565b611337565b60019492906112a3565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b031961140f610acb8686610a37565b1610610ba857601f60fb1b6001600160f81b0319611430610acb8686610a37565b16106115025780610b34610b2e610b29610b24610b1e610acb611454978a8a610a45565b905b61a5bd461480156114f7575b61146d575b50905090565b5f5b600381106114e25750600360fe1b61148e611305610acb858786610a45565b10610ba857601f60fb1b6114a9611305610acb858786610a45565b106114d257610b2e610b29610b24610b1e610acb866114cb98610b3497610a45565b805f611467565b506114dd915061089a565b6114cb565b916114f060019185846110b1565b920161146f565b5061a5bf4614611462565b50600190611456565b60409061151782610815565b6001815291601f1901366020840137565b9061153561087083610840565b8281528092611546601f1991610840565b0190602036910137565b805182101561120c57611569610b1e6112f78484611228565b9160ff831660808110156115a25750505061158261150b565b9060f81b6001600160f81b0319165f1a61159b8261121b565b5390600190565b919392909160b881101561160c5750610b2e6115bd91610a64565b906115c782611528565b935f5b8381106115dd57505050610bdb906108b6565b806115f96112f76115f3600194610e708861089a565b85611228565b5f1a6116058289611228565b53016115ca565b60c011156116aa57610b2e61162091610a8a565b5f915f5b82811061167c575061163583611528565b945f5b84811061164f5750505090610e70610bdb926108b6565b806116696112f76115f3600194610e7089610e708a61089a565b5f1a611675828a611228565b5301611638565b9260019060081b6116a2610b2e610b1e6112f761169c89610e708961089a565b8b611228565b179301611624565b50916116b68382611997565b926116c084611528565b915f5b8581106116d1575050509190565b806116e46112f76115f3600194876108c4565b5f1a6116f08287611228565b53016116c3565b5f92915b81518110156117225761170e8183611997565b81018091116104e5576001909301926116fb565b5050565b908160011b91808304600214901517156104e557565b8394929161174a8183611550565b93906117696020611760610b1e6112f78561121b565b16151591611ac4565b9788911561180b575061177d9051876108c4565b6117878251611726565b1461179c575b505050505050505f905f905f90565b868660019282516117f9575b5050506117b6575b8061178d565b6117c9926117c3916108c4565b90611550565b50602081519101209060208151910120146117e757808080806117b0565b6117f29151906108c4565b6001915f90565b6118039350611c2f565b86865f6117a8565b61181c939495965061026792611c2f565b6118755761182d926117c3916108c4565b50908151602081145f146118555750602061184d920151925b51906108c4565b916001929190565b801561186957602061184d93012092611846565b505050505f905f905f90565b50505050505f905f905f90565b919092936118908251611726565b85101561193a5750610b1e6112f76118b2926118ac8760011c90565b90611228565b600184166119315760041c600f16915b905f925b60ff8116841061191157506118db9250611550565b50805180156119065761184d91602082036118fc576020915001519161089a565b602001209161089a565b5050505f905f905f90565b9091600161192582610b3460ff9487611997565b940193929190506118c6565b600f16916118c2565b9290509392935f915b6010831061197d576119559250611550565b50602081519101209060208151910120145f1461197457600191905f90565b5f915081908190565b9061198e81610b3460019385611997565b92019190611943565b90815181101561120c576119b1610b1e6112f78385611228565b9160ff831660808110156119c85750505050600190565b60b88110156119e357505050610b2e610b29610bdb92610a64565b60c0811015611a4f575091610b2e6119fa91610a8a565b905f925f915b838310611a175750505090610e70610bdb926108b6565b909193611a2660019160081b90565b611a45610b2e610b1e6112f7611a3f8a610e708961089a565b88611228565b1794019190611a00565b60f81115611a68575050610b2e610b29610bdb92610a77565b91610b2e611a7591610a51565b905f925f915b838310611a925750505090610e70610bdb926108b6565b909193611aa160019160081b90565b611aba610b2e610b1e6112f7611a3f8a610e708961089a565b1794019190611a7b565b90815115611c2d57611adb610b1e6112f78461121b565b6010811615611baa57611afe611af9611af48551611726565b6108f8565b611528565b9060f81b600f60f81b165f1a611b138261121b565b5360015b8351811015611ba55780611b52611b42611b39610b1e6112f76001968a611228565b60041c600f1690565b60f81b6001600160f81b03191690565b611b6b611b61611af484611726565b915f1a9185611228565b53611b92600f611b81610b1e6112f7858a611228565b1660f81b6001600160f81b03191690565b611b9e611b6183611726565b5301611b17565b509150565b50611bc0611af9611bbb8451611726565b6108e9565b60015b8351811015611ba55780611be5611b42611b39610b1e6112f76001968a611228565b611bf9611b61611bf4846108f8565b611726565b53611c0f600f611b81610b1e6112f7858a611228565b611c26611b61611c21611bf4856108f8565b61089a565b5301611bc3565b565b919091611c3d8251846108c4565b611c478251611726565b10611ce6575f5b8251811015611cdd57611c6a611c6482866108c4565b60011690565b611cbf57611c93611b39610b1e6112f7611c8d611c87868a6108c4565b60011c90565b86611228565b60ff611ca8610b2e610b1e6112f78689611228565b911603611cb757600101611c4e565b505050505f90565b600f611cd7610b1e6112f7611c8d611c87868a6108c4565b16611c93565b50505050600190565b5050505f9056fea2646970667358221220f4598e927f93dbeaa4a20f290936343400629961d598e1f51e8a971f4c36efcc64736f6c634300081e0033 +0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101045780631303a484146100ff5780631aa7c0ec146100fa578063308657d7146100f557806333ee5f35146100f05780633d2691bc146100eb57806364c9ec6f146100e65780636b892b22146100e157806380f323a7146100dc57806381972d00146100d7578063b39c1d4d146100d2578063bf14c119146100cd578063cb766a56146100c8578063d0e30db0146100c35763f3a504f2146100be575f80fd5b61062f565b610613565b6105ef565b610567565b6103b4565b610365565b610348565b61028b565b610203565b6101e7565b6101ca565b6101a8565b610180565b610163565b3461015f575f36600319011261015f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610150576005805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461015f575f36600319011261015f576020600154604051908152f35b3461015f575f36600319011261015f576002546040516001600160a01b039091168152602090f35b3461015f575f36600319011261015f57602060ff600554166040519015158152f35b3461015f575f36600319011261015f576020600354604051908152f35b3461015f575f36600319011261015f5760206040516101008152f35b5f36600319011261015f57610216610775565b60055460ff8160081c161561027c5760ff1661026d5761023461070d565b61025e576101905f5404341061024f5761024d346107ae565b005b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b3461015f575f36600319011261015f5760ff6001811960055416178060055560081c161561027c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610150576102eb610775565b6102f36107d6565b5f548015610339575f8080809361031761ff0019600554166005555f80555f600155565b335af16103226106ab565b501561032a57005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461015f575f36600319011261015f576020600454604051908152f35b3461015f575f36600319011261015f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610150576005805460ff19166001179055005b3461015f57606036600319011261015f5760043567ffffffffffffffff811161015f57806004019060c0600319823603011261015f57604435906104046103fb84806106da565b6024359161086d565b61041761041184806106da565b906109dd565b602482019161045861045461042c85886106da565b61043c604486979397018a6106da565b60a48701979161044c898d6106da565b949093610ae6565b1590565b610558576104546104a191608461047861047289806106da565b90610b0d565b9161044c606482019661049861048e898d6106da565b959094018c6106da565b9290918c6106da565b610549576104546104b56104bb92866106da565b90610b6e565b61053a576104cf6104d591610518946106da565b90610c3e565b61050a60409492945193849260208401968791605493916001600160601b03199060601b168352601483015260348201520190565b03601f198101835282610668565b5190206001540361052b5761024d610e1e565b635054097b60e01b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b602036600319011261015f576004357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101505760055460ff8160081c166105e05734156105d157345f5560019190915561ff00191661010017600555005b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461015f575f36600319011261015f57602061060961070d565b6040519015158152f35b3461015f575f36600319011261015f5760205f54604051908152f35b3461015f575f36600319011261015f57602060ff60055460081c166040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761068a57604052565b610654565b67ffffffffffffffff811161068a57601f01601f191660200190565b3d156106d5573d906106bc8261068f565b916106ca6040519384610668565b82523d5f602084013e565b606090565b903590601e198136030182121561015f570180359067ffffffffffffffff821161015f5760200191813603831361015f57565b600354801515908161071d575090565b905042111590565b634e487b7160e01b5f52601160045260245ffd5b906001820180921161074757565b610725565b906015820180921161074757565b600101908160011161074757565b9190820180921161074757565b60035480151590816107a4575b5061078957565b6004545f54908101809111610747575f556107a26107d6565b565b905042115f610782565b336001600160601b0360a01b600254161760025561012c420180421161074757600355600455565b6107de61070d565b6107fe576001600160601b0360a01b600254166002555f6004555f600355565b639cbc1de160e01b5f5260045ffd5b60011981019190821161074757565b5f1981019190821161074757565b9190820391821161074757565b9291926108438261068f565b916108516040519384610668565b82948184528183011161015f578281602093845f960137010152565b9061088161045460055460ff9060081c1690565b61027c576002546001600160a01b03163314801590610941575b61093257438311610923576101006108b3844361082a565b116109145782408015610905576108cb368385610837565b60208151910120036108f6576108e091610e78565b036108e757565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b5061094d61045461070d565b61089b565b634e487b7160e01b5f52603260045260245ffd5b901561096f5790565b610952565b9082101561096f570190565b60ff60f6199116019060ff821161074757565b60ff607f199116019060ff821161074757565b60ff60bf199116019060ff821161074757565b60ff60b6199116019060ff821161074757565b60ff166001019060ff821161074757565b905f600360fe1b6001600160f81b0319610a086109fa8587610966565b356001600160f81b03191690565b1610610ad757601f60fb1b6001600160f81b0319610a296109fa8587610966565b1610610ace5780610a63610a5d610a58610a53610a4d6109fa610a6997898b610974565b60f81c90565b610980565b6109cc565b60ff1690565b90610768565b905b5f5b60048110610ab95750600560fd1b906001600160f81b031990610a96906109fa90859087610974565b1603610aaa57610aa590610739565b013590565b633954003560e11b5f5260045ffd5b91610ac76001918386610f28565b9201610a6d565b50600190610a6b565b63c0098bd960e01b5f5260045ffd5b610afc610b0492939495610b0a98973691610837565b923691610837565b906110b0565b90565b90610b18818361126a565b905f5b60058110610b595750600560fd1b906001600160f81b031990610b4090849086610974565b351603610aaa5760018101811161074757016001013590565b91610b676001918386610f28565b9201610b1b565b5f9082151580610c22575b610c19575b60c060ff610b93610a4d6109fa868887610974565b1610610c0a57610a4d6109fa82858560f860ff610bbd610a4d6109fa839b60019d610be79c610974565b1610610c015780610a63610a5d610a58610a53610a4d6109fa610be197898b610974565b91610974565b1603610bf257600190565b63e9dd8a9d60e01b5f5260045ffd5b610be190610739565b631bd5dcf760e31b5f5260045ffd5b60019150610b7e565b50608060ff610c37610a4d6109fa8786610966565b1610610b79565b600392915f908181151580610e02575b610dba575b60c060ff610c68610a4d6109fa85878a610974565b1610610c0a578060f860ff610c87610a4d6109fa610cad96888b610974565b1610610db15760ff610ca6610a58610a53610a4d6109fa86898c610974565b1690610768565b945f905b808210610d9a575050609460ff610ccf610a4d6109fa898689610974565b1603610d8b57610ce86001868501013560601c9561074c565b610cf9610a4d6109fa838588610974565b60ff811694906080861015610d1057505050505090565b9091929395946080145f14610d2857505f9450505050565b610a5d610d3791939293610993565b915f935b838510610d49575050505050565b9091929395610d5a60019160081b90565b610d7f610a5d610a4d6109fa610d788c610d738b610739565b610768565b8789610974565b17960193929190610d3b565b63e6c4247b60e01b5f5260045ffd5b9095610da96001918487610f28565b960190610cb1565b60ff6001610ca6565b509350610dcd610a4d6109fa8685610966565b6001949060ff16808603610de45750600494610c53565b600203610df357600594610c53565b636fc3daa360e11b5f5260045ffd5b50608060ff610e17610a4d6109fa8689610966565b1610610c4e565b6004545f548101809111610747575f808080936002546001600160601b0360a01b8116600255826004558260035561ff0019600554166005558280558260015560018060a01b03165af1610e706106ab565b501561032a57565b610e82828261126a565b915f5b60088110610f135750610e9f610a4d6109fa858486610974565b925f9260ff851694608086105f14610eb957505050505090565b610eca9193949550610a5d90610993565b915f935b838510610edd57505050505090565b9091929394610eee60019160081b90565b610f07610a5d610a4d6109fa610d788b610d738b610739565b17950193929190610ece565b92610f216001918385610f28565b9301610e85565b91908082101561108357610f43610a4d6109fa848487610974565b9060ff82166080811015610f5e57505050610b0a9150610739565b91929160b8811015610f86575050610b0a9250610a5d610f80610a6392610739565b92610993565b90929060c0811015610ffc5750610a5d610fa2919493946109b9565b915f935f915b848310610fc357505050610b0a9291610d73610d7392610739565b909194610fd260019160081b90565b610ff2610a5d610a4d6109fa610feb8b610d738b610739565b8888610974565b1795019190610fa8565b90929060f811156110225750610b0a9250610a5d61101c610a6392610739565b926109a6565b9291610a5d61103091610980565b915f935f915b84831061105157505050610b0a9291610d73610d7392610739565b90919461106060019160081b90565b611079610a5d610a4d6109fa610feb8b610d738b610739565b1795019190611036565b6318d76ae160e11b5f5260045ffd5b80511561096f5760200190565b90815181101561096f570160200190565b919390929190600360fe1b6001600160f81b03196110d16109fa8689610966565b161061125b57601f60fb1b6001600160f81b03196110f26109fa8689610966565b161061125157611116611111610a5d610a53610a4d6109fa888b610966565b61075a565b9492905b945f5b82821061112f57505050505050505f90565b61114d6111468361114136878a610837565b6113d6565b9093610768565b9682516020840120036111ef57600360fe1b61118961117c61116e85611092565b516001600160f81b03191690565b6001600160f81b03191690565b106111ef578590846001601f60fb1b6111a761117c61116e88611092565b1015611233575b6111b8818661157d565b601181036111fa57506111ca94611708565b9491156111ef5784156111e35793915b9195909361111d565b50505050505050600190565b505050505050505f90565b90935060021415905061122757848792611213946115c2565b9491156111ef5784156111e35793916111da565b50505050505050505f90565b5061124c611111610a5d610a53610a4d61116e89611092565b6111ae565b600194929061111a565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b03196112866109fa8686610966565b1610610ad757601f60fb1b6001600160f81b03196112a76109fa8686610966565b16106113795780610a63610a5d610a58610a53610a4d6109fa6112cb978a8a610974565b905b61a5bd4614801561136e575b6112e4575b50905090565b5f5b600381106113595750600360fe1b61130561117c6109fa858786610974565b10610ad757601f60fb1b61132061117c6109fa858786610974565b1061134957610a5d610a58610a53610a4d6109fa8661134298610a6397610974565b805f6112de565b506113549150610739565b611342565b916113676001918584610f28565b92016112e6565b5061a5bf46146112d9565b506001906112cd565b604080519091906113938382610668565b6001815291601f1901366020840137565b906113ae8261068f565b6113bb6040519182610668565b82815280926113cc601f199161068f565b0190602036910137565b8051821015611083576113ef610a4d61116e848461109f565b9160ff8316608081101561142857505050611408611382565b9060f81b6001600160f81b0319165f1a61142182611092565b5390600190565b919392909160b88110156114925750610a5d61144391610993565b9061144d826113a4565b935f5b83811061146357505050610b0a9061075a565b8061147f61116e611479600194610d7388610739565b8561109f565b5f1a61148b828961109f565b5301611450565b60c0111561153057610a5d6114a6916109b9565b5f915f5b82811061150257506114bb836113a4565b945f5b8481106114d55750505090610d73610b0a9261075a565b806114ef61116e611479600194610d7389610d738a610739565b5f1a6114fb828a61109f565b53016114be565b9260019060081b611528610a5d610a4d61116e61152289610d7389610739565b8b61109f565b1793016114aa565b509161153c838261181d565b92611546846113a4565b915f5b858110611557575050509190565b8061156a61116e61147960019487610768565b5f1a611576828761109f565b5301611549565b5f92915b81518110156115a857611594818361181d565b810180911161074757600190930192611581565b5050565b908160011b918083046002149015171561074757565b839492916115d081836113d6565b93906115ef60206115e6610a4d61116e85611092565b1615159161194a565b978891156116915750611603905187610768565b61160d82516115ac565b14611622575b505050505050505f905f905f90565b8686600192825161167f575b50505061163c575b80611613565b61164f9261164991610768565b906113d6565b506020815191012090602081519101201461166d5780808080611636565b611678915190610768565b6001915f90565b6116899350611ab3565b86865f61162e565b6116a2939495965061045492611ab3565b6116fb576116b39261164991610768565b50908151602081145f146116db575060206116d3920151925b5190610768565b916001929190565b80156116ef5760206116d3930120926116cc565b505050505f905f905f90565b50505050505f905f905f90565b9190929361171682516115ac565b8510156117c05750610a4d61116e611738926117328760011c90565b9061109f565b600184166117b75760041c600f16915b905f925b60ff81168410611797575061176192506113d6565b508051801561178c576116d391602082036117825760209150015191610739565b6020012091610739565b5050505f905f905f90565b909160016117ab82610a6360ff948761181d565b9401939291905061174c565b600f1691611748565b9290509392935f915b60108310611803576117db92506113d6565b50602081519101209060208151910120145f146117fa57600191905f90565b5f915081908190565b9061181481610a636001938561181d565b920191906117c9565b90815181101561108357611837610a4d61116e838561109f565b9160ff8316608081101561184e5750505050600190565b60b881101561186957505050610a5d610a58610b0a92610993565b60c08110156118d5575091610a5d611880916109b9565b905f925f915b83831061189d5750505090610d73610b0a9261075a565b9091936118ac60019160081b90565b6118cb610a5d610a4d61116e6118c58a610d7389610739565b8861109f565b1794019190611886565b60f811156118ee575050610a5d610a58610b0a926109a6565b91610a5d6118fb91610980565b905f925f915b8383106119185750505090610d73610b0a9261075a565b90919361192760019160081b90565b611940610a5d610a4d61116e6118c58a610d7389610739565b1794019190611901565b908151156107a257611961610a4d61116e84611092565b6010811615611a305761198461197f61197a85516115ac565b61081c565b6113a4565b9060f81b600f60f81b165f1a61199982611092565b5360015b8351811015611a2b57806119d86119c86119bf610a4d61116e6001968a61109f565b60041c600f1690565b60f81b6001600160f81b03191690565b6119f16119e761197a846115ac565b915f1a918561109f565b53611a18600f611a07610a4d61116e858a61109f565b1660f81b6001600160f81b03191690565b611a246119e7836115ac565b530161199d565b509150565b50611a4661197f611a4184516115ac565b61080d565b60015b8351811015611a2b5780611a6b6119c86119bf610a4d61116e6001968a61109f565b611a7f6119e7611a7a8461081c565b6115ac565b53611a95600f611a07610a4d61116e858a61109f565b611aac6119e7611aa7611a7a8561081c565b610739565b5301611a49565b919091611ac1825184610768565b611acb82516115ac565b10611b6a575f5b8251811015611b6157611aee611ae88286610768565b60011690565b611b4357611b176119bf610a4d61116e611b11611b0b868a610768565b60011c90565b8661109f565b60ff611b2c610a5d610a4d61116e868961109f565b911603611b3b57600101611ad2565b505050505f90565b600f611b5b610a4d61116e611b11611b0b868a610768565b16611b17565b50505050600190565b5050505f9056fea26469706673582212200914e236ea078015a495fd5f55d81429d19af970cf92b088baaf3804798be75764736f6c634300081e0033 diff --git a/out/EscrowERC20.sol/EscrowERC20.json b/out/EscrowERC20.sol/EscrowERC20.json index 86bf7ba..8e79aa6 100644 --- a/out/EscrowERC20.sol/EscrowERC20.json +++ b/out/EscrowERC20.sol/EscrowERC20.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_tokenContract","type":"address","internalType":"address"},{"name":"_expectedRecipient","type":"address","internalType":"address"},{"name":"_expectedAmount","type":"uint256","internalType":"uint256"},{"name":"_currentRewardAmount","type":"uint256","internalType":"uint256"},{"name":"_currentPaymentAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_BLOCK_LOOKBACK","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bond","inputs":[{"name":"_bondAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bondAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bondedExecutor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"cancelAndWithdraw","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancellationRequest","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"collect","inputs":[{"name":"proof","type":"tuple","internalType":"struct EscrowERC20.ReceiptProof","components":[{"name":"blockHeader","type":"bytes","internalType":"bytes"},{"name":"receiptRlp","type":"bytes","internalType":"bytes"},{"name":"proofNodes","type":"bytes","internalType":"bytes"},{"name":"receiptPath","type":"bytes","internalType":"bytes"},{"name":"logIndex","type":"uint256","internalType":"uint256"}]},{"name":"targetBlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"currentPaymentAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"currentRewardAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"executionDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"expectedAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"expectedRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"fund","inputs":[{"name":"_currentRewardAmount","type":"uint256","internalType":"uint256"},{"name":"_currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"funded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"is_bonded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"originalRewardAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"requestCancellation","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resume","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"totalBondsDeposited","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"error","name":"AlreadyFunded","inputs":[]},{"type":"error","name":"AmountMismatch","inputs":[]},{"type":"error","name":"BlockHashUnavailable","inputs":[]},{"type":"error","name":"BlockHeaderMismatch","inputs":[]},{"type":"error","name":"BlockNumberMismatch","inputs":[]},{"type":"error","name":"BondActive","inputs":[]},{"type":"error","name":"CancellationRequested","inputs":[]},{"type":"error","name":"ExecutorAlreadyBonded","inputs":[]},{"type":"error","name":"ExpectedBytes32","inputs":[]},{"type":"error","name":"ExpectedRLPList","inputs":[]},{"type":"error","name":"InsufficientBond","inputs":[]},{"type":"error","name":"InvalidAddress","inputs":[]},{"type":"error","name":"InvalidRLP","inputs":[]},{"type":"error","name":"InvalidRLPEncoding","inputs":[]},{"type":"error","name":"InvalidRLPList","inputs":[]},{"type":"error","name":"InvalidReceiptProof","inputs":[]},{"type":"error","name":"InvalidTransferEvent","inputs":[]},{"type":"error","name":"NoWithdrawableFunds","inputs":[]},{"type":"error","name":"NotFunded","inputs":[]},{"type":"error","name":"OnlyBondedExecutor","inputs":[]},{"type":"error","name":"OnlyDeployer","inputs":[]},{"type":"error","name":"RLPOffsetOutOfBounds","inputs":[]},{"type":"error","name":"TargetBlockInFuture","inputs":[]},{"type":"error","name":"TargetBlockTooOld","inputs":[]},{"type":"error","name":"ToAddressMismatch","inputs":[]},{"type":"error","name":"TokenTransferFailed","inputs":[]},{"type":"error","name":"WrongEventSignature","inputs":[]},{"type":"error","name":"WrongTokenContract","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroPaymentAmount","inputs":[]},{"type":"error","name":"ZeroRewardAmount","inputs":[]}],"bytecode":{"object":"0x61010080604052346101c15760a08161231b80380380916100208285610231565b8339810103126101c15761003381610268565b9061004060208201610268565b6040820151608060608401519301519160a05260c0523360805260018060a01b0383169283156102225760e0528115801580610219575b6100fc575b60405161209e908161027d82396080518181816101660152818161040c015281816105790152610a87015260a05181818161045e015261084c015260c0518181816101f2015261082a015260e05181818161028501528181610353015281816105000152818161061a0152818161086e01528181610f8501526110170152f35b60ff60075460081c1661020a576101fb5780156101ec57815f55816002558060015581018091116101d8575f91606460209260405194859384926323b872dd60e01b845233600485015230602485015260448401525af19081156101cd575f9161018e575b501561017f5761010061ff001960075416176007555f80808061007c565b63022e258160e11b5f5260045ffd5b90506020813d6020116101c5575b816101a960209383610231565b810103126101c1575180151581036101c1575f610161565b5f80fd5b3d915061019c565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b50811515610077565b63d92e233d60e01b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761025457604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101c15756fe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101545780631aa7c0ec1461014f5780632feef2ec1461014a578063308657d71461014557806333ee5f35146101405780633d2691bc1461013b57806355a373d6146101365780635a4fd645146101315780636b892b221461012c57806380f323a71461012757806381972d00146101225780638677ab231461011d5780638bd03d0a146101185780639940686e14610113578063a65e2cfd1461010e578063cb766a5614610109578063d415b3f914610104578063ede7f6a3146100ff578063f3a504f2146100fa5763fe03a460146100f5575f80fd5b610961565b61093c565b6106f9565b6106dc565b6106b8565b610560565b6104aa565b61048d565b610449565b6103fa565b6103dd565b6102d0565b6102b4565b610270565b610254565b610237565b610215565b6101db565b6101b3565b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b346101af575f3660031901126101af576003546040516001600160a01b039091168152602090f35b346101af575f3660031901126101af5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101af575f3660031901126101af57602060ff600754166040519015158152f35b346101af575f3660031901126101af576020600454604051908152f35b346101af575f3660031901126101af5760206040516101008152f35b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af5760205f54604051908152f35b346101af575f3660031901126101af576102f2600160ff196007541617600755565b6102fa610a77565b610302610ab7565b61030a610aee565b61032161ff0019600754166007555f6001555f8055565b80156103ce5760405163a9059cbb60e01b815233600482015260248101919091526020816044815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f9161039a575b501561038b57005b63022e258160e11b5f5260045ffd5b6103bc915060203d6020116103c2575b6103b48183610992565b8101906109b9565b5f610383565b503d6103aa565b6109d1565b6353cd7f7960e01b5f5260045ffd5b346101af575f3660031901126101af576020600554604051908152f35b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19166001179055005b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af576020600154604051908152f35b346101af5760203660031901126101af576004356104c6610b00565b6104cf81610b49565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f91610541575b501561038b5761053f90610ba4565b005b61055a915060203d6020116103c2576103b48183610992565b5f610530565b346101af5760403660031901126101af576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a05760075460081c60ff166106a957811561069a57801561068b576105cf826105d4935f55600255565b600155565b61061560206105e860025460015490610a1f565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f9161066c575b501561038b5761053f61010061ff00196007541617600755565b610685915060203d6020116103c2576103b48183610992565b5f610652565b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b346101af575f3660031901126101af5760206106d2610a2c565b6040519015158152f35b346101af575f3660031901126101af576020600254604051908152f35b346101af5760403660031901126101af5760043567ffffffffffffffff81116101af578060040160a060031983360301126101af5760243561073b8280610a44565b6007546107509060081c60ff161590565b1590565b61092d57600354610771906001600160a01b03165b6001600160a01b031690565b331480159061091c575b61090d574383116108fe576101006107938443610be9565b116108ef57824080156108e0576107ab368385610c12565b60208151910120036108d1576107c091611074565b036108c2576107d86107d28280610a44565b90610c76565b9161081261074c60248301946107ee8686610a44565b906107fc6044870188610a44565b9061080a606489018a610a44565b949093610ce6565b6108b35760846108286108989461074c94610a44565b7f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000939101359190610d6a565b6108a45761053f610f04565b6364fa89e160e11b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b5061092861074c610a2c565b61077b565b636af784dd60e11b5f5260045ffd5b346101af575f3660031901126101af57602060ff60075460081c166040519015158152f35b346101af575f3660031901126101af576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176109b457604052565b61097e565b908160209103126101af575180151581036101af5790565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b90600182018092116109fe57565b6109dc565b60010190816001116109fe57565b90601582018092116109fe57565b919082018092116109fe57565b6004548015159081610a3c575090565b905042111590565b903590601e19813603018212156101af570180359067ffffffffffffffff82116101af576020019181360383136101af57565b60ff60075460081c161561092d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a057565b610abf610a2c565b610adf576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116109fe5790565b6004548015159081610b3f575b50610b1457565b6005545f548181018091116109fe575f556006549081018091116109fe57600655610b3d610ab7565b565b905042115f610b0d565b60075460ff8160081c161561092d5760ff16610b9557610b67610a2c565b610b86575f5460011c11610b7757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600354161760035561012c42018042116109fe57600455600555565b6001198101919082116109fe57565b5f198101919082116109fe57565b919082039182116109fe57565b67ffffffffffffffff81116109b457601f01601f191660200190565b929192610c1e82610bf6565b91610c2c6040519384610992565b8294818452818301116101af578281602093845f960137010152565b634e487b7160e01b5f52603260045260245ffd5b9015610c655790565b610c48565b90821015610c65570190565b90610c818183611130565b905f5b60058110610cd15750600560fd1b906001600160f81b031990610ca990849086610c6a565b351603610cc2576001810181116109fe57016001013590565b633954003560e11b5f5260045ffd5b91610cdf6001918386611264565b9201610c84565b610cfc610d0492939495610d0a98973691610c12565b923691610c12565b906113ec565b90565b60ff60f6199116019060ff82116109fe57565b60ff607f199116019060ff82116109fe57565b60ff60bf199116019060ff82116109fe57565b60ff60b6199116019060ff82116109fe57565b60ff166001019060ff82116109fe57565b9594939291905f818881151580610ee8575b610eda575b610daa610da4610d968560c09560ff95610c6a565b356001600160f81b03191690565b60f81c90565b1610610ea457808860f860ff610dc8610da4610d9688978887610c6a565b1610610eca57610df5610df0610deb610da4610d9686610e0198610dfb97610c6a565b610d0d565b610d59565b60ff1690565b90610a1f565b81885f5b60038110610eb35750610df5610da4610d968560c095610e2495610c6a565b10610ea457808860f8610e42610df5610da4610d9688978887610c6a565b10610e9357610df5610df0610deb610da4610d9686610e6498610dfb97610c6a565b915b5f905b808210610e7c575050610d0a9596611599565b9092610e8b600191848b611264565b930190610e69565b50610e9e91506109f0565b91610e66565b631bd5dcf760e31b5f5260045ffd5b92600192610ec092611264565b9101888391610e05565b50610ed591506109f0565b610e01565b506001915082905088610d81565b50608060ff610efd610da4610d968686610c5c565b1610610d7c565b610f0c611669565b6003546001600160a01b0316610f496001600160601b0360a01b600354166003555f6005555f60045561ff0019600754166007555f6001555f8055565b4662aa36a703610fe557604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91610fc6575b505b1561038b57565b610fdf915060203d6020116103c2576103b48183610992565b5f610fbd565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91611055575b50610fbf565b61106e915060203d6020116103c2576103b48183610992565b5f61104f565b61107e8282611130565b915f5b6008811061111b575061109b610da4610d96858486610c6a565b925f9260ff851694608086105f146110b557505050505090565b6110c69193949550610df590610d20565b915f935b8385106110d957505050505090565b90919293946110ea60019160081b90565b61110f610df5610da4610d966111088b6111038b6109f0565b610a1f565b8789610c6a565b179501939291906110ca565b926111296001918385611264565b9301611081565b5f600360fe1b6001600160f81b031961114c610d968686610c5c565b161061122c57601f60fb1b6001600160f81b031961116d610d968686610c5c565b161061125b5780610dfb610df5610df0610deb610da4610d96611191978a8a610c6a565b905b61a5bd46148015611250575b6111aa575b50905090565b5f5b6003811061123b5750600360fe1b6111d86111cb610d96858786610c6a565b6001600160f81b03191690565b1061122c57601f60fb1b6111f36111cb610d96858786610c6a565b1061121c57610df5610df0610deb610da4610d968661121598610dfb97610c6a565b805f6111a4565b5061122791506109f0565b611215565b63c0098bd960e01b5f5260045ffd5b916112496001918584611264565b92016111ac565b5061a5bf461461119f565b50600190611193565b9190808210156113bf5761127f610da4610d96848487610c6a565b9060ff8216608081101561129a57505050610d0a91506109f0565b91929160b88110156112c2575050610d0a9250610df56112bc610dfb926109f0565b92610d20565b90929060c08110156113385750610df56112de91949394610d46565b915f935f915b8483106112ff57505050610d0a9291611103611103926109f0565b90919461130e60019160081b90565b61132e610df5610da4610d966113278b6111038b6109f0565b8888610c6a565b17950191906112e4565b90929060f8111561135e5750610d0a9250610df5611358610dfb926109f0565b92610d33565b9291610df561136c91610d0d565b915f935f915b84831061138d57505050610d0a9291611103611103926109f0565b90919461139c60019160081b90565b6113b5610df5610da4610d966113278b6111038b6109f0565b1795019190611372565b6318d76ae160e11b5f5260045ffd5b805115610c655760200190565b908151811015610c65570160200190565b919390929190600360fe1b6001600160f81b031961140d610d968689610c5c565b161061158a57601f60fb1b6001600160f81b031961142e610d968689610c5c565b16106115805761145261144d610df5610deb610da4610d96888b610c5c565b610a03565b9492905b945f5b82821061146b57505050505050505f90565b6114896114828361147d36878a610c12565b6116da565b9093610a1f565b96825160208401200361151e57600360fe1b6114b86111cb6114aa856113ce565b516001600160f81b03191690565b1061151e578590846001601f60fb1b6114d66111cb6114aa886113ce565b1015611562575b6114e78186611881565b6011810361152957506114f994611a0c565b94911561151e5784156115125793915b91959093611459565b50505050505050600190565b505050505050505f90565b90935060021415905061155657848792611542946118c6565b94911561151e578415611512579391611509565b50505050505050505f90565b5061157b61144d610df5610deb610da46114aa896113ce565b6114dd565b6001949290611456565b63ebb47d1d60e01b5f5260045ffd5b91949392948060c060ff6115b4610da4610d9685888a610c6a565b1610610ea45760f860ff6115cf610da4610d9685888a610c6a565b1610611659575080610dfb610df5610df0610deb610da4610d966115f497898b610c6a565b945b609460ff61160b610da4610d968a8789610c6a565b160361164a576001600160a01b03168286016001013560601c0361163b57611635610d0a95610a11565b91611b21565b63a087f96f60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b61166391506109f0565b946115f6565b6005545f5481018091116109fe5760015481018091116109fe5790565b604080519091906116978382610992565b6001815291601f1901366020840137565b906116b282610bf6565b6116bf6040519182610992565b82815280926116d0601f1991610bf6565b0190602036910137565b80518210156113bf576116f3610da46114aa84846113db565b9160ff8316608081101561172c5750505061170c611686565b9060f81b6001600160f81b0319165f1a611725826113ce565b5390600190565b919392909160b88110156117965750610df561174791610d20565b90611751826116a8565b935f5b83811061176757505050610d0a90610a03565b806117836114aa61177d600194611103886109f0565b856113db565b5f1a61178f82896113db565b5301611754565b60c0111561183457610df56117aa91610d46565b5f915f5b82811061180657506117bf836116a8565b945f5b8481106117d95750505090611103610d0a92610a03565b806117f36114aa61177d600194611103896111038a6109f0565b5f1a6117ff828a6113db565b53016117c2565b9260019060081b61182c610df5610da46114aa61182689611103896109f0565b8b6113db565b1793016117ae565b50916118408382611cd8565b9261184a846116a8565b915f5b85811061185b575050509190565b8061186e6114aa61177d60019487610a1f565b5f1a61187a82876113db565b530161184d565b5f92915b81518110156118ac576118988183611cd8565b81018091116109fe57600190930192611885565b5050565b908160011b91808304600214901517156109fe57565b839492916118d481836116da565b93906118f360206118ea610da46114aa856113ce565b16151591611e05565b978891156119955750611907905187610a1f565b61191182516118b0565b14611926575b505050505050505f905f905f90565b86866001928251611983575b505050611940575b80611917565b6119539261194d91610a1f565b906116da565b5060208151910120906020815191012014611971578080808061193a565b61197c915190610a1f565b6001915f90565b61198d9350611f6e565b86865f611932565b6119a6939495965061074c92611f6e565b6119ff576119b79261194d91610a1f565b50908151602081145f146119df575060206119d7920151925b5190610a1f565b916001929190565b80156119f35760206119d7930120926119d0565b505050505f905f905f90565b50505050505f905f905f90565b91909293611a1a82516118b0565b851015611ac45750610da46114aa611a3c92611a368760011c90565b906113db565b60018416611abb5760041c600f16915b905f925b60ff81168410611a9b5750611a6592506116da565b5080518015611a90576119d79160208203611a8657602091500151916109f0565b60200120916109f0565b5050505f905f905f90565b90916001611aaf82610dfb60ff9487611cd8565b94019392919050611a50565b600f1691611a4c565b9290509392935f915b60108310611b0757611adf92506116da565b50602081519101209060208151910120145f14611afe57600191905f90565b5f915081908190565b90611b1881610dfb60019385611cd8565b92019190611acd565b929190918160c060ff611b3b610da4610d9687898b610c6a565b1610610ea45760f860ff611b56610da4610d9687898b610c6a565b1610611cc95780610dfb610df5610df0610deb610da4610d96611b7a978b8d610c6a565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ba682868861202c565b03611cba57610765610765611bc9611bc2611bd094888a611264565b8789611264565b868861202c565b6001600160a01b03918216911603611cab57611bed908284611264565b905f91611c01610da4610d96838588610c6a565b60ff811694906080861015611c2f5750505050505b03611c2057600190565b6355e97b0d60e01b5f5260045ffd5b9091929394608081145f14611c4a575050505050505f611c16565b60a010610ea457610df5611c6091939293610d20565b915f935b838510611c75575050505050611c16565b9091929394611c8660019160081b90565b611c9f610df5610da4610d966111088b6111038b6109f0565b17950193929190611c64565b634cd4b7b160e01b5f5260045ffd5b6324da545d60e11b5f5260045ffd5b50611cd3826109f0565b611b7a565b9081518110156113bf57611cf2610da46114aa83856113db565b9160ff83166080811015611d095750505050600190565b60b8811015611d2457505050610df5610df0610d0a92610d20565b60c0811015611d90575091610df5611d3b91610d46565b905f925f915b838310611d585750505090611103610d0a92610a03565b909193611d6760019160081b90565b611d86610df5610da46114aa611d808a611103896109f0565b886113db565b1794019190611d41565b60f81115611da9575050610df5610df0610d0a92610d33565b91610df5611db691610d0d565b905f925f915b838310611dd35750505090611103610d0a92610a03565b909193611de260019160081b90565b611dfb610df5610da46114aa611d808a611103896109f0565b1794019190611dbc565b90815115610b3d57611e1c610da46114aa846113ce565b6010811615611eeb57611e3f611e3a611e3585516118b0565b610bdb565b6116a8565b9060f81b600f60f81b165f1a611e54826113ce565b5360015b8351811015611ee65780611e93611e83611e7a610da46114aa6001968a6113db565b60041c600f1690565b60f81b6001600160f81b03191690565b611eac611ea2611e35846118b0565b915f1a91856113db565b53611ed3600f611ec2610da46114aa858a6113db565b1660f81b6001600160f81b03191690565b611edf611ea2836118b0565b5301611e58565b509150565b50611f01611e3a611efc84516118b0565b610bcc565b60015b8351811015611ee65780611f26611e83611e7a610da46114aa6001968a6113db565b611f3a611ea2611f3584610bdb565b6118b0565b53611f50600f611ec2610da46114aa858a6113db565b611f67611ea2611f62611f3585610bdb565b6109f0565b5301611f04565b919091611f7c825184610a1f565b611f8682516118b0565b10612025575f5b825181101561201c57611fa9611fa38286610a1f565b60011690565b611ffe57611fd2611e7a610da46114aa611fcc611fc6868a610a1f565b60011c90565b866113db565b60ff611fe7610df5610da46114aa86896113db565b911603611ff657600101611f8d565b505050505f90565b600f612016610da46114aa611fcc611fc6868a610a1f565b16611fd2565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b03199061204a90849086610c6a565b35160361205957016001013590565b63f0ff325b60e01b5f5260045ffdfea264697066735822122028c96b0e3c2075e4a273041c863c4e813c898fa651607c92e57dad2760f392cd64736f6c634300081e0033","sourceMap":"426:4679:21:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;1670:38:20;426:4679:21;1670:38:20;1718:32;;1778:10;426:4679:21;1760:28:20;426:4679:21;;;;;;;1437:28;;;1433:54;;1497:30;;1542:24;;;;:53;;;-1:-1:-1;1538:133:21;;-1:-1:-1;426:4679:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1718:32:20;426:4679:21;;;;;;;;;;1497:30;426:4679;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1538:133;426:4679;1953:6;426:4679;;;;1949:34;;1993:56;;2063:26;;2059:58;;426:4679;-1:-1:-1;426:4679:21;;2180:43;426:4679;;;;;;;;;;;-1:-1:-1;426:4679:21;2292:106;426:4679;;;;;;;;;;;;2292:106;;1778:10:20;2292:106:21;;;426:4679;2347:4;426:4679;;;;;;;;2292:106;;;;;;;-1:-1:-1;2292:106:21;;;1538:133;2291:107;;2287:174;;426:4679;;;1953:6;426:4679;;;1953:6;426:4679;1538:133;;;;;;2287:174;2429:21;;;-1:-1:-1;2429:21:21;2292:106;-1:-1:-1;2429:21:21;2292:106;;;426:4679;2292:106;;426:4679;2292:106;;;;;;426:4679;2292:106;;;:::i;:::-;;;426:4679;;;;;;;;;;;;2292:106;;;426:4679;-1:-1:-1;426:4679:21;;2292:106;;;-1:-1:-1;2292:106:21;;;426:4679;;;-1:-1:-1;426:4679:21;;;;;;;;;-1:-1:-1;426:4679:21;;;;;-1:-1:-1;426:4679:21;2059:58;2098:19;;;-1:-1:-1;2098:19:21;;-1:-1:-1;2098:19:21;1993:56;2031:18;;;-1:-1:-1;2031:18:21;;-1:-1:-1;2031:18:21;1949:34;1968:15;;;-1:-1:-1;1968:15:21;;-1:-1:-1;1968:15:21;1542:53;1570:25;;;;1542:53;;1433:54;1474:13;;;-1:-1:-1;1474:13:21;;-1:-1:-1;1474:13:21;426:4679;;;;;-1:-1:-1;;426:4679:21;;;;-1:-1:-1;;;;;426:4679:21;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;426:4679:21;;;;;-1:-1:-1;426:4679:21;;;;-1:-1:-1;;;;;426:4679:21;;;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101545780631aa7c0ec1461014f5780632feef2ec1461014a578063308657d71461014557806333ee5f35146101405780633d2691bc1461013b57806355a373d6146101365780635a4fd645146101315780636b892b221461012c57806380f323a71461012757806381972d00146101225780638677ab231461011d5780638bd03d0a146101185780639940686e14610113578063a65e2cfd1461010e578063cb766a5614610109578063d415b3f914610104578063ede7f6a3146100ff578063f3a504f2146100fa5763fe03a460146100f5575f80fd5b610961565b61093c565b6106f9565b6106dc565b6106b8565b610560565b6104aa565b61048d565b610449565b6103fa565b6103dd565b6102d0565b6102b4565b610270565b610254565b610237565b610215565b6101db565b6101b3565b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b346101af575f3660031901126101af576003546040516001600160a01b039091168152602090f35b346101af575f3660031901126101af5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101af575f3660031901126101af57602060ff600754166040519015158152f35b346101af575f3660031901126101af576020600454604051908152f35b346101af575f3660031901126101af5760206040516101008152f35b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af5760205f54604051908152f35b346101af575f3660031901126101af576102f2600160ff196007541617600755565b6102fa610a77565b610302610ab7565b61030a610aee565b61032161ff0019600754166007555f6001555f8055565b80156103ce5760405163a9059cbb60e01b815233600482015260248101919091526020816044815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f9161039a575b501561038b57005b63022e258160e11b5f5260045ffd5b6103bc915060203d6020116103c2575b6103b48183610992565b8101906109b9565b5f610383565b503d6103aa565b6109d1565b6353cd7f7960e01b5f5260045ffd5b346101af575f3660031901126101af576020600554604051908152f35b346101af575f3660031901126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a0576007805460ff19166001179055005b346101af575f3660031901126101af576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101af575f3660031901126101af576020600154604051908152f35b346101af5760203660031901126101af576004356104c6610b00565b6104cf81610b49565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19081156103c9575f91610541575b501561038b5761053f90610ba4565b005b61055a915060203d6020116103c2576103b48183610992565b5f610530565b346101af5760403660031901126101af576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a05760075460081c60ff166106a957811561069a57801561068b576105cf826105d4935f55600255565b600155565b61061560206105e860025460015490610a1f565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f9161066c575b501561038b5761053f61010061ff00196007541617600755565b610685915060203d6020116103c2576103b48183610992565b5f610652565b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b346101af575f3660031901126101af5760206106d2610a2c565b6040519015158152f35b346101af575f3660031901126101af576020600254604051908152f35b346101af5760403660031901126101af5760043567ffffffffffffffff81116101af578060040160a060031983360301126101af5760243561073b8280610a44565b6007546107509060081c60ff161590565b1590565b61092d57600354610771906001600160a01b03165b6001600160a01b031690565b331480159061091c575b61090d574383116108fe576101006107938443610be9565b116108ef57824080156108e0576107ab368385610c12565b60208151910120036108d1576107c091611074565b036108c2576107d86107d28280610a44565b90610c76565b9161081261074c60248301946107ee8686610a44565b906107fc6044870188610a44565b9061080a606489018a610a44565b949093610ce6565b6108b35760846108286108989461074c94610a44565b7f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000939101359190610d6a565b6108a45761053f610f04565b6364fa89e160e11b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b5061092861074c610a2c565b61077b565b636af784dd60e11b5f5260045ffd5b346101af575f3660031901126101af57602060ff60075460081c166040519015158152f35b346101af575f3660031901126101af576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176109b457604052565b61097e565b908160209103126101af575180151581036101af5790565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b90600182018092116109fe57565b6109dc565b60010190816001116109fe57565b90601582018092116109fe57565b919082018092116109fe57565b6004548015159081610a3c575090565b905042111590565b903590601e19813603018212156101af570180359067ffffffffffffffff82116101af576020019181360383136101af57565b60ff60075460081c161561092d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101a057565b610abf610a2c565b610adf576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116109fe5790565b6004548015159081610b3f575b50610b1457565b6005545f548181018091116109fe575f556006549081018091116109fe57600655610b3d610ab7565b565b905042115f610b0d565b60075460ff8160081c161561092d5760ff16610b9557610b67610a2c565b610b86575f5460011c11610b7757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600354161760035561012c42018042116109fe57600455600555565b6001198101919082116109fe57565b5f198101919082116109fe57565b919082039182116109fe57565b67ffffffffffffffff81116109b457601f01601f191660200190565b929192610c1e82610bf6565b91610c2c6040519384610992565b8294818452818301116101af578281602093845f960137010152565b634e487b7160e01b5f52603260045260245ffd5b9015610c655790565b610c48565b90821015610c65570190565b90610c818183611130565b905f5b60058110610cd15750600560fd1b906001600160f81b031990610ca990849086610c6a565b351603610cc2576001810181116109fe57016001013590565b633954003560e11b5f5260045ffd5b91610cdf6001918386611264565b9201610c84565b610cfc610d0492939495610d0a98973691610c12565b923691610c12565b906113ec565b90565b60ff60f6199116019060ff82116109fe57565b60ff607f199116019060ff82116109fe57565b60ff60bf199116019060ff82116109fe57565b60ff60b6199116019060ff82116109fe57565b60ff166001019060ff82116109fe57565b9594939291905f818881151580610ee8575b610eda575b610daa610da4610d968560c09560ff95610c6a565b356001600160f81b03191690565b60f81c90565b1610610ea457808860f860ff610dc8610da4610d9688978887610c6a565b1610610eca57610df5610df0610deb610da4610d9686610e0198610dfb97610c6a565b610d0d565b610d59565b60ff1690565b90610a1f565b81885f5b60038110610eb35750610df5610da4610d968560c095610e2495610c6a565b10610ea457808860f8610e42610df5610da4610d9688978887610c6a565b10610e9357610df5610df0610deb610da4610d9686610e6498610dfb97610c6a565b915b5f905b808210610e7c575050610d0a9596611599565b9092610e8b600191848b611264565b930190610e69565b50610e9e91506109f0565b91610e66565b631bd5dcf760e31b5f5260045ffd5b92600192610ec092611264565b9101888391610e05565b50610ed591506109f0565b610e01565b506001915082905088610d81565b50608060ff610efd610da4610d968686610c5c565b1610610d7c565b610f0c611669565b6003546001600160a01b0316610f496001600160601b0360a01b600354166003555f6005555f60045561ff0019600754166007555f6001555f8055565b4662aa36a703610fe557604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91610fc6575b505b1561038b57565b610fdf915060203d6020116103c2576103b48183610992565b5f610fbd565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156103c9575f91611055575b50610fbf565b61106e915060203d6020116103c2576103b48183610992565b5f61104f565b61107e8282611130565b915f5b6008811061111b575061109b610da4610d96858486610c6a565b925f9260ff851694608086105f146110b557505050505090565b6110c69193949550610df590610d20565b915f935b8385106110d957505050505090565b90919293946110ea60019160081b90565b61110f610df5610da4610d966111088b6111038b6109f0565b610a1f565b8789610c6a565b179501939291906110ca565b926111296001918385611264565b9301611081565b5f600360fe1b6001600160f81b031961114c610d968686610c5c565b161061122c57601f60fb1b6001600160f81b031961116d610d968686610c5c565b161061125b5780610dfb610df5610df0610deb610da4610d96611191978a8a610c6a565b905b61a5bd46148015611250575b6111aa575b50905090565b5f5b6003811061123b5750600360fe1b6111d86111cb610d96858786610c6a565b6001600160f81b03191690565b1061122c57601f60fb1b6111f36111cb610d96858786610c6a565b1061121c57610df5610df0610deb610da4610d968661121598610dfb97610c6a565b805f6111a4565b5061122791506109f0565b611215565b63c0098bd960e01b5f5260045ffd5b916112496001918584611264565b92016111ac565b5061a5bf461461119f565b50600190611193565b9190808210156113bf5761127f610da4610d96848487610c6a565b9060ff8216608081101561129a57505050610d0a91506109f0565b91929160b88110156112c2575050610d0a9250610df56112bc610dfb926109f0565b92610d20565b90929060c08110156113385750610df56112de91949394610d46565b915f935f915b8483106112ff57505050610d0a9291611103611103926109f0565b90919461130e60019160081b90565b61132e610df5610da4610d966113278b6111038b6109f0565b8888610c6a565b17950191906112e4565b90929060f8111561135e5750610d0a9250610df5611358610dfb926109f0565b92610d33565b9291610df561136c91610d0d565b915f935f915b84831061138d57505050610d0a9291611103611103926109f0565b90919461139c60019160081b90565b6113b5610df5610da4610d966113278b6111038b6109f0565b1795019190611372565b6318d76ae160e11b5f5260045ffd5b805115610c655760200190565b908151811015610c65570160200190565b919390929190600360fe1b6001600160f81b031961140d610d968689610c5c565b161061158a57601f60fb1b6001600160f81b031961142e610d968689610c5c565b16106115805761145261144d610df5610deb610da4610d96888b610c5c565b610a03565b9492905b945f5b82821061146b57505050505050505f90565b6114896114828361147d36878a610c12565b6116da565b9093610a1f565b96825160208401200361151e57600360fe1b6114b86111cb6114aa856113ce565b516001600160f81b03191690565b1061151e578590846001601f60fb1b6114d66111cb6114aa886113ce565b1015611562575b6114e78186611881565b6011810361152957506114f994611a0c565b94911561151e5784156115125793915b91959093611459565b50505050505050600190565b505050505050505f90565b90935060021415905061155657848792611542946118c6565b94911561151e578415611512579391611509565b50505050505050505f90565b5061157b61144d610df5610deb610da46114aa896113ce565b6114dd565b6001949290611456565b63ebb47d1d60e01b5f5260045ffd5b91949392948060c060ff6115b4610da4610d9685888a610c6a565b1610610ea45760f860ff6115cf610da4610d9685888a610c6a565b1610611659575080610dfb610df5610df0610deb610da4610d966115f497898b610c6a565b945b609460ff61160b610da4610d968a8789610c6a565b160361164a576001600160a01b03168286016001013560601c0361163b57611635610d0a95610a11565b91611b21565b63a087f96f60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b61166391506109f0565b946115f6565b6005545f5481018091116109fe5760015481018091116109fe5790565b604080519091906116978382610992565b6001815291601f1901366020840137565b906116b282610bf6565b6116bf6040519182610992565b82815280926116d0601f1991610bf6565b0190602036910137565b80518210156113bf576116f3610da46114aa84846113db565b9160ff8316608081101561172c5750505061170c611686565b9060f81b6001600160f81b0319165f1a611725826113ce565b5390600190565b919392909160b88110156117965750610df561174791610d20565b90611751826116a8565b935f5b83811061176757505050610d0a90610a03565b806117836114aa61177d600194611103886109f0565b856113db565b5f1a61178f82896113db565b5301611754565b60c0111561183457610df56117aa91610d46565b5f915f5b82811061180657506117bf836116a8565b945f5b8481106117d95750505090611103610d0a92610a03565b806117f36114aa61177d600194611103896111038a6109f0565b5f1a6117ff828a6113db565b53016117c2565b9260019060081b61182c610df5610da46114aa61182689611103896109f0565b8b6113db565b1793016117ae565b50916118408382611cd8565b9261184a846116a8565b915f5b85811061185b575050509190565b8061186e6114aa61177d60019487610a1f565b5f1a61187a82876113db565b530161184d565b5f92915b81518110156118ac576118988183611cd8565b81018091116109fe57600190930192611885565b5050565b908160011b91808304600214901517156109fe57565b839492916118d481836116da565b93906118f360206118ea610da46114aa856113ce565b16151591611e05565b978891156119955750611907905187610a1f565b61191182516118b0565b14611926575b505050505050505f905f905f90565b86866001928251611983575b505050611940575b80611917565b6119539261194d91610a1f565b906116da565b5060208151910120906020815191012014611971578080808061193a565b61197c915190610a1f565b6001915f90565b61198d9350611f6e565b86865f611932565b6119a6939495965061074c92611f6e565b6119ff576119b79261194d91610a1f565b50908151602081145f146119df575060206119d7920151925b5190610a1f565b916001929190565b80156119f35760206119d7930120926119d0565b505050505f905f905f90565b50505050505f905f905f90565b91909293611a1a82516118b0565b851015611ac45750610da46114aa611a3c92611a368760011c90565b906113db565b60018416611abb5760041c600f16915b905f925b60ff81168410611a9b5750611a6592506116da565b5080518015611a90576119d79160208203611a8657602091500151916109f0565b60200120916109f0565b5050505f905f905f90565b90916001611aaf82610dfb60ff9487611cd8565b94019392919050611a50565b600f1691611a4c565b9290509392935f915b60108310611b0757611adf92506116da565b50602081519101209060208151910120145f14611afe57600191905f90565b5f915081908190565b90611b1881610dfb60019385611cd8565b92019190611acd565b929190918160c060ff611b3b610da4610d9687898b610c6a565b1610610ea45760f860ff611b56610da4610d9687898b610c6a565b1610611cc95780610dfb610df5610df0610deb610da4610d96611b7a978b8d610c6a565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ba682868861202c565b03611cba57610765610765611bc9611bc2611bd094888a611264565b8789611264565b868861202c565b6001600160a01b03918216911603611cab57611bed908284611264565b905f91611c01610da4610d96838588610c6a565b60ff811694906080861015611c2f5750505050505b03611c2057600190565b6355e97b0d60e01b5f5260045ffd5b9091929394608081145f14611c4a575050505050505f611c16565b60a010610ea457610df5611c6091939293610d20565b915f935b838510611c75575050505050611c16565b9091929394611c8660019160081b90565b611c9f610df5610da4610d966111088b6111038b6109f0565b17950193929190611c64565b634cd4b7b160e01b5f5260045ffd5b6324da545d60e11b5f5260045ffd5b50611cd3826109f0565b611b7a565b9081518110156113bf57611cf2610da46114aa83856113db565b9160ff83166080811015611d095750505050600190565b60b8811015611d2457505050610df5610df0610d0a92610d20565b60c0811015611d90575091610df5611d3b91610d46565b905f925f915b838310611d585750505090611103610d0a92610a03565b909193611d6760019160081b90565b611d86610df5610da46114aa611d808a611103896109f0565b886113db565b1794019190611d41565b60f81115611da9575050610df5610df0610d0a92610d33565b91610df5611db691610d0d565b905f925f915b838310611dd35750505090611103610d0a92610a03565b909193611de260019160081b90565b611dfb610df5610da46114aa611d808a611103896109f0565b1794019190611dbc565b90815115610b3d57611e1c610da46114aa846113ce565b6010811615611eeb57611e3f611e3a611e3585516118b0565b610bdb565b6116a8565b9060f81b600f60f81b165f1a611e54826113ce565b5360015b8351811015611ee65780611e93611e83611e7a610da46114aa6001968a6113db565b60041c600f1690565b60f81b6001600160f81b03191690565b611eac611ea2611e35846118b0565b915f1a91856113db565b53611ed3600f611ec2610da46114aa858a6113db565b1660f81b6001600160f81b03191690565b611edf611ea2836118b0565b5301611e58565b509150565b50611f01611e3a611efc84516118b0565b610bcc565b60015b8351811015611ee65780611f26611e83611e7a610da46114aa6001968a6113db565b611f3a611ea2611f3584610bdb565b6118b0565b53611f50600f611ec2610da46114aa858a6113db565b611f67611ea2611f62611f3585610bdb565b6109f0565b5301611f04565b919091611f7c825184610a1f565b611f8682516118b0565b10612025575f5b825181101561201c57611fa9611fa38286610a1f565b60011690565b611ffe57611fd2611e7a610da46114aa611fcc611fc6868a610a1f565b60011c90565b866113db565b60ff611fe7610df5610da46114aa86896113db565b911603611ff657600101611f8d565b505050505f90565b600f612016610da46114aa611fcc611fc6868a610a1f565b16611fd2565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b03199061204a90849086610c6a565b35160361205957016001013590565b63f0ff325b60e01b5f5260045ffdfea264697066735822122028c96b0e3c2075e4a273041c863c4e813c898fa651607c92e57dad2760f392cd64736f6c634300081e0033","sourceMap":"426:4679:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;426:4679:21;;;;2363:15:20;-1:-1:-1;;;;;426:4679:21;2349:10:20;:29;2345:56;;2411:27;426:4679:21;;-1:-1:-1;;426:4679:21;;;;2345:56:20;2387:14;;;426:4679:21;2387:14:20;426:4679:21;;2387:14:20;426:4679:21;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;1263:29:20;426:4679:21;;;-1:-1:-1;;;;;426:4679:21;;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;;963:39:20;426:4679:21;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;1407:31:20;426:4679:21;;;;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;;1085:3:20;426:4679:21;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;735:38;-1:-1:-1;;;;;426:4679:21;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;4710:26;4732:4;426:4679;;4710:26;426:4679;;;4710:26;426:4679;;4710:26;;;:::i;:::-;;;:::i;:::-;4834:30;;:::i;:::-;4805:59;426:4679;;5686:14:20;426:4679:21;;5686:14:20;426:4679:21;5695:5:20;426:4679:21;;5695:5:20;426:4679:21;;5636:138:20;4805:59:21;4911:23;;4907:57;;426:4679;;-1:-1:-1;;;4980:62:21;;5011:10;426:4679;4980:62;;426:4679;;;;;;;;4980:62;426:4679;;;-1:-1:-1;;;;;;4987:13:21;426:4679;4980:62;;;;;;;426:4679;4980:62;;;426:4679;4979:63;;4975:122;;426:4679;4975:122;5065:21;;;426:4679;5065:21;426:4679;;5065:21;4980:62;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;4907:57::-;4943:21;;;426:4679;4943:21;426:4679;;4943:21;426:4679;;;;;;-1:-1:-1;;426:4679:21;;;;;1336:25:20;426:4679:21;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;2113:15:20;-1:-1:-1;;;;;426:4679:21;2099:10:20;:29;2095:56;;2161:26;426:4679:21;;-1:-1:-1;;426:4679:21;2183:4:20;426:4679:21;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;873:42:20;-1:-1:-1;;;;;426:4679:21;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;727:35:20;426:4679:21;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;2783:388;;:::i;:::-;2972:11;;;:::i;:::-;426:4679;;-1:-1:-1;;;3000:74:21;;3035:10;426:4679;3000:74;;426:4679;3055:4;426:4679;;;;;;;;;;;;;;-1:-1:-1;;;;;;3007:13:21;426:4679;3000:74;;;;;;;-1:-1:-1;3000:74:21;;;426:4679;2999:75;;2995:134;;3152:11;;;:::i;:::-;426:4679;3000:74;;;;426:4679;3000:74;426:4679;3000:74;;;;;;;:::i;:::-;;;;426:4679;;;;;;-1:-1:-1;;426:4679:21;;;;;;;;1901:15;-1:-1:-1;;;;;426:4679:21;1887:10;:29;1883:56;;1953:6;426:4679;;;;;1949:34;;1997:25;;1993:56;;2063:26;;2059:58;;2180:43;426:4679;2233:44;426:4679;-1:-1:-1;426:4679:21;2180:43;426:4679;;2180:43;2233:44;426:4679;;2233:44;2292:106;426:4679;2354:43;2180;426:4679;2233:44;426:4679;2354:43;;:::i;:::-;426:4679;;-1:-1:-1;;;2292:106:21;;1887:10;426:4679;2292:106;;426:4679;2347:4;426:4679;;;;;;;;;;;;;;;;;;;;;2292:106;;426:4679;-1:-1:-1;2299:13:21;-1:-1:-1;;;;;426:4679:21;2292:106;;;;;;;-1:-1:-1;2292:106:21;;;426:4679;2291:107;;2287:174;;2470:13;426:4679;;;1953:6;426:4679;;;1953:6;426:4679;;2292:106;;;;426:4679;2292:106;426:4679;2292:106;;;;;;;:::i;:::-;;;;2059:58;2098:19;;;-1:-1:-1;2098:19:21;426:4679;-1:-1:-1;2098:19:21;1993:56;2031:18;;;-1:-1:-1;2031:18:21;426:4679;-1:-1:-1;2031:18:21;1949:34;1968:15;;;-1:-1:-1;1968:15:21;426:4679;-1:-1:-1;1968:15:21;426:4679;;;;;;-1:-1:-1;;426:4679:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;768:35:20;426:4679:21;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;;;;;;;;;;;;;;;;;;;;;;3397:17;;;;:::i;:::-;2843:6:20;426:4679:21;2842:7:20;;426:4679:21;;;;2842:7:20;;426:4679:21;;2842:7:20;;426:4679:21;2842:7:20;2838:31;;2897:14;426:4679:21;2883:28:20;;-1:-1:-1;;;;;426:4679:21;;-1:-1:-1;;;;;426:4679:21;;;2883:28:20;:10;:28;;;:44;;;426:4679:21;2879:77:20;;2990:12;2970:32;;2966:66;;1085:3;3046:32;2990:12;;3046:32;:::i;:::-;:53;3042:85;;3164:28;;3206:29;;3202:64;;426:4679:21;;;;;:::i;:::-;;;;;;3280:22:20;:41;3276:75;;3365:49;;;:::i;:::-;:70;3361:104;;3530:56:21;3568:17;;;;:::i;:::-;3530:56;;:::i;:::-;3632:16;3600:100;3601:99;426:4679;3632:16;;;;;;;:::i;:::-;3650;;;;;;;:::i;:::-;3668:17;;;;;;;:::i;:::-;3601:99;;;;:::i;3600:100::-;3596:159;;3887:14;3869:16;3808:157;3869:16;3809:156;3869:16;;:::i;:::-;3937:14;;3918:17;;3903:13;;3887:14;;426:4679;;3887:14;3809:156;:::i;3808:157::-;3804:217;;;;:::i;:::-;3988:22;;;-1:-1:-1;3988:22:21;426:4679;-1:-1:-1;3988:22:21;3596:159;3723:21;;;-1:-1:-1;3723:21:21;426:4679;-1:-1:-1;3723:21:21;3361:104:20;3444:21;;;-1:-1:-1;3444:21:20;426:4679:21;-1:-1:-1;3444:21:20;3276:75;3330:21;;;-1:-1:-1;3330:21:20;426:4679:21;-1:-1:-1;3330:21:20;3202:64;3244:22;;;-1:-1:-1;3244:22:20;426:4679:21;-1:-1:-1;3244:22:20;3042:85;3108:19;;;-1:-1:-1;3108:19:20;426:4679:21;-1:-1:-1;3108:19:20;2966:66;3011:21;;;-1:-1:-1;3011:21:20;426:4679:21;-1:-1:-1;3011:21:20;2879:77;2936:20;;;-1:-1:-1;2936:20:20;426:4679:21;-1:-1:-1;2936:20:20;2883:44;2916:11;2915:12;2916:11;;:::i;2915:12::-;2883:44;;2838:31;2858:11;;;-1:-1:-1;2858:11:20;426:4679:21;-1:-1:-1;2858:11:20;426:4679:21;;;;;;-1:-1:-1;;426:4679:21;;;;;;1444:18:20;426:4679:21;;;;;;;;;;;;;;;;;;-1:-1:-1;;426:4679:21;;;;;1367:34:20;426:4679:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;1814:1:25;426:4679:21;;;;;;;:::o;:::-;;:::i;:::-;1984:1:23;426:4679:21;;;1984:1:23;426:4679:21;;;:::o;:::-;;3908:2:25;426:4679:21;;;;;;;:::o;:::-;;;;;;;;;;:::o;2519:133:20:-;2584:17;426:4679:21;2584:21:20;;;:61;;;;2577:68;2519:133;:::o;2584:61::-;2609:15;;;:36;;2519:133;:::o;426:4679:21:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5203:157:20:-;426:4679:21;5261:6:20;426:4679:21;;;;5260:7:20;5256:31;;5315:15;-1:-1:-1;;;;;426:4679:21;5301:10:20;:29;5297:56;;5203:157::o;3533:184::-;3585:11;;:::i;:::-;3581:36;;-1:-1:-1;;;;;426:4679:21;;3628:27:20;426:4679:21;;3628:27:20;426:4679:21;3653:1:20;3665:14;426:4679:21;3653:1:20;3689:21;426:4679:21;3533:184:20:o;3581:36::-;3605:12;;;;;;;;5438:139;5527:20;426:4679:21;5550:20:20;426:4679:21;;;;;;;;5438:139:20;:::o;3797:259::-;3850:17;426:4679:21;3850:21:20;;;:60;;;;3797:259;3846:204;;;3797:259::o;3846:204::-;3949:10;426:4679:21;-1:-1:-1;426:4679:21;;;;;;;;;-1:-1:-1;426:4679:21;3973:33:20;426:4679:21;;;;;;;;;3973:33:20;426:4679:21;3973:33:20;;:::i;:::-;3797:259::o;3850:60::-;3875:15;;;:35;3850:60;;;4115:318;4200:6;426:4679:21;;;;;;4199:7:20;4195:31;;426:4679:21;;4236:55:20;;4305:11;;:::i;:::-;4301:47;;-1:-1:-1;426:4679:21;;;-1:-1:-1;4358:68:20;;4115:318::o;4358:68::-;4408:18;;;-1:-1:-1;4408:18:20;;-1:-1:-1;4408:18:20;4301:47;4325:23;;;-1:-1:-1;4325:23:20;;-1:-1:-1;4325:23:20;4236:55;4268:23;;;-1:-1:-1;4268:23:20;;-1:-1:-1;4268:23:20;4479:187;4558:10;-1:-1:-1;;;;;426:4679:21;;4541:27:20;426:4679:21;;;4541:27:20;426:4679:21;4616:9:20;4598:15;426:4679:21;4598:15:20;;426:4679:21;;;4578:47:20;426:4679:21;4635:24:20;426:4679:21;4479:187:20:o;426:4679:21:-;-1:-1:-1;;426:4679:21;;;;;;;;:::o;:::-;-1:-1:-1;;426:4679:21;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;426:4679:21;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;426:4679:21;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;:::o;3219:769:19:-;;3335:33;;;;:::i;:::-;3539:13;3551:1;3554:5;3558:1;3554:5;;;;-1:-1:-1;;;;426:4679:21;-1:-1:-1;;;;;;426:4679:21;3740:19:19;;426:4679:21;;3740:19:19;;:::i;:::-;;426:4679:21;3740:27:19;3736:60;;426:4679:21;;;;;;;3858:94:19;426:4679:21;3858:94:19;;;3219:769::o;3736:60::-;3776:20;;;3551:1;3776:20;;3551:1;3776:20;3539:13;3585:28;;426:4679:21;3585:28:19;;;;:::i;:::-;426:4679:21;;3539:13:19;;720:484:23;426:4679:21;;720:484:23;;;;1148:49;720:484;;426:4679:21;;;:::i;:::-;;;;;:::i;:::-;1148:49:23;;:::i;:::-;720:484;:::o;426:4679:21:-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;1136:1511:25:-;;;;;;;1384:1;1444:21;;;;;:52;;;1136:1511;1440:123;;1136:1511;1609:25;1615:18;;;1637:4;1615:18;426:4679:21;1615:18:25;;:::i;:::-;;-1:-1:-1;;;;;;426:4679:21;;;1615:18:25;426:4679:21;;;;1609:25:25;426:4679:21;1609:32:25;1605:57;;1682:18;;1705:4;426:4679:21;1676:25:25;1682:18;;;;;;;:::i;1676:25::-;426:4679:21;1676:33:25;1705:4;;1735:38;1740:32;:25;1746:18;;;1725:48;1746:18;1725:48;1746:18;;:::i;1740:25::-;:32;:::i;:::-;1735:38;:::i;:::-;426:4679:21;;;;1725:48:25;;;:::i;:::-;1905:13;;1384:1;1920:5;1924:1;1920:5;;;;2097:18;2091:25;2097:18;;;1637:4;2097:18;2091:32;2097:18;;:::i;2091:32::-;;2087:57;;2164:18;;1705:4;2158:33;:25;2164:18;;;;;;;:::i;2158:33::-;;1705:4;;2217:38;2222:32;:25;2228:18;;;2207:48;2228:18;2207:48;2228:18;;:::i;2207:48::-;2154:154;;1384:1;2352:155;2372:12;;;;;;2559:81;;;;;;:::i;2357:13::-;2410:27;;;426:4679:21;2410:27:25;;;;:::i;:::-;426:4679:21;;2357:13:25;;;2154:154;2286:11;;;;;:::i;:::-;2154:154;;;2087:57;1650:12;;;1384:1;2132:12;;1384:1;2132:12;1905:13;1951:27;426:4679:21;1951:27:25;;;;:::i;:::-;426:4679:21;;1905:13:25;;;;;1672:154;1804:11;;;;;:::i;:::-;1672:154;;1440:123;-1:-1:-1;1522:1:25;;-1:-1:-1;1512:11:25;;-1:-1:-1;1512:11:25;1440:123;;1444:52;1475:13;1492:4;426:4679:21;1469:20:25;1475:13;;;;;:::i;1469:20::-;426:4679:21;1469:27:25;1444:52;;4053:490:21;4108:18;;:::i;:::-;4155:14;426:4679;-1:-1:-1;;;;;426:4679:21;4136:33;-1:-1:-1;;;;;426:4679:21;;4765:27:20;426:4679:21;;4765:27:20;426:4679:21;4790:1:20;4802:14;426:4679:21;4790:1:20;4826:21;426:4679:21;;;4857:14:20;426:4679:21;;4857:14:20;426:4679:21;4790:1:20;426:4679:21;;4790:1:20;426:4679:21;;4717:228:20;4136:33:21;4236:13;4253:8;4236:25;4253:8;;426:4679;;-1:-1:-1;;;4341:44:21;;-1:-1:-1;;;;;426:4679:21;;;4341:44;;;426:4679;;;;;;;;4341:44;426:4679;;;;;4341:44;426:4679;-1:-1:-1;4348:13:21;-1:-1:-1;;;;;426:4679:21;4341:44;;;;;;;-1:-1:-1;4341:44:21;;;4232:253;4331:54;4232:253;4498:8;4494:42;;4053:490::o;4341:44::-;;;;;;;;;;;;;;:::i;:::-;;;;4232:253;426:4679;;-1:-1:-1;;;4426:48:21;;-1:-1:-1;;;;;426:4679:21;;;4426:48;;;426:4679;;;;;;;;4426:48;426:4679;;;;;4426:48;426:4679;-1:-1:-1;4433:13:21;-1:-1:-1;;;;;426:4679:21;4426:48;;;;;;;-1:-1:-1;4426:48:21;;;4232:253;4416:58;4232:253;;4426:48;;;;;;;;;;;;;;:::i;:::-;;;;2036:1012:19;2151:33;;;;:::i;:::-;2386:13;426:4679:21;2401:5:19;2405:1;2401:5;;;;2616:19;2610:26;2616:19;;;;;;:::i;2610:26::-;2646:19;426:4679:21;;;;;2679:13:19;2688:4;2679:13;;2675:338;2688:4;;;2708:20;;;;;2036:1012;:::o;2675:338::-;2759:27;2773:13;;;;;;;;:::i;2759:27::-;2805:13;426:4679:21;2800:203:19;2820:7;;;;;;2675:338;;;;;2036:1012;:::o;2805:13::-;2863:16;;;;;;426:4679:21;2863:16:19;426:4679:21;;;;2863:16:19;2862:55;2883:34;2889:27;;2901:14;:10;;;;:::i;:::-;:14;:::i;:::-;2889:27;;;:::i;2862:55::-;;426:4679:21;;2805:13:19;;;;;;2386;2432:28;;426:4679:21;2432:28:19;;;;:::i;:::-;426:4679:21;;2386:13:19;;738:1134;854:1;-1:-1:-1;;;;;;;;;908:19:19;;;;;:::i;:::-;426:4679:21;908:26:19;904:55;;-1:-1:-1;;;;;;;;;973:19:19;;;;;:::i;:::-;426:4679:21;973:27:19;426:4679:21;;1037:19:19;1016:49;1026:39;1031:33;:26;1037:19;;1016:49;1037:19;;;;:::i;1016:49::-;969:149;;1221:5;1204:13;:22;:48;;;;969:149;1200:642;;969:149;1852:13;;;738:1134;:::o;1200:642::-;854:1;1380:5;1384:1;1380:5;;;;-1:-1:-1;;;;1602:26:19;:19;;;;;;:::i;:::-;-1:-1:-1;;;;;;426:4679:21;;;1602:26:19;;1598:55;;-1:-1:-1;;;1671:27:19;:19;;;;;;:::i;:27::-;;426:4679:21;;1728:39:19;1733:33;:26;1739:19;;;1718:49;1739:19;1718:49;1739:19;;:::i;1718:49::-;1200:642;;;;1667:165;1806:11;;;;;:::i;:::-;1667:165;;1598:55;943:16;;;854:1;1637:16;;854:1;1637:16;1365:13;1415:28;;426:4679:21;1415:28:19;;;;:::i;:::-;426:4679:21;;1365:13:19;;1204:48;:13;1247:5;1204:13;1230:22;1204:48;;969:149;1096:11;1522:1:25;969:149:19;;;541:1316:24;;;642:21;;;;638:56;;720:19;726:12;;;;;;:::i;720:19::-;426:4679:21;;;;763:4:24;754:13;;763:4;;;817:10;;;;;;;:::i;750:1101::-;848:13;;;857:4;848:13;;857:4;;;912:10;;:28;:10;;926:13;912:10;:28;:10;;:::i;:::-;926:13;;:::i;844:1007::-;961:13;;;970:4;961:13;;970:4;;;1039:13;;1017:35;1039:13;;;;;:::i;1017:35::-;1066:18;426:4679:21;1103:13:24;426:4679:21;1098:194:24;1118:15;;;;;;1312:10;;;:33;:10;;;:24;:10;;:::i;1103:13::-;1164:11;;;;1199:1;1164:11;426:4679:21;;;;1164:11:24;1163:43;1179:27;1185:20;;1190:14;:10;;;;:::i;:14::-;1185:20;;;:::i;1163:43::-;;426:4679:21;;1103:13:24;;;;957:894;1366:13;;;1375:4;-1:-1:-1;1375:4:24;;;1428:10;:28;:10;;1442:13;1428:10;:28;:10;;:::i;:::-;1442:13;;:::i;1362:489::-;1534:13;;;1512:35;1534:13;;:::i;1512:35::-;1561:18;426:4679:21;1598:13:24;426:4679:21;1593:194:24;1613:15;;;;;;1807:10;;;:33;:10;;;:24;:10;;:::i;1598:13::-;1659:11;;;;1694:1;1659:11;426:4679:21;;;;1659:11:24;1658:43;1674:27;1680:20;;1685:14;:10;;;;:::i;1658:43::-;;426:4679:21;;1598:13:24;;;;638:56;672:22;;;426:4679:21;672:22:24;;426:4679:21;672:22:24;426:4679:21;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;1567:2467:23:-;;;;;;;-1:-1:-1;;;;;;;;;1809:13:23;;1567:2467;;1809:13;:::i;:::-;426:4679:21;1809:20:23;1805:50;;-1:-1:-1;;;;;;;;;1870:13:23;;;;;:::i;:::-;426:4679:21;1870:21:23;426:4679:21;;1984:15:23;1907:49;1929:27;:20;1935:13;;;;;:::i;1907:49::-;1984:15;:::i;:::-;1866:190;;;;2102:33;426:4679:21;2184:31:23;;;;;;4015:12;;;;;;;426:4679:21;1567:2467:23;:::o;2177:1828::-;2368:25;2321:33;426:4679:21;;;;;;:::i;:::-;2321:33:23;:::i;:::-;2368:25;;;:::i;:::-;426:4679:21;;;;;;2465:15:23;:30;2461:81;;-1:-1:-1;;;2641:15:23;:7;;;;:::i;:::-;426:4679:21;-1:-1:-1;;;;;;426:4679:21;;;2641:15:23;;426:4679:21;;2676:14:23;;;2689:1;-1:-1:-1;;;2712:15:23;:7;;;;:::i;:15::-;;;2708:97;;2637:1358;2839:32;;;;:::i;:::-;2903:2;2894:11;;2903:2;;3044:58;;;;:::i;:::-;3129:8;;;3125:26;;3177:21;;3173:38;;3280:21;2890:1040;;2177:1828;;;;;;3173:38;3200:11;;;;;;;2689:1;3200:11;:::o;3125:26::-;3139:12;;;;;;;426:4679:21;3139:12:23;:::o;2890:1040::-;3330:10;;-1:-1:-1;3339:1:23;3330:10;3339:1;;-1:-1:-1;3339:1:23;;3490:67;;;;;;:::i;:::-;3584:8;;;3580:75;;3680:21;;3676:87;;3831:21;3326:604;2890:1040;;3326:604;3899:12;;;;;;;;426:4679:21;3899:12:23;:::o;2708:97::-;2771:7;2751:35;;2765:21;:14;2771:7;;;;:::i;2751:35::-;2708:97;;1866:190;2044:1;1866:190;;;;;1805:50;1838:17;;;426:4679:21;1838:17:23;;426:4679:21;1838:17:23;3008:1033:25;;;;;;3233:26;3357:4;426:4679:21;3329:25:25;3335:18;;;;;;:::i;3329:25::-;426:4679:21;3329:32:25;3325:57;;3425:4;426:4679:21;3396:25:25;3402:18;;;;;;:::i;3396:25::-;426:4679:21;3396:33:25;3425:4;;3466:18;;3445:48;3455:38;3460:32;:25;3466:18;;3445:48;3466:18;;;;:::i;3445:48::-;3392:154;;3653:4;426:4679:21;3624:25:25;3630:18;;;;;;:::i;3624:25::-;426:4679:21;3624:33:25;3620:62;;-1:-1:-1;;;;;426:4679:21;3717:105:25;;;426:4679:21;3717:105:25;;;;3835:24;3831:57;;3898:12;3965:69;3898:12;;:::i;:::-;3965:69;;:::i;3831:57::-;3868:20;;;-1:-1:-1;3868:20:25;;-1:-1:-1;3868:20:25;3620:62;3666:16;;;;;;;;3392:154;3524:11;;;;:::i;:::-;3392:154;;;5001:139:20;5078:10;426:4679:21;-1:-1:-1;426:4679:21;;;;;;;;5113:20:20;426:4679:21;;;;;;;;5001:139:20;:::o;426:4679:21:-;;;;;;;;;;;:::i;:::-;2457:1:24;426:4679:21;;;-1:-1:-1;;426:4679:21;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;2143:1860:24:-;426:4679:21;;2257:21:24;;;2253:56;;2335:19;2341:12;;;;;:::i;2335:19::-;426:4679:21;;;;2378:4:24;2369:13;;2378:4;;;2447:12;;;;;:::i;:::-;426:4679:21;;;-1:-1:-1;;;;;;426:4679:21;;2473:26:24;;426:4679:21;2473:26:24;:::i;:::-;;2513:18;2457:1;2513:18;:::o;2365:1632::-;2552:13;;;;;2561:4;2552:13;;2561:4;;;2626:13;;2609:30;2626:13;;:::i;2609:30::-;2675:17;;;;:::i;:::-;2711:13;426:4679:21;2726:10:24;;;;;;2904;;;;;;:::i;2711:13::-;2774:10;2769:20;;2774:14;2783:1;2774:10;;;;:::i;:14::-;2769:20;;:::i;:::-;426:4679:21;2757:32:24;;;;;:::i;:::-;;426:4679:21;2711:13:24;;2548:1449;2945:4;-1:-1:-1;2945:4:24;;;3014:13;2992:35;3014:13;;:::i;2992:35::-;426:4679:21;3078:13:24;426:4679:21;3093:15:24;;;;;;3302:17;;;;:::i;:::-;3338:13;426:4679:21;3353:10:24;;;;;;3545:15;;;;;:24;:15;;:::i;3338:13::-;3401:10;3396:34;;3401:28;3174:1;3401:10;:24;:10;;;;:::i;3396:34::-;426:4679:21;3384:46:24;;;;;:::i;:::-;;426:4679:21;3338:13:24;;3078;3139:11;3174:1;;426:4679:21;;3138:43:24;3154:27;3160:20;;3165:14;:10;;;;:::i;:14::-;3160:20;;:::i;3138:43::-;;426:4679:21;;3078:13:24;;2932:1065;3676:27;;;;;;:::i;:::-;3739:22;;;;:::i;:::-;3780:13;426:4679:21;3795:15:24;;;;;;3958:28;;;;;:::o;3780:13::-;3848:10;3843:16;;3848:10;426:4679:21;3848:10:24;;;:::i;3843:16::-;426:4679:21;3831:28:24;;;;;:::i;:::-;;426:4679:21;3780:13:24;;4233:351:23;4392:1;;4233:351;4403:153;426:4679:21;;4410:20:23;;;;;4456:26;;;;:::i;:::-;426:4679:21;;;;;;;;4446:36:23;426:4679:21;;4403:153:23;;;4410:20;;;4233:351::o;426:4679:21:-;;;;;;;;;7928:1:23;426:4679:21;;;;;;;:::o;7310:1816:23:-;;;;;7616:26;;;;:::i;:::-;7673:9;;7740:26;7686:4;7667:16;7673:9;;;;:::i;7667:16::-;:23;7666:30;;7740:26;;:::i;:::-;7777:1343;;;;;;426:4679:21;7885:26:23;426:4679:21;;7885:26:23;;:::i;:::-;7915:14;426:4679:21;;7915:14:23;:::i;:::-;7885:44;7881:546;;7777:1343;8441:29;;;;;;;7680:1;8441:29;7680:1;8441:29;7680:1;8441:29;:::o;7881:546::-;7949:22;;7967:4;426:4679:21;;;7989:114:23;;7881:546;8121:292;;;;;7881:546;;;;8121:292;8187:38;8202:22;;;;:::i;:::-;8187:38;;:::i;:::-;426:4679:21;7686:4:23;426:4679:21;;;;8251:20:23;426:4679:21;7686:4:23;426:4679:21;;;;8275:16:23;8251:40;8247:148;;8121:292;;;;;;8247:148;8333:26;426:4679:21;;8333:26:23;;:::i;:::-;7967:4;;7680:1;;8319:53::o;7989:114::-;8048:36;;;;:::i;:::-;7989:114;;;;;7777:1343;8535:37;8536:36;;;;;;;;:::i;8535:37::-;8531:105;;8676:38;8691:22;;;;:::i;8676:38::-;8728:12;;426:4679:21;;7686:4:23;8758:20;;8754:294;7686:4;;;8798:80;7686:4;9076:26;8798:80;;;8754:294;;426:4679:21;9076:26:23;;:::i;:::-;9062:47;9070:4;9062:47;;;:::o;8754:294::-;8902:18;;;;7686:4;9076:26;426:4679:21;;8947:18:23;8898:150;8754:294;;8898:150;9004:29;;;;7680:1;9004:29;7680:1;9004:29;7680:1;9004:29;:::o;8531:105::-;8592:29;;;;;7680:1;8592:29;7680:1;8592:29;7680:1;8592:29;:::o;5044:1795::-;;;;;5315:14;426:4679:21;;5315:14:23;:::i;:::-;5302:27;;;5298:630;;5998:13;5994:18;;5988:25;5998:13;;;426:4679:21;;;;5998:13:23;5994:18;;:::i;5988:25::-;426:4679:21;;;6027:13:23;;426:4679:21;;;;6023:122:23;;6244:13;-1:-1:-1;6239:165:23;6259:10;426:4679:21;;;6259:10:23;;;;6441:28;;;;;:::i;:::-;426:4679:21;;;6483:20:23;;6479:96;;6812:13;;6630:2;6611:21;;6630:2;;;6648:73;;;;6607:181;6812:13;:::i;6607:181::-;6630:2;426:4679:21;6758:19:23;6607:181;6812:13;:::i;6479:96::-;6519:29;;;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;:::o;6244:13::-;6302:32;;426:4679:21;6286:48:23;6302:32;;426:4679:21;6302:32:23;;;:::i;6286:48::-;426:4679:21;;;;6244:13:23;;-1:-1:-1;6244:13:23;;6023:122;6130:4;6121:13;6023:122;;;5298:630;5401:32;;;;;;-1:-1:-1;5447:179:23;5467:6;5471:2;5467:6;;;;5667:27;;;;:::i;:::-;426:4679:21;;;;;;5712:20:23;426:4679:21;;;;;;5736:16:23;5712:40;5708:210;5736:16;;;426:4679:21;5772:36:23;;-1:-1:-1;5772:36:23;:::o;5708:210::-;-1:-1:-1;;;;;;;5874:29:23:o;5452:13::-;5509:31;5494:46;5509:31;;426:4679:21;5509:31:23;;;:::i;5494:46::-;426:4679:21;;5452:13:23;;;;4358:1914:25;;;;;4558:29;4660:4;426:4679:21;4632:25:25;4638:18;;;;;;:::i;4632:25::-;426:4679:21;4632:32:25;4628:57;;4728:4;426:4679:21;4699:25:25;4705:18;;;;;;:::i;4699:25::-;426:4679:21;4699:33:25;4728:4;;4769:18;4748:48;4758:38;4763:32;:25;4769:18;;4748:48;4769:18;;;;:::i;4748:48::-;735:66;4925:33;;;;;:::i;:::-;4972:30;4968:64;;5316:27;5261:33;5204:27;5115;5308:36;5115:27;;;;:::i;:::-;5204;;;:::i;:::-;5261:33;;;:::i;5308:36::-;-1:-1:-1;;;;;426:4679:21;;;;;5308:49:25;5304:81;;5457:33;;;;;:::i;:::-;5528:17;426:4679:21;5594:18:25;5588:25;5594:18;;;;;;:::i;5588:25::-;426:4679:21;;;;;5644:4:25;5631:17;;5644:4;;;5668:22;;;;;5627:541;6191:27;6187:56;;6261:4;4358:1914;:::o;6187:56::-;6227:16;;;426:4679:21;6227:16:25;;426:4679:21;6227:16:25;5627:541;5715:18;;;;;5644:4;5715:18;;5711:457;5644:4;;;5753:13;;;;;;426:4679:21;5627:541:25;;5711:457;5805:4;-1:-1:-1;5805:4:25;;5843:17;5829:31;5843:17;;;;;:::i;5829:31::-;5883:13;426:4679:21;5878:218:25;5898:7;;;;;;5787:381;;;;;5627:541;;5883:13;5943:14;;;;;;5987:1;5943:14;426:4679:21;;;;5943:14:25;5942:52;5961:33;5967:26;;5978:14;:10;;;;:::i;5942:52::-;;426:4679:21;;5883:13:25;;;;;;5304:81;5366:19;;;426:4679:21;5366:19:25;;426:4679:21;5366:19:25;4968:64;5011:21;;;426:4679:21;5011:21:25;;426:4679:21;5011:21:25;4695:154;4827:11;;;;:::i;:::-;4695:154;;4217:1141:24;;426:4679:21;;4321:21:24;;;4317:56;;4399:19;4405:12;;;;;:::i;4399:19::-;426:4679:21;;;;4442:4:24;4433:13;;4442:4;;;4462:8;;;;4469:1;4462:8;:::o;4429:923::-;4500:4;4491:13;;4500:4;;;4532:13;;;4527:19;4532:13;4520:26;4532:13;;:::i;4487:865::-;4576:4;4567:13;;4576:4;;;4618:13;;;4596:35;4618:13;;:::i;4596:35::-;4645:18;426:4679:21;4682:13:24;426:4679:21;4677:194:24;4697:15;;;;;;4891;;;;;:24;:15;;:::i;4682:13::-;4743:11;;;;4778:1;4743:11;426:4679:21;;;;4743:11:24;4742:43;4758:27;4764:20;;4769:14;:10;;;;:::i;:14::-;4764:20;;:::i;4742:43::-;;426:4679:21;;4682:13:24;;;;4563:789;4945:4;-1:-1:-1;4945:4:24;;;4977:13;;4972:19;4977:13;4965:26;4977:13;;:::i;4932:420::-;5044:13;;5022:35;5044:13;;:::i;5022:35::-;5071:18;426:4679:21;5108:13:24;426:4679:21;5103:194:24;5123:15;;;;;;5317;;;;;:24;:15;;:::i;5108:13::-;5169:11;;;;5204:1;5169:11;426:4679:21;;;;5169:11:24;5168:43;5184:27;5190:20;;5195:14;:10;;;;:::i;5168:43::-;;426:4679:21;;5108:13:24;;;;9295:1058:23;;426:4679:21;;9395:19:23;9391:39;;9459:17;9465:10;;;;:::i;9459:17::-;9512:4;9500:16;;9499:23;9512:4;;9596:33;9606:22;:18;426:4679:21;;9606:18:23;:::i;:::-;:22;:::i;:::-;9596:33;:::i;:::-;426:4679:21;;;-1:-1:-1;;;426:4679:21;9413:1:23;9643:36;;426:4679:21;9643:36:23;:::i;:::-;;9627:1;9698:13;426:4679:21;;9713:18:23;;;;;9785:10;9772:30;9779:22;:17;9785:10;;9627:1;9785:10;;;:::i;9779:17::-;426:4679:21;;;;;;9779:22:23;426:4679:21;;-1:-1:-1;;;;;;426:4679:21;;;9772:30:23;9752:50;9759:9;:5;;;:::i;:9::-;9752:50;9413:1;9752:50;;;;:::i;:::-;;9836:32;9674:4;9843:17;9849:10;;;;;:::i;9843:17::-;:24;426:4679:21;;-1:-1:-1;;;;;;426:4679:21;;;9836:32:23;9820:48;9827:5;;;:::i;9820:48::-;;426:4679:21;9698:13:23;;9713:18;-1:-1:-1;9713:18:23;-1:-1:-1;9295:1058:23:o;9562:761::-;426:4679:21;9993:33:23;10003:22;:18;426:4679:21;;10003:18:23;:::i;:::-;:22;:::i;9993:33::-;10057:1;10045:13;426:4679:21;;10060:18:23;;;;;10134:10;10121:30;10128:22;:17;10134:10;;10057:1;10134:10;;;:::i;10121:30::-;10099:52;10106:11;10107:5;;;:::i;:::-;10106:11;:::i;10099:52::-;;10195:32;10222:4;10202:17;10208:10;;;;;:::i;10195:32::-;10169:58;10176:15;:11;10177:5;;;:::i;10176:11::-;:15;:::i;10169:58::-;;426:4679:21;10045:13:23;;10590:651;;;;10709:23;426:4679:21;;10709:23:23;;:::i;:::-;10735:14;426:4679:21;;10735:14:23;:::i;:::-;-1:-1:-1;10705:58:23;;-1:-1:-1;10779:13:23;426:4679:21;;10794:18:23;;;;;10862:16;10863:10;;;;:::i;:::-;426:4679:21;;;;10862:16:23;10863:10;;10915:33;:28;10921:21;;10925:16;10926:10;;;;:::i;:::-;426:4679:21;;;;10925:16:23;10921:21;;:::i;10915:33::-;426:4679:21;11067:30:23;11080:17;11086:10;;;;;:::i;11067:30::-;426:4679:21;;11067:30:23;11063:81;;426:4679:21;;10779:13:23;;11063:81;11117:12;;;;-1:-1:-1;11117:12:23;:::o;10858:191::-;11030:4;10999:28;11005:21;;11009:16;11010:10;;;;:::i;10999:28::-;:35;10858:191;;10794:18;;;;;426:4679:21;10590:651:23;:::o;10705:58::-;10751:12;;;-1:-1:-1;10751:12:23;:::o;5563:305:24:-;;;-1:-1:-1;;;426:4679:21;-1:-1:-1;;;;;;426:4679:21;5670:12:24;;5563:305;;;5670:12;:::i;:::-;;426:4679:21;5670:20:24;5666:50;;5750:89;;;;;5563:305::o;5666:50::-;5699:17;;;-1:-1:-1;5699:17:24;;-1:-1:-1;5699:17:24","linkReferences":{},"immutableReferences":{"40183":[{"start":358,"length":32},{"start":1036,"length":32},{"start":1401,"length":32},{"start":2695,"length":32}],"40191":[{"start":1118,"length":32},{"start":2124,"length":32}],"40193":[{"start":498,"length":32},{"start":2090,"length":32}],"40607":[{"start":645,"length":32},{"start":851,"length":32},{"start":1280,"length":32},{"start":1562,"length":32},{"start":2158,"length":32},{"start":3973,"length":32},{"start":4119,"length":32}]}},"methodIdentifiers":{"MAX_BLOCK_LOOKBACK()":"3d2691bc","bond(uint256)":"9940686e","bondAmount()":"80f323a7","bondedExecutor()":"1aa7c0ec","cancelAndWithdraw()":"6b892b22","cancellationRequest()":"308657d7","collect((bytes,bytes,bytes,bytes,uint256),uint256)":"ede7f6a3","currentPaymentAmount()":"8bd03d0a","currentRewardAmount()":"5a4fd645","executionDeadline()":"33ee5f35","expectedAmount()":"2feef2ec","expectedRecipient()":"8677ab23","fund(uint256,uint256)":"a65e2cfd","funded()":"f3a504f2","is_bonded()":"cb766a56","originalRewardAmount()":"d415b3f9","requestCancellation()":"81972d00","resume()":"046f7da2","tokenContract()":"55a373d6","totalBondsDeposited()":"fe03a460"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expectedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentRewardAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentPaymentAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHashUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHeaderMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockNumberMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CancellationRequested\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutorAlreadyBonded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedBytes32\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBond\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLP\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPEncoding\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReceiptProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransferEvent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoWithdrawableFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyBondedExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDeployer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RLPOffsetOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockInFuture\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockTooOld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ToAddressMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongEventSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongTokenContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPaymentAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroRewardAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MAX_BLOCK_LOOKBACK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondedExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelAndWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancellationRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"blockHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptRlp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofNodes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptPath\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"logIndex\",\"type\":\"uint256\"}],\"internalType\":\"struct EscrowERC20.ReceiptProof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"targetBlockNumber\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentPaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executionDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentRewardAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"fund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"funded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_bonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"originalRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestCancellation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBondsDeposited\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelAndWithdraw()\":{\"notice\":\"Cancel and withdraw funds in a single transaction. Reverts if a node has already bonded.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/EscrowERC20.sol\":\"EscrowERC20\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"src/BlockHeaderParser.sol\":{\"keccak256\":\"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6\",\"dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p\"]},\"src/EscrowBase.sol\":{\"keccak256\":\"0x53fd262562c9dbc7779339bafbeca6b86b690aec7ac864e30c57e0e42288a11d\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cb43380f5b0a131e1ac4405a43a67b9d2b07718eb05ba675fe46c106b8a12649\",\"dweb:/ipfs/QmNk5QkryXnDspEGc8mdyFYJSRXWRSP8V6yirLC98EKZYG\"]},\"src/EscrowERC20.sol\":{\"keccak256\":\"0x33e054750cf105681bbcb49f94245b6c415845657f0a843f53f40b947713f68c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cd2751e798bf4cfa05f0c6ba80320d993ed0cf7053a5f5878d524dd67049401f\",\"dweb:/ipfs/QmUumceDHvrTdqh5V4L1PpiJjDphxhsXXcsXfPD8qxA3zR\"]},\"src/MPTVerifier.sol\":{\"keccak256\":\"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b\",\"dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU\"]},\"src/RLPParser.sol\":{\"keccak256\":\"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d\",\"dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk\"]},\"src/ReceiptValidator.sol\":{\"keccak256\":\"0x625137f131a6524c06e6c7c6ddc4c3f10256ac8a306b53b2dfed4fe9a3ed9728\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://611b99fa26ae364ea2e0aa721f62ca043ca6d5b0e2bc1c96278639792242f43f\",\"dweb:/ipfs/QmXFkR6amwaZF1QZqZjsneEXBz8C17QmCFyirmHo7eaUaH\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"address","name":"_expectedRecipient","type":"address"},{"internalType":"uint256","name":"_expectedAmount","type":"uint256"},{"internalType":"uint256","name":"_currentRewardAmount","type":"uint256"},{"internalType":"uint256","name":"_currentPaymentAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyFunded"},{"inputs":[],"type":"error","name":"AmountMismatch"},{"inputs":[],"type":"error","name":"BlockHashUnavailable"},{"inputs":[],"type":"error","name":"BlockHeaderMismatch"},{"inputs":[],"type":"error","name":"BlockNumberMismatch"},{"inputs":[],"type":"error","name":"BondActive"},{"inputs":[],"type":"error","name":"CancellationRequested"},{"inputs":[],"type":"error","name":"ExecutorAlreadyBonded"},{"inputs":[],"type":"error","name":"ExpectedBytes32"},{"inputs":[],"type":"error","name":"ExpectedRLPList"},{"inputs":[],"type":"error","name":"InsufficientBond"},{"inputs":[],"type":"error","name":"InvalidAddress"},{"inputs":[],"type":"error","name":"InvalidRLP"},{"inputs":[],"type":"error","name":"InvalidRLPEncoding"},{"inputs":[],"type":"error","name":"InvalidRLPList"},{"inputs":[],"type":"error","name":"InvalidReceiptProof"},{"inputs":[],"type":"error","name":"InvalidTransferEvent"},{"inputs":[],"type":"error","name":"NoWithdrawableFunds"},{"inputs":[],"type":"error","name":"NotFunded"},{"inputs":[],"type":"error","name":"OnlyBondedExecutor"},{"inputs":[],"type":"error","name":"OnlyDeployer"},{"inputs":[],"type":"error","name":"RLPOffsetOutOfBounds"},{"inputs":[],"type":"error","name":"TargetBlockInFuture"},{"inputs":[],"type":"error","name":"TargetBlockTooOld"},{"inputs":[],"type":"error","name":"ToAddressMismatch"},{"inputs":[],"type":"error","name":"TokenTransferFailed"},{"inputs":[],"type":"error","name":"WrongEventSignature"},{"inputs":[],"type":"error","name":"WrongTokenContract"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroPaymentAmount"},{"inputs":[],"type":"error","name":"ZeroRewardAmount"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_BLOCK_LOOKBACK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_bondAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"bond"},{"inputs":[],"stateMutability":"view","type":"function","name":"bondAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bondedExecutor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancelAndWithdraw"},{"inputs":[],"stateMutability":"view","type":"function","name":"cancellationRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct EscrowERC20.ReceiptProof","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"blockHeader","type":"bytes"},{"internalType":"bytes","name":"receiptRlp","type":"bytes"},{"internalType":"bytes","name":"proofNodes","type":"bytes"},{"internalType":"bytes","name":"receiptPath","type":"bytes"},{"internalType":"uint256","name":"logIndex","type":"uint256"}]},{"internalType":"uint256","name":"targetBlockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"collect"},{"inputs":[],"stateMutability":"view","type":"function","name":"currentPaymentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"currentRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"executionDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedRecipient","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_currentRewardAmount","type":"uint256"},{"internalType":"uint256","name":"_currentPaymentAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"fund"},{"inputs":[],"stateMutability":"view","type":"function","name":"funded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"is_bonded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"originalRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"requestCancellation"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resume"},{"inputs":[],"stateMutability":"view","type":"function","name":"tokenContract","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalBondsDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"cancelAndWithdraw()":{"notice":"Cancel and withdraw funds in a single transaction. Reverts if a node has already bonded."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/EscrowERC20.sol":"EscrowERC20"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"src/BlockHeaderParser.sol":{"keccak256":"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550","urls":["bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6","dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p"],"license":"UNLICENSED"},"src/EscrowBase.sol":{"keccak256":"0x53fd262562c9dbc7779339bafbeca6b86b690aec7ac864e30c57e0e42288a11d","urls":["bzz-raw://cb43380f5b0a131e1ac4405a43a67b9d2b07718eb05ba675fe46c106b8a12649","dweb:/ipfs/QmNk5QkryXnDspEGc8mdyFYJSRXWRSP8V6yirLC98EKZYG"],"license":"UNLICENSED"},"src/EscrowERC20.sol":{"keccak256":"0x33e054750cf105681bbcb49f94245b6c415845657f0a843f53f40b947713f68c","urls":["bzz-raw://cd2751e798bf4cfa05f0c6ba80320d993ed0cf7053a5f5878d524dd67049401f","dweb:/ipfs/QmUumceDHvrTdqh5V4L1PpiJjDphxhsXXcsXfPD8qxA3zR"],"license":"UNLICENSED"},"src/MPTVerifier.sol":{"keccak256":"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb","urls":["bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b","dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU"],"license":"UNLICENSED"},"src/RLPParser.sol":{"keccak256":"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c","urls":["bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d","dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk"],"license":"UNLICENSED"},"src/ReceiptValidator.sol":{"keccak256":"0x625137f131a6524c06e6c7c6ddc4c3f10256ac8a306b53b2dfed4fe9a3ed9728","urls":["bzz-raw://611b99fa26ae364ea2e0aa721f62ca043ca6d5b0e2bc1c96278639792242f43f","dweb:/ipfs/QmXFkR6amwaZF1QZqZjsneEXBz8C17QmCFyirmHo7eaUaH"],"license":"UNLICENSED"}},"version":1},"id":21} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_tokenContract","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_commitment","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_BLOCK_LOOKBACK","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bond","inputs":[{"name":"_bondAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bondAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bondedExecutor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"cancelAndWithdraw","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancellationRequest","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"collect","inputs":[{"name":"proof","type":"tuple","internalType":"struct EscrowERC20.ReceiptProof","components":[{"name":"blockHeader","type":"bytes","internalType":"bytes"},{"name":"receiptRlp","type":"bytes","internalType":"bytes"},{"name":"proofNodes","type":"bytes","internalType":"bytes"},{"name":"receiptPath","type":"bytes","internalType":"bytes"},{"name":"logIndex","type":"uint256","internalType":"uint256"}]},{"name":"targetBlockNumber","type":"uint256","internalType":"uint256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitment","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"executionDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"fund","inputs":[{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_commitment","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"funded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"is_bonded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"originalDeposit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"requestCancellation","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resume","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"totalBondsDeposited","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"error","name":"AlreadyFunded","inputs":[]},{"type":"error","name":"BlockHashUnavailable","inputs":[]},{"type":"error","name":"BlockHeaderMismatch","inputs":[]},{"type":"error","name":"BlockNumberMismatch","inputs":[]},{"type":"error","name":"BondActive","inputs":[]},{"type":"error","name":"CancellationRequested","inputs":[]},{"type":"error","name":"CommitmentMismatch","inputs":[]},{"type":"error","name":"ExecutorAlreadyBonded","inputs":[]},{"type":"error","name":"ExpectedBytes32","inputs":[]},{"type":"error","name":"ExpectedRLPList","inputs":[]},{"type":"error","name":"InsufficientBond","inputs":[]},{"type":"error","name":"InvalidAddress","inputs":[]},{"type":"error","name":"InvalidRLP","inputs":[]},{"type":"error","name":"InvalidRLPEncoding","inputs":[]},{"type":"error","name":"InvalidRLPList","inputs":[]},{"type":"error","name":"InvalidReceiptProof","inputs":[]},{"type":"error","name":"NoWithdrawableFunds","inputs":[]},{"type":"error","name":"NotFunded","inputs":[]},{"type":"error","name":"OnlyBondedExecutor","inputs":[]},{"type":"error","name":"OnlyDeployer","inputs":[]},{"type":"error","name":"RLPOffsetOutOfBounds","inputs":[]},{"type":"error","name":"TargetBlockInFuture","inputs":[]},{"type":"error","name":"TargetBlockTooOld","inputs":[]},{"type":"error","name":"TokenTransferFailed","inputs":[]},{"type":"error","name":"WrongEventSignature","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}],"bytecode":{"object":"0x60c0806040523461015f57606081612140803803809161001f8285610194565b83398101031261015f578051906001600160a01b03821680830361015f5760406020830151920151923360805281156101855760a052811580156100b7575b604051611f7490816101cc8239608051818181610146015281816103dd015281816106310152610889015260a051818181610248015281816102ff01528181610470015281816106bf01528181610ebf0152610f510152f35b610176576064825f9460209486558160015560025560405194859384926323b872dd60e01b845233600485015230602485015260448401525af190811561016b575f9161012c575b501561011d5761010061ff001960075416176007555f80808061005e565b63022e258160e11b5f5260045ffd5b90506020813d602011610163575b8161014760209383610194565b8101031261015f5751801515810361015f575f6100ff565b5f80fd5b3d915061013a565b6040513d5f823e3d90fd5b631f2a200560e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b601f909101601f19168101906001600160401b038211908210176101b757604052565b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101345780631303a4841461012f5780631aa7c0ec1461012a578063308657d71461012557806333ee5f35146101205780633d2691bc1461011b57806355a373d6146101165780636b892b22146101115780637fd0368b1461010c57806380f323a71461010757806381972d00146101025780639940686e146100fd578063b1dd0800146100f8578063c41020eb146100f3578063cb766a56146100ee578063d0e30db0146100e9578063f3a504f2146100e45763fe03a460146100df575f80fd5b6107b3565b61078e565b610772565b61074e565b610618565b6104d0565b61041a565b6103cb565b6103ae565b610391565b610277565b610233565b610217565b6101fa565b6101d8565b6101b0565b610193565b3461018f575f36600319011261018f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610180576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461018f575f36600319011261018f576020600254604051908152f35b3461018f575f36600319011261018f576003546040516001600160a01b039091168152602090f35b3461018f575f36600319011261018f57602060ff600754166040519015158152f35b3461018f575f36600319011261018f576020600454604051908152f35b3461018f575f36600319011261018f5760206040516101008152f35b3461018f575f36600319011261018f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461018f575f36600319011261018f57610299600160ff196007541617600755565b6102a1610879565b6102a96108c8565b60015480156103825760206102fa916102d361ff0019600754166007555f80555f6001555f600255565b60405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f9161034e575b501561033f57005b63022e258160e11b5f5260045ffd5b610370915060203d602011610376575b61036881836107e4565b81019061080b565b5f610337565b503d61035e565b610823565b6353cd7f7960e01b5f5260045ffd5b3461018f575f36600319011261018f576020600154604051908152f35b3461018f575f36600319011261018f576020600554604051908152f35b3461018f575f36600319011261018f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610180576007805460ff19166001179055005b3461018f57602036600319011261018f5760043561043661094f565b61043f81610998565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561037d575f916104b1575b501561033f576104af906109f4565b005b6104ca915060203d6020116103765761036881836107e4565b5f6104a0565b3461018f57606036600319011261018f5760043567ffffffffffffffff811161018f57806004019060a0600319823603011261018f576044359161052060243561051a838061082e565b90610a98565b61053361052d828061082e565b90610bbc565b9061057161056d6024850193610549858561082e565b90610557604489018761082e565b9061056560648b018961082e565b949093610c2c565b1590565b610609576105d992608461058b6105e7946105969461082e565b919092013591610cb0565b6040516bffffffffffffffffffffffff19606093841b8116602083019081529490931b909216603483015260488201526068810194909452929182906088820190565b03601f1981018352826107e4565b519020600254036105fa576104af610e3a565b635054097b60e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b3461018f57604036600319011261018f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101805760ff60075460081c1661073f578115610730578161068d6020926106ba945f5561068883600155565b600255565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f91610711575b501561033f576104af61010061ff00196007541617600755565b61072a915060203d6020116103765761036881836107e4565b5f6106f7565b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461018f575f36600319011261018f576020610768610861565b6040519015158152f35b3461018f575f36600319011261018f5760205f54604051908152f35b3461018f575f36600319011261018f57602060ff60075460081c166040519015158152f35b3461018f575f36600319011261018f576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761080657604052565b6107d0565b9081602091031261018f5751801515810361018f5790565b6040513d5f823e3d90fd5b903590601e198136030182121561018f570180359067ffffffffffffffff821161018f5760200191813603831361018f57565b6004548015159081610871575090565b905042111590565b60ff60075460081c16156108b9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361018057565b636af784dd60e11b5f5260045ffd5b6108d0610861565b6108f0576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b906001820180921161092157565b6108ff565b600101908160011161092157565b906015820180921161092157565b9190820180921161092157565b600454801515908161098e575b5061096357565b6005545f54818101809111610921575f556006549081018091116109215760065561098c6108c8565b565b905042115f61095c565b60075460ff8160081c16156108b95760ff166109e5576109b6610861565b6109d6576101905f5404116109c757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600354161760035561012c420180421161092157600455600555565b60011981019190821161092157565b5f1981019190821161092157565b9190820391821161092157565b67ffffffffffffffff811161080657601f01601f191660200190565b929192610a6e82610a46565b91610a7c60405193846107e4565b82948184528183011161018f578281602093845f960137010152565b90610aac61056d60075460ff9060081c1690565b6108b957600354610acd906001600160a01b03165b6001600160a01b031690565b3314801590610b7d575b610b6e57438311610b5f57610100610aef8443610a39565b11610b505782408015610b4157610b07368385610a62565b6020815191012003610b3257610b1c91610fae565b03610b2357565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610b8961056d610861565b610ad7565b634e487b7160e01b5f52603260045260245ffd5b9015610bab5790565b610b8e565b90821015610bab570190565b90610bc7818361106a565b905f5b60058110610c175750600560fd1b906001600160f81b031990610bef90849086610bb0565b351603610c085760018101811161092157016001013590565b633954003560e11b5f5260045ffd5b91610c25600191838661119e565b9201610bca565b610c42610c4a92939495610c5098973691610a62565b923691610a62565b90611326565b90565b60ff60f6199116019060ff821161092157565b60ff607f199116019060ff821161092157565b60ff60bf199116019060ff821161092157565b60ff60b6199116019060ff821161092157565b60ff166001019060ff821161092157565b9291905f81151580610e1e575b610e16575b60c060ff610ceb610ce5610cd785878b610bb0565b356001600160f81b03191690565b60f81c90565b1610610de45760f860ff610d06610ce5610cd785878b610bb0565b1610610e085780610d3a610d34610d2f610d2a610ce5610cd7610d4097898d610bb0565b610c53565b610c9f565b60ff1690565b90610942565b5f5b60038110610df3575060c0610d61610d34610ce5610cd785878b610bb0565b10610de45760f8610d7c610d34610ce5610cd785878b610bb0565b10610dd55780610d3a610d34610d2f610d2a610ce5610cd7610d9f97898d610bb0565b915b5f905b808210610dbe575050610db792936114d3565b9192909190565b9092610dcd600191848861119e565b930190610da4565b610dde90610913565b91610da1565b631bd5dcf760e31b5f5260045ffd5b90610e01600191848861119e565b9101610d42565b610e1190610913565b610d40565b506001610cc2565b50608060ff610e33610ce5610cd7868a610ba2565b1610610cbd565b610e42611588565b6003546001600160a01b0316610e836001600160601b0360a01b600354166003555f6005555f60045561ff0019600754166007555f80555f6001555f600255565b4662aa36a703610f1f57604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f91610f00575b505b1561033f57565b610f19915060203d6020116103765761036881836107e4565b5f610ef7565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f91610f8f575b50610ef9565b610fa8915060203d6020116103765761036881836107e4565b5f610f89565b610fb8828261106a565b915f5b600881106110555750610fd5610ce5610cd7858486610bb0565b925f9260ff851694608086105f14610fef57505050505090565b6110009193949550610d3490610c66565b915f935b83851061101357505050505090565b909192939461102460019160081b90565b611049610d34610ce5610cd76110428b61103d8b610913565b610942565b8789610bb0565b17950193929190611004565b92611063600191838561119e565b9301610fbb565b5f600360fe1b6001600160f81b0319611086610cd78686610ba2565b161061116657601f60fb1b6001600160f81b03196110a7610cd78686610ba2565b16106111955780610d3a610d34610d2f610d2a610ce5610cd76110cb978a8a610bb0565b905b61a5bd4614801561118a575b6110e4575b50905090565b5f5b600381106111755750600360fe1b611112611105610cd7858786610bb0565b6001600160f81b03191690565b1061116657601f60fb1b61112d611105610cd7858786610bb0565b1061115657610d34610d2f610d2a610ce5610cd78661114f98610d3a97610bb0565b805f6110de565b506111619150610913565b61114f565b63c0098bd960e01b5f5260045ffd5b91611183600191858461119e565b92016110e6565b5061a5bf46146110d9565b506001906110cd565b9190808210156112f9576111b9610ce5610cd7848487610bb0565b9060ff821660808110156111d457505050610c509150610913565b91929160b88110156111fc575050610c509250610d346111f6610d3a92610913565b92610c66565b90929060c08110156112725750610d3461121891949394610c8c565b915f935f915b84831061123957505050610c50929161103d61103d92610913565b90919461124860019160081b90565b611268610d34610ce5610cd76112618b61103d8b610913565b8888610bb0565b179501919061121e565b90929060f811156112985750610c509250610d34611292610d3a92610913565b92610c79565b9291610d346112a691610c53565b915f935f915b8483106112c757505050610c50929161103d61103d92610913565b9091946112d660019160081b90565b6112ef610d34610ce5610cd76112618b61103d8b610913565b17950191906112ac565b6318d76ae160e11b5f5260045ffd5b805115610bab5760200190565b908151811015610bab570160200190565b919390929190600360fe1b6001600160f81b0319611347610cd78689610ba2565b16106114c457601f60fb1b6001600160f81b0319611368610cd78689610ba2565b16106114ba5761138c611387610d34610d2a610ce5610cd7888b610ba2565b610926565b9492905b945f5b8282106113a557505050505050505f90565b6113c36113bc836113b736878a610a62565b6115ed565b9093610942565b96825160208401200361145857600360fe1b6113f26111056113e485611308565b516001600160f81b03191690565b10611458578590846001601f60fb1b6114106111056113e488611308565b101561149c575b6114218186611794565b6011810361146357506114339461191f565b94911561145857841561144c5793915b91959093611393565b50505050505050600190565b505050505050505f90565b9093506002141590506114905784879261147c946117d9565b94911561145857841561144c579391611443565b50505050505050505f90565b506114b5611387610d34610d2a610ce56113e489611308565b611417565b6001949290611390565b63ebb47d1d60e01b5f5260045ffd5b92918060c060ff6114eb610ce5610cd785888b610bb0565b1610610de45760f860ff611506610ce5610cd785888b610bb0565b1610611578575080610d3a610d34610d2f610d2a610ce5610cd761152b97898c610bb0565b925b609460ff611542610ce5610cd7888787610bb0565b1603611569576115659161155f6001868401013560601c95610934565b91611a34565b9091565b63e6c4247b60e01b5f5260045ffd5b6115829150610913565b9261152d565b6005545f5481018091116109215790565b604080519091906115aa83826107e4565b6001815291601f1901366020840137565b906115c582610a46565b6115d260405191826107e4565b82815280926115e3601f1991610a46565b0190602036910137565b80518210156112f957611606610ce56113e48484611315565b9160ff8316608081101561163f5750505061161f611599565b9060f81b6001600160f81b0319165f1a61163882611308565b5390600190565b919392909160b88110156116a95750610d3461165a91610c66565b90611664826115bb565b935f5b83811061167a57505050610c5090610926565b806116966113e461169060019461103d88610913565b85611315565b5f1a6116a28289611315565b5301611667565b60c0111561174757610d346116bd91610c8c565b5f915f5b82811061171957506116d2836115bb565b945f5b8481106116ec575050509061103d610c5092610926565b806117066113e461169060019461103d8961103d8a610913565b5f1a611712828a611315565b53016116d5565b9260019060081b61173f610d34610ce56113e46117398961103d89610913565b8b611315565b1793016116c1565b50916117538382611bae565b9261175d846115bb565b915f5b85811061176e575050509190565b806117816113e461169060019487610942565b5f1a61178d8287611315565b5301611760565b5f92915b81518110156117bf576117ab8183611bae565b810180911161092157600190930192611798565b5050565b908160011b918083046002149015171561092157565b839492916117e781836115ed565b939061180660206117fd610ce56113e485611308565b16151591611cdb565b978891156118a8575061181a905187610942565b61182482516117c3565b14611839575b505050505050505f905f905f90565b86866001928251611896575b505050611853575b8061182a565b6118669261186091610942565b906115ed565b5060208151910120906020815191012014611884578080808061184d565b61188f915190610942565b6001915f90565b6118a09350611e44565b86865f611845565b6118b9939495965061056d92611e44565b611912576118ca9261186091610942565b50908151602081145f146118f2575060206118ea920151925b5190610942565b916001929190565b80156119065760206118ea930120926118e3565b505050505f905f905f90565b50505050505f905f905f90565b9190929361192d82516117c3565b8510156119d75750610ce56113e461194f926119498760011c90565b90611315565b600184166119ce5760041c600f16915b905f925b60ff811684106119ae575061197892506115ed565b50805180156119a3576118ea91602082036119995760209150015191610913565b6020012091610913565b5050505f905f905f90565b909160016119c282610d3a60ff9487611bae565b94019392919050611963565b600f169161195f565b9290509392935f915b60108310611a1a576119f292506115ed565b50602081519101209060208151910120145f14611a1157600191905f90565b5f915081908190565b90611a2b81610d3a60019385611bae565b920191906119e0565b909291925f908460c060ff611a50610ce5610cd78a878a610bb0565b1610610de45760f860ff611a6b610ce5610cd78a878a610bb0565b1610611b9f5780610d3a610d34610d2f610d2a610ce5610cd7611a8f97898c610bb0565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611abb828487611f02565b03611b9057611ae8610ac1610ac1611ae1611ada611af095878a61119e565b868961119e565b8588611f02565b95828561119e565b611b01610ce5610cd7838588610bb0565b60ff811694906080861015611b1857505050505090565b909192939594608081145f14611b3257505f955050505050565b60a010610de457610d34611b4891939293610c66565b915f935b838510611b5a575050505050565b9091929395611b6b60019160081b90565b611b84610d34610ce5610cd76110428c61103d8b610913565b17960193929190611b4c565b6324da545d60e11b5f5260045ffd5b50611ba985610913565b611a8f565b9081518110156112f957611bc8610ce56113e48385611315565b9160ff83166080811015611bdf5750505050600190565b60b8811015611bfa57505050610d34610d2f610c5092610c66565b60c0811015611c66575091610d34611c1191610c8c565b905f925f915b838310611c2e575050509061103d610c5092610926565b909193611c3d60019160081b90565b611c5c610d34610ce56113e4611c568a61103d89610913565b88611315565b1794019190611c17565b60f81115611c7f575050610d34610d2f610c5092610c79565b91610d34611c8c91610c53565b905f925f915b838310611ca9575050509061103d610c5092610926565b909193611cb860019160081b90565b611cd1610d34610ce56113e4611c568a61103d89610913565b1794019190611c92565b9081511561098c57611cf2610ce56113e484611308565b6010811615611dc157611d15611d10611d0b85516117c3565b610a2b565b6115bb565b9060f81b600f60f81b165f1a611d2a82611308565b5360015b8351811015611dbc5780611d69611d59611d50610ce56113e46001968a611315565b60041c600f1690565b60f81b6001600160f81b03191690565b611d82611d78611d0b846117c3565b915f1a9185611315565b53611da9600f611d98610ce56113e4858a611315565b1660f81b6001600160f81b03191690565b611db5611d78836117c3565b5301611d2e565b509150565b50611dd7611d10611dd284516117c3565b610a1c565b60015b8351811015611dbc5780611dfc611d59611d50610ce56113e46001968a611315565b611e10611d78611e0b84610a2b565b6117c3565b53611e26600f611d98610ce56113e4858a611315565b611e3d611d78611e38611e0b85610a2b565b610913565b5301611dda565b919091611e52825184610942565b611e5c82516117c3565b10611efb575f5b8251811015611ef257611e7f611e798286610942565b60011690565b611ed457611ea8611d50610ce56113e4611ea2611e9c868a610942565b60011c90565b86611315565b60ff611ebd610d34610ce56113e48689611315565b911603611ecc57600101611e63565b505050505f90565b600f611eec610ce56113e4611ea2611e9c868a610942565b16611ea8565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b031990611f2090849086610bb0565b351603611f2f57016001013590565b63f0ff325b60e01b5f5260045ffdfea264697066735822122063822cc15c03fce062227c8f4dcfbcbc9b4c0db5cb6f588ae379910ee65a74cb64736f6c634300081e0033","sourceMap":"426:4360:21:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;426:4360:21;;;;;;;;;;;;;;;1579:10:20;;1561:28;;1209::21;;1205:54;;1269:30;;1314:11;;;;1310:69;;-1:-1:-1;426:4360:21;;;;;;;;1561:28:20;426:4360:21;;;;;;;;;;;;;;;;;;;;1269:30;426:4360;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1310:69;1684:37;;1833:70;426:4360;-1:-1:-1;426:4360:21;;;;;;;;1794:24;426:4360;;;;;;;;;;;1833:70;;1579:10:20;1833:70:21;;;426:4360;1888:4;426:4360;;;;;;;;1833:70;;;;;;;-1:-1:-1;1833:70:21;;;1310:69;1832:71;;1828:130;;426:4360;;;1967:13;426:4360;;;1967:13;426:4360;1310:69;;;;;;1828:130;1926:21;;;-1:-1:-1;1926:21:21;1833:70;-1:-1:-1;1926:21:21;1833:70;;;426:4360;1833:70;;426:4360;1833:70;;;;;;426:4360;1833:70;;;:::i;:::-;;;426:4360;;;;;;;;;;;;1833:70;;;426:4360;-1:-1:-1;426:4360:21;;1833:70;;;-1:-1:-1;1833:70:21;;;426:4360;;;-1:-1:-1;426:4360:21;;;;;1684:37;1709:12;;;-1:-1:-1;1709:12:21;;-1:-1:-1;1709:12:21;1205:54;1246:13;;;-1:-1:-1;1246:13:21;;-1:-1:-1;1246:13:21;426:4360;;;;;-1:-1:-1;;426:4360:21;;;;-1:-1:-1;;;;;426:4360:21;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;426:4360:21;;;;;-1:-1:-1;426:4360:21","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101345780631303a4841461012f5780631aa7c0ec1461012a578063308657d71461012557806333ee5f35146101205780633d2691bc1461011b57806355a373d6146101165780636b892b22146101115780637fd0368b1461010c57806380f323a71461010757806381972d00146101025780639940686e146100fd578063b1dd0800146100f8578063c41020eb146100f3578063cb766a56146100ee578063d0e30db0146100e9578063f3a504f2146100e45763fe03a460146100df575f80fd5b6107b3565b61078e565b610772565b61074e565b610618565b6104d0565b61041a565b6103cb565b6103ae565b610391565b610277565b610233565b610217565b6101fa565b6101d8565b6101b0565b610193565b3461018f575f36600319011261018f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610180576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461018f575f36600319011261018f576020600254604051908152f35b3461018f575f36600319011261018f576003546040516001600160a01b039091168152602090f35b3461018f575f36600319011261018f57602060ff600754166040519015158152f35b3461018f575f36600319011261018f576020600454604051908152f35b3461018f575f36600319011261018f5760206040516101008152f35b3461018f575f36600319011261018f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461018f575f36600319011261018f57610299600160ff196007541617600755565b6102a1610879565b6102a96108c8565b60015480156103825760206102fa916102d361ff0019600754166007555f80555f6001555f600255565b60405163a9059cbb60e01b8152336004820152602481019190915291829081906044820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f9161034e575b501561033f57005b63022e258160e11b5f5260045ffd5b610370915060203d602011610376575b61036881836107e4565b81019061080b565b5f610337565b503d61035e565b610823565b6353cd7f7960e01b5f5260045ffd5b3461018f575f36600319011261018f576020600154604051908152f35b3461018f575f36600319011261018f576020600554604051908152f35b3461018f575f36600319011261018f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610180576007805460ff19166001179055005b3461018f57602036600319011261018f5760043561043661094f565b61043f81610998565b6040516323b872dd60e01b8152336004820152306024820152604481018290526020816064815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561037d575f916104b1575b501561033f576104af906109f4565b005b6104ca915060203d6020116103765761036881836107e4565b5f6104a0565b3461018f57606036600319011261018f5760043567ffffffffffffffff811161018f57806004019060a0600319823603011261018f576044359161052060243561051a838061082e565b90610a98565b61053361052d828061082e565b90610bbc565b9061057161056d6024850193610549858561082e565b90610557604489018761082e565b9061056560648b018961082e565b949093610c2c565b1590565b610609576105d992608461058b6105e7946105969461082e565b919092013591610cb0565b6040516bffffffffffffffffffffffff19606093841b8116602083019081529490931b909216603483015260488201526068810194909452929182906088820190565b03601f1981018352826107e4565b519020600254036105fa576104af610e3a565b635054097b60e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b3461018f57604036600319011261018f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101805760ff60075460081c1661073f578115610730578161068d6020926106ba945f5561068883600155565b600255565b6040516323b872dd60e01b8152336004820152306024820152604481019190915291829081906064820190565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f91610711575b501561033f576104af61010061ff00196007541617600755565b61072a915060203d6020116103765761036881836107e4565b5f6106f7565b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461018f575f36600319011261018f576020610768610861565b6040519015158152f35b3461018f575f36600319011261018f5760205f54604051908152f35b3461018f575f36600319011261018f57602060ff60075460081c166040519015158152f35b3461018f575f36600319011261018f576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761080657604052565b6107d0565b9081602091031261018f5751801515810361018f5790565b6040513d5f823e3d90fd5b903590601e198136030182121561018f570180359067ffffffffffffffff821161018f5760200191813603831361018f57565b6004548015159081610871575090565b905042111590565b60ff60075460081c16156108b9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361018057565b636af784dd60e11b5f5260045ffd5b6108d0610861565b6108f0576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b906001820180921161092157565b6108ff565b600101908160011161092157565b906015820180921161092157565b9190820180921161092157565b600454801515908161098e575b5061096357565b6005545f54818101809111610921575f556006549081018091116109215760065561098c6108c8565b565b905042115f61095c565b60075460ff8160081c16156108b95760ff166109e5576109b6610861565b6109d6576101905f5404116109c757565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b336001600160601b0360a01b600354161760035561012c420180421161092157600455600555565b60011981019190821161092157565b5f1981019190821161092157565b9190820391821161092157565b67ffffffffffffffff811161080657601f01601f191660200190565b929192610a6e82610a46565b91610a7c60405193846107e4565b82948184528183011161018f578281602093845f960137010152565b90610aac61056d60075460ff9060081c1690565b6108b957600354610acd906001600160a01b03165b6001600160a01b031690565b3314801590610b7d575b610b6e57438311610b5f57610100610aef8443610a39565b11610b505782408015610b4157610b07368385610a62565b6020815191012003610b3257610b1c91610fae565b03610b2357565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610b8961056d610861565b610ad7565b634e487b7160e01b5f52603260045260245ffd5b9015610bab5790565b610b8e565b90821015610bab570190565b90610bc7818361106a565b905f5b60058110610c175750600560fd1b906001600160f81b031990610bef90849086610bb0565b351603610c085760018101811161092157016001013590565b633954003560e11b5f5260045ffd5b91610c25600191838661119e565b9201610bca565b610c42610c4a92939495610c5098973691610a62565b923691610a62565b90611326565b90565b60ff60f6199116019060ff821161092157565b60ff607f199116019060ff821161092157565b60ff60bf199116019060ff821161092157565b60ff60b6199116019060ff821161092157565b60ff166001019060ff821161092157565b9291905f81151580610e1e575b610e16575b60c060ff610ceb610ce5610cd785878b610bb0565b356001600160f81b03191690565b60f81c90565b1610610de45760f860ff610d06610ce5610cd785878b610bb0565b1610610e085780610d3a610d34610d2f610d2a610ce5610cd7610d4097898d610bb0565b610c53565b610c9f565b60ff1690565b90610942565b5f5b60038110610df3575060c0610d61610d34610ce5610cd785878b610bb0565b10610de45760f8610d7c610d34610ce5610cd785878b610bb0565b10610dd55780610d3a610d34610d2f610d2a610ce5610cd7610d9f97898d610bb0565b915b5f905b808210610dbe575050610db792936114d3565b9192909190565b9092610dcd600191848861119e565b930190610da4565b610dde90610913565b91610da1565b631bd5dcf760e31b5f5260045ffd5b90610e01600191848861119e565b9101610d42565b610e1190610913565b610d40565b506001610cc2565b50608060ff610e33610ce5610cd7868a610ba2565b1610610cbd565b610e42611588565b6003546001600160a01b0316610e836001600160601b0360a01b600354166003555f6005555f60045561ff0019600754166007555f80555f6001555f600255565b4662aa36a703610f1f57604051633419e74d60e21b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f91610f00575b505b1561033f57565b610f19915060203d6020116103765761036881836107e4565b5f610ef7565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561037d575f91610f8f575b50610ef9565b610fa8915060203d6020116103765761036881836107e4565b5f610f89565b610fb8828261106a565b915f5b600881106110555750610fd5610ce5610cd7858486610bb0565b925f9260ff851694608086105f14610fef57505050505090565b6110009193949550610d3490610c66565b915f935b83851061101357505050505090565b909192939461102460019160081b90565b611049610d34610ce5610cd76110428b61103d8b610913565b610942565b8789610bb0565b17950193929190611004565b92611063600191838561119e565b9301610fbb565b5f600360fe1b6001600160f81b0319611086610cd78686610ba2565b161061116657601f60fb1b6001600160f81b03196110a7610cd78686610ba2565b16106111955780610d3a610d34610d2f610d2a610ce5610cd76110cb978a8a610bb0565b905b61a5bd4614801561118a575b6110e4575b50905090565b5f5b600381106111755750600360fe1b611112611105610cd7858786610bb0565b6001600160f81b03191690565b1061116657601f60fb1b61112d611105610cd7858786610bb0565b1061115657610d34610d2f610d2a610ce5610cd78661114f98610d3a97610bb0565b805f6110de565b506111619150610913565b61114f565b63c0098bd960e01b5f5260045ffd5b91611183600191858461119e565b92016110e6565b5061a5bf46146110d9565b506001906110cd565b9190808210156112f9576111b9610ce5610cd7848487610bb0565b9060ff821660808110156111d457505050610c509150610913565b91929160b88110156111fc575050610c509250610d346111f6610d3a92610913565b92610c66565b90929060c08110156112725750610d3461121891949394610c8c565b915f935f915b84831061123957505050610c50929161103d61103d92610913565b90919461124860019160081b90565b611268610d34610ce5610cd76112618b61103d8b610913565b8888610bb0565b179501919061121e565b90929060f811156112985750610c509250610d34611292610d3a92610913565b92610c79565b9291610d346112a691610c53565b915f935f915b8483106112c757505050610c50929161103d61103d92610913565b9091946112d660019160081b90565b6112ef610d34610ce5610cd76112618b61103d8b610913565b17950191906112ac565b6318d76ae160e11b5f5260045ffd5b805115610bab5760200190565b908151811015610bab570160200190565b919390929190600360fe1b6001600160f81b0319611347610cd78689610ba2565b16106114c457601f60fb1b6001600160f81b0319611368610cd78689610ba2565b16106114ba5761138c611387610d34610d2a610ce5610cd7888b610ba2565b610926565b9492905b945f5b8282106113a557505050505050505f90565b6113c36113bc836113b736878a610a62565b6115ed565b9093610942565b96825160208401200361145857600360fe1b6113f26111056113e485611308565b516001600160f81b03191690565b10611458578590846001601f60fb1b6114106111056113e488611308565b101561149c575b6114218186611794565b6011810361146357506114339461191f565b94911561145857841561144c5793915b91959093611393565b50505050505050600190565b505050505050505f90565b9093506002141590506114905784879261147c946117d9565b94911561145857841561144c579391611443565b50505050505050505f90565b506114b5611387610d34610d2a610ce56113e489611308565b611417565b6001949290611390565b63ebb47d1d60e01b5f5260045ffd5b92918060c060ff6114eb610ce5610cd785888b610bb0565b1610610de45760f860ff611506610ce5610cd785888b610bb0565b1610611578575080610d3a610d34610d2f610d2a610ce5610cd761152b97898c610bb0565b925b609460ff611542610ce5610cd7888787610bb0565b1603611569576115659161155f6001868401013560601c95610934565b91611a34565b9091565b63e6c4247b60e01b5f5260045ffd5b6115829150610913565b9261152d565b6005545f5481018091116109215790565b604080519091906115aa83826107e4565b6001815291601f1901366020840137565b906115c582610a46565b6115d260405191826107e4565b82815280926115e3601f1991610a46565b0190602036910137565b80518210156112f957611606610ce56113e48484611315565b9160ff8316608081101561163f5750505061161f611599565b9060f81b6001600160f81b0319165f1a61163882611308565b5390600190565b919392909160b88110156116a95750610d3461165a91610c66565b90611664826115bb565b935f5b83811061167a57505050610c5090610926565b806116966113e461169060019461103d88610913565b85611315565b5f1a6116a28289611315565b5301611667565b60c0111561174757610d346116bd91610c8c565b5f915f5b82811061171957506116d2836115bb565b945f5b8481106116ec575050509061103d610c5092610926565b806117066113e461169060019461103d8961103d8a610913565b5f1a611712828a611315565b53016116d5565b9260019060081b61173f610d34610ce56113e46117398961103d89610913565b8b611315565b1793016116c1565b50916117538382611bae565b9261175d846115bb565b915f5b85811061176e575050509190565b806117816113e461169060019487610942565b5f1a61178d8287611315565b5301611760565b5f92915b81518110156117bf576117ab8183611bae565b810180911161092157600190930192611798565b5050565b908160011b918083046002149015171561092157565b839492916117e781836115ed565b939061180660206117fd610ce56113e485611308565b16151591611cdb565b978891156118a8575061181a905187610942565b61182482516117c3565b14611839575b505050505050505f905f905f90565b86866001928251611896575b505050611853575b8061182a565b6118669261186091610942565b906115ed565b5060208151910120906020815191012014611884578080808061184d565b61188f915190610942565b6001915f90565b6118a09350611e44565b86865f611845565b6118b9939495965061056d92611e44565b611912576118ca9261186091610942565b50908151602081145f146118f2575060206118ea920151925b5190610942565b916001929190565b80156119065760206118ea930120926118e3565b505050505f905f905f90565b50505050505f905f905f90565b9190929361192d82516117c3565b8510156119d75750610ce56113e461194f926119498760011c90565b90611315565b600184166119ce5760041c600f16915b905f925b60ff811684106119ae575061197892506115ed565b50805180156119a3576118ea91602082036119995760209150015191610913565b6020012091610913565b5050505f905f905f90565b909160016119c282610d3a60ff9487611bae565b94019392919050611963565b600f169161195f565b9290509392935f915b60108310611a1a576119f292506115ed565b50602081519101209060208151910120145f14611a1157600191905f90565b5f915081908190565b90611a2b81610d3a60019385611bae565b920191906119e0565b909291925f908460c060ff611a50610ce5610cd78a878a610bb0565b1610610de45760f860ff611a6b610ce5610cd78a878a610bb0565b1610611b9f5780610d3a610d34610d2f610d2a610ce5610cd7611a8f97898c610bb0565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611abb828487611f02565b03611b9057611ae8610ac1610ac1611ae1611ada611af095878a61119e565b868961119e565b8588611f02565b95828561119e565b611b01610ce5610cd7838588610bb0565b60ff811694906080861015611b1857505050505090565b909192939594608081145f14611b3257505f955050505050565b60a010610de457610d34611b4891939293610c66565b915f935b838510611b5a575050505050565b9091929395611b6b60019160081b90565b611b84610d34610ce5610cd76110428c61103d8b610913565b17960193929190611b4c565b6324da545d60e11b5f5260045ffd5b50611ba985610913565b611a8f565b9081518110156112f957611bc8610ce56113e48385611315565b9160ff83166080811015611bdf5750505050600190565b60b8811015611bfa57505050610d34610d2f610c5092610c66565b60c0811015611c66575091610d34611c1191610c8c565b905f925f915b838310611c2e575050509061103d610c5092610926565b909193611c3d60019160081b90565b611c5c610d34610ce56113e4611c568a61103d89610913565b88611315565b1794019190611c17565b60f81115611c7f575050610d34610d2f610c5092610c79565b91610d34611c8c91610c53565b905f925f915b838310611ca9575050509061103d610c5092610926565b909193611cb860019160081b90565b611cd1610d34610ce56113e4611c568a61103d89610913565b1794019190611c92565b9081511561098c57611cf2610ce56113e484611308565b6010811615611dc157611d15611d10611d0b85516117c3565b610a2b565b6115bb565b9060f81b600f60f81b165f1a611d2a82611308565b5360015b8351811015611dbc5780611d69611d59611d50610ce56113e46001968a611315565b60041c600f1690565b60f81b6001600160f81b03191690565b611d82611d78611d0b846117c3565b915f1a9185611315565b53611da9600f611d98610ce56113e4858a611315565b1660f81b6001600160f81b03191690565b611db5611d78836117c3565b5301611d2e565b509150565b50611dd7611d10611dd284516117c3565b610a1c565b60015b8351811015611dbc5780611dfc611d59611d50610ce56113e46001968a611315565b611e10611d78611e0b84610a2b565b6117c3565b53611e26600f611d98610ce56113e4858a611315565b611e3d611d78611e38611e0b85610a2b565b610913565b5301611dda565b919091611e52825184610942565b611e5c82516117c3565b10611efb575f5b8251811015611ef257611e7f611e798286610942565b60011690565b611ed457611ea8611d50610ce56113e4611ea2611e9c868a610942565b60011c90565b86611315565b60ff611ebd610d34610ce56113e48689611315565b911603611ecc57600101611e63565b505050505f90565b600f611eec610ce56113e4611ea2611e9c868a610942565b16611ea8565b50505050600190565b5050505f90565b9190600560fd1b906001600160f81b031990611f2090849086610bb0565b351603611f2f57016001013590565b63f0ff325b60e01b5f5260045ffdfea264697066735822122063822cc15c03fce062227c8f4dcfbcbc9b4c0db5cb6f588ae379910ee65a74cb64736f6c634300081e0033","sourceMap":"426:4360:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;426:4360:21;;;;2164:15:20;-1:-1:-1;;;;;426:4360:21;2150:10:20;:29;2146:56;;2212:27;426:4360:21;;-1:-1:-1;;426:4360:21;;;;2146:56:20;2188:14;;;426:4360:21;2188:14:20;426:4360:21;;2188:14:20;426:4360:21;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;950:25:20;426:4360:21;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;1205:29:20;426:4360:21;;;-1:-1:-1;;;;;426:4360:21;;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;1349:31:20;426:4360:21;;;;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;;1027:3:20;426:4360:21;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;664:38;-1:-1:-1;;;;;426:4360:21;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;4407:26;4429:4;426:4360;;4407:26;426:4360;;;4407:26;426:4360;;4407:26;;;:::i;:::-;;;:::i;:::-;4429:4;426:4360;4560:23;;4556:57;;4661:62;;4556:57;;426:4360;;5230:14:20;426:4360:21;;5230:14:20;426:4360:21;5239:5:20;426:4360:21;;5239:5:20;426:4360:21;;5239:5:20;5304:23;426:4360:21;5180:154:20;4556:57:21;426:4360;;-1:-1:-1;;;4661:62:21;;4692:10;426:4360;4661:62;;426:4360;;;;;;;;;;;;;;;;;;4661:62;;426:4360;;4668:13;-1:-1:-1;;;;;426:4360:21;4661:62;;;;;;;426:4360;4661:62;;;426:4360;4660:63;;4656:122;;426:4360;4656:122;4746:21;;;426:4360;4746:21;426:4360;;4746:21;4661:62;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;4556:57::-;4592:21;;;426:4360;4592:21;426:4360;;4592:21;426:4360;;;;;;-1:-1:-1;;426:4360:21;;;;;801:30:20;426:4360:21;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;1278:25:20;426:4360:21;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;1914:15:20;-1:-1:-1;;;;;426:4360:21;1900:10:20;:29;1896:56;;1962:26;426:4360:21;;-1:-1:-1;;426:4360:21;1984:4:20;426:4360:21;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;2280:388;;:::i;:::-;2469:11;;;:::i;:::-;426:4360;;-1:-1:-1;;;2497:74:21;;2532:10;426:4360;2497:74;;426:4360;2552:4;426:4360;;;;;;;;;;;;;;-1:-1:-1;;;;;;2504:13:21;426:4360;2497:74;;;;;;;-1:-1:-1;2497:74:21;;;426:4360;2496:75;;2492:134;;2649:11;;;:::i;:::-;426:4360;2497:74;;;;426:4360;2497:74;426:4360;2497:74;;;;;;;:::i;:::-;;;;426:4360;;;;;;-1:-1:-1;;426:4360:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;2914:17;426:4360;;2895:17;426:4360;;2895:17;:::i;:::-;2914;;:::i;:::-;3028:56;3066:17;;;;:::i;:::-;3028:56;;:::i;:::-;3130:16;3098:100;3099:99;426:4360;3130:16;;;;;;;:::i;:::-;3148;;426:4360;3148:16;;;;:::i;:::-;3166:17;;;;;;;:::i;:::-;3099:99;;;;:::i;:::-;3098:100;;426:4360;3098:100;3094:159;;3553:48;3431:16;3449:14;3431:16;3553:48;3431:16;3387:77;3431:16;;:::i;:::-;3449:14;;;;426:4360;3387:77;;:::i;:::-;426:4360;;-1:-1:-1;;426:4360:21;;;;;;;3553:48;;426:4360;;;;;;;;;;;;;;;;;;;;;;;;;3553:48;426:4360;;;;;;;;3553:48;;;;;;;;;;:::i;:::-;426:4360;3543:59;;3606:10;426:4360;3543:73;3539:131;;;;:::i;:::-;3639:20;;;-1:-1:-1;3639:20:21;426:4360;-1:-1:-1;3639:20:21;3094:159;3221:21;;;-1:-1:-1;3221:21:21;426:4360;-1:-1:-1;3221:21:21;426:4360;;;;;;-1:-1:-1;;426:4360:21;;;;;;;;1480:15;-1:-1:-1;;;;;426:4360:21;1466:10;:29;1462:56;;426:4360;1532:6;426:4360;;;;1528:34;;1688:12;;1684:37;;426:4360;1794:24;426:4360;;1833:70;426:4360;-1:-1:-1;426:4360:21;1759:25;;;426:4360;;1759:25;1794:24;426:4360;;1794:24;426:4360;;-1:-1:-1;;;1833:70:21;;1466:10;426:4360;1833:70;;426:4360;1888:4;426:4360;;;;;;;;;;;;;;;;;;;;;1833:70;;426:4360;-1:-1:-1;1840:13:21;-1:-1:-1;;;;;426:4360:21;1833:70;;;;;;;-1:-1:-1;1833:70:21;;;426:4360;1832:71;;1828:130;;1967:13;426:4360;;;1532:6;426:4360;;;1532:6;426:4360;;1833:70;;;;426:4360;1833:70;426:4360;1833:70;;;;;;;:::i;:::-;;;;1684:37;1709:12;;;-1:-1:-1;1709:12:21;426:4360;-1:-1:-1;1709:12:21;1528:34;1547:15;;;-1:-1:-1;1547:15:21;426:4360;-1:-1:-1;1547:15:21;426:4360;;;;;;-1:-1:-1;;426:4360:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;;1386:18:20;426:4360:21;;;;;;;;;;;;;;;;;;-1:-1:-1;;426:4360:21;;;;;1309:34:20;426:4360:21;;;;;;;;;;;;;;;;;;;;;;3553:48;;426:4360;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2320:133:20:-;2385:17;426:4360:21;2385:21:20;;;:61;;;;2378:68;2320:133;:::o;2385:61::-;2410:15;;;:36;;2320:133;:::o;4964:157::-;426:4360:21;5022:6:20;426:4360:21;;;;5021:7:20;5017:31;;5076:15;-1:-1:-1;;;;;426:4360:21;5062:10:20;:29;5058:56;;4964:157::o;5017:31::-;5037:11;;;-1:-1:-1;5037:11:20;;-1:-1:-1;5037:11:20;3334:184;3386:11;;:::i;:::-;3382:36;;-1:-1:-1;;;;;426:4360:21;;3429:27:20;426:4360:21;;3429:27:20;426:4360:21;3454:1:20;3466:14;426:4360:21;3454:1:20;3490:21;426:4360:21;3334:184:20:o;3382:36::-;3406:12;;;;;;;;426:4360:21;;;;;;;;;;;;;;1662:1:25;426:4360:21;;;;;;;:::o;:::-;;:::i;:::-;1984:1:23;426:4360:21;;;1984:1:23;426:4360:21;;;:::o;:::-;;3533:2:25;426:4360:21;;;;;;;:::o;:::-;;;;;;;;;;:::o;3599:247:20:-;3652:17;426:4360:21;3652:21:20;;;:60;;;;3599:247;3648:192;;;3599:247::o;3648:192::-;3739:10;426:4360:21;-1:-1:-1;426:4360:21;;;;;;;;;-1:-1:-1;426:4360:21;3763:33:20;426:4360:21;;;;;;;;;3763:33:20;426:4360:21;3763:33:20;;:::i;:::-;3599:247::o;3652:60::-;3677:15;;;:35;3652:60;;;3905:308;3990:6;426:4360:21;;;;;;3989:7:20;3985:31;;426:4360:21;;4026:55:20;;4095:11;;:::i;:::-;4091:47;;4176:3;-1:-1:-1;426:4360:21;;-1:-1:-1;4148:58:20;;3905:308::o;4148:58::-;4188:18;;;-1:-1:-1;4188:18:20;;-1:-1:-1;4188:18:20;4091:47;4115:23;;;-1:-1:-1;4115:23:20;;-1:-1:-1;4115:23:20;4026:55;4058:23;;;-1:-1:-1;4058:23:20;;-1:-1:-1;4058:23:20;4259:187;4338:10;-1:-1:-1;;;;;426:4360:21;;4321:27:20;426:4360:21;;;4321:27:20;426:4360:21;4396:9:20;4378:15;426:4360:21;4378:15:20;;426:4360:21;;;4358:47:20;426:4360:21;4415:24:20;426:4360:21;4259:187:20:o;426:4360:21:-;-1:-1:-1;;426:4360:21;;;;;;;;:::o;:::-;-1:-1:-1;;426:4360:21;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;426:4360:21;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;426:4360:21;;;;;;:::o;2530:743:20:-;;2643:7;426:4360:21;2644:6:20;426:4360:21;;;;;;;;2643:7:20;2639:31;;2698:14;426:4360:21;2684:28:20;;-1:-1:-1;;;;;426:4360:21;;-1:-1:-1;;;;;426:4360:21;;;2684:28:20;:10;:28;;;:44;;;2530:743;2680:77;;2791:12;2771:32;;2767:66;;1027:3;2847:32;2791:12;;2847:32;:::i;:::-;:53;2843:85;;2965:28;;3007:29;;3003:64;;426:4360:21;;;;;:::i;:::-;;;;;;3081:22:20;:41;3077:75;;3166:49;;;:::i;:::-;:70;3162:104;;2530:743::o;3162:104::-;3245:21;;;3034:1;3245:21;;3034:1;3245:21;3077:75;3131:21;;;3034:1;3131:21;;3034:1;3131:21;3003:64;3045:22;;;3034:1;3045:22;;3034:1;3045:22;2843:85;2909:19;;;;;;;;2767:66;2812:21;;;;;;;;2680:77;2737:20;;;;;;;;2684:44;2717:11;2716:12;2717:11;;:::i;2716:12::-;2684:44;;426:4360:21;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;:::o;3219:769:19:-;;3335:33;;;;:::i;:::-;3539:13;3551:1;3554:5;3558:1;3554:5;;;;-1:-1:-1;;;;426:4360:21;-1:-1:-1;;;;;;426:4360:21;3740:19:19;;426:4360:21;;3740:19:19;;:::i;:::-;;426:4360:21;3740:27:19;3736:60;;426:4360:21;;;;;;;3858:94:19;426:4360:21;3858:94:19;;;3219:769::o;3736:60::-;3776:20;;;3551:1;3776:20;;3551:1;3776:20;3539:13;3585:28;;426:4360:21;3585:28:19;;;;:::i;:::-;426:4360:21;;3539:13:19;;720:484:23;426:4360:21;;720:484:23;;;;1148:49;720:484;;426:4360:21;;;:::i;:::-;;;;;:::i;:::-;1148:49:23;;:::i;:::-;720:484;:::o;426:4360:21:-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;1023:1440:25:-;;;;1232:1;1292:21;;;:52;;;1023:1440;1288:123;;1023:1440;1485:4;426:4360:21;1457:25:25;1463:18;;;;;;:::i;:::-;;-1:-1:-1;;;;;;426:4360:21;;;1463:18:25;426:4360:21;;;;1457:25:25;426:4360:21;1457:32:25;1453:57;;1553:4;426:4360:21;1524:25:25;1530:18;;;;;;:::i;1524:25::-;426:4360:21;1524:33:25;1553:4;;1594:18;1573:48;1583:38;1588:32;:25;1594:18;;1573:48;1594:18;;;;:::i;1588:25::-;:32;:::i;:::-;1583:38;:::i;:::-;426:4360:21;;;;1573:48:25;;;:::i;:::-;1232:1;1768:5;1772:1;1768:5;;;;1945:18;1485:4;1939:32;:25;1945:18;;;;;;:::i;1939:32::-;;1935:57;;1553:4;2006:33;:25;2012:18;;;;;;:::i;2006:33::-;;1553:4;;2076:18;2055:48;2065:38;2070:32;:25;2076:18;;2055:48;2076:18;;;;:::i;2055:48::-;2002:154;;1232:1;2200:155;2220:12;;;;;;2418:38;;;;;;:::i;:::-;2411:45;;;;1023:1440;:::o;2205:13::-;2258:27;;;426:4360:21;2258:27:25;;;;:::i;:::-;426:4360:21;;2205:13:25;;;2002:154;2134:11;;;:::i;:::-;2002:154;;;1935:57;1498:12;;;1232:1;1980:12;;1232:1;1980:12;1753:13;1799:27;;426:4360:21;1799:27:25;;;;:::i;:::-;426:4360:21;;1753:13:25;;1520:154;1652:11;;;:::i;:::-;1520:154;;1288:123;1360:11;1370:1;1288:123;;1292:52;1323:13;1340:4;426:4360:21;1317:20:25;1323:13;;;;;:::i;1317:20::-;426:4360:21;1317:27:25;1292:52;;3702:490:21;3757:18;;:::i;:::-;3804:14;426:4360;-1:-1:-1;;;;;426:4360:21;3785:33;-1:-1:-1;;;;;426:4360:21;;4545:27:20;426:4360:21;;4545:27:20;426:4360:21;4570:1:20;4582:14;426:4360:21;4570:1:20;4606:21;426:4360:21;;;4637:14:20;426:4360:21;;4637:14:20;426:4360:21;4570:1:20;426:4360:21;;4570:1:20;426:4360:21;;4570:1:20;4711:23;426:4360:21;4497:244:20;3785:33:21;3885:13;3902:8;3885:25;3902:8;;426:4360;;-1:-1:-1;;;3990:44:21;;-1:-1:-1;;;;;426:4360:21;;;3990:44;;;426:4360;;;;;;;;3990:44;426:4360;;;;;3990:44;426:4360;-1:-1:-1;3997:13:21;-1:-1:-1;;;;;426:4360:21;3990:44;;;;;;;-1:-1:-1;3990:44:21;;;3881:253;3980:54;3881:253;4147:8;4143:42;;3702:490::o;3990:44::-;;;;;;;;;;;;;;:::i;:::-;;;;3881:253;426:4360;;-1:-1:-1;;;4075:48:21;;-1:-1:-1;;;;;426:4360:21;;;4075:48;;;426:4360;;;;;;;;4075:48;426:4360;;;;;4075:48;426:4360;-1:-1:-1;4082:13:21;-1:-1:-1;;;;;426:4360:21;4075:48;;;;;;;-1:-1:-1;4075:48:21;;;3881:253;4065:58;3881:253;;4075:48;;;;;;;;;;;;;;:::i;:::-;;;;2036:1012:19;2151:33;;;;:::i;:::-;2386:13;426:4360:21;2401:5:19;2405:1;2401:5;;;;2616:19;2610:26;2616:19;;;;;;:::i;2610:26::-;2646:19;426:4360:21;;;;;2679:13:19;2688:4;2679:13;;2675:338;2688:4;;;2708:20;;;;;2036:1012;:::o;2675:338::-;2759:27;2773:13;;;;;;;;:::i;2759:27::-;2805:13;426:4360:21;2800:203:19;2820:7;;;;;;2675:338;;;;;2036:1012;:::o;2805:13::-;2863:16;;;;;;426:4360:21;2863:16:19;426:4360:21;;;;2863:16:19;2862:55;2883:34;2889:27;;2901:14;:10;;;;:::i;:::-;:14;:::i;:::-;2889:27;;;:::i;2862:55::-;;426:4360:21;;2805:13:19;;;;;;2386;2432:28;;426:4360:21;2432:28:19;;;;:::i;:::-;426:4360:21;;2386:13:19;;738:1134;854:1;-1:-1:-1;;;;;;;;;908:19:19;;;;;:::i;:::-;426:4360:21;908:26:19;904:55;;-1:-1:-1;;;;;;;;;973:19:19;;;;;:::i;:::-;426:4360:21;973:27:19;3553:48:21;;1037:19:19;1016:49;1026:39;1031:33;:26;1037:19;;1016:49;1037:19;;;;:::i;1016:49::-;969:149;;1221:5;1204:13;:22;:48;;;;969:149;1200:642;;969:149;1852:13;;;738:1134;:::o;1200:642::-;854:1;1380:5;1384:1;1380:5;;;;-1:-1:-1;;;;1602:26:19;:19;;;;;;:::i;:::-;-1:-1:-1;;;;;;426:4360:21;;;1602:26:19;;1598:55;;-1:-1:-1;;;1671:27:19;:19;;;;;;:::i;:27::-;;3553:48:21;;1728:39:19;1733:33;:26;1739:19;;;1718:49;1739:19;1718:49;1739:19;;:::i;1718:49::-;1200:642;;;;1667:165;1806:11;;;;;:::i;:::-;1667:165;;1598:55;943:16;;;854:1;1637:16;;854:1;1637:16;1365:13;1415:28;;426:4360:21;1415:28:19;;;;:::i;:::-;426:4360:21;;1365:13:19;;1204:48;:13;1247:5;1204:13;1230:22;1204:48;;969:149;1096:11;1370:1:25;969:149:19;;;541:1316:24;;;642:21;;;;638:56;;720:19;726:12;;;;;;:::i;720:19::-;426:4360:21;;;;763:4:24;754:13;;763:4;;;817:10;;;;;;;:::i;750:1101::-;848:13;;;857:4;848:13;;857:4;;;912:10;;:28;:10;;926:13;912:10;:28;:10;;:::i;:::-;926:13;;:::i;844:1007::-;961:13;;;970:4;961:13;;970:4;;;1039:13;;1017:35;1039:13;;;;;:::i;1017:35::-;1066:18;426:4360:21;1103:13:24;426:4360:21;1098:194:24;1118:15;;;;;;1312:10;;;:33;:10;;;:24;:10;;:::i;1103:13::-;1164:11;;;;1199:1;1164:11;426:4360:21;;;;1164:11:24;1163:43;1179:27;1185:20;;1190:14;:10;;;;:::i;:14::-;1185:20;;;:::i;1163:43::-;;426:4360:21;;1103:13:24;;;;957:894;1366:13;;;1375:4;-1:-1:-1;1375:4:24;;;1428:10;:28;:10;;1442:13;1428:10;:28;:10;;:::i;:::-;1442:13;;:::i;1362:489::-;1534:13;;;1512:35;1534:13;;:::i;1512:35::-;1561:18;426:4360:21;1598:13:24;426:4360:21;1593:194:24;1613:15;;;;;;1807:10;;;:33;:10;;;:24;:10;;:::i;1598:13::-;1659:11;;;;1694:1;1659:11;426:4360:21;;;;1659:11:24;1658:43;1674:27;1680:20;;1685:14;:10;;;;:::i;1658:43::-;;426:4360:21;;1598:13:24;;;;638:56;672:22;;;426:4360:21;672:22:24;;426:4360:21;672:22:24;426:4360:21;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;1567:2467:23:-;;;;;;;-1:-1:-1;;;;;;;;;1809:13:23;;1567:2467;;1809:13;:::i;:::-;426:4360:21;1809:20:23;1805:50;;-1:-1:-1;;;;;;;;;1870:13:23;;;;;:::i;:::-;426:4360:21;1870:21:23;3553:48:21;;1984:15:23;1907:49;1929:27;:20;1935:13;;;;;:::i;1907:49::-;1984:15;:::i;:::-;1866:190;;;;2102:33;426:4360:21;2184:31:23;;;;;;4015:12;;;;;;;426:4360:21;1567:2467:23;:::o;2177:1828::-;2368:25;2321:33;426:4360:21;;;;;;:::i;:::-;2321:33:23;:::i;:::-;2368:25;;;:::i;:::-;426:4360:21;;;;;;2465:15:23;:30;2461:81;;-1:-1:-1;;;2641:15:23;:7;;;;:::i;:::-;426:4360:21;-1:-1:-1;;;;;;426:4360:21;;;2641:15:23;;426:4360:21;;2676:14:23;;;2689:1;-1:-1:-1;;;2712:15:23;:7;;;;:::i;:15::-;;;2708:97;;2637:1358;2839:32;;;;:::i;:::-;2903:2;2894:11;;2903:2;;3044:58;;;;:::i;:::-;3129:8;;;3125:26;;3177:21;;3173:38;;3280:21;2890:1040;;2177:1828;;;;;;3173:38;3200:11;;;;;;;2689:1;3200:11;:::o;3125:26::-;3139:12;;;;;;;426:4360:21;3139:12:23;:::o;2890:1040::-;3330:10;;-1:-1:-1;3339:1:23;3330:10;3339:1;;-1:-1:-1;3339:1:23;;3490:67;;;;;;:::i;:::-;3584:8;;;3580:75;;3680:21;;3676:87;;3831:21;3326:604;2890:1040;;3326:604;3899:12;;;;;;;;426:4360:21;3899:12:23;:::o;2708:97::-;2771:7;2751:35;;2765:21;:14;2771:7;;;;:::i;2751:35::-;2708:97;;1866:190;2044:1;1866:190;;;;;1805:50;1838:17;;;426:4360:21;1838:17:23;;426:4360:21;1838:17:23;2782:869:25;;;2966:26;3090:4;426:4360:21;3062:25:25;3068:18;;;;;;:::i;3062:25::-;426:4360:21;3062:32:25;3058:57;;3158:4;426:4360:21;3129:25:25;3135:18;;;;;;:::i;3129:25::-;426:4360:21;3129:33:25;3158:4;;3199:18;;3178:48;3188:38;3193:32;:25;3199:18;;3178:48;3199:18;;;;:::i;3178:48::-;3125:154;;3372:4;426:4360:21;3343:25:25;3349:18;;;;;;:::i;3343:25::-;426:4360:21;3343:33:25;3339:62;;3603:41;3411:103;3523:12;3411:103;;;;;;;;3523:12;;:::i;:::-;3603:41;;:::i;:::-;3581:63;2782:869;:::o;3339:62::-;3385:16;;;;;;;;3125:154;3257:11;;;;:::i;:::-;3125:154;;;4797:104:20;4874:10;426:4360:21;-1:-1:-1;426:4360:21;;;;;;;;4797:104:20;:::o;426:4360:21:-;;;;;;;;;;;:::i;:::-;2457:1:24;426:4360:21;;;-1:-1:-1;;426:4360:21;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;3553:48;426:4360;3553:48;;426:4360;;:::i;:::-;;;;;;;;:::o;2143:1860:24:-;426:4360:21;;2257:21:24;;;2253:56;;2335:19;2341:12;;;;;:::i;2335:19::-;426:4360:21;;;;2378:4:24;2369:13;;2378:4;;;2447:12;;;;;:::i;:::-;426:4360:21;;;-1:-1:-1;;;;;;426:4360:21;;2473:26:24;;426:4360:21;2473:26:24;:::i;:::-;;2513:18;2457:1;2513:18;:::o;2365:1632::-;2552:13;;;;;2561:4;2552:13;;2561:4;;;2626:13;;2609:30;2626:13;;:::i;2609:30::-;2675:17;;;;:::i;:::-;2711:13;426:4360:21;2726:10:24;;;;;;2904;;;;;;:::i;2711:13::-;2774:10;2769:20;;2774:14;2783:1;2774:10;;;;:::i;:14::-;2769:20;;:::i;:::-;426:4360:21;2757:32:24;;;;;:::i;:::-;;426:4360:21;2711:13:24;;2548:1449;2945:4;-1:-1:-1;2945:4:24;;;3014:13;2992:35;3014:13;;:::i;2992:35::-;426:4360:21;3078:13:24;426:4360:21;3093:15:24;;;;;;3302:17;;;;:::i;:::-;3338:13;426:4360:21;3353:10:24;;;;;;3545:15;;;;;:24;:15;;:::i;3338:13::-;3401:10;3396:34;;3401:28;3174:1;3401:10;:24;:10;;;;:::i;3396:34::-;426:4360:21;3384:46:24;;;;;:::i;:::-;;426:4360:21;3338:13:24;;3078;3139:11;3174:1;;426:4360:21;;3138:43:24;3154:27;3160:20;;3165:14;:10;;;;:::i;:14::-;3160:20;;:::i;3138:43::-;;426:4360:21;;3078:13:24;;2932:1065;3676:27;;;;;;:::i;:::-;3739:22;;;;:::i;:::-;3780:13;426:4360:21;3795:15:24;;;;;;3958:28;;;;;:::o;3780:13::-;3848:10;3843:16;;3848:10;426:4360:21;3848:10:24;;;:::i;3843:16::-;426:4360:21;3831:28:24;;;;;:::i;:::-;;426:4360:21;3780:13:24;;4233:351:23;4392:1;;4233:351;4403:153;426:4360:21;;4410:20:23;;;;;4456:26;;;;:::i;:::-;426:4360:21;;;;;;;;4446:36:23;426:4360:21;;4403:153:23;;;4410:20;;;4233:351::o;426:4360:21:-;;;;;;;;;7928:1:23;426:4360:21;;;;;;;:::o;7310:1816:23:-;;;;;7616:26;;;;:::i;:::-;7673:9;;7740:26;7686:4;7667:16;7673:9;;;;:::i;7667:16::-;:23;7666:30;;7740:26;;:::i;:::-;7777:1343;;;;;;426:4360:21;7885:26:23;426:4360:21;;7885:26:23;;:::i;:::-;7915:14;426:4360:21;;7915:14:23;:::i;:::-;7885:44;7881:546;;7777:1343;8441:29;;;;;;;7680:1;8441:29;7680:1;8441:29;7680:1;8441:29;:::o;7881:546::-;7949:22;;7967:4;426:4360:21;;;7989:114:23;;7881:546;8121:292;;;;;7881:546;;;;8121:292;8187:38;8202:22;;;;:::i;:::-;8187:38;;:::i;:::-;426:4360:21;7686:4:23;426:4360:21;;;;8251:20:23;426:4360:21;7686:4:23;426:4360:21;;;;8275:16:23;8251:40;8247:148;;8121:292;;;;;;8247:148;8333:26;426:4360:21;;8333:26:23;;:::i;:::-;7967:4;;7680:1;;8319:53::o;7989:114::-;8048:36;;;;:::i;:::-;7989:114;;;;;7777:1343;8535:37;8536:36;;;;;;;;:::i;8535:37::-;8531:105;;8676:38;8691:22;;;;:::i;8676:38::-;8728:12;;426:4360:21;;7686:4:23;8758:20;;8754:294;7686:4;;;8798:80;7686:4;9076:26;8798:80;;;8754:294;;426:4360:21;9076:26:23;;:::i;:::-;9062:47;9070:4;9062:47;;;:::o;8754:294::-;8902:18;;;;7686:4;9076:26;426:4360:21;;8947:18:23;8898:150;8754:294;;8898:150;9004:29;;;;7680:1;9004:29;7680:1;9004:29;7680:1;9004:29;:::o;8531:105::-;8592:29;;;;;7680:1;8592:29;7680:1;8592:29;7680:1;8592:29;:::o;5044:1795::-;;;;;5315:14;426:4360:21;;5315:14:23;:::i;:::-;5302:27;;;5298:630;;5998:13;5994:18;;5988:25;5998:13;;;426:4360:21;;;;5998:13:23;5994:18;;:::i;5988:25::-;426:4360:21;;;6027:13:23;;426:4360:21;;;;6023:122:23;;6244:13;-1:-1:-1;6239:165:23;6259:10;426:4360:21;;;6259:10:23;;;;6441:28;;;;;:::i;:::-;426:4360:21;;;6483:20:23;;6479:96;;6812:13;;6630:2;6611:21;;6630:2;;;6648:73;;;;6607:181;6812:13;:::i;6607:181::-;6630:2;426:4360:21;6758:19:23;6607:181;6812:13;:::i;6479:96::-;6519:29;;;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;:::o;6244:13::-;6302:32;;426:4360:21;6286:48:23;6302:32;;426:4360:21;6302:32:23;;;:::i;6286:48::-;426:4360:21;;;;6244:13:23;;-1:-1:-1;6244:13:23;;6023:122;6130:4;6121:13;6023:122;;;5298:630;5401:32;;;;;;-1:-1:-1;5447:179:23;5467:6;5471:2;5467:6;;;;5667:27;;;;:::i;:::-;426:4360:21;;;;;;5712:20:23;426:4360:21;;;;;;5736:16:23;5712:40;5708:210;5736:16;;;426:4360:21;5772:36:23;;-1:-1:-1;5772:36:23;:::o;5708:210::-;-1:-1:-1;;;;;;;5874:29:23:o;5452:13::-;5509:31;5494:46;5509:31;;426:4360:21;5509:31:23;;;:::i;5494:46::-;426:4360:21;;5452:13:23;;;;3936:1730:25;;;;;426:4360:21;4111:29:25;;4213:4;426:4360:21;4185:25:25;4191:18;;;;;;:::i;4185:25::-;426:4360:21;4185:32:25;4181:57;;4281:4;426:4360:21;4252:25:25;4258:18;;;;;;:::i;4252:25::-;426:4360:21;4252:33:25;4281:4;;4322:18;4301:48;4311:38;4316:32;:25;4322:18;;4301:48;4322:18;;;;:::i;4301:48::-;613:66;4478:33;;;;;:::i;:::-;4525:30;4521:64;;4883:36;4891:27;4828:33;4734:27;4643;4978:33;4643:27;;;;:::i;:::-;4734;;;:::i;:::-;4828:33;;;:::i;4883:36::-;4978:33;;;;:::i;:::-;5082:25;5088:18;;;;;;:::i;5082:25::-;426:4360:21;;;;;5138:4:25;5125:17;;5138:4;;;5162:19;;;;;5121:529;3936:1730::o;5121:529::-;5206:18;;;;;;5138:4;5206:18;;5202:448;5138:4;;;-1:-1:-1;426:4360:21;;-1:-1:-1;;;;;3936:1730:25:o;5202:448::-;5293:4;-1:-1:-1;5293:4:25;;5331:17;5317:31;5331:17;;;;;:::i;5317:31::-;5371:13;426:4360:21;5366:212:25;5386:7;;;;;;5275:375;;;;;3599:247:20:o;5371:13:25:-;5428:11;;;;;;5469:1;5428:11;426:4360:21;;;;5428:11:25;5427:49;5443:33;5449:26;;5460:14;:10;;;;:::i;5427:49::-;;426:4360:21;;5371:13:25;;;;;;4521:64;4564:21;;;426:4360:21;4564:21:25;;426:4360:21;4564:21:25;4248:154;4380:11;;;;:::i;:::-;4248:154;;4217:1141:24;;426:4360:21;;4321:21:24;;;4317:56;;4399:19;4405:12;;;;;:::i;4399:19::-;426:4360:21;;;;4442:4:24;4433:13;;4442:4;;;4462:8;;;;4469:1;4462:8;:::o;4429:923::-;4500:4;4491:13;;4500:4;;;4532:13;;;4527:19;4532:13;4520:26;4532:13;;:::i;4487:865::-;4576:4;4567:13;;4576:4;;;4618:13;;;4596:35;4618:13;;:::i;4596:35::-;4645:18;426:4360:21;4682:13:24;426:4360:21;4677:194:24;4697:15;;;;;;4891;;;;;:24;:15;;:::i;4682:13::-;4743:11;;;;4778:1;4743:11;426:4360:21;;;;4743:11:24;4742:43;4758:27;4764:20;;4769:14;:10;;;;:::i;:14::-;4764:20;;:::i;4742:43::-;;426:4360:21;;4682:13:24;;;;4563:789;4945:4;-1:-1:-1;4945:4:24;;;4977:13;;4972:19;4977:13;4965:26;4977:13;;:::i;4932:420::-;5044:13;;5022:35;5044:13;;:::i;5022:35::-;5071:18;426:4360:21;5108:13:24;426:4360:21;5103:194:24;5123:15;;;;;;5317;;;;;:24;:15;;:::i;5108:13::-;5169:11;;;;5204:1;5169:11;426:4360:21;;;;5169:11:24;5168:43;5184:27;5190:20;;5195:14;:10;;;;:::i;5168:43::-;;426:4360:21;;5108:13:24;;;;9295:1058:23;;426:4360:21;;9395:19:23;9391:39;;9459:17;9465:10;;;;:::i;9459:17::-;9512:4;9500:16;;9499:23;9512:4;;9596:33;9606:22;:18;426:4360:21;;9606:18:23;:::i;:::-;:22;:::i;:::-;9596:33;:::i;:::-;426:4360:21;;;-1:-1:-1;;;426:4360:21;9413:1:23;9643:36;;426:4360:21;9643:36:23;:::i;:::-;;9627:1;9698:13;426:4360:21;;9713:18:23;;;;;9785:10;9772:30;9779:22;:17;9785:10;;9627:1;9785:10;;;:::i;9779:17::-;426:4360:21;;;;;;9779:22:23;426:4360:21;;-1:-1:-1;;;;;;426:4360:21;;;9772:30:23;9752:50;9759:9;:5;;;:::i;:9::-;9752:50;9413:1;9752:50;;;;:::i;:::-;;9836:32;9674:4;9843:17;9849:10;;;;;:::i;9843:17::-;:24;426:4360:21;;-1:-1:-1;;;;;;426:4360:21;;;9836:32:23;9820:48;9827:5;;;:::i;9820:48::-;;426:4360:21;9698:13:23;;9713:18;-1:-1:-1;9713:18:23;-1:-1:-1;9295:1058:23:o;9562:761::-;426:4360:21;9993:33:23;10003:22;:18;426:4360:21;;10003:18:23;:::i;:::-;:22;:::i;9993:33::-;10057:1;10045:13;426:4360:21;;10060:18:23;;;;;10134:10;10121:30;10128:22;:17;10134:10;;10057:1;10134:10;;;:::i;10121:30::-;10099:52;10106:11;10107:5;;;:::i;:::-;10106:11;:::i;10099:52::-;;10195:32;10222:4;10202:17;10208:10;;;;;:::i;10195:32::-;10169:58;10176:15;:11;10177:5;;;:::i;10176:11::-;:15;:::i;10169:58::-;;426:4360:21;10045:13:23;;10590:651;;;;10709:23;426:4360:21;;10709:23:23;;:::i;:::-;10735:14;426:4360:21;;10735:14:23;:::i;:::-;-1:-1:-1;10705:58:23;;-1:-1:-1;10779:13:23;426:4360:21;;10794:18:23;;;;;10862:16;10863:10;;;;:::i;:::-;426:4360:21;;;;10862:16:23;10863:10;;10915:33;:28;10921:21;;10925:16;10926:10;;;;:::i;:::-;426:4360:21;;;;10925:16:23;10921:21;;:::i;10915:33::-;426:4360:21;11067:30:23;11080:17;11086:10;;;;;:::i;11067:30::-;426:4360:21;;11067:30:23;11063:81;;426:4360:21;;10779:13:23;;11063:81;11117:12;;;;-1:-1:-1;11117:12:23;:::o;10858:191::-;11030:4;10999:28;11005:21;;11009:16;11010:10;;;;:::i;10999:28::-;:35;10858:191;;10794:18;;;;;426:4360:21;10590:651:23;:::o;10705:58::-;10751:12;;;-1:-1:-1;10751:12:23;:::o;5563:305:24:-;;;-1:-1:-1;;;426:4360:21;-1:-1:-1;;;;;;426:4360:21;5670:12:24;;5563:305;;;5670:12;:::i;:::-;;426:4360:21;5670:20:24;5666:50;;5750:89;;;;;5563:305::o;5666:50::-;5699:17;;;-1:-1:-1;5699:17:24;;-1:-1:-1;5699:17:24","linkReferences":{},"immutableReferences":{"40185":[{"start":326,"length":32},{"start":989,"length":32},{"start":1585,"length":32},{"start":2185,"length":32}],"40591":[{"start":584,"length":32},{"start":767,"length":32},{"start":1136,"length":32},{"start":1727,"length":32},{"start":3775,"length":32},{"start":3921,"length":32}]}},"methodIdentifiers":{"MAX_BLOCK_LOOKBACK()":"3d2691bc","bond(uint256)":"9940686e","bondAmount()":"80f323a7","bondedExecutor()":"1aa7c0ec","cancelAndWithdraw()":"6b892b22","cancellationRequest()":"308657d7","collect((bytes,bytes,bytes,bytes,uint256),uint256,bytes32)":"b1dd0800","commitment()":"1303a484","deposit()":"d0e30db0","executionDeadline()":"33ee5f35","fund(uint256,bytes32)":"c41020eb","funded()":"f3a504f2","is_bonded()":"cb766a56","originalDeposit()":"7fd0368b","requestCancellation()":"81972d00","resume()":"046f7da2","tokenContract()":"55a373d6","totalBondsDeposited()":"fe03a460"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_tokenContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_commitment\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHashUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHeaderMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockNumberMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CancellationRequested\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitmentMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutorAlreadyBonded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedBytes32\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBond\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLP\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPEncoding\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReceiptProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoWithdrawableFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyBondedExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDeployer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RLPOffsetOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockInFuture\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockTooOld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongEventSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MAX_BLOCK_LOOKBACK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_bondAmount\",\"type\":\"uint256\"}],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondedExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelAndWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancellationRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"blockHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptRlp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"proofNodes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptPath\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"logIndex\",\"type\":\"uint256\"}],\"internalType\":\"struct EscrowERC20.ReceiptProof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"targetBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executionDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_commitment\",\"type\":\"bytes32\"}],\"name\":\"fund\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"funded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_bonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"originalDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestCancellation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBondsDeposited\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelAndWithdraw()\":{\"notice\":\"Cancel and withdraw original deposit in a single transaction. Reverts if a node has already bonded. Seized bonds remain in the contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/EscrowERC20.sol\":\"EscrowERC20\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"src/BlockHeaderParser.sol\":{\"keccak256\":\"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6\",\"dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p\"]},\"src/EscrowBase.sol\":{\"keccak256\":\"0x2ce03c1079aae5a7eeabfb94cb9ca734944acb41ee0be2034c193f0633764dc2\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://686a16fdeff55fced1d023f86f0b9f9111dba14a83098b5dd7f207023c8f5e87\",\"dweb:/ipfs/QmTdckXk5WPEVbZKA7qp1Mnje8R9XugKX4jjkWfGDVZnxV\"]},\"src/EscrowERC20.sol\":{\"keccak256\":\"0x877304d6831c45ad6de94b2fab0db78bd3d0663e23123e1fd1d9276e5e53a79e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4c28b3898400628201068f27251a8395fbadef290dfb3d21aa127543d98b956f\",\"dweb:/ipfs/QmYaMUJACEggkPYYLMJktTFAEE83EKsSP7DQFnB9H9cFTp\"]},\"src/MPTVerifier.sol\":{\"keccak256\":\"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b\",\"dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU\"]},\"src/RLPParser.sol\":{\"keccak256\":\"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d\",\"dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk\"]},\"src/ReceiptValidator.sol\":{\"keccak256\":\"0xeb73274872c39cc110409f911795cc6135d676d97c4f93ae7ae0e7d1d16eec10\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://680d86f985246d12ef56d02a2597cd11dd2d7fa4d2c8b10a274a55886dc51099\",\"dweb:/ipfs/QmSRGaoao2y3EeKRhdwMNS27PVvMgLEc7q5uqJyXzUzMcZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyFunded"},{"inputs":[],"type":"error","name":"BlockHashUnavailable"},{"inputs":[],"type":"error","name":"BlockHeaderMismatch"},{"inputs":[],"type":"error","name":"BlockNumberMismatch"},{"inputs":[],"type":"error","name":"BondActive"},{"inputs":[],"type":"error","name":"CancellationRequested"},{"inputs":[],"type":"error","name":"CommitmentMismatch"},{"inputs":[],"type":"error","name":"ExecutorAlreadyBonded"},{"inputs":[],"type":"error","name":"ExpectedBytes32"},{"inputs":[],"type":"error","name":"ExpectedRLPList"},{"inputs":[],"type":"error","name":"InsufficientBond"},{"inputs":[],"type":"error","name":"InvalidAddress"},{"inputs":[],"type":"error","name":"InvalidRLP"},{"inputs":[],"type":"error","name":"InvalidRLPEncoding"},{"inputs":[],"type":"error","name":"InvalidRLPList"},{"inputs":[],"type":"error","name":"InvalidReceiptProof"},{"inputs":[],"type":"error","name":"NoWithdrawableFunds"},{"inputs":[],"type":"error","name":"NotFunded"},{"inputs":[],"type":"error","name":"OnlyBondedExecutor"},{"inputs":[],"type":"error","name":"OnlyDeployer"},{"inputs":[],"type":"error","name":"RLPOffsetOutOfBounds"},{"inputs":[],"type":"error","name":"TargetBlockInFuture"},{"inputs":[],"type":"error","name":"TargetBlockTooOld"},{"inputs":[],"type":"error","name":"TokenTransferFailed"},{"inputs":[],"type":"error","name":"WrongEventSignature"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[],"type":"error","name":"ZeroAmount"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_BLOCK_LOOKBACK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_bondAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"bond"},{"inputs":[],"stateMutability":"view","type":"function","name":"bondAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bondedExecutor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancelAndWithdraw"},{"inputs":[],"stateMutability":"view","type":"function","name":"cancellationRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct EscrowERC20.ReceiptProof","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"blockHeader","type":"bytes"},{"internalType":"bytes","name":"receiptRlp","type":"bytes"},{"internalType":"bytes","name":"proofNodes","type":"bytes"},{"internalType":"bytes","name":"receiptPath","type":"bytes"},{"internalType":"uint256","name":"logIndex","type":"uint256"}]},{"internalType":"uint256","name":"targetBlockNumber","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"collect"},{"inputs":[],"stateMutability":"view","type":"function","name":"commitment","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"executionDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"fund"},{"inputs":[],"stateMutability":"view","type":"function","name":"funded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"is_bonded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"originalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"requestCancellation"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resume"},{"inputs":[],"stateMutability":"view","type":"function","name":"tokenContract","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"totalBondsDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"cancelAndWithdraw()":{"notice":"Cancel and withdraw original deposit in a single transaction. Reverts if a node has already bonded. Seized bonds remain in the contract."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/EscrowERC20.sol":"EscrowERC20"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"src/BlockHeaderParser.sol":{"keccak256":"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550","urls":["bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6","dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p"],"license":"UNLICENSED"},"src/EscrowBase.sol":{"keccak256":"0x2ce03c1079aae5a7eeabfb94cb9ca734944acb41ee0be2034c193f0633764dc2","urls":["bzz-raw://686a16fdeff55fced1d023f86f0b9f9111dba14a83098b5dd7f207023c8f5e87","dweb:/ipfs/QmTdckXk5WPEVbZKA7qp1Mnje8R9XugKX4jjkWfGDVZnxV"],"license":"UNLICENSED"},"src/EscrowERC20.sol":{"keccak256":"0x877304d6831c45ad6de94b2fab0db78bd3d0663e23123e1fd1d9276e5e53a79e","urls":["bzz-raw://4c28b3898400628201068f27251a8395fbadef290dfb3d21aa127543d98b956f","dweb:/ipfs/QmYaMUJACEggkPYYLMJktTFAEE83EKsSP7DQFnB9H9cFTp"],"license":"UNLICENSED"},"src/MPTVerifier.sol":{"keccak256":"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb","urls":["bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b","dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU"],"license":"UNLICENSED"},"src/RLPParser.sol":{"keccak256":"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c","urls":["bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d","dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk"],"license":"UNLICENSED"},"src/ReceiptValidator.sol":{"keccak256":"0xeb73274872c39cc110409f911795cc6135d676d97c4f93ae7ae0e7d1d16eec10","urls":["bzz-raw://680d86f985246d12ef56d02a2597cd11dd2d7fa4d2c8b10a274a55886dc51099","dweb:/ipfs/QmSRGaoao2y3EeKRhdwMNS27PVvMgLEc7q5uqJyXzUzMcZ"],"license":"UNLICENSED"}},"version":1},"id":21} \ No newline at end of file diff --git a/out/EscrowNative.sol/EscrowNative.json b/out/EscrowNative.sol/EscrowNative.json index ec219c2..482593e 100644 --- a/out/EscrowNative.sol/EscrowNative.json +++ b/out/EscrowNative.sol/EscrowNative.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_expectedRecipient","type":"address","internalType":"address"},{"name":"_expectedAmount","type":"uint256","internalType":"uint256"},{"name":"_currentRewardAmount","type":"uint256","internalType":"uint256"},{"name":"_currentPaymentAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"MAX_BLOCK_LOOKBACK","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bond","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"bondAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bondedExecutor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"cancelAndWithdraw","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancellationRequest","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"collect","inputs":[{"name":"proof","type":"tuple","internalType":"struct EscrowNative.NativeTransferProof","components":[{"name":"blockHeader","type":"bytes","internalType":"bytes"},{"name":"transactionRlp","type":"bytes","internalType":"bytes"},{"name":"txProofNodes","type":"bytes","internalType":"bytes"},{"name":"receiptRlp","type":"bytes","internalType":"bytes"},{"name":"receiptProofNodes","type":"bytes","internalType":"bytes"},{"name":"path","type":"bytes","internalType":"bytes"}]},{"name":"targetBlockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"currentPaymentAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"currentRewardAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"executionDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"expectedAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"expectedRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"fund","inputs":[{"name":"_currentRewardAmount","type":"uint256","internalType":"uint256"},{"name":"_currentPaymentAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"funded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"is_bonded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"originalRewardAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"requestCancellation","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resume","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalBondsDeposited","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"error","name":"AlreadyFunded","inputs":[]},{"type":"error","name":"AmountMismatch","inputs":[]},{"type":"error","name":"BlockHashUnavailable","inputs":[]},{"type":"error","name":"BlockHeaderMismatch","inputs":[]},{"type":"error","name":"BlockNumberMismatch","inputs":[]},{"type":"error","name":"BondActive","inputs":[]},{"type":"error","name":"CancellationRequested","inputs":[]},{"type":"error","name":"ETHTransferFailed","inputs":[]},{"type":"error","name":"ExecutorAlreadyBonded","inputs":[]},{"type":"error","name":"ExpectedRLPList","inputs":[]},{"type":"error","name":"IncorrectETHAmount","inputs":[]},{"type":"error","name":"InsufficientBond","inputs":[]},{"type":"error","name":"InvalidAddress","inputs":[]},{"type":"error","name":"InvalidNativeTransfer","inputs":[]},{"type":"error","name":"InvalidRLP","inputs":[]},{"type":"error","name":"InvalidRLPEncoding","inputs":[]},{"type":"error","name":"InvalidRLPList","inputs":[]},{"type":"error","name":"InvalidReceiptProof","inputs":[]},{"type":"error","name":"InvalidTxProof","inputs":[]},{"type":"error","name":"NoWithdrawableFunds","inputs":[]},{"type":"error","name":"NotFunded","inputs":[]},{"type":"error","name":"OnlyBondedExecutor","inputs":[]},{"type":"error","name":"OnlyDeployer","inputs":[]},{"type":"error","name":"RLPOffsetOutOfBounds","inputs":[]},{"type":"error","name":"ReceiptStatusNotSuccess","inputs":[]},{"type":"error","name":"RecipientMismatch","inputs":[]},{"type":"error","name":"TargetBlockInFuture","inputs":[]},{"type":"error","name":"TargetBlockTooOld","inputs":[]},{"type":"error","name":"TxFailed","inputs":[]},{"type":"error","name":"UnsupportedTxType","inputs":[]},{"type":"error","name":"ZeroPaymentAmount","inputs":[]},{"type":"error","name":"ZeroRewardAmount","inputs":[]}],"bytecode":{"object":"0x60e0601f611e5838819003918201601f19168301916001600160401b038311848410176101205780849260809460405283398101031261011c578051906001600160a01b038216820361011c576020810151606060408301519201519260a05260c0523360805280151580610113575b6100c1575b604051611d23908161013582396080518181816101560152818161051e015281816105de0152610690015260a0518181816103070152610630015260c0518181816102e5015261038d0152f35b8181018082116100ff5734036100f057805f5560025560015561010061ff001960075416176007555f80610074565b63201c04ab60e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5081151561006f565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101445780631aa7c0ec1461013f57806323a8b41a1461013a5780632feef2ec14610135578063308657d71461013057806333ee5f351461012b5780633d2691bc146101265780635a4fd6451461012157806364c9ec6f1461011c5780636b892b221461011757806380f323a71461011257806381972d001461010d5780638677ab23146101085780638bd03d0a14610103578063a65e2cfd146100fe578063cb766a56146100f9578063d415b3f9146100f4578063f3a504f2146100ef5763fe03a460146100ea575f80fd5b6107b1565b61078c565b61076f565b61074b565b61067c565b61065f565b61061b565b6105cc565b6105af565b6104f4565b610427565b61040b565b6103ef565b6103d2565b6103b0565b610376565b6101cb565b6101a3565b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461019f575f36600319011261019f576003546040516001600160a01b039091168152602090f35b3461019f57604036600319011261019f5760043567ffffffffffffffff811161019f57806004019060c0600319823603011261019f5761021760243561021184806107ce565b9061093e565b61022a61022483806107ce565b90610aae565b602482019161026b61026761023f85876107ce565b61024f60448697939701896107ce565b60a48701979161025f898c6107ce565b949093610bb7565b1590565b610367576102676102b491608461028b61028588806107ce565b90610bde565b9161025f60648201966102ab6102a1898c6107ce565b959094018b6107ce565b9290918b6107ce565b610358576102676102c86102ce92856107ce565b90610c3f565b610349576102e26102679161032c936107ce565b907f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091610d0f565b61033a57610338610f2a565b005b633cff557560e11b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b3461019f575f36600319011261019f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461019f575f36600319011261019f57602060ff600754166040519015158152f35b3461019f575f36600319011261019f576020600454604051908152f35b3461019f575f36600319011261019f5760206040516101008152f35b3461019f575f36600319011261019f5760205f54604051908152f35b5f36600319011261019f5760045480151590816104ea575b506104b7575b60075460ff8160081c16156104a85760ff16610499576104636108d1565b61048a575f5460011c341061047b5761033834610f90565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b6005545f548181018091116104e5575f556006549081018091116104e5576006556104e0610fb8565b610445565b610886565b905042115f61043f565b3461019f575f36600319011261019f5760ff6001811960075416178060075560081c16156104a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361019057610554610fb8565b61055c610fef565b61057361ff0019600754166007555f6001555f8055565b80156105a0575f80808093335af161058961085c565b501561059157005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461019f575f36600319011261019f576020600554604051908152f35b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19166001179055005b3461019f575f36600319011261019f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461019f575f36600319011261019f576020600154604051908152f35b604036600319011261019f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101905760075460081c60ff1661073c57811561072d57801561071e576106e181836108c4565b340361070f576106f6826106fb935f55600255565b600155565b61033861010061ff00196007541617600755565b63201c04ab60e01b5f5260045ffd5b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461019f575f36600319011261019f5760206107656108d1565b6040519015158152f35b3461019f575f36600319011261019f576020600254604051908152f35b3461019f575f36600319011261019f57602060ff60075460081c166040519015158152f35b3461019f575f36600319011261019f576020600654604051908152f35b903590601e198136030182121561019f570180359067ffffffffffffffff821161019f5760200191813603831361019f57565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff81118382101761083b57604052565b610801565b67ffffffffffffffff811161083b57601f01601f191660200190565b3d15610881573d9061087561087083610840565b610815565b9182523d5f602084013e565b606090565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116104e557565b90601582018092116104e557565b60010190816001116104e557565b919082018092116104e557565b60045480151590816108e1575090565b905042111590565b6001198101919082116104e557565b5f198101919082116104e557565b919082039182116104e557565b92919261092261087083610840565b938285528282011161019f57815f926020928387013784010152565b9061095261026760075460ff9060081c1690565b6104a8576003546001600160a01b03163314801590610a12575b610a03574383116109f4576101006109848443610906565b116109e557824080156109d65761099c368385610913565b60208151910120036109c7576109b191611001565b036109b857565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610a1e6102676108d1565b61096c565b634e487b7160e01b5f52603260045260245ffd5b9015610a405790565b610a23565b90821015610a40570190565b60ff60f6199116019060ff82116104e557565b60ff607f199116019060ff82116104e557565b60ff60bf199116019060ff82116104e557565b60ff60b6199116019060ff82116104e557565b60ff166001019060ff82116104e557565b905f600360fe1b6001600160f81b0319610ad9610acb8587610a37565b356001600160f81b03191690565b1610610ba857601f60fb1b6001600160f81b0319610afa610acb8587610a37565b1610610b9f5780610b34610b2e610b29610b24610b1e610acb610b3a97898b610a45565b60f81c90565b610a51565b610a9d565b60ff1690565b906108c4565b905b5f5b60048110610b8a5750600560fd1b906001600160f81b031990610b6790610acb90859087610a45565b1603610b7b57610b769061089a565b013590565b633954003560e11b5f5260045ffd5b91610b9860019183866110b1565b9201610b3e565b50600190610b3c565b63c0098bd960e01b5f5260045ffd5b610bcd610bd592939495610bdb98973691610913565b923691610913565b90611239565b90565b90610be981836113f3565b905f5b60058110610c2a5750600560fd1b906001600160f81b031990610c1190849086610a45565b351603610b7b576001810181116104e557016001013590565b91610c3860019183866110b1565b9201610bec565b5f9082151580610cf3575b610cea575b60c060ff610c64610b1e610acb868887610a45565b1610610cdb57610b1e610acb82858560f860ff610c8e610b1e610acb839b60019d610cb89c610a45565b1610610cd25780610b34610b2e610b29610b24610b1e610acb610cb297898b610a45565b91610a45565b1603610cc357600190565b63e9dd8a9d60e01b5f5260045ffd5b610cb29061089a565b631bd5dcf760e31b5f5260045ffd5b60019150610c4f565b50608060ff610d08610b1e610acb8786610a37565b1610610c4a565b90916003905f84151580610f0e575b610ec6575b60c060ff610d38610b1e610acb858a8a610a45565b1610610cdb578060f860ff610d57610b1e610acb610d7d968b8b610a45565b1610610ebd5760ff610d76610b29610b24610b1e610acb868c8c610a45565b16906108c4565b915f905b808210610ea6575050609460ff610d9f610b1e610acb868989610a45565b1603610e97576001600160a01b03168282016001013560601c03610e8857610dc6906108a8565b91610dd8610b1e610acb858486610a45565b925f9260ff851694608086105f14610e095750505050505b03610dfa57600190565b6355e97b0d60e01b5f5260045ffd5b90919293946080145f14610e225750505050505f610df0565b610b2e610e3191939293610a64565b915f935b838510610e46575050505050610df0565b9091929394610e5760019160081b90565b610e7c610b2e610b1e610acb610e758b610e708b61089a565b6108c4565b8789610a45565b17950193929190610e35565b63c0ee95bb60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b9092610eb560019187876110b1565b930190610d81565b60ff6001610d76565b509050610ed9610b1e610acb8585610a37565b6001919060ff16808303610ef05750600491610d23565b600203610eff57600591610d23565b636fc3daa360e11b5f5260045ffd5b50608060ff610f23610b1e610acb8989610a37565b1610610d1e565b6005545f5481018091116104e55760015481018091116104e5575f808080936003546001600160601b0360a01b8116600355826005558260045561ff0019600754166007558260015582805560018060a01b03165af1610f8861085c565b501561059157565b336001600160601b0360a01b600354161760035561012c42018042116104e557600455600555565b610fc06108d1565b610fe0576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116104e55790565b61100b82826113f3565b915f5b6008811061109c5750611028610b1e610acb858486610a45565b925f9260ff851694608086105f1461104257505050505090565b6110539193949550610b2e90610a64565b915f935b83851061106657505050505090565b909192939461107760019160081b90565b611090610b2e610b1e610acb610e758b610e708b61089a565b17950193929190611057565b926110aa60019183856110b1565b930161100e565b91908082101561120c576110cc610b1e610acb848487610a45565b9060ff821660808110156110e757505050610bdb915061089a565b91929160b881101561110f575050610bdb9250610b2e611109610b349261089a565b92610a64565b90929060c08110156111855750610b2e61112b91949394610a8a565b915f935f915b84831061114c57505050610bdb9291610e70610e709261089a565b90919461115b60019160081b90565b61117b610b2e610b1e610acb6111748b610e708b61089a565b8888610a45565b1795019190611131565b90929060f811156111ab5750610bdb9250610b2e6111a5610b349261089a565b92610a77565b9291610b2e6111b991610a51565b915f935f915b8483106111da57505050610bdb9291610e70610e709261089a565b9091946111e960019160081b90565b611202610b2e610b1e610acb6111748b610e708b61089a565b17950191906111bf565b6318d76ae160e11b5f5260045ffd5b805115610a405760200190565b908151811015610a40570160200190565b919390929190600360fe1b6001600160f81b031961125a610acb8689610a37565b16106113e457601f60fb1b6001600160f81b031961127b610acb8689610a37565b16106113da5761129f61129a610b2e610b24610b1e610acb888b610a37565b6108b6565b9492905b945f5b8282106112b857505050505050505f90565b6112d66112cf836112ca36878a610913565b611550565b90936108c4565b96825160208401200361137857600360fe1b6113126113056112f78561121b565b516001600160f81b03191690565b6001600160f81b03191690565b10611378578590846001601f60fb1b6113306113056112f78861121b565b10156113bc575b61134181866116f7565b60118103611383575061135394611882565b94911561137857841561136c5793915b919590936112a6565b50505050505050600190565b505050505050505f90565b9093506002141590506113b05784879261139c9461173c565b94911561137857841561136c579391611363565b50505050505050505f90565b506113d561129a610b2e610b24610b1e6112f78961121b565b611337565b60019492906112a3565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b031961140f610acb8686610a37565b1610610ba857601f60fb1b6001600160f81b0319611430610acb8686610a37565b16106115025780610b34610b2e610b29610b24610b1e610acb611454978a8a610a45565b905b61a5bd461480156114f7575b61146d575b50905090565b5f5b600381106114e25750600360fe1b61148e611305610acb858786610a45565b10610ba857601f60fb1b6114a9611305610acb858786610a45565b106114d257610b2e610b29610b24610b1e610acb866114cb98610b3497610a45565b805f611467565b506114dd915061089a565b6114cb565b916114f060019185846110b1565b920161146f565b5061a5bf4614611462565b50600190611456565b60409061151782610815565b6001815291601f1901366020840137565b9061153561087083610840565b8281528092611546601f1991610840565b0190602036910137565b805182101561120c57611569610b1e6112f78484611228565b9160ff831660808110156115a25750505061158261150b565b9060f81b6001600160f81b0319165f1a61159b8261121b565b5390600190565b919392909160b881101561160c5750610b2e6115bd91610a64565b906115c782611528565b935f5b8381106115dd57505050610bdb906108b6565b806115f96112f76115f3600194610e708861089a565b85611228565b5f1a6116058289611228565b53016115ca565b60c011156116aa57610b2e61162091610a8a565b5f915f5b82811061167c575061163583611528565b945f5b84811061164f5750505090610e70610bdb926108b6565b806116696112f76115f3600194610e7089610e708a61089a565b5f1a611675828a611228565b5301611638565b9260019060081b6116a2610b2e610b1e6112f761169c89610e708961089a565b8b611228565b179301611624565b50916116b68382611997565b926116c084611528565b915f5b8581106116d1575050509190565b806116e46112f76115f3600194876108c4565b5f1a6116f08287611228565b53016116c3565b5f92915b81518110156117225761170e8183611997565b81018091116104e5576001909301926116fb565b5050565b908160011b91808304600214901517156104e557565b8394929161174a8183611550565b93906117696020611760610b1e6112f78561121b565b16151591611ac4565b9788911561180b575061177d9051876108c4565b6117878251611726565b1461179c575b505050505050505f905f905f90565b868660019282516117f9575b5050506117b6575b8061178d565b6117c9926117c3916108c4565b90611550565b50602081519101209060208151910120146117e757808080806117b0565b6117f29151906108c4565b6001915f90565b6118039350611c2f565b86865f6117a8565b61181c939495965061026792611c2f565b6118755761182d926117c3916108c4565b50908151602081145f146118555750602061184d920151925b51906108c4565b916001929190565b801561186957602061184d93012092611846565b505050505f905f905f90565b50505050505f905f905f90565b919092936118908251611726565b85101561193a5750610b1e6112f76118b2926118ac8760011c90565b90611228565b600184166119315760041c600f16915b905f925b60ff8116841061191157506118db9250611550565b50805180156119065761184d91602082036118fc576020915001519161089a565b602001209161089a565b5050505f905f905f90565b9091600161192582610b3460ff9487611997565b940193929190506118c6565b600f16916118c2565b9290509392935f915b6010831061197d576119559250611550565b50602081519101209060208151910120145f1461197457600191905f90565b5f915081908190565b9061198e81610b3460019385611997565b92019190611943565b90815181101561120c576119b1610b1e6112f78385611228565b9160ff831660808110156119c85750505050600190565b60b88110156119e357505050610b2e610b29610bdb92610a64565b60c0811015611a4f575091610b2e6119fa91610a8a565b905f925f915b838310611a175750505090610e70610bdb926108b6565b909193611a2660019160081b90565b611a45610b2e610b1e6112f7611a3f8a610e708961089a565b88611228565b1794019190611a00565b60f81115611a68575050610b2e610b29610bdb92610a77565b91610b2e611a7591610a51565b905f925f915b838310611a925750505090610e70610bdb926108b6565b909193611aa160019160081b90565b611aba610b2e610b1e6112f7611a3f8a610e708961089a565b1794019190611a7b565b90815115611c2d57611adb610b1e6112f78461121b565b6010811615611baa57611afe611af9611af48551611726565b6108f8565b611528565b9060f81b600f60f81b165f1a611b138261121b565b5360015b8351811015611ba55780611b52611b42611b39610b1e6112f76001968a611228565b60041c600f1690565b60f81b6001600160f81b03191690565b611b6b611b61611af484611726565b915f1a9185611228565b53611b92600f611b81610b1e6112f7858a611228565b1660f81b6001600160f81b03191690565b611b9e611b6183611726565b5301611b17565b509150565b50611bc0611af9611bbb8451611726565b6108e9565b60015b8351811015611ba55780611be5611b42611b39610b1e6112f76001968a611228565b611bf9611b61611bf4846108f8565b611726565b53611c0f600f611b81610b1e6112f7858a611228565b611c26611b61611c21611bf4856108f8565b61089a565b5301611bc3565b565b919091611c3d8251846108c4565b611c478251611726565b10611ce6575f5b8251811015611cdd57611c6a611c6482866108c4565b60011690565b611cbf57611c93611b39610b1e6112f7611c8d611c87868a6108c4565b60011c90565b86611228565b60ff611ca8610b2e610b1e6112f78689611228565b911603611cb757600101611c4e565b505050505f90565b600f611cd7610b1e6112f7611c8d611c87868a6108c4565b16611c93565b50505050600190565b5050505f9056fea2646970667358221220f4598e927f93dbeaa4a20f290936343400629961d598e1f51e8a971f4c36efcc64736f6c634300081e0033","sourceMap":"92:4594:22:-:0;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;-1:-1:-1;;;;;92:4594:22;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;92:4594:22;;;;;;;;;;;;;;;;;;1670:38:20;;;1718:32;;1778:10;92:4594:22;1760:28:20;1248:24:22;;;:53;;;-1:-1:-1;1244:372:22;;-1:-1:-1;92:4594:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1670:38:20;92:4594:22;;;;;;;;;;1718:32:20;92:4594:22;;;;;;;;;;;1244:372;92:4594;;;;;;;;1321:9;:57;1317:90;;92:4594;-1:-1:-1;92:4594:22;1477:43;92:4594;;;;;;1592:13;92:4594;;;1592:13;92:4594;1244:372;;;;1317:90;1387:20;;;-1:-1:-1;1387:20:22;;-1:-1:-1;1387:20:22;92:4594;;;;-1:-1:-1;92:4594:22;;;;;-1:-1:-1;92:4594:22;1248:53;1276:25;;;;1248:53;;92:4594;-1:-1:-1;92:4594:22;;;;;;-1:-1:-1;92:4594:22;;;;;-1:-1:-1;92:4594:22","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101445780631aa7c0ec1461013f57806323a8b41a1461013a5780632feef2ec14610135578063308657d71461013057806333ee5f351461012b5780633d2691bc146101265780635a4fd6451461012157806364c9ec6f1461011c5780636b892b221461011757806380f323a71461011257806381972d001461010d5780638677ab23146101085780638bd03d0a14610103578063a65e2cfd146100fe578063cb766a56146100f9578063d415b3f9146100f4578063f3a504f2146100ef5763fe03a460146100ea575f80fd5b6107b1565b61078c565b61076f565b61074b565b61067c565b61065f565b61061b565b6105cc565b6105af565b6104f4565b610427565b61040b565b6103ef565b6103d2565b6103b0565b610376565b6101cb565b6101a3565b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461019f575f36600319011261019f576003546040516001600160a01b039091168152602090f35b3461019f57604036600319011261019f5760043567ffffffffffffffff811161019f57806004019060c0600319823603011261019f5761021760243561021184806107ce565b9061093e565b61022a61022483806107ce565b90610aae565b602482019161026b61026761023f85876107ce565b61024f60448697939701896107ce565b60a48701979161025f898c6107ce565b949093610bb7565b1590565b610367576102676102b491608461028b61028588806107ce565b90610bde565b9161025f60648201966102ab6102a1898c6107ce565b959094018b6107ce565b9290918b6107ce565b610358576102676102c86102ce92856107ce565b90610c3f565b610349576102e26102679161032c936107ce565b907f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091610d0f565b61033a57610338610f2a565b005b633cff557560e11b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b3461019f575f36600319011261019f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461019f575f36600319011261019f57602060ff600754166040519015158152f35b3461019f575f36600319011261019f576020600454604051908152f35b3461019f575f36600319011261019f5760206040516101008152f35b3461019f575f36600319011261019f5760205f54604051908152f35b5f36600319011261019f5760045480151590816104ea575b506104b7575b60075460ff8160081c16156104a85760ff16610499576104636108d1565b61048a575f5460011c341061047b5761033834610f90565b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b6005545f548181018091116104e5575f556006549081018091116104e5576006556104e0610fb8565b610445565b610886565b905042115f61043f565b3461019f575f36600319011261019f5760ff6001811960075416178060075560081c16156104a8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361019057610554610fb8565b61055c610fef565b61057361ff0019600754166007555f6001555f8055565b80156105a0575f80808093335af161058961085c565b501561059157005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461019f575f36600319011261019f576020600554604051908152f35b3461019f575f36600319011261019f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610190576007805460ff19166001179055005b3461019f575f36600319011261019f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461019f575f36600319011261019f576020600154604051908152f35b604036600319011261019f576004356024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101905760075460081c60ff1661073c57811561072d57801561071e576106e181836108c4565b340361070f576106f6826106fb935f55600255565b600155565b61033861010061ff00196007541617600755565b63201c04ab60e01b5f5260045ffd5b63932ca0a360e01b5f5260045ffd5b63ea1083a760e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461019f575f36600319011261019f5760206107656108d1565b6040519015158152f35b3461019f575f36600319011261019f576020600254604051908152f35b3461019f575f36600319011261019f57602060ff60075460081c166040519015158152f35b3461019f575f36600319011261019f576020600654604051908152f35b903590601e198136030182121561019f570180359067ffffffffffffffff821161019f5760200191813603831361019f57565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f1916820167ffffffffffffffff81118382101761083b57604052565b610801565b67ffffffffffffffff811161083b57601f01601f191660200190565b3d15610881573d9061087561087083610840565b610815565b9182523d5f602084013e565b606090565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116104e557565b90601582018092116104e557565b60010190816001116104e557565b919082018092116104e557565b60045480151590816108e1575090565b905042111590565b6001198101919082116104e557565b5f198101919082116104e557565b919082039182116104e557565b92919261092261087083610840565b938285528282011161019f57815f926020928387013784010152565b9061095261026760075460ff9060081c1690565b6104a8576003546001600160a01b03163314801590610a12575b610a03574383116109f4576101006109848443610906565b116109e557824080156109d65761099c368385610913565b60208151910120036109c7576109b191611001565b036109b857565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b50610a1e6102676108d1565b61096c565b634e487b7160e01b5f52603260045260245ffd5b9015610a405790565b610a23565b90821015610a40570190565b60ff60f6199116019060ff82116104e557565b60ff607f199116019060ff82116104e557565b60ff60bf199116019060ff82116104e557565b60ff60b6199116019060ff82116104e557565b60ff166001019060ff82116104e557565b905f600360fe1b6001600160f81b0319610ad9610acb8587610a37565b356001600160f81b03191690565b1610610ba857601f60fb1b6001600160f81b0319610afa610acb8587610a37565b1610610b9f5780610b34610b2e610b29610b24610b1e610acb610b3a97898b610a45565b60f81c90565b610a51565b610a9d565b60ff1690565b906108c4565b905b5f5b60048110610b8a5750600560fd1b906001600160f81b031990610b6790610acb90859087610a45565b1603610b7b57610b769061089a565b013590565b633954003560e11b5f5260045ffd5b91610b9860019183866110b1565b9201610b3e565b50600190610b3c565b63c0098bd960e01b5f5260045ffd5b610bcd610bd592939495610bdb98973691610913565b923691610913565b90611239565b90565b90610be981836113f3565b905f5b60058110610c2a5750600560fd1b906001600160f81b031990610c1190849086610a45565b351603610b7b576001810181116104e557016001013590565b91610c3860019183866110b1565b9201610bec565b5f9082151580610cf3575b610cea575b60c060ff610c64610b1e610acb868887610a45565b1610610cdb57610b1e610acb82858560f860ff610c8e610b1e610acb839b60019d610cb89c610a45565b1610610cd25780610b34610b2e610b29610b24610b1e610acb610cb297898b610a45565b91610a45565b1603610cc357600190565b63e9dd8a9d60e01b5f5260045ffd5b610cb29061089a565b631bd5dcf760e31b5f5260045ffd5b60019150610c4f565b50608060ff610d08610b1e610acb8786610a37565b1610610c4a565b90916003905f84151580610f0e575b610ec6575b60c060ff610d38610b1e610acb858a8a610a45565b1610610cdb578060f860ff610d57610b1e610acb610d7d968b8b610a45565b1610610ebd5760ff610d76610b29610b24610b1e610acb868c8c610a45565b16906108c4565b915f905b808210610ea6575050609460ff610d9f610b1e610acb868989610a45565b1603610e97576001600160a01b03168282016001013560601c03610e8857610dc6906108a8565b91610dd8610b1e610acb858486610a45565b925f9260ff851694608086105f14610e095750505050505b03610dfa57600190565b6355e97b0d60e01b5f5260045ffd5b90919293946080145f14610e225750505050505f610df0565b610b2e610e3191939293610a64565b915f935b838510610e46575050505050610df0565b9091929394610e5760019160081b90565b610e7c610b2e610b1e610acb610e758b610e708b61089a565b6108c4565b8789610a45565b17950193929190610e35565b63c0ee95bb60e01b5f5260045ffd5b63e6c4247b60e01b5f5260045ffd5b9092610eb560019187876110b1565b930190610d81565b60ff6001610d76565b509050610ed9610b1e610acb8585610a37565b6001919060ff16808303610ef05750600491610d23565b600203610eff57600591610d23565b636fc3daa360e11b5f5260045ffd5b50608060ff610f23610b1e610acb8989610a37565b1610610d1e565b6005545f5481018091116104e55760015481018091116104e5575f808080936003546001600160601b0360a01b8116600355826005558260045561ff0019600754166007558260015582805560018060a01b03165af1610f8861085c565b501561059157565b336001600160601b0360a01b600354161760035561012c42018042116104e557600455600555565b610fc06108d1565b610fe0576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b60015460025481018091116104e55790565b61100b82826113f3565b915f5b6008811061109c5750611028610b1e610acb858486610a45565b925f9260ff851694608086105f1461104257505050505090565b6110539193949550610b2e90610a64565b915f935b83851061106657505050505090565b909192939461107760019160081b90565b611090610b2e610b1e610acb610e758b610e708b61089a565b17950193929190611057565b926110aa60019183856110b1565b930161100e565b91908082101561120c576110cc610b1e610acb848487610a45565b9060ff821660808110156110e757505050610bdb915061089a565b91929160b881101561110f575050610bdb9250610b2e611109610b349261089a565b92610a64565b90929060c08110156111855750610b2e61112b91949394610a8a565b915f935f915b84831061114c57505050610bdb9291610e70610e709261089a565b90919461115b60019160081b90565b61117b610b2e610b1e610acb6111748b610e708b61089a565b8888610a45565b1795019190611131565b90929060f811156111ab5750610bdb9250610b2e6111a5610b349261089a565b92610a77565b9291610b2e6111b991610a51565b915f935f915b8483106111da57505050610bdb9291610e70610e709261089a565b9091946111e960019160081b90565b611202610b2e610b1e610acb6111748b610e708b61089a565b17950191906111bf565b6318d76ae160e11b5f5260045ffd5b805115610a405760200190565b908151811015610a40570160200190565b919390929190600360fe1b6001600160f81b031961125a610acb8689610a37565b16106113e457601f60fb1b6001600160f81b031961127b610acb8689610a37565b16106113da5761129f61129a610b2e610b24610b1e610acb888b610a37565b6108b6565b9492905b945f5b8282106112b857505050505050505f90565b6112d66112cf836112ca36878a610913565b611550565b90936108c4565b96825160208401200361137857600360fe1b6113126113056112f78561121b565b516001600160f81b03191690565b6001600160f81b03191690565b10611378578590846001601f60fb1b6113306113056112f78861121b565b10156113bc575b61134181866116f7565b60118103611383575061135394611882565b94911561137857841561136c5793915b919590936112a6565b50505050505050600190565b505050505050505f90565b9093506002141590506113b05784879261139c9461173c565b94911561137857841561136c579391611363565b50505050505050505f90565b506113d561129a610b2e610b24610b1e6112f78961121b565b611337565b60019492906112a3565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b031961140f610acb8686610a37565b1610610ba857601f60fb1b6001600160f81b0319611430610acb8686610a37565b16106115025780610b34610b2e610b29610b24610b1e610acb611454978a8a610a45565b905b61a5bd461480156114f7575b61146d575b50905090565b5f5b600381106114e25750600360fe1b61148e611305610acb858786610a45565b10610ba857601f60fb1b6114a9611305610acb858786610a45565b106114d257610b2e610b29610b24610b1e610acb866114cb98610b3497610a45565b805f611467565b506114dd915061089a565b6114cb565b916114f060019185846110b1565b920161146f565b5061a5bf4614611462565b50600190611456565b60409061151782610815565b6001815291601f1901366020840137565b9061153561087083610840565b8281528092611546601f1991610840565b0190602036910137565b805182101561120c57611569610b1e6112f78484611228565b9160ff831660808110156115a25750505061158261150b565b9060f81b6001600160f81b0319165f1a61159b8261121b565b5390600190565b919392909160b881101561160c5750610b2e6115bd91610a64565b906115c782611528565b935f5b8381106115dd57505050610bdb906108b6565b806115f96112f76115f3600194610e708861089a565b85611228565b5f1a6116058289611228565b53016115ca565b60c011156116aa57610b2e61162091610a8a565b5f915f5b82811061167c575061163583611528565b945f5b84811061164f5750505090610e70610bdb926108b6565b806116696112f76115f3600194610e7089610e708a61089a565b5f1a611675828a611228565b5301611638565b9260019060081b6116a2610b2e610b1e6112f761169c89610e708961089a565b8b611228565b179301611624565b50916116b68382611997565b926116c084611528565b915f5b8581106116d1575050509190565b806116e46112f76115f3600194876108c4565b5f1a6116f08287611228565b53016116c3565b5f92915b81518110156117225761170e8183611997565b81018091116104e5576001909301926116fb565b5050565b908160011b91808304600214901517156104e557565b8394929161174a8183611550565b93906117696020611760610b1e6112f78561121b565b16151591611ac4565b9788911561180b575061177d9051876108c4565b6117878251611726565b1461179c575b505050505050505f905f905f90565b868660019282516117f9575b5050506117b6575b8061178d565b6117c9926117c3916108c4565b90611550565b50602081519101209060208151910120146117e757808080806117b0565b6117f29151906108c4565b6001915f90565b6118039350611c2f565b86865f6117a8565b61181c939495965061026792611c2f565b6118755761182d926117c3916108c4565b50908151602081145f146118555750602061184d920151925b51906108c4565b916001929190565b801561186957602061184d93012092611846565b505050505f905f905f90565b50505050505f905f905f90565b919092936118908251611726565b85101561193a5750610b1e6112f76118b2926118ac8760011c90565b90611228565b600184166119315760041c600f16915b905f925b60ff8116841061191157506118db9250611550565b50805180156119065761184d91602082036118fc576020915001519161089a565b602001209161089a565b5050505f905f905f90565b9091600161192582610b3460ff9487611997565b940193929190506118c6565b600f16916118c2565b9290509392935f915b6010831061197d576119559250611550565b50602081519101209060208151910120145f1461197457600191905f90565b5f915081908190565b9061198e81610b3460019385611997565b92019190611943565b90815181101561120c576119b1610b1e6112f78385611228565b9160ff831660808110156119c85750505050600190565b60b88110156119e357505050610b2e610b29610bdb92610a64565b60c0811015611a4f575091610b2e6119fa91610a8a565b905f925f915b838310611a175750505090610e70610bdb926108b6565b909193611a2660019160081b90565b611a45610b2e610b1e6112f7611a3f8a610e708961089a565b88611228565b1794019190611a00565b60f81115611a68575050610b2e610b29610bdb92610a77565b91610b2e611a7591610a51565b905f925f915b838310611a925750505090610e70610bdb926108b6565b909193611aa160019160081b90565b611aba610b2e610b1e6112f7611a3f8a610e708961089a565b1794019190611a7b565b90815115611c2d57611adb610b1e6112f78461121b565b6010811615611baa57611afe611af9611af48551611726565b6108f8565b611528565b9060f81b600f60f81b165f1a611b138261121b565b5360015b8351811015611ba55780611b52611b42611b39610b1e6112f76001968a611228565b60041c600f1690565b60f81b6001600160f81b03191690565b611b6b611b61611af484611726565b915f1a9185611228565b53611b92600f611b81610b1e6112f7858a611228565b1660f81b6001600160f81b03191690565b611b9e611b6183611726565b5301611b17565b509150565b50611bc0611af9611bbb8451611726565b6108e9565b60015b8351811015611ba55780611be5611b42611b39610b1e6112f76001968a611228565b611bf9611b61611bf4846108f8565b611726565b53611c0f600f611b81610b1e6112f7858a611228565b611c26611b61611c21611bf4856108f8565b61089a565b5301611bc3565b565b919091611c3d8251846108c4565b611c478251611726565b10611ce6575f5b8251811015611cdd57611c6a611c6482866108c4565b60011690565b611cbf57611c93611b39610b1e6112f7611c8d611c87868a6108c4565b60011c90565b86611228565b60ff611ca8610b2e610b1e6112f78689611228565b911603611cb757600101611c4e565b505050505f90565b600f611cd7610b1e6112f7611c8d611c87868a6108c4565b16611c93565b50505050600190565b5050505f9056fea2646970667358221220f4598e927f93dbeaa4a20f290936343400629961d598e1f51e8a971f4c36efcc64736f6c634300081e0033","sourceMap":"92:4594:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;92:4594:22;;;;2363:15:20;-1:-1:-1;;;;;92:4594:22;2349:10:20;:29;2345:56;;2411:27;92:4594:22;;-1:-1:-1;;92:4594:22;;;;2345:56:20;2387:14;;;92:4594:22;2387:14:20;92:4594:22;;2387:14:20;92:4594:22;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;1263:29:20;92:4594:22;;;-1:-1:-1;;;;;92:4594:22;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;;;;;;;;;;;;;;;;;;;;2799:17;92:4594;;2780:17;;;;:::i;:::-;2799;;:::i;:::-;2916:60;2958:17;;;;:::i;:::-;2916:60;;:::i;:::-;92:4594;3022:20;;;2990:103;2991:102;3022:20;;;;:::i;:::-;3044:18;;;;;;;;;:::i;:::-;3064:10;;;;;;;;;:::i;:::-;2991:102;;;;:::i;:::-;2990:103;;92:4594;2990:103;2986:157;;3300:99;3299:100;3267:17;3349:23;3229:56;3267:17;;;;:::i;:::-;3229:56;;:::i;:::-;3331:16;3374:10;3331:16;;;;3349:23;3331:16;;;;:::i;:::-;3349:23;;;;;;:::i;:::-;3374:10;;;;;:::i;3299:100::-;3295:159;;3525:56;3564:16;3524:57;3564:16;;;:::i;:::-;3525:56;;:::i;3524:57::-;3520:80;;3722:20;3682:96;3722:20;3681:97;3722:20;;:::i;:::-;3763:14;;3744:17;;3682:96;;:::i;3681:97::-;3677:158;;;;:::i;:::-;92:4594;3677:158;3801:23;;;-1:-1:-1;3801:23:22;92:4594;-1:-1:-1;3801:23:22;3520:80;3590:10;;;-1:-1:-1;3590:10:22;92:4594;-1:-1:-1;3590:10:22;3295:159;3422:21;;;-1:-1:-1;3422:21:22;92:4594;-1:-1:-1;3422:21:22;2986:157;3116:16;;;-1:-1:-1;3116:16:22;92:4594;-1:-1:-1;3116:16:22;92:4594;;;;;;-1:-1:-1;;92:4594:22;;;;;;;963:39:20;92:4594:22;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;1407:31:20;92:4594:22;;;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;;1085:3:20;92:4594:22;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;3850:21:20;;;:60;;;;92:4594:22;3846:204:20;;;92:4594:22;4200:6:20;92:4594:22;;;;;;4199:7:20;4195:31;;92:4594:22;;4236:55:20;;4305:11;;:::i;:::-;4301:47;;92:4594:22;;;;2438:9;4362:37:20;4358:68;;2472:9:22;2438;2472;:::i;4358:68:20:-;4408:18;;;92:4594:22;4408:18:20;92:4594:22;;4408:18:20;4301:47;4325:23;;;92:4594:22;4325:23:20;92:4594:22;;4325:23:20;4236:55;4268:23;;;92:4594:22;4268:23:20;92:4594:22;;4268:23:20;4195:31;4215:11;;;92:4594:22;4215:11:20;92:4594:22;;4215:11:20;3846:204;3949:10;92:4594:22;;;;;;;;;;;;;3973:33:20;92:4594:22;;;;;;;;;3973:33:20;92:4594:22;3973:33:20;;:::i;:::-;3846:204;;92:4594:22;;:::i;3850:60:20:-;3875:15;;;:35;3850:60;;;92:4594:22;;;;;;-1:-1:-1;;92:4594:22;;;;;4320:4;92:4594;;4298:26;92:4594;;;;4298:26;92:4594;;;;5260:7:20;5256:31;;5315:15;-1:-1:-1;;;;;92:4594:22;5301:10:20;:29;5297:56;;4298:26:22;;:::i;:::-;4422:30;;:::i;:::-;4393:59;92:4594;;5686:14:20;92:4594:22;;5686:14:20;92:4594:22;5695:5:20;92:4594:22;;5695:5:20;92:4594:22;;5636:138:20;4393:59:22;4499:23;;4495:57;;92:4594;5301:10:20;;;;;4581:46:22;;;;:::i;:::-;;4641:8;4637:40;;92:4594;4637:40;4658:19;;;92:4594;4658:19;92:4594;;4658:19;4495:57;4531:21;;;92:4594;4531:21;92:4594;;4531:21;92:4594;;;;;;-1:-1:-1;;92:4594:22;;;;;1336:25:20;92:4594:22;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;2113:15:20;-1:-1:-1;;;;;92:4594:22;2099:10:20;:29;2095:56;;2161:26;92:4594:22;;-1:-1:-1;;92:4594:22;2183:4:20;92:4594:22;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;873:42:20;-1:-1:-1;;;;;92:4594:22;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;727:35:20;92:4594:22;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;;;1748:15;-1:-1:-1;;;;;92:4594:22;1734:10;:29;1730:56;;1800:6;92:4594;;;;;1796:34;;1844:25;;1840:56;;1910:26;;1906:58;;1991:44;;;;:::i;:::-;1978:9;:57;1974:90;;2127:43;92:4594;2180:44;92:4594;-1:-1:-1;92:4594:22;2127:43;92:4594;;2127:43;2180:44;92:4594;;2180:44;2234:13;92:4594;;;1800:6;92:4594;;;1800:6;92:4594;;1974:90;2044:20;;;-1:-1:-1;2044:20:22;92:4594;-1:-1:-1;2044:20:22;1906:58;1945:19;;;-1:-1:-1;1945:19:22;92:4594;-1:-1:-1;1945:19:22;1840:56;1878:18;;;-1:-1:-1;1878:18:22;92:4594;-1:-1:-1;1878:18:22;1796:34;1815:15;;;-1:-1:-1;1815:15:22;92:4594;-1:-1:-1;1815:15:22;92:4594;;;;;;-1:-1:-1;;92:4594:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;768:35:20;92:4594:22;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;1444:18:20;92:4594:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;1367:34:20;92:4594:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;92:4594:22;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;92:4594:22;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;-1:-1:-1;92:4594:22;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;9151:2:25;92:4594:22;;;;;;;:::o;:::-;1984:1:23;92:4594:22;;;1984:1:23;92:4594:22;;;:::o;:::-;;;;;;;;;;:::o;2519:133:20:-;2584:17;92:4594:22;2584:21:20;;;:61;;;;2577:68;2519:133;:::o;2584:61::-;2609:15;;;:36;;2519:133;:::o;92:4594:22:-;-1:-1:-1;;92:4594:22;;;;;;;;:::o;:::-;-1:-1:-1;;92:4594:22;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2729:743:20:-;;2842:7;92:4594:22;2843:6:20;92:4594:22;;;;;;;;2842:7:20;2838:31;;2897:14;92:4594:22;-1:-1:-1;;;;;92:4594:22;2883:10:20;:28;;;:44;;;2729:743;2879:77;;2990:12;2970:32;;2966:66;;1085:3;3046:32;2990:12;;3046:32;:::i;:::-;:53;3042:85;;3164:28;;3206:29;;3202:64;;92:4594:22;;;;;:::i;:::-;;;;;;3280:22:20;:41;3276:75;;3365:49;;;:::i;:::-;:70;3361:104;;2729:743::o;3361:104::-;3444:21;;;3233:1;3444:21;;3233:1;3444:21;3276:75;3330:21;;;3233:1;3330:21;;3233:1;3330:21;3202:64;3244:22;;;3233:1;3244:22;;3233:1;3244:22;3042:85;3108:19;;;;;;;;2966:66;3011:21;;;;;;;;2879:77;2936:20;;;;;;;;2883:44;2916:11;2915:12;2916:11;;:::i;2915:12::-;2883:44;;92:4594:22;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;4155:926:19:-;;4275:1;-1:-1:-1;;;;;;;;;4323:19:19;;4155:926;;4323:19;:::i;:::-;;-1:-1:-1;;;;;;92:4594:22;;;4323:19:19;92:4594:22;4323:26:19;4319:55;;-1:-1:-1;;;;;;;;;4388:19:19;;;;;:::i;:::-;92:4594:22;4388:27:19;92:4594:22;;4452:19:19;4431:49;4441:39;4446:33;:26;4452:19;;4431:49;4452:19;;;;:::i;:::-;92:4594:22;;;;4446:26:19;:33;:::i;:::-;4441:39;:::i;:::-;92:4594:22;;;;4431:49:19;;;:::i;:::-;4384:149;;4275:1;4631:5;4635:1;4631:5;;;;-1:-1:-1;;;;92:4594:22;-1:-1:-1;;;;;;92:4594:22;4821:19:19;;;;92:4594:22;;4821:19:19;;:::i;:::-;92:4594:22;4821:27:19;4817:60;;4887:11;;;:::i;:::-;4943:98;;4155:926;:::o;4817:60::-;4857:20;;;4275:1;4857:20;4635:1;4275;4857:20;4616:13;4662:28;;92:4594:22;4662:28:19;;;;:::i;:::-;92:4594:22;;4616:13:19;;4384:149;4511:11;4521:1;4384:149;;;4319:55;4358:16;;;4275:1;4358:16;;4275:1;4358:16;720:484:23;92:4594:22;;720:484:23;;;;1148:49;720:484;;92:4594:22;;;:::i;:::-;;;;;:::i;:::-;1148:49:23;;:::i;:::-;720:484;:::o;3219:769:19:-;;3335:33;;;;:::i;:::-;3539:13;3551:1;3554:5;3558:1;3554:5;;;;-1:-1:-1;;;;92:4594:22;-1:-1:-1;;;;;;92:4594:22;3740:19:19;;92:4594:22;;3740:19:19;;:::i;:::-;;92:4594:22;3740:27:19;3736:60;;92:4594:22;;;;;;;3858:94:19;92:4594:22;3858:94:19;;;3219:769::o;3539:13::-;3585:28;;92:4594:22;3585:28:19;;;;:::i;:::-;92:4594:22;;3539:13:19;;6516:993:25;6630:1;6690:21;;;;:52;;;6516:993;6686:123;;6516:993;6883:4;92:4594:22;6855:25:25;6861:18;;;;;;:::i;6855:25::-;92:4594:22;6855:32:25;6851:57;;7235:18;;6928;;;6951:4;92:4594:22;6922:25:25;6928:18;;;;7442:4;6928:18;7229:25;6928:18;;:::i;6922:25::-;92:4594:22;6922:33:25;6951:4;;6992:18;6971:48;6981:38;6986:32;:25;6992:18;;6971:48;6992:18;;;;:::i;6971:48::-;6918:154;7235:18;:::i;7229:25::-;92:4594:22;7428:18:25;7424:56;;7442:4;6516:993;:::o;7424:56::-;7455:25;;;6630:1;7455:25;;6630:1;7455:25;6918:154;7050:11;;;:::i;6851:57::-;6896:12;;;6630:1;6896:12;;6630:1;6896:12;6686:123;4521:1:19;;-1:-1:-1;6686:123:25;;6690:52;6721:13;6738:4;92:4594:22;6715:20:25;6721:13;;;;;:::i;6715:20::-;92:4594:22;6715:27:25;6690:52;;7611:2113;;;7892:1;;92:4594:22;7962:16:25;;;;:42;;7611:2113;7958:485;;7611:2113;8508:4;92:4594:22;8485:20:25;8491:13;;;;;;:::i;8485:20::-;92:4594:22;8485:27:25;8481:52;;8559:13;8577:4;92:4594:22;8553:20:25;8559:13;;8543:78;8559:13;;;;:::i;8553:20::-;92:4594:22;8553:28:25;:68;;92:4594:22;8584:33:25;8589:27;:20;8595:13;;;;;;:::i;8584:33::-;92:4594:22;8543:78:25;;:::i;:::-;8667:13;92:4594:22;8662:149:25;8682:11;;;;;;8895:13;;8913:4;92:4594:22;8889:20:25;8895:13;;;;;;:::i;8889:20::-;92:4594:22;8889:28:25;8885:57;;-1:-1:-1;;;;;92:4594:22;8972:95:25;;;92:4594:22;8972:95:25;;;;9080:23;9076:55;;9141:12;;;:::i;:::-;9213:13;9207:20;9213:13;;;;;;:::i;9207:20::-;9237:13;92:4594:22;;;;;9264:13:25;9273:4;9264:13;;9260:374;9273:4;;;9293:14;;;;;9260:374;9647:23;9643:52;;92:4594:22;7611:2113:25;:::o;9643:52::-;9679:16;;;92:4594:22;9679:16:25;;92:4594:22;9679:16:25;9260:374;9328:14;;;;;9273:4;9328:14;9324:310;9273:4;;;9358:9;;;;;92:4594:22;9260:374:25;;9324:310;9412:13;9398:27;9412:13;;;;;:::i;9398:27::-;9444:13;92:4594:22;9439:185:25;9459:7;;;;;;9324:310;;;;;9260:374;;9444:13;9496:10;;;;;;92:4594:22;9496:10:25;92:4594:22;;;;9496:10:25;9495:43;9510:28;9516:21;;9522:14;:10;;;;:::i;:::-;:14;:::i;:::-;9516:21;;;:::i;9495:43::-;;92:4594:22;;9444:13:25;;;;;;9076:55;9112:19;;;92:4594:22;9112:19:25;;92:4594:22;9112:19:25;8885:57;8926:16;;;92:4594:22;8926:16:25;;92:4594:22;8926:16:25;8667:13;8719:22;;;92:4594:22;8719:22:25;;;;:::i;:::-;92:4594:22;;8667:13:25;;;8553:68;92:4594:22;8620:1:25;8553:68;;7958:485;8041:8;;;8035:15;8041:8;;;;;:::i;8035:15::-;8073:1;;8064:10;92:4594:22;;8092:14:25;;;8073:1;;8126:11;8136:1;8088:345;7958:485;;8088:345;8238:4;8228:14;8238:4;;8272:1;8224:209;7958:485;;8224:209;8399:19;;;92:4594:22;8399:19:25;;92:4594:22;8399:19:25;7962:42;7988:8;8000:4;92:4594:22;7982:15:25;7988:8;;;;;:::i;7982:15::-;92:4594:22;7982:22:25;7962:42;;3867:264:22;5078:10:20;92:4594:22;-1:-1:-1;92:4594:22;;;;;;;;5113:20:20;92:4594:22;;;;;;;;-1:-1:-1;92:4594:22;;;;3969:14;92:4594;-1:-1:-1;;;;;92:4594:22;;;;3969:14;92:4594;;5078:10:20;92:4594:22;;4826:21:20;92:4594:22;;;4857:14:20;92:4594:22;;4857:14:20;92:4594:22;;5113:20:20;92:4594:22;;;;;;;;;;4042:32;;;;:::i;:::-;;4088:8;4084:40;;3867:264::o;4479:187:20:-;4558:10;-1:-1:-1;;;;;92:4594:22;;4541:27:20;92:4594:22;;;4541:27:20;92:4594:22;4616:9:20;4598:15;92:4594:22;4598:15:20;;92:4594:22;;;4578:47:20;92:4594:22;4635:24:20;92:4594:22;4479:187:20:o;3533:184::-;3585:11;;:::i;:::-;3581:36;;-1:-1:-1;;;;;92:4594:22;;3628:27:20;92:4594:22;;3628:27:20;92:4594:22;3653:1:20;3665:14;92:4594:22;3653:1:20;3689:21;92:4594:22;3533:184:20:o;3581:36::-;3605:12;;;;;;;;5438:139;5527:20;92:4594:22;5550:20:20;92:4594:22;;;;;;;;5438:139:20;:::o;2036:1012:19:-;2151:33;;;;:::i;:::-;2386:13;92:4594:22;2401:5:19;2405:1;2401:5;;;;2616:19;2610:26;2616:19;;;;;;:::i;2610:26::-;2646:19;92:4594:22;;;;;2679:13:19;2688:4;2679:13;;2675:338;2688:4;;;2708:20;;;;;2036:1012;:::o;2675:338::-;2759:27;2773:13;;;;;;;;:::i;2759:27::-;2805:13;92:4594:22;2800:203:19;2820:7;;;;;;2675:338;;;;;2036:1012;:::o;2805:13::-;2863:16;;;;;;92:4594:22;2863:16:19;92:4594:22;;;;2863:16:19;2862:55;2883:34;2889:27;;2901:14;:10;;;;:::i;2862:55::-;;92:4594:22;;2805:13:19;;;;;;2386;2432:28;;92:4594:22;2432:28:19;;;;:::i;:::-;92:4594:22;;2386:13:19;;541:1316:24;;;642:21;;;;638:56;;720:19;726:12;;;;;;:::i;720:19::-;92:4594:22;;;;763:4:24;754:13;;763:4;;;817:10;;;;;;;:::i;750:1101::-;848:13;;;857:4;848:13;;857:4;;;912:10;;:28;:10;;926:13;912:10;:28;:10;;:::i;:::-;926:13;;:::i;844:1007::-;961:13;;;970:4;961:13;;970:4;;;1039:13;;1017:35;1039:13;;;;;:::i;1017:35::-;1066:18;92:4594:22;1103:13:24;92:4594:22;1098:194:24;1118:15;;;;;;1312:10;;;:33;:10;;;:24;:10;;:::i;1103:13::-;1164:11;;;;1199:1;1164:11;92:4594:22;;;;1164:11:24;1163:43;1179:27;1185:20;;1190:14;:10;;;;:::i;:14::-;1185:20;;;:::i;1163:43::-;;92:4594:22;;1103:13:24;;;;957:894;1366:13;;;1375:4;-1:-1:-1;1375:4:24;;;1428:10;:28;:10;;1442:13;1428:10;:28;:10;;:::i;:::-;1442:13;;:::i;1362:489::-;1534:13;;;1512:35;1534:13;;:::i;1512:35::-;1561:18;92:4594:22;1598:13:24;92:4594:22;1593:194:24;1613:15;;;;;;1807:10;;;:33;:10;;;:24;:10;;:::i;1598:13::-;1659:11;;;;1694:1;1659:11;92:4594:22;;;;1659:11:24;1658:43;1674:27;1680:20;;1685:14;:10;;;;:::i;1658:43::-;;92:4594:22;;1598:13:24;;;;638:56;672:22;;;92:4594:22;672:22:24;;92:4594:22;672:22:24;92:4594:22;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;1567:2467:23:-;;;;;;;-1:-1:-1;;;;;;;;;1809:13:23;;1567:2467;;1809:13;:::i;:::-;92:4594:22;1809:20:23;1805:50;;-1:-1:-1;;;;;;;;;1870:13:23;;;;;:::i;:::-;92:4594:22;1870:21:23;92:4594:22;;1984:15:23;1907:49;1929:27;:20;1935:13;;;;;:::i;1907:49::-;1984:15;:::i;:::-;1866:190;;;;2102:33;92:4594:22;2184:31:23;;;;;;4015:12;;;;;;;92:4594:22;1567:2467:23;:::o;2177:1828::-;2368:25;2321:33;92:4594:22;;;;;;:::i;:::-;2321:33:23;:::i;:::-;2368:25;;;:::i;:::-;92:4594:22;;;;;;2465:15:23;:30;2461:81;;-1:-1:-1;;;2641:15:23;:7;;;;:::i;:::-;92:4594:22;-1:-1:-1;;;;;;92:4594:22;;;2641:7:23;-1:-1:-1;;;;;;92:4594:22;;;2641:15:23;;92:4594:22;;2676:14:23;;;2689:1;-1:-1:-1;;;2712:15:23;:7;;;;:::i;:15::-;;;2708:97;;2637:1358;2839:32;;;;:::i;:::-;2903:2;2894:11;;2903:2;;3044:58;;;;:::i;:::-;3129:8;;;3125:26;;3177:21;;3173:38;;3280:21;2890:1040;;2177:1828;;;;;;3173:38;3200:11;;;;;;;2689:1;3200:11;:::o;3125:26::-;3139:12;;;;;;;92:4594:22;3139:12:23;:::o;2890:1040::-;3330:10;;-1:-1:-1;3339:1:23;3330:10;3339:1;;-1:-1:-1;3339:1:23;;3490:67;;;;;;:::i;:::-;3584:8;;;3580:75;;3680:21;;3676:87;;3831:21;3326:604;2890:1040;;3326:604;3899:12;;;;;;;;92:4594:22;3899:12:23;:::o;2708:97::-;2771:7;2751:35;;2765:21;:14;2771:7;;;;:::i;2751:35::-;2708:97;;1866:190;2044:1;1866:190;;;;;1805:50;1838:17;;;92:4594:22;1838:17:23;;92:4594:22;1838:17:23;738:1134:19;854:1;-1:-1:-1;;;;;;;;;908:19:19;;;;;:::i;:::-;92:4594:22;908:26:19;904:55;;-1:-1:-1;;;;;;;;;973:19:19;;;;;:::i;:::-;92:4594:22;973:27:19;92:4594:22;;1037:19:19;1016:49;1026:39;1031:33;:26;1037:19;;1016:49;1037:19;;;;:::i;1016:49::-;969:149;;1221:5;1204:13;:22;:48;;;;969:149;1200:642;;969:149;1852:13;;;738:1134;:::o;1200:642::-;854:1;1380:5;1384:1;1380:5;;;;-1:-1:-1;;;;1602:26:19;:19;;;;;;:::i;:26::-;;1598:55;;-1:-1:-1;;;1671:27:19;:19;;;;;;:::i;:27::-;;92:4594:22;;1728:39:19;1733:33;:26;1739:19;;;1718:49;1739:19;1718:49;1739:19;;:::i;1718:49::-;1200:642;;;;1667:165;1806:11;;;;;:::i;:::-;1667:165;;1365:13;1415:28;;92:4594:22;1415:28:19;;;;:::i;:::-;92:4594:22;;1365:13:19;;1204:48;:13;1247:5;1204:13;1230:22;1204:48;;969:149;1096:11;4521:1;969:149;;;92:4594:22;;;;;;:::i;:::-;2457:1:24;92:4594:22;;;-1:-1:-1;;92:4594:22;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;2143:1860:24:-;92:4594:22;;2257:21:24;;;2253:56;;2335:19;2341:12;;;;;:::i;2335:19::-;92:4594:22;;;;2378:4:24;2369:13;;2378:4;;;2447:12;;;;;:::i;:::-;92:4594:22;;;-1:-1:-1;;;;;;92:4594:22;;2473:26:24;;92:4594:22;2473:26:24;:::i;:::-;;2513:18;2457:1;2513:18;:::o;2365:1632::-;2552:13;;;;;2561:4;2552:13;;2561:4;;;2626:13;;2609:30;2626:13;;:::i;2609:30::-;2675:17;;;;:::i;:::-;2711:13;92:4594:22;2726:10:24;;;;;;2904;;;;;;:::i;2711:13::-;2774:10;2769:20;;2774:14;2783:1;2774:10;;;;:::i;:14::-;2769:20;;:::i;:::-;92:4594:22;2757:32:24;;;;;:::i;:::-;;92:4594:22;2711:13:24;;2548:1449;2945:4;-1:-1:-1;2945:4:24;;;3014:13;2992:35;3014:13;;:::i;2992:35::-;92:4594:22;3078:13:24;92:4594:22;3093:15:24;;;;;;3302:17;;;;:::i;:::-;3338:13;92:4594:22;3353:10:24;;;;;;3545:15;;;;;:24;:15;;:::i;3338:13::-;3401:10;3396:34;;3401:28;3174:1;3401:10;:24;:10;;;;:::i;3396:34::-;92:4594:22;3384:46:24;;;;;:::i;:::-;;92:4594:22;3338:13:24;;3078;3139:11;3174:1;;92:4594:22;;3138:43:24;3154:27;3160:20;;3165:14;:10;;;;:::i;:14::-;3160:20;;:::i;3138:43::-;;92:4594:22;;3078:13:24;;2932:1065;3676:27;;;;;;:::i;:::-;3739:22;;;;:::i;:::-;3780:13;92:4594:22;3795:15:24;;;;;;3958:28;;;;;:::o;3780:13::-;3848:10;3843:16;;3848:10;92:4594:22;3848:10:24;;;:::i;3843:16::-;92:4594:22;3831:28:24;;;;;:::i;:::-;;92:4594:22;3780:13:24;;4233:351:23;4392:1;;4233:351;4403:153;92:4594:22;;4410:20:23;;;;;4456:26;;;;:::i;:::-;92:4594:22;;;;;;;;4446:36:23;92:4594:22;;4403:153:23;;;4410:20;;;4233:351::o;92:4594:22:-;;;;;;;;;7928:1:23;92:4594:22;;;;;;;:::o;7310:1816:23:-;;;;;7616:26;;;;:::i;:::-;7673:9;;7740:26;7686:4;7667:16;7673:9;;;;:::i;7667:16::-;:23;7666:30;;7740:26;;:::i;:::-;7777:1343;;;;;;92:4594:22;7885:26:23;92:4594:22;;7885:26:23;;:::i;:::-;7915:14;92:4594:22;;7915:14:23;:::i;:::-;7885:44;7881:546;;7777:1343;8441:29;;;;;;;7680:1;8441:29;7680:1;8441:29;7680:1;8441:29;:::o;7881:546::-;7949:22;;7967:4;92:4594:22;;;7989:114:23;;7881:546;8121:292;;;;;7881:546;;;;8121:292;8187:38;8202:22;;;;:::i;:::-;8187:38;;:::i;:::-;92:4594:22;7686:4:23;92:4594:22;;;;8251:20:23;92:4594:22;7686:4:23;92:4594:22;;;;8275:16:23;8251:40;8247:148;;8121:292;;;;;;8247:148;8333:26;92:4594:22;;8333:26:23;;:::i;:::-;7967:4;;7680:1;;8319:53::o;7989:114::-;8048:36;;;;:::i;:::-;7989:114;;;;;7777:1343;8535:37;8536:36;;;;;;;;:::i;8535:37::-;8531:105;;8676:38;8691:22;;;;:::i;8676:38::-;8728:12;;92:4594:22;;7686:4:23;8758:20;;8754:294;7686:4;;;8798:80;7686:4;9076:26;8798:80;;;8754:294;;92:4594:22;9076:26:23;;:::i;:::-;9062:47;9070:4;9062:47;;;:::o;8754:294::-;8902:18;;;;7686:4;9076:26;92:4594:22;;8947:18:23;8898:150;8754:294;;8898:150;9004:29;;;;7680:1;9004:29;7680:1;9004:29;7680:1;9004:29;:::o;8531:105::-;8592:29;;;;;7680:1;8592:29;7680:1;8592:29;7680:1;8592:29;:::o;5044:1795::-;;;;;5315:14;92:4594:22;;5315:14:23;:::i;:::-;5302:27;;;5298:630;;5998:13;5994:18;;5988:25;5998:13;;;92:4594:22;;;;5998:13:23;5994:18;;:::i;5988:25::-;92:4594:22;;;6027:13:23;;92:4594:22;;;;6023:122:23;;6244:13;-1:-1:-1;6239:165:23;6259:10;92:4594:22;;;6259:10:23;;;;6441:28;;;;;:::i;:::-;92:4594:22;;;6483:20:23;;6479:96;;6812:13;;6630:2;6611:21;;6630:2;;;6648:73;;;;6607:181;6812:13;:::i;6607:181::-;6630:2;92:4594:22;6758:19:23;6607:181;6812:13;:::i;6479:96::-;6519:29;;;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;:::o;6244:13::-;6302:32;;92:4594:22;6286:48:23;6302:32;;92:4594:22;6302:32:23;;;:::i;6286:48::-;92:4594:22;;;;6244:13:23;;-1:-1:-1;6244:13:23;;6023:122;6130:4;6121:13;6023:122;;;5298:630;5401:32;;;;;;-1:-1:-1;5447:179:23;5467:6;5471:2;5467:6;;;;5667:27;;;;:::i;:::-;92:4594:22;;;;;;5712:20:23;92:4594:22;;;;;;5736:16:23;5712:40;5708:210;5736:16;;;92:4594:22;5772:36:23;;-1:-1:-1;5772:36:23;:::o;5708:210::-;-1:-1:-1;;;;;;;5874:29:23:o;5452:13::-;5509:31;5494:46;5509:31;;92:4594:22;5509:31:23;;;:::i;5494:46::-;92:4594:22;;5452:13:23;;;;4217:1141:24;;92:4594:22;;4321:21:24;;;4317:56;;4399:19;4405:12;;;;;:::i;4399:19::-;92:4594:22;;;;4442:4:24;4433:13;;4442:4;;;4462:8;;;;4469:1;4462:8;:::o;4429:923::-;4500:4;4491:13;;4500:4;;;4532:13;;;4527:19;4532:13;4520:26;4532:13;;:::i;4487:865::-;4576:4;4567:13;;4576:4;;;4618:13;;;4596:35;4618:13;;:::i;4596:35::-;4645:18;92:4594:22;4682:13:24;92:4594:22;4677:194:24;4697:15;;;;;;4891;;;;;:24;:15;;:::i;4682:13::-;4743:11;;;;4778:1;4743:11;92:4594:22;;;;4743:11:24;4742:43;4758:27;4764:20;;4769:14;:10;;;;:::i;:14::-;4764:20;;:::i;4742:43::-;;92:4594:22;;4682:13:24;;;;4563:789;4945:4;-1:-1:-1;4945:4:24;;;4977:13;;4972:19;4977:13;4965:26;4977:13;;:::i;4932:420::-;5044:13;;5022:35;5044:13;;:::i;5022:35::-;5071:18;92:4594:22;5108:13:24;92:4594:22;5103:194:24;5123:15;;;;;;5317;;;;;:24;:15;;:::i;5108:13::-;5169:11;;;;5204:1;5169:11;92:4594:22;;;;5169:11:24;5168:43;5184:27;5190:20;;5195:14;:10;;;;:::i;5168:43::-;;92:4594:22;;5108:13:24;;;;9295:1058:23;;92:4594:22;;9395:19:23;9391:39;;9459:17;9465:10;;;;:::i;9459:17::-;9512:4;9500:16;;9499:23;9512:4;;9596:33;9606:22;:18;92:4594:22;;9606:18:23;:::i;:::-;:22;:::i;:::-;9596:33;:::i;:::-;92:4594:22;;;-1:-1:-1;;;92:4594:22;9413:1:23;9643:36;;92:4594:22;9643:36:23;:::i;:::-;;9627:1;9698:13;92:4594:22;;9713:18:23;;;;;9785:10;9772:30;9779:22;:17;9785:10;;9627:1;9785:10;;;:::i;9779:17::-;92:4594:22;;;;;;9779:22:23;92:4594:22;;-1:-1:-1;;;;;;92:4594:22;;;9772:30:23;9752:50;9759:9;:5;;;:::i;:9::-;9752:50;9413:1;9752:50;;;;:::i;:::-;;9836:32;9674:4;9843:17;9849:10;;;;;:::i;9843:17::-;:24;92:4594:22;;-1:-1:-1;;;;;;92:4594:22;;;9836:32:23;9820:48;9827:5;;;:::i;9820:48::-;;92:4594:22;9698:13:23;;9713:18;-1:-1:-1;9713:18:23;-1:-1:-1;9295:1058:23:o;9562:761::-;92:4594:22;9993:33:23;10003:22;:18;92:4594:22;;10003:18:23;:::i;:::-;:22;:::i;9993:33::-;10057:1;10045:13;92:4594:22;;10060:18:23;;;;;10134:10;10121:30;10128:22;:17;10134:10;;10057:1;10134:10;;;:::i;10121:30::-;10099:52;10106:11;10107:5;;;:::i;:::-;10106:11;:::i;10099:52::-;;10195:32;10222:4;10202:17;10208:10;;;;;:::i;10195:32::-;10169:58;10176:15;:11;10177:5;;;:::i;10176:11::-;:15;:::i;10169:58::-;;92:4594:22;10045:13:23;;9391:39;9416:14::o;10590:651::-;;;;10709:23;92:4594:22;;10709:23:23;;:::i;:::-;10735:14;92:4594:22;;10735:14:23;:::i;:::-;-1:-1:-1;10705:58:23;;-1:-1:-1;10779:13:23;92:4594:22;;10794:18:23;;;;;10862:16;10863:10;;;;:::i;:::-;92:4594:22;;;;10862:16:23;10863:10;;10915:33;:28;10921:21;;10925:16;10926:10;;;;:::i;:::-;92:4594:22;;;;10925:16:23;10921:21;;:::i;10915:33::-;92:4594:22;11067:30:23;11080:17;11086:10;;;;;:::i;11067:30::-;92:4594:22;;11067:30:23;11063:81;;92:4594:22;;10779:13:23;;11063:81;11117:12;;;;-1:-1:-1;11117:12:23;:::o;10858:191::-;11030:4;10999:28;11005:21;;11009:16;11010:10;;;;:::i;10999:28::-;:35;10858:191;;10794:18;;;;;92:4594:22;10590:651:23;:::o;10705:58::-;10751:12;;;-1:-1:-1;10751:12:23;:::o","linkReferences":{},"immutableReferences":{"40183":[{"start":342,"length":32},{"start":1310,"length":32},{"start":1502,"length":32},{"start":1680,"length":32}],"40191":[{"start":775,"length":32},{"start":1584,"length":32}],"40193":[{"start":741,"length":32},{"start":909,"length":32}]}},"methodIdentifiers":{"MAX_BLOCK_LOOKBACK()":"3d2691bc","bond()":"64c9ec6f","bondAmount()":"80f323a7","bondedExecutor()":"1aa7c0ec","cancelAndWithdraw()":"6b892b22","cancellationRequest()":"308657d7","collect((bytes,bytes,bytes,bytes,bytes,bytes),uint256)":"23a8b41a","currentPaymentAmount()":"8bd03d0a","currentRewardAmount()":"5a4fd645","executionDeadline()":"33ee5f35","expectedAmount()":"2feef2ec","expectedRecipient()":"8677ab23","fund(uint256,uint256)":"a65e2cfd","funded()":"f3a504f2","is_bonded()":"cb766a56","originalRewardAmount()":"d415b3f9","requestCancellation()":"81972d00","resume()":"046f7da2","totalBondsDeposited()":"fe03a460"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_expectedRecipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expectedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentRewardAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentPaymentAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHashUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHeaderMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockNumberMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CancellationRequested\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutorAlreadyBonded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBond\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNativeTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLP\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPEncoding\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReceiptProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTxProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoWithdrawableFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyBondedExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDeployer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RLPOffsetOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReceiptStatusNotSuccess\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RecipientMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockInFuture\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockTooOld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TxFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedTxType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroPaymentAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroRewardAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MAX_BLOCK_LOOKBACK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondedExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelAndWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancellationRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"blockHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transactionRlp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txProofNodes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptRlp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptProofNodes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"internalType\":\"struct EscrowNative.NativeTransferProof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"targetBlockNumber\",\"type\":\"uint256\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentPaymentAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executionDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedRecipient\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentRewardAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_currentPaymentAmount\",\"type\":\"uint256\"}],\"name\":\"fund\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"funded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_bonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"originalRewardAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestCancellation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBondsDeposited\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelAndWithdraw()\":{\"notice\":\"Cancel and withdraw funds in a single transaction. Reverts if a node has already bonded.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/EscrowNative.sol\":\"EscrowNative\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"src/BlockHeaderParser.sol\":{\"keccak256\":\"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6\",\"dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p\"]},\"src/EscrowBase.sol\":{\"keccak256\":\"0x53fd262562c9dbc7779339bafbeca6b86b690aec7ac864e30c57e0e42288a11d\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cb43380f5b0a131e1ac4405a43a67b9d2b07718eb05ba675fe46c106b8a12649\",\"dweb:/ipfs/QmNk5QkryXnDspEGc8mdyFYJSRXWRSP8V6yirLC98EKZYG\"]},\"src/EscrowNative.sol\":{\"keccak256\":\"0xd82f8fe348a32f78d337dcf5e63020ac0179fd3652b4e23be3f1b26228350573\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://08add7d17c04c7e59ff6fb28e4a563d0133077779c085b4745e33dfd8be864b4\",\"dweb:/ipfs/Qmdrb9BPtfagU1ztLg8ZsQsUWLU7fhrZd7Sba1Gv4RdDCY\"]},\"src/MPTVerifier.sol\":{\"keccak256\":\"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b\",\"dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU\"]},\"src/RLPParser.sol\":{\"keccak256\":\"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d\",\"dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk\"]},\"src/ReceiptValidator.sol\":{\"keccak256\":\"0x625137f131a6524c06e6c7c6ddc4c3f10256ac8a306b53b2dfed4fe9a3ed9728\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://611b99fa26ae364ea2e0aa721f62ca043ca6d5b0e2bc1c96278639792242f43f\",\"dweb:/ipfs/QmXFkR6amwaZF1QZqZjsneEXBz8C17QmCFyirmHo7eaUaH\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_expectedRecipient","type":"address"},{"internalType":"uint256","name":"_expectedAmount","type":"uint256"},{"internalType":"uint256","name":"_currentRewardAmount","type":"uint256"},{"internalType":"uint256","name":"_currentPaymentAmount","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyFunded"},{"inputs":[],"type":"error","name":"AmountMismatch"},{"inputs":[],"type":"error","name":"BlockHashUnavailable"},{"inputs":[],"type":"error","name":"BlockHeaderMismatch"},{"inputs":[],"type":"error","name":"BlockNumberMismatch"},{"inputs":[],"type":"error","name":"BondActive"},{"inputs":[],"type":"error","name":"CancellationRequested"},{"inputs":[],"type":"error","name":"ETHTransferFailed"},{"inputs":[],"type":"error","name":"ExecutorAlreadyBonded"},{"inputs":[],"type":"error","name":"ExpectedRLPList"},{"inputs":[],"type":"error","name":"IncorrectETHAmount"},{"inputs":[],"type":"error","name":"InsufficientBond"},{"inputs":[],"type":"error","name":"InvalidAddress"},{"inputs":[],"type":"error","name":"InvalidNativeTransfer"},{"inputs":[],"type":"error","name":"InvalidRLP"},{"inputs":[],"type":"error","name":"InvalidRLPEncoding"},{"inputs":[],"type":"error","name":"InvalidRLPList"},{"inputs":[],"type":"error","name":"InvalidReceiptProof"},{"inputs":[],"type":"error","name":"InvalidTxProof"},{"inputs":[],"type":"error","name":"NoWithdrawableFunds"},{"inputs":[],"type":"error","name":"NotFunded"},{"inputs":[],"type":"error","name":"OnlyBondedExecutor"},{"inputs":[],"type":"error","name":"OnlyDeployer"},{"inputs":[],"type":"error","name":"RLPOffsetOutOfBounds"},{"inputs":[],"type":"error","name":"ReceiptStatusNotSuccess"},{"inputs":[],"type":"error","name":"RecipientMismatch"},{"inputs":[],"type":"error","name":"TargetBlockInFuture"},{"inputs":[],"type":"error","name":"TargetBlockTooOld"},{"inputs":[],"type":"error","name":"TxFailed"},{"inputs":[],"type":"error","name":"UnsupportedTxType"},{"inputs":[],"type":"error","name":"ZeroPaymentAmount"},{"inputs":[],"type":"error","name":"ZeroRewardAmount"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_BLOCK_LOOKBACK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"function","name":"bond"},{"inputs":[],"stateMutability":"view","type":"function","name":"bondAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bondedExecutor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancelAndWithdraw"},{"inputs":[],"stateMutability":"view","type":"function","name":"cancellationRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct EscrowNative.NativeTransferProof","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"blockHeader","type":"bytes"},{"internalType":"bytes","name":"transactionRlp","type":"bytes"},{"internalType":"bytes","name":"txProofNodes","type":"bytes"},{"internalType":"bytes","name":"receiptRlp","type":"bytes"},{"internalType":"bytes","name":"receiptProofNodes","type":"bytes"},{"internalType":"bytes","name":"path","type":"bytes"}]},{"internalType":"uint256","name":"targetBlockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"collect"},{"inputs":[],"stateMutability":"view","type":"function","name":"currentPaymentAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"currentRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"executionDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedRecipient","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_currentRewardAmount","type":"uint256"},{"internalType":"uint256","name":"_currentPaymentAmount","type":"uint256"}],"stateMutability":"payable","type":"function","name":"fund"},{"inputs":[],"stateMutability":"view","type":"function","name":"funded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"is_bonded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"originalRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"requestCancellation"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resume"},{"inputs":[],"stateMutability":"view","type":"function","name":"totalBondsDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"cancelAndWithdraw()":{"notice":"Cancel and withdraw funds in a single transaction. Reverts if a node has already bonded."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/EscrowNative.sol":"EscrowNative"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"src/BlockHeaderParser.sol":{"keccak256":"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550","urls":["bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6","dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p"],"license":"UNLICENSED"},"src/EscrowBase.sol":{"keccak256":"0x53fd262562c9dbc7779339bafbeca6b86b690aec7ac864e30c57e0e42288a11d","urls":["bzz-raw://cb43380f5b0a131e1ac4405a43a67b9d2b07718eb05ba675fe46c106b8a12649","dweb:/ipfs/QmNk5QkryXnDspEGc8mdyFYJSRXWRSP8V6yirLC98EKZYG"],"license":"UNLICENSED"},"src/EscrowNative.sol":{"keccak256":"0xd82f8fe348a32f78d337dcf5e63020ac0179fd3652b4e23be3f1b26228350573","urls":["bzz-raw://08add7d17c04c7e59ff6fb28e4a563d0133077779c085b4745e33dfd8be864b4","dweb:/ipfs/Qmdrb9BPtfagU1ztLg8ZsQsUWLU7fhrZd7Sba1Gv4RdDCY"],"license":"UNLICENSED"},"src/MPTVerifier.sol":{"keccak256":"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb","urls":["bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b","dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU"],"license":"UNLICENSED"},"src/RLPParser.sol":{"keccak256":"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c","urls":["bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d","dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk"],"license":"UNLICENSED"},"src/ReceiptValidator.sol":{"keccak256":"0x625137f131a6524c06e6c7c6ddc4c3f10256ac8a306b53b2dfed4fe9a3ed9728","urls":["bzz-raw://611b99fa26ae364ea2e0aa721f62ca043ca6d5b0e2bc1c96278639792242f43f","dweb:/ipfs/QmXFkR6amwaZF1QZqZjsneEXBz8C17QmCFyirmHo7eaUaH"],"license":"UNLICENSED"}},"version":1},"id":22} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_commitment","type":"bytes32","internalType":"bytes32"}],"stateMutability":"payable"},{"type":"function","name":"MAX_BLOCK_LOOKBACK","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bond","inputs":[],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"bondAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"bondedExecutor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"cancelAndWithdraw","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cancellationRequest","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"collect","inputs":[{"name":"proof","type":"tuple","internalType":"struct EscrowNative.NativeTransferProof","components":[{"name":"blockHeader","type":"bytes","internalType":"bytes"},{"name":"transactionRlp","type":"bytes","internalType":"bytes"},{"name":"txProofNodes","type":"bytes","internalType":"bytes"},{"name":"receiptRlp","type":"bytes","internalType":"bytes"},{"name":"receiptProofNodes","type":"bytes","internalType":"bytes"},{"name":"path","type":"bytes","internalType":"bytes"}]},{"name":"targetBlockNumber","type":"uint256","internalType":"uint256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitment","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"executionDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"fund","inputs":[{"name":"_commitment","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"funded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"is_bonded","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"originalDeposit","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"requestCancellation","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resume","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"totalBondsDeposited","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"error","name":"AlreadyFunded","inputs":[]},{"type":"error","name":"BlockHashUnavailable","inputs":[]},{"type":"error","name":"BlockHeaderMismatch","inputs":[]},{"type":"error","name":"BlockNumberMismatch","inputs":[]},{"type":"error","name":"BondActive","inputs":[]},{"type":"error","name":"CancellationRequested","inputs":[]},{"type":"error","name":"CommitmentMismatch","inputs":[]},{"type":"error","name":"ETHTransferFailed","inputs":[]},{"type":"error","name":"ExecutorAlreadyBonded","inputs":[]},{"type":"error","name":"ExpectedRLPList","inputs":[]},{"type":"error","name":"InsufficientBond","inputs":[]},{"type":"error","name":"InvalidAddress","inputs":[]},{"type":"error","name":"InvalidRLP","inputs":[]},{"type":"error","name":"InvalidRLPEncoding","inputs":[]},{"type":"error","name":"InvalidRLPList","inputs":[]},{"type":"error","name":"InvalidReceiptProof","inputs":[]},{"type":"error","name":"InvalidTxProof","inputs":[]},{"type":"error","name":"NoWithdrawableFunds","inputs":[]},{"type":"error","name":"NotFunded","inputs":[]},{"type":"error","name":"OnlyBondedExecutor","inputs":[]},{"type":"error","name":"OnlyDeployer","inputs":[]},{"type":"error","name":"RLPOffsetOutOfBounds","inputs":[]},{"type":"error","name":"ReceiptStatusNotSuccess","inputs":[]},{"type":"error","name":"TargetBlockInFuture","inputs":[]},{"type":"error","name":"TargetBlockTooOld","inputs":[]},{"type":"error","name":"TxFailed","inputs":[]},{"type":"error","name":"UnsupportedTxType","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}],"bytecode":{"object":"0x60a0601f611cbc38819003918201601f19168301916001600160401b038311848410176100945780849260209460405283398101031261009057513360805234610071575b604051611c1390816100a982396080518181816101360152818161031d015281816103f901526105fa0152f35b345f553460015560025561010061ff001960075416176007555f610044565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101245780631303a4841461011f5780631aa7c0ec1461011a578063308657d71461011557806333ee5f35146101105780633d2691bc1461010b57806364c9ec6f146101065780636b892b22146101015780637fd0368b146100fc57806380f323a7146100f757806381972d00146100f2578063b39c1d4d146100ed578063bf14c119146100e8578063cb766a56146100e3578063d0e30db0146100de578063f3a504f2146100d95763fe03a460146100d4575f80fd5b6106dc565b6106b7565b61069b565b610677565b6105e9565b610436565b6103e7565b6103ca565b6103ad565b6102f3565b610223565b610207565b6101ea565b6101c8565b6101a0565b610183565b3461017f575f36600319011261017f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610170576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461017f575f36600319011261017f576020600254604051908152f35b3461017f575f36600319011261017f576003546040516001600160a01b039091168152602090f35b3461017f575f36600319011261017f57602060ff600754166040519015158152f35b3461017f575f36600319011261017f576020600454604051908152f35b3461017f575f36600319011261017f5760206040516101008152f35b5f36600319011261017f5760045480151590816102e9575b506102b6575b60075460ff8160081c16156102a75760ff166102985761025f6107b2565b610289576101905f5404341061027a5761027834610815565b005b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b6005545f548181018091116102e4575f556006549081018091116102e4576006556102df61083d565b610241565b6107ca565b905042115f61023b565b3461017f575f36600319011261017f5760ff6001811960075416178060075560081c16156102a7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101705761035361083d565b600154801561039e575f8080809361037c61ff0019600754166007555f80555f6001555f600255565b335af1610387610750565b501561038f57005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461017f575f36600319011261017f576020600154604051908152f35b3461017f575f36600319011261017f576020600554604051908152f35b3461017f575f36600319011261017f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610170576007805460ff19166001179055005b3461017f57606036600319011261017f5760043567ffffffffffffffff811161017f57806004019060c0600319823603011261017f576044359061048661047d848061077f565b602435916108d4565b610499610493848061077f565b90610a44565b60248201916104da6104d66104ae858861077f565b6104be604486979397018a61077f565b60a4870197916104ce898d61077f565b949093610b4d565b1590565b6105da576104d66105239160846104fa6104f4898061077f565b90610b74565b916104ce606482019661051a610510898d61077f565b959094018c61077f565b9290918c61077f565b6105cb576104d661053761053d928661077f565b90610bd5565b6105bc576105516105579161059a9461077f565b90610ca5565b61058c60409492945193849260208401968791605493916001600160601b03199060601b168352601483015260348201520190565b03601f19810183528261070d565b519020600254036105ad57610278610e86565b635054097b60e01b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b602036600319011261017f576004357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101705760ff60075460081c1661066857341561065957345f553460015560025561027861010061ff00196007541617600755565b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461017f575f36600319011261017f5760206106916107b2565b6040519015158152f35b3461017f575f36600319011261017f5760205f54604051908152f35b3461017f575f36600319011261017f57602060ff60075460081c166040519015158152f35b3461017f575f36600319011261017f576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761072f57604052565b6106f9565b67ffffffffffffffff811161072f57601f01601f191660200190565b3d1561077a573d9061076182610734565b9161076f604051938461070d565b82523d5f602084013e565b606090565b903590601e198136030182121561017f570180359067ffffffffffffffff821161017f5760200191813603831361017f57565b60045480151590816107c2575090565b905042111590565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116102e457565b90601582018092116102e457565b60010190816001116102e457565b919082018092116102e457565b336001600160601b0360a01b600354161760035561012c42018042116102e457600455600555565b6108456107b2565b610865576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b6001198101919082116102e457565b5f198101919082116102e457565b919082039182116102e457565b9291926108aa82610734565b916108b8604051938461070d565b82948184528183011161017f578281602093845f960137010152565b906108e86104d660075460ff9060081c1690565b6102a7576003546001600160a01b031633148015906109a8575b6109995743831161098a5761010061091a8443610891565b1161097b578240801561096c5761093236838561089e565b602081519101200361095d5761094791610ee4565b0361094e57565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b506109b46104d66107b2565b610902565b634e487b7160e01b5f52603260045260245ffd5b90156109d65790565b6109b9565b908210156109d6570190565b60ff60f6199116019060ff82116102e457565b60ff607f199116019060ff82116102e457565b60ff60bf199116019060ff82116102e457565b60ff60b6199116019060ff82116102e457565b60ff166001019060ff82116102e457565b905f600360fe1b6001600160f81b0319610a6f610a6185876109cd565b356001600160f81b03191690565b1610610b3e57601f60fb1b6001600160f81b0319610a90610a6185876109cd565b1610610b355780610aca610ac4610abf610aba610ab4610a61610ad097898b6109db565b60f81c90565b6109e7565b610a33565b60ff1690565b90610808565b905b5f5b60048110610b205750600560fd1b906001600160f81b031990610afd90610a61908590876109db565b1603610b1157610b0c906107de565b013590565b633954003560e11b5f5260045ffd5b91610b2e6001918386610f94565b9201610ad4565b50600190610ad2565b63c0098bd960e01b5f5260045ffd5b610b63610b6b92939495610b719897369161089e565b92369161089e565b9061111c565b90565b90610b7f81836112d6565b905f5b60058110610bc05750600560fd1b906001600160f81b031990610ba7908490866109db565b351603610b11576001810181116102e457016001013590565b91610bce6001918386610f94565b9201610b82565b5f9082151580610c89575b610c80575b60c060ff610bfa610ab4610a618688876109db565b1610610c7157610ab4610a6182858560f860ff610c24610ab4610a61839b60019d610c4e9c6109db565b1610610c685780610aca610ac4610abf610aba610ab4610a61610c4897898b6109db565b916109db565b1603610c5957600190565b63e9dd8a9d60e01b5f5260045ffd5b610c48906107de565b631bd5dcf760e31b5f5260045ffd5b60019150610be5565b50608060ff610c9e610ab4610a6187866109cd565b1610610be0565b600392915f908181151580610e6a575b610e22575b60c060ff610ccf610ab4610a6185878a6109db565b1610610c71578060f860ff610cee610ab4610a61610d1496888b6109db565b1610610e195760ff610d0d610abf610aba610ab4610a6186898c6109db565b1690610808565b945f905b808210610e02575050609460ff610d36610ab4610a618986896109db565b1603610df357610d4f6001868501013560601c956107ec565b610d60610ab4610a618385886109db565b60ff811694906080861015610d78575050505050905b565b9091929395946080145f14610d9057505f9450505050565b610ac4610d9f919392936109fa565b915f935b838510610db1575050505050565b9091929395610dc260019160081b90565b610de7610ac4610ab4610a61610de08c610ddb8b6107de565b610808565b87896109db565b17960193929190610da3565b63e6c4247b60e01b5f5260045ffd5b9095610e116001918487610f94565b960190610d18565b60ff6001610d0d565b509350610e35610ab4610a6186856109cd565b6001949060ff16808603610e4c5750600494610cba565b600203610e5b57600594610cba565b636fc3daa360e11b5f5260045ffd5b50608060ff610e7f610ab4610a6186896109cd565b1610610cb5565b6005545f5481018091116102e4575f808080936003546001600160601b0360a01b8116600355826005558260045561ff001960075416600755828055826001558260025560018060a01b03165af1610edc610750565b501561038f57565b610eee82826112d6565b915f5b60088110610f7f5750610f0b610ab4610a618584866109db565b925f9260ff851694608086105f14610f2557505050505090565b610f369193949550610ac4906109fa565b915f935b838510610f4957505050505090565b9091929394610f5a60019160081b90565b610f73610ac4610ab4610a61610de08b610ddb8b6107de565b17950193929190610f3a565b92610f8d6001918385610f94565b9301610ef1565b9190808210156110ef57610faf610ab4610a618484876109db565b9060ff82166080811015610fca57505050610b7191506107de565b91929160b8811015610ff2575050610b719250610ac4610fec610aca926107de565b926109fa565b90929060c08110156110685750610ac461100e91949394610a20565b915f935f915b84831061102f57505050610b719291610ddb610ddb926107de565b90919461103e60019160081b90565b61105e610ac4610ab4610a616110578b610ddb8b6107de565b88886109db565b1795019190611014565b90929060f8111561108e5750610b719250610ac4611088610aca926107de565b92610a0d565b9291610ac461109c916109e7565b915f935f915b8483106110bd57505050610b719291610ddb610ddb926107de565b9091946110cc60019160081b90565b6110e5610ac4610ab4610a616110578b610ddb8b6107de565b17950191906110a2565b6318d76ae160e11b5f5260045ffd5b8051156109d65760200190565b9081518110156109d6570160200190565b919390929190600360fe1b6001600160f81b031961113d610a6186896109cd565b16106112c757601f60fb1b6001600160f81b031961115e610a6186896109cd565b16106112bd5761118261117d610ac4610aba610ab4610a61888b6109cd565b6107fa565b9492905b945f5b82821061119b57505050505050505f90565b6111b96111b2836111ad36878a61089e565b611442565b9093610808565b96825160208401200361125b57600360fe1b6111f56111e86111da856110fe565b516001600160f81b03191690565b6001600160f81b03191690565b1061125b578590846001601f60fb1b6112136111e86111da886110fe565b101561129f575b61122481866115e9565b60118103611266575061123694611774565b94911561125b57841561124f5793915b91959093611189565b50505050505050600190565b505050505050505f90565b9093506002141590506112935784879261127f9461162e565b94911561125b57841561124f579391611246565b50505050505050505f90565b506112b861117d610ac4610aba610ab46111da896110fe565b61121a565b6001949290611186565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b03196112f2610a6186866109cd565b1610610b3e57601f60fb1b6001600160f81b0319611313610a6186866109cd565b16106113e55780610aca610ac4610abf610aba610ab4610a61611337978a8a6109db565b905b61a5bd461480156113da575b611350575b50905090565b5f5b600381106113c55750600360fe1b6113716111e8610a618587866109db565b10610b3e57601f60fb1b61138c6111e8610a618587866109db565b106113b557610ac4610abf610aba610ab4610a61866113ae98610aca976109db565b805f61134a565b506113c091506107de565b6113ae565b916113d36001918584610f94565b9201611352565b5061a5bf4614611345565b50600190611339565b604080519091906113ff838261070d565b6001815291601f1901366020840137565b9061141a82610734565b611427604051918261070d565b8281528092611438601f1991610734565b0190602036910137565b80518210156110ef5761145b610ab46111da848461110b565b9160ff83166080811015611494575050506114746113ee565b9060f81b6001600160f81b0319165f1a61148d826110fe565b5390600190565b919392909160b88110156114fe5750610ac46114af916109fa565b906114b982611410565b935f5b8381106114cf57505050610b71906107fa565b806114eb6111da6114e5600194610ddb886107de565b8561110b565b5f1a6114f7828961110b565b53016114bc565b60c0111561159c57610ac461151291610a20565b5f915f5b82811061156e575061152783611410565b945f5b8481106115415750505090610ddb610b71926107fa565b8061155b6111da6114e5600194610ddb89610ddb8a6107de565b5f1a611567828a61110b565b530161152a565b9260019060081b611594610ac4610ab46111da61158e89610ddb896107de565b8b61110b565b179301611516565b50916115a88382611889565b926115b284611410565b915f5b8581106115c3575050509190565b806115d66111da6114e560019487610808565b5f1a6115e2828761110b565b53016115b5565b5f92915b8151811015611614576116008183611889565b81018091116102e4576001909301926115ed565b5050565b908160011b91808304600214901517156102e457565b8394929161163c8183611442565b939061165b6020611652610ab46111da856110fe565b161515916119b6565b978891156116fd575061166f905187610808565b6116798251611618565b1461168e575b505050505050505f905f905f90565b868660019282516116eb575b5050506116a8575b8061167f565b6116bb926116b591610808565b90611442565b50602081519101209060208151910120146116d957808080806116a2565b6116e4915190610808565b6001915f90565b6116f59350611b1f565b86865f61169a565b61170e93949596506104d692611b1f565b6117675761171f926116b591610808565b50908151602081145f146117475750602061173f920151925b5190610808565b916001929190565b801561175b57602061173f93012092611738565b505050505f905f905f90565b50505050505f905f905f90565b919092936117828251611618565b85101561182c5750610ab46111da6117a49261179e8760011c90565b9061110b565b600184166118235760041c600f16915b905f925b60ff8116841061180357506117cd9250611442565b50805180156117f85761173f91602082036117ee57602091500151916107de565b60200120916107de565b5050505f905f905f90565b9091600161181782610aca60ff9487611889565b940193929190506117b8565b600f16916117b4565b9290509392935f915b6010831061186f576118479250611442565b50602081519101209060208151910120145f1461186657600191905f90565b5f915081908190565b9061188081610aca60019385611889565b92019190611835565b9081518110156110ef576118a3610ab46111da838561110b565b9160ff831660808110156118ba5750505050600190565b60b88110156118d557505050610ac4610abf610b71926109fa565b60c0811015611941575091610ac46118ec91610a20565b905f925f915b8383106119095750505090610ddb610b71926107fa565b90919361191860019160081b90565b611937610ac4610ab46111da6119318a610ddb896107de565b8861110b565b17940191906118f2565b60f8111561195a575050610ac4610abf610b7192610a0d565b91610ac4611967916109e7565b905f925f915b8383106119845750505090610ddb610b71926107fa565b90919361199360019160081b90565b6119ac610ac4610ab46111da6119318a610ddb896107de565b179401919061196d565b90815115610d76576119cd610ab46111da846110fe565b6010811615611a9c576119f06119eb6119e68551611618565b610883565b611410565b9060f81b600f60f81b165f1a611a05826110fe565b5360015b8351811015611a975780611a44611a34611a2b610ab46111da6001968a61110b565b60041c600f1690565b60f81b6001600160f81b03191690565b611a5d611a536119e684611618565b915f1a918561110b565b53611a84600f611a73610ab46111da858a61110b565b1660f81b6001600160f81b03191690565b611a90611a5383611618565b5301611a09565b509150565b50611ab26119eb611aad8451611618565b610874565b60015b8351811015611a975780611ad7611a34611a2b610ab46111da6001968a61110b565b611aeb611a53611ae684610883565b611618565b53611b01600f611a73610ab46111da858a61110b565b611b18611a53611b13611ae685610883565b6107de565b5301611ab5565b919091611b2d825184610808565b611b378251611618565b10611bd6575f5b8251811015611bcd57611b5a611b548286610808565b60011690565b611baf57611b83611a2b610ab46111da611b7d611b77868a610808565b60011c90565b8661110b565b60ff611b98610ac4610ab46111da868961110b565b911603611ba757600101611b3e565b505050505f90565b600f611bc7610ab46111da611b7d611b77868a610808565b16611b83565b50505050600190565b5050505f9056fea26469706673582212203fbc51bf11d5ef13346b16b585387480c9bf913d8748ff03e30cb5e3e3fe07ab64736f6c634300081e0033","sourceMap":"92:4012:22:-:0;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;-1:-1:-1;;;;;92:4012:22;;;;;;;;;;;;;;;;;;;;;;;;1579:10:20;1561:28;;978:9:22;974:169;;-1:-1:-1;92:4012:22;;;;;;;;1561:28:20;92:4012:22;;;;;;;;;;;;;;;;;;;;;974:169;978:9;-1:-1:-1;92:4012:22;978:9;92:4012;;1081:24;92:4012;;;;1119:13;92:4012;;;1119:13;92:4012;974:169;;;92:4012;-1:-1:-1;92:4012:22;;;;;;-1:-1:-1;92:4012:22;;;;;-1:-1:-1;92:4012:22","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8063046f7da2146101245780631303a4841461011f5780631aa7c0ec1461011a578063308657d71461011557806333ee5f35146101105780633d2691bc1461010b57806364c9ec6f146101065780636b892b22146101015780637fd0368b146100fc57806380f323a7146100f757806381972d00146100f2578063b39c1d4d146100ed578063bf14c119146100e8578063cb766a56146100e3578063d0e30db0146100de578063f3a504f2146100d95763fe03a460146100d4575f80fd5b6106dc565b6106b7565b61069b565b610677565b6105e9565b610436565b6103e7565b6103ca565b6103ad565b6102f3565b610223565b610207565b6101ea565b6101c8565b6101a0565b610183565b3461017f575f36600319011261017f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610170576007805460ff19169055005b63618bbdd560e01b5f5260045ffd5b5f80fd5b3461017f575f36600319011261017f576020600254604051908152f35b3461017f575f36600319011261017f576003546040516001600160a01b039091168152602090f35b3461017f575f36600319011261017f57602060ff600754166040519015158152f35b3461017f575f36600319011261017f576020600454604051908152f35b3461017f575f36600319011261017f5760206040516101008152f35b5f36600319011261017f5760045480151590816102e9575b506102b6575b60075460ff8160081c16156102a75760ff166102985761025f6107b2565b610289576101905f5404341061027a5761027834610815565b005b63e92c469f60e01b5f5260045ffd5b63129f78e960e11b5f5260045ffd5b632479328960e01b5f5260045ffd5b636af784dd60e11b5f5260045ffd5b6005545f548181018091116102e4575f556006549081018091116102e4576006556102df61083d565b610241565b6107ca565b905042115f61023b565b3461017f575f36600319011261017f5760ff6001811960075416178060075560081c16156102a7577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101705761035361083d565b600154801561039e575f8080809361037c61ff0019600754166007555f80555f6001555f600255565b335af1610387610750565b501561038f57005b63b12d13eb60e01b5f5260045ffd5b6353cd7f7960e01b5f5260045ffd5b3461017f575f36600319011261017f576020600154604051908152f35b3461017f575f36600319011261017f576020600554604051908152f35b3461017f575f36600319011261017f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610170576007805460ff19166001179055005b3461017f57606036600319011261017f5760043567ffffffffffffffff811161017f57806004019060c0600319823603011261017f576044359061048661047d848061077f565b602435916108d4565b610499610493848061077f565b90610a44565b60248201916104da6104d66104ae858861077f565b6104be604486979397018a61077f565b60a4870197916104ce898d61077f565b949093610b4d565b1590565b6105da576104d66105239160846104fa6104f4898061077f565b90610b74565b916104ce606482019661051a610510898d61077f565b959094018c61077f565b9290918c61077f565b6105cb576104d661053761053d928661077f565b90610bd5565b6105bc576105516105579161059a9461077f565b90610ca5565b61058c60409492945193849260208401968791605493916001600160601b03199060601b168352601483015260348201520190565b03601f19810183528261070d565b519020600254036105ad57610278610e86565b635054097b60e01b5f5260045ffd5b632b96f51360e01b5f5260045ffd5b637b374dd160e01b5f5260045ffd5b63c89e37db60e01b5f5260045ffd5b602036600319011261017f576004357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101705760ff60075460081c1661066857341561065957345f553460015560025561027861010061ff00196007541617600755565b631f2a200560e01b5f5260045ffd5b635adf638760e01b5f5260045ffd5b3461017f575f36600319011261017f5760206106916107b2565b6040519015158152f35b3461017f575f36600319011261017f5760205f54604051908152f35b3461017f575f36600319011261017f57602060ff60075460081c166040519015158152f35b3461017f575f36600319011261017f576020600654604051908152f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761072f57604052565b6106f9565b67ffffffffffffffff811161072f57601f01601f191660200190565b3d1561077a573d9061076182610734565b9161076f604051938461070d565b82523d5f602084013e565b606090565b903590601e198136030182121561017f570180359067ffffffffffffffff821161017f5760200191813603831361017f57565b60045480151590816107c2575090565b905042111590565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116102e457565b90601582018092116102e457565b60010190816001116102e457565b919082018092116102e457565b336001600160601b0360a01b600354161760035561012c42018042116102e457600455600555565b6108456107b2565b610865576001600160601b0360a01b600354166003555f6005555f600455565b639cbc1de160e01b5f5260045ffd5b6001198101919082116102e457565b5f198101919082116102e457565b919082039182116102e457565b9291926108aa82610734565b916108b8604051938461070d565b82948184528183011161017f578281602093845f960137010152565b906108e86104d660075460ff9060081c1690565b6102a7576003546001600160a01b031633148015906109a8575b6109995743831161098a5761010061091a8443610891565b1161097b578240801561096c5761093236838561089e565b602081519101200361095d5761094791610ee4565b0361094e57565b63048a12f560e11b5f5260045ffd5b63ff28378760e01b5f5260045ffd5b63bfc9f0d360e01b5f5260045ffd5b63c42a018560e01b5f5260045ffd5b63058968cf60e41b5f5260045ffd5b6337b5f20360e21b5f5260045ffd5b506109b46104d66107b2565b610902565b634e487b7160e01b5f52603260045260245ffd5b90156109d65790565b6109b9565b908210156109d6570190565b60ff60f6199116019060ff82116102e457565b60ff607f199116019060ff82116102e457565b60ff60bf199116019060ff82116102e457565b60ff60b6199116019060ff82116102e457565b60ff166001019060ff82116102e457565b905f600360fe1b6001600160f81b0319610a6f610a6185876109cd565b356001600160f81b03191690565b1610610b3e57601f60fb1b6001600160f81b0319610a90610a6185876109cd565b1610610b355780610aca610ac4610abf610aba610ab4610a61610ad097898b6109db565b60f81c90565b6109e7565b610a33565b60ff1690565b90610808565b905b5f5b60048110610b205750600560fd1b906001600160f81b031990610afd90610a61908590876109db565b1603610b1157610b0c906107de565b013590565b633954003560e11b5f5260045ffd5b91610b2e6001918386610f94565b9201610ad4565b50600190610ad2565b63c0098bd960e01b5f5260045ffd5b610b63610b6b92939495610b719897369161089e565b92369161089e565b9061111c565b90565b90610b7f81836112d6565b905f5b60058110610bc05750600560fd1b906001600160f81b031990610ba7908490866109db565b351603610b11576001810181116102e457016001013590565b91610bce6001918386610f94565b9201610b82565b5f9082151580610c89575b610c80575b60c060ff610bfa610ab4610a618688876109db565b1610610c7157610ab4610a6182858560f860ff610c24610ab4610a61839b60019d610c4e9c6109db565b1610610c685780610aca610ac4610abf610aba610ab4610a61610c4897898b6109db565b916109db565b1603610c5957600190565b63e9dd8a9d60e01b5f5260045ffd5b610c48906107de565b631bd5dcf760e31b5f5260045ffd5b60019150610be5565b50608060ff610c9e610ab4610a6187866109cd565b1610610be0565b600392915f908181151580610e6a575b610e22575b60c060ff610ccf610ab4610a6185878a6109db565b1610610c71578060f860ff610cee610ab4610a61610d1496888b6109db565b1610610e195760ff610d0d610abf610aba610ab4610a6186898c6109db565b1690610808565b945f905b808210610e02575050609460ff610d36610ab4610a618986896109db565b1603610df357610d4f6001868501013560601c956107ec565b610d60610ab4610a618385886109db565b60ff811694906080861015610d78575050505050905b565b9091929395946080145f14610d9057505f9450505050565b610ac4610d9f919392936109fa565b915f935b838510610db1575050505050565b9091929395610dc260019160081b90565b610de7610ac4610ab4610a61610de08c610ddb8b6107de565b610808565b87896109db565b17960193929190610da3565b63e6c4247b60e01b5f5260045ffd5b9095610e116001918487610f94565b960190610d18565b60ff6001610d0d565b509350610e35610ab4610a6186856109cd565b6001949060ff16808603610e4c5750600494610cba565b600203610e5b57600594610cba565b636fc3daa360e11b5f5260045ffd5b50608060ff610e7f610ab4610a6186896109cd565b1610610cb5565b6005545f5481018091116102e4575f808080936003546001600160601b0360a01b8116600355826005558260045561ff001960075416600755828055826001558260025560018060a01b03165af1610edc610750565b501561038f57565b610eee82826112d6565b915f5b60088110610f7f5750610f0b610ab4610a618584866109db565b925f9260ff851694608086105f14610f2557505050505090565b610f369193949550610ac4906109fa565b915f935b838510610f4957505050505090565b9091929394610f5a60019160081b90565b610f73610ac4610ab4610a61610de08b610ddb8b6107de565b17950193929190610f3a565b92610f8d6001918385610f94565b9301610ef1565b9190808210156110ef57610faf610ab4610a618484876109db565b9060ff82166080811015610fca57505050610b7191506107de565b91929160b8811015610ff2575050610b719250610ac4610fec610aca926107de565b926109fa565b90929060c08110156110685750610ac461100e91949394610a20565b915f935f915b84831061102f57505050610b719291610ddb610ddb926107de565b90919461103e60019160081b90565b61105e610ac4610ab4610a616110578b610ddb8b6107de565b88886109db565b1795019190611014565b90929060f8111561108e5750610b719250610ac4611088610aca926107de565b92610a0d565b9291610ac461109c916109e7565b915f935f915b8483106110bd57505050610b719291610ddb610ddb926107de565b9091946110cc60019160081b90565b6110e5610ac4610ab4610a616110578b610ddb8b6107de565b17950191906110a2565b6318d76ae160e11b5f5260045ffd5b8051156109d65760200190565b9081518110156109d6570160200190565b919390929190600360fe1b6001600160f81b031961113d610a6186896109cd565b16106112c757601f60fb1b6001600160f81b031961115e610a6186896109cd565b16106112bd5761118261117d610ac4610aba610ab4610a61888b6109cd565b6107fa565b9492905b945f5b82821061119b57505050505050505f90565b6111b96111b2836111ad36878a61089e565b611442565b9093610808565b96825160208401200361125b57600360fe1b6111f56111e86111da856110fe565b516001600160f81b03191690565b6001600160f81b03191690565b1061125b578590846001601f60fb1b6112136111e86111da886110fe565b101561129f575b61122481866115e9565b60118103611266575061123694611774565b94911561125b57841561124f5793915b91959093611189565b50505050505050600190565b505050505050505f90565b9093506002141590506112935784879261127f9461162e565b94911561125b57841561124f579391611246565b50505050505050505f90565b506112b861117d610ac4610aba610ab46111da896110fe565b61121a565b6001949290611186565b63ebb47d1d60e01b5f5260045ffd5b5f600360fe1b6001600160f81b03196112f2610a6186866109cd565b1610610b3e57601f60fb1b6001600160f81b0319611313610a6186866109cd565b16106113e55780610aca610ac4610abf610aba610ab4610a61611337978a8a6109db565b905b61a5bd461480156113da575b611350575b50905090565b5f5b600381106113c55750600360fe1b6113716111e8610a618587866109db565b10610b3e57601f60fb1b61138c6111e8610a618587866109db565b106113b557610ac4610abf610aba610ab4610a61866113ae98610aca976109db565b805f61134a565b506113c091506107de565b6113ae565b916113d36001918584610f94565b9201611352565b5061a5bf4614611345565b50600190611339565b604080519091906113ff838261070d565b6001815291601f1901366020840137565b9061141a82610734565b611427604051918261070d565b8281528092611438601f1991610734565b0190602036910137565b80518210156110ef5761145b610ab46111da848461110b565b9160ff83166080811015611494575050506114746113ee565b9060f81b6001600160f81b0319165f1a61148d826110fe565b5390600190565b919392909160b88110156114fe5750610ac46114af916109fa565b906114b982611410565b935f5b8381106114cf57505050610b71906107fa565b806114eb6111da6114e5600194610ddb886107de565b8561110b565b5f1a6114f7828961110b565b53016114bc565b60c0111561159c57610ac461151291610a20565b5f915f5b82811061156e575061152783611410565b945f5b8481106115415750505090610ddb610b71926107fa565b8061155b6111da6114e5600194610ddb89610ddb8a6107de565b5f1a611567828a61110b565b530161152a565b9260019060081b611594610ac4610ab46111da61158e89610ddb896107de565b8b61110b565b179301611516565b50916115a88382611889565b926115b284611410565b915f5b8581106115c3575050509190565b806115d66111da6114e560019487610808565b5f1a6115e2828761110b565b53016115b5565b5f92915b8151811015611614576116008183611889565b81018091116102e4576001909301926115ed565b5050565b908160011b91808304600214901517156102e457565b8394929161163c8183611442565b939061165b6020611652610ab46111da856110fe565b161515916119b6565b978891156116fd575061166f905187610808565b6116798251611618565b1461168e575b505050505050505f905f905f90565b868660019282516116eb575b5050506116a8575b8061167f565b6116bb926116b591610808565b90611442565b50602081519101209060208151910120146116d957808080806116a2565b6116e4915190610808565b6001915f90565b6116f59350611b1f565b86865f61169a565b61170e93949596506104d692611b1f565b6117675761171f926116b591610808565b50908151602081145f146117475750602061173f920151925b5190610808565b916001929190565b801561175b57602061173f93012092611738565b505050505f905f905f90565b50505050505f905f905f90565b919092936117828251611618565b85101561182c5750610ab46111da6117a49261179e8760011c90565b9061110b565b600184166118235760041c600f16915b905f925b60ff8116841061180357506117cd9250611442565b50805180156117f85761173f91602082036117ee57602091500151916107de565b60200120916107de565b5050505f905f905f90565b9091600161181782610aca60ff9487611889565b940193929190506117b8565b600f16916117b4565b9290509392935f915b6010831061186f576118479250611442565b50602081519101209060208151910120145f1461186657600191905f90565b5f915081908190565b9061188081610aca60019385611889565b92019190611835565b9081518110156110ef576118a3610ab46111da838561110b565b9160ff831660808110156118ba5750505050600190565b60b88110156118d557505050610ac4610abf610b71926109fa565b60c0811015611941575091610ac46118ec91610a20565b905f925f915b8383106119095750505090610ddb610b71926107fa565b90919361191860019160081b90565b611937610ac4610ab46111da6119318a610ddb896107de565b8861110b565b17940191906118f2565b60f8111561195a575050610ac4610abf610b7192610a0d565b91610ac4611967916109e7565b905f925f915b8383106119845750505090610ddb610b71926107fa565b90919361199360019160081b90565b6119ac610ac4610ab46111da6119318a610ddb896107de565b179401919061196d565b90815115610d76576119cd610ab46111da846110fe565b6010811615611a9c576119f06119eb6119e68551611618565b610883565b611410565b9060f81b600f60f81b165f1a611a05826110fe565b5360015b8351811015611a975780611a44611a34611a2b610ab46111da6001968a61110b565b60041c600f1690565b60f81b6001600160f81b03191690565b611a5d611a536119e684611618565b915f1a918561110b565b53611a84600f611a73610ab46111da858a61110b565b1660f81b6001600160f81b03191690565b611a90611a5383611618565b5301611a09565b509150565b50611ab26119eb611aad8451611618565b610874565b60015b8351811015611a975780611ad7611a34611a2b610ab46111da6001968a61110b565b611aeb611a53611ae684610883565b611618565b53611b01600f611a73610ab46111da858a61110b565b611b18611a53611b13611ae685610883565b6107de565b5301611ab5565b919091611b2d825184610808565b611b378251611618565b10611bd6575f5b8251811015611bcd57611b5a611b548286610808565b60011690565b611baf57611b83611a2b610ab46111da611b7d611b77868a610808565b60011c90565b8661110b565b60ff611b98610ac4610ab46111da868961110b565b911603611ba757600101611b3e565b505050505f90565b600f611bc7610ab46111da611b7d611b77868a610808565b16611b83565b50505050600190565b5050505f9056fea26469706673582212203fbc51bf11d5ef13346b16b585387480c9bf913d8748ff03e30cb5e3e3fe07ab64736f6c634300081e0033","sourceMap":"92:4012:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;92:4012:22;;;;2164:15:20;-1:-1:-1;;;;;92:4012:22;2150:10:20;:29;2146:56;;2212:27;92:4012:22;;-1:-1:-1;;92:4012:22;;;;2146:56:20;2188:14;;;92:4012:22;2188:14:20;92:4012:22;;2188:14:20;92:4012:22;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;950:25:20;92:4012:22;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;1205:29:20;92:4012:22;;;-1:-1:-1;;;;;92:4012:22;;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;;1349:31:20;92:4012:22;;;;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;;;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;;;1027:3:20;92:4012:22;;;;;;-1:-1:-1;;92:4012:22;;;;;;3652:21:20;;;:60;;;;92:4012:22;3648:192:20;;;92:4012:22;3990:6:20;92:4012:22;;;;;;3989:7:20;3985:31;;92:4012:22;;4026:55:20;;4095:11;;:::i;:::-;4091:47;;4176:3;92:4012:22;;;1681:9;4152:27:20;4148:58;;1715:9:22;1681;1715;:::i;:::-;92:4012;4148:58:20;4188:18;;;92:4012:22;4188:18:20;92:4012:22;;4188:18:20;4091:47;4115:23;;;92:4012:22;4115:23:20;92:4012:22;;4115:23:20;4026:55;4058:23;;;92:4012:22;4058:23:20;92:4012:22;;4058:23:20;3985:31;4005:11;;;92:4012:22;4005:11:20;92:4012:22;;4005:11:20;3648:192;3739:10;92:4012:22;;;;;;;;;;;;;3763:33:20;92:4012:22;;;;;;;;;3763:33:20;92:4012:22;3763:33:20;;:::i;:::-;3648:192;;92:4012:22;;:::i;3652:60:20:-;3677:15;;;:35;3652:60;;;92:4012:22;;;;;;-1:-1:-1;;92:4012:22;;;;;3754:4;92:4012;;3732:26;92:4012;;;;3732:26;92:4012;;;;5021:7:20;5017:31;;5076:15;-1:-1:-1;;;;;92:4012:22;5062:10:20;:29;5058:56;;3732:26:22;;:::i;:::-;3754:4;92:4012;3885:23;;3881:57;;92:4012;3881:57;;;;;92:4012;;5230:14:20;92:4012:22;;5230:14:20;92:4012:22;5239:5:20;92:4012:22;;5239:5:20;92:4012:22;;5239:5:20;5304:23;92:4012:22;5180:154:20;3881:57:22;5062:10:20;3999:46:22;;;;:::i;:::-;;4059:8;4055:40;;92:4012;4055:40;4076:19;;;92:4012;4076:19;92:4012;;4076:19;3881:57;3917:21;;;92:4012;3917:21;92:4012;;3917:21;92:4012;;;;;;-1:-1:-1;;92:4012:22;;;;;801:30:20;92:4012:22;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;1278:25:20;92:4012:22;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;1914:15:20;-1:-1:-1;;;;;92:4012:22;1900:10:20;:29;1896:56;;1962:26;92:4012:22;;-1:-1:-1;;92:4012:22;1984:4:20;92:4012:22;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:17;2056;2037;;;;:::i;:::-;92:4012;;2056:17;;:::i;:::-;2173:60;2215:17;;;;:::i;:::-;2173:60;;:::i;:::-;92:4012;2279:20;;;2247:103;2248:102;2279:20;;;;:::i;:::-;2301:18;92:4012;2301:18;;;;;;;:::i;:::-;2321:10;;;;;;;;;:::i;:::-;2248:102;;;;:::i;:::-;2247:103;;92:4012;2247:103;2243:157;;2557:99;2556:100;2524:17;2606:23;2486:56;2524:17;;;;:::i;:::-;2486:56;;:::i;:::-;2588:16;2631:10;2588:16;;;;2606:23;2588:16;;;;:::i;:::-;2606:23;;;;;;:::i;:::-;2631:10;;;;;:::i;2556:100::-;2552:159;;2782:56;2821:16;2781:57;2821:16;;;:::i;:::-;2782:56;;:::i;2781:57::-;2777:80;;3008:20;2969:60;3008:20;3111:41;3008:20;;:::i;:::-;2969:60;;:::i;:::-;3111:41;92:4012;;;;;3111:41;;;92:4012;3111:41;;;;92:4012;;;;-1:-1:-1;;;;;92:4012:22;;;;;;;;;;;;;;;;;;3111:41;;;;;;;;;;:::i;:::-;92:4012;3101:52;;3157:10;92:4012;3101:66;3097:124;;;;:::i;:::-;3190:20;;;-1:-1:-1;3190:20:22;92:4012;-1:-1:-1;3190:20:22;2777:80;2847:10;;;-1:-1:-1;2847:10:22;92:4012;-1:-1:-1;2847:10:22;2552:159;2679:21;;;-1:-1:-1;2679:21:22;92:4012;-1:-1:-1;2679:21:22;2243:157;2373:16;;;-1:-1:-1;2373:16:22;92:4012;-1:-1:-1;2373:16:22;92:4012;;;-1:-1:-1;;92:4012:22;;;;;;1235:15;-1:-1:-1;;;;;92:4012:22;1221:10;:29;1217:56;;92:4012;1287:6;92:4012;;;;1283:34;;1331:9;:14;1327:39;;1331:9;-1:-1:-1;92:4012:22;1331:9;1406:27;92:4012;1443:24;92:4012;1477:13;92:4012;;;1287:6;92:4012;;;1287:6;92:4012;;1327:39;1354:12;;;-1:-1:-1;1354:12:22;92:4012;-1:-1:-1;1354:12:22;1283:34;1302:15;;;-1:-1:-1;1302:15:22;92:4012;-1:-1:-1;1302:15:22;92:4012;;;;;;-1:-1:-1;;92:4012:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;;;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;;1386:18:20;92:4012:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;92:4012:22;;;;;1309:34:20;92:4012:22;;;;;;;;;;;;;;;;;;;;;;3111:41;;92:4012;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;92:4012:22;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;92:4012:22;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2320:133:20:-;2385:17;92:4012:22;2385:21:20;;;:61;;;;2378:68;2320:133;:::o;2385:61::-;2410:15;;;:36;;2320:133;:::o;92:4012:22:-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;8572:2:25;92:4012:22;;;;;;;:::o;:::-;1984:1:23;92:4012:22;;;1984:1:23;92:4012:22;;;:::o;:::-;;;;;;;;;;:::o;4259:187:20:-;4338:10;-1:-1:-1;;;;;92:4012:22;;4321:27:20;92:4012:22;;;4321:27:20;92:4012:22;4396:9:20;4378:15;92:4012:22;4378:15:20;;92:4012:22;;;4358:47:20;92:4012:22;4415:24:20;92:4012:22;4259:187:20:o;3334:184::-;3386:11;;:::i;:::-;3382:36;;-1:-1:-1;;;;;92:4012:22;;3429:27:20;92:4012:22;;3429:27:20;92:4012:22;3454:1:20;3466:14;92:4012:22;3454:1:20;3490:21;92:4012:22;3334:184:20:o;3382:36::-;3406:12;;;;;;;;92:4012:22;-1:-1:-1;;92:4012:22;;;;;;;;:::o;:::-;-1:-1:-1;;92:4012:22;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;92:4012:22;;;;;;:::o;2530:743:20:-;;2643:7;92:4012:22;2644:6:20;92:4012:22;;;;;;;;2643:7:20;2639:31;;2698:14;92:4012:22;-1:-1:-1;;;;;92:4012:22;2684:10:20;:28;;;:44;;;2530:743;2680:77;;2791:12;2771:32;;2767:66;;1027:3;2847:32;2791:12;;2847:32;:::i;:::-;:53;2843:85;;2965:28;;3007:29;;3003:64;;92:4012:22;;;;;:::i;:::-;;;;;;3081:22:20;:41;3077:75;;3166:49;;;:::i;:::-;:70;3162:104;;2530:743::o;3162:104::-;3245:21;;;3034:1;3245:21;;3034:1;3245:21;3077:75;3131:21;;;3034:1;3131:21;;3034:1;3131:21;3003:64;3045:22;;;3034:1;3045:22;;3034:1;3045:22;2843:85;2909:19;;;;;;;;2767:66;2812:21;;;;;;;;2680:77;2737:20;;;;;;;;2684:44;2717:11;2716:12;2717:11;;:::i;2716:12::-;2684:44;;92:4012:22;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;4155:926:19:-;;4275:1;-1:-1:-1;;;;;;;;;4323:19:19;;4155:926;;4323:19;:::i;:::-;;-1:-1:-1;;;;;;92:4012:22;;;4323:19:19;92:4012:22;4323:26:19;4319:55;;-1:-1:-1;;;;;;;;;4388:19:19;;;;;:::i;:::-;92:4012:22;4388:27:19;3111:41:22;;4452:19:19;4431:49;4441:39;4446:33;:26;4452:19;;4431:49;4452:19;;;;:::i;:::-;92:4012:22;;;;4446:26:19;:33;:::i;:::-;4441:39;:::i;:::-;92:4012:22;;;;4431:49:19;;;:::i;:::-;4384:149;;4275:1;4631:5;4635:1;4631:5;;;;-1:-1:-1;;;;92:4012:22;-1:-1:-1;;;;;;92:4012:22;4821:19:19;;;;92:4012:22;;4821:19:19;;:::i;:::-;92:4012:22;4821:27:19;4817:60;;4887:11;;;:::i;:::-;4943:98;;4155:926;:::o;4817:60::-;4857:20;;;4275:1;4857:20;4635:1;4275;4857:20;4616:13;4662:28;;92:4012:22;4662:28:19;;;;:::i;:::-;92:4012:22;;4616:13:19;;4384:149;4511:11;4521:1;4384:149;;;4319:55;4358:16;;;4275:1;4358:16;;4275:1;4358:16;720:484:23;92:4012:22;;720:484:23;;;;1148:49;720:484;;92:4012:22;;;:::i;:::-;;;;;:::i;:::-;1148:49:23;;:::i;:::-;720:484;:::o;3219:769:19:-;;3335:33;;;;:::i;:::-;3539:13;3551:1;3554:5;3558:1;3554:5;;;;-1:-1:-1;;;;92:4012:22;-1:-1:-1;;;;;;92:4012:22;3740:19:19;;92:4012:22;;3740:19:19;;:::i;:::-;;92:4012:22;3740:27:19;3736:60;;92:4012:22;;;;;;;3858:94:19;92:4012:22;3858:94:19;;;3219:769::o;3539:13::-;3585:28;;92:4012:22;3585:28:19;;;;:::i;:::-;92:4012:22;;3539:13:19;;5910:993:25;6024:1;6084:21;;;;:52;;;5910:993;6080:123;;5910:993;6277:4;92:4012:22;6249:25:25;6255:18;;;;;;:::i;6249:25::-;92:4012:22;6249:32:25;6245:57;;6629:18;;6322;;;6345:4;92:4012:22;6316:25:25;6322:18;;;;6836:4;6322:18;6623:25;6322:18;;:::i;6316:25::-;92:4012:22;6316:33:25;6345:4;;6386:18;6365:48;6375:38;6380:32;:25;6386:18;;6365:48;6386:18;;;;:::i;6365:48::-;6312:154;6629:18;:::i;6623:25::-;92:4012:22;6822:18:25;6818:56;;6836:4;5910:993;:::o;6818:56::-;6849:25;;;6024:1;6849:25;;6024:1;6849:25;6312:154;6444:11;;;:::i;6245:57::-;6290:12;;;6024:1;6290:12;;6024:1;6290:12;6080:123;4521:1:19;;-1:-1:-1;6080:123:25;;6084:52;6115:13;6132:4;92:4012:22;6109:20:25;6115:13;;;;;:::i;6109:20::-;92:4012:22;6109:27:25;6084:52;;7134:1907;7392:1;;7134:1907;92:4012:22;;;7462:16:25;;;;:42;;7134:1907;7458:485;;7134:1907;8008:4;92:4012:22;7985:20:25;7991:13;;;;;;:::i;7985:20::-;92:4012:22;7985:27:25;7981:52;;8059:13;8077:4;92:4012:22;8053:20:25;8059:13;;8043:78;8059:13;;;;:::i;8053:20::-;92:4012:22;8053:28:25;:68;;92:4012:22;8084:33:25;8089:27;:20;8095:13;;;;;;:::i;8084:33::-;92:4012:22;8043:78:25;;:::i;:::-;8167:13;92:4012:22;8162:149:25;8182:11;;;;;;8394:13;;8412:4;92:4012:22;8388:20:25;8394:13;;;;;;:::i;8388:20::-;92:4012:22;8388:28:25;8384:57;;8562:12;92:4012:22;8451:102:25;;;;;;;8562:12;;:::i;:::-;8627:20;8633:13;;;;;;:::i;8627:20::-;92:4012:22;;;;;8670:4:25;8661:13;;8670:4;;;8690:15;;;;;8657:378;;7134:1907::o;8657:378::-;8726:14;;;;;;8670:4;8726:14;8722:313;8670:4;;;-1:-1:-1;92:4012:22;;-1:-1:-1;;;;7134:1907:25:o;8722:313::-;8811:13;8797:27;8811:13;;;;;:::i;8797:27::-;8843:13;92:4012:22;8838:187:25;8858:7;;;;;;8722:313;;;;;7134:1907::o;8843:13::-;8896:11;;;;;;92:4012:22;8896:11:25;92:4012:22;;;;8896:11:25;8895:44;8911:28;8917:21;;8923:14;:10;;;;:::i;:::-;:14;:::i;:::-;8917:21;;;:::i;8895:44::-;;92:4012:22;;8843:13:25;;;;;;8384:57;8425:16;;;92:4012:22;8425:16:25;;92:4012:22;8425:16:25;8167:13;8219:22;;;92:4012:22;8219:22:25;;;;:::i;:::-;92:4012:22;;8167:13:25;;;8053:68;92:4012:22;8120:1:25;8053:68;;7458:485;7541:8;;;7535:15;7541:8;;;;;:::i;7535:15::-;7573:1;;7564:10;92:4012:22;;7592:14:25;;;7573:1;;7626:11;7636:1;7588:345;7458:485;;7588:345;7738:4;7728:14;7738:4;;7772:1;7724:209;7458:485;;7724:209;7899:19;;;92:4012:22;7899:19:25;;92:4012:22;7899:19:25;7462:42;7488:8;7500:4;92:4012:22;7482:15:25;7488:8;;;;;:::i;7482:15::-;92:4012:22;7482:22:25;7462:42;;3253:264:22;4874:10:20;92:4012:22;-1:-1:-1;92:4012:22;;;;;;;;-1:-1:-1;92:4012:22;;;;3355:14;92:4012;-1:-1:-1;;;;;92:4012:22;;;;3355:14;92:4012;;4874:10:20;92:4012:22;;4606:21:20;92:4012:22;;;4637:14:20;92:4012:22;;4637:14:20;92:4012:22;;;;;;;;4711:23:20;92:4012:22;;;;;;;3428:32;;;;:::i;:::-;;3474:8;3470:40;;3253:264::o;2036:1012:19:-;2151:33;;;;:::i;:::-;2386:13;92:4012:22;2401:5:19;2405:1;2401:5;;;;2616:19;2610:26;2616:19;;;;;;:::i;2610:26::-;2646:19;92:4012:22;;;;;2679:13:19;2688:4;2679:13;;2675:338;2688:4;;;2708:20;;;;;2036:1012;:::o;2675:338::-;2759:27;2773:13;;;;;;;;:::i;2759:27::-;2805:13;92:4012:22;2800:203:19;2820:7;;;;;;2675:338;;;;;2036:1012;:::o;2805:13::-;2863:16;;;;;;92:4012:22;2863:16:19;92:4012:22;;;;2863:16:19;2862:55;2883:34;2889:27;;2901:14;:10;;;;:::i;2862:55::-;;92:4012:22;;2805:13:19;;;;;;2386;2432:28;;92:4012:22;2432:28:19;;;;:::i;:::-;92:4012:22;;2386:13:19;;541:1316:24;;;642:21;;;;638:56;;720:19;726:12;;;;;;:::i;720:19::-;92:4012:22;;;;763:4:24;754:13;;763:4;;;817:10;;;;;;;:::i;750:1101::-;848:13;;;857:4;848:13;;857:4;;;912:10;;:28;:10;;926:13;912:10;:28;:10;;:::i;:::-;926:13;;:::i;844:1007::-;961:13;;;970:4;961:13;;970:4;;;1039:13;;1017:35;1039:13;;;;;:::i;1017:35::-;1066:18;92:4012:22;1103:13:24;92:4012:22;1098:194:24;1118:15;;;;;;1312:10;;;:33;:10;;;:24;:10;;:::i;1103:13::-;1164:11;;;;1199:1;1164:11;92:4012:22;;;;1164:11:24;1163:43;1179:27;1185:20;;1190:14;:10;;;;:::i;:14::-;1185:20;;;:::i;1163:43::-;;92:4012:22;;1103:13:24;;;;957:894;1366:13;;;1375:4;-1:-1:-1;1375:4:24;;;1428:10;:28;:10;;1442:13;1428:10;:28;:10;;:::i;:::-;1442:13;;:::i;1362:489::-;1534:13;;;1512:35;1534:13;;:::i;1512:35::-;1561:18;92:4012:22;1598:13:24;92:4012:22;1593:194:24;1613:15;;;;;;1807:10;;;:33;:10;;;:24;:10;;:::i;1598:13::-;1659:11;;;;1694:1;1659:11;92:4012:22;;;;1659:11:24;1658:43;1674:27;1680:20;;1685:14;:10;;;;:::i;1658:43::-;;92:4012:22;;1598:13:24;;;;638:56;672:22;;;92:4012:22;672:22:24;;92:4012:22;672:22:24;92:4012:22;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;1567:2467:23:-;;;;;;;-1:-1:-1;;;;;;;;;1809:13:23;;1567:2467;;1809:13;:::i;:::-;92:4012:22;1809:20:23;1805:50;;-1:-1:-1;;;;;;;;;1870:13:23;;;;;:::i;:::-;92:4012:22;1870:21:23;3111:41:22;;1984:15:23;1907:49;1929:27;:20;1935:13;;;;;:::i;1907:49::-;1984:15;:::i;:::-;1866:190;;;;2102:33;92:4012:22;2184:31:23;;;;;;4015:12;;;;;;;92:4012:22;1567:2467:23;:::o;2177:1828::-;2368:25;2321:33;92:4012:22;;;;;;:::i;:::-;2321:33:23;:::i;:::-;2368:25;;;:::i;:::-;92:4012:22;;;;;;2465:15:23;:30;2461:81;;-1:-1:-1;;;2641:15:23;:7;;;;:::i;:::-;92:4012:22;-1:-1:-1;;;;;;92:4012:22;;;2641:7:23;-1:-1:-1;;;;;;92:4012:22;;;2641:15:23;;92:4012:22;;2676:14:23;;;2689:1;-1:-1:-1;;;2712:15:23;:7;;;;:::i;:15::-;;;2708:97;;2637:1358;2839:32;;;;:::i;:::-;2903:2;2894:11;;2903:2;;3044:58;;;;:::i;:::-;3129:8;;;3125:26;;3177:21;;3173:38;;3280:21;2890:1040;;2177:1828;;;;;;3173:38;3200:11;;;;;;;2689:1;3200:11;:::o;3125:26::-;3139:12;;;;;;;92:4012:22;3139:12:23;:::o;2890:1040::-;3330:10;;-1:-1:-1;3339:1:23;3330:10;3339:1;;-1:-1:-1;3339:1:23;;3490:67;;;;;;:::i;:::-;3584:8;;;3580:75;;3680:21;;3676:87;;3831:21;3326:604;2890:1040;;3326:604;3899:12;;;;;;;;92:4012:22;3899:12:23;:::o;2708:97::-;2771:7;2751:35;;2765:21;:14;2771:7;;;;:::i;2751:35::-;2708:97;;1866:190;2044:1;1866:190;;;;;1805:50;1838:17;;;92:4012:22;1838:17:23;;92:4012:22;1838:17:23;738:1134:19;854:1;-1:-1:-1;;;;;;;;;908:19:19;;;;;:::i;:::-;92:4012:22;908:26:19;904:55;;-1:-1:-1;;;;;;;;;973:19:19;;;;;:::i;:::-;92:4012:22;973:27:19;3111:41:22;;1037:19:19;1016:49;1026:39;1031:33;:26;1037:19;;1016:49;1037:19;;;;:::i;1016:49::-;969:149;;1221:5;1204:13;:22;:48;;;;969:149;1200:642;;969:149;1852:13;;;738:1134;:::o;1200:642::-;854:1;1380:5;1384:1;1380:5;;;;-1:-1:-1;;;;1602:26:19;:19;;;;;;:::i;:26::-;;1598:55;;-1:-1:-1;;;1671:27:19;:19;;;;;;:::i;:27::-;;3111:41:22;;1728:39:19;1733:33;:26;1739:19;;;1718:49;1739:19;1718:49;1739:19;;:::i;1718:49::-;1200:642;;;;1667:165;1806:11;;;;;:::i;:::-;1667:165;;1365:13;1415:28;;92:4012:22;1415:28:19;;;;:::i;:::-;92:4012:22;;1365:13:19;;1204:48;:13;1247:5;1204:13;1230:22;1204:48;;969:149;1096:11;4521:1;969:149;;;92:4012:22;;;;;;;;;;;:::i;:::-;2457:1:24;92:4012:22;;;-1:-1:-1;;92:4012:22;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;3111:41;92:4012;3111:41;;92:4012;;:::i;:::-;;;;;;;;:::o;2143:1860:24:-;92:4012:22;;2257:21:24;;;2253:56;;2335:19;2341:12;;;;;:::i;2335:19::-;92:4012:22;;;;2378:4:24;2369:13;;2378:4;;;2447:12;;;;;:::i;:::-;92:4012:22;;;-1:-1:-1;;;;;;92:4012:22;;2473:26:24;;92:4012:22;2473:26:24;:::i;:::-;;2513:18;2457:1;2513:18;:::o;2365:1632::-;2552:13;;;;;2561:4;2552:13;;2561:4;;;2626:13;;2609:30;2626:13;;:::i;2609:30::-;2675:17;;;;:::i;:::-;2711:13;92:4012:22;2726:10:24;;;;;;2904;;;;;;:::i;2711:13::-;2774:10;2769:20;;2774:14;2783:1;2774:10;;;;:::i;:14::-;2769:20;;:::i;:::-;92:4012:22;2757:32:24;;;;;:::i;:::-;;92:4012:22;2711:13:24;;2548:1449;2945:4;-1:-1:-1;2945:4:24;;;3014:13;2992:35;3014:13;;:::i;2992:35::-;92:4012:22;3078:13:24;92:4012:22;3093:15:24;;;;;;3302:17;;;;:::i;:::-;3338:13;92:4012:22;3353:10:24;;;;;;3545:15;;;;;:24;:15;;:::i;3338:13::-;3401:10;3396:34;;3401:28;3174:1;3401:10;:24;:10;;;;:::i;3396:34::-;92:4012:22;3384:46:24;;;;;:::i;:::-;;92:4012:22;3338:13:24;;3078;3139:11;3174:1;;92:4012:22;;3138:43:24;3154:27;3160:20;;3165:14;:10;;;;:::i;:14::-;3160:20;;:::i;3138:43::-;;92:4012:22;;3078:13:24;;2932:1065;3676:27;;;;;;:::i;:::-;3739:22;;;;:::i;:::-;3780:13;92:4012:22;3795:15:24;;;;;;3958:28;;;;;:::o;3780:13::-;3848:10;3843:16;;3848:10;92:4012:22;3848:10:24;;;:::i;3843:16::-;92:4012:22;3831:28:24;;;;;:::i;:::-;;92:4012:22;3780:13:24;;4233:351:23;4392:1;;4233:351;4403:153;92:4012:22;;4410:20:23;;;;;4456:26;;;;:::i;:::-;92:4012:22;;;;;;;;4446:36:23;92:4012:22;;4403:153:23;;;4410:20;;;4233:351::o;92:4012:22:-;;;;;;;;;7928:1:23;92:4012:22;;;;;;;:::o;7310:1816:23:-;;;;;7616:26;;;;:::i;:::-;7673:9;;7740:26;7686:4;7667:16;7673:9;;;;:::i;7667:16::-;:23;7666:30;;7740:26;;:::i;:::-;7777:1343;;;;;;92:4012:22;7885:26:23;92:4012:22;;7885:26:23;;:::i;:::-;7915:14;92:4012:22;;7915:14:23;:::i;:::-;7885:44;7881:546;;7777:1343;8441:29;;;;;;;7680:1;8441:29;7680:1;8441:29;7680:1;8441:29;:::o;7881:546::-;7949:22;;7967:4;92:4012:22;;;7989:114:23;;7881:546;8121:292;;;;;7881:546;;;;8121:292;8187:38;8202:22;;;;:::i;:::-;8187:38;;:::i;:::-;92:4012:22;7686:4:23;92:4012:22;;;;8251:20:23;92:4012:22;7686:4:23;92:4012:22;;;;8275:16:23;8251:40;8247:148;;8121:292;;;;;;8247:148;8333:26;92:4012:22;;8333:26:23;;:::i;:::-;7967:4;;7680:1;;8319:53::o;7989:114::-;8048:36;;;;:::i;:::-;7989:114;;;;;7777:1343;8535:37;8536:36;;;;;;;;:::i;8535:37::-;8531:105;;8676:38;8691:22;;;;:::i;8676:38::-;8728:12;;92:4012:22;;7686:4:23;8758:20;;8754:294;7686:4;;;8798:80;7686:4;9076:26;8798:80;;;8754:294;;92:4012:22;9076:26:23;;:::i;:::-;9062:47;9070:4;9062:47;;;:::o;8754:294::-;8902:18;;;;7686:4;9076:26;92:4012:22;;8947:18:23;8898:150;8754:294;;8898:150;9004:29;;;;7680:1;9004:29;7680:1;9004:29;7680:1;9004:29;:::o;8531:105::-;8592:29;;;;;7680:1;8592:29;7680:1;8592:29;7680:1;8592:29;:::o;5044:1795::-;;;;;5315:14;92:4012:22;;5315:14:23;:::i;:::-;5302:27;;;5298:630;;5998:13;5994:18;;5988:25;5998:13;;;92:4012:22;;;;5998:13:23;5994:18;;:::i;5988:25::-;92:4012:22;;;6027:13:23;;92:4012:22;;;;6023:122:23;;6244:13;-1:-1:-1;6239:165:23;6259:10;92:4012:22;;;6259:10:23;;;;6441:28;;;;;:::i;:::-;92:4012:22;;;6483:20:23;;6479:96;;6812:13;;6630:2;6611:21;;6630:2;;;6648:73;;;;6607:181;6812:13;:::i;6607:181::-;6630:2;92:4012:22;6758:19:23;6607:181;6812:13;:::i;6479:96::-;6519:29;;;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;-1:-1:-1;6519:29:23;:::o;6244:13::-;6302:32;;92:4012:22;6286:48:23;6302:32;;92:4012:22;6302:32:23;;;:::i;6286:48::-;92:4012:22;;;;6244:13:23;;-1:-1:-1;6244:13:23;;6023:122;6130:4;6121:13;6023:122;;;5298:630;5401:32;;;;;;-1:-1:-1;5447:179:23;5467:6;5471:2;5467:6;;;;5667:27;;;;:::i;:::-;92:4012:22;;;;;;5712:20:23;92:4012:22;;;;;;5736:16:23;5712:40;5708:210;5736:16;;;92:4012:22;5772:36:23;;-1:-1:-1;5772:36:23;:::o;5708:210::-;-1:-1:-1;;;;;;;5874:29:23:o;5452:13::-;5509:31;5494:46;5509:31;;92:4012:22;5509:31:23;;;:::i;5494:46::-;92:4012:22;;5452:13:23;;;;4217:1141:24;;92:4012:22;;4321:21:24;;;4317:56;;4399:19;4405:12;;;;;:::i;4399:19::-;92:4012:22;;;;4442:4:24;4433:13;;4442:4;;;4462:8;;;;4469:1;4462:8;:::o;4429:923::-;4500:4;4491:13;;4500:4;;;4532:13;;;4527:19;4532:13;4520:26;4532:13;;:::i;4487:865::-;4576:4;4567:13;;4576:4;;;4618:13;;;4596:35;4618:13;;:::i;4596:35::-;4645:18;92:4012:22;4682:13:24;92:4012:22;4677:194:24;4697:15;;;;;;4891;;;;;:24;:15;;:::i;4682:13::-;4743:11;;;;4778:1;4743:11;92:4012:22;;;;4743:11:24;4742:43;4758:27;4764:20;;4769:14;:10;;;;:::i;:14::-;4764:20;;:::i;4742:43::-;;92:4012:22;;4682:13:24;;;;4563:789;4945:4;-1:-1:-1;4945:4:24;;;4977:13;;4972:19;4977:13;4965:26;4977:13;;:::i;4932:420::-;5044:13;;5022:35;5044:13;;:::i;5022:35::-;5071:18;92:4012:22;5108:13:24;92:4012:22;5103:194:24;5123:15;;;;;;5317;;;;;:24;:15;;:::i;5108:13::-;5169:11;;;;5204:1;5169:11;92:4012:22;;;;5169:11:24;5168:43;5184:27;5190:20;;5195:14;:10;;;;:::i;5168:43::-;;92:4012:22;;5108:13:24;;;;9295:1058:23;;92:4012:22;;9395:19:23;9391:39;;9459:17;9465:10;;;;:::i;9459:17::-;9512:4;9500:16;;9499:23;9512:4;;9596:33;9606:22;:18;92:4012:22;;9606:18:23;:::i;:::-;:22;:::i;:::-;9596:33;:::i;:::-;92:4012:22;;;-1:-1:-1;;;92:4012:22;9413:1:23;9643:36;;92:4012:22;9643:36:23;:::i;:::-;;9627:1;9698:13;92:4012:22;;9713:18:23;;;;;9785:10;9772:30;9779:22;:17;9785:10;;9627:1;9785:10;;;:::i;9779:17::-;92:4012:22;;;;;;9779:22:23;92:4012:22;;-1:-1:-1;;;;;;92:4012:22;;;9772:30:23;9752:50;9759:9;:5;;;:::i;:9::-;9752:50;9413:1;9752:50;;;;:::i;:::-;;9836:32;9674:4;9843:17;9849:10;;;;;:::i;9843:17::-;:24;92:4012:22;;-1:-1:-1;;;;;;92:4012:22;;;9836:32:23;9820:48;9827:5;;;:::i;9820:48::-;;92:4012:22;9698:13:23;;9713:18;-1:-1:-1;9713:18:23;-1:-1:-1;9295:1058:23:o;9562:761::-;92:4012:22;9993:33:23;10003:22;:18;92:4012:22;;10003:18:23;:::i;:::-;:22;:::i;9993:33::-;10057:1;10045:13;92:4012:22;;10060:18:23;;;;;10134:10;10121:30;10128:22;:17;10134:10;;10057:1;10134:10;;;:::i;10121:30::-;10099:52;10106:11;10107:5;;;:::i;:::-;10106:11;:::i;10099:52::-;;10195:32;10222:4;10202:17;10208:10;;;;;:::i;10195:32::-;10169:58;10176:15;:11;10177:5;;;:::i;10176:11::-;:15;:::i;10169:58::-;;92:4012:22;10045:13:23;;10590:651;;;;10709:23;92:4012:22;;10709:23:23;;:::i;:::-;10735:14;92:4012:22;;10735:14:23;:::i;:::-;-1:-1:-1;10705:58:23;;-1:-1:-1;10779:13:23;92:4012:22;;10794:18:23;;;;;10862:16;10863:10;;;;:::i;:::-;92:4012:22;;;;10862:16:23;10863:10;;10915:33;:28;10921:21;;10925:16;10926:10;;;;:::i;:::-;92:4012:22;;;;10925:16:23;10921:21;;:::i;10915:33::-;92:4012:22;11067:30:23;11080:17;11086:10;;;;;:::i;11067:30::-;92:4012:22;;11067:30:23;11063:81;;92:4012:22;;10779:13:23;;11063:81;11117:12;;;;-1:-1:-1;11117:12:23;:::o;10858:191::-;11030:4;10999:28;11005:21;;11009:16;11010:10;;;;:::i;10999:28::-;:35;10858:191;;10794:18;;;;;92:4012:22;10590:651:23;:::o;10705:58::-;10751:12;;;-1:-1:-1;10751:12:23;:::o","linkReferences":{},"immutableReferences":{"40185":[{"start":310,"length":32},{"start":797,"length":32},{"start":1017,"length":32},{"start":1530,"length":32}]}},"methodIdentifiers":{"MAX_BLOCK_LOOKBACK()":"3d2691bc","bond()":"64c9ec6f","bondAmount()":"80f323a7","bondedExecutor()":"1aa7c0ec","cancelAndWithdraw()":"6b892b22","cancellationRequest()":"308657d7","collect((bytes,bytes,bytes,bytes,bytes,bytes),uint256,bytes32)":"b39c1d4d","commitment()":"1303a484","deposit()":"d0e30db0","executionDeadline()":"33ee5f35","fund(bytes32)":"bf14c119","funded()":"f3a504f2","is_bonded()":"cb766a56","originalDeposit()":"7fd0368b","requestCancellation()":"81972d00","resume()":"046f7da2","totalBondsDeposited()":"fe03a460"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_commitment\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHashUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockHeaderMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlockNumberMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BondActive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CancellationRequested\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommitmentMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETHTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutorAlreadyBonded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBond\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLP\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPEncoding\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRLPList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReceiptProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTxProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoWithdrawableFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotFunded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyBondedExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyDeployer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RLPOffsetOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReceiptStatusNotSuccess\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockInFuture\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetBlockTooOld\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TxFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedTxType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MAX_BLOCK_LOOKBACK\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bond\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondedExecutor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancelAndWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cancellationRequest\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"blockHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transactionRlp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"txProofNodes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptRlp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiptProofNodes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"path\",\"type\":\"bytes\"}],\"internalType\":\"struct EscrowNative.NativeTransferProof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"targetBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"collect\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"commitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executionDeadline\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_commitment\",\"type\":\"bytes32\"}],\"name\":\"fund\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"funded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"is_bonded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"originalDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"requestCancellation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalBondsDeposited\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"cancelAndWithdraw()\":{\"notice\":\"Cancel and withdraw original deposit in a single transaction. Reverts if a node has already bonded. Seized bonds remain in the contract.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/EscrowNative.sol\":\"EscrowNative\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"],\"viaIR\":true},\"sources\":{\"src/BlockHeaderParser.sol\":{\"keccak256\":\"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6\",\"dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p\"]},\"src/EscrowBase.sol\":{\"keccak256\":\"0x2ce03c1079aae5a7eeabfb94cb9ca734944acb41ee0be2034c193f0633764dc2\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://686a16fdeff55fced1d023f86f0b9f9111dba14a83098b5dd7f207023c8f5e87\",\"dweb:/ipfs/QmTdckXk5WPEVbZKA7qp1Mnje8R9XugKX4jjkWfGDVZnxV\"]},\"src/EscrowNative.sol\":{\"keccak256\":\"0x25d77bff47d0c9dc1f9824cc8d5ad1f66c016e4d5c6d62c25aca0d1e9720cdac\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://891ae30960bb5e73c6f13dcbbcfc10ecba1b3200a559ce49ce0282c1624f4e1a\",\"dweb:/ipfs/Qmd2i1uo6qMHMXSdkMFcfGJATP7ZUvzZ6xw31c8Jji5p7w\"]},\"src/MPTVerifier.sol\":{\"keccak256\":\"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b\",\"dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU\"]},\"src/RLPParser.sol\":{\"keccak256\":\"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d\",\"dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk\"]},\"src/ReceiptValidator.sol\":{\"keccak256\":\"0xeb73274872c39cc110409f911795cc6135d676d97c4f93ae7ae0e7d1d16eec10\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://680d86f985246d12ef56d02a2597cd11dd2d7fa4d2c8b10a274a55886dc51099\",\"dweb:/ipfs/QmSRGaoao2y3EeKRhdwMNS27PVvMgLEc7q5uqJyXzUzMcZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyFunded"},{"inputs":[],"type":"error","name":"BlockHashUnavailable"},{"inputs":[],"type":"error","name":"BlockHeaderMismatch"},{"inputs":[],"type":"error","name":"BlockNumberMismatch"},{"inputs":[],"type":"error","name":"BondActive"},{"inputs":[],"type":"error","name":"CancellationRequested"},{"inputs":[],"type":"error","name":"CommitmentMismatch"},{"inputs":[],"type":"error","name":"ETHTransferFailed"},{"inputs":[],"type":"error","name":"ExecutorAlreadyBonded"},{"inputs":[],"type":"error","name":"ExpectedRLPList"},{"inputs":[],"type":"error","name":"InsufficientBond"},{"inputs":[],"type":"error","name":"InvalidAddress"},{"inputs":[],"type":"error","name":"InvalidRLP"},{"inputs":[],"type":"error","name":"InvalidRLPEncoding"},{"inputs":[],"type":"error","name":"InvalidRLPList"},{"inputs":[],"type":"error","name":"InvalidReceiptProof"},{"inputs":[],"type":"error","name":"InvalidTxProof"},{"inputs":[],"type":"error","name":"NoWithdrawableFunds"},{"inputs":[],"type":"error","name":"NotFunded"},{"inputs":[],"type":"error","name":"OnlyBondedExecutor"},{"inputs":[],"type":"error","name":"OnlyDeployer"},{"inputs":[],"type":"error","name":"RLPOffsetOutOfBounds"},{"inputs":[],"type":"error","name":"ReceiptStatusNotSuccess"},{"inputs":[],"type":"error","name":"TargetBlockInFuture"},{"inputs":[],"type":"error","name":"TargetBlockTooOld"},{"inputs":[],"type":"error","name":"TxFailed"},{"inputs":[],"type":"error","name":"UnsupportedTxType"},{"inputs":[],"type":"error","name":"ZeroAmount"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_BLOCK_LOOKBACK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"function","name":"bond"},{"inputs":[],"stateMutability":"view","type":"function","name":"bondAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bondedExecutor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"cancelAndWithdraw"},{"inputs":[],"stateMutability":"view","type":"function","name":"cancellationRequest","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct EscrowNative.NativeTransferProof","name":"proof","type":"tuple","components":[{"internalType":"bytes","name":"blockHeader","type":"bytes"},{"internalType":"bytes","name":"transactionRlp","type":"bytes"},{"internalType":"bytes","name":"txProofNodes","type":"bytes"},{"internalType":"bytes","name":"receiptRlp","type":"bytes"},{"internalType":"bytes","name":"receiptProofNodes","type":"bytes"},{"internalType":"bytes","name":"path","type":"bytes"}]},{"internalType":"uint256","name":"targetBlockNumber","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"collect"},{"inputs":[],"stateMutability":"view","type":"function","name":"commitment","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"executionDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"fund"},{"inputs":[],"stateMutability":"view","type":"function","name":"funded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"is_bonded","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"originalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"requestCancellation"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resume"},{"inputs":[],"stateMutability":"view","type":"function","name":"totalBondsDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"cancelAndWithdraw()":{"notice":"Cancel and withdraw original deposit in a single transaction. Reverts if a node has already bonded. Seized bonds remain in the contract."}},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/EscrowNative.sol":"EscrowNative"},"evmVersion":"prague","libraries":{},"viaIR":true},"sources":{"src/BlockHeaderParser.sol":{"keccak256":"0xf8a84bae1ea886c0519edb32e55f4c661d1e1cb036550967502148d033f08550","urls":["bzz-raw://766da07581e5dac7eda20d25debe9c381ed466204608502522b53266624bafa6","dweb:/ipfs/QmPyjTUV3zL6h9oeQjbbbw3WiypQQYqdws6vTWSAXRUg7p"],"license":"UNLICENSED"},"src/EscrowBase.sol":{"keccak256":"0x2ce03c1079aae5a7eeabfb94cb9ca734944acb41ee0be2034c193f0633764dc2","urls":["bzz-raw://686a16fdeff55fced1d023f86f0b9f9111dba14a83098b5dd7f207023c8f5e87","dweb:/ipfs/QmTdckXk5WPEVbZKA7qp1Mnje8R9XugKX4jjkWfGDVZnxV"],"license":"UNLICENSED"},"src/EscrowNative.sol":{"keccak256":"0x25d77bff47d0c9dc1f9824cc8d5ad1f66c016e4d5c6d62c25aca0d1e9720cdac","urls":["bzz-raw://891ae30960bb5e73c6f13dcbbcfc10ecba1b3200a559ce49ce0282c1624f4e1a","dweb:/ipfs/Qmd2i1uo6qMHMXSdkMFcfGJATP7ZUvzZ6xw31c8Jji5p7w"],"license":"UNLICENSED"},"src/MPTVerifier.sol":{"keccak256":"0xf71ff6fc0fa054681fc67b7ca3c187141749b04895defd977d6989271b35ebeb","urls":["bzz-raw://6e2efbdee9d872e22febc5d29894e3759e72ed43850a512c9eed56a9f5e7ff3b","dweb:/ipfs/QmShY9TstL2zXVSYH7ux8D6ByW22ptm7JfiEWy2qs7bHZU"],"license":"UNLICENSED"},"src/RLPParser.sol":{"keccak256":"0x403e6fd0cbf2e3599530d724d26e75b136bd7947e35e1cf5f79b30841b2c4c6c","urls":["bzz-raw://b24f44c75ae8db00297a940d0badb6b0fd9114b494b1a5c097a04f4bccde5e1d","dweb:/ipfs/QmSoxh5vZu41RzAs8RTLXgQ5cD5pQBeQo68nYSFh4Dk5Xk"],"license":"UNLICENSED"},"src/ReceiptValidator.sol":{"keccak256":"0xeb73274872c39cc110409f911795cc6135d676d97c4f93ae7ae0e7d1d16eec10","urls":["bzz-raw://680d86f985246d12ef56d02a2597cd11dd2d7fa4d2c8b10a274a55886dc51099","dweb:/ipfs/QmSRGaoao2y3EeKRhdwMNS27PVvMgLEc7q5uqJyXzUzMcZ"],"license":"UNLICENSED"}},"version":1},"id":22} \ No newline at end of file diff --git a/src/EscrowBase.sol b/src/EscrowBase.sol index c6f0f85..c4b0b6c 100644 --- a/src/EscrowBase.sol +++ b/src/EscrowBase.sol @@ -19,29 +19,21 @@ abstract contract EscrowBase { error CancellationRequested(); error ExecutorAlreadyBonded(); error InsufficientBond(); + error CommitmentMismatch(); - // The following variables are set up in the constructor. address immutable deployerAddress; - uint256 public currentRewardAmount; - uint256 public currentPaymentAmount; - uint256 public originalRewardAmount; + uint256 public deposit; // Total deposited (original + seized bonds) + bytes32 public commitment; // H(recipient, [token,] amount, salt) - // The following variables are for Merkle proof validation - address public immutable expectedRecipient; // The intended recipient of the transfer - uint256 public immutable expectedAmount; // The expected transfer amount - uint256 public constant MAX_BLOCK_LOOKBACK = 256; // Maximum blocks to look back for validation + uint256 public constant MAX_BLOCK_LOOKBACK = 256; - // The following variables are dynamically adjusted by the contract when a bond or cancellation request is submitted. address public bondedExecutor; uint256 public executionDeadline; uint256 public bondAmount; - uint256 public totalBondsDeposited; bool public cancellationRequest; - bool public funded; // marks if the contract has funds to pay out the executors or not (if it doesn't have funds, no executor should be accepted) + bool public funded; - constructor(address _expectedRecipient, uint256 _expectedAmount) { - expectedRecipient = _expectedRecipient; - expectedAmount = _expectedAmount; + constructor() { deployerAddress = msg.sender; } @@ -86,11 +78,10 @@ abstract contract EscrowBase { executionDeadline = 0; } - // Internal helper to handle expired bonds (adds bond to reward pool) + // Internal helper to handle expired bonds (adds bond to deposit pool) function _handleExpiredBond() internal { if (executionDeadline > 0 && block.timestamp > executionDeadline) { - currentRewardAmount += bondAmount; - totalBondsDeposited += bondAmount; + deposit += bondAmount; _tryResetBondData(); } } @@ -100,7 +91,7 @@ abstract contract EscrowBase { if (!funded) revert NotFunded(); if (cancellationRequest) revert CancellationRequested(); if (is_bonded()) revert ExecutorAlreadyBonded(); - if (_bondAmount < currentRewardAmount / 2) revert InsufficientBond(); + if (_bondAmount < deposit / 400) revert InsufficientBond(); } // Internal helper to set bond data @@ -116,13 +107,13 @@ abstract contract EscrowBase { bondAmount = 0; executionDeadline = 0; funded = false; - currentPaymentAmount = 0; - currentRewardAmount = 0; + deposit = 0; + commitment = bytes32(0); } // Internal helper to calculate payout amount function _calculatePayout() internal view returns (uint256) { - return bondAmount + currentRewardAmount + currentPaymentAmount; + return bondAmount + deposit; } // Internal helper to validate withdraw requirements @@ -131,15 +122,10 @@ abstract contract EscrowBase { if (msg.sender != deployerAddress) revert OnlyDeployer(); } - // Internal helper to calculate withdrawable amount and clear state - function _calculateWithdrawableAmount() internal view returns (uint256) { - return currentPaymentAmount + originalRewardAmount; - } - // Internal helper to clear state after withdraw function _clearWithdrawState() internal { funded = false; - currentPaymentAmount = 0; - currentRewardAmount = 0; + deposit = 0; + commitment = bytes32(0); } } diff --git a/src/EscrowERC20.sol b/src/EscrowERC20.sol index 4922e7e..77e1934 100644 --- a/src/EscrowERC20.sol +++ b/src/EscrowERC20.sol @@ -14,11 +14,9 @@ contract EscrowERC20 is EscrowBase { // Custom errors error ZeroAddress(); error AlreadyFunded(); - error ZeroRewardAmount(); - error ZeroPaymentAmount(); + error ZeroAmount(); error TokenTransferFailed(); error InvalidReceiptProof(); - error InvalidTransferEvent(); error NoWithdrawableFunds(); address public immutable tokenContract; // The tokens used in the escrow @@ -32,33 +30,27 @@ contract EscrowERC20 is EscrowBase { uint256 logIndex; // Index of target log in receipt } - constructor( - address _tokenContract, - address _expectedRecipient, - uint256 _expectedAmount, - uint256 _currentRewardAmount, - uint256 _currentPaymentAmount - ) EscrowBase(_expectedRecipient, _expectedAmount) { + constructor(address _tokenContract, uint256 _amount, bytes32 _commitment) EscrowBase() { if (_tokenContract == address(0)) revert ZeroAddress(); tokenContract = _tokenContract; - if (_currentRewardAmount > 0 && _currentPaymentAmount > 0) { - fund(_currentRewardAmount, _currentPaymentAmount); + if (_amount > 0) { + _fund(_amount, _commitment); } } - // takes currentRewardAmount + currentPaymentAmount from the deployer's balance from the tokenContract. - function fund(uint256 _currentRewardAmount, uint256 _currentPaymentAmount) public { + function fund(uint256 _amount, bytes32 _commitment) external { if (msg.sender != deployerAddress) revert OnlyDeployer(); if (funded) revert AlreadyFunded(); - if (_currentRewardAmount == 0) revert ZeroRewardAmount(); - if (_currentPaymentAmount == 0) revert ZeroPaymentAmount(); - - currentRewardAmount = _currentRewardAmount; - originalRewardAmount = _currentRewardAmount; - currentPaymentAmount = _currentPaymentAmount; - if (!IERC20(tokenContract).transferFrom(msg.sender, address(this), originalRewardAmount + currentPaymentAmount)) - { + _fund(_amount, _commitment); + } + + function _fund(uint256 _amount, bytes32 _commitment) internal { + if (_amount == 0) revert ZeroAmount(); + + deposit = _amount; + commitment = _commitment; + if (!IERC20(tokenContract).transferFrom(msg.sender, address(this), _amount)) { revert TokenTransferFailed(); } funded = true; @@ -78,8 +70,8 @@ contract EscrowERC20 is EscrowBase { _setBondData(_bondAmount); } - // Validates a given merkle proof against a recent block hash and checks the Transfer event's contents - function collect(ReceiptProof calldata proof, uint256 targetBlockNumber) external { + // Validates a given merkle proof against a recent block hash and verifies the commitment + function collect(ReceiptProof calldata proof, uint256 targetBlockNumber, bytes32 salt) external { _validateBlockHeader(proof.blockHeader, targetBlockNumber); // Extract receipts root and verify receipt inclusion @@ -88,11 +80,13 @@ contract EscrowERC20 is EscrowBase { revert InvalidReceiptProof(); } - // Validate the Transfer event - if (!ReceiptValidator.validateTransferInReceipt( - proof.receiptRlp, proof.logIndex, tokenContract, expectedRecipient, expectedAmount - )) { - revert InvalidTransferEvent(); + // Extract transfer fields from the proven receipt + (address token, address recipient, uint256 amount) = + ReceiptValidator.extractTransferFromReceipt(proof.receiptRlp, proof.logIndex); + + // Verify commitment: H(recipient, token, amount, salt) + if (keccak256(abi.encodePacked(recipient, token, amount, salt)) != commitment) { + revert CommitmentMismatch(); } _payout(); @@ -114,19 +108,19 @@ contract EscrowERC20 is EscrowBase { if (!success) revert TokenTransferFailed(); } - /// @notice Cancel and withdraw funds in a single transaction. - /// Reverts if a node has already bonded. + /// @notice Cancel and withdraw all funds in a single transaction. + /// Reverts if a bond is still active. function cancelAndWithdraw() external { cancellationRequest = true; _validateWithdraw(); + _handleExpiredBond(); _tryResetBondData(); - uint256 withdrawableAmount = _calculateWithdrawableAmount(); + uint256 withdrawableAmount = deposit; + if (withdrawableAmount == 0) revert NoWithdrawableFunds(); _clearWithdrawState(); - if (withdrawableAmount == 0) revert NoWithdrawableFunds(); - if (!IERC20(tokenContract).transfer(msg.sender, withdrawableAmount)) { revert TokenTransferFailed(); } diff --git a/src/EscrowNative.sol b/src/EscrowNative.sol index a7fb09f..fdf3c9f 100644 --- a/src/EscrowNative.sol +++ b/src/EscrowNative.sol @@ -5,14 +5,11 @@ import "./EscrowBase.sol"; contract EscrowNative is EscrowBase { // Custom errors - error IncorrectETHAmount(); error AlreadyFunded(); - error ZeroRewardAmount(); - error ZeroPaymentAmount(); + error ZeroAmount(); error InvalidTxProof(); error InvalidReceiptProof(); error TxFailed(); - error InvalidNativeTransfer(); error ETHTransferFailed(); error NoWithdrawableFunds(); @@ -26,31 +23,21 @@ contract EscrowNative is EscrowBase { bytes path; // RLP-encoded index (same for both tx and receipt) } - constructor( - address _expectedRecipient, - uint256 _expectedAmount, - uint256 _currentRewardAmount, - uint256 _currentPaymentAmount - ) payable EscrowBase(_expectedRecipient, _expectedAmount) { - if (_currentRewardAmount > 0 && _currentPaymentAmount > 0) { - if (msg.value != _currentRewardAmount + _currentPaymentAmount) revert IncorrectETHAmount(); - currentRewardAmount = _currentRewardAmount; - originalRewardAmount = _currentRewardAmount; - currentPaymentAmount = _currentPaymentAmount; + constructor(bytes32 _commitment) payable EscrowBase() { + if (msg.value > 0) { + deposit = msg.value; + commitment = _commitment; funded = true; } } - function fund(uint256 _currentRewardAmount, uint256 _currentPaymentAmount) external payable { + function fund(bytes32 _commitment) external payable { if (msg.sender != deployerAddress) revert OnlyDeployer(); if (funded) revert AlreadyFunded(); - if (_currentRewardAmount == 0) revert ZeroRewardAmount(); - if (_currentPaymentAmount == 0) revert ZeroPaymentAmount(); - if (msg.value != _currentRewardAmount + _currentPaymentAmount) revert IncorrectETHAmount(); + if (msg.value == 0) revert ZeroAmount(); - currentRewardAmount = _currentRewardAmount; - originalRewardAmount = _currentRewardAmount; - currentPaymentAmount = _currentPaymentAmount; + deposit = msg.value; + commitment = _commitment; funded = true; } @@ -65,7 +52,7 @@ contract EscrowNative is EscrowBase { // Validates native ETH transfer by proving both transaction inclusion (for to/value) // and receipt inclusion (for status == 1, i.e., successful execution) - function collect(NativeTransferProof calldata proof, uint256 targetBlockNumber) external { + function collect(NativeTransferProof calldata proof, uint256 targetBlockNumber, bytes32 salt) external { _validateBlockHeader(proof.blockHeader, targetBlockNumber); // Verify transaction inclusion in transactions trie @@ -83,9 +70,12 @@ contract EscrowNative is EscrowBase { // Validate transaction succeeded (status == 1) if (!ReceiptValidator.validateReceiptStatus(proof.receiptRlp)) revert TxFailed(); - // Validate the native ETH transfer (to and value fields) - if (!ReceiptValidator.validateNativeTransfer(proof.transactionRlp, expectedRecipient, expectedAmount)) { - revert InvalidNativeTransfer(); + // Extract transfer fields from the proven transaction + (address recipient, uint256 amount) = ReceiptValidator.extractNativeTransfer(proof.transactionRlp); + + // Verify commitment: H(recipient, amount, salt) + if (keccak256(abi.encodePacked(recipient, amount, salt)) != commitment) { + revert CommitmentMismatch(); } _payout(); @@ -101,19 +91,19 @@ contract EscrowNative is EscrowBase { if (!success) revert ETHTransferFailed(); } - /// @notice Cancel and withdraw funds in a single transaction. - /// Reverts if a node has already bonded. + /// @notice Cancel and withdraw all funds in a single transaction. + /// Reverts if a bond is still active. function cancelAndWithdraw() external { cancellationRequest = true; _validateWithdraw(); + _handleExpiredBond(); _tryResetBondData(); - uint256 withdrawableAmount = _calculateWithdrawableAmount(); + uint256 withdrawableAmount = deposit; + if (withdrawableAmount == 0) revert NoWithdrawableFunds(); _clearWithdrawState(); - if (withdrawableAmount == 0) revert NoWithdrawableFunds(); - (bool success,) = msg.sender.call{value: withdrawableAmount}(""); if (!success) revert ETHTransferFailed(); } diff --git a/src/ReceiptValidator.sol b/src/ReceiptValidator.sol index 63f580d..207d975 100644 --- a/src/ReceiptValidator.sol +++ b/src/ReceiptValidator.sol @@ -14,32 +14,26 @@ library ReceiptValidator { // Custom errors error InvalidRLP(); error InvalidAddress(); - error WrongTokenContract(); error WrongEventSignature(); - error ToAddressMismatch(); - error AmountMismatch(); error ReceiptStatusNotSuccess(); error UnsupportedTxType(); - error RecipientMismatch(); // Pre-computed Transfer(address,address,uint256) event signature bytes32 private constant TRANSFER_EVENT_SIG = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; /** - * @dev Validate Transfer event in receipt + * @dev Extract Transfer event fields from receipt * @param receiptRlp RLP-encoded transaction receipt * @param logIndex Index of the target log in the receipt - * @param toAddress Expected recipient address - * @param expectedAmount Expected transfer amount - * @return True if validation passes + * @return token The emitting token contract address + * @return recipient The transfer recipient + * @return amount The transfer amount */ - function validateTransferInReceipt( - bytes calldata receiptRlp, - uint256 logIndex, - address tokenContract, - address toAddress, - uint256 expectedAmount - ) internal pure returns (bool) { + function extractTransferFromReceipt(bytes calldata receiptRlp, uint256 logIndex) + internal + pure + returns (address token, address recipient, uint256 amount) + { uint256 offset = 0; // Handle typed receipts (EIP-2718) @@ -79,26 +73,23 @@ library ReceiptValidator { } } - // Validate the target log - return validateTransferLog(receiptRlp, offset, tokenContract, toAddress, expectedAmount); + // Extract fields from the target log + return extractTransferLog(receiptRlp, offset); } /** - * @dev Validate a Transfer event log + * @dev Extract Transfer event fields from a log entry * @param receiptRlp The receipt data * @param logOffset Offset to the target log - * @param tokenContract Expected token contract address - * @param toAddress Expected recipient address - * @param expectedAmount Expected transfer amount - * @return True if validation passes + * @return token The emitting token contract address + * @return recipient The transfer recipient + * @return amount The transfer amount */ - function validateTransferLog( - bytes calldata receiptRlp, - uint256 logOffset, - address tokenContract, - address toAddress, - uint256 expectedAmount - ) private pure returns (bool) { + function extractTransferLog(bytes calldata receiptRlp, uint256 logOffset) + private + pure + returns (address token, address recipient, uint256 amount) + { uint256 offset = logOffset; // Parse target log: [address, topics[], data] @@ -109,33 +100,29 @@ library ReceiptValidator { offset += 1; } - // Parse emitter address (should be the token contract) + // Parse emitter address (token contract) if (uint8(receiptRlp[offset]) != 0x94) revert InvalidAddress(); - address emitter; assembly { - emitter := shr(96, calldataload(add(receiptRlp.offset, add(offset, 1)))) + token := shr(96, calldataload(add(receiptRlp.offset, add(offset, 1)))) } - if (emitter != tokenContract) revert WrongTokenContract(); offset += 21; - // Parse and validate topics - return validateTransferTopics(receiptRlp, offset, toAddress, expectedAmount); + // Extract topics and data + (recipient, amount) = extractTransferTopics(receiptRlp, offset); } /** - * @dev Validate event topics for Transfer event + * @dev Extract recipient and amount from Transfer event topics and data * @param receiptRlp The receipt data * @param topicsOffset Offset to the topics array - * @param toAddress Expected recipient address - * @param expectedAmount Expected transfer amount - * @return True if validation passes + * @return recipient The transfer recipient + * @return amount The transfer amount */ - function validateTransferTopics( - bytes calldata receiptRlp, - uint256 topicsOffset, - address toAddress, - uint256 expectedAmount - ) private pure returns (bool) { + function extractTransferTopics(bytes calldata receiptRlp, uint256 topicsOffset) + private + pure + returns (address recipient, uint256 amount) + { uint256 offset = topicsOffset; // Parse topics array @@ -150,27 +137,28 @@ library ReceiptValidator { bytes32 eventSig = receiptRlp.extractBytes32(offset); if (eventSig != TRANSFER_EVENT_SIG) revert WrongEventSignature(); - // Check second topic (from address) --skip validation + // Skip event signature topic offset = receiptRlp.skipItem(offset); - // Check third topic (to address) + // Skip second topic (from address) offset = receiptRlp.skipItem(offset); + + // Third topic (to address) bytes32 logToAddr = receiptRlp.extractBytes32(offset); - if (address(uint160(uint256(logToAddr))) != toAddress) revert ToAddressMismatch(); + recipient = address(uint160(uint256(logToAddr))); - // Parse and validate data payload (amount) + // Parse data payload (amount) offset = receiptRlp.skipItem(topicsOffset); // Skip entire topics array - uint256 logAmount; { uint8 dataPrefix = uint8(receiptRlp[offset]); if (dataPrefix < 0x80) { - logAmount = dataPrefix; + amount = dataPrefix; } else if (dataPrefix == 0x80) { - logAmount = 0; + amount = 0; } else if (dataPrefix <= 0xa0) { uint256 len = dataPrefix - 0x80; for (uint256 i = 0; i < len;) { - logAmount = (logAmount << 8) | uint8(receiptRlp[offset + 1 + i]); + amount = (amount << 8) | uint8(receiptRlp[offset + 1 + i]); unchecked { ++i; } @@ -179,9 +167,6 @@ library ReceiptValidator { revert InvalidRLP(); } } - if (logAmount != expectedAmount) revert AmountMismatch(); - - return true; } /** @@ -218,13 +203,12 @@ library ReceiptValidator { } /** - * @dev Validate native ETH transfer by checking tx 'to' and 'value' fields + * @dev Extract recipient and amount from native ETH transfer tx fields + * @param txRlp RLP-encoded transaction + * @return recipient The transfer recipient + * @return amount The transfer value */ - function validateNativeTransfer(bytes calldata txRlp, address expectedRecipient, uint256 expectedAmount) - internal - pure - returns (bool) - { + function extractNativeTransfer(bytes calldata txRlp) internal pure returns (address recipient, uint256 amount) { uint256 offset = 0; // Skip type prefix for typed transactions (EIP-2718) @@ -253,33 +237,27 @@ library ReceiptValidator { } } - // Validate 'to' address (0x94 prefix = 20 byte string) + // Extract 'to' address (0x94 prefix = 20 byte string) if (uint8(txRlp[offset]) != 0x94) revert InvalidAddress(); - address to; assembly { - to := shr(96, calldataload(add(txRlp.offset, add(offset, 1)))) + recipient := shr(96, calldataload(add(txRlp.offset, add(offset, 1)))) } - if (to != expectedRecipient) revert RecipientMismatch(); offset += 21; - // Validate 'value' + // Extract 'value' uint8 prefix = uint8(txRlp[offset]); - uint256 value; if (prefix < 0x80) { - value = prefix; + amount = prefix; } else if (prefix == 0x80) { - value = 0; + amount = 0; } else { uint256 len = prefix - 0x80; for (uint256 i = 0; i < len;) { - value = (value << 8) | uint8(txRlp[offset + 1 + i]); + amount = (amount << 8) | uint8(txRlp[offset + 1 + i]); unchecked { ++i; } } } - if (value != expectedAmount) revert AmountMismatch(); - - return true; } } diff --git a/test/EscrowERC20.t.sol b/test/EscrowERC20.t.sol index d64fd1e..fa23815 100644 --- a/test/EscrowERC20.t.sol +++ b/test/EscrowERC20.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.30; -import {Test, console} from "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {EscrowERC20} from "../src/EscrowERC20.sol"; import {EscrowBase} from "../src/EscrowBase.sol"; @@ -47,10 +47,10 @@ contract EscrowERC20Test is Test { address public recipient; address public other; - uint256 constant EXPECTED_AMOUNT = 1000e18; - uint256 constant REWARD_AMOUNT = 500e18; - uint256 constant PAYMENT_AMOUNT = 500e18; - uint256 constant BOND_AMOUNT = 250e18; // Half of reward amount + uint256 constant DEPOSIT_AMOUNT = 1000e18; + uint256 constant BOND_AMOUNT = 2.5e18; // 0.25% of deposit + bytes32 constant SALT = bytes32(uint256(99)); + bytes32 COMMITMENT; function setUp() public { deployer = makeAddr("deployer"); @@ -58,71 +58,64 @@ contract EscrowERC20Test is Test { recipient = makeAddr("recipient"); other = makeAddr("other"); + COMMITMENT = keccak256(abi.encodePacked(recipient, address(0), DEPOSIT_AMOUNT, SALT)); + vm.startPrank(deployer); token = new MockERC20(); token.mint(deployer, 10000e18); - address futureEscrow = vm.computeCreateAddress(deployer, vm.getNonce(deployer)); - token.approve(futureEscrow, REWARD_AMOUNT + PAYMENT_AMOUNT); - - escrow = new EscrowERC20(address(token), recipient, EXPECTED_AMOUNT, REWARD_AMOUNT, PAYMENT_AMOUNT); + escrow = new EscrowERC20(address(token), 0, bytes32(0)); + token.approve(address(escrow), DEPOSIT_AMOUNT); + escrow.fund(DEPOSIT_AMOUNT, COMMITMENT); vm.stopPrank(); token.mint(executor, 10000e18); token.mint(other, 10000e18); } - function testConstructor() public { - assertEq(escrow.currentRewardAmount(), REWARD_AMOUNT); - assertEq(escrow.currentPaymentAmount(), PAYMENT_AMOUNT); + function testConstructor() public view { + assertEq(escrow.deposit(), DEPOSIT_AMOUNT); assertEq(escrow.funded(), true); - assertEq(escrow.expectedRecipient(), recipient); - assertEq(escrow.expectedAmount(), EXPECTED_AMOUNT); + assertEq(escrow.commitment(), COMMITMENT); } function testFund() public { vm.startPrank(deployer); - address futureEscrow2 = vm.computeCreateAddress(deployer, vm.getNonce(deployer)); - token.approve(futureEscrow2, REWARD_AMOUNT + PAYMENT_AMOUNT); + EscrowERC20 escrow2 = new EscrowERC20(address(token), 0, bytes32(0)); - EscrowERC20 escrow2 = new EscrowERC20(address(token), recipient, EXPECTED_AMOUNT, 0, 0); - - token.approve(address(escrow2), REWARD_AMOUNT + PAYMENT_AMOUNT); - escrow2.fund(REWARD_AMOUNT, PAYMENT_AMOUNT); + token.approve(address(escrow2), DEPOSIT_AMOUNT); + escrow2.fund(DEPOSIT_AMOUNT, COMMITMENT); vm.stopPrank(); - assertEq(escrow2.currentRewardAmount(), REWARD_AMOUNT); - assertEq(escrow2.originalRewardAmount(), REWARD_AMOUNT); - assertEq(escrow2.currentPaymentAmount(), PAYMENT_AMOUNT); + assertEq(escrow2.deposit(), DEPOSIT_AMOUNT); assertEq(escrow2.funded(), true); - assertEq(token.balanceOf(address(escrow2)), REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(escrow2.commitment(), COMMITMENT); + assertEq(token.balanceOf(address(escrow2)), DEPOSIT_AMOUNT); } - function testFundZeroReward() public { + function testFundZeroAmount() public { vm.startPrank(deployer); - EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), recipient, EXPECTED_AMOUNT, 0, 0); + EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), 0, bytes32(0)); - token.approve(address(unfundedEscrow), PAYMENT_AMOUNT); - vm.expectRevert(EscrowERC20.ZeroRewardAmount.selector); - unfundedEscrow.fund(0, PAYMENT_AMOUNT); + vm.expectRevert(EscrowERC20.ZeroAmount.selector); + unfundedEscrow.fund(0, COMMITMENT); vm.stopPrank(); } function testFundOnlyDeployer() public { vm.startPrank(executor); - token.approve(address(escrow), REWARD_AMOUNT + PAYMENT_AMOUNT); + token.approve(address(escrow), DEPOSIT_AMOUNT); vm.expectRevert(EscrowBase.OnlyDeployer.selector); - escrow.fund(REWARD_AMOUNT, PAYMENT_AMOUNT); + escrow.fund(DEPOSIT_AMOUNT, COMMITMENT); vm.stopPrank(); } function testFundAlreadyFunded() public { - // Escrow is already funded in setUp, so any fund() call should revert vm.startPrank(deployer); - token.approve(address(escrow), REWARD_AMOUNT + PAYMENT_AMOUNT); + token.approve(address(escrow), DEPOSIT_AMOUNT); vm.expectRevert(EscrowERC20.AlreadyFunded.selector); - escrow.fund(REWARD_AMOUNT, PAYMENT_AMOUNT); + escrow.fund(DEPOSIT_AMOUNT, COMMITMENT); vm.stopPrank(); } @@ -139,9 +132,8 @@ contract EscrowERC20Test is Test { } function testBondNotFunded() public { - // Create an unfunded escrow vm.startPrank(deployer); - EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), recipient, EXPECTED_AMOUNT, 0, 0); + EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), 0, bytes32(0)); vm.stopPrank(); vm.startPrank(executor); @@ -175,9 +167,8 @@ contract EscrowERC20Test is Test { vm.warp(block.timestamp + 6 minutes); - // After first bond fails, reward = 500 + 250 = 750, so minimum bond = 375 - uint256 updatedReward = REWARD_AMOUNT + BOND_AMOUNT; - uint256 newBondAmount = updatedReward / 2; + uint256 updatedDeposit = DEPOSIT_AMOUNT + BOND_AMOUNT; + uint256 newBondAmount = updatedDeposit / 400; vm.startPrank(other); token.approve(address(escrow), newBondAmount); @@ -185,32 +176,31 @@ contract EscrowERC20Test is Test { vm.stopPrank(); assertEq(escrow.bondedExecutor(), other); - assertEq(escrow.currentRewardAmount(), updatedReward); + assertEq(escrow.deposit(), updatedDeposit); assertEq(escrow.bondAmount(), newBondAmount); - assertEq(escrow.totalBondsDeposited(), BOND_AMOUNT); } - function testBondRequiresUpdatedRewardAmount() public { + function testBondRequiresUpdatedDepositMinimum() public { _bondExecutor(); vm.warp(block.timestamp + 6 minutes); - uint256 updatedReward = REWARD_AMOUNT + BOND_AMOUNT; - uint256 minimumRequiredBond = updatedReward / 2; + uint256 updatedDeposit = DEPOSIT_AMOUNT + BOND_AMOUNT; + uint256 minimumRequiredBond = updatedDeposit / 400; vm.startPrank(other); token.approve(address(escrow), type(uint256).max); + // Bond below minimum should fail vm.expectRevert(EscrowBase.InsufficientBond.selector); - escrow.bond(BOND_AMOUNT); + escrow.bond(minimumRequiredBond - 1); escrow.bond(minimumRequiredBond); vm.stopPrank(); - assertEq(escrow.currentRewardAmount(), updatedReward); + assertEq(escrow.deposit(), updatedDeposit); assertEq(escrow.bondAmount(), minimumRequiredBond); assertEq(escrow.bondedExecutor(), other); - assertEq(escrow.totalBondsDeposited(), BOND_AMOUNT); } function testRequestCancellation() public { @@ -254,12 +244,12 @@ contract EscrowERC20Test is Test { vm.prank(executor); vm.expectRevert(); - escrow.collect(dummyProof, block.number - 1); + escrow.collect(dummyProof, block.number - 1, SALT); } function testCollectNotFunded() public { vm.prank(deployer); - EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), recipient, EXPECTED_AMOUNT, 0, 0); + EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), 0, bytes32(0)); EscrowERC20.ReceiptProof memory dummyProof = EscrowERC20.ReceiptProof({ blockHeader: hex"", receiptRlp: hex"", proofNodes: hex"", receiptPath: hex"", logIndex: 0 @@ -267,7 +257,7 @@ contract EscrowERC20Test is Test { vm.prank(executor); vm.expectRevert(EscrowBase.NotFunded.selector); - unfundedEscrow.collect(dummyProof, block.number - 1); + unfundedEscrow.collect(dummyProof, block.number - 1, SALT); } function testCollectNotBondedExecutor() public { @@ -279,7 +269,7 @@ contract EscrowERC20Test is Test { vm.prank(other); vm.expectRevert(EscrowBase.OnlyBondedExecutor.selector); - escrow.collect(dummyProof, block.number - 1); + escrow.collect(dummyProof, block.number - 1, SALT); } function testCollectAfterDeadline() public { @@ -293,7 +283,7 @@ contract EscrowERC20Test is Test { vm.prank(executor); vm.expectRevert(EscrowBase.OnlyBondedExecutor.selector); - escrow.collect(dummyProof, block.number - 1); + escrow.collect(dummyProof, block.number - 1, SALT); } function testIsBonded() public { @@ -339,9 +329,8 @@ contract EscrowERC20Test is Test { vm.warp(block.timestamp + 6 minutes); - // After first bond fails, reward = 500 + 250 = 750, so minimum bond = 375 - uint256 updatedReward = REWARD_AMOUNT + BOND_AMOUNT; - uint256 newBondAmount = updatedReward / 2; + uint256 updatedDeposit = DEPOSIT_AMOUNT + BOND_AMOUNT; + uint256 newBondAmount = updatedDeposit / 400; vm.startPrank(other); token.approve(address(escrow), newBondAmount); @@ -349,7 +338,7 @@ contract EscrowERC20Test is Test { vm.stopPrank(); assertEq(escrow.bondedExecutor(), other); - assertEq(escrow.currentRewardAmount(), updatedReward); + assertEq(escrow.deposit(), updatedDeposit); assertEq(escrow.bondAmount(), newBondAmount); } @@ -361,9 +350,8 @@ contract EscrowERC20Test is Test { assertTrue(escrow.cancellationRequest()); assertFalse(escrow.funded()); - assertEq(escrow.currentPaymentAmount(), 0); - assertEq(escrow.currentRewardAmount(), 0); - assertEq(token.balanceOf(deployer), initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(escrow.deposit(), 0); + assertEq(token.balanceOf(deployer), initialBalance + DEPOSIT_AMOUNT); } function testCancelAndWithdrawOnlyDeployer() public { @@ -374,7 +362,7 @@ contract EscrowERC20Test is Test { function testCancelAndWithdrawNotFunded() public { vm.prank(deployer); - EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), recipient, EXPECTED_AMOUNT, 0, 0); + EscrowERC20 unfundedEscrow = new EscrowERC20(address(token), 0, bytes32(0)); vm.prank(deployer); vm.expectRevert(EscrowBase.NotFunded.selector); @@ -401,11 +389,10 @@ contract EscrowERC20Test is Test { assertTrue(escrow.cancellationRequest()); assertFalse(escrow.funded()); - assertEq(token.balanceOf(deployer), initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(token.balanceOf(deployer), initialBalance + DEPOSIT_AMOUNT + BOND_AMOUNT); } function testCancelAndWithdrawPreventsRaceCondition() public { - // Deployer atomically cancels and withdraws vm.prank(deployer); escrow.cancelAndWithdraw(); @@ -428,7 +415,7 @@ contract EscrowERC20Test is Test { assertTrue(escrow.cancellationRequest()); assertFalse(escrow.funded()); - assertEq(token.balanceOf(deployer), initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(token.balanceOf(deployer), initialBalance + DEPOSIT_AMOUNT); } function testCancelAndWithdrawAfterCollectingBonds() public { @@ -446,8 +433,9 @@ contract EscrowERC20Test is Test { vm.prank(deployer); escrow.cancelAndWithdraw(); - assertEq(token.balanceOf(deployer), initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); - assertEq(token.balanceOf(address(escrow)), BOND_AMOUNT); + // Deployer gets back everything (deposit + seized bond) + assertEq(token.balanceOf(deployer), initialBalance + DEPOSIT_AMOUNT + BOND_AMOUNT); + assertEq(token.balanceOf(address(escrow)), 0); } function _bondExecutor() internal { diff --git a/test/EscrowNative.t.sol b/test/EscrowNative.t.sol index 1795f76..a10056f 100644 --- a/test/EscrowNative.t.sol +++ b/test/EscrowNative.t.sol @@ -13,10 +13,10 @@ contract EscrowNativeTest is Test { address public recipient; address public other; - uint256 constant EXPECTED_AMOUNT = 1 ether; - uint256 constant REWARD_AMOUNT = 0.5 ether; - uint256 constant PAYMENT_AMOUNT = 0.5 ether; - uint256 constant BOND_AMOUNT = 0.25 ether; // Half of reward amount + uint256 constant DEPOSIT_AMOUNT = 1 ether; + uint256 constant BOND_AMOUNT = 0.0025 ether; // 0.25% of deposit + bytes32 constant SALT = bytes32(uint256(77)); + bytes32 COMMITMENT; function setUp() public { deployer = makeAddr("deployer"); @@ -24,90 +24,60 @@ contract EscrowNativeTest is Test { recipient = makeAddr("recipient"); other = makeAddr("other"); + COMMITMENT = keccak256(abi.encodePacked(recipient, DEPOSIT_AMOUNT, SALT)); + // Give everyone some ETH vm.deal(deployer, 100 ether); vm.deal(executor, 100 ether); vm.deal(other, 100 ether); - // Deploy escrow with native ETH funding in constructor vm.prank(deployer); - escrow = new EscrowNative{value: REWARD_AMOUNT + PAYMENT_AMOUNT}( - recipient, EXPECTED_AMOUNT, REWARD_AMOUNT, PAYMENT_AMOUNT - ); + escrow = new EscrowNative{value: DEPOSIT_AMOUNT}(COMMITMENT); } function testConstructorNative() public view { - assertEq(escrow.currentRewardAmount(), REWARD_AMOUNT); - assertEq(escrow.currentPaymentAmount(), PAYMENT_AMOUNT); - assertEq(escrow.originalRewardAmount(), REWARD_AMOUNT); - assertEq(escrow.funded(), true); - assertEq(escrow.expectedRecipient(), recipient); - assertEq(escrow.expectedAmount(), EXPECTED_AMOUNT); - assertEq(address(escrow).balance, REWARD_AMOUNT + PAYMENT_AMOUNT); - } - - function testConstructorNativeIncorrectAmount() public { - vm.prank(deployer); - vm.expectRevert(EscrowNative.IncorrectETHAmount.selector); - new EscrowNative{value: 0.5 ether}( // Wrong amount - should be 1 ether - recipient, EXPECTED_AMOUNT, REWARD_AMOUNT, PAYMENT_AMOUNT - ); - } + assertEq(escrow.deposit(), DEPOSIT_AMOUNT); - function testConstructorNativeZeroValueWithAmounts() public { - vm.prank(deployer); - vm.expectRevert(EscrowNative.IncorrectETHAmount.selector); - new EscrowNative{value: 0}(recipient, EXPECTED_AMOUNT, REWARD_AMOUNT, PAYMENT_AMOUNT); + assertEq(escrow.funded(), true); + assertEq(escrow.commitment(), COMMITMENT); + assertEq(address(escrow).balance, DEPOSIT_AMOUNT); } function testFundNative() public { vm.startPrank(deployer); - // Create unfunded escrow - EscrowNative escrow2 = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); - - // Fund it separately - escrow2.fund{value: REWARD_AMOUNT + PAYMENT_AMOUNT}(REWARD_AMOUNT, PAYMENT_AMOUNT); + EscrowNative escrow2 = new EscrowNative(bytes32(0)); + escrow2.fund{value: DEPOSIT_AMOUNT}(COMMITMENT); vm.stopPrank(); - assertEq(escrow2.currentRewardAmount(), REWARD_AMOUNT); - assertEq(escrow2.originalRewardAmount(), REWARD_AMOUNT); - assertEq(escrow2.currentPaymentAmount(), PAYMENT_AMOUNT); + assertEq(escrow2.deposit(), DEPOSIT_AMOUNT); assertEq(escrow2.funded(), true); - assertEq(address(escrow2).balance, REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(escrow2.commitment(), COMMITMENT); + assertEq(address(escrow2).balance, DEPOSIT_AMOUNT); } - function testFundNativeZeroReward() public { + function testFundNativeZeroAmount() public { vm.startPrank(deployer); - EscrowNative unfundedEscrow = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); + EscrowNative unfundedEscrow = new EscrowNative(bytes32(0)); - vm.expectRevert(EscrowNative.ZeroRewardAmount.selector); - unfundedEscrow.fund{value: PAYMENT_AMOUNT}(0, PAYMENT_AMOUNT); + vm.expectRevert(EscrowNative.ZeroAmount.selector); + unfundedEscrow.fund{value: 0}(COMMITMENT); vm.stopPrank(); } function testFundNativeOnlyDeployer() public { vm.prank(deployer); - EscrowNative unfundedEscrow = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); + EscrowNative unfundedEscrow = new EscrowNative(bytes32(0)); vm.prank(executor); vm.expectRevert(EscrowBase.OnlyDeployer.selector); - unfundedEscrow.fund{value: REWARD_AMOUNT + PAYMENT_AMOUNT}(REWARD_AMOUNT, PAYMENT_AMOUNT); + unfundedEscrow.fund{value: DEPOSIT_AMOUNT}(COMMITMENT); } function testFundNativeAlreadyFunded() public { vm.prank(deployer); vm.expectRevert(EscrowNative.AlreadyFunded.selector); - escrow.fund{value: REWARD_AMOUNT + PAYMENT_AMOUNT}(REWARD_AMOUNT, PAYMENT_AMOUNT); - } - - function testFundNativeIncorrectAmount() public { - vm.startPrank(deployer); - EscrowNative unfundedEscrow = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); - - vm.expectRevert(EscrowNative.IncorrectETHAmount.selector); - unfundedEscrow.fund{value: 0.5 ether}(REWARD_AMOUNT, PAYMENT_AMOUNT); - vm.stopPrank(); + escrow.fund{value: DEPOSIT_AMOUNT}(COMMITMENT); } function testBondNative() public { @@ -118,12 +88,12 @@ contract EscrowNativeTest is Test { assertEq(escrow.bondAmount(), BOND_AMOUNT); assertEq(escrow.executionDeadline(), block.timestamp + 5 minutes); assertTrue(escrow.is_bonded()); - assertEq(address(escrow).balance, REWARD_AMOUNT + PAYMENT_AMOUNT + BOND_AMOUNT); + assertEq(address(escrow).balance, DEPOSIT_AMOUNT + BOND_AMOUNT); } function testBondNativeNotFunded() public { vm.prank(deployer); - EscrowNative unfundedEscrow = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); + EscrowNative unfundedEscrow = new EscrowNative(bytes32(0)); vm.prank(executor); vm.expectRevert(EscrowBase.NotFunded.selector); @@ -150,39 +120,36 @@ contract EscrowNativeTest is Test { vm.warp(block.timestamp + 6 minutes); - // After first bond fails, reward = 0.5 + 0.25 = 0.75, so minimum bond = 0.375 - uint256 updatedReward = REWARD_AMOUNT + BOND_AMOUNT; - uint256 newBondAmount = updatedReward / 2; + uint256 updatedDeposit = DEPOSIT_AMOUNT + BOND_AMOUNT; + uint256 newBondAmount = updatedDeposit / 400; vm.prank(other); escrow.bond{value: newBondAmount}(); assertEq(escrow.bondedExecutor(), other); - assertEq(escrow.currentRewardAmount(), updatedReward); + assertEq(escrow.deposit(), updatedDeposit); assertEq(escrow.bondAmount(), newBondAmount); - assertEq(escrow.totalBondsDeposited(), BOND_AMOUNT); } - function testBondNativeRequiresUpdatedRewardAmount() public { + function testBondNativeRequiresUpdatedDepositMinimum() public { _bondExecutor(); vm.warp(block.timestamp + 6 minutes); - uint256 updatedReward = REWARD_AMOUNT + BOND_AMOUNT; - uint256 minimumRequiredBond = updatedReward / 2; + uint256 updatedDeposit = DEPOSIT_AMOUNT + BOND_AMOUNT; + uint256 minimumRequiredBond = updatedDeposit / 400; vm.startPrank(other); vm.expectRevert(EscrowBase.InsufficientBond.selector); - escrow.bond{value: BOND_AMOUNT}(); + escrow.bond{value: minimumRequiredBond - 1}(); escrow.bond{value: minimumRequiredBond}(); vm.stopPrank(); - assertEq(escrow.currentRewardAmount(), updatedReward); + assertEq(escrow.deposit(), updatedDeposit); assertEq(escrow.bondAmount(), minimumRequiredBond); assertEq(escrow.bondedExecutor(), other); - assertEq(escrow.totalBondsDeposited(), BOND_AMOUNT); } function testCollectNativeRequiresProof() public { @@ -199,12 +166,12 @@ contract EscrowNativeTest is Test { vm.prank(executor); vm.expectRevert(); - escrow.collect(dummyProof, block.number - 1); + escrow.collect(dummyProof, block.number - 1, SALT); } function testCollectNativeNotFunded() public { vm.prank(deployer); - EscrowNative unfundedEscrow = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); + EscrowNative unfundedEscrow = new EscrowNative(bytes32(0)); EscrowNative.NativeTransferProof memory dummyProof = EscrowNative.NativeTransferProof({ blockHeader: hex"", @@ -217,7 +184,7 @@ contract EscrowNativeTest is Test { vm.prank(executor); vm.expectRevert(EscrowBase.NotFunded.selector); - unfundedEscrow.collect(dummyProof, block.number - 1); + unfundedEscrow.collect(dummyProof, block.number - 1, SALT); } function testCollectNativeNotBondedExecutor() public { @@ -234,7 +201,7 @@ contract EscrowNativeTest is Test { vm.prank(other); vm.expectRevert(EscrowBase.OnlyBondedExecutor.selector); - escrow.collect(dummyProof, block.number - 1); + escrow.collect(dummyProof, block.number - 1, SALT); } function testCollectNativeAfterDeadline() public { @@ -253,7 +220,7 @@ contract EscrowNativeTest is Test { vm.prank(executor); vm.expectRevert(EscrowBase.OnlyBondedExecutor.selector); - escrow.collect(dummyProof, block.number - 1); + escrow.collect(dummyProof, block.number - 1, SALT); } function testIsBondedNative() public { @@ -293,15 +260,14 @@ contract EscrowNativeTest is Test { vm.warp(block.timestamp + 6 minutes); - // After first bond fails, reward = 0.5 + 0.25 = 0.75, so minimum bond = 0.375 - uint256 updatedReward = REWARD_AMOUNT + BOND_AMOUNT; - uint256 newBondAmount = updatedReward / 2; + uint256 updatedDeposit = DEPOSIT_AMOUNT + BOND_AMOUNT; + uint256 newBondAmount = updatedDeposit / 400; vm.prank(other); escrow.bond{value: newBondAmount}(); assertEq(escrow.bondedExecutor(), other); - assertEq(escrow.currentRewardAmount(), updatedReward); + assertEq(escrow.deposit(), updatedDeposit); assertEq(escrow.bondAmount(), newBondAmount); } @@ -332,9 +298,8 @@ contract EscrowNativeTest is Test { assertTrue(escrow.cancellationRequest()); assertFalse(escrow.funded()); - assertEq(escrow.currentPaymentAmount(), 0); - assertEq(escrow.currentRewardAmount(), 0); - assertEq(deployer.balance, initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(escrow.deposit(), 0); + assertEq(deployer.balance, initialBalance + DEPOSIT_AMOUNT); } function testCancelAndWithdrawNativeOnlyDeployer() public { @@ -345,7 +310,7 @@ contract EscrowNativeTest is Test { function testCancelAndWithdrawNativeNotFunded() public { vm.prank(deployer); - EscrowNative unfundedEscrow = new EscrowNative(recipient, EXPECTED_AMOUNT, 0, 0); + EscrowNative unfundedEscrow = new EscrowNative(bytes32(0)); vm.prank(deployer); vm.expectRevert(EscrowBase.NotFunded.selector); @@ -372,7 +337,7 @@ contract EscrowNativeTest is Test { assertTrue(escrow.cancellationRequest()); assertFalse(escrow.funded()); - assertEq(deployer.balance, initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(deployer.balance, initialBalance + DEPOSIT_AMOUNT + BOND_AMOUNT); } function testCancelAndWithdrawNativePreventsRaceCondition() public { @@ -395,7 +360,7 @@ contract EscrowNativeTest is Test { assertTrue(escrow.cancellationRequest()); assertFalse(escrow.funded()); - assertEq(deployer.balance, initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); + assertEq(deployer.balance, initialBalance + DEPOSIT_AMOUNT); } function testCancelAndWithdrawNativeAfterCollectingBonds() public { @@ -411,8 +376,9 @@ contract EscrowNativeTest is Test { vm.prank(deployer); escrow.cancelAndWithdraw(); - assertEq(deployer.balance, initialBalance + REWARD_AMOUNT + PAYMENT_AMOUNT); - assertEq(address(escrow).balance, BOND_AMOUNT); + // Deployer gets back everything (deposit + seized bond) + assertEq(deployer.balance, initialBalance + DEPOSIT_AMOUNT + BOND_AMOUNT); + assertEq(address(escrow).balance, 0); } function _bondExecutor() internal { @@ -422,8 +388,6 @@ contract EscrowNativeTest is Test { } // Helper contract to test ReceiptValidator with calldata -// ReceiptValidator is already imported below for the wrapper - contract ReceiptValidatorWrapper { function validateReceiptStatus(bytes calldata receiptRlp) external pure returns (bool) { return ReceiptValidator.validateReceiptStatus(receiptRlp); @@ -437,34 +401,23 @@ contract ReceiptValidatorTest is Test { wrapper = new ReceiptValidatorWrapper(); } - // Test that successful transaction receipt (status = 1) passes validation function testValidateReceiptStatusSuccess() public view { - // EIP-1559 receipt with status = 1: type(02) + rlp([status=01, cumulativeGasUsed, logsBloom, logs]) - // Real receipt from Proof.t.sol - this has status=0x01 (success) bytes memory successReceipt = hex"02f901a801840114e0a3b9010000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000010000000000000200000000000004000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000001000000000000000000000000000f89df89b94be41a9ec942d5b52be07cc7f4d7e30e10e9b652af863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000e1a9d9c9abb872ddef70a4d108fd8fc3c7ce4dc4a0000000000000000000000000658d9c76ff358984d6436ea11ee1eda08894c818a000000000000000000000000000000000000000000000000000000000017d7840"; - // Should not revert - status byte after list prefix is 0x01 (success) bool result = wrapper.validateReceiptStatus(successReceipt); assertTrue(result); } - // Test that failed transaction receipt (status = 0) fails validation function testValidateReceiptStatusFailure() public { - // Same receipt but with status=0x80 (empty = 0 = failed) instead of 0x01 - // Changed byte at position 5 (after 02 f9 01 a8) from 01 to 80 bytes memory failedReceipt = hex"02f901a880840114e0a3b9010000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000010000000000000200000000000004000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000001000000000000000000000000000f89df89b94be41a9ec942d5b52be07cc7f4d7e30e10e9b652af863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000e1a9d9c9abb872ddef70a4d108fd8fc3c7ce4dc4a0000000000000000000000000658d9c76ff358984d6436ea11ee1eda08894c818a000000000000000000000000000000000000000000000000000000000017d7840"; - // Should revert with "Receipt status is not success" vm.expectRevert(ReceiptValidator.ReceiptStatusNotSuccess.selector); wrapper.validateReceiptStatus(failedReceipt); } - // Test legacy receipt format (no type prefix) function testValidateReceiptStatusLegacySuccess() public view { - // Legacy receipt (no type prefix) with status = 1 - // Same structure but without the 02 type prefix bytes memory legacySuccessReceipt = hex"f901a801840114e0a3b9010000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000010000000000000200000000000004000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000001000000000000000000000000000f89df89b94be41a9ec942d5b52be07cc7f4d7e30e10e9b652af863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000e1a9d9c9abb872ddef70a4d108fd8fc3c7ce4dc4a0000000000000000000000000658d9c76ff358984d6436ea11ee1eda08894c818a000000000000000000000000000000000000000000000000000000000017d7840"; @@ -472,9 +425,7 @@ contract ReceiptValidatorTest is Test { assertTrue(result); } - // Test legacy receipt format with failed status function testValidateReceiptStatusLegacyFailure() public { - // Legacy receipt (no type prefix) with status = 0 (0x80 = empty) bytes memory legacyFailedReceipt = hex"f901a880840114e0a3b9010000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000010000000000000200000000000004000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000001000000000000000000000000000f89df89b94be41a9ec942d5b52be07cc7f4d7e30e10e9b652af863a0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa0000000000000000000000000e1a9d9c9abb872ddef70a4d108fd8fc3c7ce4dc4a0000000000000000000000000658d9c76ff358984d6436ea11ee1eda08894c818a000000000000000000000000000000000000000000000000000000000017d7840"; diff --git a/test/Proof.t.sol b/test/Proof.t.sol index f46e25f..61ba10c 100644 --- a/test/Proof.t.sol +++ b/test/Proof.t.sol @@ -45,9 +45,8 @@ contract EscrowMPTTest is Test { address public deployer; uint256 constant TRANSFER_AMOUNT = 0x17d7840; // From: logs[0].data - uint256 constant REWARD_AMOUNT = 500e18; - uint256 constant PAYMENT_AMOUNT = 500e18; - uint256 constant BOND_AMOUNT = 250e18; + uint256 constant DEPOSIT_AMOUNT = 1000e18; + uint256 constant BOND_AMOUNT = 2.5e18; // 0.25% of deposit uint256 constant TARGET_BLOCK_NUMBER = 9084468; // From: block_number bytes32 constant TARGET_BLOCK_HASH = 0x490a3fc0b0c2170b55ca18ce6c73fc1af50ebe0931b525a3510c048f2b428617; // From: block_hash @@ -63,17 +62,18 @@ contract EscrowMPTTest is Test { address proofRecipient = address(0x658D9C76ff358984D6436eA11ee1eda08894C818); // From: logs[0].topics[2] (to address) address proofExecutor = address(0xE1A9d9C9abB872dDEF70A4d108Fd8fc3c7cE4dC4); // From: logs[0].topics[1] (from address) + bytes32 salt = bytes32(uint256(123)); + bytes32 commitmentHash = keccak256(abi.encodePacked(proofRecipient, proofTokenAddress, TRANSFER_AMOUNT, salt)); + vm.startPrank(deployer); - // Mock the token transfers for constructor funding + // Mock the token transfers for funding vm.mockCall(proofTokenAddress, abi.encodeWithSelector(IERC20.transferFrom.selector), abi.encode(true)); - EscrowERC20 proofEscrow = - new EscrowERC20(proofTokenAddress, proofRecipient, TRANSFER_AMOUNT, REWARD_AMOUNT, PAYMENT_AMOUNT); + EscrowERC20 proofEscrow = new EscrowERC20(proofTokenAddress, DEPOSIT_AMOUNT, commitmentHash); vm.stopPrank(); console.log("Proof escrow address:", address(proofEscrow)); - console.log("Expected amount in proof escrow:", proofEscrow.expectedAmount()); // Mock transfers for bonding and collect payout vm.mockCall(proofTokenAddress, abi.encodeWithSelector(IERC20.transferFrom.selector), abi.encode(true)); @@ -96,7 +96,7 @@ contract EscrowMPTTest is Test { }); vm.prank(proofExecutor); - proofEscrow.collect(proof, TARGET_BLOCK_NUMBER); + proofEscrow.collect(proof, TARGET_BLOCK_NUMBER, salt); console.log("Proved transfer from:", proofExecutor); console.log("To recipient:", proofRecipient); @@ -118,30 +118,22 @@ contract EscrowMPTTest is Test { address proofRecipient = address(0x3C86ee0028788FCeA3d1c0C486D3794254ADcAFC); uint256 expectedAmount = 1000000000000000; // 0.001 ETH + bytes32 salt = bytes32(uint256(456)); + bytes32 commitmentHash = keccak256(abi.encodePacked(proofRecipient, expectedAmount, salt)); + vm.deal(deployer, 10 ether); vm.startPrank(deployer); - // Create native ETH escrow - // Pass 0, 0 to defer funding (constructor auto-calls fund() if non-zero) - EscrowNative proofEscrow = new EscrowNative( - proofRecipient, - expectedAmount, - 0, // reward - defer to fund - 0 // payment - defer to fund - ); - - // Fund the escrow with ETH - proofEscrow.fund{value: 1 ether}(0.5 ether, 0.5 ether); + EscrowNative proofEscrow = new EscrowNative{value: 1 ether}(commitmentHash); vm.stopPrank(); console.log("Native proof escrow address:", address(proofEscrow)); - console.log("Expected amount:", proofEscrow.expectedAmount()); // Bond as executor (any address can be executor for native transfers) address executor = makeAddr("executor"); vm.deal(executor, 1 ether); vm.prank(executor); - proofEscrow.bond{value: 0.25 ether}(); + proofEscrow.bond{value: 0.0025 ether}(); vm.roll(targetBlockNumber + 10); vm.setBlockhash(targetBlockNumber, targetBlockHash); @@ -152,14 +144,13 @@ contract EscrowMPTTest is Test { blockHeader: hex"f90281a0397210743fb9da13aeccc4aabe2661bfa32141d4f29f6e7d19f9b687e9ed528aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347944df6eb2ec570b58cc64f540247a8adfa11f1cf63a00e7e627445ec722103ef8589db019ed664c2b60135149c2aac77592cbc73f2e1a0de2ddb3e41cd5a8ea1ba0ca1edb40173c290f986b2b90b2b04e57dbd1188d3b0a049342d87846703e91c3996fd651fe201e2b0438b89e72c306c91f5553014b47eb9010090296205660011a20c500a44024053005a0802482220050020a0304116423100008024420a000010a2c3404810001a0644040e0134882e10200100101245bc0010000049088843082044248b042806ac0001002820e4800802030044801102000400030a82840a58368401202031080042020094c424804080060036004900c43840001010366032620903c140000924210010030001a4018424106000820c004010b2260800040840089229d08400008002008c800c2490d17081030041a0802a0401220047000085420305080403820482008904200321005021499e1660400c120d400080000790c2d10220081908551000084d2040400c103c0a2821962480839a3db2840393870083bc0cee846973d94c95657269676f6e2d332e332e332d3762633364366431a0da7f921ea19c9df08304a2f4bca0af0a03ac9460ce65f0fe3bfa2d8ca2fb41b0880000000000000000843e642ba6a0d1a30c37e5696198b78a5f5acbb4695000eadc4e1c0c418ec2d64084e733c60c830e0000840c845646a026a71dc0fcb6c3cc98c6cea6459e4474085101a08c5c47b44b5297c2067ec2e9a0e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", transactionRlp: hex"02f87483aa36a703840349764384522407e2825208943c86ee0028788fcea3d1c0c486d3794254adcafc87038d7ea4c6800080c001a0bf78958050d25c0a20b23c53fffe328af09621b4aee42ea533e7dc361c89e80fa010a717301aa6292f8662f42c8f813e6f469e7ff87db37fe92afd0bb5849dd078", txProofNodes: hex"f9030ab893f891a04df2041d420fa3d55f34a8746442bb2ed115d53d152bae9a1e06c87a96495b26a096914abc2f5dedf4238ec649c5c802d4b845f3626da32c55a6bdfd0319ed674ea0c34cb53df6c5f6bd768894697e2a863ab3ade892f1014b73e739f4b63a5f3c1e8080808080a071bb16c3a3fa6ada920324ef40f4d5a36428f1430e14cae9a3bd98045ecf47ec8080808080808080b901f4f901f1a02aa618e5267c0753bd259e9012e392b7051d7350d437e3f70b97896f9eddd0bca037054656be02df06093636df195366c503730bf8dbec5c7322865ea8f0eaf4f0a0a258f45df5fa79f1f445ff6c0d6ffcc3ef5722ece8641a8bbb680a5765aea922a0a352b719cd5389335fff522878e047447dc1a2309e11ae5981a11ddc0b77da6da04d7f26ce3509ea037fa9b90188fd386851dbd9188fc55bd0fdf9c4b80c5f9379a0757f4d110e8958bd48fd1c674f7c1640d29d300ab2fdd6e5841dfbf2c59eb897a05ca297ed486e83631116a2e3a4b4729e67f8a5c87b3540b2e9f5a6827ca2f794a0606e7d8f4a1147546b12bf57b8e5dc9dd3b7e452cdec901410c4fe1ea9702a8ea03d03afcdf2972ac57a4751773cc002788967548f2b865832f911523eb5653c9ea087e14e540fa705597c4168e5903968cf5c76dd99c59ff1a3560166951fe44f62a0be5d49ad02271c9a68eb24f463b6b2fc985fc907f2de62c9ea9cdd1996d2cb3ca025e85233691d941a8bee020fe80354f21407625db38745d915e22bbd870bb451a0d3519df5120c28feeeb18c727bf8a013648308f32820558bb6fb2be4a1e89f16a0f87abef5804462906a643dd6a5fb7d0c84e9baa58a019b7627ac12219a49b145a0db699bee4861ee642e3088dc28ef8a9d1fdb5a5eb7f9bb8ad5f28f38717cd0698080b87cf87a20b87702f87483aa36a703840349764384522407e2825208943c86ee0028788fcea3d1c0c486d3794254adcafc87038d7ea4c6800080c001a0bf78958050d25c0a20b23c53fffe328af09621b4aee42ea533e7dc361c89e80fa010a717301aa6292f8662f42c8f813e6f469e7ff87db37fe92afd0bb5849dd078", - // Receipt with status=1 (success), cumulativeGasUsed=0x5b7459, empty logsBloom, no logs receiptRlp: hex"02f9010901835b7459b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", receiptProofNodes: hex"f903a3b893f891a0e0c7e93b2cfe84b1a304cbe04e2f8c7ebdd2e8ee1582f5d94b2e15e5c9aa1b27a0c4d35ea3c917ec2fed880ed796213ef8822a97447e7c8238f47509b9aca8368da018bb3efb1044af329d0961b445ae94abe7a92a6ac68b9e0093254fddf86b3cc88080808080a09f0fd06810e1b9d3a06b3c59c790638ce40fb5ce3a66c5d942be4f1c0fb3c0c18080808080808080b901f4f901f1a00de026cdb9ea8e5c07dae1730fbd9f61eee75dd8bc9dd5f31437ad1b7fc3f02da067c0d5dad7217228e20426263685dcba31315a795777794315cac047d67a713aa05b2e03189113dbaf785f3ae763e238cde070c6f6ad730f19d295a31c49c07e45a06a7f4d0e8209eb6b93be36c6fe3881b09df8b64cb68dd22dad37515bae3bc4bda03c398130be50e0b5dd00ad97fff19231418d76bc17cc419fa765a72acb0ed352a02457e909e45da5bfff302723ae0081187abc25152a72ff1e895a47ee6bd041d7a038a9c00a70d58d4a32d691a85a9318fa0aa17976345a38a2a8d328938b05d4b0a08b91dee2fe71c9d877cdbe46d39cccbcff2fdbff2e19f2a89c7fe05899413a60a0fc93ce3146520c8a8706fa447ca39160df85c6d7fa17d4081e4d529c3a2a04eca05a1ce05e0164d3a110456c1d681e4b555bc6725067864672249cd035d9a8aba6a0d826506d25e5d97aa87dade82553a96505274f32592de19b5b166fa6c0dbde40a0919517c55c26498649fab415b98c011ab984a3e0e491449c82a641cd6da24eb5a043c990e8d31af4bb52502821b2ba84cc57365f62aef6452d610a503e26c1f747a0172f2c433164bd24b87ec08d7f55b788eb060e2570bbc926b22ed7fe689c4acca0fbb729496c6a787dc0d0b94ce7a761003cbf424575c977b71edf6757884ea2308080b90114f9011120b9010d02f9010901835b7459b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", path: hex"22" // tx index 34 = 0x22 }); vm.prank(executor); - proofEscrow.collect(proof, targetBlockNumber); + proofEscrow.collect(proof, targetBlockNumber, salt); console.log("Proved native ETH transfer"); console.log("To recipient:", proofRecipient); diff --git a/test/Tempo.t.sol b/test/Tempo.t.sol index 91933a6..cb2c993 100644 --- a/test/Tempo.t.sol +++ b/test/Tempo.t.sol @@ -6,16 +6,12 @@ import {EscrowERC20, IERC20} from "../src/EscrowERC20.sol"; import {ReceiptValidator} from "../src/ReceiptValidator.sol"; contract ReceiptValidatorWrapper { - function validateTransferInReceipt( - bytes calldata receiptRlp, - uint256 logIndex, - address tokenContract, - address toAddress, - uint256 expectedAmount - ) external pure returns (bool) { - return ReceiptValidator.validateTransferInReceipt( - receiptRlp, logIndex, tokenContract, toAddress, expectedAmount - ); + function extractTransferFromReceipt(bytes calldata receiptRlp, uint256 logIndex) + external + pure + returns (address token, address recipient, uint256 amount) + { + return ReceiptValidator.extractTransferFromReceipt(receiptRlp, logIndex); } } @@ -70,41 +66,35 @@ contract TempoTest is Test { assertEq(uint8(RECEIPT_RLP[0]), 0x76); } - function testValidateTransfer() public view { - assertTrue(validator.validateTransferInReceipt(RECEIPT_RLP, 0, TOKEN, TO_ADDRESS, AMOUNT)); - } - - function testValidateFeeTransfer() public view { - assertTrue(validator.validateTransferInReceipt(RECEIPT_RLP, 1, TOKEN, FEE_RECIPIENT, FEE_AMOUNT)); - } - - function testRejectWrongAmount() public { - vm.expectRevert(ReceiptValidator.AmountMismatch.selector); - validator.validateTransferInReceipt(RECEIPT_RLP, 0, TOKEN, TO_ADDRESS, AMOUNT + 1); - } - - function testRejectWrongRecipient() public { - vm.expectRevert(ReceiptValidator.ToAddressMismatch.selector); - validator.validateTransferInReceipt(RECEIPT_RLP, 0, TOKEN, address(0xdead), AMOUNT); + function testExtractTransfer() public view { + (address token, address recipient, uint256 amount) = validator.extractTransferFromReceipt(RECEIPT_RLP, 0); + assertEq(token, TOKEN); + assertEq(recipient, TO_ADDRESS); + assertEq(amount, AMOUNT); } - function testRejectWrongToken() public { - vm.expectRevert(ReceiptValidator.WrongTokenContract.selector); - validator.validateTransferInReceipt(RECEIPT_RLP, 0, address(0xbeef), TO_ADDRESS, AMOUNT); + function testExtractFeeTransfer() public view { + (address token, address recipient, uint256 amount) = validator.extractTransferFromReceipt(RECEIPT_RLP, 1); + assertEq(token, TOKEN); + assertEq(recipient, FEE_RECIPIENT); + assertEq(amount, FEE_AMOUNT); } function testEndToEndProof() public { address deployer = makeAddr("deployer"); + bytes32 salt = bytes32(uint256(42)); + bytes32 commitmentHash = keccak256(abi.encodePacked(TO_ADDRESS, TOKEN, AMOUNT, salt)); vm.mockCall(TOKEN, abi.encodeWithSelector(IERC20.transferFrom.selector), abi.encode(true)); vm.mockCall(TOKEN, abi.encodeWithSelector(IERC20.transfer.selector), abi.encode(true)); vm.mockCall(TOKEN, abi.encodeWithSelector(IERC20.send.selector), abi.encode(true)); - vm.prank(deployer); - EscrowERC20 escrow = new EscrowERC20(TOKEN, TO_ADDRESS, AMOUNT, 500e18, 500e18); + vm.startPrank(deployer); + EscrowERC20 escrow = new EscrowERC20(TOKEN, 1000e18, commitmentHash); + vm.stopPrank(); vm.prank(FROM_ADDRESS); - escrow.bond(250e18); + escrow.bond(2.5e18); vm.roll(BLOCK_NUMBER + 10); vm.setBlockhash(BLOCK_NUMBER, BLOCK_HASH); @@ -118,7 +108,8 @@ contract TempoTest is Test { receiptPath: RECEIPT_PATH, logIndex: 0 }), - BLOCK_NUMBER + BLOCK_NUMBER, + salt ); } }