UNPKG

@mantleio/contracts

Version:
1,071 lines 138 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Rollup", "sourceName": "contracts/L1/fraud-proof/Rollup.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AssertionAlreadyResolved", "type": "error" }, { "inputs": [], "name": "AssertionOutOfRange", "type": "error" }, { "inputs": [], "name": "ChallengePeriodPending", "type": "error" }, { "inputs": [], "name": "ChallengedStaker", "type": "error" }, { "inputs": [], "name": "DifferentParent", "type": "error" }, { "inputs": [], "name": "EmptyAssertion", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "staker1Challenge", "type": "address" }, { "internalType": "address", "name": "staker2Challenge", "type": "address" } ], "name": "InDifferentChallenge", "type": "error" }, { "inputs": [], "name": "InboxReadLimitExceeded", "type": "error" }, { "inputs": [], "name": "InsufficientStake", "type": "error" }, { "inputs": [], "name": "InvalidParent", "type": "error" }, { "inputs": [], "name": "MinimumAssertionPeriodNotPassed", "type": "error" }, { "inputs": [], "name": "NoStaker", "type": "error" }, { "inputs": [], "name": "NoUnresolvedAssertion", "type": "error" }, { "inputs": [], "name": "NotAllStaked", "type": "error" }, { "inputs": [], "name": "NotInChallenge", "type": "error" }, { "inputs": [], "name": "NotStaked", "type": "error" }, { "inputs": [], "name": "ParentAssertionUnstaked", "type": "error" }, { "inputs": [], "name": "PreviousStateHash", "type": "error" }, { "inputs": [], "name": "RedundantInitialized", "type": "error" }, { "inputs": [], "name": "StakedOnUnconfirmedAssertion", "type": "error" }, { "inputs": [], "name": "StakerStakedOnTarget", "type": "error" }, { "inputs": [], "name": "StakersPresent", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "UnproposedAssertion", "type": "error" }, { "inputs": [], "name": "WrongOrder", "type": "error" }, { "inputs": [], "name": "ZeroAddress", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionID", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "challengeAddr", "type": "address" } ], "name": "AssertionChallenged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionID", "type": "uint256" } ], "name": "AssertionConfirmed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionID", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "asserterAddr", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "vmHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "inboxSize", "type": "uint256" } ], "name": "AssertionCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "assertionID", "type": "uint256" } ], "name": "AssertionRejected", "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": "stakerAddr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assertionID", "type": "uint256" } ], "name": "StakerStaked", "type": "event" }, { "inputs": [ { "internalType": "address[]", "name": "toAddAddresses", "type": "address[]" } ], "name": "addToOperatorWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "toAddAddresses", "type": "address[]" } ], "name": "addToStakerWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assertionID", "type": "uint256" } ], "name": "advanceStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "assertions", "outputs": [ { "internalType": "contract AssertionMap", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseStakeAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[2]", "name": "players", "type": "address[2]" }, { "internalType": "uint256[2]", "name": "assertionIDs", "type": "uint256[2]" } ], "name": "challengeAssertion", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "challengeCtx", "outputs": [ { "internalType": "bool", "name": "completed", "type": "bool" }, { "internalType": "address", "name": "challengeAddress", "type": "address" }, { "internalType": "address", "name": "defenderAddress", "type": "address" }, { "internalType": "address", "name": "challengerAddress", "type": "address" }, { "internalType": "uint256", "name": "defenderAssertionID", "type": "uint256" }, { "internalType": "uint256", "name": "challengerAssertionID", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "winner", "type": "address" }, { "internalType": "address", "name": "loser", "type": "address" } ], "name": "completeChallenge", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "confirmFirstUnresolvedAssertion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "confirmedInboxSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "vmHash", "type": "bytes32" }, { "internalType": "uint256", "name": "inboxSize", "type": "uint256" } ], "name": "createAssertion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "vmHash", "type": "bytes32" }, { "internalType": "uint256", "name": "inboxSize", "type": "uint256" }, { "internalType": "bytes32[]", "name": "_batch", "type": "bytes32[]" }, { "internalType": "uint256", "name": "_shouldStartAtElement", "type": "uint256" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "createAssertionWithStateBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentRequiredStake", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_verifier", "type": "address" }, { "internalType": "address", "name": "_stakeToken", "type": "address" }, { "internalType": "address", "name": "_libAddressManager", "type": "address" }, { "internalType": "address", "name": "_assertionMap", "type": "address" }, { "internalType": "uint256", "name": "_minimumAssertionPeriod", "type": "uint256" }, { "internalType": "uint256", "name": "_baseStakeAmount", "type": "uint256" }, { "internalType": "bytes32", "name": "_initialVMhash", "type": "bytes32" }, { "internalType": "address[]", "name": "stakerWhitelists", "type": "address[]" }, { "internalType": "address[]", "name": "operatorWhitelists", "type": "address[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" } ], "name": "isStaked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastConfirmedAssertionID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastCreatedAssertionID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastResolvedAssertionID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "libAddressManager", "outputs": [ { "internalType": "contract Lib_AddressManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minimumAssertionPeriod", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numStakers", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "operatorWhitelist", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "operatorslist", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "registers", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rejectFirstUnresolvedAssertion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "batchIndex", "type": "uint256" }, { "internalType": "bytes32", "name": "batchRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "batchSize", "type": "uint256" }, { "internalType": "uint256", "name": "prevTotalElements", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "bytes", "name": "extraData", "type": "bytes" } ], "internalType": "struct Lib_BVMCodec.ChainBatchHeader", "name": "_batchHeader", "type": "tuple" } ], "name": "rejectLatestCreatedAssertionWithBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "toRemoveAddresses", "type": "address[]" } ], "name": "removeFromOperatorWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "toRemoveAddresses", "type": "address[]" } ], "name": "removeFromStakerWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeOldZombies", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "stakerAddress", "type": "address" } ], "name": "removeStake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" } ], "name": "resolve", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shouldRollBack", "type": "uint256" }, { "internalType": "uint256", "name": "_shouldStartAtElement", "type": "uint256" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "rollbackL2Chain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "stakeAmount", "type": "uint256" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakeToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "stakerWhitelist", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "stakers", "outputs": [ { "internalType": "bool", "name": "isStaked", "type": "bool" }, { "internalType": "uint256", "name": "amountStaked", "type": "uint256" }, { "internalType": "uint256", "name": "assertionID", "type": "uint256" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "currentChallenge", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stakerslist", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "stakeAmount", "type": "uint256" } ], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "verifier", "outputs": [ { "internalType": "contract IVerifierEntry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "withdrawableFunds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "zombies", "outputs": [ { "internalType": "address", "name": "stakerAddress", "type": "address" }, { "internalType": "uint256", "name": "lastAssertionID", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b50600080546001600160a01b03191690556200002c62000032565b62000101565b600054600160a81b900460ff1615620000a15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff600160a01b90910481161015620000ff576000805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b616f8980620001116000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80636aabc35011610191578063b553ee84116100e3578063cfc5901d11610097578063f2fde38b11610071578063f2fde38b14610707578063fa7803e61461071a578063fe2ba8481461072d57600080fd5b8063cfc5901d146106c1578063de574efc146106d4578063e03c8632146106e757600080fd5b8063c8525c3e116100c8578063c8525c3e14610693578063c94b5847146106a6578063c97a5919146106ae57600080fd5b8063b553ee8414610677578063b6da898f1461068057600080fd5b80638c669739116101455780639efbea231161011f5780639efbea2314610648578063a56ba93b1461065b578063aca9a5181461066457600080fd5b80638c669739146105aa5780638da5cb5b146105b25780639168ae72146105c557600080fd5b80637112955911610176578063711295591461057b5780637acb7757146105845780638821b2ae1461059757600080fd5b80636aabc350146105495780636c8b052a1461057257600080fd5b806330b260751161024a578063461a4478116101fe57806351ed6a30116101d857806351ed6a30146104e75780636177fd18146104fa5780636a3685611461053657600080fd5b8063461a4478146104b957806349cd3004146104cc5780634d26732d146104df57600080fd5b80633ccfd60b1161022f5780633ccfd60b1461049557806340d9224b1461049d57806345e38b64146104b057600080fd5b806330b260751461047a57806337d1fbdd1461048257600080fd5b80632aa234f6116102ac5780632f06d1b0116102865780632f06d1b0146104275780632f30cabd1461043a578063300a71611461045a57600080fd5b80632aa234f6146103ee5780632b7ac3f3146104015780632e17de781461041457600080fd5b80632052465e116102dd5780632052465e146103875780632906040e146103b9578063299ca478146103c357600080fd5b80630e456acf146102f9578063107035a414610370575b600080fd5b607754607854607954607a54607b5461032c9460ff8116946001600160a01b036101009092048216949082169391169186565b6040805196151587526001600160a01b0395861660208801529385169386019390935292166060840152608083019190915260a082015260c0015b60405180910390f35b61037960715481565b604051908152602001610367565b61039a610395366004614842565b610740565b604080516001600160a01b039093168352602083019190915201610367565b6103c1610778565b005b6000546103d6906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b6103d66103fc366004614842565b610aba565b6005546103d6906001600160a01b031681565b6103c1610422366004614842565b610ae4565b6103d661043536600461486c565b610cb9565b6103796104483660046148c6565b60756020526000908152604090205481565b6103796104683660046148c6565b60396020526000908152604090205481565b6103c161146c565b6103d6610490366004614842565b61186a565b6103c161187a565b6004546103d6906001600160a01b031681565b61037960015481565b6103d66104c73660046149b8565b6119e3565b6103c16104da366004614a55565b611a7d565b600254610379565b6003546103d6906001600160a01b031681565b6105266105083660046148c6565b6001600160a01b031660009081526073602052604090205460ff1690565b6040519015158152602001610367565b6103c1610544366004614b0f565b611d3e565b6103d66105573660046148c6565b6074602052600090815260409020546001600160a01b031681565b61037960725481565b61037960025481565b6103c1610592366004614b51565b611e80565b6103c16105a5366004614842565b612318565b6103c16124f9565b6038546103d6906001600160a01b031681565b6106126105d33660046148c6565b6073602052600090815260409020805460018201546002830154600384015460049094015460ff90931693919290916001600160a01b03908116911685565b6040805195151586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a001610367565b6103c1610656366004614b0f565b61256c565b61037960705481565b6103c1610672366004614b0f565b6127ae565b610379606f5481565b6103c161068e366004614b81565b6129f0565b6103c16106a1366004614b0f565b612e46565b610379612f82565b6103c16106bc366004614ba3565b613020565b6103c16106cf366004614cb1565b613545565b6103c16106e2366004614d01565b6136f8565b6103796106f53660046148c6565b603b6020526000908152604090205481565b6103c16107153660046148c6565b613c2f565b6103c1610728366004614dba565b613d0e565b6103c161073b3660046148c6565b613fdf565b6076818154811061075057600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b336000908152607460205260409020546001600160a01b03166107e25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064015b60405180910390fd5b607154606f54106108355760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000607254116108875760405162461bcd60e51b815260206004820152600860248201527f4e6f5374616b657200000000000000000000000000000000000000000000000060448201526064016107d9565b6000606f5460016108989190614e17565b600480546040517f828622750000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916382862275916108e59185910190815260200190565b60206040518083038186803b1580156108fd57600080fd5b505afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109359190614e2f565b4210156109845760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b607054600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b0316906330b947709060240160206040518083038186803b1580156109e257600080fd5b505afa1580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190614e2f565b14610a675760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964506172656e740000000000000000000000000000000000000060448201526064016107d9565b606f8054906000610a7783614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150565b603a8181548110610aca57600080fd5b6000918252602090912001546001600160a01b0316905081565b610aed336141a9565b33600090815260736020526040902060705460028201541115610b525760405162461bcd60e51b815260206004820152601c60248201527f5374616b65644f6e556e636f6e6669726d6564417373657274696f6e0000000060448201526064016107d9565b6002548160010154610b649190614e81565b821115610bb35760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b81816001016000828254610bc79190614e81565b90915550506003546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614e98565b610cb55760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b5050565b336000908152607460205260408120546001600160a01b0316610d1e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b81356020830135808210610d745760405162461bcd60e51b815260206004820152600a60248201527f57726f6e674f726465720000000000000000000000000000000000000000000060448201526064016107d9565b607154811115610dc65760405162461bcd60e51b815260206004820152601360248201527f556e70726f706f736564417373657274696f6e0000000000000000000000000060448201526064016107d9565b8160705410610e175760405162461bcd60e51b815260206004820152601860248201527f417373657274696f6e416c72656164795265736f6c766564000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526000916001600160a01b03909116906330b947709060240160206040518083038186803b158015610e7757600080fd5b505afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190614e2f565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916330b9477091610efc9186910190815260200190565b60206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614e2f565b8114610f9a5760405162461bcd60e51b815260206004820152600f60248201527f446966666572656e74506172656e74000000000000000000000000000000000060448201526064016107d9565b6000610fa960208801886148c6565b90506000610fbd6040890160208a016148c6565b9050806001600160a01b0316826001600160a01b031614156110475760405162461bcd60e51b815260206004820152602560248201527f646566656e64657220616e64206368616c6c656e6765206d757374206e6f742060448201527f657175616c00000000000000000000000000000000000000000000000000000060648201526084016107d9565b6001600160a01b03808316600090815260746020526040808220548484168352912054908216911661107882614211565b61108181614211565b600060405161108f906147d7565b604051809103906000f0801580156110ab573d6000803e3d6000fd5b506001600160a01b038084166000908152607360209081526040808320600490810180548688167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092558a871686528386209092018054831682179055825160c0810184529485529284018390528a8516848301819052948a1660608501819052608085018f905260a09094018d905260778054610100949094027fffffffffffffffffffffff00000000000000000000000000000000000000000090941693909317909255607880548316909417909355607980549091169091179055607a8a9055607b8990555190915081907fd0ebe74b4f7d89a9b0fdc9d95f887a7b925c6c7300b5c4b2c3304d97925840fa906111e0908b9084909182526001600160a01b0316602082015260400190565b60405180910390a1600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018990526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b15801561124857600080fd5b505afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018b90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b1580156112e157600080fd5b505afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018e90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b15801561137a57600080fd5b505afa15801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190614e2f565b6005546040517fabf480130000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b8116602483015291821660448201523060648201526084810186905260a4810185905260c4810183905291925086169063abf480139060e401600060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b50959e5050505050505050505050505050505b92915050565b336000908152607460205260409020546001600160a01b03166114d15760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b607154606f54106115245760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000606f5460016115359190614e17565b607054600480546040517f30b9477000000000000000000000000000000000000000000000000000000000815291820184905292935090916001600160a01b0316906330b947709060240160206040518083038186803b15801561159857600080fd5b505afa1580156115ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d09190614e2f565b14156117a157600480546040517f828622750000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b03169063828622759060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190614e2f565b4210156116b85760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b6116c181614285565b600480546040517f366b2b690000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b03169063366b2b699060240160206040518083038186803b15801561171c57600080fd5b505afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117549190614e2f565b146117a15760405162461bcd60e51b815260206004820152600e60248201527f5374616b65727350726573656e7400000000000000000000000000000000000060448201526064016107d9565b606f80549060006117b183614e48565b91905055507f5b24ab8ceb442373727ac5c559a027521cb52db451c74710ebed9faa5fe15a7c606f546040516117e991815260200190565b60405180910390a160048054606f546040517fd8a4e5af000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063d8a4e5af90602401600060405180830381600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b5050505050565b603c8181548110610aca57600080fd5b336000908152607460205260409020546001600160a01b03166118df5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b33600081815260756020526040808220805492905560035490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101939093526024830182905290916001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561195c57600080fd5b505af1158015611970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119949190614e98565b6119e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b50565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac190611a2d908590600401614f41565b60206040518083038186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614f54565b336000908152607460205260409020546001600160a01b0316611ae25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b611b206040518060400160405280600c81526020017f42564d5f526f6c6c7570657200000000000000000000000000000000000000008152506119e3565b6001600160a01b0316336001600160a01b031614611ba65760405162461bcd60e51b815260206004820152603560248201527f6d73672e73656e646572206973206e6f7420726f6c6c75702070726f706f736560448201527f722c2063616e277420617070656e64206261746368000000000000000000000060648201526084016107d9565b611bb087876129f0565b6000611bf06040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b90506000816001600160a01b03168787878787604051602401611c17959493929190614f71565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2169f79f0000000000000000000000000000000000000000000000000000000017905251611c7a9190614ffa565b6000604051808303816000865af19150503d8060008114611cb7576040519150601f19603f3d011682016040523d82523d6000602084013e611cbc565b606091505b5050905080611d335760405162461bcd60e51b815260206004820152602960248201527f73636320617070656e64207374617465206261746368206661696c65642c207260448201527f657665727420616c6c000000000000000000000000000000000000000000000060648201526084016107d9565b505050505050505050565b6038546001600160a01b03163314611d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603a5460005b82811015611e7a57611db08183614e17565b60396000868685818110611dc657611dc6614eba565b9050602002016020810190611ddb91906148c6565b6001600160a01b03168152602081019190915260400160002055603a848483818110611e0957611e09614eba565b9050602002016020810190611e1e91906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580611e7281614e48565b915050611d9e565b50505050565b33600081815260396020526040902054603a80548392908110611ea557611ea5614eba565b6000918252602090912001546001600160a01b031614611f075760405162461bcd60e51b815260206004820152601760248201527f4e4f545f494e5f5354414b45525f57484954454c49535400000000000000000060448201526064016107d9565b6001600160a01b0382166000818152603b6020526040902054603c8054859392908110611f3657611f36614eba565b6000918252602090912001546001600160a01b031614611f985760405162461bcd60e51b815260206004820152601960248201527f4e4f545f494e5f4f50455241544f525f57484954454c4953540000000000000060448201526064016107d9565b6003546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190614e98565b6120875760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b3360009081526073602052604090205460ff161561215f57336000908152607360205260409020600301546001600160a01b038481169116146121325760405162461bcd60e51b815260206004820152602560248201527f7374616b6572203d3e206f70657261746f72206d617070696e67206e6f74207560448201527f6e6971756500000000000000000000000000000000000000000000000000000060648201526084016107d9565b3360009081526073602052604081206001018054869290612154908490614e17565b90915550611e7a9050565b6001600160a01b0383811660009081526074602052604090205416156121c75760405162461bcd60e51b815260206004820152601460248201527f6f70657261746f72206973206f6363757069656400000000000000000000000060448201526064016107d9565b6002548410156122195760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b6040805160a0810182526001808252602080830188815260008486018181526001600160a01b03808b16606088018181526080890185815233808752607389528b87209a518b549015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116178b559651988a01989098559251600289015591516003880180549183167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055955160049097018054979091169686169690961790955593845260749091529282208054909116909217909155607280549161230783614e48565b9190505550611e7a33607054614391565b336000908152607460205260409020546001600160a01b031661237d5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b031680845260739092529091206002810154831115806123b8575060715483115b156124055760405162461bcd60e51b815260206004820152601360248201527f417373657274696f6e4f75744f6652616e67650000000000000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018590526001600160a01b0316906330b947709060240160206040518083038186803b15801561246057600080fd5b505afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190614e2f565b8160020154146124ea5760405162461bcd60e51b815260206004820152601760248201527f506172656e74417373657274696f6e556e7374616b656400000000000000000060448201526064016107d9565b6124f48284614391565b505050565b336000908152607460205260409020546001600160a01b031661255e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b61256a607660006147e4565b565b6038546001600160a01b031633146125c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f4576000603b60008585858181106125e9576125e9614eba565b90506020020160208101906125fe91906148c6565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080603b6000603c6001603c8054905061263a9190614e81565b8154811061264a5761264a614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603c805461267f90600190614e81565b8154811061268f5761268f614eba565b600091825260209091200154603c80546001600160a01b0390921691839081106126bb576126bb614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603c8054806126fa576126fa615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155603b9085858581811061276a5761276a614eba565b905060200201602081019061277f91906148c6565b6001600160a01b03168152602081019190915260400160009081205550806127a681614e48565b9150506125c9565b6038546001600160a01b031633146128085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f45760006039600085858581811061282b5761282b614eba565b905060200201602081019061284091906148c6565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508060396000603a6001603a8054905061287c9190614e81565b8154811061288c5761288c614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603a80546128c190600190614e81565b815481106128d1576128d1614eba565b600091825260209091200154603a80546001600160a01b0390921691839081106128fd576128fd614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603a80548061293c5761293c615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559091019091556039908585858181106129ac576129ac614eba565b90506020020160208101906129c191906148c6565b6001600160a01b03168152602081019190915260400160009081205550806129e881614e48565b91505061280b565b336000908152607460205260409020546001600160a01b0316612a555760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b03908116808552607390935292206004015490911615612af75760405162461bcd60e51b815260206004820152603160248201527f63616e206e6f742063726561746520617373657274696f6e207768656e20737460448201527f616b657220696e206368616c6c656e676500000000000000000000000000000060648201526084016107d9565b6001600160a01b0381811660009081526073602052604090819020600201546001546004805493517f4e04886d000000000000000000000000000000000000000000000000000000008152908101839052919390921690634e04886d9060240160206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba79190614e2f565b612bb19043614e81565b1015612bff5760405162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d417373657274696f6e506572696f644e6f745061737365640060448201526064016107d9565b600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b031690632b27e93b9060240160206040518083038186803b158015612c5a57600080fd5b505afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c929190614e2f565b8311612ce05760405162461bcd60e51b815260206004820152600e60248201527f456d707479417373657274696f6e00000000000000000000000000000000000060448201526064016107d9565b60718054906000612cf083614e48565b9091555050607154604080519182523360208301528101859052606081018490527f5c610f28399ecc14b66149012a0197a5e3257a8c397125afee95d1cf4b9507349060800160405180910390a16004546071546001600160a01b0390911690634228158490868685612d6161446f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b50505050612df082607154614391565b606f8054906000612e0083614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150505050565b6038546001600160a01b03163314612ea05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603c5460005b82811015611e7a57612eb88183614e17565b603b6000868685818110612ece57612ece614eba565b9050602002016020810190612ee391906148c6565b6001600160a01b03168152602081019190915260400160002055603c848483818110612f1157612f11614eba565b9050602002016020810190612f2691906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580612f7a81614e48565b915050612ea6565b600480546070546040517f2b27e93b000000000000000000000000000000000000000000000000000000008152928301526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b158015612fe357600080fd5b505afa158015612ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301b9190614e2f565b905090565b6000547501000000000000000000000000000000000000000000900460ff161580801561306b575060005460017401000000000000000000000000000000000000000090910460ff16105b8061309d5750303b15801561309d575060005474010000000000000000000000000000000000000000900460ff166001145b61310f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d9565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561319557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6001600160a01b038d1615806131b257506001600160a01b038c16155b156131ff5760405162461bcd60e51b815260206004820152600b60248201527f5a65726f4164647265737300000000000000000000000000000000000000000060448201526064016107d9565b8c603860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b600560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060006001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b0316146132e95760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c81169190911790915560045416156133725760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b16908117825560018a905560028990556040517f07663706000000000000000000000000000000000000000000000000000000008152309281019290925290630766370690602401600060405180830381600087803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b50506000606f81905560708190556071819055600480546040517f42281584000000000000000000000000000000000000000000000000000000008152918201