From 0dc7d5c5f8525adba30abd1e0b52f0f94b89fb98 Mon Sep 17 00:00:00 2001 From: Stefan Iliev <46542846+StefanIliev545@users.noreply.github.com> Date: Thu, 27 Jun 2024 13:33:12 +0300 Subject: [PATCH] Fix for integration test. (#1971) Co-authored-by: StefanIliev545 --- contracts/generated/ManagementContract/ManagementContract.go | 2 +- contracts/src/management/ManagementContract.sol | 2 +- go/host/l1/statemachine.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/generated/ManagementContract/ManagementContract.go b/contracts/generated/ManagementContract/ManagementContract.go index 0ceda27945..03db3ed688 100644 --- a/contracts/generated/ManagementContract/ManagementContract.go +++ b/contracts/generated/ManagementContract/ManagementContract.go @@ -62,7 +62,7 @@ type StructsValueTransferMessage struct { // ManagementContractMetaData contains all meta data concerning the ManagementContract contract. var ManagementContractMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"ImportantContractAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"messageBusAddress\",\"type\":\"address\"}],\"name\":\"LogManagementContractCreated\",\"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\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"RollupAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"enclaveID\",\"type\":\"address\"}],\"name\":\"SequencerEnclaveRevoked\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"r\",\"type\":\"tuple\"},{\"internalType\":\"string\",\"name\":\"_rollupData\",\"type\":\"string\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"}],\"internalType\":\"structStructs.HeaderCrossChainData\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"AddRollup\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"Attested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"_msg\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"ExtractNativeValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GetImportantContractKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rollupHash\",\"type\":\"bytes32\"}],\"name\":\"GetRollupByHash\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetRollupByNumber\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"GetUniqueForkID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"Hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"Signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"LastSequenceNumber\",\"type\":\"uint256\"}],\"internalType\":\"structStructs.MetaRollup\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"GrantSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_enclaveID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initSecret\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"_genesisAttestation\",\"type\":\"string\"}],\"name\":\"InitializeNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"IsSequencerEnclave\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IsWithdrawalAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"requestReport\",\"type\":\"string\"}],\"name\":\"RequestNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attesterID\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"requesterID\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"attesterSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"responseSecret\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"verifyAttester\",\"type\":\"bool\"}],\"name\":\"RespondNetworkSecret\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RetrieveAllBridgeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"RevokeSequencerEnclave\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"SetImportantContractAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_lastBatchHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"rollupNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"forkID\",\"type\":\"bytes32\"}],\"name\":\"addCrossChainMessagesRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"importantContractAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"importantContractKeys\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastBatchSeqNo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6143a180620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620001e85760003560e01c8063715018a6116200010d578063a1a227fa11620000a3578063db5d91b1116200007a578063db5d91b1146200049c578063e34fbfc814620004cb578063e874eb2014620004e0578063f2fde38b14620004f457600080fd5b8063a1a227fa1462000460578063a52f433c1462000474578063d4fab887146200048557600080fd5b80638236a7ba11620000e45780638236a7ba14620003cb57806387059edb14620003f25780638da5cb5b146200040957806398077e86146200043a57600080fd5b8063715018a614620003ad5780637281099614620003b75780638129fc1c14620003c157600080fd5b8063440c953b1162000183578063568699c8116200015a578063568699c8146200033f57806368e1038314620003665780636a30d26c146200037d5780636b9707d6146200039657600080fd5b8063440c953b14620003075780634766573814620003115780635371a216146200032857600080fd5b80632c77c81f11620001c45780632c77c81f146200023a5780632f0cb9e314620002515780633e60a22f146200028857806343348b2f14620002d857600080fd5b80620ddd2714620001ed57806303e72e48146200020a578063073b6ef31462000223575b600080fd5b620001f7600d5481565b6040519081526020015b60405180910390f35b620002216200021b36600462001e27565b6200050b565b005b620002216200023436600462001ec7565b6200061e565b620002216200024b36600462001ffb565b62000909565b62000277620002623660046200209e565b600c6020526000908152604090205460ff1681565b604051901515815260200162000201565b620002bf62000299366004620020b8565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b03909116815260200162000201565b62000277620002e9366004620020f9565b6001600160a01b031660009081526020819052604090205460ff1690565b620001f760055481565b6200022162000322366004620020f9565b62000a79565b62000221620003393660046200211e565b62000b49565b62000356620003503660046200209e565b62000d52565b6040516200020192919062002241565b62000221620003773660046200225c565b62000dab565b6200038762000e98565b604051620002019190620022e6565b62000221620003a7366004620020f9565b62000f7b565b6200022162001041565b6200022162001059565b62000221620010dd565b620003e2620003dc3660046200209e565b620012c1565b604051620002019291906200234c565b620003e2620004033660046200209e565b620013b1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620002bf565b620004516200044b3660046200209e565b6200142b565b60405162000201919062002369565b600a54620002bf906001600160a01b031681565b600454610100900460ff1662000277565b62000221620004963660046200237e565b620014e0565b62000277620004ad366004620020f9565b6001600160a01b031660009081526001602052604090205460ff1690565b62000221620004dc36600462002429565b5050565b600b54620002bf906001600160a01b031681565b6200022162000505366004620020f9565b62001673565b62000515620016d0565b60006001600160a01b03166003836040516200053291906200246f565b908152604051908190036020019020546001600160a01b0316036200059157600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016200058f83826200251c565b505b80600383604051620005a491906200246f565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb590620006129084908490620025e9565b60405180910390a15050565b6200062b8660ff6200262c565b431115620006805760405162461bcd60e51b815260206004820152601560248201527f426c6f636b2062696e64696e6720746f6f206f6c64000000000000000000000060448201526064015b60405180910390fd5b86864014620006e757620006944362001747565b6200069f8862001747565b620006ab884062001747565b604051602001620006bf9392919062002642565b60408051601f198184030181529082905262461bcd60e51b8252620006779160040162002369565b6000828152600860205260409020548114620007465760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420666f726b4944000000000000000000000000000000000000604482015260640162000677565b6000620007b889898989604051602001620007659493929190620026e7565b6040516020818303038152906040528051906020012086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620017ee92505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620008255760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000677565b600d89905560005b8651811015620008fd57600b5487516001600160a01b039091169063b6aed0cb9089908490811062000863576200086362002763565b6020026020010151620008769062002779565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152426024820152604401600060405180830381600087803b158015620008ce57600080fd5b505af1158015620008e3573d6000803e3d6000fd5b505050508080620008f4906200279e565b9150506200082d565b50505050505050505050565b60006200095b8535620009206020880188620027ba565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620017ee92505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620009c85760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000677565b6001600160a01b03811660009081526001602052604090205460ff1662000a325760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000677565b62000a3d856200181e565b604051853581527fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906020015b60405180910390a15050505050565b62000a83620016d0565b6001600160a01b03811660009081526020819052604090205460ff1662000aed5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000677565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f9062000b9a90879087908790879060040162002864565b60006040518083038186803b15801562000bb357600080fd5b505afa15801562000bc8573d6000803e3d6000fd5b5050505060008460405160200162000be19190620028cc565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff161562000c5b5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20616c7265616479207370656e740000000000000000604482015260640162000677565b6001600c60008760405160200162000c749190620028cc565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad219162000ccf91908901908901620020f9565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301528801356024820152604401600060405180830381600087803b15801562000d3257600080fd5b505af115801562000d47573d6000803e3d6000fd5b505050505050505050565b60408051606080820183526000808352602083019190915291810182905260008062000d7e85620013b1565b915091508162000d945760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff161562000e265760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840162000677565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936910162000a6a565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000f7257838290600052602060002001805462000ede906200248d565b80601f016020809104026020016040519081016040528092919081815260200182805462000f0c906200248d565b801562000f5d5780601f1062000f315761010080835404028352916020019162000f5d565b820191906000526020600020905b81548152906001019060200180831162000f3f57829003601f168201915b50505050508152602001906001019062000ebc565b50505050905090565b62000f85620016d0565b6001600160a01b03811660009081526001602052604090205460ff1662000fef5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000677565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47910162000b3e565b6200104b620016d0565b620010576000620018d3565b565b62001063620016d0565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b158015620010c257600080fd5b505af1158015620010d7573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620011295750825b905060008267ffffffffffffffff166001148015620011475750303b155b90508115801562001156575080155b156200118e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620011c357845468ff00000000000000001916680100000000000000001785555b620011ce3362001951565b60006005819055600955604051620011e69062001d3b565b604051809103906000f08015801562001203573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393909316928317909155600a8054909116821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a18315620012ba57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200162000a6a565b5050505050565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062001311906200248d565b80601f01602080910402602001604051908101604052809291908181526020018280546200133f906200248d565b8015620013905780601f10620013645761010080835404028352916020019162001390565b820191906000526020600020905b8154815290600101906020018083116200137257829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b604080516060808201835260008083526020830191909152918101829052600083815260076020526040812054908190036200141657505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b6200142181620012c1565b9250925050915091565b600281815481106200143c57600080fd5b90600052602060002001600091509050805462001459906200248d565b80601f016020809104026020016040519081016040528092919081815260200182805462001487906200248d565b8015620014d85780601f10620014ac57610100808354040283529160200191620014d8565b820191906000526020600020905b815481529060010190602001808311620014ba57829003601f168201915b505050505081565b6001600160a01b03851660009081526020819052604090205460ff1680620015715760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f7465640000000000000000000000000000000000000000000000000000000000606482015260840162000677565b811562001648576000620015aa8787866040516020016200159593929190620028dc565b60405160208183030381529060405262001966565b90506000620015ba8287620017ee565b9050876001600160a01b0316816001600160a01b031614620016455760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d617463680000000000000000000000000000000000000000606482015260840162000677565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6200167d620016d0565b6001600160a01b038116620016c2576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240162000677565b620016cd81620018d3565b50565b33620017037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462001057576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240162000677565b606060006200175683620019a5565b600101905060008167ffffffffffffffff81111562001779576200177962001d49565b6040519080825280601f01601f191660200182016040528015620017a4576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084620017ae57509392505050565b60008060008062001800868662001a8e565b92509250925062001812828262001adf565b50909150505b92915050565b8035600090815260066020526040902081906200183c828262002924565b505060095460009081526007602052604090208135908190556200186260014362002a34565b406040516020016200187e929190918252602082015260400190565b60408051601f198184030181529181528151602092830120600980546000908152600890945291832055805491620018b6836200279e565b919050555060055481604001351115620016cd5760400135600555565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6200195b62001bf5565b620016cd8162001c5d565b600062001974825162001747565b826040516020016200198892919062002a4a565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620019ef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001a1c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001a3b57662386f26fc10000830492506010015b6305f5e100831062001a54576305f5e100830492506008015b612710831062001a6957612710830492506004015b6064831062001a7c576064830492506002015b600a8310620018185760010192915050565b6000806000835160410362001acc5760208401516040850151606086015160001a62001abd8882858562001c67565b95509550955050505062001ad8565b50508151600091506002905b9250925092565b600082600381111562001af65762001af662002aa9565b0362001b00575050565b600182600381111562001b175762001b1762002aa9565b0362001b4f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111562001b665762001b6662002aa9565b0362001ba2576040517ffce698f70000000000000000000000000000000000000000000000000000000081526004810182905260240162000677565b600382600381111562001bb95762001bb962002aa9565b03620004dc576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240162000677565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662001057576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200167d62001bf5565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111562001ca4575060009150600390508262001d31565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001cf9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001d275750600092506001915082905062001d31565b9250600091508190505b9450945094915050565b6118ac8062002ac083390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562001d8b5762001d8b62001d49565b604052919050565b600082601f83011262001da557600080fd5b813567ffffffffffffffff81111562001dc25762001dc262001d49565b62001dd7601f8201601f191660200162001d5f565b81815284602083860101111562001ded57600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811462001e2257600080fd5b919050565b6000806040838503121562001e3b57600080fd5b823567ffffffffffffffff81111562001e5357600080fd5b62001e618582860162001d93565b92505062001e726020840162001e0a565b90509250929050565b60008083601f84011262001e8e57600080fd5b50813567ffffffffffffffff81111562001ea757600080fd5b60208301915083602082850101111562001ec057600080fd5b9250929050565b60008060008060008060008060e0898b03121562001ee457600080fd5b88359750602089013596506040890135955067ffffffffffffffff8060608b0135111562001f1157600080fd5b60608a01358a018b601f82011262001f2857600080fd5b818135111562001f3c5762001f3c62001d49565b62001f4e6020823560051b0162001d5f565b81358082526020808301929160051b8401018e101562001f6d57600080fd5b602083015b6020843560051b85010181101562001fb457848135111562001f9357600080fd5b62001fa58f6020833587010162001d93565b83526020928301920162001f72565b509750505060808a013581101562001fcb57600080fd5b5062001fde8a60808b01358b0162001e7b565b989b979a5095989497959660a08601359560c00135945092505050565b600080600080606085870312156200201257600080fd5b843567ffffffffffffffff808211156200202b57600080fd5b90860190606082890312156200204057600080fd5b909450602086013590808211156200205757600080fd5b620020658883890162001e7b565b909550935060408701359150808211156200207f57600080fd5b508501602081880312156200209357600080fd5b939692955090935050565b600060208284031215620020b157600080fd5b5035919050565b600060208284031215620020cb57600080fd5b813567ffffffffffffffff811115620020e357600080fd5b620020f18482850162001d93565b949350505050565b6000602082840312156200210c57600080fd5b620021178262001e0a565b9392505050565b60008060008084860360c08112156200213657600080fd5b60808112156200214557600080fd5b50849350608085013567ffffffffffffffff808211156200216557600080fd5b818701915087601f8301126200217a57600080fd5b8135818111156200218a57600080fd5b8860208260051b8501011115620021a057600080fd5b95986020929092019750949560a00135945092505050565b60005b83811015620021d5578181015183820152602001620021bb565b50506000910152565b60008151808452620021f8816020860160208601620021b8565b601f01601f19169290920160200192915050565b8051825260006020820151606060208501526200222d6060850182620021de565b604093840151949093019390935250919050565b828152604060208201526000620020f160408301846200220c565b6000806000806000606086880312156200227557600080fd5b620022808662001e0a565b9450602086013567ffffffffffffffff808211156200229e57600080fd5b620022ac89838a0162001e7b565b90965094506040880135915080821115620022c657600080fd5b50620022d58882890162001e7b565b969995985093965092949392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156200233f57603f198886030184526200232c858351620021de565b945092850192908501906001016200230d565b5092979650505050505050565b8215158152604060208201526000620020f160408301846200220c565b602081526000620021176020830184620021de565b600080600080600060a086880312156200239757600080fd5b620023a28662001e0a565b9450620023b26020870162001e0a565b9350604086013567ffffffffffffffff80821115620023d057600080fd5b620023de89838a0162001d93565b94506060880135915080821115620023f557600080fd5b50620024048882890162001d93565b925050608086013580151581146200241b57600080fd5b809150509295509295909350565b600080602083850312156200243d57600080fd5b823567ffffffffffffffff8111156200245557600080fd5b620024638582860162001e7b565b90969095509350505050565b6000825162002483818460208701620021b8565b9190910192915050565b600181811c90821680620024a257607f821691505b602082108103620024c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200251757600081815260208120601f850160051c81016020861015620024f25750805b601f850160051c820191505b818110156200251357828155600101620024fe565b5050505b505050565b815167ffffffffffffffff81111562002539576200253962001d49565b62002551816200254a84546200248d565b84620024c9565b602080601f831160018114620025895760008415620025705750858301515b600019600386901b1c1916600185901b17855562002513565b600085815260208120601f198616915b82811015620025ba5788860151825594840194600190910190840162002599565b5085821015620025d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000620025fe6040830185620021de565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001818576200181862002616565b7f496e76616c696420626c6f636b2062696e64696e673a000000000000000000008152600084516200267c816016850160208901620021b8565b80830190507f3a000000000000000000000000000000000000000000000000000000000000008060168301528551620026bd816017850160208a01620021b8565b60179201918201528351620026da816018840160208801620021b8565b0160180195945050505050565b600060808201868352602086818501528560408501526080606085015281855180845260a08601915060a08160051b870101935082870160005b828110156200275357609f1988870301845262002740868351620021de565b9550928401929084019060010162002721565b50939a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b80516020808301519190811015620024c35760001960209190910360031b1b16919050565b600060018201620027b357620027b362002616565b5060010190565b6000808335601e19843603018112620027d257600080fd5b83018035915067ffffffffffffffff821115620027ee57600080fd5b60200191503681900382131562001ec057600080fd5b6001600160a01b0380620028188362001e0a565b168352806200282a6020840162001e0a565b1660208401525060408101356040830152606081013567ffffffffffffffff81168082146200285857600080fd5b80606085015250505050565b62002870818662002804565b60c060808201528260c082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115620028ad57600080fd5b8360051b808660e085013760a0830193909352500160e0019392505050565b6080810162001818828462002804565b60006bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825162002915816028850160208701620021b8565b91909101602801949350505050565b813581556001808201602080850135601e198636030181126200294657600080fd5b8501803567ffffffffffffffff8111156200296057600080fd5b80360383830113156200297257600080fd5b6200298a816200298386546200248d565b86620024c9565b6000601f821160018114620029c35760008315620029aa57508382018501355b600019600385901b1c1916600184901b17865562002a1f565b600086815260209020601f19841690835b82811015620029f557868501880135825593870193908901908701620029d4565b508482101562002a155760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b8181038181111562001818576200181862002616565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835162002a8481601a850160208801620021b8565b83519083019062002a9d81601a840160208801620021b8565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611807806100a56000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f1461030e578063b6aed0cb1461032e578063e138a8d21461034e578063f2fde38b1461036e57610155565b80639730886d1461029557806399a3ad21146102b5578063b1454caa146102d557610155565b8063346633fb116100bb578063346633fb1461022557806336d2da9014610238578063715018a6146102585780638da5cb5b1461026d57610155565b80630fcfbd11146101a25780630fe9188e146101d557806333a88c72146101f557610155565b36610155576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b3480156101ae57600080fd5b506101c26101bd366004610f80565b61038e565b6040519081526020015b60405180910390f35b3480156101e157600080fd5b506101536101f0366004610fb5565b610428565b34801561020157600080fd5b50610215610210366004610f80565b61049e565b60405190151581526020016101cc565b610153610233366004610fe3565b6104f1565b34801561024457600080fd5b5061015361025336600461100f565b6105d4565b34801561026457600080fd5b50610153610683565b34801561027957600080fd5b506000546040516001600160a01b0390911681526020016101cc565b3480156102a157600080fd5b506101536102b036600461102c565b610697565b3480156102c157600080fd5b506101536102d0366004610fe3565b6107e9565b3480156102e157600080fd5b506102f56102f03660046110a2565b610899565b60405167ffffffffffffffff90911681526020016101cc565b34801561031a57600080fd5b5061015361032936600461119b565b6108fa565b34801561033a57600080fd5b506101536103493660046111fd565b610afc565b34801561035a57600080fd5b5061015361036936600461121f565b610b98565b34801561037a57600080fd5b5061015361038936600461100f565b610d78565b600080826040516020016103a291906112ce565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806104215760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608401610199565b9392505050565b610430610dcf565b600081815260046020526040812054900361048d5760405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606401610199565b600090815260046020526040812055565b600080826040516020016104b291906112ce565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104e95750428111155b949350505050565b60003411801561050057508034145b6105725760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608401610199565b600061057d33610e15565b6040805134815267ffffffffffffffff831660208201529192506001600160a01b0385169133917f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6910160405180910390a3505050565b6105dc610dcf565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610629576040519150601f19603f3d011682016040523d82523d6000602084013e61062e565b606091505b505090508061067f5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b5050565b61068b610dcf565b6106956000610e73565b565b61069f610dcf565b60006106ab82426113cf565b90506000836040516020016106c091906112ce565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561075b5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610199565b600081815260016020908152604082208490556002919061077e9087018761100f565b6001600160a01b0316815260208101919091526040016000908120906107aa60808701606088016113e2565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016107e182826115b0565b505050505050565b6107f1610dcf565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461083e576040519150601f19603f3d011682016040523d82523d6000602084013e610843565b606091505b50509050806108945760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b505050565b60006108a433610e15565b9050336001600160a01b03167fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759378288888888886040516108e9969594939291906116ca565b60405180910390a295945050505050565b600081815260046020526040812054900361096a5760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b6000818152600460205260409020544210156109d25760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b6000846040516020016109e5919061171a565b60408051601f198184030181528282528051602091820120908301829052600160608401527f760000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610a8384848484604051602001610a6891815260200190565b60405160208183030381529060405280519060200120610ed0565b610af55760405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608401610199565b5050505050565b610b04610dcf565b60008281526004602052604090205415610b865760405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608401610199565b60009182526004602052604090912055565b6000818152600460205260408120549003610c085760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b600081815260046020526040902054421015610c705760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b600084604051602001610c8391906112ce565b60408051601f198184030181528282528051602091820120908301829052600160608401527f6d0000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610d0684848484604051602001610a6891815260200190565b610af55760405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608401610199565b610d80610dcf565b6001600160a01b038116610dc3576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610199565b610dcc81610e73565b50565b6000546001600160a01b03163314610695576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610199565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610e48838561177a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ede868685610ee8565b1495945050505050565b600081815b84811015610f2b57610f1782878784818110610f0b57610f0b6117a2565b90506020020135610f34565b915080610f23816117b8565b915050610eed565b50949350505050565b6000818310610f50576000828152602084905260409020610f5f565b60008381526020839052604090205b90505b92915050565b600060c08284031215610f7a57600080fd5b50919050565b600060208284031215610f9257600080fd5b813567ffffffffffffffff811115610fa957600080fd5b6104e984828501610f68565b600060208284031215610fc757600080fd5b5035919050565b6001600160a01b0381168114610dcc57600080fd5b60008060408385031215610ff657600080fd5b823561100181610fce565b946020939093013593505050565b60006020828403121561102157600080fd5b813561042181610fce565b6000806040838503121561103f57600080fd5b823567ffffffffffffffff81111561105657600080fd5b61106285828601610f68565b95602094909401359450505050565b63ffffffff81168114610dcc57600080fd5b60ff81168114610dcc57600080fd5b803561109d81611083565b919050565b6000806000806000608086880312156110ba57600080fd5b85356110c581611071565b945060208601356110d581611071565b9350604086013567ffffffffffffffff808211156110f257600080fd5b818801915088601f83011261110657600080fd5b81358181111561111557600080fd5b89602082850101111561112757600080fd5b602083019550809450505050606086013561114181611083565b809150509295509295909350565b60008083601f84011261116157600080fd5b50813567ffffffffffffffff81111561117957600080fd5b6020830191508360208260051b850101111561119457600080fd5b9250929050565b60008060008084860360c08112156111b257600080fd5b60808112156111c057600080fd5b50849350608085013567ffffffffffffffff8111156111de57600080fd5b6111ea8782880161114f565b9598909750949560a00135949350505050565b6000806040838503121561121057600080fd5b50508035926020909101359150565b6000806000806060858703121561123557600080fd5b843567ffffffffffffffff8082111561124d57600080fd5b61125988838901610f68565b9550602087013591508082111561126f57600080fd5b5061127c8782880161114f565b9598909750949560400135949350505050565b67ffffffffffffffff81168114610dcc57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600082356112df81610fce565b6001600160a01b03811660208401525060208301356112fd8161128f565b67ffffffffffffffff80821660408501526040850135915061131e82611071565b63ffffffff80831660608601526060860135925061133b83611071565b80831660808601525060808501359150601e1985360301821261135d57600080fd5b602091850191820191358181111561137457600080fd5b80360383131561138357600080fd5b60c060a086015261139860e0860182856112a5565b925050506113a860a08501611092565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f6257610f626113b9565b6000602082840312156113f457600080fd5b813561042181611071565b60008135610f6281611071565b6000808335601e1984360301811261142357600080fd5b83018035915067ffffffffffffffff82111561143e57600080fd5b60200191503681900382131561119457600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061147d57607f821691505b602082108103610f7a57634e487b7160e01b600052602260045260246000fd5b601f82111561089457600081815260208120601f850160051c810160208610156114c45750805b601f850160051c820191505b818110156107e1578281556001016114d0565b67ffffffffffffffff8311156114fb576114fb611453565b61150f836115098354611469565b8361149d565b6000601f841160018114611543576000851561152b5750838201355b600019600387901b1c1916600186901b178355610af5565b600083815260209020601f19861690835b828110156115745786850135825560209485019460019092019101611554565b50868210156115915760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135610f6281611083565b81356115bb81610fce565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff19821617835560208401356115f38161128f565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff000000000000000000000000000000000000000000000000000000008184828516171785556040860135925061165183611071565b921760e09190911b90911617815561168961166e606084016113ff565b6001830163ffffffff821663ffffffff198254161781555050565b611696608083018361140c565b6116a48183600286016114e3565b505061067f6116b560a084016115a3565b6003830160ff821660ff198254161781555050565b67ffffffffffffffff87168152600063ffffffff808816602084015280871660408401525060a0606083015261170460a0830185876112a5565b905060ff83166080830152979650505050505050565b60808101823561172981610fce565b6001600160a01b03908116835260208401359061174582610fce565b1660208301526040838101359083015260608301356117638161128f565b67ffffffffffffffff811660608401525092915050565b67ffffffffffffffff81811683821601908082111561179b5761179b6113b9565b5092915050565b634e487b7160e01b600052603260045260246000fd5b6000600182016117ca576117ca6113b9565b506001019056fea2646970667358221220a449a197632e1117b118ced8f7cf97a1ae44b160775ee146e59b50cbc1b8dcaa64736f6c63430008140033a2646970667358221220309da62fd58df02f8628b3ebd2b6e5d0deb6d76c30954e9cc12c8ee1656f994b64736f6c63430008140033", + Bin: "0x608060405234801561001057600080fd5b5061001a3361001f565b610090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6143a180620000a06000396000f3fe60806040523480156200001157600080fd5b5060043610620001e85760003560e01c8063715018a6116200010d578063a1a227fa11620000a3578063db5d91b1116200007a578063db5d91b1146200049c578063e34fbfc814620004cb578063e874eb2014620004e0578063f2fde38b14620004f457600080fd5b8063a1a227fa1462000460578063a52f433c1462000474578063d4fab887146200048557600080fd5b80638236a7ba11620000e45780638236a7ba14620003cb57806387059edb14620003f25780638da5cb5b146200040957806398077e86146200043a57600080fd5b8063715018a614620003ad5780637281099614620003b75780638129fc1c14620003c157600080fd5b8063440c953b1162000183578063568699c8116200015a578063568699c8146200033f57806368e1038314620003665780636a30d26c146200037d5780636b9707d6146200039657600080fd5b8063440c953b14620003075780634766573814620003115780635371a216146200032857600080fd5b80632c77c81f11620001c45780632c77c81f146200023a5780632f0cb9e314620002515780633e60a22f146200028857806343348b2f14620002d857600080fd5b80620ddd2714620001ed57806303e72e48146200020a578063073b6ef31462000223575b600080fd5b620001f7600d5481565b6040519081526020015b60405180910390f35b620002216200021b36600462001e27565b6200050b565b005b620002216200023436600462001ec7565b6200061e565b620002216200024b36600462001ffb565b62000909565b62000277620002623660046200209e565b600c6020526000908152604090205460ff1681565b604051901515815260200162000201565b620002bf62000299366004620020b8565b80516020818301810180516003825292820191909301209152546001600160a01b031681565b6040516001600160a01b03909116815260200162000201565b62000277620002e9366004620020f9565b6001600160a01b031660009081526020819052604090205460ff1690565b620001f760055481565b6200022162000322366004620020f9565b62000a79565b62000221620003393660046200211e565b62000b49565b62000356620003503660046200209e565b62000d52565b6040516200020192919062002241565b62000221620003773660046200225c565b62000dab565b6200038762000e98565b604051620002019190620022e6565b62000221620003a7366004620020f9565b62000f7b565b6200022162001041565b6200022162001059565b62000221620010dd565b620003e2620003dc3660046200209e565b620012c1565b604051620002019291906200234c565b620003e2620004033660046200209e565b620013b1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316620002bf565b620004516200044b3660046200209e565b6200142b565b60405162000201919062002369565b600a54620002bf906001600160a01b031681565b600454610100900460ff1662000277565b62000221620004963660046200237e565b620014e0565b62000277620004ad366004620020f9565b6001600160a01b031660009081526001602052604090205460ff1690565b62000221620004dc36600462002429565b5050565b600b54620002bf906001600160a01b031681565b6200022162000505366004620020f9565b62001673565b62000515620016d0565b60006001600160a01b03166003836040516200053291906200246f565b908152604051908190036020019020546001600160a01b0316036200059157600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace016200058f83826200251c565b505b80600383604051620005a491906200246f565b90815260405190819003602001812080546001600160a01b039390931673ffffffffffffffffffffffffffffffffffffffff19909316929092179091557f17b2f9f5748931099ffee882b5b64f4a560b5c55da9b4f4e396dae3bb9f98cb590620006129084908490620025e9565b60405180910390a15050565b6200062b8660ff6200262c565b431115620006805760405162461bcd60e51b815260206004820152601560248201527f426c6f636b2062696e64696e6720746f6f206f6c64000000000000000000000060448201526064015b60405180910390fd5b86864014620006e757620006944362001747565b6200069f8862001747565b620006ab884062001747565b604051602001620006bf9392919062002642565b60408051601f198184030181529082905262461bcd60e51b8252620006779160040162002369565b6000828152600860205260409020548114620007465760405162461bcd60e51b815260206004820152600e60248201527f496e76616c696420666f726b4944000000000000000000000000000000000000604482015260640162000677565b6000620007b889898989604051602001620007659493929190620026e7565b6040516020818303038152906040528051906020012086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620017ee92505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620008255760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000677565b600d89905560005b8651811015620008fd57600b5487516001600160a01b039091169063b6aed0cb9089908490811062000863576200086362002763565b6020026020010151620008769062002779565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152426024820152604401600060405180830381600087803b158015620008ce57600080fd5b505af1158015620008e3573d6000803e3d6000fd5b505050508080620008f4906200279e565b9150506200082d565b50505050505050505050565b60006200095b8535620009206020880188620027ba565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250620017ee92505050565b6001600160a01b03811660009081526020819052604090205490915060ff16620009c85760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000677565b6001600160a01b03811660009081526001602052604090205460ff1662000a325760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000677565b62000a3d856200181e565b604051853581527fd6555bff8670bd3008dc064c30bb56d6ac7cb14ae801e36146fe4e7c6a504a58906020015b60405180910390a15050505050565b62000a83620016d0565b6001600160a01b03811660009081526020819052604090205460ff1662000aed5760405162461bcd60e51b815260206004820152601660248201527f656e636c6176654944206e6f7420617474657374656400000000000000000000604482015260640162000677565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e76093691015b60405180910390a150565b600b546040517fb201246f0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b201246f9062000b9a90879087908790879060040162002864565b60006040518083038186803b15801562000bb357600080fd5b505afa15801562000bc8573d6000803e3d6000fd5b5050505060008460405160200162000be19190620028cc565b60408051601f1981840301815291815281516020928301206000818152600c90935291205490915060ff161562000c5b5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20616c7265616479207370656e740000000000000000604482015260640162000677565b6001600c60008760405160200162000c749190620028cc565b60408051808303601f190181529181528151602092830120835282820193909352908201600020805460ff191693151593909317909255600a546001600160a01b0316916399a3ad219162000ccf91908901908901620020f9565b604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0390921660048301528801356024820152604401600060405180830381600087803b15801562000d3257600080fd5b505af115801562000d47573d6000803e3d6000fd5b505050505050505050565b60408051606080820183526000808352602083019190915291810182905260008062000d7e85620013b1565b915091508162000d945760009590945092505050565b600094855260086020526040909420549492505050565b60045460ff161562000e265760405162461bcd60e51b815260206004820152602260248201527f6e6574776f726b2073656372657420616c726561647920696e697469616c697a60448201527f6564000000000000000000000000000000000000000000000000000000000000606482015260840162000677565b60048054600160ff1991821681179092556001600160a01b038716600081815260208181526040808320805486168717905585825291829020805490941690941790925590519081527ffe64c7181f0fc60e300dc02cca368cdfa94d7ca45902de3b9a9d80070e760936910162000a6a565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101562000f7257838290600052602060002001805462000ede906200248d565b80601f016020809104026020016040519081016040528092919081815260200182805462000f0c906200248d565b801562000f5d5780601f1062000f315761010080835404028352916020019162000f5d565b820191906000526020600020905b81548152906001019060200180831162000f3f57829003601f168201915b50505050508152602001906001019062000ebc565b50505050905090565b62000f85620016d0565b6001600160a01b03811660009081526001602052604090205460ff1662000fef5760405162461bcd60e51b815260206004820152601960248201527f656e636c6176654944206e6f7420612073657175656e63657200000000000000604482015260640162000677565b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f0f279980343c7ca542fde9fa5396555068efb5cd560d9cf9c191aa2911079b47910162000b3e565b6200104b620016d0565b620010576000620018d3565b565b62001063620016d0565b600a546040517f36d2da900000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03909116906336d2da9090602401600060405180830381600087803b158015620010c257600080fd5b505af1158015620010d7573d6000803e3d6000fd5b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015620011295750825b905060008267ffffffffffffffff166001148015620011475750303b155b90508115801562001156575080155b156200118e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315620011c357845468ff00000000000000001916680100000000000000001785555b620011ce3362001951565b60006005556001600955604051620011e69062001d3b565b604051809103906000f08015801562001203573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393909316928317909155600a8054909116821790556040519081527fbd726cf82ac9c3260b1495107182e336e0654b25c10915648c0cc15b2bb72cbf9060200160405180910390a18315620012ba57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200162000a6a565b5050505050565b60408051606080820183526000808352602080840183905283850182905285825260068152848220855193840190955284548352600185018054929586949390928401919062001311906200248d565b80601f01602080910402602001604051908101604052809291908181526020018280546200133f906200248d565b8015620013905780601f10620013645761010080835404028352916020019162001390565b820191906000526020600020905b8154815290600101906020018083116200137257829003601f168201915b50505091835250506002919091015460209091015280519094149492505050565b604080516060808201835260008083526020830191909152918101829052600083815260076020526040812054908190036200141657505060408051606081018252600080825282516020818101855282825283015291810182905290939092509050565b6200142181620012c1565b9250925050915091565b600281815481106200143c57600080fd5b90600052602060002001600091509050805462001459906200248d565b80601f016020809104026020016040519081016040528092919081815260200182805462001487906200248d565b8015620014d85780601f10620014ac57610100808354040283529160200191620014d8565b820191906000526020600020905b815481529060010190602001808311620014ba57829003601f168201915b505050505081565b6001600160a01b03851660009081526020819052604090205460ff1680620015715760405162461bcd60e51b815260206004820152602360248201527f726573706f6e64696e67206174746573746572206973206e6f7420617474657360448201527f7465640000000000000000000000000000000000000000000000000000000000606482015260840162000677565b811562001648576000620015aa8787866040516020016200159593929190620028dc565b60405160208183030381529060405262001966565b90506000620015ba8287620017ee565b9050876001600160a01b0316816001600160a01b031614620016455760405162461bcd60e51b815260206004820152602c60248201527f63616c63756c61746564206164647265737320616e642061747465737465724960448201527f4420646f6e74206d617463680000000000000000000000000000000000000000606482015260840162000677565b50505b5050506001600160a01b039091166000908152602081905260409020805460ff191660011790555050565b6200167d620016d0565b6001600160a01b038116620016c2576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240162000677565b620016cd81620018d3565b50565b33620017037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161462001057576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240162000677565b606060006200175683620019a5565b600101905060008167ffffffffffffffff81111562001779576200177962001d49565b6040519080825280601f01601f191660200182016040528015620017a4576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084620017ae57509392505050565b60008060008062001800868662001a8e565b92509250925062001812828262001adf565b50909150505b92915050565b8035600090815260066020526040902081906200183c828262002924565b505060095460009081526007602052604090208135908190556200186260014362002a34565b406040516020016200187e929190918252602082015260400190565b60408051601f198184030181529181528151602092830120600980546000908152600890945291832055805491620018b6836200279e565b919050555060055481604001351115620016cd5760400135600555565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6200195b62001bf5565b620016cd8162001c5d565b600062001974825162001747565b826040516020016200198892919062002a4a565b604051602081830303815290604052805190602001209050919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310620019ef577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831062001a1c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831062001a3b57662386f26fc10000830492506010015b6305f5e100831062001a54576305f5e100830492506008015b612710831062001a6957612710830492506004015b6064831062001a7c576064830492506002015b600a8310620018185760010192915050565b6000806000835160410362001acc5760208401516040850151606086015160001a62001abd8882858562001c67565b95509550955050505062001ad8565b50508151600091506002905b9250925092565b600082600381111562001af65762001af662002aa9565b0362001b00575050565b600182600381111562001b175762001b1762002aa9565b0362001b4f576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111562001b665762001b6662002aa9565b0362001ba2576040517ffce698f70000000000000000000000000000000000000000000000000000000081526004810182905260240162000677565b600382600381111562001bb95762001bb962002aa9565b03620004dc576040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810182905260240162000677565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1662001057576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6200167d62001bf5565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111562001ca4575060009150600390508262001d31565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801562001cf9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811662001d275750600092506001915082905062001d31565b9250600091508190505b9450945094915050565b6118ac8062002ac083390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562001d8b5762001d8b62001d49565b604052919050565b600082601f83011262001da557600080fd5b813567ffffffffffffffff81111562001dc25762001dc262001d49565b62001dd7601f8201601f191660200162001d5f565b81815284602083860101111562001ded57600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811462001e2257600080fd5b919050565b6000806040838503121562001e3b57600080fd5b823567ffffffffffffffff81111562001e5357600080fd5b62001e618582860162001d93565b92505062001e726020840162001e0a565b90509250929050565b60008083601f84011262001e8e57600080fd5b50813567ffffffffffffffff81111562001ea757600080fd5b60208301915083602082850101111562001ec057600080fd5b9250929050565b60008060008060008060008060e0898b03121562001ee457600080fd5b88359750602089013596506040890135955067ffffffffffffffff8060608b0135111562001f1157600080fd5b60608a01358a018b601f82011262001f2857600080fd5b818135111562001f3c5762001f3c62001d49565b62001f4e6020823560051b0162001d5f565b81358082526020808301929160051b8401018e101562001f6d57600080fd5b602083015b6020843560051b85010181101562001fb457848135111562001f9357600080fd5b62001fa58f6020833587010162001d93565b83526020928301920162001f72565b509750505060808a013581101562001fcb57600080fd5b5062001fde8a60808b01358b0162001e7b565b989b979a5095989497959660a08601359560c00135945092505050565b600080600080606085870312156200201257600080fd5b843567ffffffffffffffff808211156200202b57600080fd5b90860190606082890312156200204057600080fd5b909450602086013590808211156200205757600080fd5b620020658883890162001e7b565b909550935060408701359150808211156200207f57600080fd5b508501602081880312156200209357600080fd5b939692955090935050565b600060208284031215620020b157600080fd5b5035919050565b600060208284031215620020cb57600080fd5b813567ffffffffffffffff811115620020e357600080fd5b620020f18482850162001d93565b949350505050565b6000602082840312156200210c57600080fd5b620021178262001e0a565b9392505050565b60008060008084860360c08112156200213657600080fd5b60808112156200214557600080fd5b50849350608085013567ffffffffffffffff808211156200216557600080fd5b818701915087601f8301126200217a57600080fd5b8135818111156200218a57600080fd5b8860208260051b8501011115620021a057600080fd5b95986020929092019750949560a00135945092505050565b60005b83811015620021d5578181015183820152602001620021bb565b50506000910152565b60008151808452620021f8816020860160208601620021b8565b601f01601f19169290920160200192915050565b8051825260006020820151606060208501526200222d6060850182620021de565b604093840151949093019390935250919050565b828152604060208201526000620020f160408301846200220c565b6000806000806000606086880312156200227557600080fd5b620022808662001e0a565b9450602086013567ffffffffffffffff808211156200229e57600080fd5b620022ac89838a0162001e7b565b90965094506040880135915080821115620022c657600080fd5b50620022d58882890162001e7b565b969995985093965092949392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156200233f57603f198886030184526200232c858351620021de565b945092850192908501906001016200230d565b5092979650505050505050565b8215158152604060208201526000620020f160408301846200220c565b602081526000620021176020830184620021de565b600080600080600060a086880312156200239757600080fd5b620023a28662001e0a565b9450620023b26020870162001e0a565b9350604086013567ffffffffffffffff80821115620023d057600080fd5b620023de89838a0162001d93565b94506060880135915080821115620023f557600080fd5b50620024048882890162001d93565b925050608086013580151581146200241b57600080fd5b809150509295509295909350565b600080602083850312156200243d57600080fd5b823567ffffffffffffffff8111156200245557600080fd5b620024638582860162001e7b565b90969095509350505050565b6000825162002483818460208701620021b8565b9190910192915050565b600181811c90821680620024a257607f821691505b602082108103620024c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200251757600081815260208120601f850160051c81016020861015620024f25750805b601f850160051c820191505b818110156200251357828155600101620024fe565b5050505b505050565b815167ffffffffffffffff81111562002539576200253962001d49565b62002551816200254a84546200248d565b84620024c9565b602080601f831160018114620025895760008415620025705750858301515b600019600386901b1c1916600185901b17855562002513565b600085815260208120601f198616915b82811015620025ba5788860151825594840194600190910190840162002599565b5085821015620025d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000620025fe6040830185620021de565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562001818576200181862002616565b7f496e76616c696420626c6f636b2062696e64696e673a000000000000000000008152600084516200267c816016850160208901620021b8565b80830190507f3a000000000000000000000000000000000000000000000000000000000000008060168301528551620026bd816017850160208a01620021b8565b60179201918201528351620026da816018840160208801620021b8565b0160180195945050505050565b600060808201868352602086818501528560408501526080606085015281855180845260a08601915060a08160051b870101935082870160005b828110156200275357609f1988870301845262002740868351620021de565b9550928401929084019060010162002721565b50939a9950505050505050505050565b634e487b7160e01b600052603260045260246000fd5b80516020808301519190811015620024c35760001960209190910360031b1b16919050565b600060018201620027b357620027b362002616565b5060010190565b6000808335601e19843603018112620027d257600080fd5b83018035915067ffffffffffffffff821115620027ee57600080fd5b60200191503681900382131562001ec057600080fd5b6001600160a01b0380620028188362001e0a565b168352806200282a6020840162001e0a565b1660208401525060408101356040830152606081013567ffffffffffffffff81168082146200285857600080fd5b80606085015250505050565b62002870818662002804565b60c060808201528260c082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841115620028ad57600080fd5b8360051b808660e085013760a0830193909352500160e0019392505050565b6080810162001818828462002804565b60006bffffffffffffffffffffffff19808660601b168352808560601b16601484015250825162002915816028850160208701620021b8565b91909101602801949350505050565b813581556001808201602080850135601e198636030181126200294657600080fd5b8501803567ffffffffffffffff8111156200296057600080fd5b80360383830113156200297257600080fd5b6200298a816200298386546200248d565b86620024c9565b6000601f821160018114620029c35760008315620029aa57508382018501355b600019600385901b1c1916600184901b17865562002a1f565b600086815260209020601f19841690835b82811015620029f557868501880135825593870193908901908701620029d4565b508482101562002a155760001960f88660031b161c198785880101351681555b50508683881b0186555b50505050505050604082013560028201555050565b8181038181111562001818576200181862002616565b7f19457468657265756d205369676e6564204d6573736167653a0a00000000000081526000835162002a8481601a850160208801620021b8565b83519083019062002a9d81601a840160208801620021b8565b01601a01949350505050565b634e487b7160e01b600052602160045260246000fdfe608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611807806100a56000396000f3fe6080604052600436106100e15760003560e01c80639730886d1161007f578063b201246f11610059578063b201246f1461030e578063b6aed0cb1461032e578063e138a8d21461034e578063f2fde38b1461036e57610155565b80639730886d1461029557806399a3ad21146102b5578063b1454caa146102d557610155565b8063346633fb116100bb578063346633fb1461022557806336d2da9014610238578063715018a6146102585780638da5cb5b1461026d57610155565b80630fcfbd11146101a25780630fe9188e146101d557806333a88c72146101f557610155565b36610155576040517f346633fb0000000000000000000000000000000000000000000000000000000081523360048201523460248201819052309163346633fb91906044016000604051808303818588803b15801561013f57600080fd5b505af1158015610153573d6000803e3d6000fd5b005b60405162461bcd60e51b815260206004820152600b60248201527f756e737570706f7274656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b3480156101ae57600080fd5b506101c26101bd366004610f80565b61038e565b6040519081526020015b60405180910390f35b3480156101e157600080fd5b506101536101f0366004610fb5565b610428565b34801561020157600080fd5b50610215610210366004610f80565b61049e565b60405190151581526020016101cc565b610153610233366004610fe3565b6104f1565b34801561024457600080fd5b5061015361025336600461100f565b6105d4565b34801561026457600080fd5b50610153610683565b34801561027957600080fd5b506000546040516001600160a01b0390911681526020016101cc565b3480156102a157600080fd5b506101536102b036600461102c565b610697565b3480156102c157600080fd5b506101536102d0366004610fe3565b6107e9565b3480156102e157600080fd5b506102f56102f03660046110a2565b610899565b60405167ffffffffffffffff90911681526020016101cc565b34801561031a57600080fd5b5061015361032936600461119b565b6108fa565b34801561033a57600080fd5b506101536103493660046111fd565b610afc565b34801561035a57600080fd5b5061015361036936600461121f565b610b98565b34801561037a57600080fd5b5061015361038936600461100f565b610d78565b600080826040516020016103a291906112ce565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150806104215760405162461bcd60e51b815260206004820152602160248201527f54686973206d65737361676520776173206e65766572207375626d69747465646044820152601760f91b6064820152608401610199565b9392505050565b610430610dcf565b600081815260046020526040812054900361048d5760405162461bcd60e51b815260206004820152601a60248201527f537461746520726f6f7420646f6573206e6f742065786973742e0000000000006044820152606401610199565b600090815260046020526040812055565b600080826040516020016104b291906112ce565b60408051601f1981840301815291815281516020928301206000818152600190935291205490915080158015906104e95750428111155b949350505050565b60003411801561050057508034145b6105725760405162461bcd60e51b815260206004820152603060248201527f417474656d7074696e6720746f2073656e642076616c756520776974686f757460448201527f2070726f766964696e67204574686572000000000000000000000000000000006064820152608401610199565b600061057d33610e15565b6040805134815267ffffffffffffffff831660208201529192506001600160a01b0385169133917f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6910160405180910390a3505050565b6105dc610dcf565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610629576040519150601f19603f3d011682016040523d82523d6000602084013e61062e565b606091505b505090508061067f5760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b5050565b61068b610dcf565b6106956000610e73565b565b61069f610dcf565b60006106ab82426113cf565b90506000836040516020016106c091906112ce565b60408051601f198184030181529181528151602092830120600081815260019093529120549091501561075b5760405162461bcd60e51b815260206004820152602160248201527f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636560448201527f21000000000000000000000000000000000000000000000000000000000000006064820152608401610199565b600081815260016020908152604082208490556002919061077e9087018761100f565b6001600160a01b0316815260208101919091526040016000908120906107aa60808701606088016113e2565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208591600402016107e182826115b0565b505050505050565b6107f1610dcf565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461083e576040519150601f19603f3d011682016040523d82523d6000602084013e610843565b606091505b50509050806108945760405162461bcd60e51b815260206004820152601460248201527f6661696c65642073656e64696e672076616c75650000000000000000000000006044820152606401610199565b505050565b60006108a433610e15565b9050336001600160a01b03167fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef7759378288888888886040516108e9969594939291906116ca565b60405180910390a295945050505050565b600081815260046020526040812054900361096a5760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b6000818152600460205260409020544210156109d25760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b6000846040516020016109e5919061171a565b60408051601f198184030181528282528051602091820120908301829052600160608401527f760000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610a8384848484604051602001610a6891815260200190565b60405160208183030381529060405280519060200120610ed0565b610af55760405162461bcd60e51b815260206004820152603360248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7560448201527f65207472616e73666572206d6573736167652e000000000000000000000000006064820152608401610199565b5050505050565b610b04610dcf565b60008281526004602052604090205415610b865760405162461bcd60e51b815260206004820152602560248201527f526f6f7420616c726561647920616464656420746f20746865206d657373616760448201527f65206275730000000000000000000000000000000000000000000000000000006064820152608401610199565b60009182526004602052604090912055565b6000818152600460205260408120549003610c085760405162461bcd60e51b815260206004820152602a60248201527f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6560448201526939b9b0b3b290313ab99760b11b6064820152608401610199565b600081815260046020526040902054421015610c705760405162461bcd60e51b815260206004820152602160248201527f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965746044820152601760f91b6064820152608401610199565b600084604051602001610c8391906112ce565b60408051601f198184030181528282528051602091820120908301829052600160608401527f6d0000000000000000000000000000000000000000000000000000000000000060808401529082015260a001604051602081830303815290604052805190602001209050610d0684848484604051602001610a6891815260200190565b610af55760405162461bcd60e51b815260206004820152603060248201527f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7360448201527f7320636861696e206d6573736167652e000000000000000000000000000000006064820152608401610199565b610d80610dcf565b6001600160a01b038116610dc3576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610199565b610dcc81610e73565b50565b6000546001600160a01b03163314610695576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610199565b6001600160a01b0381166000908152600360205260408120805467ffffffffffffffff169160019190610e48838561177a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082610ede868685610ee8565b1495945050505050565b600081815b84811015610f2b57610f1782878784818110610f0b57610f0b6117a2565b90506020020135610f34565b915080610f23816117b8565b915050610eed565b50949350505050565b6000818310610f50576000828152602084905260409020610f5f565b60008381526020839052604090205b90505b92915050565b600060c08284031215610f7a57600080fd5b50919050565b600060208284031215610f9257600080fd5b813567ffffffffffffffff811115610fa957600080fd5b6104e984828501610f68565b600060208284031215610fc757600080fd5b5035919050565b6001600160a01b0381168114610dcc57600080fd5b60008060408385031215610ff657600080fd5b823561100181610fce565b946020939093013593505050565b60006020828403121561102157600080fd5b813561042181610fce565b6000806040838503121561103f57600080fd5b823567ffffffffffffffff81111561105657600080fd5b61106285828601610f68565b95602094909401359450505050565b63ffffffff81168114610dcc57600080fd5b60ff81168114610dcc57600080fd5b803561109d81611083565b919050565b6000806000806000608086880312156110ba57600080fd5b85356110c581611071565b945060208601356110d581611071565b9350604086013567ffffffffffffffff808211156110f257600080fd5b818801915088601f83011261110657600080fd5b81358181111561111557600080fd5b89602082850101111561112757600080fd5b602083019550809450505050606086013561114181611083565b809150509295509295909350565b60008083601f84011261116157600080fd5b50813567ffffffffffffffff81111561117957600080fd5b6020830191508360208260051b850101111561119457600080fd5b9250929050565b60008060008084860360c08112156111b257600080fd5b60808112156111c057600080fd5b50849350608085013567ffffffffffffffff8111156111de57600080fd5b6111ea8782880161114f565b9598909750949560a00135949350505050565b6000806040838503121561121057600080fd5b50508035926020909101359150565b6000806000806060858703121561123557600080fd5b843567ffffffffffffffff8082111561124d57600080fd5b61125988838901610f68565b9550602087013591508082111561126f57600080fd5b5061127c8782880161114f565b9598909750949560400135949350505050565b67ffffffffffffffff81168114610dcc57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600082356112df81610fce565b6001600160a01b03811660208401525060208301356112fd8161128f565b67ffffffffffffffff80821660408501526040850135915061131e82611071565b63ffffffff80831660608601526060860135925061133b83611071565b80831660808601525060808501359150601e1985360301821261135d57600080fd5b602091850191820191358181111561137457600080fd5b80360383131561138357600080fd5b60c060a086015261139860e0860182856112a5565b925050506113a860a08501611092565b60ff811660c0850152509392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f6257610f626113b9565b6000602082840312156113f457600080fd5b813561042181611071565b60008135610f6281611071565b6000808335601e1984360301811261142357600080fd5b83018035915067ffffffffffffffff82111561143e57600080fd5b60200191503681900382131561119457600080fd5b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061147d57607f821691505b602082108103610f7a57634e487b7160e01b600052602260045260246000fd5b601f82111561089457600081815260208120601f850160051c810160208610156114c45750805b601f850160051c820191505b818110156107e1578281556001016114d0565b67ffffffffffffffff8311156114fb576114fb611453565b61150f836115098354611469565b8361149d565b6000601f841160018114611543576000851561152b5750838201355b600019600387901b1c1916600186901b178355610af5565b600083815260209020601f19861690835b828110156115745786850135825560209485019460019092019101611554565b50868210156115915760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008135610f6281611083565b81356115bb81610fce565b6001600160a01b038116905081548173ffffffffffffffffffffffffffffffffffffffff19821617835560208401356115f38161128f565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b1690507fffffffff000000000000000000000000000000000000000000000000000000008184828516171785556040860135925061165183611071565b921760e09190911b90911617815561168961166e606084016113ff565b6001830163ffffffff821663ffffffff198254161781555050565b611696608083018361140c565b6116a48183600286016114e3565b505061067f6116b560a084016115a3565b6003830160ff821660ff198254161781555050565b67ffffffffffffffff87168152600063ffffffff808816602084015280871660408401525060a0606083015261170460a0830185876112a5565b905060ff83166080830152979650505050505050565b60808101823561172981610fce565b6001600160a01b03908116835260208401359061174582610fce565b1660208301526040838101359083015260608301356117638161128f565b67ffffffffffffffff811660608401525092915050565b67ffffffffffffffff81811683821601908082111561179b5761179b6113b9565b5092915050565b634e487b7160e01b600052603260045260246000fd5b6000600182016117ca576117ca6113b9565b506001019056fea2646970667358221220a449a197632e1117b118ced8f7cf97a1ae44b160775ee146e59b50cbc1b8dcaa64736f6c63430008140033a2646970667358221220d500420acc4e9a0c6c9979499f0438445c2797b0a7aa4819ba213d9d82c267f764736f6c63430008140033", } // ManagementContractABI is the input ABI used to generate the binding from. diff --git a/contracts/src/management/ManagementContract.sol b/contracts/src/management/ManagementContract.sol index 1b538a7c59..04ffadf42a 100644 --- a/contracts/src/management/ManagementContract.sol +++ b/contracts/src/management/ManagementContract.sol @@ -61,7 +61,7 @@ contract ManagementContract is Initializable, OwnableUpgradeable { function initialize() public initializer { __Ownable_init(msg.sender); lastBatchSeqNo = 0; - rollups.nextFreeSequenceNumber = 0; //redundant as the default is 0, but for clarity + rollups.nextFreeSequenceNumber = 1; // rollup 0 == nil hash merkleMessageBus = new MerkleTreeMessageBus.MerkleTreeMessageBus(); messageBus = MessageBus.IMessageBus(address(merkleMessageBus)); diff --git a/go/host/l1/statemachine.go b/go/host/l1/statemachine.go index d941e91c9e..ef967518c5 100644 --- a/go/host/l1/statemachine.go +++ b/go/host/l1/statemachine.go @@ -103,7 +103,7 @@ func (c *crossChainStateMachine) PublishNextBundle() error { } // Get the bundle range from the management contract - nextForkUID, begin, end, err := c.publisher.GetBundleRangeFromManagementContract(big.NewInt(0).SetUint64(c.currentRollup), c.latestRollup.ForkUID) + nextForkUID, begin, end, err := c.publisher.GetBundleRangeFromManagementContract(big.NewInt(0).SetUint64(c.currentRollup), c.rollupHistory[c.currentRollup].ForkUID) if err != nil { return err }