UNPKG

@mantleio/contracts

Version:
1,195 lines 126 kB
{ "_format": "hh-sol-artifact-1", "contractName": "TssStakingSlashing", "sourceName": "contracts/L1/tss/TssStakingSlashing.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "", "type": "address" }, { "indexed": false, "internalType": "enum TssStakingSlashing.SlashType", "name": "", "type": "uint8" } ], "name": "Slashing", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "WithdrawQueue", "type": "event" }, { "inputs": [], "name": "canCompleteQueuedWithdrawal", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimerOperators", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clearQuitRequestList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "completeWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" } ], "name": "delegateTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "delegation", "outputs": [ { "internalType": "contract IDelegation", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "delegationManager", "outputs": [ { "internalType": "contract IDelegationManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "delegators", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" }, { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "newShares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "explanation", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getQuitRequestList", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "batchIndex", "type": "uint256" }, { "internalType": "address", "name": "user", "type": "address" } ], "name": "getSlashRecord", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSlashingParams", "outputs": [ { "internalType": "uint256[2]", "name": "", "type": "uint256[2]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_mantleToken", "type": "address" }, { "internalType": "address", "name": "_tssGroupContract", "type": "address" }, { "internalType": "address", "name": "_delegationManager", "type": "address" }, { "internalType": "address", "name": "_delegation", "type": "address" }, { "internalType": "address", "name": "_l1messenger", "type": "address" }, { "internalType": "address", "name": "_regulatoryAccount", "type": "address" }, { "internalType": "address", "name": "_tssManager", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "isCanOperator", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "isJailed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isSetParam", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "messenger", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "contract IDelegationShare[]", "name": "investorDelegationShares", "type": "address[]" }, { "internalType": "uint256[]", "name": "investorShares", "type": "uint256[]" } ], "name": "onDelegationReceived", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "contract IDelegationShare[]", "name": "delegationShares", "type": "address[]" }, { "internalType": "uint256[]", "name": "investorShares", "type": "uint256[]" } ], "name": "onDelegationReceived", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "contract IDelegationShare[]", "name": "delegationShares", "type": "address[]" }, { "internalType": "uint256[]", "name": "investorShares", "type": "uint256[]" } ], "name": "onDelegationWithdrawn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegator", "type": "address" }, { "internalType": "contract IDelegationShare[]", "name": "investorDelegationShares", "type": "address[]" }, { "internalType": "uint256[]", "name": "investorShares", "type": "uint256[]" } ], "name": "onDelegationWithdrawn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "operatorClaimers", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "operators", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "payForService", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "quitRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "quitRequestList", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_pubKey", "type": "bytes" } ], "name": "registerAsOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "regulatoryAccount", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" }, { "internalType": "address", "name": "_claimer", "type": "address" } ], "name": "setClaimer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "setRegulatoryAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[2]", "name": "_slashAmount", "type": "uint256[2]" } ], "name": "setSlashingParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "setTokenAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tssGroup", "type": "address" } ], "name": "setTssGroupAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tssManager", "type": "address" } ], "name": "setTssManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "shares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountShares", "type": "uint256" } ], "name": "sharesToUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountShares", "type": "uint256" } ], "name": "sharesToUnderlyingView", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "slashAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_messageBytes", "type": "bytes" }, { "internalType": "bytes", "name": "_sig", "type": "bytes" } ], "name": "slashing", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "stakers", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "tssDelegationContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tssDelegationManagerContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tssGroupContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tssManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unJail", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountUnderlying", "type": "uint256" } ], "name": "underlyingToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountUnderlying", "type": "uint256" } ], "name": "underlyingToSharesView", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "underlyingToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "userUnderlying", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "userUnderlyingView", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" }, { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountShares", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "withdrawalRoots", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "withdrawals", "outputs": [ { "internalType": "address", "name": "depositor", "type": "address" }, { "components": [ { "internalType": "address", "name": "withdrawer", "type": "address" }, { "internalType": "uint96", "name": "nonce", "type": "uint96" } ], "internalType": "struct IDelegationManager.WithdrawerAndNonce", "name": "withdrawerAndNonce", "type": "tuple" }, { "internalType": "address", "name": "delegatedAddress", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60806040523480156200001157600080fd5b5060cd80546001600160a01b03191690556200002c62000032565b620000f4565b600054610100900460ff16156200009f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000f2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61621980620001046000396000f3fe6080604052600436106103ad5760003560e01c80638f6a6240116101e7578063c8b6cbf71161010d578063ea4d3c9b116100a0578063f47c83c51161006f578063f47c83c51461055a578063f5cf673b14610bc1578063f756fa2114610be1578063fee17dd514610bf657600080fd5b8063ea4d3c9b14610b41578063f2bd740014610b61578063f2fde38b14610b81578063f3e7387514610ba157600080fd5b8063d9caed12116100dc578063d9caed1214610aab578063df5cf72314610acb578063e3dae51c14610aeb578063ea0c8c2f14610b0b57600080fd5b8063c8b6cbf714610a15578063ce7c2ac214610a35578063d323041d14610a55578063d58ecaaa14610a7557600080fd5b8063ab5921e111610185578063b6b55f2511610154578063b6b55f2514610996578063bbb26c63146109b6578063c3a82e11146109c8578063c665c35a146109f557600080fd5b8063ab5921e11461091f578063ac637c7a14610934578063b1bbdc4114610954578063b3fc1cb21461097457600080fd5b8063965a303f116101c1578063965a303f1461089a5780639c211730146108ba578063a458413a146108df578063a5424a55146108ff57600080fd5b80638f6a62401461084557806390ed6bf41461086557806395cf5bea1461087a57600080fd5b80635716d17c116102d7578063740efec31161026a5780638340f549116102395780638340f549146107b15780638c871019146107d15780638d23fc61146107f15780638da5cb5b1461082757600080fd5b8063740efec31461069e5780637a8b2637146106b35780637a9262a2146106d3578063829673ef1461076b57600080fd5b806360ac5166116102a657806360ac5166146106345780636dd300b5146106545780636eae5b1114610674578063715018a61461068957600080fd5b80635716d17c146105bc57806357b0f05f146105dc5780635887c33c146105fc5780635c975abb1461061c57600080fd5b8063358764761161034f5780633ccfd60b1161031e5780633ccfd60b14610545578063412cdd2c1461055a578063490ab9d61461057a578063553ca5f81461059c57600080fd5b806335876476146104c15780633a98ef39146104e15780633c86a42f146105055780633cb747bf1461052557600080fd5b80632495a5991161038b5780632495a5991461042f57806326a4e8d214610467578063289087ba1461048757806329f13431146104a157600080fd5b8063111b8c02146103b257806313e7c9d8146103c957806314bfb527146103ff575b600080fd5b3480156103be57600080fd5b506103c7610c0b565b005b3480156103d557600080fd5b506103e96103e4366004615143565b610c21565b6040516103f691906151da565b60405180910390f35b34801561040b57600080fd5b5061041f61041a366004615143565b610cbb565b60405190151581526020016103f6565b34801561043b57600080fd5b5060ca5461044f906001600160a01b031681565b6040516001600160a01b0390911681526020016103f6565b34801561047357600080fd5b506103c7610482366004615143565b610e03565b34801561049357600080fd5b5060dd5461041f9060ff1681565b3480156104ad57600080fd5b506103c76104bc3660046151ed565b610e90565b3480156104cd57600080fd5b506103c76104dc36600461520f565b610ff1565b3480156104ed57600080fd5b506104f760cb5481565b6040519081526020016103f6565b34801561051157600080fd5b506103c7610520366004615143565b611237565b34801561053157600080fd5b5060cd5461044f906001600160a01b031681565b34801561055157600080fd5b506103c76112c4565b34801561056657600080fd5b506103c7610575366004615462565b505050565b34801561058657600080fd5b5061058f61190f565b6040516103f691906154d8565b3480156105a857600080fd5b506104f76105b7366004615143565b611971565b3480156105c857600080fd5b5060cf5461044f906001600160a01b031681565b3480156105e857600080fd5b5061044f6105f7366004615525565b611985565b34801561060857600080fd5b506103c7610617366004615587565b6119af565b34801561062857600080fd5b5060975460ff1661041f565b34801561064057600080fd5b506103c761064f366004615143565b611d12565b34801561066057600080fd5b506103c761066f3660046155f3565b611d9f565b34801561068057600080fd5b506103c7611fc1565b34801561069557600080fd5b506103c7612224565b3480156106aa57600080fd5b506103c7612236565b3480156106bf57600080fd5b506104f76106ce366004615525565b612635565b3480156106df57600080fd5b5061075c6106ee366004615143565b60d8602090815260009182526040918290206003810154835180850190945260048201546001600160a01b038082168652740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff169385019390935260059091015490821692911683565b6040516103f69392919061567c565b34801561077757600080fd5b5061041f6107863660046156cd565b600091825260d5602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156107bd57600080fd5b506104f76107cc3660046156fd565b61266b565b3480156107dd57600080fd5b506104f76107ec366004615525565b6129d0565b3480156107fd57600080fd5b5061044f61080c366004615143565b60da602052600090815260409020546001600160a01b031681565b34801561083357600080fd5b506033546001600160a01b031661044f565b34801561085157600080fd5b506104f7610860366004615143565b6129db565b34801561087157600080fd5b506103c76129e9565b34801561088657600080fd5b506103c761089536600461573e565b612ad7565b3480156108a657600080fd5b5060d05461044f906001600160a01b031681565b3480156108c657600080fd5b5060dd5461044f9061010090046001600160a01b031681565b3480156108eb57600080fd5b5061041f6108fa366004615143565b612c0d565b34801561090b57600080fd5b506103c761091a366004615143565b612cac565b34801561092b57600080fd5b506103e9612d49565b34801561094057600080fd5b506103c761094f366004615143565b612d69565b34801561096057600080fd5b506103c761096f3660046155f3565b612dba565b34801561098057600080fd5b5061098961321e565b6040516103f69190615780565b3480156109a257600080fd5b506104f76109b1366004615525565b613258565b6103c76109c43660046157b1565b5050565b3480156109d457600080fd5b506104f76109e3366004615143565b60d76020526000908152604090205481565b348015610a0157600080fd5b5060d65461044f906001600160a01b031681565b348015610a2157600080fd5b5061044f610a303660046157b1565b613309565b348015610a4157600080fd5b506104f7610a50366004615143565b613341565b348015610a6157600080fd5b5060ce5461044f906001600160a01b031681565b348015610a8157600080fd5b5061044f610a90366004615143565b60db602052600090815260409020546001600160a01b031681565b348015610ab757600080fd5b506103c7610ac63660046156fd565b6133de565b348015610ad757600080fd5b5060cc5461044f906001600160a01b031681565b348015610af757600080fd5b506104f7610b06366004615525565b61365a565b348015610b1757600080fd5b5061044f610b26366004615143565b60dc602052600090815260409020546001600160a01b031681565b348015610b4d57600080fd5b5060c95461044f906001600160a01b031681565b348015610b6d57600080fd5b506104f7610b7c366004615525565b61369f565b348015610b8d57600080fd5b506103c7610b9c366004615143565b6136b6565b348015610bad57600080fd5b506104f7610bbc366004615525565b613746565b348015610bcd57600080fd5b506103c7610bdc3660046157dd565b613751565b348015610bed57600080fd5b506103c7613a81565b348015610c0257600080fd5b5061041f613d94565b610c1361404b565b610c1f60d26000614fa2565b565b60d16020526000908152604090208054610c3a9061580b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c669061580b565b8015610cb35780601f10610c8857610100808354040283529160200191610cb3565b820191906000526020600020905b815481529060010190602001808311610c9657829003601f168201915b505050505081565b60ce546001600160a01b03828116600090815260d1602052604080822090517f54bbb9140000000000000000000000000000000000000000000000000000000081529193849316916354bbb91491610d1591600401615859565b600060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610d89919081019061595b565b805151909150604014610de35760405162461bcd60e51b815260206004820152601460248201527f747373206d656d626572206e6f7420657869737400000000000000000000000060448201526064015b60405180910390fd5b600181604001516001811115610dfb57610dfb615a58565b149392505050565b610e0b61404b565b6001600160a01b038116610e615760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610dda565b60ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610e9861404b565b8035602082013511610f125760405162461bcd60e51b815260206004820152602b60248201527f696e76616c696420706172616d20736c617368416d6f756e742c20616e696d7560448201527f73203c3d20757074696d650000000000000000000000000000000000000000006064820152608401610dda565b60005b6002811015610fc2576000828260028110610f3257610f32615a87565b602002013511610f845760405162461bcd60e51b815260206004820152600e60248201527f696e76616c696420616d6f756e740000000000000000000000000000000000006044820152606401610dda565b818160028110610f9657610f96615a87565b602002013560d38260028110610fae57610fae615a87565b015580610fba81615ae5565b915050610f15565b505060dd80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b600054610100900460ff16158080156110115750600054600160ff909116105b8061102b5750303b15801561102b575060005460ff166001145b61109d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610dda565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110fb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6111036140a5565b61110b61412a565b60ca80546001600160a01b03808b1673ffffffffffffffffffffffffffffffffffffffff199283161790925560ce80548a841690831617905560cf8054898416908316811790915560d08054898516908416811790915560c98054841690921790915560cc80548316909117905560cd805487841690831617905560d68054868416921691909117905560dd8054918416610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055801561122d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b61123f61404b565b6001600160a01b0381166112955760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610dda565b60d6805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60cc546040517f3e28391d0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690633e28391d9060240160206040518083038186803b15801561132057600080fd5b505afa158015611334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113589190615b00565b6113a45760405162461bcd60e51b815260206004820152600d60248201527f6e6f742064656c656761746f72000000000000000000000000000000000000006044820152606401610dda565b33600090815260d76020526040902054156114265760405162461bcd60e51b8152602060048201526024808201527f6d73672073656e64657220616c7265616479207265717565737420776974686460448201527f72617773000000000000000000000000000000000000000000000000000000006064820152608401610dda565b6040805160018082528183019092526000916020808301908036833701905050905060008160008151811061145d5761145d615a87565b602090810291909101015260408051600180825281830190925260009181602001602082028036833701905050905030816000815181106114a0576114a0615a87565b6001600160a01b039290921660209283029190910190910152604080516001808252818301909252600091816020016020820280368337505060ca5482519293506001600160a01b0316918391506000906114fd576114fd615a87565b6001600160a01b03929092166020928302919091019091015260408051600180825281830190925260009181602001602082028036833701905050905061154333613341565b8160008151811061155657611556615a87565b602090810291909101015260cf546040517fa7c373bc0000000000000000000000000000000000000000000000000000000081523360048201526000916001600160a01b03169063a7c373bc9060240160206040518083038186803b1580156115be57600080fd5b505afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190615b22565b905060006040518060400160405280336001600160a01b0316815260200161161d846141af565b6bffffffffffffffffffffffff16905260cc546040517f65da12640000000000000000000000000000000000000000000000000000000081523360048201529192506000916001600160a01b03909116906365da12649060240160206040518083038186803b15801561168f57600080fd5b505afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190615b3b565b6040805160c08101825288815260208082018990528183018890523360608301819052608083018790526001600160a01b03851660a0840152600090815260d882529290922081518051949550919384939192611728928492910190614fc0565b5060208281015180516117419260018501920190614fc0565b506040820151805161175d91600284019160209091019061502e565b5060608201516003820180546001600160a01b0392831673ffffffffffffffffffffffffffffffffffffffff1991821617909155608084015180516020909101516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000029083161760048085019190915560a09094015160059093018054938316939091169290921790915560cf546040517f529075a5000000000000000000000000000000000000000000000000000000008152600093919092169163529075a5916118389133918e918e918e918e918d9101615bcc565b602060405180830381600087803b15801561185257600080fd5b505af1158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190615b22565b33600081815260d76020526040812083905588519293507f784199bc7528da846b1da87aeba29604de8f22a93e73379d5d1c7282fa3c727f928991906118d2576118d2615a87565b60200260200101516040516118fc9291906001600160a01b03929092168252602082015260400190565b60405180910390a1505050505050505050565b606060d280548060200260200160405190810160405280929190818152602001828054801561196757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611949575b5050505050905090565b600061197f6106ce83613341565b92915050565b60d2818154811061199557600080fd5b6000918252602090912001546001600160a01b0316905081565b60026065541415611a025760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610dda565b600260655560dd5461010090046001600160a01b03163314611a8c5760405162461bcd60e51b815260206004820152603060248201527f5473735374616b696e67536c617368696e673a206d73672e73656e646572206960448201527f73206e6f74207473734d616e61676572000000000000000000000000000000006064820152608401610dda565b6000611a9a84860186615c64565b9050611aa98160200151610cbb565b15611af65760405162461bcd60e51b815260206004820152601760248201527f746865206e6f646520616c7265616479206a61696c65640000000000000000006044820152606401610dda565b8051600090815260d560209081526040808320828501516001600160a01b0316845290915290205460ff1615611b6e5760405162461bcd60e51b815260206004820152600f60248201527f616c726561647920736c617368656400000000000000000000000000000000006044820152606401610dda565b8051600090815260d560209081526040808320828501516001600160a01b03908116855292529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560ce549151911690633231a7f090611bdc9088908890615d5c565b6040519081900381207fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168252611c1e9187908790600401615d6c565b602060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c709190615b00565b611cbc5760405162461bcd60e51b815260206004820152601c60248201527f7369676e6572206e6f74207473732067726f757020707562206b6579000000006044820152606401610dda565b611cc581614237565b7f9453459a6e9fa2069f1490c99cec15646afa157300f218a7f7840b23d09dbd3e81602001518260600151604051611cfe929190615dc0565b60405180910390a150506001606555505050565b611d1a61404b565b6001600160a01b038116611d705760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610dda565b60ce805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60cc546001600160a01b03163314611e1f5760405162461bcd60e51b815260206004820152602960248201527f44656c65676174696f6e5368617265426173652e6f6e6c7944656c656761746960448201527f6f6e4d616e6167657200000000000000000000000000000000000000000000006064820152608401610dda565b815160018114611e715760405162461bcd60e51b815260206004820152601760248201527f64656c65676174696f6e206f6e6c7920666f72207473730000000000000000006044820152606401610dda565b8151600114611ec25760405162461bcd60e51b815260206004820152601d60248201527f64656c65676174696f6e207368617265206f6e6c7920666f72207473730000006044820152606401610dda565b306001600160a01b031683600081518110611edf57611edf615a87565b60200260200101516001600160a01b031614611f3d5760405162461bcd60e51b815260206004820152601960248201527f6d757374207573652063757272656e7420636f6e7472616374000000000000006044820152606401610dda565b6001600160a01b03858116600090815260da602052604090205416611fba576001600160a01b03808616600081815260da602090815260408083208054958a1673ffffffffffffffffffffffffffffffffffffffff199687168117909155835260d982528220805460018101825590835291200180549092161790555b5050505050565b60dd5460ff166120135760405162461bcd60e51b815260206004820152601d60248201527f68617665206e6f74207365742074686520736c61736820616d6f756e740000006044820152606401610dda565b61201c33610cbb565b61208e5760405162461bcd60e51b815260206004820152603160248201527f416e20756e6a61696c6564207573657220646f65736e2774206e65656420746f60448201527f2063616c6c2074686973206d6574686f640000000000000000000000000000006064820152608401610dda565b60006120986144d1565b905060d36001015460cb5460cc546040517f778e55f300000000000000000000000000000000000000000000000000000000815233600482015230602482015284916001600160a01b03169063778e55f39060440160206040518083038186803b15801561210557600080fd5b505afa158015612119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213d9190615b22565b6121479190615e14565b6121519190615e33565b101561219f5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610dda565b60ce5433600090815260d160205260409081902090517f429ec49c0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163429ec49c916121f691600401615859565b600060405180830381600087803b15801561221057600080fd5b505af1158015611fba573d6000803e3d6000fd5b61222c61404b565b610c1f600061456b565b600260655414156122895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610dda565b600260655560cc546040517f778e55f30000000000000000000000000000000000000000000000000000000081523360048201523060248201526000916001600160a01b03169063778e55f39060440160206040518083038186803b1580156122f157600080fd5b505afa158015612305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123299190615b22565b116123765760405162461bcd60e51b815260206004820152601360248201527f646f206e6f742068617665206465706f736974000000000000000000000000006044820152606401610dda565b60ce5433600090815260d160205260409081902090517f4866e2e00000000000000000000000000000000000000000000000000000000081526001600160a01b0390921691634866e2e0916123cd91600401615859565b602060405180830381600087803b1580156123e757600080fd5b505af11580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190615b00565b806124ce575060ce5433600090815260d160205260409081902090517fbcbc5fc60000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163bcbc5fc69161247c91600401615859565b602060405180830381600087803b15801561249657600080fd5b505af11580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ce9190615b00565b6125405760405162461bcd60e51b815260206004820152602960248201527f6e6f742061742074686520696e6163746976652067726f7570206f722061637460448201527f6976652067726f757000000000000000000000000000000000000000000000006064820152608401610dda565b60005b60d2548110156125df57336001600160a01b031660d2828154811061256a5761256a615a87565b6000918252602090912001546001600160a01b031614156125cd5760405162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2071756974526571756573744c6973740000000000006044820152606401610dda565b806125d781615ae5565b915050612543565b5060d28054600181810183556000929092527ff2192e1030363415d7b4fb0406540a0060e8e2fc8982f3f32289379e11fa654601805473ffffffffffffffffffffffffffffffffffffffff191633179055606555565b600060cb5460001415612646575090565b60cb54826126526144d1565b61265c9190615e14565b61197f9190615e33565b919050565b60006126756145ca565b60c9546001600160a01b031633146126f55760405162461bcd60e51b815260206004820152602960248201527f44656c65676174696f6e5368617265426173652e6f6e6c7944656c656761746960448201527f6f6e4d616e6167657200000000000000000000000000000000000000000000006064820152608401610dda565b60ca546001600160a01b038481169116146127785760405162461bcd60e51b815260206004820152603d60248201527f44656c65676174696f6e5368617265426173652e6465706f7369743a2043616e60448201527f206f6e6c79206465706f73697420756e6465726c79696e67546f6b656e0000006064820152608401610dda565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce56700000000000000000000000000000000000000000000000000000000179052905160009182916001600160a01b038716916127e991615e6e565b6000604051808303816000865af19150503d8060008114612826576040519150601f19603f3d011682016040523d82523d6000602084013e61282b565b606091505b5091509150816128a35760405162461bcd60e51b815260206004820152602c60248201527f756e6465726c79696e67546f6b656e2068617665206e6f206d6574686f64207760448201527f69746820646563696d616c7300000000000000000000000000000000000000006064820152608401610dda565b60006128ae82615e8a565b90506128bb81600a615f92565b6128c6906001615e14565b8510156129155760405162461bcd60e51b815260206004820152601560248201527f616d6f756e74206d757374206774203120756e697400000000000000000000006044820152606401610dda565b6000856129206144d1565b61292a9190615f9e565b9050801580612939575060cb54155b1561294657859450612962565b8060cb54876129559190615e14565b61295f9190615e33565b94505b8460cb60008282546129749190615fb5565b9091555050604080516001600160a01b03808b168252891660208201529081018790527f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060600160405180910390a1505050505b9392505050565b600061197f8261365a565b600061197f610bbc83613341565b33600090815260d76020526040902054612a6b5760405162461bcd60e51b815260206004820152602660248201527f6d73672073656e646572206d757374207265717565737420776974686472617760448201527f20666972737400000000000000000000000000000000000000000000000000006064820152608401610dda565b33600081815260d760205260408082205460cf5491517f63f1dcce000000000000000000000000000000000000000000000000000000008152600481018290526024810194909452604484019290925290916001600160a01b03909116906363f1dcce906064016121f6565b612b1682828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061461d92505050565b6001600160a01b0316336001600160a01b031614612b765760405162461bcd60e51b815260206004820152601460248201527f7075626c6963206b6579206e6f74206d617463680000000000000000000000006044820152606401610dda565b60d0546040517f11a38c850000000000000000000000000000000000000000000000000000000081523060048201523360248201526001600160a01b03909116906311a38c8590604401600060405180830381600087803b158015612bda57600080fd5b505af1158015612bee573d6000803e3d6000fd5b505033600090815260d160205260409020610575925090508383615069565b60cf546040517fb0eeb55e0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152306024830152600092169063b0eeb55e90604401602060405180830381600087803b158015612c7457600080fd5b505af1158015612c88573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190615b00565b612cb461404b565b6001600160a01b038116612d0a5760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610dda565b60dd80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b606060405180608001604052806048815260200161619c60489139905090565b60d0546040517f438bb7e50000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301523360248301529091169063438bb7e5906044016121f6565b60cc546001600160a01b03163314612e3a5760405162461bcd60e51b815260206004820152602960248201527f44656c65676174696f6e5368617265426173652e6f6e6c7944656c656761746960448201527f6f6e4d616e6167657200000000000000000000000000000000000000000000006064820152608401610dda565b815160018114612e8c5760405162461bcd60e51b815260206004820152601760248201527f64656c65676174696f6e206f6e6c7920666f72207473730000000000000000006044820152606401610dda565b8151600114612edd5760405162461bcd60e51b815260206004820152601d60248201527f64656c65676174696f6e207368617265206f6e6c7920666f72207473730000006044820152606401610dda565b306001600160a01b031683600081518110612efa57612efa615a87565b60200260200101516001600160a01b031614612f585760405162461bcd60e51b815260206004820152601960248201527f6d757374207573652063757272656e7420636f6e7472616374000000000000006044820152606401610dda565b81600081518110612f6b57612f6b615a87565b602002602001015160cf60009054906101000a90046001600160a01b03166001600160a01b03166305579ccc8786600081518110612fab