[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ExceededMaxMintPerTranche", "type": "error" }, { "inputs": [], "name": "ExceededMaxSupply", "type": "error" }, { "inputs": [], "name": "InvalidPerc", "type": "error" }, { "inputs": [], "name": "ReserveCountOverLimit", "type": "error" }, { "inputs": [], "name": "UnacceptableParams", "type": "error" }, { "inputs": [], "name": "UnacceptableRollover", "type": "error" }, { "inputs": [], "name": "UnauthorizedCall", "type": "error" }, { "inputs": [], "name": "UnauthorizedTransferOut", "type": "error" }, { "inputs": [], "name": "UnexpectedAsset", "type": "error" }, { "inputs": [], "name": "UnexpectedDecimals", "type": "error" }, { "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": "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": "contract IERC20Upgradeable", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" } ], "name": "ReserveSynced", "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": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IBondController", "name": "bond", "type": "address" } ], "name": "UpdatedDepositBond", "type": "event" }, { "inputs": [], "name": "MAX_RESERVE_COUNT", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ONE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERC_DECIMALS", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "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": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondIssuer", "outputs": [ { "internalType": "contract IBondIssuer", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ITranche", "name": "trancheIn", "type": "address" }, { "internalType": "uint256", "name": "trancheInAmt", "type": "uint256" } ], "name": "computeMintAmt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "perpAmtBurnt", "type": "uint256" } ], "name": "computeRedemptionAmts", "outputs": [ { "components": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct TokenAmount[]", "name": "", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ITranche", "name": "trancheIn", "type": "address" }, { "internalType": "contract IERC20Upgradeable", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "trancheInAmtAvailable", "type": "uint256" } ], "name": "computeRolloverAmt", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenOutAmt", "type": "uint256" }, { "internalType": "uint256", "name": "trancheInAmt", "type": "uint256" } ], "internalType": "struct RolloverData", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "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": "contract ITranche", "name": "trancheIn", "type": "address" }, { "internalType": "uint256", "name": "trancheInAmt", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deviationRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feePolicy", "outputs": [ { "internalType": "contract IFeePolicy", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDepositBond", "outputs": [ { "internalType": "contract IBondController", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getDepositTranche", "outputs": [ { "internalType": "contract ITranche", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getDepositTrancheRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" } ], "name": "getReserveAt", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getReserveCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" } ], "name": "getReserveTokenBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" } ], "name": "getReserveTokenValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getReserveTokensUpForRollover", "outputs": [ { "internalType": "contract IERC20Upgradeable[]", "name": "", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getTVL", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" } ], "name": "inReserve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "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": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "contract IERC20Upgradeable", "name": "collateral_", "type": "address" }, { "internalType": "contract IBondIssuer", "name": "bondIssuer_", "type": "address" }, { "internalType": "contract IFeePolicy", "name": "feePolicy_", "type": "address" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "keeper", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxDepositTrancheValuePerc", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTrancheMaturitySec", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTrancheMaturitySec", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "perpAmtBurnt", "type": "uint256" } ], "name": "redeem", "outputs": [ { "components": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct TokenAmount[]", "name": "", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ITranche", "name": "trancheIn", "type": "address" }, { "internalType": "contract IERC20Upgradeable", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "trancheInAmtAvailable", "type": "uint256" } ], "name": "rollover", "outputs": [ { "components": [ { "internalType": "uint256", "name": "tokenOutAmt", "type": "uint256" }, { "internalType": "uint256", "name": "trancheInAmt", "type": "uint256" } ], "internalType": "struct RolloverData", "name": "", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20Upgradeable", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IBondIssuer", "name": "bondIssuer_", "type": "address" } ], "name": "updateBondIssuer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IFeePolicy", "name": "feePolicy_", "type": "address" } ], "name": "updateFeePolicy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "keeper_", "type": "address" } ], "name": "updateKeeper", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxDepositTrancheValuePerc_", "type": "uint256" } ], "name": "updateMaxDepositTrancheValuePerc", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxSupply_", "type": "uint256" } ], "name": "updateMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minTrancheMaturitySec_", "type": "uint256" }, { "internalType": "uint256", "name": "maxTrancheMaturitySec_", "type": "uint256" } ], "name": "updateTolerableTrancheMaturity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IRolloverVault", "name": "vault_", "type": "address" } ], "name": "updateVault", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vault", "outputs": [ { "internalType": "contract IRolloverVault", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614a1480620000f36000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c806376500c17116101de5780639db5dbe41161010f578063dd62ed3e116100ad578063ef98f8841161007c578063ef98f8841461076b578063f103b4331461077e578063f2fde38b14610791578063fbfa77cf146107a457600080fd5b8063dd62ed3e14610702578063defb9fc11461073b578063e7563f3f1461074e578063eca05e961461076157600080fd5b8063aced1661116100e9578063aced1661146106b7578063c2ee3a08146106d0578063d5abeb01146106d8578063db006a75146106e257600080fd5b80639db5dbe41461067e578063a457c2d714610691578063a9059cbb146106a457600080fd5b80638da5cb5b1161017c57806395d89b411161015657806395d89b4114610653578063977902171461065b57806397b3fcaa1461066e578063998065461461067657600080fd5b80638da5cb5b146106275780638fb69c4b1461063857806392a18b441461064057600080fd5b806379cc6790116101b857806379cc6790146105f057806382589038146106035780638456cb59146106175780638b5393821461061f57600080fd5b806376500c17146105c257806377da7d8d146105ca57806378f3ae74146105dd57600080fd5b806342966c68116102c35780635ec572511161026157806370a082311161023057806370a0823114610575578063715018a61461059e578063729256eb146105a657806375d5179f146105ba57600080fd5b80635ec572511461053d57806361902ffc1461054757806369f6f92c1461055a5780636f307dc31461056d57600080fd5b80634951ef8d1161029d5780634951ef8d146105025780634ce2f3ca1461050c5780635c975abb1461051f5780635dcc45b71461052a57600080fd5b806342966c68146104c957806343cda19d146104dc57806347e7ef24146104ef57600080fd5b80632cff15ce116103305780633434dc4e1161030a5780633434dc4e14610491578063364d22fc1461049957806339509351146104ae5780633f4ba83a146104c157600080fd5b80632cff15ce1461045c578063313ce5671461046f578063332d83d51461048957600080fd5b806318160ddd1161036c57806318160ddd146103ff5780631d8557d71461041157806323b872dd1461041b5780632bf8f1a51461042e57600080fd5b806306fdde0314610393578063095ea7b3146103b1578063107c0418146103d4575b600080fd5b61039b6107b8565b6040516103a891906142b1565b60405180910390f35b6103c46103bf3660046142f9565b61084a565b60405190151581526020016103a8565b6103e76103e2366004614325565b610864565b6040516001600160a01b0390911681526020016103a8565b6035545b6040519081526020016103a8565b61041961087f565b005b6103c461042936600461433e565b610c0d565b61044161043c36600461433e565b610c33565b604080518251815260209283015192810192909252016103a8565b61041961046a36600461437f565b610d09565b61012d5460ff165b60405160ff90911681526020016103a8565b6103e7610d3f565b610403610d65565b6104a1610eb1565b6040516103a891906143a1565b6103c46104bc3660046142f9565b611159565b610419611198565b6104196104d7366004614325565b6111d1565b6104036104ea3660046143ee565b6111de565b6104036104fd3660046142f9565b611266565b6104036101375481565b61044161051a36600461433e565b6112f9565b60c95460ff166103c4565b6103c46105383660046143ee565b61134f565b6104036101335481565b6104036105553660046142f9565b611362565b6104196105683660046143ee565b61139c565b6103e761144f565b6104036105833660046143ee565b6001600160a01b031660009081526033602052604090205490565b61041961145b565b610131546103e7906001600160a01b031681565b610477600881565b610477600b81565b6104036105d83660046143ee565b61146d565b6104196105eb3660046144ae565b6115b0565b6104196105fe3660046142f9565b6117d8565b61012e546103e7906001600160a01b031681565b6104196117f1565b61040361182a565b6097546001600160a01b03166103e7565b6103e761184a565b61041961064e3660046143ee565b611865565b61039b61192c565b6104196106693660046143ee565b61193b565b610403611983565b610403611995565b61041961068c36600461433e565b6119aa565b6103c461069f3660046142f9565b611a0c565b6103c46106b23660046142f9565b611aa9565b61012d546103e79061010090046001600160a01b031681565b610403611ab7565b6104036101365481565b6106f56106f0366004614325565b611ac6565b6040516103a8919061454c565b6104036107103660046145a4565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b610419610749366004614325565b611bec565b61041961075c3660046143ee565b611c4f565b6104036101345481565b6106f5610779366004614325565b611c7a565b61041961078c366004614325565b611c8d565b61041961079f3660046143ee565b611cc4565b61013d546103e7906001600160a01b031681565b6060603680546107c7906145dd565b80601f01602080910402602001604051908101604052809291908181526020018280546107f3906145dd565b80156108405780601f1061081557610100808354040283529160200191610840565b820191906000526020600020905b81548152906001019060200180831161082357829003601f168201915b5050505050905090565b600033610858818585611d3a565b60019150505b92915050565b600061086e61087f565b61087782611e5e565b90505b919050565b610887611e6c565b60c95460ff16610c0157610131546040805163d5eb27a160e01b815290516000926001600160a01b03169163d5eb27a1916004808301926020929190829003018187875af11580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190614617565b610132549091506001600160a01b03808316911614801590610927575061092781611ec5565b1561097f5761013280546001600160a01b0319166001600160a01b0383169081179091556040519081527f63e01b6b930f6bd3789aab43a62005627cb8a43517cd0569f997fd6b343b80239060200160405180910390a15b600061098c61013a612152565b9050600061099b60018361464a565b90505b60ff811615610bea5760006109b58260ff16611e5e565b90506000816001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190614617565b90506000610a31826001600160a01b031661215c565b1115610a3e575050610bd8565b806001600160a01b031663ae4e7fdf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190614663565b610af857806001600160a01b03166387b652076040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610adf57600080fd5b505af1158015610af3573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b03808316916333d20e34918591908216906370a0823190602401602060405180830381865afa158015610b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6d9190614685565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bb357600080fd5b505af1158015610bc7573d6000803e3d6000fd5b50505050610bd4826121db565b5050505b80610be28161469e565b91505061099e565b50610bfd610bf86000611e5e565b6121db565b5050505b610c0b600160fb55565b565b600033610c1b858285612345565b610c268585856123d7565b60019150505b9392505050565b604080518082019091526000808252602082015261013d546001600160a01b03163314610c7357604051637bf6a16f60e01b815260040160405180910390fd5b610c7b61087f565b610c83611e6c565b610c8b612582565b610c9584846125d5565b610cb257604051633c37540f60e21b815260040160405180910390fd5b6000610cbf858585612631565b60208101519091501580610cd257508051155b15610cde579050610cff565b610cec858260200151612ab7565b50610cfb848260000151612ad7565b5090505b610c2c600160fb55565b610d11612aed565b80821115610d3257604051638d2e9ded60e01b815260040160405180910390fd5b6101339190915561013455565b6000610d4961087f565b61013254610d5f906001600160a01b0316612b47565b90505b90565b6000610d6f61087f565b610d77611e6c565b61012e5460408051606081019091526001600160a01b03909116906301356c8c9080610da1612bb2565b815261013d5460408051634bd9fe5560e11b815290516020938401936001600160a01b03909316926397b3fcaa92600480820193918290030181865afa158015610def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e139190614685565b815261013254602090910190610e31906001600160a01b0316612d24565b9052604080516001600160e01b031960e085901b16815282516004820152602083015160248201529101516044820152606401602060405180830381865afa158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea59190614685565b9050610d62600160fb55565b6060610ebb61087f565b6000610ec861013a612152565b905060008160ff1667ffffffffffffffff811115610ee857610ee861440b565b604051908082528060200260200182016040528015610f11578160200160208202803683370190505b509050600080610f216000611e5e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8f9190614685565b1115610fcf578083600081518110610fa957610fa96146bb565b6001600160a01b039092166020928302919091019091015281610fcb816146d1565b9250505b60015b8460ff168160ff16101561104b576000610fee8260ff16611e5e565b9050610ff981612d8f565b1561103a5780858360ff1681518110611014576110146146bb565b6001600160a01b039092166020928302919091019091015283611036816146d1565b9450505b50611044816146d1565b9050610fd2565b5060008260ff1667ffffffffffffffff81111561106a5761106a61440b565b604051908082528060200260200182016040528015611093578160200160208202803683370190505b5090506000805b8660ff168160ff16101561114d5760006001600160a01b0316868260ff16815181106110c8576110c86146bb565b60200260200101516001600160a01b03161461113d57858160ff16815181106110f3576110f36146bb565b6020026020010151838380611107906146d1565b945060ff168151811061111c5761111c6146bb565b60200260200101906001600160a01b031690816001600160a01b0316815250505b611146816146d1565b905061109a565b50909550505050505090565b3360008181526034602090815260408083206001600160a01b038716845290915281205490919061085890829086906111939087906146f0565b611d3a565b61012d5461010090046001600160a01b031633146111c957604051637bf6a16f60e01b815260040160405180910390fd5b610c0b612e10565b6111db3382612e62565b50565b60006111e861087f565b6111f182612f96565b6111fd57506000919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a08231906024015b602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108779190614685565b600061127061087f565b611278611e6c565b611280612582565b61128983612fa4565b6112a657604051632c88119960e11b815260040160405180910390fd5b60006112b28484612fc1565b90508215806112bf575080155b156112ce5760009150506112ef565b6112d88484612ab7565b506112e333826130e9565b6112ec846131aa565b90505b61085e600160fb55565b604080518082019091526000808252602082015261131561087f565b61131f84846125d5565b61133c57604051633c37540f60e21b815260040160405180910390fd5b611347848484612631565b949350505050565b600061135961087f565b61087782612f96565b600061136c61087f565b61137583612fa4565b61139257604051632c88119960e11b815260040160405180910390fd5b610c2c8383612fc1565b6113a4612aed565b600860ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140b9190614703565b60ff161461142c5760405163c51d798560e01b815260040160405180910390fd5b61012e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d5f6000611e5e565b611463612aed565b610c0b60006133c0565b600061147761087f565b61148082612f96565b61148c57506000919050565b61149582613412565b156114c6576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401611225565b60008290506000816001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152f9190614617565b905061134782826115406000611e5e565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a08231906024015b602060405180830381865afa158015611585573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a99190614685565b6001613439565b600054610100900460ff16158080156115d05750600054600160ff909116105b806115ea5750303b1580156115ea575060005460ff166001145b6116615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015611684576000805461ff0019166101001790555b61168e8686613545565b6116966135a8565b61169e613601565b6116a6613662565b6116ae6136c3565b836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117109190614703565b61012d805460ff191660ff9290921691909117905561173161013a85613724565b5061173b846121db565b506117516106696097546001600160a01b031690565b61175a8261139c565b61176383611865565b6117706001600019610d09565b61177b600019611c8d565b61178a6107496008600a61480a565b80156117d0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6117e3823383612345565b6117ed8282612e62565b5050565b61012d5461010090046001600160a01b0316331461182257604051637bf6a16f60e01b815260040160405180910390fd5b610c0b613739565b600061183461087f565b61013254610d5f906001600160a01b0316612d24565b600061185461087f565b50610132546001600160a01b031690565b61186d612aed565b6118776000611e5e565b6001600160a01b0316816001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e29190614617565b6001600160a01b03161461190957604051632c88119960e11b815260040160405180910390fd5b61013180546001600160a01b0319166001600160a01b0392909216919091179055565b6060603780546107c7906145dd565b611943612aed565b61012d80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b600061198d61087f565b610d5f612bb2565b600061199f61087f565b610d5f61013a612152565b6119b261087f565b6119ba611e6c565b6119c2612aed565b6119cb83612f96565b156119e9576040516328071e2f60e11b815260040160405180910390fd5b6119fd6001600160a01b0384168383613776565b611a07600160fb55565b505050565b3360008181526034602090815260408083206001600160a01b038716845290915281205490919083811015611a915760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611658565b611a9e8286868403611d3a565b506001949350505050565b6000336108588185856123d7565b611ac36008600a61480a565b81565b6060611ad061087f565b611ad8611e6c565b611ae0612582565b60008211611b2d576040805160008082526020820190925290611b25565b6040805180820190915260008082526020820152815260200190600190039081611afe5790505b509050611be2565b6000611b38836137ee565b9050611b443384612e62565b805160005b8160ff168160ff161015611bdc576000838260ff1681518110611b6e57611b6e6146bb565b6020026020010151602001511115611bcc57611bca838260ff1681518110611b9857611b986146bb565b602002602001015160000151848360ff1681518110611bb957611bb96146bb565b602002602001015160200151612ad7565b505b611bd5816146d1565b9050611b49565b50909150505b61087a600160fb55565b61012d5461010090046001600160a01b03163314611c1d57604051637bf6a16f60e01b815260040160405180910390fd5b611c296008600a61480a565b811115611c49576040516366e3134960e11b815260040160405180910390fd5b61013755565b611c57612aed565b61013d80546001600160a01b0319166001600160a01b0392909216919091179055565b6060611c8461087f565b610877826137ee565b61012d5461010090046001600160a01b03163314611cbe57604051637bf6a16f60e01b815260040160405180910390fd5b61013655565b611ccc612aed565b6001600160a01b038116611d315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611658565b6111db816133c0565b6001600160a01b038316611d9c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611658565b6001600160a01b038216611dfd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611658565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061087761013a83613a74565b600260fb5403611ebe5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611658565b600260fb55565b6000611ed16000611e5e565b6001600160a01b0316826001600160a01b031663b2016bd46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3c9190614617565b6001600160a01b0316148015611fb35750816001600160a01b03166359eb82246040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faf9190614685565b6002145b801561201e5750816001600160a01b03166324a9d8536040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c9190614685565b155b801561203d57506101345461203b836001600160a01b031661215c565b105b80156120c557506001600160a01b038216612059816000613a80565b6001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ba9190614617565b6001600160a01b0316145b801561087757506001600160a01b0382166120e1816001613a80565b6001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561211e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121429190614617565b6001600160a01b03161492915050565b6000610877825490565b600080826001600160a01b031663d59624b46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561219d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c19190614685565b90504281116121d1576000610c2c565b610c2c4282614819565b6040516370a0823160e01b815230600482015260009081906001600160a01b038416906370a0823190602401602060405180830381865afa158015612224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122489190614685565b604080516001600160a01b0386168152602081018390529192507fd1fbbd81a5fd46d869b5cd6883d99108cd295072be1b09d36381bbc78b686939910160405180910390a161229683613412565b156122a15792915050565b60006122ac84612f96565b90506000821180156122bc575080155b156122ff576122cd61013a85613724565b50600b6122db61013a612152565b11156122fa57604051630aadf0b960e41b815260040160405180910390fd5b612337565b8115801561230a5750805b156123375761231b61013a85613af5565b506001600160a01b038416600090815261013860205260408120555b5092915050565b600160fb55565b6001600160a01b0383811660009081526034602090815260408083209386168352929052205460001981146123d157818110156123c45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611658565b6123d18484848403611d3a565b50505050565b6001600160a01b03831661243b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611658565b6001600160a01b03821661249d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611658565b6001600160a01b038316600090815260336020526040902054818110156125155760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611658565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906125759086815260200190565b60405180910390a36123d1565b60c95460ff1615610c0b5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401611658565b60006125e082613412565b156125f5576125ee83612fa4565b905061085e565b816125ff84612fa4565b801561260f575061260f81612f96565b8015612621575061261f81612fa4565b155b8015611347575061134781612d8f565b604080518082019091526000808252602082015261012e5460408051606081019091526000916001600160a01b031690638b83535b9082906301356c8c9080612678612bb2565b815261013d5460408051634bd9fe5560e11b815290516020938401936001600160a01b03909316926397b3fcaa92600480820193918290030181865afa1580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea9190614685565b815261013254602090910190612708906001600160a01b0316612d24565b9052604080516001600160e01b031960e085901b16815282516004820152602083015160248201529101516044820152606401602060405180830381865afa158015612758573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277c9190614685565b6040518263ffffffff1660e01b815260040161279a91815260200190565b602060405180830381865afa1580156127b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127db9190614685565b905060006127e96000611e5e565b61012d549091506000906128019060ff16600a61480a565b610132549091506000906128229089906001600160a01b0316858585613439565b9050816001600160a01b03888116908516146128b05760008890506128ac81826001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561287f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a39190614617565b87876001613439565b9150505b6040516370a0823160e01b81523060048201526000906001600160a01b038a16906370a0823190602401602060405180830381865afa1580156128f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291b9190614685565b9050871580612928575080155b80612931575082155b8061293a575081155b156129635760405180604001604052806000815260200160008152509650505050505050610c2c565b60408051808201909152818152600090602081016129848486886001613b0a565b9052905060008713156129d7576129cd6129a06008600a61480a565b6129a989613b67565b6129b56008600a61480a565b6129bf9190614819565b602084015191906001613b0a565b6020820152612a14565b6000871215612a1457612a0e6129ef6008600a61480a565b6129f889613bbd565b612a046008600a61480a565b6129bf91906146f0565b60208201525b8881602001511115612aa95760208101899052612a32898585613bd0565b81526000871315612a7b57612a74612a4988613bbd565b612a556008600a61480a565b612a5f9190614819565b612a6b6008600a61480a565b83519190613bd0565b8152612aa9565b6000871215612aa957612aa6612a9088613bbd565b612a9c6008600a61480a565b612a5f91906146f0565b81525b9a9950505050505050505050565b6000612ace6001600160a01b038416333085613cc2565b610c2c836121db565b6000612ace6001600160a01b0384163384613776565b6097546001600160a01b03163314610c0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611658565b6040516313612cb160e11b8152600060048201819052906001600160a01b038316906326c25962906024016040805180830381865afa158015612b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612337919061482c565b600080612bbf6000611e5e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2d9190614685565b90506000612c3c61013a612152565b905060015b8160ff168160ff161015612d1b576000612c5d8260ff16611e5e565b90506000816001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc39190614617565b6040516370a0823160e01b8152306004820152909150612cfc908390839089906001600160a01b038416906370a0823190602401611568565b612d0690866146f0565b9450505080612d14906146d1565b9050612c41565b50909392505050565b6040516313612cb160e11b8152600060048201819052906001600160a01b038316906326c25962906024016040805180830381865afa158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061482c565b600061013354612e08836001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfa9190614617565b6001600160a01b031661215c565b111592915050565b612e18613cfa565b60c9805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216612ec25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611658565b6001600160a01b03821660009081526033602052604090205481811015612f365760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611658565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600061087761013a83613d4c565b610132546000906001600160a01b03808416916121429116612b47565b610132546000908190612fea9085906001600160a01b0316612fe284611e5e565b866000613439565b61013d549091506000906001600160a01b031633146130805761012e60009054906101000a90046001600160a01b03166001600160a01b0316630a98b70d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307b9190614685565b613083565b60005b9050600061309060355490565b90508281156130b0576130ad826130a5612bb2565b839190613bd0565b90505b82156130df576130dc836130c66008600a61480a565b6130d09190614819565b6130a56008600a61480a565b90505b9695505050505050565b6001600160a01b03821661313f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611658565b806035600082825461315191906146f0565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006131b560355490565b9050610136548111156131db5760405163fb88d21560e01b815260040160405180910390fd5b60006131e76000611e5e565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613231573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132559190614685565b905080600061326561013a612152565b905060015b8160ff168160ff1610156133755760006132868260ff16611e5e565b9050600061331e82836001600160a01b03166364c9ec6f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f09190614617565b6040516370a0823160e01b81523060048201528a906001600160a01b038716906370a0823190602401611568565b9050886001600160a01b0316826001600160a01b03161480613344575061334482612d8f565b156133565761335381866146f0565b94505b61336081876146f0565b955050508061336e906146d1565b905061326a565b5060006133916133876008600a61480a565b8490866001613b0a565b9050610137548111156133b757604051630381ed1760e31b815260040160405180910390fd5b50505050505050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061341e6000611e5e565b6001600160a01b0316826001600160a01b0316149050919050565b6040516370a0823160e01b81526001600160a01b03858116600483015260009182918616906370a0823190602401602060405180830381865afa158015613484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a89190614685565b90506000876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350e9190614685565b9050600061351c8284613d6e565b90506000821161352c5785613538565b61353881878488613b0a565b9998505050505050505050565b600054610100900460ff1661359e5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b6117ed8282613d84565b600054610100900460ff16610c0b5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b600054610100900460ff1661365a5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b610c0b613df6565b600054610100900460ff166136bb5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b610c0b613e58565b600054610100900460ff1661371c5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b610c0b613ebd565b6000610c2c836001600160a01b038416613f16565b613741612582565b60c9805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e453390565b6040516001600160a01b038316602482015260448101829052611a0790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152613f65565b606060006137fb60355490565b61013d549091506000906001600160a01b031633146138915761012e60009054906101000a90046001600160a01b03166001600160a01b031663ca9cbcbe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388c9190614685565b613894565b60005b905060006138a361013a612152565b905060008160ff1667ffffffffffffffff8111156138c3576138c361440b565b60405190808252806020026020018201604052801561390857816020015b60408051808201909152600080825260208201528152602001906001900390816138e15790505b50905060005b8260ff168160ff161015613a6a57600061392a8260ff16611e5e565b6040805180820182526001600160a01b03831680825291516370a0823160e01b81523060048201529293509160208301916139b4918c918b916370a0823190602401602060405180830381865afa158015613989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ad9190614685565b9190613bd0565b815250838360ff16815181106139cc576139cc6146bb565b60209081029190910101528415613a5957613a33856139ed6008600a61480a565b6139f79190614819565b613a036008600a61480a565b858560ff1681518110613a1857613a186146bb565b602002602001015160200151613bd09092919063ffffffff16565b838360ff1681518110613a4857613a486146bb565b602002602001015160200181815250505b50613a63816146d1565b905061390e565b5095945050505050565b6000610c2c838361404d565b6040516313612cb160e11b815260ff821660048201526000906001600160a01b038416906326c25962906024016040805180830381865afa158015613ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aed919061482c565b509392505050565b6000610c2c836001600160a01b038416614077565b600080613b18868686613bd0565b90506001836002811115613b2e57613b2e61485a565b148015613b4b575060008480613b4657613b46614870565b868809115b15613b5e57613b5b6001826146f0565b90505b95945050505050565b600080821215613bb95760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401611658565b5090565b600080821215613bb95781600003610877565b6000808060001985870985870292508281108382030391505080600003613c0a57838281613c0057613c00614870565b0492505050610c2c565b808411613c595760405162461bcd60e51b815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401611658565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6040516001600160a01b03808516602483015283166044820152606481018290526123d19085906323b872dd60e01b906084016137a2565b60c95460ff16610c0b5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401611658565b6001600160a01b03811660009081526001830160205260408120541515610c2c565b6000818310613d7d5781610c2c565b5090919050565b600054610100900460ff16613ddd5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b6036613de983826148cc565b506037611a0782826148cc565b600054610100900460ff16613e4f5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b610c0b336133c0565b600054610100900460ff16613eb15760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b60c9805460ff19169055565b600054610100900460ff1661233e5760405162461bcd60e51b815260206004820152602b60248201526000805160206149bf83398151915260448201526a6e697469616c697a696e6760a81b6064820152608401611658565b6000818152600183016020526040812054613f5d5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561085e565b50600061085e565b6000613fba826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661416a9092919063ffffffff16565b9050805160001480613fdb575080806020019051810190613fdb9190614663565b611a075760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611658565b6000826000018281548110614064576140646146bb565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561416057600061409b600183614819565b85549091506000906140af90600190614819565b90508181146141145760008660000182815481106140cf576140cf6146bb565b90600052602060002001549050808760000184815481106140f2576140f26146bb565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806141255761412561498c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061085e565b600091505061085e565b6060611347848460008585600080866001600160a01b0316858760405161419191906149a2565b60006040518083038185875af1925050503d80600081146141ce576040519150601f19603f3d011682016040523d82523d6000602084013e6141d3565b606091505b50915091506141e4878383876141ef565b979650505050505050565b6060831561425e578251600003614257576001600160a01b0385163b6142575760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611658565b5081611347565b61134783838151156142735781518083602001fd5b8060405162461bcd60e51b815260040161165891906142b1565b60005b838110156142a8578181015183820152602001614290565b50506000910152565b60208152600082518060208401526142d081604085016020870161428d565b601f01601f19169190910160400192915050565b6001600160a01b03811681146111db57600080fd5b6000806040838503121561430c57600080fd5b8235614317816142e4565b946020939093013593505050565b60006020828403121561433757600080fd5b5035919050565b60008060006060848603121561435357600080fd5b833561435e816142e4565b9250602084013561436e816142e4565b929592945050506040919091013590565b6000806040838503121561439257600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156143e25783516001600160a01b0316835292840192918401916001016143bd565b50909695505050505050565b60006020828403121561440057600080fd5b8135610c2c816142e4565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261443257600080fd5b813567ffffffffffffffff8082111561444d5761444d61440b565b604051601f8301601f19908116603f011681019082821181831017156144755761447561440b565b8160405283815286602085880101111561448e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156144c657600080fd5b853567ffffffffffffffff808211156144de57600080fd5b6144ea89838a01614421565b9650602088013591508082111561450057600080fd5b5061450d88828901614421565b945050604086013561451e816142e4565b9250606086013561452e816142e4565b9150608086013561453e816142e4565b809150509295509295909350565b602080825282518282018190526000919060409081850190868401855b8281101561459757815180516001600160a01b03168552860151868501529284019290850190600101614569565b5091979650505050505050565b600080604083850312156145b757600080fd5b82356145c2816142e4565b915060208301356145d2816142e4565b809150509250929050565b600181811c908216806145f157607f821691505b60208210810361461157634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561462957600080fd5b8151610c2c816142e4565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561085e5761085e614634565b60006020828403121561467557600080fd5b81518015158114610c2c57600080fd5b60006020828403121561469757600080fd5b5051919050565b600060ff8216806146b1576146b1614634565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036146e7576146e7614634565b60010192915050565b8082018082111561085e5761085e614634565b60006020828403121561471557600080fd5b815160ff81168114610c2c57600080fd5b600181815b8085111561476157816000190482111561474757614747614634565b8085161561475457918102915b93841c939080029061472b565b509250929050565b6000826147785750600161085e565b816147855750600061085e565b816001811461479b57600281146147a5576147c1565b600191505061085e565b60ff8411156147b6576147b6614634565b50506001821b61085e565b5060208310610133831016604e8410600b84101617156147e4575081810a61085e565b6147ee8383614726565b806000190482111561480257614802614634565b029392505050565b6000610c2c60ff841683614769565b8181038181111561085e5761085e614634565b6000806040838503121561483f57600080fd5b825161484a816142e4565b6020939093015192949293505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b601f821115611a0757600081815260208120601f850160051c810160208610156148ad5750805b601f850160051c820191505b818110156117d0578281556001016148b9565b815167ffffffffffffffff8111156148e6576148e661440b565b6148fa816148f484546145dd565b84614886565b602080601f83116001811461492f57600084156149175750858301515b600019600386901b1c1916600185901b1785556117d0565b600085815260208120601f198616915b8281101561495e5788860151825594840194600190910190840161493f565b508582101561497c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603160045260246000fd5b600082516149b481846020870161428d565b919091019291505056fe496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a2646970667358221220019c9a2bbc687c80ec09fc6c20261660a471ee3a70c37457a3f64370378c211364736f6c63430008140033