[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "authority", "type": "address" } ], "name": "AccessManagedInvalidAuthority", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "uint32", "name": "delay", "type": "uint32" } ], "name": "AccessManagedRequiredDelay", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "AccessManagedUnauthorized", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "ClaimRewardsFailed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxDeposit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxRedeem", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "uint256", "name": "max", "type": "uint256" } ], "name": "ERC4626ExceededMaxWithdraw", "type": "error" }, { "inputs": [], "name": "ERC5143SlippageProtectionFailed", "type": "error" }, { "inputs": [], "name": "FailedCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NoRewardsProxy", "type": "error" }, { "inputs": [], "name": "NotEnoughAssets", "type": "error" }, { "inputs": [], "name": "NotEnoughVaultShares", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "TooMuchVaultShares", "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": "address", "name": "authority", "type": "address" } ], "name": "AuthorityUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldRewardsProxy", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRewardsProxy", "type": "address" } ], "name": "RewardsProxyUpdated", "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": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vaultShares", "type": "uint256" } ], "name": "Unwrap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "vaultShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Wrap", "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": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "authority", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "vaultShare_", "type": "address" }, { "internalType": "uint8", "name": "decimalsOffset_", "type": "uint8" }, { "internalType": "address", "name": "initialAuthority_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isConsumingScheduledOp", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewUnwrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "vaultShares", "type": "uint256" } ], "name": "previewWrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardsProxy", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAuthority", "type": "address" } ], "name": "setAuthority", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRewardsProxy", "type": "address" } ], "name": "setRewardsProxy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalVaultShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "minVaultShares", "type": "uint256" } ], "name": "unwrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "unwrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "vaultShare", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "vaultShares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "wrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "vaultShares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "minShares", "type": "uint256" } ], "name": "wrap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801562000010575f80fd5b506200001b62000021565b620000d5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d25780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61307180620000e35f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c80637a9e5e4b11610135578063c63d75b6116100b4578063dd62ed3e11610079578063dd62ed3e14610508578063e190febc1461051b578063ef8b30f71461052e578063f35f9e4514610541578063fb183a0214610554575f80fd5b8063c63d75b6146104a9578063c6e6f592146104bc578063ce96cb77146104cf578063d01ab8ee146104e2578063d905777e146104f5575f80fd5b8063aa9b074e116100fa578063aa9b074e14610455578063b3d7f6b914610468578063b460af941461047b578063ba0876521461048e578063bf7e214f146104a1575f80fd5b80637a9e5e4b146103f35780638fb360371461040657806394bf804d1461042757806395d89b411461043a578063a9059cbb14610442575f80fd5b8063313ce567116101c1578063621b1b7c11610186578063621b1b7c146103aa5780636e553f65146103bd57806370a08231146103d0578063728a1611146103e3578063732e86fe146103eb575f80fd5b8063313ce5671461034f57806338d52e0f14610369578063402d267d14610371578063404b9d81146103845780634cdad50614610397575f80fd5b806313bac8201161020757806313bac820146102bc57806318160ddd146102cf57806320b9353b146102e357806323b872dd146102f85780632a9941661461030b575f80fd5b806301e1d1141461024357806306fdde031461025e57806307a2d13a14610273578063095ea7b3146102865780630a28a477146102a9575b5f80fd5b61024b610567565b6040519081526020015b60405180910390f35b610266610585565b60405161025591906127a7565b61024b6102813660046127b9565b610645565b6102996102943660046127e4565b6106c9565b6040519015158152602001610255565b61024b6102b73660046127b9565b6106e0565b61024b6102ca36600461280e565b61075f565b5f8051602061301c8339815191525461024b565b6102f66102f136600461283c565b6107f4565b005b610299610306366004612857565b61080c565b7f59ff202e9c72f33fbb7c107cbf037f949ff0624b6b8b7e53ab05f0c445903001546001600160a01b03165b6040516001600160a01b039091168152602001610255565b610357610831565b60405160ff9091168152602001610255565b6103376108bb565b61024b61037f36600461283c565b6108ef565b61024b6103923660046127b9565b610928565b61024b6103a53660046127b9565b610933565b61024b6103b8366004612895565b610954565b61024b6103cb36600461280e565b61098d565b61024b6103de36600461283c565b610b01565b61024b610b27565b610337610ba7565b6102f661040136600461283c565b610bbc565b61040e610c42565b6040516001600160e01b03199091168152602001610255565b61024b61043536600461280e565b610c77565b610266610d7a565b6102996104503660046127e4565b610db8565b61024b6104633660046127b9565b610dc5565b61024b6104763660046127b9565b610dd0565b61024b6104893660046128da565b610df2565b61024b61049c3660046128da565b610fe2565b6103376111bc565b61024b6104b736600461283c565b6111d1565b61024b6104ca3660046127b9565b6111de565b61024b6104dd36600461283c565b61125c565b61024b6104f0366004612919565b6112e1565b61024b61050336600461283c565b611318565b61024b61051636600461293d565b61135e565b6102f66105293660046129d5565b6113a7565b61024b61053c3660046127b9565b6114ee565b6102f661054f366004612a5d565b611527565b61024b6105623660046128da565b6116bb565b5f6105806102815f8051602061301c8339815191525490565b905090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060915f80516020612fdc833981519152916105c390612a8a565b80601f01602080910402602001604051908101604052809291908181526020018280546105ef90612a8a565b801561063a5780601f106106115761010080835404028352916020019161063a565b820191905f5260205f20905b81548152906001019060200180831161061d57829003601f168201915b505050505091505090565b5f61064e610ba7565b6001600160a01b03166307a2d13a610666845f611774565b6040518263ffffffff1660e01b815260040161068491815260200190565b602060405180830381865afa15801561069f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c39190612ac2565b92915050565b5f336106d68185856117ca565b5060019392505050565b5f6106c36106ec610ba7565b6001600160a01b0316630a28a477846040518263ffffffff1660e01b815260040161071991815260200190565b602060405180830381865afa158015610734573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107589190612ac2565b60016117dc565b5f338161076b85610928565b905061078c82308761077b610ba7565b6001600160a01b031692919061182f565b6107968482611896565b836001600160a01b0316826001600160a01b03167f764bd851d2423ff95fbc9b4db718c64299b808c0948fa9eec41c3b30001aea5e87846040516107e4929190918252602082015260400190565b60405180910390a3949350505050565b610800335b5f366118ca565b610809816119c8565b50565b5f33610819858285611a58565b610824858585611aa2565b60019150505b9392505050565b5f61084a5f80516020612ffc8339815191525460ff1690565b610852610ba7565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b19190612ad9565b6105809190612b08565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b546001600160a01b031692915050565b5f6108f8610ba7565b60405163402d267d60e01b81526001600160a01b038481166004830152919091169063402d267d90602401610684565b5f6106c3825f6117dc565b5f61093c610ba7565b6001600160a01b0316634cdad506610666845f611774565b5f806109618686866116bb565b90508281101561098457604051630f033da760e41b815260040160405180910390fd5b95945050505050565b5f80610998836108ef565b9050808411156109ca57828482604051633c8097d960e11b81526004016109c193929190612b21565b60405180910390fd5b5f6109d3610ba7565b6001600160a01b031663ef8b30f7866040518263ffffffff1660e01b8152600401610a0091815260200190565b602060405180830381865afa158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f9190612ac2565b90505f610a4c825f6117dc565b9050610a5a33868884611aff565b5f610a63610ba7565b604051636e553f6560e01b8152600481018990523060248201526001600160a01b039190911690636e553f65906044015b6020604051808303815f875af1158015610ab0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad49190612ac2565b905082811015610af7576040516379ef27e560e01b815260040160405180910390fd5b5095945050505050565b6001600160a01b03165f9081525f80516020612fdc833981519152602052604090205490565b5f805f80516020612fbc83398151915280546040516370a0823160e01b81523060048201529192506001600160a01b0316906370a0823190602401602060405180830381865afa158015610b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba19190612ac2565b91505090565b5f805f80516020612fbc8339815191526108df565b33610bc56111bc565b6001600160a01b0316816001600160a01b031614610c005760405162d1953b60e31b81526001600160a01b03821660048201526024016109c1565b816001600160a01b03163b5f03610c35576040516361798f2f60e11b81526001600160a01b03831660048201526024016109c1565b610c3e82611b9e565b5050565b5f80516020612f9c83398151915280545f9190600160a01b900460ff16610c69575f610ba1565b638fb3603760e01b91505090565b5f80610c82836111d1565b905080841115610cab5782848260405163284ff66760e01b81526004016109c193929190612b21565b5f610cb7856001611774565b90505f610cc2610ba7565b6001600160a01b031663b3d7f6b9836040518263ffffffff1660e01b8152600401610cef91815260200190565b602060405180830381865afa158015610d0a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2e9190612ac2565b9050610d3c33868389611aff565b5f610d45610ba7565b604051636e553f6560e01b8152600481018490523060248201526001600160a01b039190911690636e553f6590604401610a94565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f80516020612fdc833981519152916105c390612a8a565b5f336106d6818585611aa2565b5f6106c3825f611774565b5f610dd9610ba7565b6001600160a01b031663b3d7f6b9610666846001611774565b5f80610dfd8361125c565b905080851115610e2657828582604051633fa733bb60e21b81526004016109c193929190612b21565b5f610e2f610ba7565b6001600160a01b0316630a28a477876040518263ffffffff1660e01b8152600401610e5c91815260200190565b602060405180830381865afa158015610e77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9b9190612ac2565b90505f610ea98260016117dc565b9050336001600160a01b0386168114610ec757610ec7868284611a58565b610ed18683611bfe565b5f610eda610ba7565b604051632d182be560e21b8152600481018b90526001600160a01b038a81166024830152306044830152919091169063b460af94906064016020604051808303815f875af1158015610f2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f529190612ac2565b905083811115610f755760405163330f471160e11b815260040160405180910390fd5b866001600160a01b0316886001600160a01b0316836001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8c87604051610fcd929190918252602082015260400190565b60405180910390a45090979650505050505050565b5f80610fed83611318565b90508085111561101657828582604051632e52afbb60e21b81526004016109c193929190612b21565b5f611021865f611774565b90505f61102c610ba7565b6001600160a01b0316634cdad506836040518263ffffffff1660e01b815260040161105991815260200190565b602060405180830381865afa158015611074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110989190612ac2565b9050336001600160a01b03861681146110b6576110b686828a611a58565b6110c08689611bfe565b5f6110c9610ba7565b604051635d043b2960e11b8152600481018690526001600160a01b038a81166024830152306044830152919091169063ba087652906064016020604051808303815f875af115801561111d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111419190612ac2565b90508281101561116457604051630de1bf7560e21b815260040160405180910390fd5b866001600160a01b0316886001600160a01b0316836001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db848d604051610fcd929190918252602082015260400190565b5f805f80516020612f9c8339815191526108df565b5f6106c36104ca836108ef565b5f6106c36111ea610ba7565b6001600160a01b031663c6e6f592846040518263ffffffff1660e01b815260040161121791815260200190565b602060405180830381865afa158015611232573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112569190612ac2565b5f6117dc565b5f6106c361126c6103a584610b01565b611274610ba7565b60405163ce96cb7760e01b81523060048201526001600160a01b03919091169063ce96cb7790602401602060405180830381865afa1580156112b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112dc9190612ac2565b611c32565b5f806112ed858561075f565b90508281101561131057604051630f033da760e41b815260040160405180910390fd5b949350505050565b5f6106c361132583610b01565b6112dc611330610ba7565b604051636c82bbbf60e11b81523060048201526001600160a01b03919091169063d905777e90602401611217565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6113b0336107f9565b5f6113e27f59ff202e9c72f33fbb7c107cbf037f949ff0624b6b8b7e53ab05f0c445903001546001600160a01b031690565b90506001600160a01b038116158061140257506001600160a01b0381163b155b1561142057604051639bc021a960e01b815260040160405180910390fd5b5f806001600160a01b031663e190febc8460405160240161144191906127a7565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090505f826001600160a01b0316826040516114899190612b42565b5f60405180830381855af49150503d805f81146114c1576040519150601f19603f3d011682016040523d82523d5f602084013e6114c6565b606091505b50509050806114e857604051631bc7e5c360e21b815260040160405180910390fd5b50505050565b5f6106c36114fa610ba7565b6001600160a01b031663ef8b30f7846040518263ffffffff1660e01b815260040161121791815260200190565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561156c5750825b90505f8267ffffffffffffffff1660011480156115885750303b155b905081158015611596575080155b156115b45760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156115de57845460ff60401b1916600160401b1785555b5f886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163f9190612b5d565b905061164c818a89611c47565b61165588611c82565b61166a6001600160a01b0382168a5f19611cac565b5083156116b157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b5f336001600160a01b03831681146116d8576116d8838287611a58565b5f6116e286610dc5565b90506116ee8487611bfe565b61170b85826116fb610ba7565b6001600160a01b03169190611d3b565b836001600160a01b0316856001600160a01b0316836001600160a01b03167fddce703dce003cfc0a2d7cddef5f904f35cc1d27200a1b9153a656dc5208a8498985604051611763929190918252602082015260400190565b60405180910390a495945050505050565b5f61082a611780610b27565b61178b906001612b78565b5f80516020612ffc8339815191525460ff166117a890600a612c6b565b5f8051602061301c833981519152546117c19190612b78565b85919085611d6c565b6117d78383836001611dae565b505050565b5f61082a6117f85f80516020612ffc8339815191525460ff1690565b61180390600a612c6b565b5f8051602061301c8339815191525461181c9190612b78565b611824610b27565b6117c1906001612b78565b6040516001600160a01b0384811660248301528381166044830152606482018390526114e89186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611e89565b6001600160a01b0382166118bf5760405163ec442f0560e01b81525f60048201526024016109c1565b610c3e5f8383611eea565b5f80516020612f9c8339815191525f806119026118e56111bc565b87306118f460045f8a8c612c79565b6118fd91612ca0565b612010565b91509150816119c05763ffffffff81161561199d57825460ff60a01b1916600160a01b1783556119306111bc565b6001600160a01b03166394c7d7ee8787876040518463ffffffff1660e01b815260040161195f93929190612cd0565b5f604051808303815f87803b158015611976575f80fd5b505af1158015611988573d5f803e3d5ffd5b5050845460ff60a01b19168555506119c09050565b60405162d1953b60e31b81526001600160a01b03871660048201526024016109c1565b505050505050565b7f59ff202e9c72f33fbb7c107cbf037f949ff0624b6b8b7e53ab05f0c44590300180546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281515f80516020612fbc83398151915293927f7c001ad9f6bdea5a8ff108ca4cf90c48873c604f3a53fd75300d5710093efcff928290030190a1505050565b5f611a63848461135e565b90505f1981146114e85781811015611a9457828183604051637dc7a0d960e11b81526004016109c193929190612b21565b6114e884848484035f611dae565b6001600160a01b038316611acb57604051634b637e8f60e11b81525f60048201526024016109c1565b6001600160a01b038216611af45760405163ec442f0560e01b81525f60048201526024016109c1565b6117d7838383611eea565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e008054611b37906001600160a01b031686308661182f565b611b418483611896565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051611b8f929190918252602082015260400190565b60405180910390a35050505050565b5f80516020612f9c83398151915280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b6001600160a01b038216611c2757604051634b637e8f60e11b81525f60048201526024016109c1565b610c3e825f83611eea565b5f818310611c40578161082a565b5090919050565b611c4f612118565b611c5882612163565b611c6183612199565b611c79611c6c6121aa565b611c74612239565b6122b4565b6117d7816122c6565b611c8a612118565b5f80516020612ffc833981519152805460ff191660ff92909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611cfd84826122d7565b6114e8576040516001600160a01b0384811660248301525f6044830152611d3191869182169063095ea7b390606401611864565b6114e88482611e89565b6040516001600160a01b038381166024830152604482018390526117d791859182169063a9059cbb90606401611864565b5f611d99611d7983612374565b8015611d9457505f8480611d8f57611d8f612d0f565b868809115b151590565b611da48686866123a0565b6109849190612b78565b5f80516020612fdc8339815191526001600160a01b038516611de55760405163e602df0560e01b81525f60048201526024016109c1565b6001600160a01b038416611e0e57604051634a1406b160e11b81525f60048201526024016109c1565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115611e8257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611b8f91815260200190565b5050505050565b5f611e9d6001600160a01b0384168361245d565b905080515f14158015611ec1575080806020019051810190611ebf9190612d37565b155b156117d757604051635274afe760e01b81526001600160a01b03841660048201526024016109c1565b5f80516020612fdc8339815191526001600160a01b038416611f245781816002015f828254611f199190612b78565b90915550611f819050565b6001600160a01b0384165f9081526020829052604090205482811015611f635784818460405163391434e360e21b81526004016109c193929190612b21565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316611f9f576002810180548390039055611fbd565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161200291815260200190565b60405180910390a350505050565b6040516001600160a01b03848116602483015283811660448301526001600160e01b0319831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b1790525161207e9190612b42565b5f60405180830381855afa9150503d805f81146120b6576040519150601f19603f3d011682016040523d82523d5f602084013e6120bb565b606091505b5091509150811561210d5760408151106120ed57808060200190518101906120e39190612d50565b909450925061210d565b602081511061210d578080602001905181019061210a9190612d37565b93505b505094509492505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661216157604051631afcd79f60e31b815260040160405180910390fd5b565b61216b612118565b5f80516020612fbc83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6121a1612118565b6108098161246a565b60606121b4610ba7565b6001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa1580156121ee573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122159190810190612d82565b6040516020016122259190612deb565b604051602081830303815290604052905090565b6060612243610ba7565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa15801561227d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122a49190810190612d82565b6040516020016122259190612e2f565b6122bc612118565b610c3e82826124ed565b6122ce612118565b6108098161253d565b5f805f846001600160a01b0316846040516122f29190612b42565b5f604051808303815f865af19150503d805f811461232b576040519150601f19603f3d011682016040523d82523d5f602084013e612330565b606091505b509150915081801561235a57508051158061235a57508080602001905181019061235a9190612d37565b80156109845750505050506001600160a01b03163b151590565b5f600282600381111561238957612389612e59565b6123939190612e6d565b60ff166001149050919050565b5f838302815f1985870982811083820303915050805f036123d4578382816123ca576123ca612d0f565b049250505061082a565b8084116123f2576123f284156123eb57601161254e565b601261254e565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b606061082a83835f61255f565b612472612118565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f8061249e846125ff565b91509150816124ae5760126124b0565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b6124f5612118565b5f80516020612fdc8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361252e8482612edf565b50600481016114e88382612edf565b612545612118565b61080981611b9e565b634e487b715f52806020526024601cfd5b60608147101561258b5760405163cf47918160e01b8152476004820152602481018390526044016109c1565b5f80856001600160a01b031684866040516125a69190612b42565b5f6040518083038185875af1925050503d805f81146125e0576040519150601f19603f3d011682016040523d82523d5f602084013e6125e5565b606091505b50915091506125f58683836126d5565b9695505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b0387169161264591612b42565b5f60405180830381855afa9150503d805f811461267d576040519150601f19603f3d011682016040523d82523d5f602084013e612682565b606091505b509150915081801561269657506020815110155b156126c9575f818060200190518101906126b09190612ac2565b905060ff81116126c7576001969095509350505050565b505b505f9485945092505050565b6060826126ea576126e582612731565b61082a565b815115801561270157506001600160a01b0384163b155b1561272a57604051639996b31560e01b81526001600160a01b03851660048201526024016109c1565b508061082a565b8051156127415780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5b8381101561277457818101518382015260200161275c565b50505f910152565b5f815180845261279381602086016020860161275a565b601f01601f19169290920160200192915050565b602081525f61082a602083018461277c565b5f602082840312156127c9575f80fd5b5035919050565b6001600160a01b0381168114610809575f80fd5b5f80604083850312156127f5575f80fd5b8235612800816127d0565b946020939093013593505050565b5f806040838503121561281f575f80fd5b823591506020830135612831816127d0565b809150509250929050565b5f6020828403121561284c575f80fd5b813561082a816127d0565b5f805f60608486031215612869575f80fd5b8335612874816127d0565b92506020840135612884816127d0565b929592945050506040919091013590565b5f805f80608085870312156128a8575f80fd5b8435935060208501356128ba816127d0565b925060408501356128ca816127d0565b9396929550929360600135925050565b5f805f606084860312156128ec575f80fd5b8335925060208401356128fe816127d0565b9150604084013561290e816127d0565b809150509250925092565b5f805f6060848603121561292b575f80fd5b833592506020840135612884816127d0565b5f806040838503121561294e575f80fd5b8235612959816127d0565b91506020830135612831816127d0565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156129a6576129a6612969565b604052919050565b5f67ffffffffffffffff8211156129c7576129c7612969565b50601f01601f191660200190565b5f602082840312156129e5575f80fd5b813567ffffffffffffffff8111156129fb575f80fd5b8201601f81018413612a0b575f80fd5b8035612a1e612a19826129ae565b61297d565b818152856020838501011115612a32575f80fd5b816020840160208301375f91810160200191909152949350505050565b60ff81168114610809575f80fd5b5f805f60608486031215612a6f575f80fd5b8335612a7a816127d0565b925060208401356128fe81612a4f565b600181811c90821680612a9e57607f821691505b602082108103612abc57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612ad2575f80fd5b5051919050565b5f60208284031215612ae9575f80fd5b815161082a81612a4f565b634e487b7160e01b5f52601160045260245ffd5b60ff81811683821601908111156106c3576106c3612af4565b6001600160a01b039390931683526020830191909152604082015260600190565b5f8251612b5381846020870161275a565b9190910192915050565b5f60208284031215612b6d575f80fd5b815161082a816127d0565b808201808211156106c3576106c3612af4565b600181815b80851115612bc557815f1904821115612bab57612bab612af4565b80851615612bb857918102915b93841c9390800290612b90565b509250929050565b5f82612bdb575060016106c3565b81612be757505f6106c3565b8160018114612bfd5760028114612c0757612c23565b60019150506106c3565b60ff841115612c1857612c18612af4565b50506001821b6106c3565b5060208310610133831016604e8410600b8410161715612c46575081810a6106c3565b612c508383612b8b565b805f1904821115612c6357612c63612af4565b029392505050565b5f61082a60ff841683612bcd565b5f8085851115612c87575f80fd5b83861115612c93575f80fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612cc85780818660040360031b1b83161692505b505092915050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52601260045260245ffd5b80518015158114612d32575f80fd5b919050565b5f60208284031215612d47575f80fd5b61082a82612d23565b5f8060408385031215612d61575f80fd5b612d6a83612d23565b9150602083015163ffffffff81168114612831575f80fd5b5f60208284031215612d92575f80fd5b815167ffffffffffffffff811115612da8575f80fd5b8201601f81018413612db8575f80fd5b8051612dc6612a19826129ae565b818152856020838501011115612dda575f80fd5b61098482602083016020860161275a565b7f53706563747261204552433436323620577261707065723a200000000000000081525f8251612e2281601985016020870161275a565b9190910160190192915050565b6273772d60e81b81525f8251612e4c81600385016020870161275a565b9190910160030192915050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612e8b57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b601f8211156117d7575f81815260208120601f850160051c81016020861015612ec05750805b601f850160051c820191505b818110156119c057828155600101612ecc565b815167ffffffffffffffff811115612ef957612ef9612969565b612f0d81612f078454612a8a565b84612e9a565b602080601f831160018114612f40575f8415612f295750858301515b5f19600386901b1c1916600185901b1785556119c0565b5f85815260208120601f198616915b82811015612f6e57888601518255948401946001909101908401612f4f565b5085821015612f8b57878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fef3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0059ff202e9c72f33fbb7c107cbf037f949ff0624b6b8b7e53ab05f0c44590300052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005648f88bd4e716b932167ae8ea6c71eee047ae6df476a4d21977656f850f8b0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02a26469706673582212208eb918fd337f4b765af34037cc05b38d6f0a04bdf7a8b1fb538e898d4119c98d64736f6c63430008140033