[ { "inputs": [ { "internalType": "address", "name": "_governance", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "CreatedTotalSupplyCache", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "dst", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "indexed": false, "internalType": "uint256", "name": "allowedAfterTimestamp", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "encodedCall", "type": "bytes" } ], "name": "GovernanceCallTimelocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "initialGovernance", "type": "address" } ], "name": "GovernanceInitialised", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "governanceSettings", "type": "address" } ], "name": "GovernedProductionModeEntered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TimelockedGovernanceCallCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes4", "name": "selector", "type": "bytes4" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "TimelockedGovernanceCallExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_contractType", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "_oldContractAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "_newContractAddress", "type": "address" } ], "name": "VotePowerContractChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "src", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawal", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_count", "type": "uint256" } ], "name": "balanceHistoryCleanup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "balanceOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_delegatees", "type": "address[]" }, { "internalType": "uint256[]", "name": "_bips", "type": "uint256[]" } ], "name": "batchDelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_owners", "type": "address[]" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "batchVotePowerOfAt", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_selector", "type": "bytes4" } ], "name": "cancelGovernanceCall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "cleanerContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cleanupBlockNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cleanupBlockNumberManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_bips", "type": "uint256" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "delegateExplicit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "delegatesOf", "outputs": [ { "internalType": "address[]", "name": "_delegateAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "_bips", "type": "uint256[]" }, { "internalType": "uint256", "name": "_count", "type": "uint256" }, { "internalType": "uint256", "name": "_delegationMode", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "delegatesOfAt", "outputs": [ { "internalType": "address[]", "name": "_delegateAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "_bips", "type": "uint256[]" }, { "internalType": "uint256", "name": "_count", "type": "uint256" }, { "internalType": "uint256", "name": "_delegationMode", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_who", "type": "address" } ], "name": "delegationModeOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deposit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "depositTo", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_selector", "type": "bytes4" } ], "name": "executeGovernanceCall", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "governance", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "governanceSettings", "outputs": [ { "internalType": "contract IGovernanceSettings", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "governanceVotePower", "outputs": [ { "internalType": "contract IGovernanceVotePower", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_initialGovernance", "type": "address" } ], "name": "initialise", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "productionMode", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "readVotePowerContract", "outputs": [ { "internalType": "contract IVPContractEvents", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_who", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "revokeDelegationAt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_cleanerContract", "type": "address" } ], "name": "setCleanerContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "setCleanupBlockNumber", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_cleanupBlockNumberManager", "type": "address" } ], "name": "setCleanupBlockNumberManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IIGovernanceVotePower", "name": "_governanceVotePower", "type": "address" } ], "name": "setGovernanceVotePower", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IIVPContract", "name": "_vpContract", "type": "address" } ], "name": "setReadVpContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IIVPContract", "name": "_vpContract", "type": "address" } ], "name": "setWriteVpContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "switchToProductionMode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "name": "timelockedCalls", "outputs": [ { "internalType": "uint256", "name": "allowedAfterTimestamp", "type": "uint256" }, { "internalType": "bytes", "name": "encodedCall", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "totalSupplyCacheCleanup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_count", "type": "uint256" } ], "name": "totalSupplyHistoryCleanup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalVotePower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "totalVotePowerAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "totalVotePowerAtCached", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "undelegateAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_delegateAddresses", "type": "address[]" } ], "name": "undelegateAllExplicit", "outputs": [ { "internalType": "uint256", "name": "_remainingDelegation", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "undelegatedVotePowerOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "undelegatedVotePowerOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "votePowerFromTo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "votePowerFromToAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "votePowerOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "votePowerOfAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "votePowerOfAtCached", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_blockNumber", "type": "uint256" } ], "name": "votePowerOfAtIgnoringRevocation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vpContractInitialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "writeVotePowerContract", "outputs": [ { "internalType": "contract IVPContractEvents", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040526011805460ff60a01b191690553480156200001e57600080fd5b506040516200560338038062005603833981810160405260608110156200004457600080fd5b8151602083018051604051929492938301929190846401000000008211156200006c57600080fd5b9083019060208201858111156200008257600080fd5b82516401000000008111828201881017156200009d57600080fd5b82525081516020918201929091019080838360005b83811015620000cc578181015183820152602001620000b2565b50505050905090810190601f168015620000fa5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011e57600080fd5b9083019060208201858111156200013457600080fd5b82516401000000008111828201881017156200014f57600080fd5b82525081516020918201929091019080838360005b838110156200017e57818101518382015260200162000164565b50505050905090810190601f168015620001ac5780820380516001836020036101000a031916815260200191505b50604052505050828282828083838160039080519060200190620001d292919062000333565b508051620001e890600490602084019062000333565b50506005805460ff19166012179055506001600160a01b038116156200021357620002138162000270565b506001600160a01b03811662000263576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b50505050505050620003df565b600c54600160a01b900460ff1615620002d0576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b600c8054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200036b5760008555620003b6565b82601f106200038657805160ff1916838001178555620003b6565b82800160010185558215620003b6579182015b82811115620003b657825182559160200191906001019062000399565b50620003c4929150620003c8565b5090565b5b80821115620003c45760008155600101620003c9565b61521480620003ef6000396000f3fe6080604052600436106103b15760003560e01c80639470b0bd116101e7578063d06dc3ad1161010d578063e64767aa116100a0578063f5f3d4f71161006f578063f5f3d4f7146111ca578063f62f8f3a146111df578063f683776714611209578063f6a494af1461123c576103c0565b8063e64767aa14611100578063ed475a7914611143578063f0e292c91461117c578063f5a98383146111b5576103c0565b8063dd62ed3e116100dc578063dd62ed3e14611062578063deea13e71461109d578063e17f212e146110b2578063e587497e146110c7576103c0565b8063d06dc3ad14610ebe578063d0e30db014610ef7578063d6aa0b7714610eff578063dc4fcda714610f32576103c0565b8063a457c2d711610185578063bbd6fbf811610154578063bbd6fbf814610e0b578063be0ca74714610e44578063c787a8fc14610e7f578063caeb942b14610e94576103c0565b8063a457c2d714610d5e578063a9059cbb14610d97578063b302f39314610dd0578063b760faf914610de5576103c0565b80639b3baa0e116101c15780639b3baa0e14610cce5780639ca20e4e14610ce35780639ca2231a14610cf85780639d6a890f14610d2b576103c0565b80639470b0bd14610c5657806395d89b4114610c8f578063981b24d014610ca4576103c0565b806349e3c7e5116102d757806370a082311161026a5780637f4fcaa9116102395780637f4fcaa914610b9c57806383035a8214610bcf5780638c2b8ae114610c0857806392bfe6d814610c1d576103c0565b806370a08231146109a957806374e6310e146109dc578063755d10a414610a8f5780637de5b8ed14610ac2576103c0565b80635d6d11eb116102a65780635d6d11eb1461087e5780635ff270791461092c57806362354e031461096057806367fc402914610975576103c0565b806349e3c7e51461071b5780634eac870f1461081b5780634ee2cd7e146108305780635aa6e67514610869576103c0565b80631fec092a1161034f57806331d12a161161031e57806331d12a161461065b578063395093511461068e5780633e5aa26a146106c757806343ea370b146106f1576103c0565b80631fec092a1461059257806323b872dd146105c35780632e1a7d4d14610606578063313ce56714610630576103c0565b8063095ea7b31161038b578063095ea7b3146104d357806313de97f514610520578063142d10181461054a57806318160ddd1461057d576103c0565b8063026e402b146103c557806304bb4e43146103fe57806306fdde0314610449576103c0565b366103c0576103be61126f565b005b600080fd5b3480156103d157600080fd5b506103be600480360360408110156103e857600080fd5b506001600160a01b0381351690602001356112b1565b34801561040a57600080fd5b506104376004803603604081101561042157600080fd5b506001600160a01b03813516906020013561134c565b60408051918252519081900360200190f35b34801561045557600080fd5b5061045e6113df565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610498578181015183820152602001610480565b50505050905090810190601f1680156104c55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104df57600080fd5b5061050c600480360360408110156104f657600080fd5b506001600160a01b0381351690602001356113ee565b604080519115158252519081900360200190f35b34801561052c57600080fd5b506103be6004803603602081101561054357600080fd5b503561140b565b34801561055657600080fd5b506104376004803603602081101561056d57600080fd5b50356001600160a01b03166115fa565b34801561058957600080fd5b50610437611684565b34801561059e57600080fd5b506105a761168a565b604080516001600160a01b039092168252519081900360200190f35b3480156105cf57600080fd5b5061050c600480360360608110156105e657600080fd5b506001600160a01b03813581169160208101359091169060400135611699565b34801561061257600080fd5b506103be6004803603602081101561062957600080fd5b5035611721565b34801561063c57600080fd5b50610645611792565b6040805160ff9092168252519081900360200190f35b34801561066757600080fd5b506103be6004803603602081101561067e57600080fd5b50356001600160a01b031661179c565b34801561069a57600080fd5b5061050c600480360360408110156106b157600080fd5b506001600160a01b03813516906020013561196c565b3480156106d357600080fd5b50610437600480360360208110156106ea57600080fd5b50356119ba565b3480156106fd57600080fd5b506104376004803603602081101561071457600080fd5b50356119c5565b34801561072757600080fd5b506107cb6004803603604081101561073e57600080fd5b810190602081018135600160201b81111561075857600080fd5b82018360208201111561076a57600080fd5b803590602001918460208302840111600160201b8311171561078b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250611a80915050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156108075781810151838201526020016107ef565b505050509050019250505060405180910390f35b34801561082757600080fd5b506105a7611be2565b34801561083c57600080fd5b506104376004803603604081101561085357600080fd5b506001600160a01b038135169060200135611bf1565b34801561087557600080fd5b506105a7611bfd565b34801561088a57600080fd5b50610437600480360360208110156108a157600080fd5b810190602081018135600160201b8111156108bb57600080fd5b8201836020820111156108cd57600080fd5b803590602001918460208302840111600160201b831117156108ee57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611c93945050505050565b34801561093857600080fd5b506103be6004803603602081101561094f57600080fd5b50356001600160e01b031916611d45565b34801561096c57600080fd5b506105a761209c565b34801561098157600080fd5b506103be6004803603602081101561099857600080fd5b50356001600160e01b0319166120a7565b3480156109b557600080fd5b50610437600480360360208110156109cc57600080fd5b50356001600160a01b031661218d565b3480156109e857600080fd5b50610a10600480360360208110156109ff57600080fd5b50356001600160e01b0319166121a8565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a53578181015183820152602001610a3b565b50505050905090810190601f168015610a805780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610a9b57600080fd5b506103be60048036036020811015610ab257600080fd5b50356001600160a01b031661224f565b348015610ace57600080fd5b50610af560048036036020811015610ae557600080fd5b50356001600160a01b03166124dc565b604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019060200280838360005b83811015610b45578181015183820152602001610b2d565b50505050905001838103825286818151815260200191508051906020019060200280838360005b83811015610b84578181015183820152602001610b6c565b50505050905001965050505050505060405180910390f35b348015610ba857600080fd5b506103be60048036036020811015610bbf57600080fd5b50356001600160a01b031661269f565b348015610bdb57600080fd5b5061043760048036036040811015610bf257600080fd5b506001600160a01b0381351690602001356126ee565b348015610c1457600080fd5b506105a761275d565b348015610c2957600080fd5b5061043760048036036040811015610c4057600080fd5b506001600160a01b03813516906020013561276c565b348015610c6257600080fd5b506103be60048036036040811015610c7957600080fd5b506001600160a01b0381351690602001356127ca565b348015610c9b57600080fd5b5061045e612887565b348015610cb057600080fd5b5061043760048036036020811015610cc757600080fd5b5035612891565b348015610cda57600080fd5b506105a761289c565b348015610cef57600080fd5b506105a76128ab565b348015610d0457600080fd5b506103be60048036036020811015610d1b57600080fd5b50356001600160a01b03166128ba565b348015610d3757600080fd5b506103be60048036036020811015610d4e57600080fd5b50356001600160a01b0316612a0a565b348015610d6a57600080fd5b5061050c60048036036040811015610d8157600080fd5b506001600160a01b038135169060200135612ac3565b348015610da357600080fd5b5061050c60048036036040811015610dba57600080fd5b506001600160a01b038135169060200135612b2b565b348015610ddc57600080fd5b506103be612b3f565b6103be60048036036020811015610dfb57600080fd5b50356001600160a01b0316612bb9565b348015610e1757600080fd5b506103be60048036036040811015610e2e57600080fd5b506001600160a01b038135169060200135612c60565b348015610e5057600080fd5b5061043760048036036040811015610e6757600080fd5b506001600160a01b0381358116916020013516612dcd565b348015610e8b57600080fd5b5061050c612e44565b348015610ea057600080fd5b5061043760048036036020811015610eb757600080fd5b5035612e54565b348015610eca57600080fd5b506103be60048036036040811015610ee157600080fd5b506001600160a01b038135169060200135612e5f565b6103be61126f565b348015610f0b57600080fd5b5061043760048036036020811015610f2257600080fd5b50356001600160a01b0316612e80565b348015610f3e57600080fd5b506103be60048036036040811015610f5557600080fd5b810190602081018135600160201b811115610f6f57600080fd5b820183602082011115610f8157600080fd5b803590602001918460208302840111600160201b83111715610fa257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ff157600080fd5b82018360208201111561100357600080fd5b803590602001918460208302840111600160201b8311171561102457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ee6945050505050565b34801561106e57600080fd5b506104376004803603604081101561108557600080fd5b506001600160a01b0381358116916020013516613082565b3480156110a957600080fd5b506104376130ad565b3480156110be57600080fd5b5061050c6130b7565b3480156110d357600080fd5b50610437600480360360408110156110ea57600080fd5b506001600160a01b0381351690602001356130c7565b34801561110c57600080fd5b506104376004803603606081101561112357600080fd5b506001600160a01b0381358116916020810135909116906040013561313b565b34801561114f57600080fd5b50610af56004803603604081101561116657600080fd5b506001600160a01b0381351690602001356131ef565b34801561118857600080fd5b506104376004803603604081101561119f57600080fd5b506001600160a01b0381351690602001356133bb565b3480156111c157600080fd5b506103be613428565b3480156111d657600080fd5b506104376134e2565b3480156111eb57600080fd5b506104376004803603602081101561120257600080fd5b50356134ec565b34801561121557600080fd5b506104376004803603602081101561122c57600080fd5b50356001600160a01b0316613557565b34801561124857600080fd5b506103be6004803603602081101561125f57600080fd5b50356001600160a01b03166135ad565b6112793334613771565b60408051348152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a2565b6112b9613861565b6001600160a01b0316636230001a33846112d23361218d565b856040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001945050505050600060405180830381600087803b15801561133057600080fd5b505af1158015611344573d6000803e3d6000fd5b505050505050565b60006113566138c2565b6001600160a01b03166304bb4e4384846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156113aa57600080fd5b505afa1580156113be573d6000803e3d6000fd5b505050506040513d60208110156113d457600080fd5b505190505b92915050565b60606113e9613923565b905090565b60006114026113fb6139b9565b84846139bd565b50600192915050565b6011546001600160a01b0316331461146a576040805162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920636c65616e757020626c6f636b206d616e61676572000000000000604482015290519081900360640190fd5b61147381613aa9565b600e546001600160a01b0316156114ea57600e54604080516313de97f560e01b81526004810184905290516001600160a01b03909216916313de97f59160248082019260009290919082900301818387803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505050505b600f546001600160a01b0316158015906115155750600e54600f546001600160a01b03908116911614155b1561158057600f54604080516313de97f560e01b81526004810184905290516001600160a01b03909216916313de97f59160248082019260009290919082900301818387803b15801561156757600080fd5b505af115801561157b573d6000803e3d6000fd5b505050505b6010546001600160a01b0316156115f757601054604080516313de97f560e01b81526004810184905290516001600160a01b03909216916313de97f59160248082019260009290919082900301818387803b1580156115de57600080fd5b505af11580156115f2573d6000803e3d6000fd5b505050505b50565b60006116046138c2565b6001600160a01b031663142d1018836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561165057600080fd5b505afa158015611664573d6000803e3d6000fd5b505050506040513d602081101561167a57600080fd5b505190505b919050565b60025490565b600f546001600160a01b031690565b60006116a6848484613b2d565b611716846116b26139b9565b61171185604051806060016040528060288152602001615099602891396001600160a01b038a166000908152600160205260408120906116f06139b9565b6001600160a01b031681526020810191909152604001600020549190613c88565b6139bd565b5060015b9392505050565b61172b3382613d1f565b60408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a2604051339082156108fc029083906000818181858888f1935050505015801561178e573d6000803e3d6000fd5b5050565b60006113e9613e1b565b600c54600160b01b900460ff16806117be5750600c54600160a81b900460ff16155b15611961576117cb613e24565b6001600160a01b038116156118f457306001600160a01b0316816001600160a01b031663653718836040518163ffffffff1660e01b815260040160206040518083038186803b15801561181d57600080fd5b505afa158015611831573d6000803e3d6000fd5b505050506040513d602081101561184757600080fd5b50516001600160a01b03161461188e5760405162461bcd60e51b81526004018080602001828103825260228152602001806151bd6022913960400191505060405180910390fd5b806001600160a01b03166313de97f56118a5613e5b565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156118db57600080fd5b505af11580156118ef573d6000803e3d6000fd5b505050505b600e5460408051600081526001600160a01b03928316602082015291831682820152517fbec98a6c0f609cda6b9f23b95824ba6ac733cb57edd17d344f2f2796844007399181900360600190a1600e80546001600160a01b0319166001600160a01b0383161790556115f7565b6115f7600036613e61565b60006114026119796139b9565b84611711856001600061198a6139b9565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613fe6565b60006113d982612891565b600b546000906001600160a01b03163314611a1f576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600a548210611a75576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20636c65616e757020616674657220636c65616e757020626c6f636b0000604482015290519081900360640190fd5b6113d9600983614040565b6060611a8a6138c2565b6001600160a01b03166349e3c7e584846040518363ffffffff1660e01b81526004018080602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015611aef578181015183820152602001611ad7565b50505050905001935050505060006040518083038186803b158015611b1357600080fd5b505afa158015611b27573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611b5057600080fd5b8101908080516040519392919084600160201b821115611b6f57600080fd5b908301906020820185811115611b8457600080fd5b82518660208202830111600160201b82111715611ba057600080fd5b82525081516020918201928201910280838360005b83811015611bcd578181015183820152602001611bb5565b50505050905001604052505050905092915050565b6011546001600160a01b031681565b600061171a8383614074565b600c54600090600160a81b900460ff16611c2257600c546001600160a01b03166113e9565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6257600080fd5b505afa158015611c76573d6000803e3d6000fd5b505050506040513d6020811015611c8c57600080fd5b5051905090565b6000611c9d613861565b6001600160a01b0316630f8b8af733846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b83811015611d0b578181015183820152602001611cf3565b505050509050019350505050602060405180830381600087803b158015611d3157600080fd5b505af1158015611664573d6000803e3d6000fd5b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b158015611d8957600080fd5b505afa158015611d9d573d6000803e3d6000fd5b505050506040513d6020811015611db357600080fd5b5051611df6576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b031981166000908152600d602052604090208054611e62576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b8054421015611eb8576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f525780601f10611f2757610100808354040283529160200191611f52565b820191906000526020600020905b815481529060010190602001808311611f3557829003601f168201915b505050506001600160e01b031985166000908152600d602052604081208181559293509050611f846001830182614e69565b5050600c805460ff60b01b1916600160b01b17905560405181516000913091849190819060208401908083835b60208310611fd05780518252601f199092019160209182019101611fb1565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612032576040519150601f19603f3d011682016040523d82523d6000602084013e612037565b606091505b5050600c805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a1612096816140cc565b50505050565b60076001609c1b0181565b6120af6140e9565b6001600160e01b031981166000908152600d602052604090205461211a576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b031981166000908152600d60205260408120818155906121886001830182614e69565b505050565b6001600160a01b031660009081526020819052604090205490565b600d602090815260009182526040918290208054600180830180548651600293821615610100026000190190911692909204601f8101869004860283018601909652858252919492939092908301828280156122455780601f1061221a57610100808354040283529160200191612245565b820191906000526020600020905b81548152906001019060200180831161222857829003601f168201915b5050505050905082565b600c54600160b01b900460ff16806122715750600c54600160a81b900460ff16155b156119615761227e613e24565b6001600160a01b0381161561246f57306001600160a01b0316816001600160a01b031663653718836040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d057600080fd5b505afa1580156122e4573d6000803e3d6000fd5b505050506040513d60208110156122fa57600080fd5b50516001600160a01b0316146123415760405162461bcd60e51b81526004018080602001828103825260228152602001806151bd6022913960400191505060405180910390fd5b601154600160a01b900460ff1615806123bb5750806001600160a01b031663aa94d3f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561238e57600080fd5b505afa1580156123a2573d6000803e3d6000fd5b505050506040513d60208110156123b857600080fd5b50515b6123f65760405162461bcd60e51b815260040180806020018281038252602981526020018061504a6029913960400191505060405180910390fd5b806001600160a01b03166313de97f561240d613e5b565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561244357600080fd5b505af1158015612457573d6000803e3d6000fd5b50506011805460ff60a01b1916600160a01b17905550505b600f5460408051600181526001600160a01b03928316602082015291831682820152517fbec98a6c0f609cda6b9f23b95824ba6ac733cb57edd17d344f2f2796844007399181900360600190a1600f80546001600160a01b0319166001600160a01b0383161790556115f7565b6060806000806124ea6138c2565b6001600160a01b0316637de5b8ed866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060006040518083038186803b15801561253657600080fd5b505afa15801561254a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052608081101561257357600080fd5b8101908080516040519392919084600160201b82111561259257600080fd5b9083019060208201858111156125a757600080fd5b82518660208202830111600160201b821117156125c357600080fd5b82525081516020918201928201910280838360005b838110156125f05781810151838201526020016125d8565b5050505090500160405260200180516040519392919084600160201b82111561261857600080fd5b90830190602082018581111561262d57600080fd5b82518660208202830111600160201b8211171561264957600080fd5b82525081516020918201928201910280838360005b8381101561267657818101518382015260200161265e565b505050509190910160409081526020830151920151959b949a5090985093965091945050505050565b600c54600160b01b900460ff16806126c15750600c54600160a81b900460ff16155b15611961576126ce613e24565b601180546001600160a01b0319166001600160a01b0383161790556115f7565b60006126f86138c2565b6001600160a01b03166331503927846127118686611bf1565b856040518463ffffffff1660e01b815260040180846001600160a01b03168152602001838152602001828152602001935050505060206040518083038186803b1580156113aa57600080fd5b6010546001600160a01b031690565b60006127766138c2565b6001600160a01b03166392bfe6d884846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156113aa57600080fd5b61281182336117118460405180604001604052806014815260200173616c6c6f77616e63652062656c6f77207a65726f60601b81525061280a8833613082565b9190613c88565b61281b8282613d1f565b6040805182815290516001600160a01b038416917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a2604051339082156108fc029083906000818181858888f19350505050158015612188573d6000803e3d6000fd5b60606113e9614148565b60006113d9826141a9565b600e546001600160a01b031690565b600b546001600160a01b031681565b600c54600160b01b900460ff16806128dc5750600c54600160a81b900460ff16155b15611961576128e9613e24565b306001600160a01b0316816001600160a01b031663653718836040518163ffffffff1660e01b815260040160206040518083038186803b15801561292c57600080fd5b505afa158015612940573d6000803e3d6000fd5b505050506040513d602081101561295657600080fd5b50516001600160a01b03161461299d5760405162461bcd60e51b815260040180806020018281038252603d8152602001806150c1603d913960400191505060405180910390fd5b60105460408051600281526001600160a01b03928316602082015291831682820152517fbec98a6c0f609cda6b9f23b95824ba6ac733cb57edd17d344f2f2796844007399181900360600190a1601080546001600160a01b0319166001600160a01b0383161790556115f7565b600c54600160a01b900460ff1615612a60576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b600c8054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b6000611402612ad06139b9565b84611711856040518060600160405280602581526020016151986025913960016000612afa6139b9565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613c88565b6000611402612b386139b9565b8484613b2d565b612b47613861565b6001600160a01b03166305109ecf33612b5f3361218d565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612ba557600080fd5b505af1158015612096573d6000803e3d6000fd5b6001600160a01b038116612c14576040805162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206465706f73697420746f207a65726f20616464726573730000604482015290519081900360640190fd5b612c1e8134613771565b6040805134815290516001600160a01b038316917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a250565b600f54600e546001600160a01b0391821691168115612d0b57816001600160a01b031663c7c62fab3386612c943388611bf1565b876040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001945050505050600060405180830381600087803b158015612cf257600080fd5b505af1158015612d06573d6000803e3d6000fd5b505050505b816001600160a01b0316816001600160a01b031614158015612d3557506001600160a01b03811615155b1561209657806001600160a01b031663c7c62fab3386612d553388611bf1565b876040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001945050505050600060405180830381600087803b158015612db357600080fd5b505af1925050508015612dc4575060015b61209657612096565b6000612dd76138c2565b6001600160a01b0316639dc6b9f28484612df08761218d565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001828152602001935050505060206040518083038186803b1580156113aa57600080fd5b601154600160a01b900460ff1681565b60006113d9826141f8565b612e67613861565b6001600160a01b031663404d9e8233846112d23361218d565b6000612e8a6138c2565b6001600160a01b0316634a03d55683612ea28561218d565b6040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b15801561165057600080fd5b8051825114612f34576040805162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604482015290519081900360640190fd5b6000612f3e613861565b90506000612f4b3361218d565b9050816001600160a01b03166305109ecf33836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b5050505060005b84518110156115f257826001600160a01b0316636230001a33878481518110612fe457fe5b602002602001015185888681518110612ff957fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001838152602001828152602001945050505050600060405180830381600087803b15801561305e57600080fd5b505af1158015613072573d6000803e3d6000fd5b505060019092019150612fbf9050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006113e9613e5b565b600c54600160a81b900460ff1681565b60006130d16138c2565b6001600160a01b031663e587497e84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561312757600080fd5b505af11580156113be573d6000803e3d6000fd5b60006131456138c2565b6001600160a01b031663833aca92858561315f8887611bf1565b866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200182815260200194505050505060206040518083038186803b1580156131bb57600080fd5b505afa1580156131cf573d6000803e3d6000fd5b505050506040513d60208110156131e557600080fd5b5051949350505050565b6060806000806131fd6138c2565b6001600160a01b031663ed475a7987876040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060006040518083038186803b15801561325157600080fd5b505afa158015613265573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052608081101561328e57600080fd5b8101908080516040519392919084600160201b8211156132ad57600080fd5b9083019060208201858111156132c257600080fd5b82518660208202830111600160201b821117156132de57600080fd5b82525081516020918201928201910280838360005b8381101561330b5781810151838201526020016132f3565b5050505090500160405260200180516040519392919084600160201b82111561333357600080fd5b90830190602082018581111561334857600080fd5b82518660208202830111600160201b8211171561336457600080fd5b82525081516020918201928201910280838360005b83811015613391578181015183820152602001613379565b505050509190910160409081526020830151920151959c949b509099509397509195505050505050565b600b546000906001600160a01b03163314613415576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600a5461171a90600690859085906142e6565b6134306140e9565b600c54600160a81b900460ff161561348f576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b600c8054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b60006113e9611684565b600b546000906001600160a01b03163314613546576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600a546113d990600790849061432c565b60006135616138c2565b6001600160a01b031663f6837767836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561165057600080fd5b600c54600160b01b900460ff16806135cf5750600c54600160a81b900460ff16155b15611961576135dc613e24565b6135e581614419565b600e546001600160a01b03161561365d57600e546040805163f6a494af60e01b81526001600160a01b0384811660048301529151919092169163f6a494af91602480830192600092919082900301818387803b15801561364457600080fd5b505af1158015613658573d6000803e3d6000fd5b505050505b600f546001600160a01b0316158015906136885750600e54600f546001600160a01b03908116911614155b156136f457600f546040805163f6a494af60e01b81526001600160a01b0384811660048301529151919092169163f6a494af91602480830192600092919082900301818387803b1580156136db57600080fd5b505af11580156136ef573d6000803e3d6000fd5b505050505b6010546001600160a01b03161561376c576010546040805163f6a494af60e01b81526001600160a01b0384811660048301529151919092169163f6a494af91602480830192600092919082900301818387803b15801561375357600080fd5b505af1158015613767573d6000803e3d6000fd5b505050505b6115f7565b6001600160a01b0382166137cc576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6137d86000838361443b565b6002546137e59082613fe6565b6002556001600160a01b03821660009081526020819052604090205461380b9082613fe6565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600f546000906001600160a01b0316806113e9576040805162461bcd60e51b815260206004820152601e60248201527f546f6b656e206d697373696e67207772697465205650436f6e74726163740000604482015290519081900360640190fd5b600e546000906001600160a01b0316806113e9576040805162461bcd60e51b815260206004820152601d60248201527f546f6b656e206d697373696e672072656164205650436f6e7472616374000000604482015290519081900360640190fd5b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156139af5780601f10613984576101008083540402835291602001916139af565b820191906000526020600020905b81548152906001019060200180831161399257829003601f168201915b5050505050905090565b3390565b6001600160a01b038316613a025760405162461bcd60e51b81526004018080602001828103825260248152602001806151446024913960400191505060405180910390fd5b6001600160a01b038216613a475760405162461bcd60e51b8152600401808060200182810382526022815260200180614fad6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600a54811015613aea5760405162461bcd60e51b8152600401808060200182810382526028815260200180614ff56028913960400191505060405180910390fd5b438110613b285760405162461bcd60e51b8152600401808060200182810382526021815260200180614f8c6021913960400191505060405180910390fd5b600a55565b6001600160a01b038316613b725760405162461bcd60e51b815260040180806020018281038252602581526020018061511f6025913960400191505060405180910390fd5b6001600160a01b038216613bb75760405162461bcd60e51b8152600401808060200182810382526023815260200180614f476023913960400191505060405180910390fd5b613bc283838361443b565b613bff81604051806060016040528060268152602001614fcf602691396001600160a01b0386166000908152602081905260409020549190613c88565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613c2e9082613fe6565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115613d175760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613cdc578181015183820152602001613cc4565b50505050905090810190601f168015613d095780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038216613d645760405162461bcd60e51b81526004018080602001828103825260218152602001806150fe6021913960400191505060405180910390fd5b613d708260008361443b565b613dad81604051806060016040528060228152602001614f6a602291396001600160a01b0385166000908152602081905260409020549190613c88565b6001600160a01b038316600090815260208190526040902055600254613dd3908261464a565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b60055460ff1690565b600c54600160b01b900460ff1615613e5157333014613e3f57fe5b600c805460ff60b01b19169055613e59565b613e596140e9565b565b600a5490565b613e696140e9565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015613eb157600080fd5b505afa158015613ec5573d6000803e3d6000fd5b505050506040513d6020811015613edb57600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b031986168152600d6020908152604090912083518155838201518051919350613f61926001850192910190614ead565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b60008282018381101561171a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818152602083905260408120541561406b575060008181526020839052604081205560016113d9565b50600092915050565b600081600a548110156140b85760405162461bcd60e51b815260040180806020018281038252602d81526020018061501d602d913960400191505060405180910390fd5b6140c4600685856146a7565b949350505050565b3d604051818101604052816000823e82156140e5578181f35b8181fd5b6140f1611bfd565b6001600160a01b0316336001600160a01b031614613e59576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156139af5780601f10613984576101008083540402835291602001916139af565b600081600a548110156141ed5760405162461bcd60e51b815260040180806020018281038252602d81526020018061501d602d913960400191505060405180910390fd5b61171a6007846146d2565b600081600a5481101561423c5760405162461bcd60e51b815260040180806020018281038252602d81526020018061501d602d913960400191505060405180910390fd5b438310614290576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b6000806142a06009600787614815565b9150915080156142de576040805186815290517ffec477a10b4fcdfdf1114eb32b3caf6118b2d76d20e1fcb70007274bb4b616be9181900360200190a15b509392505050565b60006001600160a01b03841615614321576001600160a01b038416600090815260208690526040902061431a90848461432c565b90506140c4565b506000949350505050565b60008161433b5750600061171a565b6001840154600160401b90046001600160401b03168061435f57600091505061171a565b60018501546001600160401b0316600061438561437c8388613fe6565b60018503614873565b9050815b81811080156143ba575060018101600090815260208990526040902054600160c01b90046001600160401b03168610155b156143d657600081815260208990526040812055600101614389565b8281111561440b576143e781614889565b60018901805467ffffffffffffffff19166001600160401b03929092169190911790555b919091039695505050505050565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b816001600160a01b0316836001600160a01b031614156144a2576040805162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015290519081900360640190fd5b60006001600160a01b0384166144b95760006144c2565b6144c28461218d565b905060006001600160a01b0384166144db5760006144e4565b6144e48461218d565b600f549091506001600160a01b0316801561457e576040805163756da1b160e11b81526001600160a01b038881166004830152878116602483015260448201869052606482018590526084820187905291519183169163eadb43629160a48082019260009290919082900301818387803b15801561456157600080fd5b505af1158015614575573d6000803e3d6000fd5b505050506145a3565b601154600160a01b900460ff166145a3576011805460ff60a01b1916600160a01b1790555b6010546001600160a01b03168015614636576040805163756da1b160e11b81526001600160a01b038981166004830152888116602483015260448201879052606482018690526084820188905291519183169163eadb43629160a48082019260009290919082900301818387803b15801561461d57600080fd5b505af1158015614631573d6000803e3d6000fd5b505050505b6146418787876148d1565b50505050505050565b6000828211156146a1576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b03821660009081526020849052604081206146c981846146d2565b95945050505050565b6001820154600090600160401b90046001600160401b0316806146f95760009150506113d9565b438310158061472b57506000198101600090815260208590526040902054600160c01b90046001600160401b03168310155b1561475357600019016000908152602084905260409020546001600160c01b031690506113d9565b60018401546001600160401b039081166000818152602087905260409020549091600160c01b909104168410156147cc5780156147c15760405162461bcd60e51b81526004018080602001828103825260308152602001806151686030913960400191505060405180910390fd5b6000925050506113d9565b60018501546000906147f29087908490600160401b90046001600160401b031688614911565b6000908152602087905260409020546001600160c01b0316935050505092915050565b6000818152602084905260408120548190801561483b576000190191506000905061486b565b600061484786866146d2565b9050614854816001613fe6565b600086815260208990526040902055925060019150505b935093915050565b6000818310614882578161171a565b5090919050565b6000600160401b82106148cd5760405162461bcd60e51b81526004018080602001828103825260268152602001806150736026913960400191505060405180910390fd5b5090565b6001600160a01b0383166148ee576148e9828261499b565b612188565b6001600160a01b038216614906576148e983826149f8565b612188838383614aa0565b6000838161492085600161464a565b90505b8181111561499157600061494d600261494760016149418688613fe6565b90613fe6565b90614ad6565b600081815260208a90526040902054909150600160c01b90046001600160401b0316851061497d5780925061498b565b61498881600161464a565b91505b50614923565b5095945050505050565b60006149ab826149418543611bf1565b90506149b960068483614b3d565b600a546149cd9060069085906002906142e6565b506149e66149de8361494143612891565b600790614b5b565b600a546120969060079060029061432c565b6000614a378260405180604001604052806016815260200175213ab937103a37b7903134b3903337b91037bbb732b960511b81525061280a8643611bf1565b9050614a4560068483614b3d565b600a54614a599060069085906002906142e6565b506149e66149de836040518060400160405280601d81526020017f4275726e20746f6f2062696720666f7220746f74616c20737570706c7900000081525061280a43612891565b614aad6006848484614d1c565b600a54614ac19060069085906002906142e6565b50600a546120969060069084906002906142e6565b6000808211614b2c576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381614b3557fe5b049392505050565b6001600160a01b038216600090815260208490526040902061209681835b6001820154600160401b90046001600160401b031680614c12576040518060400160405280614b8984614dab565b6001600160c01b03168152602001614ba043614889565b6001600160401b03908116909152600080805260208681526040909120835181549490920151909216600160c01b026001600160c01b039182166001600160c01b0319909416939093171691909117905560018301805467ffffffffffffffff60401b1916600160401b179055612188565b600019810160009081526020849052604090208054600160c01b90046001600160401b031643811415614c6857614c4884614dab565b82546001600160c01b0319166001600160c01b03919091161782556115f2565b804311614c7157fe5b6040518060400160405280614c8586614dab565b6001600160c01b03168152602001614c9c43614889565b6001600160401b039081169091526000858152602088815260409091208351815494909201518316600160c01b026001600160c01b039283166001600160c01b0319909516949094179091169290921790915560018087018054918601909216600160401b0267ffffffffffffffff60401b199091161790555050505050565b80614d2657612096565b6001600160a01b038316158015614d4457506001600160a01b038216155b15614d4b57fe5b6001600160a01b03831615614d7f576000614d7082614d6a8787614e05565b9061464a565b9050614d7d858583614b3d565b505b6001600160a01b03821615612096576000614d9e826149418786614e05565b90506115f2858483614b3d565b6000600160c01b82106148cd576040805162461bcd60e51b815260206004820152601d60248201527f76616c756520646f65736e27742066697420696e203139322062697473000000604482015290519081900360640190fd5b6001600160a01b03811660009081526020839052604081206140c4816001810154600090600160401b90046001600160401b031680614e4857600091505061167f565b6000190160009081526020929092525060409020546001600160c01b031690565b50805460018160011615610100020316600290046000825580601f10614e8f57506115f7565b601f0160209004906000526020600020908101906115f79190614f31565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614ee35760008555614f29565b82601f10614efc57805160ff1916838001178555614f29565b82800160010185558215614f29579182015b82811115614f29578251825591602001919060010190614f0e565b506148cd9291505b5b808211156148cd5760008155600101614f3256fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e6365436c65616e757020626c6f636b206d75737420626520696e20746865207061737445524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365436c65616e757020626c6f636b206e756d626572206d757374206e65766572206465637265617365436865636b506f696e7461626c653a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b5650436f6e7472616374206e6f7420636f6e6669677572656420666f72207265706c6163656d656e7453616665436173743a2076616c756520646f65736e27742066697420696e203634206269747345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365476f7665726e616e636520766f746520706f77657220636f6e747261637420646f6573206e6f742062656c6f6e6720746f207468697320746f6b656e2e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373436865636b506f696e74486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f5650436f6e7472616374206e6f74206f776e6564206279207468697320746f6b656ea264697066735822122047e3b5812fffbdc55a328418da7517878fb0a6101a6c35514862d8f78fe252ed64736f6c634300070600330000000000000000000000004598a6c05910ab914f0cbaaca1911cd337d10d29000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000d5772617070656420466c61726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000457464c5200000000000000000000000000000000000000000000000000000000