[ { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "components": [ { "internalType": "address", "name": "gasToken", "type": "address" }, { "internalType": "address[]", "name": "rewards", "type": "address[]" }, { "internalType": "address", "name": "simpleRouter", "type": "address" } ], "internalType": "struct BaseStrategy.BaseStrategySettings", "name": "_baseStrategySettings", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "dev", "type": "address" }, { "internalType": "address", "name": "feeCollector", "type": "address" }, { "internalType": "address", "name": "depositToken", "type": "address" }, { "internalType": "address", "name": "rewardToken", "type": "address" }, { "internalType": "uint256", "name": "minTokensToReinvest", "type": "uint256" }, { "internalType": "uint256", "name": "devFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "reinvestRewardBips", "type": "uint256" } ], "internalType": "struct YakStrategyV3.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "AddReward", "type": "event" }, { "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": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "DepositsEnabled", "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": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTotalDeposits", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "Reinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveReward", "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": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateDevAddr", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateDevFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateFeeCollector", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMaxTokensToDepositWithoutReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMinTokensToReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateReinvestReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldRouter", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "UpdateRouter", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DEPOSITS_ENABLED", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEV_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_TOKENS_TO_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REINVEST_REWARD_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION_HASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "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": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateDepositFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateWithdrawFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkReward", "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": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" }, { "internalType": "uint8", "name": "_v", "type": "uint8" }, { "internalType": "bytes32", "name": "_r", "type": "bytes32" }, { "internalType": "bytes32", "name": "_s", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "devAddr", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "disableDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "enableDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeCollector", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getDepositTokensForShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getSharesForDepositTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSupportedRewardsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract IPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minReturnAmountAccepted", "type": "uint256" } ], "name": "rescueDeployedFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "revokeAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "simpleRouter", "outputs": [ { "internalType": "contract ISimpleRouter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedRewards", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalDeposits", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "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": [ { "internalType": "address", "name": "newValue", "type": "address" } ], "name": "updateDevAddr", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateDevFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newValue", "type": "address" } ], "name": "updateFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMinTokensToReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateReinvestReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_router", "type": "address" } ], "name": "updateRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101406040526009610100819052685969656c642059616b60b81b6101209081526200002f916000919062000734565b506040805180820190915260038082526216549560ea1b60209092019182526200005c9160019162000734565b503480156200006a57600080fd5b50604051620051d9380380620051d98339810160408190526200008d9162000a4c565b600680546001600160a01b03191633908117909155604051839183918291908190600090600080516020620051b9833981519152908290a35080518051620000de9160009160209091019062000734565b506080808201516001600160a01b0390811690915260a0808301519091169052600780546001600160a01b0319163317905560c0810151620001209062000215565b60e08101516200013090620002b6565b610100810151620001419062000372565b606081015162000151906200042e565b60408101516200016190620004e2565b6200016b62000596565b60208101516200017b9062000637565b5081516001600160a01b031660c0526020808301518051620001a292600d920190620007c3565b50604082810151600e80546001600160a01b0319166001600160a01b039092169190911790558051600080825260208201527fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234910160405180910390a1505050506001600160a01b031660e05262000bf9565b6007546001600160a01b03163314620002755760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c7944657600000000000000000000000060448201526064015b60405180910390fd5b60095460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600955565b6007546001600160a01b03163314620003125760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c7944657600000000000000000000000060448201526064016200026c565b612710600b548262000325919062000b96565b11156200033157600080fd5b600c5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600c55565b6007546001600160a01b03163314620003ce5760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c7944657600000000000000000000000060448201526064016200026c565b612710600c5482620003e1919062000b96565b1115620003ed57600080fd5b600b5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600b55565b6006546001600160a01b03163314620004795760405162461bcd60e51b815260206004820181905260248201526000805160206200519983398151915260448201526064016200026c565b600854604080516001600160a01b03928316815291831660208301527fcc882185e6edeeb762130016ea1faf3d7aa9c01b199bfd646f965b58ab741063910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146200052d5760405162461bcd60e51b815260206004820181905260248201526000805160206200519983398151915260448201526064016200026c565b600754604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314620005e15760405162461bcd60e51b815260206004820181905260248201526000805160206200519983398151915260448201526064016200026c565b600a5460ff1615620005f257600080fd5b600a805460ff191660019081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859060200160405180910390a1565b6006546001600160a01b03163314620006825760405162461bcd60e51b815260206004820181905260248201526000805160206200519983398151915260448201526064016200026c565b6001600160a01b038116620006e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200026c565b6006546040516001600160a01b03808416921690600080516020620051b983398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b828054620007429062000bbd565b90600052602060002090601f016020900481019282620007665760008555620007b1565b82601f106200078157805160ff1916838001178555620007b1565b82800160010185558215620007b1579182015b82811115620007b157825182559160200191906001019062000794565b50620007bf9291506200081b565b5090565b828054828255906000526020600020908101928215620007b1579160200282015b82811115620007b157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620007e4565b5b80821115620007bf57600081556001016200081c565b80516001600160a01b03811681146200084a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200088b576200088b6200084f565b60405290565b604051606081016001600160401b03811182821017156200088b576200088b6200084f565b604051601f8201601f191681016001600160401b0381118282101715620008e157620008e16200084f565b604052919050565b600082601f830112620008fb57600080fd5b81516001600160401b038111156200091757620009176200084f565b60206200092d601f8301601f19168201620008b6565b82815285828487010111156200094257600080fd5b60005b838110156200096257858101830151828201840152820162000945565b83811115620009745760008385840101525b5095945050505050565b600061012082840312156200099257600080fd5b6200099c62000865565b82519091506001600160401b03811115620009b657600080fd5b620009c484828501620008e9565b825250620009d56020830162000832565b6020820152620009e86040830162000832565b6040820152620009fb6060830162000832565b606082015262000a0e6080830162000832565b608082015262000a2160a0830162000832565b60a082015260c082015160c082015260e082015160e082015261010080830151818301525092915050565b60008060006060848603121562000a6257600080fd5b62000a6d8462000832565b602085810151919450906001600160401b038082111562000a8d57600080fd5b908601906060828903121562000aa257600080fd5b62000aac62000891565b62000ab78362000832565b8152838301518281111562000acb57600080fd5b8301601f81018a1362000add57600080fd5b80518381111562000af25762000af26200084f565b8060051b62000b03878201620008b6565b918252828101870191878101908d84111562000b1e57600080fd5b938801935b8385101562000b475762000b378562000832565b8252938801939088019062000b23565b858901525062000b5e925050506040840162000832565b604082015280955050604087015192508083111562000b7c57600080fd5b505062000b8c868287016200097e565b9150509250925092565b6000821982111562000bb857634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168062000bd257607f821691505b60208210810362000bf357634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161448662000d1360003960008181610376015281816104b5015281816114710152818161283101528181612ba901528181612c4d01528181612d68015281816137cd015281816138990152818161390e015261399f015260008181611dc6015281816133df0152818161340e0152613483015260008181610b2e01528181611d2901528181611e2e01528181611f6d01528181612fba015281816130220152818161332b015281816134ad01528181613569015281816135cc015281816136a901526136fb01526000818161099f01528181610d9d01528181610e70015281816110070152818161109c01528181612a4b0152818161367f0152818161372301526137fc01526144866000f3fe60806040526004361061036f5760003560e01c806395d89b41116101c6578063c851cc32116100f7578063e75ab04511610095578063f2fde38b1161006f578063f2fde38b14610adc578063f6314d0714610afc578063f7c618c114610b1c578063fdb5a03e14610b5057600080fd5b8063e75ab04514610a87578063eab89a5a14610aa7578063ed24911d14610ac757600080fd5b8063d505accf116100d1578063d505accf146109e1578063da09c72c14610a01578063dd62ed3e14610a21578063dd8ce4d614610a6757600080fd5b8063c851cc321461096d578063c89039c51461098d578063d2c35ce8146109c157600080fd5b8063ac67e1af11610164578063b9e57b801161013e578063b9e57b801461090d578063bd079f5514610922578063c415b95c14610938578063c4b24a461461095857600080fd5b8063ac67e1af146108be578063b52a321f146108d3578063b6b55f25146108ed57600080fd5b80639e4e7318116101a05780639e4e73181461082a578063a4d5e67c1461085e578063a8ae2b7c1461087e578063a9059cbb1461089e57600080fd5b806395d89b41146107d557806399729ec1146107ea5780639c9b2e211461080a57600080fd5b80635e4c57a4116102a05780637d8820971161023e5780638980f11f116102185780638980f11f146107615780638aff733d146107815780638da5cb5b146107975780639291d563146107b557600080fd5b80637d882097146106ff5780637ecebe0014610714578063818372301461074157600080fd5b806370a082311161027a57806370a0823114610674578063715018a6146106aa5780637897e7f6146106bf5780637ae26773146106df57600080fd5b80635e4c57a4146106295780635ea682ea1461063e578063666d25b91461065457600080fd5b8063247d284b1161030d5780632f4f21e2116102e75780632f4f21e21461058e57806330adf81f146105ae578063313ce567146105e25780634a970be71461060957600080fd5b8063247d284b14610475578063258250da146105595780632e1a7d4d1461056e57600080fd5b806316f0115b1161034957806316f0115b146104a357806318160ddd146104ef57806320606b701461050557806323b872dd1461053957600080fd5b806306fdde031461041a578063095ea7b314610445578063110560351461047557600080fd5b36610415577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ca6d5d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f69190613d3b565b6001600160a01b0316336001600160a01b03161461041357600080fd5b005b600080fd5b34801561042657600080fd5b5061042f610b65565b60405161043c9190613d84565b60405180910390f35b34801561045157600080fd5b50610465610460366004613db7565b610bf3565b604051901515815260200161043c565b34801561048157600080fd5b50610495610490366004613de3565b610c09565b60405190815260200161043c565b3480156104af57600080fd5b506104d77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161043c565b3480156104fb57600080fd5b5061049560025481565b34801561051157600080fd5b506104957f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b34801561054557600080fd5b50610465610554366004613dfc565b610c1a565b34801561056557600080fd5b50600d54610495565b34801561057a57600080fd5b50610413610589366004613de3565b610ce3565b34801561059a57600080fd5b506104136105a9366004613db7565b610e09565b3480156105ba57600080fd5b506104957f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b3480156105ee57600080fd5b506105f7601281565b60405160ff909116815260200161043c565b34801561061557600080fd5b50610413610624366004613e53565b610e17565b34801561063557600080fd5b50610413610ee5565b34801561064a57600080fd5b50610495600c5481565b34801561066057600080fd5b5061041361066f366004613de3565b610f95565b34801561068057600080fd5b5061049561068f366004613e9a565b6001600160a01b031660009081526004602052604090205490565b3480156106b657600080fd5b50610413611216565b3480156106cb57600080fd5b506104136106da366004613de3565b6112ba565b3480156106eb57600080fd5b506104136106fa366004613eb7565b61138c565b34801561070b57600080fd5b50610495611459565b34801561072057600080fd5b5061049561072f366004613e9a565b60056020526000908152604090205481565b34801561074d57600080fd5b5061041361075c366004613de3565b6114e9565b34801561076d57600080fd5b5061041361077c366004613db7565b61157b565b34801561078d57600080fd5b50610495600b5481565b3480156107a357600080fd5b506006546001600160a01b03166104d7565b3480156107c157600080fd5b506104136107d0366004613e9a565b61163d565b3480156107e157600080fd5b5061042f611700565b3480156107f657600080fd5b50610413610805366004613de3565b61170d565b34801561081657600080fd5b50610413610825366004613e9a565b6117bb565b34801561083657600080fd5b506104957fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b34801561086a57600080fd5b50610413610879366004613e9a565b611956565b34801561088a57600080fd5b50610413610899366004613de3565b611b59565b3480156108aa57600080fd5b506104656108b9366004613db7565b611c07565b3480156108ca57600080fd5b50610413611c14565b3480156108df57600080fd5b50600a546104659060ff1681565b3480156108f957600080fd5b50610413610908366004613de3565b611caf565b34801561091957600080fd5b50610495611cbc565b34801561092e57600080fd5b5061049560095481565b34801561094457600080fd5b506008546104d7906001600160a01b031681565b34801561096457600080fd5b50610495611cfb565b34801561097957600080fd5b50610413610988366004613e9a565b612050565b34801561099957600080fd5b506104d77f000000000000000000000000000000000000000000000000000000000000000081565b3480156109cd57600080fd5b506104136109dc366004613e9a565b61210a565b3480156109ed57600080fd5b506104136109fc366004613ef0565b6121cd565b348015610a0d57600080fd5b506007546104d7906001600160a01b031681565b348015610a2d57600080fd5b50610495610a3c366004613eb7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a7357600080fd5b50610495610a82366004613de3565b6122e0565b348015610a9357600080fd5b506104d7610aa2366004613de3565b612326565b348015610ab357600080fd5b50610495610ac2366004613de3565b612350565b348015610ad357600080fd5b50610495612386565b348015610ae857600080fd5b50610413610af7366004613e9a565b612426565b348015610b0857600080fd5b50600e546104d7906001600160a01b031681565b348015610b2857600080fd5b506104d77f000000000000000000000000000000000000000000000000000000000000000081565b348015610b5c57600080fd5b50610413612558565b60008054610b7290613f5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9e90613f5e565b8015610beb5780601f10610bc057610100808354040283529160200191610beb565b820191906000526020600020905b815481529060010190602001808311610bce57829003601f168201915b505050505081565b6000610c003384846125b3565b50600192915050565b6000610c14826126c1565b92915050565b6001600160a01b038316600081815260036020908152604080832033808552925282205491929091908214801590610c5457506000198114155b15610cca576000610c658583613fae565b6001600160a01b038881166000818152600360209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b610cd58686866126db565b6001925050505b9392505050565b6000610cee82612350565b905060008111610d6b5760405162461bcd60e51b815260206004820152602560248201527f4261736553747261746567793a3a576974686472617720616d6f756e7420746f60448201527f6f206c6f7700000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610d76826127ff565b90506000610d83836126c1565b9050610dc433610d938385613fae565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061289b565b610dce338561291b565b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a250505050565b610e1382826129af565b5050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610ebc57600080fd5b505af1158015610ed0573d6000803e3d6000fd5b50505050610ede33866129af565b5050505050565b6006546001600160a01b03163314610f3f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b600a5460ff1615610f4f57600080fd5b600a805460ff191660019081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906020015b60405180910390a1565b6006546001600160a01b03163314610fef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a9190613fc5565b9050611084612ba7565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f9190613fc5565b90508261111c8383613fae565b10156111b65760405162461bcd60e51b815260206004820152604260248201527f4261736553747261746567793a3a456d657267656e637920776974686472617760448201527f206d696e696d756d2072657475726e20616d6f756e74206e6f7420726561636860648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610d62565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346111df611459565b6002546040805192835260208301919091520160405180910390a1600a5460ff16151560010361121157611211611c14565b505050565b6006546001600160a01b031633146112705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b031633146113145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b6000811161132157600080fd5b604051339082156108fc029083906000818181858888f1935050505015801561134e573d6000803e3d6000fd5b506040805160008152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a150565b6007546001600160a01b031633146113dd5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b60405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b3906044016020604051808303816000875af115801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190613fde565b610e1357600080fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190613fc5565b905090565b6007546001600160a01b0316331461153a5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b60095460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600955565b6006546001600160a01b031633146115d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b600081116115e257600080fd5b6115f66001600160a01b038316338361289b565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2891015b60405180910390a15050565b6006546001600160a01b031633146116975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b600754604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b60018054610b7290613f5e565b6007546001600160a01b0316331461175e5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b612710600b548261176f9190614000565b111561177a57600080fd5b600c5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600c55565b6007546001600160a01b0316331461180c5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b6000805b600d5481101561186357600d818154811061182d5761182d614018565b6000918252602090912001546001600160a01b039081169084160361185157600191505b8061185b8161402e565b915050611810565b5080156118d85760405162461bcd60e51b815260206004820152602860248201527f4261736553747261746567793a3a52657761726420616c726561647920636f6e60448201527f66696775726564210000000000000000000000000000000000000000000000006064820152608401610d62565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0384169081179091556040519081527f1714865bf5baa84e3439536a013c87cfe030b4cd69f344a5f2a4877de3d517ce90602001611631565b6007546001600160a01b031633146119a75760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b6000805b600d54811015611a7757600d81815481106119c8576119c8614018565b6000918252602090912001546001600160a01b0390811690841603611a6557600d8054600193506119fa908490613fae565b81548110611a0a57611a0a614018565b600091825260209091200154600d80546001600160a01b039092169183908110611a3657611a36614018565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611a6f8161402e565b9150506119ab565b5080611aea5760405162461bcd60e51b8152602060048201526024808201527f4261736553747261746567793a3a526577617264206e6f7420636f6e6669677560448201527f72656421000000000000000000000000000000000000000000000000000000006064820152608401610d62565b600d805480611afb57611afb614047565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc9101611631565b6007546001600160a01b03163314611baa5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b612710600c5482611bbb9190614000565b1115611bc657600080fd5b600b5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600b55565b6000610c003384846126db565b6007546001600160a01b03163314611c655760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b600a5460ff16611c7457600080fd5b600a805460ff19169055604051600081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590602001610f8b565b611cb933826129af565b50565b600080611cc7611cfb565b90506009548110611cf357612710600b5482611ce3919061405d565b611ced919061407c565b91505090565b600091505090565b600080611d06612c30565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d949190613fc5565b905060005b8251811015612049576000838281518110611db657611db6614018565b60200260200101516000015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611e2c5747848381518110611e1057611e10614018565b6020026020010151602001818151611e289190614000565b9052505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603611e9557838281518110611e7757611e77614018565b60200260200101516020015183611e8e9190614000565b9250612036565b6001600160a01b03811615612036576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190613fc5565b90506000858481518110611f2557611f25614018565b60200260200101516020015182611f3c9190614000565b9050801561203357600e546040516377ccc49d60e11b8152600481018390526001600160a01b0385811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015611fbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fe691908101906141a6565b9050600181600001515111611ffc576000612025565b8051805161200c90600190613fae565b8151811061201c5761201c614018565b60200260200101515b61202f9087614000565b9550505b50505b50806120418161402e565b915050611d99565b5092915050565b6007546001600160a01b031633146120a15760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610d62565b600e54604080516001600160a01b03928316815291831660208301527f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd910160405180910390a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146121645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b600854604080516001600160a01b03928316815291831660208301527fcc882185e6edeeb762130016ea1faf3d7aa9c01b199bfd646f965b58ab741063910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b4284101561221d5760405162461bcd60e51b815260206004820152600f60248201527f7065726d69743a3a6578706972656400000000000000000000000000000000006044820152606401610d62565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661226a8361402e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506122cb8882868686612e0e565b6122d68888886125b3565b5050505050505050565b6000806122eb611459565b6002549091508015806122fc575081155b1561230957509192915050565b81612314828661405d565b61231e919061407c565b949350505050565b600d818154811061233657600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061235b611459565b60025490915080158061236c575081155b1561237b575060009392505050565b80612314838661405d565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b60006040516123bb91906142bb565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6006546001600160a01b031633146124805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d62565b6001600160a01b0381166124fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d62565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b3233146125a75760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79454f410000000000000000000000006044820152606401610d62565b6125b16000612f6e565b565b6001600160a01b0383166126095760405162461bcd60e51b815260206004820152601c60248201527f5f617070726f76653a3a6f776e6572207a65726f2061646472657373000000006044820152606401610d62565b6001600160a01b03821661265f5760405162461bcd60e51b815260206004820152601e60248201527f5f617070726f76653a3a7370656e646572207a65726f206164647265737300006044820152606401610d62565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000806127106126d1828561405d565b610cdc919061407c565b6001600160a01b0382166127575760405162461bcd60e51b815260206004820152603460248201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260448201527f20746f20746865207a65726f20616464726573730000000000000000000000006064820152608401610d62565b6001600160a01b03831660009081526004602052604090205461277b908290613fae565b6001600160a01b0380851660009081526004602052604080822093909355908416815220546127ab908290614000565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126b49085815260200190565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561287d57600080fd5b505af1158015612891573d6000803e3d6000fd5b5093949350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526112119084906130ce565b6001600160a01b03821660009081526004602052604090205461293f908290613fae565b6001600160a01b038316600090815260046020526040902055600254612966908290613fae565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600a5460ff161515600114612a065760405162461bcd60e51b815260206004820152601f60248201527f4261736553747261746567793a3a4465706f736974732064697361626c6564006044820152606401610d62565b612a106001612f6e565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac09190613fde565b612b325760405162461bcd60e51b815260206004820152602b60248201527f4261736553747261746567793a3a4465706f73697420746f6b656e207472616e60448201527f73666572206661696c65640000000000000000000000000000000000000000006064820152608401610d62565b6000612b3d826126c1565b9050612b5583612b50610a828486613fae565b6131b3565b612b5f8282613289565b826001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c83604051612b9a91815260200190565b60405180910390a2505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d612bde611459565b6040518263ffffffff1660e01b8152600401612bfc91815260200190565b600060405180830381600087803b158015612c1657600080fd5b505af1158015612c2a573d6000803e3d6000fd5b50505050565b600d546060908015801590612cd8575060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ca6d5d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccd9190613d3b565b6001600160a01b0316115b15612e0a5760408051600180825281830190925290816020015b6040805180820190915260008082526020820152815260200190600190039081612cf25790505091506040518060400160405280600d600081548110612d3a57612d3a614018565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632aeaa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190613fc5565b81525082600081518110612dfe57612dfe614018565b60200260200101819052505b5090565b6000612e18612386565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101919091526042810186905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612ebe573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590612ef45750866001600160a01b0316816001600160a01b0316145b612f655760405162461bcd60e51b8152602060048201526024808201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160448201527f74757265000000000000000000000000000000000000000000000000000000006064820152608401610d62565b50505050505050565b6000612f78613309565b905060095481111561308d576000612710600c5483612f97919061405d565b612fa1919061407c565b90508015612fe357600854612fe3906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168361289b565b60008361300a57612710600b5484612ffb919061405d565b613005919061407c565b61300d565b60005b90508015613049576130496001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361289b565b6000613068826130598587613fae565b6130639190613fae565b61367b565b9050801561308957600061307b826126c1565b90506130878282613289565b505b5050505b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346130b6611459565b60025460408051928352602083019190915201611631565b6000613123826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a79092919063ffffffff16565b80519091501561121157808060200190518101906131419190613fde565b6112115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610d62565b600081116132035760405162461bcd60e51b815260206004820152601260248201527f5f6d696e743a3a7a65726f2073686172657300000000000000000000000000006044820152606401610d62565b806002546132119190614000565b6002556001600160a01b038216600090815260046020526040902054613238908290614000565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129a39085815260200190565b600082116132ff5760405162461bcd60e51b815260206004820152602260248201527f4261736553747261746567793a3a5374616b6520616d6f756e7420746f6f206c60448201527f6f770000000000000000000000000000000000000000000000000000000000006064820152608401610d62565b610e1382826137b6565b6000613313613901565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561337a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339e9190613fc5565b600d5490915060005b81811015613673576000600d82815481106133c4576133c4614018565b6000918252602090912001546001600160a01b0390811691507f00000000000000000000000000000000000000000000000000000000000000001681036134ef57478015613481577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561346757600080fd5b505af115801561347b573d6000803e3d6000fd5b50505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036134ed576134e48186614000565b94505050613661565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613536573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355a9190613fc5565b905060008111801561359e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561365e57600e546040516377ccc49d60e11b8152600481018390526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa15801561361d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261364591908101906141a6565b9050613650816139f8565b61365a9087614000565b9550505b50505b8061366b8161402e565b9150506133a7565b509092915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036136da575090565b600e546040516377ccc49d60e11b8152600481018490526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015613774573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261379c91908101906141a6565b9050610cdc816139f8565b606061231e8484600085613ba5565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015613845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138699190613fde565b506040517fb6b55f25000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b6b55f2590602401600060405180830381600087803b1580156138e557600080fd5b505af11580156138f9573d6000803e3d6000fd5b505050505050565b60006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636ca6d5d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561396a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398e9190613d3b565b6001600160a01b031611156125b1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630572b0cc6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c1657600080fd5b80515160009015801590613a3557508151805160009190613a1b90600190613fae565b81518110613a2b57613a2b614018565b6020026020010151115b15613b9d578160400151600081518110613a5157613a51614018565b60200260200101516001600160a01b031663095ea7b3600e60009054906101000a90046001600160a01b03168460000151600081518110613a9457613a94614018565b60200260200101516040518363ffffffff1660e01b8152600401613acd9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015613aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b109190613fde565b50600e546040517f5b2466160000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635b24661690613b5a90859060040161439a565b6020604051808303816000875af1158015613b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c149190613fc5565b506000919050565b606082471015613c1d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610d62565b6001600160a01b0385163b613c745760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610d62565b600080866001600160a01b03168587604051613c909190614434565b60006040518083038185875af1925050503d8060008114613ccd576040519150601f19603f3d011682016040523d82523d6000602084013e613cd2565b606091505b5091509150613ce2828286613ced565b979650505050505050565b60608315613cfc575081610cdc565b825115613d0c5782518084602001fd5b8160405162461bcd60e51b8152600401610d629190613d84565b6001600160a01b0381168114611cb957600080fd5b600060208284031215613d4d57600080fd5b8151610cdc81613d26565b60005b83811015613d73578181015183820152602001613d5b565b83811115612c2a5750506000910152565b6020815260008251806020840152613da3816040850160208701613d58565b601f01601f19169190910160400192915050565b60008060408385031215613dca57600080fd5b8235613dd581613d26565b946020939093013593505050565b600060208284031215613df557600080fd5b5035919050565b600080600060608486031215613e1157600080fd5b8335613e1c81613d26565b92506020840135613e2c81613d26565b929592945050506040919091013590565b803560ff81168114613e4e57600080fd5b919050565b600080600080600060a08688031215613e6b57600080fd5b8535945060208601359350613e8260408701613e3d565b94979396509394606081013594506080013592915050565b600060208284031215613eac57600080fd5b8135610cdc81613d26565b60008060408385031215613eca57600080fd5b8235613ed581613d26565b91506020830135613ee581613d26565b809150509250929050565b600080600080600080600060e0888a031215613f0b57600080fd5b8735613f1681613d26565b96506020880135613f2681613d26565b95506040880135945060608801359350613f4260808901613e3d565b925060a0880135915060c0880135905092959891949750929550565b600181811c90821680613f7257607f821691505b602082108103613f9257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082821015613fc057613fc0613f98565b500390565b600060208284031215613fd757600080fd5b5051919050565b600060208284031215613ff057600080fd5b81518015158114610cdc57600080fd5b6000821982111561401357614013613f98565b500190565b634e487b7160e01b600052603260045260246000fd5b60006001820161404057614040613f98565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600081600019048311821515161561407757614077613f98565b500290565b60008261409957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156140d7576140d761409e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156141065761410661409e565b604052919050565b600067ffffffffffffffff8211156141285761412861409e565b5060051b60200190565b600082601f83011261414357600080fd5b815160206141586141538361410e565b6140dd565b82815260059290921b8401810191818101908684111561417757600080fd5b8286015b8481101561419b57805161418e81613d26565b835291830191830161417b565b509695505050505050565b600060208083850312156141b957600080fd5b825167ffffffffffffffff808211156141d157600080fd5b90840190608082870312156141e557600080fd5b6141ed6140b4565b8251828111156141fc57600080fd5b8301601f8101881361420d57600080fd5b805161421b6141538261410e565b81815260059190911b8201860190868101908a83111561423a57600080fd5b928701925b828410156142585783518252928701929087019061423f565b8452505050828401518281111561426e57600080fd5b61427a88828601614132565b8583015250604083015193508184111561429357600080fd5b61429f87858501614132565b6040820152606083015160608201528094505050505092915050565b600080835481600182811c9150808316806142d757607f831692505b602080841082036142f657634e487b7160e01b86526022600452602486fd5b81801561430a576001811461431b57614348565b60ff19861689528489019650614348565b60008a81526020902060005b868110156143405781548b820152908501908301614327565b505084890196505b509498975050505050505050565b600081518084526020808501945080840160005b8381101561438f5781516001600160a01b03168752958201959082019060010161436a565b509495945050505050565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b808310156143df57835182529284019260019290920191908401906143bf565b50838701519350601f199250828682030160408701526143ff8185614356565b9350505060408501518185840301606086015261441c8382614356565b92505050606084015160808401528091505092915050565b60008251614446818460208701613d58565b919091019291505056fea26469706673582212204ea145b8078899a0c3cd68ccad946a4f7b237dc6a9de84b600a307369d8f4e8364736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000d7feb276ba254cd9b34804a986ce9a8c3e359148000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000959a0af5a46f76aa37317bc417d48b445658b18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e44000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e440000000000000000000000002d580f9cf2fb2d09bc411532988f2afda4e7beff00000000000000000000000049d5c2bdffac6ce2bfdb6640f4f80f226bc10bab000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c5969656c642059616b3a2044656c74615072696d6520574554482e6500000000