diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 24f594bc7..a123792e3 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x6080604052600436106102fb575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd14610987578063f2fde38b146109a6578063fb1e8b04146109c5575f80fd5b8063ddd8a3dc14610934578063de8b303514610953578063dff7827e14610972575f80fd5b8063ce5db8d6116100b7578063ce5db8d6146108ed578063d279c19114610902578063d63b354914610921575f80fd5b8063b3e0a5091461089c578063bedb86fb146108bb578063cd4edc69146108da575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610849578063b34844251461085e578063b35dac4e1461087d575f80fd5b8063a479265d146107ea578063a4f209b0146107ff578063abc8d68d1461081e575f80fd5b8063910129d41161016c578063910129d41461076c57806397fc007c1461079d578063a415d8dc146107bc575f80fd5b806388b1ea09146106865780638da5cb5b1461069f5780638f1d3776146106bc575f80fd5b80632571098d116102515780635ef7a94a116101fc5780636c578c1d116101d75780636c578c1d14610634578063715018a614610653578063728cdbca14610667575f80fd5b80635ef7a94a1461055d5780635f77cf1d146105bd57806368589dfa14610609575f80fd5b80633e001b661161022c5780633e001b661461051257806357e0af6c146105275780635c975abb14610546575f80fd5b80632571098d146104915780632b7ac3f3146104bc5780633b70c18a146104f3575f80fd5b8063121dcd50116102b157806318af3b2b1161028c57806318af3b2b1461041757806321e2f9e0146104475780632362f03e14610466575f80fd5b8063121dcd50146103ce57806313361101146103e357806318463fb014610402575f80fd5b80630ceb6780116102e15780630ceb67801461036c57806310d445831461038d578063116a1f42146103ac575f80fd5b806304d7721514610306578063059def6114610349575f80fd5b3661030257005b5f80fd5b348015610311575f80fd5b50610334610320366004614046565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610354575f80fd5b5061035e609d5481565b604051908152602001610340565b348015610377575f80fd5b5061038b610386366004614078565b6109da565b005b348015610398575f80fd5b5061038b6103a73660046140d6565b610aac565b3480156103b7575f80fd5b506103346103c6366004614046565b609d54101590565b3480156103d9575f80fd5b5061035e609e5481565b3480156103ee575f80fd5b5061038b6103fd36600461411e565b610e05565b34801561040d575f80fd5b5061035e60a75481565b348015610422575f80fd5b50610334610431366004614046565b5f90815260a26020526040902060010154421090565b348015610452575f80fd5b50610334610461366004614046565b6112fa565b348015610471575f80fd5b5061035e610480366004614046565b60a16020525f908152604090205481565b34801561049c575f80fd5b5061035e6104ab366004614046565b60a06020525f908152604090205481565b3480156104c7575f80fd5b50609c546104db906001600160a01b031681565b6040516001600160a01b039091168152602001610340565b3480156104fe575f80fd5b50609b546104db906001600160a01b031681565b34801561051d575f80fd5b5061035e60aa5481565b348015610532575f80fd5b5061038b610541366004614046565b611328565b348015610551575f80fd5b5060655460ff16610334565b348015610568575f80fd5b5061059d610577366004614046565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610340565b3480156105c8575f80fd5b506105f07f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610340565b348015610614575f80fd5b5061035e610623366004614046565b60ab6020525f908152604090205481565b34801561063f575f80fd5b5061038b61064e366004614078565b6113d3565b34801561065e575f80fd5b5061038b611490565b348015610672575f80fd5b5061038b61068136600461415d565b6114a3565b348015610691575f80fd5b5060a6546103349060ff1681565b3480156106aa575f80fd5b506033546001600160a01b03166104db565b3480156106c7575f80fd5b506107286106d6366004614046565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610340565b348015610777575f80fd5b50610334610786366004614046565b5f90815260a4602052604090206003015460ff1690565b3480156107a8575f80fd5b5061038b6107b7366004614078565b6117e6565b3480156107c7575f80fd5b506103346107d6366004614078565b609f6020525f908152604090205460ff1681565b3480156107f5575f80fd5b5061035e60995481565b34801561080a575f80fd5b5061038b610819366004614046565b6118c9565b348015610829575f80fd5b5061035e610838366004614078565b60a56020525f908152604090205481565b348015610854575f80fd5b5061035e60a85481565b348015610869575f80fd5b5061038b6108783660046141b8565b611979565b348015610888575f80fd5b5061038b610897366004614078565b611bbe565b3480156108a7575f80fd5b5061038b6108b636600461411e565b611c17565b3480156108c6575f80fd5b5061038b6108d536600461422c565b611f19565b61038b6108e8366004614247565b612074565b3480156108f8575f80fd5b5061035e60985481565b34801561090d575f80fd5b5061038b61091c366004614078565b612640565b61038b61092f36600461427d565b6126ff565b34801561093f575f80fd5b506097546104db906001600160a01b031681565b34801561095e575f80fd5b5061033461096d366004614046565b613029565b34801561097d575f80fd5b5061035e609a5481565b348015610992575f80fd5b5061038b6109a1366004614046565b613073565b3480156109b1575f80fd5b5061038b6109c0366004614078565b613116565b3480156109d0575f80fd5b5061035e60a95481565b6109e26131a3565b6001600160a01b0381165f908152609f602052604090205460ff1615610a4f5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ab46131a3565b5f8111610b035760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a46565b5f80610b0f85856131fd565b915091505f610b22836001015160c01c90565b5f81815260a160205260409020549091508214610b815760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b5f60a181610b8f8785614317565b81526020019081526020015f205414610c0f5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a46565b609d548111610c865760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a46565b610c9160018261432a565b609e555b8315610dfd57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610cdd81613029565b15610d38575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d28908490614317565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610db5575060a85481145b15610dbf575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610c95575b505050505050565b60a85415610e555760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b610e5d613218565b5f80610e6984846131fd565b915091505f610e7c836001015160c01c90565b5f81815260a160205260409020549091508214610edb5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b610ee4816112fa565b610f305760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a46565b610f3981613029565b15610f865760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a46565b5f81815260a4602052604090206003015460ff1615610fe75760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a46565b5f81815260a260205260409020600101544210156110475760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a46565b605983015160a05f61105a60018561432a565b81526020019081526020015f2054146110b55760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a46565b5f81815260a06020526040902054156111105760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a46565b80609d54600101146111645760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a46565b609d819055600160a35f611179866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111c660f98401601185015160c01c600986015160c01c61326b565b60a25f6111d460018461432a565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061120d908461432a565b81526020019081526020015f205f905560a45f60018361122d919061432a565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6112d6866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061132257505f82815260a1602052604090205415155b92915050565b6113306131a3565b5f8111801561134157506099548114155b61138d5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a46565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b6113db6131a3565b6001600160a01b0381165f908152609f602052604090205460ff166114425760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a46565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610aa1565b6114986131a3565b6114a15f613334565b565b5f54610100900460ff16158080156114c157505f54600160ff909116105b806114da5750303b1580156114da57505f5460ff166001145b61154c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a46565b5f805460ff19166001179055801561158a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03861615806115a757506001600160a01b038516155b156115de576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166116345760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a46565b61163c61339d565b611644613421565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156117dd575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6117ee6131a3565b6001600160a01b038116158015906118145750609c546001600160a01b03828116911614155b6118605760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a46565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6118d16131a3565b5f811180156118e1575060648111155b80156118ef575060a9548114155b61193b5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a46565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016113c7565b60a854156119c95760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b6119d1613218565b5f806119dd86866131fd565b915091505f6119f0836001015160c01c90565b5f81815260a160205260409020549091508214611a4f5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b611a5881613029565b611aa45760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a46565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291611afd91614317565b11611b73575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611b6e918391906134a5565b6117dd565b611b7e838686613601565b6117dd81336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506137b4565b611bc66131a3565b60aa80545f909155611bd88282613880565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016113c7565b611c1f6131a3565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415611c965760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a46565b5f80611ca284846131fd565b915091505f611cb5836001015160c01c90565b90505f611cc3846079015190565b905080611d125760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a46565b600984015160c01c15611d675760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a46565b5f611d73856019015190565b03611dc05760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a46565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014611dec856039015190565b14611e395760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a46565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b611f216131a3565b801561204257611f2f61392b565b60a65460ff16156120015760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091611f83908490614317565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b61204a613985565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612024565b50565b335f908152609f602052604090205460ff166120d25760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a46565b60a854156121225760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b61212a613218565b60a65460ff161561217d5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a46565b8167ffffffffffffffff16609d54106121d85760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a46565b67ffffffffffffffff82165f90815260a16020526040902054811461223f5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b6122528267ffffffffffffffff166112fa565b61229e5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a46565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b0316156123195760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a46565b67ffffffffffffffff82165f90815260a2602052604090206001015442106123a95760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a46565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241d919061433d565b34101561246c5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a46565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516125be91815260200190565b60405180910390a35f609d5460016125d69190614317565b90505b609e54811161262e578267ffffffffffffffff16811461261c576099545f82815260a2602052604081206001018054909190612616908490614317565b90915550505b8061262681614354565b9150506125d9565b505060a6805460ff1916600117905550565b335f90815260a560205260408120549081900361269f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a46565b335f90815260a560205260408120556126b88282613880565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516126f391815260200190565b60405180910390a25050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561276b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278f919061438b565b6127db5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a46565b60a8541561282b5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b612833613218565b61284060208301836143a6565b60ff16156128905760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a46565b5f61289e60408401846143c6565b915050806128ee5760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a46565b608083013561293f5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a46565b60a08301356129905760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a46565b5f806129a76129a260208701876143c6565b6131fd565b915091505f6129ba836001015160c01c90565b90505f60a1816129cb846001614317565b81526020019081526020015f205414612a265760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a46565b609e548114612a775760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a46565b5f81815260a160205260409020548214612ad35760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a46565b5f81815260ab6020526040902054608087013514612b335760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a46565b5f612b42846011015160c01c90565b90505f8080612ba1612b5760408c018c6143c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150612b9c905060608f018f6143c6565b6139be565b948501949384019392509050612bba60608b018b6143c6565b905061010060ff85010460200214612c145760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a46565b600194909401935f804915612c2a575f49612c4c565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f612c5c60608d018d6143c6565b612c68915060f9614317565b90506040519850602081028901604052612c96898d5f016020810190612c8e91906143a6565b60ff16613b3f565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a0152612d0389612ce460208e018e6143c6565b604051612cf2929190614427565b604051809103902060b99190910152565b60d98901889052612d2089612d1b60608f018f6143c6565b613b46565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff1615612d865760a7545f90815260a460205260409020600201546099544291612d7991614317565b612d83919061432a565b90505b60405180608001604052804281526020018260985442612da69190614317565b612db09190614317565b8152602001612e018f8060400190612dc891906143c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613b5292505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612e75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e99919061433d565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c3590612f0190612efb908f018f6143c6565b5f613ba9565b5f8e8060400190612f1291906143c6565b6040518663ffffffff1660e01b8152600401612f3295949392919061447d565b602060405180830381865afa158015612f4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f71919061438b565b612fe35760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a46565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113225750505f90815260a46020526040902060030154610100900460ff161590565b61307b6131a3565b5f8111801561308c57506098548114155b6130d85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a46565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016113c7565b61311e6131a3565b6001600160a01b03811661319a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a46565b61207181613334565b6033546001600160a01b031633146114a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a46565b5f805f61320a8585613bfd565b812090969095509350505050565b60655460ff16156114a15760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a46565b805f0361327757505050565b8082035f805b83811015610dfd5761010081850381111561329757508084035b8651609b546040517f55f613ce0000000000000000000000000000000000000000000000000000000081526004810187905260248101849052604481018390526020909901989194506001600160a01b0316906355f613ce906064015f604051808303815f87803b15801561330a575f80fd5b505af115801561331c573d5f803e3d5ffd5b5050505061010084019350506101008101905061327d565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166134195760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6114a1613cd4565b5f54610100900460ff1661349d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6114a1613d5c565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613529573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354d919061433d565b5f86815260a4602052604090206001015490915061356c908290614317565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906135ab908490614317565b90915550506040516135be9084906144f0565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8061364e5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a46565b5f61365d846001015160c01c90565b90505f61366b856039015190565b90505f7f000000000000000000000000000000000000000000000000000000000000000061369a876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a84861375c885160f81c90565b858888866040518663ffffffff1660e01b815260040161378095949392919061451c565b5f6040518083038186803b158015613796575f80fd5b505afa1580156137a8573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a9549091906064906137d8908461454d565b6137e29190614564565b90506137ee818361432a565b60aa5f8282546137fe9190614317565b90915550506001600160a01b0384165f90815260a560205260408120805483929061382a908490614317565b909155505060405161383d9084906144f0565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613927575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146138cf576040519150601f19603f3d011682016040523d82523d5f602084013e6138d4565b606091505b50509050806139255760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a46565b505b5050565b613933613218565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586139683390565b6040516001600160a01b03909116815260200160405180910390a1565b61398d613de1565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613968565b60405185515f918291602089019190819084906139dc908590613e33565b90506002840193505f5b81811015613a6057603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613a36603c8361454d565b613a409087614317565b90505f613a5182603a015160f01c90565b979097019650506001016139e6565b506020850282016040525b8015613b2b575f613a8085603a015160f01c90565b9050613a9083828d8d8d8d613ec8565b92505f613aa1866038015160f01c90565b905081811015613af35760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a46565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613a6b565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f613b6d828651613e33565b90505f5b613b7c60018361432a565b811015613b9257603c9390930192600101613b71565b505f613b9f845160c01c90565b9695505050505050565b60605f80808080613bbc888a018a614689565b9550955095509550955050818710613bda579450613bf69350505050565b838710613bee578295505050505050613bf6565b509293505050505b9392505050565b5f8160f9811015613c505760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a46565b6040519150808483378082016040525f613c6e836009015160c01c90565b905061010060ff82010460200260f9018214613ccc5760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a46565b509250929050565b5f54610100900460ff16613d505760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6065805460ff19169055565b5f54610100900460ff16613dd85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6114a133613334565b60655460ff166114a15760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a46565b5f613e3f835160f01c90565b9050805f03613e7a576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e85603c8261454d565b613e90906002614317565b8214611322576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03613ed7575085613b9f565b609b546001600160a01b03165f80805b89811015613fbd5760ff89169150600889901c811580613f05575082155b15613f14578060200288013593505b600184841c165f03613fac576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f906001600160a01b0387169063ae453cd590602401602060405180830381865afa158015613f7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fa2919061433d565b8d52506020909b019a5b506001988901989788019701613ee7565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c600116156140385760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610a46565b509798975050505050505050565b5f60208284031215614056575f80fd5b5035919050565b80356001600160a01b0381168114614073575f80fd5b919050565b5f60208284031215614088575f80fd5b613bf68261405d565b5f8083601f8401126140a1575f80fd5b50813567ffffffffffffffff8111156140b8575f80fd5b6020830191508360208285010111156140cf575f80fd5b9250929050565b5f805f604084860312156140e8575f80fd5b833567ffffffffffffffff8111156140fe575f80fd5b61410a86828701614091565b909790965060209590950135949350505050565b5f806020838503121561412f575f80fd5b823567ffffffffffffffff811115614145575f80fd5b61415185828601614091565b90969095509350505050565b5f805f805f8060c08789031215614172575f80fd5b61417b8761405d565b95506141896020880161405d565b94506141976040880161405d565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156141cb575f80fd5b843567ffffffffffffffff808211156141e2575f80fd5b6141ee88838901614091565b90965094506020870135915080821115614206575f80fd5b5061421387828801614091565b95989497509550505050565b8015158114612071575f80fd5b5f6020828403121561423c575f80fd5b8135613bf68161421f565b5f8060408385031215614258575f80fd5b823567ffffffffffffffff8116811461426f575f80fd5b946020939093013593505050565b5f806040838503121561428e575f80fd5b823567ffffffffffffffff808211156142a5575f80fd5b9084019060e082870312156142b8575f80fd5b909250602084013590808211156142cd575f80fd5b508301606081860312156142df575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611322576113226142ea565b81810381811115611322576113226142ea565b5f6020828403121561434d575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614384576143846142ea565b5060010190565b5f6020828403121561439b575f80fd5b8151613bf68161421f565b5f602082840312156143b6575f80fd5b813560ff81168114613bf6575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126143f9575f80fd5b83018035915067ffffffffffffffff821115614413575f80fd5b6020019150368190038213156140cf575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156144c75784516001600160a01b0316835293830193918301916001016144a2565b505087604086015284810360608601526144e2818789614436565b9a9950505050505050505050565b5f82515f5b8181101561450f57602081860181015185830152016144f5565b505f920191825250919050565b858152846020820152608060408201525f61453b608083018587614436565b90508260608301529695505050505050565b8082028115828204841417611322576113226142ea565b5f82614597577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145d8575f80fd5b8135602067ffffffffffffffff808311156145f5576145f561459c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156146385761463861459c565b6040529384526020818701810194908101925087851115614657575f80fd5b6020870191505b8482101561467e5761466f8261405d565b8352918301919083019061465e565b979650505050505050565b5f805f805f8060c0878903121561469e575f80fd5b86359550602087013567ffffffffffffffff808211156146bc575f80fd5b6146c88a838b016145c9565b96506040890135955060608901359150808211156146e4575f80fd5b6146f08a838b016145c9565b94506080890135935060a089013591508082111561470c575f80fd5b5061471989828a016145c9565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610306575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063ce5db8d6116100b7578063ce5db8d614610917578063d279c1911461092c578063d63b35491461094b575f80fd5b8063b3e0a509146108c6578063bedb86fb146108e5578063cd4edc6914610904575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610873578063b348442514610888578063b35dac4e146108a7575f80fd5b8063a479265d14610814578063a4f209b014610829578063abc8d68d14610848575f80fd5b8063910129d41161016c578063910129d41461079657806397fc007c146107c7578063a415d8dc146107e6575f80fd5b806388b1ea09146106b05780638da5cb5b146106c95780638f1d3776146106e6575f80fd5b80632b7ac3f3116102515780635f77cf1d116101fc5780636c578c1d116101d75780636c578c1d1461065e578063715018a61461067d578063728cdbca14610691575f80fd5b80635f77cf1d146105c8578063612672901461061457806368589dfa14610633575f80fd5b806357e0af6c1161022c57806357e0af6c146105325780635c975abb146105515780635ef7a94a14610568575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046142d3565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614305565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614363565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046142d3565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046143ab565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046142d3565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046142d3565b611324565b34801561047c575f80fd5b5061036961048b3660046142d3565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046142d3565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b34801561053d575f80fd5b5061039661054c3660046142d3565b611352565b34801561055c575f80fd5b5060655460ff1661033f565b348015610573575f80fd5b506105a86105823660046142d3565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105d3575f80fd5b506105fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b34801561061f575f80fd5b5061039661062e3660046142d3565b6113fd565b34801561063e575f80fd5b5061036961064d3660046142d3565b60ab6020525f908152604090205481565b348015610669575f80fd5b50610396610678366004614305565b611612565b348015610688575f80fd5b506103966116cf565b34801561069c575f80fd5b506103966106ab3660046143ea565b6116e2565b3480156106bb575f80fd5b5060a65461033f9060ff1681565b3480156106d4575f80fd5b506033546001600160a01b03166104e6565b3480156106f1575f80fd5b506107526107003660046142d3565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107a1575f80fd5b5061033f6107b03660046142d3565b5f90815260a4602052604090206003015460ff1690565b3480156107d2575f80fd5b506103966107e1366004614305565b611a25565b3480156107f1575f80fd5b5061033f610800366004614305565b609f6020525f908152604090205460ff1681565b34801561081f575f80fd5b5061036960995481565b348015610834575f80fd5b506103966108433660046142d3565b611b08565b348015610853575f80fd5b50610369610862366004614305565b60a56020525f908152604090205481565b34801561087e575f80fd5b5061036960a85481565b348015610893575f80fd5b506103966108a2366004614445565b611bb8565b3480156108b2575f80fd5b506103966108c1366004614305565b611dfd565b3480156108d1575f80fd5b506103966108e03660046143ab565b611e56565b3480156108f0575f80fd5b506103966108ff3660046144b9565b6121a6565b6103966109123660046144d4565b612301565b348015610922575f80fd5b5061036960985481565b348015610937575f80fd5b50610396610946366004614305565b6128cd565b61039661095936600461450a565b61298c565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046142d3565b6132b6565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046142d3565b613300565b3480156109db575f80fd5b506103966109ea366004614305565b6133a3565b3480156109fa575f80fd5b5061036960a95481565b610a0c613430565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade613430565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b39858561348a565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856145a4565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826145b7565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d07816132b6565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906145a4565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e876134a5565b5f80610e93848461348a565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611324565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f63816132b6565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856145b7565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f060f98401601185015160c01c600986015160c01c6134f8565b60a25f6111fe6001846145b7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123790846145b7565b81526020019081526020015f205f905560a45f60018361125791906145b7565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611300866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134c57505f82815260a1602052604090205415155b92915050565b61135a613430565b5f8111801561136b57506099548114155b6113b75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561141d57505f5460ff8083169116105b61148f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556114ca5f5460ff1690565b60ff1660021461151c5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b8161158f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab60205260409020546115b857609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016113f1565b61161a613430565b6001600160a01b0381165f908152609f602052604090205460ff166116815760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b6116d7613430565b6116e05f6135c1565b565b5f54610100900460ff161580801561170057505f54600160ff909116105b806117195750303b15801561171957505f5460ff166001145b61178b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff1916600117905580156117c9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03861615806117e657506001600160a01b038516155b1561181d576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166118735760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b61187b61362a565b6118836136ae565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611a1c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611a2d613430565b6001600160a01b03811615801590611a535750609c546001600160a01b03828116911614155b611a9f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611b10613430565b5f81118015611b20575060648111155b8015611b2e575060a9548114155b611b7a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016113f1565b60a85415611c085760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611c106134a5565b5f80611c1c868661348a565b915091505f611c2f836001015160c01c90565b5f81815260a160205260409020549091508214611c8e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b611c97816132b6565b611ce35760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291611d3c916145a4565b11611db2575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611dad91839190613732565b611a1c565b611dbd83868661388e565b611a1c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613a41565b611e05613430565b60aa80545f909155611e178282613b0d565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016113f1565b611e5e613430565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415611ed55760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f80611ee1848461348a565b915091505f611ef4836001015160c01c90565b90508015611f445760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f611f50846079015190565b905080611f9f5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c15611ff45760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612000856019015190565b0361204d5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612079856039015190565b146120c65760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6121ae613430565b80156122cf576121bc613bb8565b60a65460ff161561228e5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916122109084906145a4565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6122d7613c12565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336122b1565b50565b335f908152609f602052604090205460ff1661235f5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a854156123af5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b6123b76134a5565b60a65460ff161561240a5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d54106124655760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a1602052604090205481146124cc5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b6124df8267ffffffffffffffff16611324565b61252b5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b0316156125a65760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a2602052604090206001015442106126365760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126aa91906145ca565b3410156126f95760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161284b91815260200190565b60405180910390a35f609d54600161286391906145a4565b90505b609e5481116128bb578267ffffffffffffffff1681146128a9576099545f82815260a26020526040812060010180549091906128a39084906145a4565b90915550505b806128b3816145e1565b915050612866565b505060a6805460ff1916600117905550565b335f90815260a560205260408120549081900361292c5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556129458282613b0d565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161298091815260200190565b60405180910390a25050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156129f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1c9190614618565b612a685760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a85415612ab85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612ac06134a5565b612acd6020830183614633565b60ff1615612b1d5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f612b2b6040840184614653565b91505080612b7b5760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b6080830135612bcc5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60a0830135612c1d5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f80612c34612c2f6020870187614653565b61348a565b915091505f612c47836001015160c01c90565b90505f60a181612c588460016145a4565b81526020019081526020015f205414612cb35760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e548114612d045760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a160205260409020548214612d605760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab6020526040902054608087013514612dc05760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f612dcf846011015160c01c90565b90505f8080612e2e612de460408c018c614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150612e29905060608f018f614653565b613c4b565b948501949384019392509050612e4760608b018b614653565b905061010060ff85010460200214612ea15760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b600194909401935f804915612eb7575f49612ed9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f612ee960608d018d614653565b612ef5915060f96145a4565b90506040519850602081028901604052612f23898d5f016020810190612f1b9190614633565b60ff16613dcc565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a0152612f9089612f7160208e018e614653565b604051612f7f9291906146b4565b604051809103902060b99190910152565b60d98901889052612fad89612fa860608f018f614653565b613dd3565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156130135760a7545f90815260a460205260409020600201546099544291613006916145a4565b61301091906145b7565b90505b6040518060800160405280428152602001826098544261303391906145a4565b61303d91906145a4565b815260200161308e8f80604001906130559190614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613ddf92505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613102573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312691906145ca565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c359061318e90613188908f018f614653565b5f613e36565b5f8e806040019061319f9190614653565b6040518663ffffffff1660e01b81526004016131bf95949392919061470a565b602060405180830381865afa1580156131da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fe9190614618565b6132705760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134c5750505f90815260a46020526040902060030154610100900460ff161590565b613308613430565b5f8111801561331957506098548114155b6133655760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016113f1565b6133ab613430565b6001600160a01b0381166134275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b6122fe816135c1565b6033546001600160a01b031633146116e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6134978585613e8a565b812090969095509350505050565b60655460ff16156116e05760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361350457505050565b8082035f805b83811015610e275761010081850381111561352457508084035b8651609b546040517f55f613ce0000000000000000000000000000000000000000000000000000000081526004810187905260248101849052604481018390526020909901989194506001600160a01b0316906355f613ce906064015f604051808303815f87803b158015613597575f80fd5b505af11580156135a9573d5f803e3d5ffd5b5050505061010084019350506101008101905061350a565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166136a65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613f61565b5f54610100900460ff1661372a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613fe9565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156137b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137da91906145ca565b5f86815260a460205260409020600101549091506137f99082906145a4565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906138389084906145a4565b909155505060405161384b90849061477d565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b806138db5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f6138ea846001015160c01c90565b90505f6138f8856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613927876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a8486139e9885160f81c90565b858888866040518663ffffffff1660e01b8152600401613a0d9594939291906147a9565b5f6040518083038186803b158015613a23575f80fd5b505afa158015613a35573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613a6590846147da565b613a6f91906147f1565b9050613a7b81836145b7565b60aa5f828254613a8b91906145a4565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613ab79084906145a4565b9091555050604051613aca90849061477d565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613bb4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613b5c576040519150601f19603f3d011682016040523d82523d5f602084013e613b61565b606091505b5050905080613bb25760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613bc06134a5565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613bf53390565b6040516001600160a01b03909116815260200160405180910390a1565b613c1a61406e565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613bf5565b60405185515f91829160208901919081908490613c699085906140c0565b90506002840193505f5b81811015613ced57603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613cc3603c836147da565b613ccd90876145a4565b90505f613cde82603a015160f01c90565b97909701965050600101613c73565b506020850282016040525b8015613db8575f613d0d85603a015160f01c90565b9050613d1d83828d8d8d8d614155565b92505f613d2e866038015160f01c90565b905081811015613d805760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613cf8565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f613dfa8286516140c0565b90505f5b613e096001836145b7565b811015613e1f57603c9390930192600101613dfe565b505f613e2c845160c01c90565b9695505050505050565b60605f80808080613e49888a018a614916565b9550955095509550955050818710613e67579450613e839350505050565b838710613e7b578295505050505050613e83565b509293505050505b9392505050565b5f8160f9811015613edd5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040525f613efb836009015160c01c90565b905061010060ff82010460200260f9018214613f595760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b509250929050565b5f54610100900460ff16613fdd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140655760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0336135c1565b60655460ff166116e05760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f6140cc835160f01c90565b9050805f03614107576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614112603c826147da565b61411d9060026145a4565b821461134c576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03614164575085613e2c565b609b546001600160a01b03165f80805b8981101561424a5760ff89169150600889901c811580614192575082155b156141a1578060200288013593505b600184841c165f03614239576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f906001600160a01b0387169063ae453cd590602401602060405180830381865afa15801561420b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422f91906145ca565b8d52506020909b019a5b506001988901989788019701614174565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c600116156142c55760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610a70565b509798975050505050505050565b5f602082840312156142e3575f80fd5b5035919050565b80356001600160a01b0381168114614300575f80fd5b919050565b5f60208284031215614315575f80fd5b613e83826142ea565b5f8083601f84011261432e575f80fd5b50813567ffffffffffffffff811115614345575f80fd5b60208301915083602082850101111561435c575f80fd5b9250929050565b5f805f60408486031215614375575f80fd5b833567ffffffffffffffff81111561438b575f80fd5b6143978682870161431e565b909790965060209590950135949350505050565b5f80602083850312156143bc575f80fd5b823567ffffffffffffffff8111156143d2575f80fd5b6143de8582860161431e565b90969095509350505050565b5f805f805f8060c087890312156143ff575f80fd5b614408876142ea565b9550614416602088016142ea565b9450614424604088016142ea565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614458575f80fd5b843567ffffffffffffffff8082111561446f575f80fd5b61447b8883890161431e565b90965094506020870135915080821115614493575f80fd5b506144a08782880161431e565b95989497509550505050565b80151581146122fe575f80fd5b5f602082840312156144c9575f80fd5b8135613e83816144ac565b5f80604083850312156144e5575f80fd5b823567ffffffffffffffff811681146144fc575f80fd5b946020939093013593505050565b5f806040838503121561451b575f80fd5b823567ffffffffffffffff80821115614532575f80fd5b9084019060e08287031215614545575f80fd5b9092506020840135908082111561455a575f80fd5b5083016060818603121561456c575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134c5761134c614577565b8181038181111561134c5761134c614577565b5f602082840312156145da575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361461157614611614577565b5060010190565b5f60208284031215614628575f80fd5b8151613e83816144ac565b5f60208284031215614643575f80fd5b813560ff81168114613e83575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614686575f80fd5b83018035915067ffffffffffffffff8211156146a0575f80fd5b60200191503681900382131561435c575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156147545784516001600160a01b03168352938301939183019160010161472f565b5050876040860152848103606086015261476f8187896146c3565b9a9950505050505050505050565b5f82515f5b8181101561479c5760208186018101518583015201614782565b505f920191825250919050565b858152846020820152608060408201525f6147c86080830185876146c3565b90508260608301529695505050505050565b808202811582820484141761134c5761134c614577565b5f82614824577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614865575f80fd5b8135602067ffffffffffffffff8083111561488257614882614829565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156148c5576148c5614829565b60405293845260208187018101949081019250878511156148e4575f80fd5b6020870191505b8482101561490b576148fc826142ea565b835291830191908301906148eb565b979650505050505050565b5f805f805f8060c0878903121561492b575f80fd5b86359550602087013567ffffffffffffffff80821115614949575f80fd5b6149558a838b01614856565b9650604089013595506060890135915080821115614971575f80fd5b61497d8a838b01614856565b94506080890135935060a0890135915080821115614999575f80fd5b506149a689828a01614856565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index ac9b469dd..1f5814d07 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorIncorrectBatchLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorNoBlockInBatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blockContexts\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"skippedL1MessageBitmap\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b50604051620048913803806200489183398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516147336200015e5f395f81816105ce015261367001526147335ff3fe6080604052600436106102fb575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd14610987578063f2fde38b146109a6578063fb1e8b04146109c5575f80fd5b8063ddd8a3dc14610934578063de8b303514610953578063dff7827e14610972575f80fd5b8063ce5db8d6116100b7578063ce5db8d6146108ed578063d279c19114610902578063d63b354914610921575f80fd5b8063b3e0a5091461089c578063bedb86fb146108bb578063cd4edc69146108da575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610849578063b34844251461085e578063b35dac4e1461087d575f80fd5b8063a479265d146107ea578063a4f209b0146107ff578063abc8d68d1461081e575f80fd5b8063910129d41161016c578063910129d41461076c57806397fc007c1461079d578063a415d8dc146107bc575f80fd5b806388b1ea09146106865780638da5cb5b1461069f5780638f1d3776146106bc575f80fd5b80632571098d116102515780635ef7a94a116101fc5780636c578c1d116101d75780636c578c1d14610634578063715018a614610653578063728cdbca14610667575f80fd5b80635ef7a94a1461055d5780635f77cf1d146105bd57806368589dfa14610609575f80fd5b80633e001b661161022c5780633e001b661461051257806357e0af6c146105275780635c975abb14610546575f80fd5b80632571098d146104915780632b7ac3f3146104bc5780633b70c18a146104f3575f80fd5b8063121dcd50116102b157806318af3b2b1161028c57806318af3b2b1461041757806321e2f9e0146104475780632362f03e14610466575f80fd5b8063121dcd50146103ce57806313361101146103e357806318463fb014610402575f80fd5b80630ceb6780116102e15780630ceb67801461036c57806310d445831461038d578063116a1f42146103ac575f80fd5b806304d7721514610306578063059def6114610349575f80fd5b3661030257005b5f80fd5b348015610311575f80fd5b50610334610320366004614046565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610354575f80fd5b5061035e609d5481565b604051908152602001610340565b348015610377575f80fd5b5061038b610386366004614078565b6109da565b005b348015610398575f80fd5b5061038b6103a73660046140d6565b610aac565b3480156103b7575f80fd5b506103346103c6366004614046565b609d54101590565b3480156103d9575f80fd5b5061035e609e5481565b3480156103ee575f80fd5b5061038b6103fd36600461411e565b610e05565b34801561040d575f80fd5b5061035e60a75481565b348015610422575f80fd5b50610334610431366004614046565b5f90815260a26020526040902060010154421090565b348015610452575f80fd5b50610334610461366004614046565b6112fa565b348015610471575f80fd5b5061035e610480366004614046565b60a16020525f908152604090205481565b34801561049c575f80fd5b5061035e6104ab366004614046565b60a06020525f908152604090205481565b3480156104c7575f80fd5b50609c546104db906001600160a01b031681565b6040516001600160a01b039091168152602001610340565b3480156104fe575f80fd5b50609b546104db906001600160a01b031681565b34801561051d575f80fd5b5061035e60aa5481565b348015610532575f80fd5b5061038b610541366004614046565b611328565b348015610551575f80fd5b5060655460ff16610334565b348015610568575f80fd5b5061059d610577366004614046565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610340565b3480156105c8575f80fd5b506105f07f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610340565b348015610614575f80fd5b5061035e610623366004614046565b60ab6020525f908152604090205481565b34801561063f575f80fd5b5061038b61064e366004614078565b6113d3565b34801561065e575f80fd5b5061038b611490565b348015610672575f80fd5b5061038b61068136600461415d565b6114a3565b348015610691575f80fd5b5060a6546103349060ff1681565b3480156106aa575f80fd5b506033546001600160a01b03166104db565b3480156106c7575f80fd5b506107286106d6366004614046565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610340565b348015610777575f80fd5b50610334610786366004614046565b5f90815260a4602052604090206003015460ff1690565b3480156107a8575f80fd5b5061038b6107b7366004614078565b6117e6565b3480156107c7575f80fd5b506103346107d6366004614078565b609f6020525f908152604090205460ff1681565b3480156107f5575f80fd5b5061035e60995481565b34801561080a575f80fd5b5061038b610819366004614046565b6118c9565b348015610829575f80fd5b5061035e610838366004614078565b60a56020525f908152604090205481565b348015610854575f80fd5b5061035e60a85481565b348015610869575f80fd5b5061038b6108783660046141b8565b611979565b348015610888575f80fd5b5061038b610897366004614078565b611bbe565b3480156108a7575f80fd5b5061038b6108b636600461411e565b611c17565b3480156108c6575f80fd5b5061038b6108d536600461422c565b611f19565b61038b6108e8366004614247565b612074565b3480156108f8575f80fd5b5061035e60985481565b34801561090d575f80fd5b5061038b61091c366004614078565b612640565b61038b61092f36600461427d565b6126ff565b34801561093f575f80fd5b506097546104db906001600160a01b031681565b34801561095e575f80fd5b5061033461096d366004614046565b613029565b34801561097d575f80fd5b5061035e609a5481565b348015610992575f80fd5b5061038b6109a1366004614046565b613073565b3480156109b1575f80fd5b5061038b6109c0366004614078565b613116565b3480156109d0575f80fd5b5061035e60a95481565b6109e26131a3565b6001600160a01b0381165f908152609f602052604090205460ff1615610a4f5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ab46131a3565b5f8111610b035760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a46565b5f80610b0f85856131fd565b915091505f610b22836001015160c01c90565b5f81815260a160205260409020549091508214610b815760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b5f60a181610b8f8785614317565b81526020019081526020015f205414610c0f5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a46565b609d548111610c865760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a46565b610c9160018261432a565b609e555b8315610dfd57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610cdd81613029565b15610d38575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d28908490614317565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610db5575060a85481145b15610dbf575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610c95575b505050505050565b60a85415610e555760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b610e5d613218565b5f80610e6984846131fd565b915091505f610e7c836001015160c01c90565b5f81815260a160205260409020549091508214610edb5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b610ee4816112fa565b610f305760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a46565b610f3981613029565b15610f865760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a46565b5f81815260a4602052604090206003015460ff1615610fe75760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a46565b5f81815260a260205260409020600101544210156110475760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a46565b605983015160a05f61105a60018561432a565b81526020019081526020015f2054146110b55760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a46565b5f81815260a06020526040902054156111105760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a46565b80609d54600101146111645760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a46565b609d819055600160a35f611179866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111c660f98401601185015160c01c600986015160c01c61326b565b60a25f6111d460018461432a565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061120d908461432a565b81526020019081526020015f205f905560a45f60018361122d919061432a565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6112d6866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061132257505f82815260a1602052604090205415155b92915050565b6113306131a3565b5f8111801561134157506099548114155b61138d5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a46565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b6113db6131a3565b6001600160a01b0381165f908152609f602052604090205460ff166114425760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a46565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610aa1565b6114986131a3565b6114a15f613334565b565b5f54610100900460ff16158080156114c157505f54600160ff909116105b806114da5750303b1580156114da57505f5460ff166001145b61154c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a46565b5f805460ff19166001179055801561158a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03861615806115a757506001600160a01b038516155b156115de576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166116345760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a46565b61163c61339d565b611644613421565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156117dd575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6117ee6131a3565b6001600160a01b038116158015906118145750609c546001600160a01b03828116911614155b6118605760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a46565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6118d16131a3565b5f811180156118e1575060648111155b80156118ef575060a9548114155b61193b5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a46565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016113c7565b60a854156119c95760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b6119d1613218565b5f806119dd86866131fd565b915091505f6119f0836001015160c01c90565b5f81815260a160205260409020549091508214611a4f5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b611a5881613029565b611aa45760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a46565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291611afd91614317565b11611b73575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611b6e918391906134a5565b6117dd565b611b7e838686613601565b6117dd81336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506137b4565b611bc66131a3565b60aa80545f909155611bd88282613880565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016113c7565b611c1f6131a3565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415611c965760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a46565b5f80611ca284846131fd565b915091505f611cb5836001015160c01c90565b90505f611cc3846079015190565b905080611d125760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a46565b600984015160c01c15611d675760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a46565b5f611d73856019015190565b03611dc05760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a46565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014611dec856039015190565b14611e395760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a46565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b611f216131a3565b801561204257611f2f61392b565b60a65460ff16156120015760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091611f83908490614317565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b61204a613985565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612024565b50565b335f908152609f602052604090205460ff166120d25760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a46565b60a854156121225760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b61212a613218565b60a65460ff161561217d5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a46565b8167ffffffffffffffff16609d54106121d85760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a46565b67ffffffffffffffff82165f90815260a16020526040902054811461223f5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a46565b6122528267ffffffffffffffff166112fa565b61229e5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a46565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b0316156123195760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a46565b67ffffffffffffffff82165f90815260a2602052604090206001015442106123a95760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a46565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241d919061433d565b34101561246c5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a46565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516125be91815260200190565b60405180910390a35f609d5460016125d69190614317565b90505b609e54811161262e578267ffffffffffffffff16811461261c576099545f82815260a2602052604081206001018054909190612616908490614317565b90915550505b8061262681614354565b9150506125d9565b505060a6805460ff1916600117905550565b335f90815260a560205260408120549081900361269f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a46565b335f90815260a560205260408120556126b88282613880565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516126f391815260200190565b60405180910390a25050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561276b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278f919061438b565b6127db5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a46565b60a8541561282b5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a46565b612833613218565b61284060208301836143a6565b60ff16156128905760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a46565b5f61289e60408401846143c6565b915050806128ee5760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a46565b608083013561293f5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a46565b60a08301356129905760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a46565b5f806129a76129a260208701876143c6565b6131fd565b915091505f6129ba836001015160c01c90565b90505f60a1816129cb846001614317565b81526020019081526020015f205414612a265760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a46565b609e548114612a775760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a46565b5f81815260a160205260409020548214612ad35760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a46565b5f81815260ab6020526040902054608087013514612b335760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a46565b5f612b42846011015160c01c90565b90505f8080612ba1612b5760408c018c6143c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150612b9c905060608f018f6143c6565b6139be565b948501949384019392509050612bba60608b018b6143c6565b905061010060ff85010460200214612c145760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a46565b600194909401935f804915612c2a575f49612c4c565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f612c5c60608d018d6143c6565b612c68915060f9614317565b90506040519850602081028901604052612c96898d5f016020810190612c8e91906143a6565b60ff16613b3f565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a0152612d0389612ce460208e018e6143c6565b604051612cf2929190614427565b604051809103902060b99190910152565b60d98901889052612d2089612d1b60608f018f6143c6565b613b46565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff1615612d865760a7545f90815260a460205260409020600201546099544291612d7991614317565b612d83919061432a565b90505b60405180608001604052804281526020018260985442612da69190614317565b612db09190614317565b8152602001612e018f8060400190612dc891906143c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613b5292505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612e75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e99919061433d565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c3590612f0190612efb908f018f6143c6565b5f613ba9565b5f8e8060400190612f1291906143c6565b6040518663ffffffff1660e01b8152600401612f3295949392919061447d565b602060405180830381865afa158015612f4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f71919061438b565b612fe35760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a46565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113225750505f90815260a46020526040902060030154610100900460ff161590565b61307b6131a3565b5f8111801561308c57506098548114155b6130d85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a46565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016113c7565b61311e6131a3565b6001600160a01b03811661319a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a46565b61207181613334565b6033546001600160a01b031633146114a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a46565b5f805f61320a8585613bfd565b812090969095509350505050565b60655460ff16156114a15760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a46565b805f0361327757505050565b8082035f805b83811015610dfd5761010081850381111561329757508084035b8651609b546040517f55f613ce0000000000000000000000000000000000000000000000000000000081526004810187905260248101849052604481018390526020909901989194506001600160a01b0316906355f613ce906064015f604051808303815f87803b15801561330a575f80fd5b505af115801561331c573d5f803e3d5ffd5b5050505061010084019350506101008101905061327d565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166134195760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6114a1613cd4565b5f54610100900460ff1661349d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6114a1613d5c565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613529573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061354d919061433d565b5f86815260a4602052604090206001015490915061356c908290614317565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906135ab908490614317565b90915550506040516135be9084906144f0565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8061364e5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a46565b5f61365d846001015160c01c90565b90505f61366b856039015190565b90505f7f000000000000000000000000000000000000000000000000000000000000000061369a876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a84861375c885160f81c90565b858888866040518663ffffffff1660e01b815260040161378095949392919061451c565b5f6040518083038186803b158015613796575f80fd5b505afa1580156137a8573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a9549091906064906137d8908461454d565b6137e29190614564565b90506137ee818361432a565b60aa5f8282546137fe9190614317565b90915550506001600160a01b0384165f90815260a560205260408120805483929061382a908490614317565b909155505060405161383d9084906144f0565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613927575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146138cf576040519150601f19603f3d011682016040523d82523d5f602084013e6138d4565b606091505b50509050806139255760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a46565b505b5050565b613933613218565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586139683390565b6040516001600160a01b03909116815260200160405180910390a1565b61398d613de1565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613968565b60405185515f918291602089019190819084906139dc908590613e33565b90506002840193505f5b81811015613a6057603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613a36603c8361454d565b613a409087614317565b90505f613a5182603a015160f01c90565b979097019650506001016139e6565b506020850282016040525b8015613b2b575f613a8085603a015160f01c90565b9050613a9083828d8d8d8d613ec8565b92505f613aa1866038015160f01c90565b905081811015613af35760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a46565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613a6b565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f613b6d828651613e33565b90505f5b613b7c60018361432a565b811015613b9257603c9390930192600101613b71565b505f613b9f845160c01c90565b9695505050505050565b60605f80808080613bbc888a018a614689565b9550955095509550955050818710613bda579450613bf69350505050565b838710613bee578295505050505050613bf6565b509293505050505b9392505050565b5f8160f9811015613c505760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a46565b6040519150808483378082016040525f613c6e836009015160c01c90565b905061010060ff82010460200260f9018214613ccc5760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a46565b509250929050565b5f54610100900460ff16613d505760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6065805460ff19169055565b5f54610100900460ff16613dd85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a46565b6114a133613334565b60655460ff166114a15760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a46565b5f613e3f835160f01c90565b9050805f03613e7a576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613e85603c8261454d565b613e90906002614317565b8214611322576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03613ed7575085613b9f565b609b546001600160a01b03165f80805b89811015613fbd5760ff89169150600889901c811580613f05575082155b15613f14578060200288013593505b600184841c165f03613fac576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f906001600160a01b0387169063ae453cd590602401602060405180830381865afa158015613f7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fa2919061433d565b8d52506020909b019a5b506001988901989788019701613ee7565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c600116156140385760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610a46565b509798975050505050505050565b5f60208284031215614056575f80fd5b5035919050565b80356001600160a01b0381168114614073575f80fd5b919050565b5f60208284031215614088575f80fd5b613bf68261405d565b5f8083601f8401126140a1575f80fd5b50813567ffffffffffffffff8111156140b8575f80fd5b6020830191508360208285010111156140cf575f80fd5b9250929050565b5f805f604084860312156140e8575f80fd5b833567ffffffffffffffff8111156140fe575f80fd5b61410a86828701614091565b909790965060209590950135949350505050565b5f806020838503121561412f575f80fd5b823567ffffffffffffffff811115614145575f80fd5b61415185828601614091565b90969095509350505050565b5f805f805f8060c08789031215614172575f80fd5b61417b8761405d565b95506141896020880161405d565b94506141976040880161405d565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156141cb575f80fd5b843567ffffffffffffffff808211156141e2575f80fd5b6141ee88838901614091565b90965094506020870135915080821115614206575f80fd5b5061421387828801614091565b95989497509550505050565b8015158114612071575f80fd5b5f6020828403121561423c575f80fd5b8135613bf68161421f565b5f8060408385031215614258575f80fd5b823567ffffffffffffffff8116811461426f575f80fd5b946020939093013593505050565b5f806040838503121561428e575f80fd5b823567ffffffffffffffff808211156142a5575f80fd5b9084019060e082870312156142b8575f80fd5b909250602084013590808211156142cd575f80fd5b508301606081860312156142df575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611322576113226142ea565b81810381811115611322576113226142ea565b5f6020828403121561434d575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614384576143846142ea565b5060010190565b5f6020828403121561439b575f80fd5b8151613bf68161421f565b5f602082840312156143b6575f80fd5b813560ff81168114613bf6575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126143f9575f80fd5b83018035915067ffffffffffffffff821115614413575f80fd5b6020019150368190038213156140cf575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156144c75784516001600160a01b0316835293830193918301916001016144a2565b505087604086015284810360608601526144e2818789614436565b9a9950505050505050505050565b5f82515f5b8181101561450f57602081860181015185830152016144f5565b505f920191825250919050565b858152846020820152608060408201525f61453b608083018587614436565b90508260608301529695505050505050565b8082028115828204841417611322576113226142ea565b5f82614597577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145d8575f80fd5b8135602067ffffffffffffffff808311156145f5576145f561459c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156146385761463861459c565b6040529384526020818701810194908101925087851115614657575f80fd5b6020870191505b8482101561467e5761466f8261405d565b8352918301919083019061465e565b979650505050505050565b5f805f805f8060c0878903121561469e575f80fd5b86359550602087013567ffffffffffffffff808211156146bc575f80fd5b6146c88a838b016145c9565b96506040890135955060608901359150808211156146e4575f80fd5b6146f08a838b016145c9565b94506080890135935060a089013591508082111561470c575f80fd5b5061471989828a016145c9565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorIncorrectBatchLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorNoBlockInBatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blockContexts\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"skippedL1MessageBitmap\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b5060405162004b1e38038062004b1e83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516149c06200015e5f395f81816105d901526138fd01526149c05ff3fe608060405260043610610306575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063ce5db8d6116100b7578063ce5db8d614610917578063d279c1911461092c578063d63b35491461094b575f80fd5b8063b3e0a509146108c6578063bedb86fb146108e5578063cd4edc6914610904575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610873578063b348442514610888578063b35dac4e146108a7575f80fd5b8063a479265d14610814578063a4f209b014610829578063abc8d68d14610848575f80fd5b8063910129d41161016c578063910129d41461079657806397fc007c146107c7578063a415d8dc146107e6575f80fd5b806388b1ea09146106b05780638da5cb5b146106c95780638f1d3776146106e6575f80fd5b80632b7ac3f3116102515780635f77cf1d116101fc5780636c578c1d116101d75780636c578c1d1461065e578063715018a61461067d578063728cdbca14610691575f80fd5b80635f77cf1d146105c8578063612672901461061457806368589dfa14610633575f80fd5b806357e0af6c1161022c57806357e0af6c146105325780635c975abb146105515780635ef7a94a14610568575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046142d3565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614305565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614363565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046142d3565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046143ab565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046142d3565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046142d3565b611324565b34801561047c575f80fd5b5061036961048b3660046142d3565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046142d3565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b34801561053d575f80fd5b5061039661054c3660046142d3565b611352565b34801561055c575f80fd5b5060655460ff1661033f565b348015610573575f80fd5b506105a86105823660046142d3565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105d3575f80fd5b506105fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b34801561061f575f80fd5b5061039661062e3660046142d3565b6113fd565b34801561063e575f80fd5b5061036961064d3660046142d3565b60ab6020525f908152604090205481565b348015610669575f80fd5b50610396610678366004614305565b611612565b348015610688575f80fd5b506103966116cf565b34801561069c575f80fd5b506103966106ab3660046143ea565b6116e2565b3480156106bb575f80fd5b5060a65461033f9060ff1681565b3480156106d4575f80fd5b506033546001600160a01b03166104e6565b3480156106f1575f80fd5b506107526107003660046142d3565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107a1575f80fd5b5061033f6107b03660046142d3565b5f90815260a4602052604090206003015460ff1690565b3480156107d2575f80fd5b506103966107e1366004614305565b611a25565b3480156107f1575f80fd5b5061033f610800366004614305565b609f6020525f908152604090205460ff1681565b34801561081f575f80fd5b5061036960995481565b348015610834575f80fd5b506103966108433660046142d3565b611b08565b348015610853575f80fd5b50610369610862366004614305565b60a56020525f908152604090205481565b34801561087e575f80fd5b5061036960a85481565b348015610893575f80fd5b506103966108a2366004614445565b611bb8565b3480156108b2575f80fd5b506103966108c1366004614305565b611dfd565b3480156108d1575f80fd5b506103966108e03660046143ab565b611e56565b3480156108f0575f80fd5b506103966108ff3660046144b9565b6121a6565b6103966109123660046144d4565b612301565b348015610922575f80fd5b5061036960985481565b348015610937575f80fd5b50610396610946366004614305565b6128cd565b61039661095936600461450a565b61298c565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046142d3565b6132b6565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046142d3565b613300565b3480156109db575f80fd5b506103966109ea366004614305565b6133a3565b3480156109fa575f80fd5b5061036960a95481565b610a0c613430565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade613430565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b39858561348a565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856145a4565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826145b7565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d07816132b6565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906145a4565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e876134a5565b5f80610e93848461348a565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611324565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f63816132b6565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856145b7565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f060f98401601185015160c01c600986015160c01c6134f8565b60a25f6111fe6001846145b7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123790846145b7565b81526020019081526020015f205f905560a45f60018361125791906145b7565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611300866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134c57505f82815260a1602052604090205415155b92915050565b61135a613430565b5f8111801561136b57506099548114155b6113b75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561141d57505f5460ff8083169116105b61148f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556114ca5f5460ff1690565b60ff1660021461151c5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b8161158f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab60205260409020546115b857609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016113f1565b61161a613430565b6001600160a01b0381165f908152609f602052604090205460ff166116815760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b6116d7613430565b6116e05f6135c1565b565b5f54610100900460ff161580801561170057505f54600160ff909116105b806117195750303b15801561171957505f5460ff166001145b61178b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff1916600117905580156117c9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b03861615806117e657506001600160a01b038516155b1561181d576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166118735760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b61187b61362a565b6118836136ae565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611a1c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611a2d613430565b6001600160a01b03811615801590611a535750609c546001600160a01b03828116911614155b611a9f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611b10613430565b5f81118015611b20575060648111155b8015611b2e575060a9548114155b611b7a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016113f1565b60a85415611c085760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b611c106134a5565b5f80611c1c868661348a565b915091505f611c2f836001015160c01c90565b5f81815260a160205260409020549091508214611c8e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b611c97816132b6565b611ce35760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291611d3c916145a4565b11611db2575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611dad91839190613732565b611a1c565b611dbd83868661388e565b611a1c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613a41565b611e05613430565b60aa80545f909155611e178282613b0d565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016113f1565b611e5e613430565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415611ed55760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f80611ee1848461348a565b915091505f611ef4836001015160c01c90565b90508015611f445760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f611f50846079015190565b905080611f9f5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c15611ff45760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612000856019015190565b0361204d5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612079856039015190565b146120c65760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6121ae613430565b80156122cf576121bc613bb8565b60a65460ff161561228e5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916122109084906145a4565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6122d7613c12565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336122b1565b50565b335f908152609f602052604090205460ff1661235f5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a854156123af5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b6123b76134a5565b60a65460ff161561240a5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d54106124655760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a1602052604090205481146124cc5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b6124df8267ffffffffffffffff16611324565b61252b5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b0316156125a65760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a2602052604090206001015442106126365760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126aa91906145ca565b3410156126f95760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161284b91815260200190565b60405180910390a35f609d54600161286391906145a4565b90505b609e5481116128bb578267ffffffffffffffff1681146128a9576099545f82815260a26020526040812060010180549091906128a39084906145a4565b90915550505b806128b3816145e1565b915050612866565b505060a6805460ff1916600117905550565b335f90815260a560205260408120549081900361292c5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a560205260408120556129458282613b0d565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161298091815260200190565b60405180910390a25050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156129f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a1c9190614618565b612a685760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a85415612ab85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612ac06134a5565b612acd6020830183614633565b60ff1615612b1d5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b5f612b2b6040840184614653565b91505080612b7b5760405162461bcd60e51b815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610a70565b6080830135612bcc5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60a0830135612c1d5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f80612c34612c2f6020870187614653565b61348a565b915091505f612c47836001015160c01c90565b90505f60a181612c588460016145a4565b81526020019081526020015f205414612cb35760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e548114612d045760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a160205260409020548214612d605760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab6020526040902054608087013514612dc05760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f612dcf846011015160c01c90565b90505f8080612e2e612de460408c018c614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150612e29905060608f018f614653565b613c4b565b948501949384019392509050612e4760608b018b614653565b905061010060ff85010460200214612ea15760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b600194909401935f804915612eb7575f49612ed9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f612ee960608d018d614653565b612ef5915060f96145a4565b90506040519850602081028901604052612f23898d5f016020810190612f1b9190614633565b60ff16613dcc565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a0152612f9089612f7160208e018e614653565b604051612f7f9291906146b4565b604051809103902060b99190910152565b60d98901889052612fad89612fa860608f018f614653565b613dd3565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156130135760a7545f90815260a460205260409020600201546099544291613006916145a4565b61301091906145b7565b90505b6040518060800160405280428152602001826098544261303391906145a4565b61303d91906145a4565b815260200161308e8f80604001906130559190614653565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613ddf92505050565b81526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613102573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312691906145ca565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8990556097546001600160a01b031692506374fe27b791508c359061318e90613188908f018f614653565b5f613e36565b5f8e806040019061319f9190614653565b6040518663ffffffff1660e01b81526004016131bf95949392919061470a565b602060405180830381865afa1580156131da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131fe9190614618565b6132705760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134c5750505f90815260a46020526040902060030154610100900460ff161590565b613308613430565b5f8111801561331957506098548114155b6133655760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016113f1565b6133ab613430565b6001600160a01b0381166134275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b6122fe816135c1565b6033546001600160a01b031633146116e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6134978585613e8a565b812090969095509350505050565b60655460ff16156116e05760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361350457505050565b8082035f805b83811015610e275761010081850381111561352457508084035b8651609b546040517f55f613ce0000000000000000000000000000000000000000000000000000000081526004810187905260248101849052604481018390526020909901989194506001600160a01b0316906355f613ce906064015f604051808303815f87803b158015613597575f80fd5b505af11580156135a9573d5f803e3d5ffd5b5050505061010084019350506101008101905061350a565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166136a65760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613f61565b5f54610100900460ff1661372a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0613fe9565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156137b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137da91906145ca565b5f86815260a460205260409020600101549091506137f99082906145a4565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906138389084906145a4565b909155505060405161384b90849061477d565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b806138db5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f6138ea846001015160c01c90565b90505f6138f8856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613927876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a8486139e9885160f81c90565b858888866040518663ffffffff1660e01b8152600401613a0d9594939291906147a9565b5f6040518083038186803b158015613a23575f80fd5b505afa158015613a35573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613a6590846147da565b613a6f91906147f1565b9050613a7b81836145b7565b60aa5f828254613a8b91906145a4565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613ab79084906145a4565b9091555050604051613aca90849061477d565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613bb4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613b5c576040519150601f19603f3d011682016040523d82523d5f602084013e613b61565b606091505b5050905080613bb25760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613bc06134a5565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613bf53390565b6040516001600160a01b03909116815260200160405180910390a1565b613c1a61406e565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613bf5565b60405185515f91829160208901919081908490613c699085906140c0565b90506002840193505f5b81811015613ced57603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f613cc3603c836147da565b613ccd90876145a4565b90505f613cde82603a015160f01c90565b97909701965050600101613c73565b506020850282016040525b8015613db8575f613d0d85603a015160f01c90565b9050613d1d83828d8d8d8d614155565b92505f613d2e866038015160f01c90565b905081811015613d805760405162461bcd60e51b815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610a70565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613cf8565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f613dfa8286516140c0565b90505f5b613e096001836145b7565b811015613e1f57603c9390930192600101613dfe565b505f613e2c845160c01c90565b9695505050505050565b60605f80808080613e49888a018a614916565b9550955095509550955050818710613e67579450613e839350505050565b838710613e7b578295505050505050613e83565b509293505050505b9392505050565b5f8160f9811015613edd5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040525f613efb836009015160c01c90565b905061010060ff82010460200260f9018214613f595760405162461bcd60e51b815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610a70565b509250929050565b5f54610100900460ff16613fdd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff166140655760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6116e0336135c1565b60655460ff166116e05760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f6140cc835160f01c90565b9050805f03614107576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614112603c826147da565b61411d9060026145a4565b821461134c576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03614164575085613e2c565b609b546001600160a01b03165f80805b8981101561424a5760ff89169150600889901c811580614192575082155b156141a1578060200288013593505b600184841c165f03614239576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f906001600160a01b0387169063ae453cd590602401602060405180830381865afa15801561420b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422f91906145ca565b8d52506020909b019a5b506001988901989788019701614174565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c600116156142c55760405162461bcd60e51b815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610a70565b509798975050505050505050565b5f602082840312156142e3575f80fd5b5035919050565b80356001600160a01b0381168114614300575f80fd5b919050565b5f60208284031215614315575f80fd5b613e83826142ea565b5f8083601f84011261432e575f80fd5b50813567ffffffffffffffff811115614345575f80fd5b60208301915083602082850101111561435c575f80fd5b9250929050565b5f805f60408486031215614375575f80fd5b833567ffffffffffffffff81111561438b575f80fd5b6143978682870161431e565b909790965060209590950135949350505050565b5f80602083850312156143bc575f80fd5b823567ffffffffffffffff8111156143d2575f80fd5b6143de8582860161431e565b90969095509350505050565b5f805f805f8060c087890312156143ff575f80fd5b614408876142ea565b9550614416602088016142ea565b9450614424604088016142ea565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614458575f80fd5b843567ffffffffffffffff8082111561446f575f80fd5b61447b8883890161431e565b90965094506020870135915080821115614493575f80fd5b506144a08782880161431e565b95989497509550505050565b80151581146122fe575f80fd5b5f602082840312156144c9575f80fd5b8135613e83816144ac565b5f80604083850312156144e5575f80fd5b823567ffffffffffffffff811681146144fc575f80fd5b946020939093013593505050565b5f806040838503121561451b575f80fd5b823567ffffffffffffffff80821115614532575f80fd5b9084019060e08287031215614545575f80fd5b9092506020840135908082111561455a575f80fd5b5083016060818603121561456c575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134c5761134c614577565b8181038181111561134c5761134c614577565b5f602082840312156145da575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361461157614611614577565b5060010190565b5f60208284031215614628575f80fd5b8151613e83816144ac565b5f60208284031215614643575f80fd5b813560ff81168114613e83575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614686575f80fd5b83018035915067ffffffffffffffff8211156146a0575f80fd5b60200191503681900382131561435c575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156147545784516001600160a01b03168352938301939183019160010161472f565b5050876040860152848103606086015261476f8187896146c3565b9a9950505050505050505050565b5f82515f5b8181101561479c5760208186018101518583015201614782565b505f920191825250919050565b858152846020820152608060408201525f6147c86080830185876146c3565b90508260608301529695505050505050565b808202811582820484141761134c5761134c614577565b5f82614824577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614865575f80fd5b8135602067ffffffffffffffff8083111561488257614882614829565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156148c5576148c5614829565b60405293845260208187018101949081019250878511156148e4575f80fd5b6020870191505b8482101561490b576148fc826142ea565b835291830191908301906148eb565b979650505050505050565b5f805f805f8060c0878903121561492b575f80fd5b86359550602087013567ffffffffffffffff80821115614949575f80fd5b6149558a838b01614856565b9650604089013595506060890135915080821115614971575f80fd5b61497d8a838b01614856565b94506080890135935060a0890135915080821115614999575f80fd5b506149a689828a01614856565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -1345,6 +1345,27 @@ func (_Rollup *RollupTransactorSession) Initialize(_l1StakingContract common.Add return _Rollup.Contract.Initialize(&_Rollup.TransactOpts, _l1StakingContract, _messageQueue, _verifier, _finalizationPeriodSeconds, _proofWindow, _proofRewardPercent) } +// Initialize2 is a paid mutator transaction binding the contract method 0x61267290. +// +// Solidity: function initialize2(bytes32 _prevStateRoot) returns() +func (_Rollup *RollupTransactor) Initialize2(opts *bind.TransactOpts, _prevStateRoot [32]byte) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "initialize2", _prevStateRoot) +} + +// Initialize2 is a paid mutator transaction binding the contract method 0x61267290. +// +// Solidity: function initialize2(bytes32 _prevStateRoot) returns() +func (_Rollup *RollupSession) Initialize2(_prevStateRoot [32]byte) (*types.Transaction, error) { + return _Rollup.Contract.Initialize2(&_Rollup.TransactOpts, _prevStateRoot) +} + +// Initialize2 is a paid mutator transaction binding the contract method 0x61267290. +// +// Solidity: function initialize2(bytes32 _prevStateRoot) returns() +func (_Rollup *RollupTransactorSession) Initialize2(_prevStateRoot [32]byte) (*types.Transaction, error) { + return _Rollup.Contract.Initialize2(&_Rollup.TransactOpts, _prevStateRoot) +} + // ProveState is a paid mutator transaction binding the contract method 0xb3484425. // // Solidity: function proveState(bytes _batchHeader, bytes _batchProof) returns() diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 96e82c601..1003e5872 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x6080604052600436106102fb575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109e2578063f2fde38b14610a01578063fb1e8b0414610a20575f80fd5b8063ddd8a3dc14610982578063de8b3035146109ae578063dff7827e146109cd575f80fd5b8063ce5db8d6116100b7578063ce5db8d61461093b578063d279c19114610950578063d63b35491461096f575f80fd5b8063b3e0a509146108ea578063bedb86fb14610909578063cd4edc6914610928575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d314610897578063b3484425146108ac578063b35dac4e146108cb575f80fd5b8063a479265d14610838578063a4f209b01461084d578063abc8d68d1461086c575f80fd5b8063910129d41161016c578063910129d4146107ba57806397fc007c146107eb578063a415d8dc1461080a575f80fd5b806388b1ea09146106ad5780638da5cb5b146106c65780638f1d3776146106f0575f80fd5b80632571098d116102515780635ef7a94a116101fc5780636c578c1d116101d75780636c578c1d1461065b578063715018a61461067a578063728cdbca1461068e575f80fd5b80635ef7a94a146105845780635f77cf1d146105e457806368589dfa14610630575f80fd5b80633e001b661161022c5780633e001b661461053957806357e0af6c1461054e5780635c975abb1461056d575f80fd5b80632571098d146104915780632b7ac3f3146104bc5780633b70c18a1461050d575f80fd5b8063121dcd50116102b157806318af3b2b1161028c57806318af3b2b1461041757806321e2f9e0146104475780632362f03e14610466575f80fd5b8063121dcd50146103ce57806313361101146103e357806318463fb014610402575f80fd5b80630ceb6780116102e15780630ceb67801461036c57806310d445831461038d578063116a1f42146103ac575f80fd5b806304d7721514610306578063059def6114610349575f80fd5b3661030257005b5f80fd5b348015610311575f80fd5b50610334610320366004614ab8565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610354575f80fd5b5061035e609d5481565b604051908152602001610340565b348015610377575f80fd5b5061038b610386366004614af7565b610a35565b005b348015610398575f80fd5b5061038b6103a7366004614b55565b610b59565b3480156103b7575f80fd5b506103346103c6366004614ab8565b609d54101590565b3480156103d9575f80fd5b5061035e609e5481565b3480156103ee575f80fd5b5061038b6103fd366004614b9d565b610f45565b34801561040d575f80fd5b5061035e60a75481565b348015610422575f80fd5b50610334610431366004614ab8565b5f90815260a26020526040902060010154421090565b348015610452575f80fd5b50610334610461366004614ab8565b611542565b348015610471575f80fd5b5061035e610480366004614ab8565b60a16020525f908152604090205481565b34801561049c575f80fd5b5061035e6104ab366004614ab8565b60a06020525f908152604090205481565b3480156104c7575f80fd5b50609c546104e89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610340565b348015610518575f80fd5b50609b546104e89073ffffffffffffffffffffffffffffffffffffffff1681565b348015610544575f80fd5b5061035e60aa5481565b348015610559575f80fd5b5061038b610568366004614ab8565b611570565b348015610578575f80fd5b5060655460ff16610334565b34801561058f575f80fd5b506105c461059e366004614ab8565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610340565b3480156105ef575f80fd5b506106177f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610340565b34801561063b575f80fd5b5061035e61064a366004614ab8565b60ab6020525f908152604090205481565b348015610666575f80fd5b5061038b610675366004614af7565b611635565b348015610685575f80fd5b5061038b611744565b348015610699575f80fd5b5061038b6106a8366004614bdc565b611757565b3480156106b8575f80fd5b5060a6546103349060ff1681565b3480156106d1575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166104e8565b3480156106fb575f80fd5b5061076961070a366004614ab8565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610340565b3480156107c5575f80fd5b506103346107d4366004614ab8565b5f90815260a4602052604090206003015460ff1690565b3480156107f6575f80fd5b5061038b610805366004614af7565b611b20565b348015610815575f80fd5b50610334610824366004614af7565b609f6020525f908152604090205460ff1681565b348015610843575f80fd5b5061035e60995481565b348015610858575f80fd5b5061038b610867366004614ab8565b611c44565b348015610877575f80fd5b5061035e610886366004614af7565b60a56020525f908152604090205481565b3480156108a2575f80fd5b5061035e60a85481565b3480156108b7575f80fd5b5061038b6108c6366004614c37565b611d0e565b3480156108d6575f80fd5b5061038b6108e5366004614af7565b611fdd565b3480156108f5575f80fd5b5061038b610904366004614b9d565b612043565b348015610914575f80fd5b5061038b610923366004614cab565b6123c7565b61038b610936366004614cc6565b61255a565b348015610946575f80fd5b5061035e60985481565b34801561095b575f80fd5b5061038b61096a366004614af7565b612c6f565b61038b61097d366004614cfc565b612d55565b34801561098d575f80fd5b506097546104e89073ffffffffffffffffffffffffffffffffffffffff1681565b3480156109b9575f80fd5b506103346109c8366004614ab8565b6137f8565b3480156109d8575f80fd5b5061035e609a5481565b3480156109ed575f80fd5b5061038b6109fc366004614ab8565b61384f565b348015610a0c575f80fd5b5061038b610a1b366004614af7565b61390c565b348015610a2b575f80fd5b5061035e60a95481565b610a3d6139c0565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b616139c0565b5f8111610bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610ac8565b5f80610bd68585613a41565b915091505f610be9836001015160c01c90565b5f81815260a160205260409020549091508214610c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610ac8565b5f60a181610c708785614d96565b81526020019081526020015f205414610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610ac8565b609d548111610d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610ac8565b610da6600182614da9565b609e555b8315610f3d57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610df2816137f8565b15610e78575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610e4a908490614d96565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ef5575060a85481145b15610eff575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610daa575b505050505050565b60a85415610faf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610ac8565b610fb7613a5c565b5f80610fc38484613a41565b915091505f610fd6836001015160c01c90565b5f81815260a16020526040902054909150821461104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610ac8565b61105881611542565b6110be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610ac8565b6110c7816137f8565b1561112e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610ac8565b5f81815260a4602052604090206003015460ff16156111a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610ac8565b5f81815260a26020526040902060010154421015611223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610ac8565b605983015160a05f611236600185614da9565b81526020019081526020015f2054146112ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610ac8565b5f81815260a0602052604090205415611320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610ac8565b80609d546001011461138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610ac8565b609d819055600160a35f6113a3866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561140e60f98401601185015160c01c600986015160c01c613ac9565b60a25f61141c600184614da9565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906114559084614da9565b81526020019081526020015f205f905560a45f6001836114759190614da9565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61151e866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061156a57505f82815260a1602052604090205415155b92915050565b6115786139c0565b5f8111801561158957506099548114155b6115ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610ac8565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b61163d6139c0565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff166116cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610ac8565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b4e565b61174c6139c0565b6117555f613b9f565b565b5f54610100900460ff161580801561177557505f54600160ff909116105b8061178e5750303b15801561178e57505f5460ff166001145b61181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ac8565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611876575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806118ad575073ffffffffffffffffffffffffffffffffffffffff8516155b156118e4576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610ac8565b611969613c15565b611971613cb3565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611b17575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611b286139c0565b73ffffffffffffffffffffffffffffffffffffffff811615801590611b685750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610ac8565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611c4c6139c0565b5f81118015611c5c575060648111155b8015611c6a575060a9548114155b611cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610ac8565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611629565b60a85415611d78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610ac8565b611d80613a5c565b5f80611d8c8686613a41565b915091505f611d9f836001015160c01c90565b5f81815260a160205260409020549091508214611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610ac8565b611e21816137f8565b611e87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610ac8565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556099546002909101544291611efe91614d96565b11611f92575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152611f8d91839190613d51565b611b17565b611f9d838686613ed4565b611b1781336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506140ae565b611fe56139c0565b60aa80545f909155611ff78282614194565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611629565b61204b6139c0565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156120dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610ac8565b5f806120e88484613a41565b915091505f6120fb836001015160c01c90565b90505f612109846079015190565b905080612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610ac8565b600984015160c01c156121e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610ac8565b5f6121ed856019015190565b03612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610ac8565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612280856039015190565b146122e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610ac8565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6123cf6139c0565b8015612528576123dd614266565b60a65460ff16156124da5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a5909252822080549192909161243e908490614d96565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6125306142eb565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336124fd565b50565b335f908152609f602052604090205460ff166125d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610ac8565b60a8541561263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610ac8565b612644613a5c565b60a65460ff16156126b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610ac8565b8167ffffffffffffffff16609d5410612726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610ac8565b67ffffffffffffffff82165f90815260a1602052604090205481146127a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610ac8565b6127ba8267ffffffffffffffff16611542565b612820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610ac8565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16156128c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610ac8565b67ffffffffffffffff82165f90815260a26020526040902060010154421061296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610ac8565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129fa9190614dbc565b341015612a63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610ac8565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612bcf91815260200190565b60405180910390a35f609d546001612be79190614d96565b90505b609e548111612c3f578267ffffffffffffffff168114612c2d576099545f82815260a2602052604081206001018054909190612c27908490614d96565b90915550505b80612c3781614dd3565b915050612bea565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a5602052604081205490819003612ce8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610ac8565b335f90815260a56020526040812055612d018282614194565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051612d4991815260200190565b60405180910390a25050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612ddb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dff9190614e0a565b612e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610ac8565b60a85415612ecf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610ac8565b612ed7613a5c565b612ee46020830183614e25565b60ff1615612f4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610ac8565b5f612f5c6040840184614e45565b91505080612fc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610ac8565b6080830135613031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610ac8565b60a083013561309c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610ac8565b5f806130b36130ae6020870187614e45565b613a41565b915091505f6130c6836001015160c01c90565b90505f60a1816130d7846001614d96565b81526020019081526020015f20541461314c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610ac8565b609e5481146131b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610ac8565b5f81815260a16020526040902054821461322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610ac8565b5f81815260ab60205260409020546080870135146132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610ac8565b5f6132b6846011015160c01c90565b90505f80806133156132cb60408c018c614e45565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150613310905060608f018f614e45565b614342565b94850194938401939250905061332e60608b018b614e45565b905061010060ff850104602002146133a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610ac8565b600194909401935f8049156133b8575f496133da565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f6133ea60608d018d614e45565b6133f6915060f9614d96565b90506040519850602081028901604052613424898d5f01602081019061341c9190614e25565b60ff166144dd565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a01526134918961347260208e018e614e45565b604051613480929190614ea6565b604051809103902060b99190910152565b60d989018890526134ae896134a960608f018f614e45565b6144e4565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156135145760a7545f90815260a46020526040902060020154609954429161350791614d96565b6135119190614da9565b90505b604051806080016040528042815260200182609854426135349190614d96565b61353e9190614d96565b815260200161358f8f80604001906135569190614e45565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506144f092505050565b815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561361d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136419190614dbc565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e89905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508c35906136b6906136b0908f018f614e45565b5f614547565b5f8e80604001906136c79190614e45565b6040518663ffffffff1660e01b81526004016136e7959493929190614efc565b602060405180830381865afa158015613702573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137269190614e0a565b6137b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610ac8565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161580159061156a5750505f90815260a46020526040902060030154610100900460ff161590565b6138576139c0565b5f8111801561386857506098548114155b6138ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610ac8565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611629565b6139146139c0565b73ffffffffffffffffffffffffffffffffffffffff81166139b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ac8565b61255781613b9f565b60335473ffffffffffffffffffffffffffffffffffffffff163314611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac8565b5f805f613a4e858561459b565b812090969095509350505050565b60655460ff1615611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610ac8565b805f03613ad557505050565b8082035f805b83811015610f3d57610100818503811115613af557508084035b8651609b546040517f55f613ce00000000000000000000000000000000000000000000000000000000815260048101879052602481018490526044810183905260209099019891945073ffffffffffffffffffffffffffffffffffffffff16906355f613ce906064015f604051808303815f87803b158015613b75575f80fd5b505af1158015613b87573d5f803e3d5ffd5b50505050610100840193505061010081019050613adb565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613cab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ac8565b6117556146a6565b5f54610100900460ff16613d49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ac8565b611755614766565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015613de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e069190614dbc565b5f86815260a46020526040902060010154909150613e25908290614d96565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190613e71908490614d96565b9091555050604051613e84908490614f7c565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80613f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610ac8565b5f613f4a846001015160c01c90565b90505f613f58856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613f87876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614056885160f81c90565b858888866040518663ffffffff1660e01b815260040161407a959493929190614fa8565b5f6040518083038186803b158015614090575f80fd5b505afa1580156140a2573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a9549091906064906140d29084614fd9565b6140dc9190614ff0565b90506140e88183614da9565b60aa5f8282546140f89190614d96565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614131908490614d96565b9091555050604051614144908490614f7c565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614262575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146141f0576040519150601f19603f3d011682016040523d82523d5f602084013e6141f5565b606091505b5050905080614260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610ac8565b505b5050565b61426e613a5c565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142c13390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6142f3614805565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336142c1565b60405185515f91829160208901919081908490614360908590614871565b90506002840193505f5b818110156143e457603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f6143ba603c83614fd9565b6143c49087614d96565b90505f6143d582603a015160f01c90565b9790970196505060010161436a565b506020850282016040525b80156144c9575f61440485603a015160f01c90565b905061441483828d8d8d8d614906565b92505f614425866038015160f01c90565b905081811015614491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610ac8565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016143ef565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f61450b828651614871565b90505f5b61451a600183614da9565b81101561453057603c939093019260010161450f565b505f61453d845160c01c90565b9695505050505050565b60605f8080808061455a888a018a615115565b95509550955095509550508187106145785794506145949350505050565b83871061458c578295505050505050614594565b509293505050505b9392505050565b5f8160f9811015614608576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610ac8565b6040519150808483378082016040525f614626836009015160c01c90565b905061010060ff82010460200260f901821461469e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610ac8565b509250929050565b5f54610100900460ff1661473c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ac8565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff166147fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ac8565b61175533613b9f565b60655460ff16611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610ac8565b5f61487d835160f01c90565b9050805f036148b8576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148c3603c82614fd9565b6148ce906002614d96565b821461156a576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f0361491557508561453d565b609b5473ffffffffffffffffffffffffffffffffffffffff165f80805b89811015614a155760ff89169150600889901c811580614950575082155b1561495f578060200288013593505b600184841c165f03614a04576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f9073ffffffffffffffffffffffffffffffffffffffff87169063ae453cd590602401602060405180830381865afa1580156149d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149fa9190614dbc565b8d52506020909b019a5b506001988901989788019701614932565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c60011615614aaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610ac8565b509798975050505050505050565b5f60208284031215614ac8575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614af2575f80fd5b919050565b5f60208284031215614b07575f80fd5b61459482614acf565b5f8083601f840112614b20575f80fd5b50813567ffffffffffffffff811115614b37575f80fd5b602083019150836020828501011115614b4e575f80fd5b9250929050565b5f805f60408486031215614b67575f80fd5b833567ffffffffffffffff811115614b7d575f80fd5b614b8986828701614b10565b909790965060209590950135949350505050565b5f8060208385031215614bae575f80fd5b823567ffffffffffffffff811115614bc4575f80fd5b614bd085828601614b10565b90969095509350505050565b5f805f805f8060c08789031215614bf1575f80fd5b614bfa87614acf565b9550614c0860208801614acf565b9450614c1660408801614acf565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614c4a575f80fd5b843567ffffffffffffffff80821115614c61575f80fd5b614c6d88838901614b10565b90965094506020870135915080821115614c85575f80fd5b50614c9287828801614b10565b95989497509550505050565b8015158114612557575f80fd5b5f60208284031215614cbb575f80fd5b813561459481614c9e565b5f8060408385031215614cd7575f80fd5b823567ffffffffffffffff81168114614cee575f80fd5b946020939093013593505050565b5f8060408385031215614d0d575f80fd5b823567ffffffffffffffff80821115614d24575f80fd5b9084019060e08287031215614d37575f80fd5b90925060208401359080821115614d4c575f80fd5b50830160608186031215614d5e575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561156a5761156a614d69565b8181038181111561156a5761156a614d69565b5f60208284031215614dcc575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e0357614e03614d69565b5060010190565b5f60208284031215614e1a575f80fd5b815161459481614c9e565b5f60208284031215614e35575f80fd5b813560ff81168114614594575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614e78575f80fd5b83018035915067ffffffffffffffff821115614e92575f80fd5b602001915036819003821315614b4e575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614f5357845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101614f21565b50508760408601528481036060860152614f6e818789614eb5565b9a9950505050505050505050565b5f82515f5b81811015614f9b5760208186018101518583015201614f81565b505f920191825250919050565b858152846020820152608060408201525f614fc7608083018587614eb5565b90508260608301529695505050505050565b808202811582820484141761156a5761156a614d69565b5f82615023577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615064575f80fd5b8135602067ffffffffffffffff8083111561508157615081615028565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156150c4576150c4615028565b60405293845260208187018101949081019250878511156150e3575f80fd5b6020870191505b8482101561510a576150fb82614acf565b835291830191908301906150ea565b979650505050505050565b5f805f805f8060c0878903121561512a575f80fd5b86359550602087013567ffffffffffffffff80821115615148575f80fd5b6151548a838b01615055565b9650604089013595506060890135915080821115615170575f80fd5b61517c8a838b01615055565b94506080890135935060a0890135915080821115615198575f80fd5b506151a589828a01615055565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610306575f3560e01c806388b1ea0911610191578063b3e0a509116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd14610a0c578063f2fde38b14610a2b578063fb1e8b0414610a4a575f80fd5b8063ddd8a3dc146109ac578063de8b3035146109d8578063dff7827e146109f7575f80fd5b8063ce5db8d6116100b7578063ce5db8d614610965578063d279c1911461097a578063d63b354914610999575f80fd5b8063b3e0a50914610914578063bedb86fb14610933578063cd4edc6914610952575f80fd5b8063a479265d1161013c578063b31a77d311610117578063b31a77d3146108c1578063b3484425146108d6578063b35dac4e146108f5575f80fd5b8063a479265d14610862578063a4f209b014610877578063abc8d68d14610896575f80fd5b8063910129d41161016c578063910129d4146107e457806397fc007c14610815578063a415d8dc14610834575f80fd5b806388b1ea09146106d75780638da5cb5b146106f05780638f1d37761461071a575f80fd5b80632b7ac3f3116102515780635f77cf1d116101fc5780636c578c1d116101d75780636c578c1d14610685578063715018a6146106a4578063728cdbca146106b8575f80fd5b80635f77cf1d146105ef578063612672901461063b57806368589dfa1461065a575f80fd5b806357e0af6c1161022c57806357e0af6c146105595780635c975abb146105785780635ef7a94a1461058f575f80fd5b80632b7ac3f3146104c75780633b70c18a146105185780633e001b6614610544575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b366004614dad565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614dec565b610a5f565b005b3480156103a3575f80fd5b506103966103b2366004614e4a565b610b83565b3480156103c2575f80fd5b5061033f6103d1366004614dad565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b50610396610408366004614e92565b610f6f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c366004614dad565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c366004614dad565b61156c565b34801561047c575f80fd5b5061036961048b366004614dad565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b6366004614dad565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034b565b348015610523575f80fd5b50609b546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054f575f80fd5b5061036960aa5481565b348015610564575f80fd5b50610396610573366004614dad565b61159a565b348015610583575f80fd5b5060655460ff1661033f565b34801561059a575f80fd5b506105cf6105a9366004614dad565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105fa575f80fd5b506106227f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610646575f80fd5b50610396610655366004614dad565b61165f565b348015610665575f80fd5b50610369610674366004614dad565b60ab6020525f908152604090205481565b348015610690575f80fd5b5061039661069f366004614dec565b6118c2565b3480156106af575f80fd5b506103966119d1565b3480156106c3575f80fd5b506103966106d2366004614ed1565b6119e4565b3480156106e2575f80fd5b5060a65461033f9060ff1681565b3480156106fb575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166104f3565b348015610725575f80fd5b50610793610734366004614dad565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107ef575f80fd5b5061033f6107fe366004614dad565b5f90815260a4602052604090206003015460ff1690565b348015610820575f80fd5b5061039661082f366004614dec565b611dad565b34801561083f575f80fd5b5061033f61084e366004614dec565b609f6020525f908152604090205460ff1681565b34801561086d575f80fd5b5061036960995481565b348015610882575f80fd5b50610396610891366004614dad565b611ed1565b3480156108a1575f80fd5b506103696108b0366004614dec565b60a56020525f908152604090205481565b3480156108cc575f80fd5b5061036960a85481565b3480156108e1575f80fd5b506103966108f0366004614f2c565b611f9b565b348015610900575f80fd5b5061039661090f366004614dec565b61226a565b34801561091f575f80fd5b5061039661092e366004614e92565b6122d0565b34801561093e575f80fd5b5061039661094d366004614fa0565b6126bc565b610396610960366004614fbb565b61284f565b348015610970575f80fd5b5061036960985481565b348015610985575f80fd5b50610396610994366004614dec565b612f64565b6103966109a7366004614ff1565b61304a565b3480156109b7575f80fd5b506097546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156109e3575f80fd5b5061033f6109f2366004614dad565b613aed565b348015610a02575f80fd5b50610369609a5481565b348015610a17575f80fd5b50610396610a26366004614dad565b613b44565b348015610a36575f80fd5b50610396610a45366004614dec565b613c01565b348015610a55575f80fd5b5061036960a95481565b610a67613cb5565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b8b613cb5565b5f8111610bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610af2565b5f80610c008585613d36565b915091505f610c13836001015160c01c90565b5f81815260a160205260409020549091508214610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b5f60a181610c9a878561508b565b81526020019081526020015f205414610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610af2565b609d548111610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b610dd060018261509e565b609e555b8315610f6757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e1c81613aed565b15610ea2575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610e7490849061508b565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610f1f575060a85481145b15610f29575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610dd4575b505050505050565b60a85415610fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b610fe1613d51565b5f80610fed8484613d36565b915091505f611000836001015160c01c90565b5f81815260a160205260409020549091508214611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6110828161156c565b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b6110f181613aed565b15611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003015460ff16156111d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610af2565b5f81815260a2602052604090206001015442101561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610af2565b605983015160a05f61126060018561509e565b81526020019081526020015f2054146112d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f81815260a060205260409020541561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610af2565b80609d54600101146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b609d819055600160a35f6113cd866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561143860f98401601185015160c01c600986015160c01c613dbe565b60a25f61144660018461509e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061147f908461509e565b81526020019081526020015f205f905560a45f60018361149f919061509e565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611548866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061159457505f82815260a1602052604090205415155b92915050565b6115a2613cb5565b5f811180156115b357506099548114155b611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610af2565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561167f57505f5460ff8083169116105b61170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556117465f5460ff1690565b60ff166002146117b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610af2565b8161183f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610af2565b609e545f90815260ab602052604090205461186857609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611653565b6118ca613cb5565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610af2565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b78565b6119d9613cb5565b6119e25f613e94565b565b5f54610100900460ff1615808015611a0257505f54600160ff909116105b80611a1b5750303b158015611a1b57505f5460ff166001145b611aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611b03575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580611b3a575073ffffffffffffffffffffffffffffffffffffffff8516155b15611b71576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610af2565b611bf6613f0a565b611bfe613fa8565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611da4575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611db5613cb5565b73ffffffffffffffffffffffffffffffffffffffff811615801590611df55750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b611e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610af2565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611ed9613cb5565b5f81118015611ee9575060648111155b8015611ef7575060a9548114155b611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610af2565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611653565b60a85415612005576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b61200d613d51565b5f806120198686613d36565b915091505f61202c836001015160c01c90565b5f81815260a1602052604090205490915082146120a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6120ae81613aed565b612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161218b9161508b565b1161221f575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261221a91839190614046565b611da4565b61222a8386866141c9565b611da481336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506143a3565b612272613cb5565b60aa80545f9091556122848282614489565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611653565b6122d8613cb5565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610af2565b5f806123758484613d36565b915091505f612388836001015160c01c90565b905080156123f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610af2565b5f6123fe846079015190565b905080612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610af2565b600984015160c01c156124d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610af2565b5f6124e2856019015190565b03612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610af2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612575856039015190565b146125dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610af2565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6126c4613cb5565b801561281d576126d261455b565b60a65460ff16156127cf5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a5909252822080549192909161273390849061508b565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6128256145e0565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f2565b50565b335f908152609f602052604090205460ff166128c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610af2565b60a85415612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b612939613d51565b60a65460ff16156129a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610af2565b8167ffffffffffffffff16609d5410612a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a160205260409020548114612a9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b612aaf8267ffffffffffffffff1661156c565b612b15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615612bb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610af2565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ccb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cef91906150b1565b341015612d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612ec491815260200190565b60405180910390a35f609d546001612edc919061508b565b90505b609e548111612f34578267ffffffffffffffff168114612f22576099545f82815260a2602052604081206001018054909190612f1c90849061508b565b90915550505b80612f2c816150c8565b915050612edf565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a5602052604081205490819003612fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610af2565b335f90815260a56020526040812055612ff68282614489565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161303e91815260200190565b60405180910390a25050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156130d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130f491906150ff565b61315a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610af2565b60a854156131c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b6131cc613d51565b6131d9602083018361511a565b60ff1615613243576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610af2565b5f613251604084018461513a565b915050806132bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f626174636820697320656d7074790000000000000000000000000000000000006044820152606401610af2565b6080830135613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610af2565b60a0830135613391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610af2565b5f806133a86133a3602087018761513a565b613d36565b915091505f6133bb836001015160c01c90565b90505f60a1816133cc84600161508b565b81526020019081526020015f205414613441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610af2565b609e5481146134ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b5f81815260a160205260409020548214613522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610af2565b5f81815260ab602052604090205460808701351461359c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f6135ab846011015160c01c90565b90505f808061360a6135c060408c018c61513a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250879250889150613605905060608f018f61513a565b614637565b94850194938401939250905061362360608b018b61513a565b905061010060ff85010460200214613697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610af2565b600194909401935f8049156136ad575f496136cf565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b90505f6136df60608d018d61513a565b6136eb915060f961508b565b90506040519850602081028901604052613719898d5f016020810190613711919061511a565b60ff166147d2565b60c087811b60018b015285811b60098b015286811b60118b015260198a0184905260808d013560598b015260a08d013560798b01528c013560998a01526137868961376760208e018e61513a565b60405161377592919061519b565b604051809103902060b99190910152565b60d989018890526137a38961379e60608f018f61513a565b6147d9565b603989018290528089205f88815260a1602090815260408083209390935560ab905290812060a08e0135905560a65460ff16156138095760a7545f90815260a4602052604090206002015460995442916137fc9161508b565b613806919061509e565b90505b60405180608001604052804281526020018260985442613829919061508b565b613833919061508b565b81526020016138848f806040019061384b919061513a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506147e592505050565b815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015613912573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393691906150b1565b90525f89815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e89905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508c35906139ab906139a5908f018f61513a565b5f61483c565b5f8e80604001906139bc919061513a565b6040518663ffffffff1660e01b81526004016139dc9594939291906151f1565b602060405180830381865afa1580156139f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1b91906150ff565b613aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b5f86815260a16020526040808220549051909188917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050505050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906115945750505f90815260a46020526040902060030154610100900460ff161590565b613b4c613cb5565b5f81118015613b5d57506098548114155b613bc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610af2565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611653565b613c09613cb5565b73ffffffffffffffffffffffffffffffffffffffff8116613cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610af2565b61284c81613e94565b60335473ffffffffffffffffffffffffffffffffffffffff1633146119e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610af2565b5f805f613d438585614890565b812090969095509350505050565b60655460ff16156119e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610af2565b805f03613dca57505050565b8082035f805b83811015610f6757610100818503811115613dea57508084035b8651609b546040517f55f613ce00000000000000000000000000000000000000000000000000000000815260048101879052602481018490526044810183905260209099019891945073ffffffffffffffffffffffffffffffffffffffff16906355f613ce906064015f604051808303815f87803b158015613e6a575f80fd5b505af1158015613e7c573d5f803e3d5ffd5b50505050610100840193505061010081019050613dd0565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613fa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6119e261499b565b5f54610100900460ff1661403e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6119e2614a5b565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af11580156140d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140fb91906150b1565b5f86815260a4602052604090206001015490915061411a90829061508b565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a59091528120805490919061416690849061508b565b9091555050604051614179908490615271565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80614230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610af2565b5f61423f846001015160c01c90565b90505f61424d856039015190565b90505f7f000000000000000000000000000000000000000000000000000000000000000061427c876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861434b885160f81c90565b858888866040518663ffffffff1660e01b815260040161436f95949392919061529d565b5f6040518083038186803b158015614385575f80fd5b505afa158015614397573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a9549091906064906143c790846152ce565b6143d191906152e5565b90506143dd818361509e565b60aa5f8282546143ed919061508b565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a560205260408120805483929061442690849061508b565b9091555050604051614439908490615271565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015614557575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146144e5576040519150601f19603f3d011682016040523d82523d5f602084013e6144ea565b606091505b5050905080614555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610af2565b505b5050565b614563613d51565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586145b63390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6145e8614afa565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336145b6565b60405185515f91829160208901919081908490614655908590614b66565b90506002840193505f5b818110156146d957603c81028501805184526020908101517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001690840152603a830192505f6146af603c836152ce565b6146b9908761508b565b90505f6146ca82603a015160f01c90565b9790970196505060010161465f565b506020850282016040525b80156147be575f6146f985603a015160f01c90565b905061470983828d8d8d8d614bfb565b92505f61471a866038015160f01c90565b905081811015614786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6e756d20747873206c657373207468616e206e756d204c31206d7367730000006044820152606401610af2565b50998a01999890980197603c93909301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016146e4565b508190039020989197509095505050505050565b8082535050565b808260f9850137505050565b5f805f6020840190506002810191505f614800828651614b66565b90505f5b61480f60018361509e565b81101561482557603c9390930192600101614804565b505f614832845160c01c90565b9695505050505050565b60605f8080808061484f888a018a61540a565b955095509550955095505081871061486d5794506148899350505050565b838710614881578295505050505050614889565b509293505050505b9392505050565b5f8160f98110156148fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610af2565b6040519150808483378082016040525f61491b836009015160c01c90565b905061010060ff82010460200260f9018214614993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206269746d6170206c656e677468000000000000000000000000006044820152606401610af2565b509250929050565b5f54610100900460ff16614a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16614af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6119e233613e94565b60655460ff166119e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610af2565b5f614b72835160f01c90565b9050805f03614bad576040517f5168407700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614bb8603c826152ce565b614bc390600261508b565b8214611594576040517f4a969e2d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f855f03614c0a575085614832565b609b5473ffffffffffffffffffffffffffffffffffffffff165f80805b89811015614d0a5760ff89169150600889901c811580614c45575082155b15614c54578060200288013593505b600184841c165f03614cf9576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018a90525f9073ffffffffffffffffffffffffffffffffffffffff87169063ae453cd590602401602060405180830381865afa158015614ccb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cef91906150b1565b8d52506020909b019a5b506001988901989788019701614c27565b505060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88011681811c60011615614d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f7420736b6970206c617374204c31206d65737361676500000000006044820152606401610af2565b509798975050505050505050565b5f60208284031215614dbd575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614de7575f80fd5b919050565b5f60208284031215614dfc575f80fd5b61488982614dc4565b5f8083601f840112614e15575f80fd5b50813567ffffffffffffffff811115614e2c575f80fd5b602083019150836020828501011115614e43575f80fd5b9250929050565b5f805f60408486031215614e5c575f80fd5b833567ffffffffffffffff811115614e72575f80fd5b614e7e86828701614e05565b909790965060209590950135949350505050565b5f8060208385031215614ea3575f80fd5b823567ffffffffffffffff811115614eb9575f80fd5b614ec585828601614e05565b90969095509350505050565b5f805f805f8060c08789031215614ee6575f80fd5b614eef87614dc4565b9550614efd60208801614dc4565b9450614f0b60408801614dc4565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614f3f575f80fd5b843567ffffffffffffffff80821115614f56575f80fd5b614f6288838901614e05565b90965094506020870135915080821115614f7a575f80fd5b50614f8787828801614e05565b95989497509550505050565b801515811461284c575f80fd5b5f60208284031215614fb0575f80fd5b813561488981614f93565b5f8060408385031215614fcc575f80fd5b823567ffffffffffffffff81168114614fe3575f80fd5b946020939093013593505050565b5f8060408385031215615002575f80fd5b823567ffffffffffffffff80821115615019575f80fd5b9084019060e0828703121561502c575f80fd5b90925060208401359080821115615041575f80fd5b50830160608186031215615053575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156115945761159461505e565b818103818111156115945761159461505e565b5f602082840312156150c1575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150f8576150f861505e565b5060010190565b5f6020828403121561510f575f80fd5b815161488981614f93565b5f6020828403121561512a575f80fd5b813560ff81168114614889575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261516d575f80fd5b83018035915067ffffffffffffffff821115615187575f80fd5b602001915036819003821315614e43575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561524857845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615216565b505087604086015284810360608601526152638187896151aa565b9a9950505050505050505050565b5f82515f5b818110156152905760208186018101518583015201615276565b505f920191825250919050565b858152846020820152608060408201525f6152bc6080830185876151aa565b90508260608301529695505050505050565b80820281158282048414176115945761159461505e565b5f82615318577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615359575f80fd5b8135602067ffffffffffffffff808311156153765761537661531d565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156153b9576153b961531d565b60405293845260208187018101949081019250878511156153d8575f80fd5b6020870191505b848210156153ff576153f082614dc4565b835291830191908301906153df565b979650505050505050565b5f805f805f8060c0878903121561541f575f80fd5b86359550602087013567ffffffffffffffff8082111561543d575f80fd5b6154498a838b0161534a565b9650604089013595506060890135915080821115615465575f80fd5b6154718a838b0161534a565b94506080890135935060a089013591508082111561548d575f80fd5b5061549a89828a0161534a565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index cd1e8a9e9..b9ca1afd2 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -174,6 +174,15 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { emit UpdateProofRewardPercent(0, _proofRewardPercent); } + function initialize2(bytes32 _prevStateRoot) external reinitializer(2) { + require(_getInitializedVersion() == 2, "must have initialized!"); + require(_prevStateRoot != bytes32(0), "can not set state root with bytes32(0)!"); + + if (committedStateRoots[lastCommittedBatchIndex] == bytes32(0)) { + committedStateRoots[lastCommittedBatchIndex] = _prevStateRoot; + } + } + /************************ * Restricted Functions * ************************/ @@ -185,6 +194,8 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); uint256 _batchIndex = BatchHeaderCodecV0.getBatchIndex(memPtr); + // check batch index is 0 + require(_batchIndex == 0, "invalid batch index"); bytes32 _postStateRoot = BatchHeaderCodecV0.getPostStateHash(memPtr); require(_postStateRoot != bytes32(0), "zero state root"); // check all fields except `dataHash` and `lastBlockHash` are zero diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 0e3464caf..05a9c46ed 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -714,6 +714,15 @@ contract RollupTest is L1MessageBaseTest { function test_importGenesisBlock_succeeds() public { bytes memory batchHeader; bytes32 bytesData1 = bytes32(uint256(1)); + // invalid batch index, revert + batchHeader = new bytes(249); + assembly { + mstore(add(batchHeader, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 + } + hevm.expectRevert("invalid batch index"); + hevm.prank(multisig); + rollup.importGenesisBatch(batchHeader); + // zero state root, revert batchHeader = new bytes(249); hevm.expectRevert("zero state root"); diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 0255a5981..51e3875fa 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -17,6 +17,7 @@ import "./tasks/proxy_upgrade" import "./tasks/staking_upgrade" import "./tasks/verifier_upgrade" import "./tasks/token_deploy" +import "./tasks/mainnet_upgrade" import "./src/plugin" import * as process from "process"; diff --git a/contracts/tasks/mainnet_upgrade.ts b/contracts/tasks/mainnet_upgrade.ts new file mode 100644 index 000000000..bd5af77f1 --- /dev/null +++ b/contracts/tasks/mainnet_upgrade.ts @@ -0,0 +1,25 @@ +import "@nomiclabs/hardhat-web3"; +import "@nomiclabs/hardhat-ethers"; +import "@nomiclabs/hardhat-waffle"; + +import { task } from "hardhat/config"; +import { ContractFactoryName } from "../src/types"; + +task("rollup-upgrade-hc") + .addParam("l2cid") + .addParam("prevStateRoot") + .setAction(async (taskArgs, hre) => { + const chainId = taskArgs.l2cid + + const RollupFactoryName = ContractFactoryName.Rollup + + const RollupFactory = await hre.ethers.getContractFactory(RollupFactoryName) + const rollupNewImpl = await RollupFactory.deploy(chainId) + await rollupNewImpl.deployed() + let blockNumber = await hre.ethers.provider.getBlockNumber() + console.log(`Rollup new impl deploy at ${rollupNewImpl.address} and height ${blockNumber}`) + + console.log("initialize2 abi code: ", RollupFactory.interface.encodeFunctionData('initialize2', [ + taskArgs.prevStateRoot, + ])) + }) diff --git a/tx-submitter/entry.go b/tx-submitter/entry.go index 1b9809b3a..2687ed8e3 100644 --- a/tx-submitter/entry.go +++ b/tx-submitter/entry.go @@ -16,6 +16,7 @@ import ( "morph-l2/tx-submitter/db" "morph-l2/tx-submitter/event" "morph-l2/tx-submitter/iface" + "morph-l2/tx-submitter/l1checker" "morph-l2/tx-submitter/metrics" "morph-l2/tx-submitter/services" "morph-l2/tx-submitter/utils" @@ -194,6 +195,9 @@ func Main() func(ctx *cli.Context) error { return fmt.Errorf("failed to connect leveldb: %w", err) } + // blockmonitor + bm := l1checker.NewBlockMonitor(cfg.BlockNotIncreasedThreshold, l1Client) + // new rollup service sr := services.NewRollup( ctx, @@ -211,6 +215,7 @@ func Main() func(ctx *cli.Context) error { rsaPriv, rotator, ldb, + bm, ) // metrics diff --git a/tx-submitter/flags/flags.go b/tx-submitter/flags/flags.go index 522546488..041cf2db5 100644 --- a/tx-submitter/flags/flags.go +++ b/tx-submitter/flags/flags.go @@ -298,6 +298,14 @@ var ( EnvVar: prefixEnvVar("LEVELDB_PATH_NAME"), Value: "submitter-leveldb", } + + // l1 block not incremented threshold + BlockNotIncreasedThreshold = cli.Int64Flag{ + Name: "block_not_increased_threshold", + Usage: "The threshold for block not incremented", + Value: 5, + EnvVar: prefixEnvVar("BLOCK_NOT_INCREASED_THRESHOLD"), + } ) var requiredFlags = []cli.Flag{ @@ -352,6 +360,7 @@ var optionalFlags = []cli.Flag{ StakingEventStoreFileFlag, EventIndexStepFlag, LeveldbPathNameFlag, + BlockNotIncreasedThreshold, } // Flags contains the list of configuration options available to the binary. diff --git a/tx-submitter/l1checker/blockmonitor.go b/tx-submitter/l1checker/blockmonitor.go new file mode 100644 index 000000000..9c870809b --- /dev/null +++ b/tx-submitter/l1checker/blockmonitor.go @@ -0,0 +1,67 @@ +package l1checker + +import ( + "context" + "sync" + "time" + + "morph-l2/tx-submitter/iface" + + "github.com/morph-l2/go-ethereum/log" +) + +const blockTime = time.Second * 12 + +type IBlockMonitor interface { + BlockNotIncreasedIn(time.Duration) bool +} + +type BlockMonitor struct { + blockGenerateTime time.Duration //12s for Dencun + latestBlockTime time.Time + noGrowthBlockCntTime time.Duration + client iface.L1Client + mu sync.Mutex +} + +func NewBlockMonitor(notGrowthInBlocks int64, client iface.L1Client) *BlockMonitor { + return &BlockMonitor{ + blockGenerateTime: blockTime, + latestBlockTime: time.Time{}, + noGrowthBlockCntTime: time.Duration(notGrowthInBlocks) * blockTime, + client: client, + } +} + +func (m *BlockMonitor) StartMonitoring() { + ticker := time.NewTicker(m.blockGenerateTime) + for ; ; <-ticker.C { + header, err := m.client.HeaderByNumber(context.Background(), nil) + if err != nil { + log.Warn("failed to get block in blockmonitor", "error", err) + continue + } + m.SetLatestBlockTime(time.Unix(int64(header.Time), 0)) + } +} + +func (m *BlockMonitor) IsGrowth() bool { + t := m.GetLatestBlockTime() + if t.IsZero() { + log.Warn("latest block time is zero") + return false + } + return time.Since(t) < m.noGrowthBlockCntTime +} + +func (m *BlockMonitor) SetLatestBlockTime(t time.Time) { + m.mu.Lock() + defer m.mu.Unlock() + m.latestBlockTime = t +} + +func (m *BlockMonitor) GetLatestBlockTime() time.Time { + m.mu.Lock() + defer m.mu.Unlock() + return m.latestBlockTime +} diff --git a/tx-submitter/l1checker/blockmonitor_test.go b/tx-submitter/l1checker/blockmonitor_test.go new file mode 100644 index 000000000..846e814ce --- /dev/null +++ b/tx-submitter/l1checker/blockmonitor_test.go @@ -0,0 +1,23 @@ +package l1checker + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestIsGrowth(t *testing.T) { + + blockCnt := int64(2) + monitor := NewBlockMonitor(blockCnt, nil) + monitor.latestBlockTime = time.Time{} + require.Equal(t, false, monitor.IsGrowth()) + + monitor.latestBlockTime = time.Now() + require.Equal(t, true, monitor.IsGrowth()) + + monitor.latestBlockTime = time.Now().Add(-monitor.noGrowthBlockCntTime) + require.Equal(t, false, monitor.IsGrowth()) + +} diff --git a/tx-submitter/services/rollup.go b/tx-submitter/services/rollup.go index 63a654123..d944b5bd4 100644 --- a/tx-submitter/services/rollup.go +++ b/tx-submitter/services/rollup.go @@ -30,6 +30,7 @@ import ( "morph-l2/tx-submitter/db" "morph-l2/tx-submitter/event" "morph-l2/tx-submitter/iface" + "morph-l2/tx-submitter/l1checker" "morph-l2/tx-submitter/localpool" "morph-l2/tx-submitter/metrics" "morph-l2/tx-submitter/utils" @@ -75,6 +76,7 @@ type Rollup struct { collectedL1FeeSum float64 // batchcache batchCache map[uint64]*eth.RPCRollupBatch + bm *l1checker.BlockMonitor } func NewRollup( @@ -93,6 +95,7 @@ func NewRollup( rsaPriv *rsa.PrivateKey, rotator *Rotator, ldb *db.Db, + bm *l1checker.BlockMonitor, ) *Rollup { return &Rollup{ @@ -113,6 +116,7 @@ func NewRollup( externalRsaPriv: rsaPriv, batchCache: make(map[uint64]*eth.RPCRollupBatch), ldb: ldb, + bm: bm, } } @@ -144,6 +148,10 @@ func (r *Rollup) Start() error { return fmt.Errorf("init fee metrics sum failed: %w", err) } + /// start services + // start l1 monitor + go r.bm.StartMonitoring() + // metrics go utils.Loop(r.ctx, 10*time.Second, func() { @@ -1090,6 +1098,10 @@ func (r *Rollup) SendTx(tx *types.Transaction) error { if tx == nil { return errors.New("nil tx") } + // l1 health check + if !r.bm.IsGrowth() { + return fmt.Errorf("block not growth in %d blocks time", r.cfg.BlockNotIncreasedThreshold) + } err := sendTx(r.L1Client, r.cfg.TxFeeLimit, tx) if err != nil { diff --git a/tx-submitter/utils/config.go b/tx-submitter/utils/config.go index 3d63fa042..30decb206 100644 --- a/tx-submitter/utils/config.go +++ b/tx-submitter/utils/config.go @@ -105,7 +105,8 @@ type Config struct { // event indexer index step EventIndexStep uint64 // leveldb path name - LeveldbPathName string + LeveldbPathName string + BlockNotIncreasedThreshold int64 } // NewConfig parses the DriverConfig from the provided flags or environment variables. @@ -175,6 +176,8 @@ func NewConfig(ctx *cli.Context) (Config, error) { EventIndexStep: ctx.GlobalUint64(flags.EventIndexStepFlag.Name), // leveldb path name LeveldbPathName: ctx.GlobalString(flags.LeveldbPathNameFlag.Name), + // BlockNotIncreasedThreshold + BlockNotIncreasedThreshold: ctx.GlobalInt64(flags.BlockNotIncreasedThreshold.Name), } return cfg, nil