Loading
[ { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_tvlCap", "type": "uint256" }, { "internalType": "address", "name": "_treasury", "type": "address" }, { "internalType": "address[]", "name": "_strategists", "type": "address[]" }, { "internalType": "address[]", "name": "_multisigRoles", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": 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": "bool", "name": "active", "type": "bool" } ], "name": "EmergencyShutdown", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "InCaseTokensGetStuckCalled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "degradation", "type": "uint256" } ], "name": "LockedProfitDegradationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "feeBPS", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "allocBPS", "type": "uint256" } ], "name": "StrategyAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "allocBPS", "type": "uint256" } ], "name": "StrategyAllocBPSUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "feeBPS", "type": "uint256" } ], "name": "StrategyFeeBPSUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "gain", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "loss", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "debtPaid", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "gains", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "losses", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "allocated", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "allocationAdded", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "allocBPS", "type": "uint256" } ], "name": "StrategyReported", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" } ], "name": "StrategyRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTvlCap", "type": "uint256" } ], "name": "TvlCapUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "withdrawalQueue", "type": "address[]" } ], "name": "UpdateWithdrawalQueue", "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": false, "internalType": "uint256", "name": "withdrawMaxLoss", "type": "uint256" } ], "name": "WithdrawMaxLossUpdated", "type": "event" }, { "inputs": [], "name": "ADMIN", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEGRADATION_COEFFICIENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "GUARDIAN", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERCENT_DIVISOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STRATEGIST", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_strategy", "type": "address" }, { "internalType": "uint256", "name": "_feeBPS", "type": "uint256" }, { "internalType": "uint256", "name": "_allocBPS", "type": "uint256" } ], "name": "addStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "assetTokenAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "availableCapital", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "balance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "constructionTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "emergencyShutdown", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPricePerFullShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "inCaseTokensGetStuck", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "injectTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastReport", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockedProfit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockedProfitDegradation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "maxAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "maxAssets", "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": "assets", "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": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "shares", "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": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeTvlCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "_roi", "type": "int256" }, { "internalType": "uint256", "name": "_repayment", "type": "uint256" } ], "name": "report", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_strategy", "type": "address" } ], "name": "revokeStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_active", "type": "bool" } ], "name": "setEmergencyShutdown", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "degradation", "type": "uint256" } ], "name": "setLockedProfitDegradation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_withdrawalQueue", "type": "address[]" } ], "name": "setWithdrawalQueue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "strategies", "outputs": [ { "internalType": "uint256", "name": "activation", "type": "uint256" }, { "internalType": "uint256", "name": "feeBPS", "type": "uint256" }, { "internalType": "uint256", "name": "allocBPS", "type": "uint256" }, { "internalType": "uint256", "name": "allocated", "type": "uint256" }, { "internalType": "uint256", "name": "gains", "type": "uint256" }, { "internalType": "uint256", "name": "losses", "type": "uint256" }, { "internalType": "uint256", "name": "lastReport", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "contract IERC20Metadata", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAllocBPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAllocated", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "totalManagedAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalIdle", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "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": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tvlCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_strategy", "type": "address" }, { "internalType": "uint256", "name": "_allocBPS", "type": "uint256" } ], "name": "updateStrategyAllocBPS", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_strategy", "type": "address" }, { "internalType": "uint256", "name": "_feeBPS", "type": "uint256" } ], "name": "updateStrategyFeeBPS", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newTreasury", "type": "address" } ], "name": "updateTreasury", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newTvlCap", "type": "uint256" } ], "name": "updateTvlCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_withdrawMaxLoss", "type": "uint256" } ], "name": "updateWithdrawMaxLoss", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "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": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawMaxLoss", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "withdrawalQueue", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60c060405260016010553480156200001657600080fd5b5060405162004e2838038062004e288339810160408190526200003991620004d7565b86868686868686858560036200005083826200064e565b5060046200005f82826200064e565b50506001600755506001600160a01b0387811660a052426080819052600e55600a859055601380546001600160a01b031916918516919091179055620f4240620000b3670de0b6b3a7640000602e6200071a565b620000bf919062000740565b601155815160005b818110156200013c576200011e7fb17d0a42cc710456bf9c3efb785dcd0cb93a0ac358113307b5c64b285b516b5c8583815181106200010a576200010a62000763565b6020026020010151620001f360201b60201c565b62000134816200023660201b620026181760201c565b9050620000c7565b506200014a600033620001f3565b620001686000801b836000815181106200010a576200010a62000763565b620001a37fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42836001815181106200010a576200010a62000763565b620001de7f8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe8836002815181106200010a576200010a62000763565b50505050505050505050505050505062000779565b6200020a82826200023c60201b6200261e1760201c565b600082815260066020908152604090912062000231918390620026a4620002e1821b17901c565b505050565b60010190565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16620002dd5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200029c3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620002f8836001600160a01b03841662000301565b90505b92915050565b60008181526001830160205260408120546200034a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002fb565b506000620002fb565b80516001600160a01b03811681146200036b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003b157620003b162000370565b604052919050565b600082601f830112620003cb57600080fd5b81516001600160401b03811115620003e757620003e762000370565b6020620003fd601f8301601f1916820162000386565b82815285828487010111156200041257600080fd5b60005b838110156200043257858101830151828201840152820162000415565b506000928101909101919091529392505050565b600082601f8301126200045857600080fd5b815160206001600160401b0382111562000476576200047662000370565b8160051b6200048782820162000386565b9283528481018201928281019087851115620004a257600080fd5b83870192505b84831015620004cc57620004bc8362000353565b82529183019190830190620004a8565b979650505050505050565b600080600080600080600060e0888a031215620004f357600080fd5b620004fe8862000353565b60208901519097506001600160401b03808211156200051c57600080fd5b6200052a8b838c01620003b9565b975060408a01519150808211156200054157600080fd5b6200054f8b838c01620003b9565b965060608a015195506200056660808b0162000353565b945060a08a01519150808211156200057d57600080fd5b6200058b8b838c0162000446565b935060c08a0151915080821115620005a257600080fd5b50620005b18a828b0162000446565b91505092959891949750929550565b600181811c90821680620005d557607f821691505b602082108103620005f657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023157600081815260208120601f850160051c81016020861015620006255750805b601f850160051c820191505b81811015620006465782815560010162000631565b505050505050565b81516001600160401b038111156200066a576200066a62000370565b62000682816200067b8454620005c0565b84620005fc565b602080601f831160018114620006ba5760008415620006a15750858301515b600019600386901b1c1916600185901b17855562000646565b600085815260208120601f198616915b82811015620006eb57888601518255948401946001909101908401620006ca565b50858210156200070a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417620002fb57634e487b7160e01b600052601160045260246000fd5b6000826200075e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60805160a051614635620007f3600039600081816105f701528181610a1e01528181610e8201528181610f12015281816112f30152818161135b01528181611fc9015281816120c8015281816123d901528181612f9a015281816130a80152818161328e01526134c7015260006109e401526146356000f3fe608060405234801561001057600080fd5b50600436106104535760003560e01c8063724c184c11610241578063b6b55f251161013b578063d250f088116100c3578063def68a9c11610087578063def68a9c146109b9578063ef8b30f7146109cc578063f06c5610146109df578063fa34d61114610a06578063fc0c546a14610a1957600080fd5b8063d250f08814610969578063d547741f14610978578063d905777e1461098b578063dd62ed3e1461099e578063de5f6268146109b157600080fd5b8063c63d75b61161010a578063c63d75b61461090a578063c6e6f5921461091d578063c822adda14610930578063ca15c87314610943578063ce96cb771461095657600080fd5b8063b6b55f25146108c8578063ba087652146108db578063bb994d48146108ee578063c3535b521461090157600080fd5b806395d89b41116101c9578063a9059cbb1161018d578063a9059cbb14610874578063ac579b7714610887578063b3d7f6b91461089a578063b460af94146108ad578063b69ef8a8146108c057600080fd5b806395d89b41146108335780639aa7df941461083b5780639cfdede314610844578063a217fddf14610859578063a457c2d71461086157600080fd5b80637f51bb1f116102105780637f51bb1f146107df578063853828b6146107f25780639010d07c146107fa57806391d148541461080d57806394bf804d1461082057600080fd5b8063724c184c1461079c57806377c7b8fc146107b15780637a550365146107b95780637d6205be146107cc57600080fd5b80633403c2fc1161035257806345f7f249116102da5780635f3d3a0e1161029e5780635f3d3a0e1461073157806361d027b3146107445780636e553f65146107575780636f9c94a81461076a57806370a082311461077357600080fd5b806345f7f249146106f0578063462f82f4146106f9578063483b60311461070c5780634870dd9a146107155780634cdad5061461071e57600080fd5b806339ebf8231161032157806339ebf823146106425780633f23fa1a146106c2578063402d267d146106cb57806342232716146106de57806344b81396146106e757600080fd5b80633403c2fc146105d557806336568abe146105e257806338d52e0f146105f5578063395093511461062f57600080fd5b806318160ddd116103e05780632a0acc6a116103a45780632a0acc6a1461056d5780632b3b0693146105825780632e1a7d4d146105955780632f2ff15d146105a8578063313ce567146105bb57600080fd5b806318160ddd1461051f578063199cb7d81461052757806323b872dd1461052f578063248a9ca31461054257806329b9d6941461056557600080fd5b806307a2d13a1161042757806307a2d13a146104c0578063095ea7b3146104d35780630a28a477146104e65780630f3d249d146104f957806314c644021461050c57600080fd5b8062272d811461045857806301e1d1141461046d57806301ffc9a71461048857806306fdde03146104ab575b600080fd5b61046b610466366004613ef7565b610a40565b005b610475610a93565b6040519081526020015b60405180910390f35b61049b610496366004613f10565b610aa2565b604051901515815260200161047f565b6104b3610acd565b60405161047f9190613f5e565b6104756104ce366004613ef7565b610b5f565b61049b6104e1366004613fa6565b610b94565b6104756104f4366004613ef7565b610bac565b610475610507366004613fd2565b610bf8565b61046b61051a366004614002565b6110c9565b600254610475565b610475611143565b61049b61053d36600461401f565b611291565b610475610550366004613ef7565b60009081526005602052604090206001015490565b61046b6112b7565b6104756000805160206145c083398151915281565b61046b610590366004613ef7565b6112c4565b61046b6105a3366004613ef7565b61131e565b61046b6105b6366004614060565b61132d565b6105c3611357565b60405160ff909116815260200161047f565b600f5461049b9060ff1681565b61046b6105f0366004614060565b6113db565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b03909116815260200161047f565b61049b61063d366004613fa6565b611455565b61068d610650366004614090565b6008602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e00161047f565b610475600a5481565b6104756106d9366004614090565b611477565b61047560115481565b61047560125481565b610475600d5481565b61046b610707366004613ef7565b6114ca565b61047560105481565b61047561271081565b61047561072c366004613ef7565b61155c565b61046b61073f366004613fa6565b611567565b601354610617906001600160a01b031681565b610475610765366004614060565b6116cf565b610475600c5481565b610475610781366004614090565b6001600160a01b031660009081526020819052604090205490565b6104756000805160206145a083398151915281565b6104756116db565b61046b6107c7366004613ef7565b611730565b61046b6107da366004613fa6565b6117e0565b61046b6107ed366004614090565b6118e6565b61046b61195a565b610617610808366004613fd2565b611974565b61049b61081b366004614060565b61198c565b61047561082e366004614060565b6119b7565b6104b36119d5565b610475600b5481565b6104756000805160206145e083398151915281565b610475600081565b61049b61086f366004613fa6565b6119e4565b61049b610882366004613fa6565b611a6a565b61046b6108953660046140ad565b611a78565b6104756108a8366004613ef7565b611bf5565b6104756108bb366004614122565b611c28565b610475611cb3565b61046b6108d6366004613ef7565b611cc5565b6104756108e9366004614122565b611ccf565b61046b6108fc366004614090565b611d8d565b610475600e5481565b610475610918366004614090565b611e54565b61047561092b366004613ef7565b611eaa565b61061761093e366004613ef7565b611edf565b610475610951366004613ef7565b611f09565b610475610964366004614090565b611f20565b610475670de0b6b3a764000081565b61046b610986366004614060565b611f42565b610475610999366004614090565b611f67565b6104756109ac366004614164565b611f85565b61046b611fb0565b61046b6109c7366004614090565b612042565b6104756109da366004613ef7565b6121a7565b6104757f000000000000000000000000000000000000000000000000000000000000000081565b61046b610a14366004614192565b6121b2565b6106177f000000000000000000000000000000000000000000000000000000000000000081565b610a576000805160206145c08339815191526126b9565b600a8190556040518181527f2923cecec41b7140eaf657a035af4abb23ed61d16b1fc20a986838eb3ad99bd0906020015b60405180910390a150565b6000610a9d611cb3565b905090565b60006001600160e01b03198216635a05180f60e01b1480610ac75750610ac782612790565b92915050565b606060038054610adc906141c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b08906141c7565b8015610b555780601f10610b2a57610100808354040283529160200191610b55565b820191906000526020600020905b815481529060010190602001808311610b3857829003601f168201915b5050505050905090565b6000610b6a60025490565b600003610b75575090565b600254610b806127c5565b610b8a9084614217565b610ac79190614244565b600033610ba28185856127e1565b5060019392505050565b6000610bb760025490565b1580610bc85750610bc66127c5565b155b15610bd557506000919050565b610ac7610be160025490565b610beb9084614217565b610bf36127c5565b612905565b6000610c5960405180610140016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b3380825260009081526008602052604081208054909103610cb95760405162461bcd60e51b8152602060048201526015602482015274556e617574686f72697a656420737472617465677960581b60448201526064015b60405180910390fd5b6000851215610ce257610ccb85614258565b602083018190528251610cdd91612977565b610d22565b6000851315610d2257604082018590528151610cfe9086612abe565b60608301526040820151600482018054600090610d1c908490614274565b90915550505b610d2a611143565b6080830181905260001315610dbc578160800151610d4790614258565b60a08301819052610d589085612b57565b60e0830181905215610db7578160e00151816003016000828254610d7c9190614287565b909155505060e0820151600d8054600090610d98908490614287565b909155505060e082015160a083018051610db3908390614287565b9052505b610e0b565b600082608001511315610e0b57608082015160c08301819052600382018054600090610de9908490614274565b909155505060c0820151600d8054600090610e05908490614274565b90915550505b8160e001518260400151610e1f9190614274565b610100830181905260c08301511115610eae578161010001518260c00151610e479190614287565b600b6000828254610e589190614287565b9091555050815161010083015160c0840151610ea99291610e7891614287565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190612b6d565b610f3a565b8161010001518260c001511015610f3a578160c00151826101000151610ed49190614287565b600b6000828254610ee59190614274565b9091555050815160c0830151610100840151610f3a92913091610f089190614287565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190612bd0565b81606001518260400151610f4c612c0e565b610f569190614274565b610f609190614287565b610120830181905260208301511015610f90578160200151826101200151610f889190614287565b601255610f96565b60006012555b4260068201819055600e55815160408084015160208086015160e0808801516004880154600589015460038a015460c0808d015160028d01548b519a8b52988a0197909752888a01949094526060880192909252608087015260a086015284019190915282015290516001600160a01b03909216917f67f96d2854a335a4cadb49f84fd3ca6f990744ddb3feceeb4b349d2d53d32ad3918190036101000190a2600281015415806110495750600f5460ff165b156110bd5781600001516001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b4919061429a565b92505050610ac7565b5060a001519392505050565b80156110eb576110e66000805160206145a08339815191526126b9565b611102565b6111026000805160206145c08339815191526126b9565b600f805460ff19168215159081179091556040519081527fba40372a3a724dca3c57156128ef1e896724b65b37a17f190b1ad5de68f3a4f390602001610a88565b600c54600090339015806111595750600f5460ff165b15611189576001600160a01b03811660009081526008602052604090206003015461118390614258565b91505090565b6000612710611196611cb3565b6001600160a01b0384166000908152600860205260409020600201546111bc9190614217565b6111c69190614244565b6001600160a01b03831660009081526008602052604090206003015490915081811115611208576111f78282614287565b61120090614258565b935050505090565b8181101561128757600061271061121d611cb3565b600c5461122a9190614217565b6112349190614244565b600d5490915081811061124d5760009550505050505090565b60006112598486614287565b905061126e816112698486614287565b612b57565b905061127c81600b54612b57565b979650505050505050565b6000935050505090565b60003361129f858285612c74565b6112aa858585612ce8565b60019150505b9392505050565b6112c2600019610a40565b565b6112ce60006126b9565b80600b60008282546112e09190614274565b9091555061131b90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612bd0565b50565b611329813333612e8c565b5050565b6000828152600560205260409020600101546113488161330b565b6113528383613315565b505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9d91906142b3565b6001600160a01b038116331461144b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cb0565b6113298282613337565b600033610ba28185856114688383611f85565b6114729190614274565b6127e1565b600f5460009060ff16806114945750600a54611491611cb3565b10155b156114a157506000919050565b600019600a54036114b55750600019919050565b6114bd611cb3565b600a54610ac79190614287565b6114e16000805160206145e08339815191526126b9565b6127108111156115275760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964204250532076616c756560781b6044820152606401610cb0565b60108190556040518181527f23e1382e62459214e4b3240fe95817b36865752f45f7569957018fe5a105f7b590602001610a88565b6000610ac782610b5f565b6001600160a01b038216600090815260086020526040812054900361159e5760405162461bcd60e51b8152600401610cb0906142d6565b6001600160a01b03821660009081526008602052604090206002015480156115dc576115d76000805160206145e08339815191526126b9565b6115f3565b6115f36000805160206145c08339815191526126b9565b80600c60008282546116059190614287565b90915550506001600160a01b0383166000908152600860205260408120600201839055600c805484929061163a908490614274565b9091555050600c5461271010156116875760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964204250532076616c756560781b6044820152606401610cb0565b826001600160a01b03167f437afd93b1abdad7ff741b69dde7efdd15dba7fb6999ba3471db17fd029dced9836040516116c291815260200190565b60405180910390a2505050565b60006112b08383613359565b60006116e660025490565b1561171d576002546116f6611357565b61170190600a6143f1565b6117096127c5565b6117139190614217565b610a9d9190614244565b611725611357565b610a9d90600a6143f1565b6117476000805160206145c08339815191526126b9565b670de0b6b3a76400008111156117ab5760405162461bcd60e51b8152602060048201526024808201527f4465677261646174696f6e2063616e6e6f74206265206d6f7265207468616e206044820152633130302560e01b6064820152608401610cb0565b60118190556040518181527f056863905a721211fc4dda1d688efc8f120b4b689d2e41da8249cf6eff20069190602001610a88565b6117f76000805160206145c08339815191526126b9565b6001600160a01b038216600090815260086020526040812054900361182e5760405162461bcd60e51b8152600401610cb0906142d6565b61183b6005612710614244565b81111561188a5760405162461bcd60e51b815260206004820181905260248201527f4665652063616e6e6f7420626520686967686572207468616e203230204250536044820152606401610cb0565b6001600160a01b03821660008181526008602052604090819020600101839055517f8281ff4064168f20aa9abde7f62b8b72efb10b48e7e838af54dcabff3131474a906118da9084815260200190565b60405180910390a25050565b6118f060006126b9565b6001600160a01b0381166119385760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610cb0565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526020819052604090205461131b9180612e8c565b60008281526006602052604081206112b09083613540565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006119c283611bf5565b90506119ce8183613359565b5092915050565b606060048054610adc906141c7565b600033816119f28286611f85565b905083811015611a525760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610cb0565b611a5f82868684036127e1565b506001949350505050565b600033610ba2818585612ce8565b611a8f6000805160206145c08339815191526126b9565b806000819003611ae15760405162461bcd60e51b815260206004820152601760248201527f5175657565206d757374206e6f7420626520656d7074790000000000000000006044820152606401610cb0565b611aed60096000613ec5565b60005b81811015611bb6576000848483818110611b0c57611b0c614400565b9050602002016020810190611b219190614090565b6001600160a01b03811660009081526008602052604081208054929350919003611b5d5760405162461bcd60e51b8152600401610cb0906142d6565b5060098054600180820183556000929092527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b03939093169290921790915501611af0565b507fe159a1b5cb3e0bbe2f0caa53bcf2cd9ea0bc25a8c7b8302b1ac510f29cac8baa8383604051611be8929190614416565b60405180910390a1505050565b6000611c0060025490565b600003611c0b575090565b610ac7611c166127c5565b611c209084614217565b600254612905565b6000611c3384610bac565b9050336001600160a01b03831614611c5057611c50823383612c74565b83611c5c828585612e8c565b146112b05760405162461bcd60e51b815260206004820152602160248201527f416c6c2061737365747320636f756c64206e6f742062652077697468647261776044820152603760f91b6064820152608401610cb0565b6000600d54600b54610a9d9190614274565b6113298133613359565b6001600160a01b03811660008181526020819052604081205490913314611cfb57611cfb833387612c74565b611d06858585612e8c565b91506000611d29846001600160a01b031660009081526020819052604090205490565b611d339083614287565b9050858114611d845760405162461bcd60e51b815260206004820181905260248201527f416c6c2073686172657320636f756c64206e6f742062652072656465656d65646044820152606401610cb0565b50509392505050565b336001600160a01b03821614611db457611db46000805160206145a08339815191526126b9565b6001600160a01b0381166000908152600860205260408120600201549003611dd95750565b6001600160a01b038116600090815260086020526040812060020154600c805491929091611e08908490614287565b90915550506001600160a01b038116600081815260086020526040808220600201829055517f4201c688d84c01154d321afa0c72f1bffe9eef53005c9de9d035074e71e9b32a9190a250565b600f5460009060ff1680611e715750600a54611e6e611cb3565b10155b15611e7e57506000919050565b600019600a5403611e925750600019919050565b610ac7611e9d611cb3565b600a5461092b9190614287565b6000611eb560025490565b1580611ec65750611ec46127c5565b155b15611ecf575090565b611ed76127c5565b600254610b80565b60098181548110611eef57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000818152600660205260408120610ac79061354c565b6001600160a01b038116600090815260208190526040812054610ac790610b5f565b600082815260056020526040902060010154611f5d8161330b565b6113528383613337565b6001600160a01b038116600090815260208190526040812054610ac7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6040516370a0823160e01b815233600482015261131b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203c919061429a565b33613359565b6120596000805160206145c08339815191526126b9565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c4919061429a565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361210f57600b5461210c9082614287565b90505b8060000361214d5760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610cb0565b6121616001600160a01b0383163383612b6d565b604080516001600160a01b0384168152602081018390527f741ee845808813887c0b0d54aa20a3d0f670bebce7b6a1face577afbc00d1d6c910160405180910390a15050565b6000610ac782611eaa565b6121bc60006126b9565b600f5460ff16156122255760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f742061646420737472617465677920647572696e6720656d65726760448201526c32b731bc9039b43aba3237bbb760991b6064820152608401610cb0565b6001600160a01b03831661224b5760405162461bcd60e51b8152600401610cb0906142d6565b6001600160a01b038316600090815260086020526040902054156122aa5760405162461bcd60e51b815260206004820152601660248201527514dd1c985d1959de48185b1c9958591e48185919195960521b6044820152606401610cb0565b826001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c9190614464565b6001600160a01b0316306001600160a01b03161461236c5760405162461bcd60e51b815260206004820152601f60248201527f53747261746567792773207661756c7420646f6573206e6f74206d61746368006044820152606401610cb0565b826001600160a01b0316631f1fcd516040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ce9190614464565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461244e5760405162461bcd60e51b815260206004820152601e60248201527f537472617465677927732077616e7420646f6573206e6f74206d6174636800006044820152606401610cb0565b61245b6005612710614244565b8211156124aa5760405162461bcd60e51b815260206004820181905260248201527f4665652063616e6e6f7420626520686967686572207468616e203230204250536044820152606401610cb0565b612710600c54826124bb9190614274565b11156125025760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420616c6c6f634250532076616c756560501b6044820152606401610cb0565b6040805160e0810182524280825260208083018681528385018681526000606086018181526080870182815260a0880183815260c089019788526001600160a01b038d1684526008909652978220965187559251600187015590516002860155905160038501559351600484015551600583015551600690910155600c805483929061258f908490614274565b9091555050600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319166001600160a01b03851690811790915560408051848152602081018490527f45bb3eed5cd098efb0a286413fb1f3c11841762610cefbabae6a772963e916ba91016116c2565b60010190565b612628828261198c565b6113295760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556126603390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006112b0836001600160a01b038416613556565b60006126c36135a5565b8051909150600080805b8381101561273c578115801561270157506127018582815181106126f3576126f3614400565b60200260200101513361367d565b1561270b57600191505b84818151811061271d5761271d614400565b60200260200101518603612734576001925061273c565b6001016126cd565b508180156127475750805b6127895760405162461bcd60e51b8152602060048201526013602482015272556e617574686f72697a65642061636365737360681b6044820152606401610cb0565b5050505050565b60006001600160e01b03198216637965db0b60e01b1480610ac757506301ffc9a760e01b6001600160e01b0319831614610ac7565b60006127cf612c0e565b6127d7611cb3565b610a9d9190614287565b6001600160a01b0383166128435760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cb0565b6001600160a01b0382166128a45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cb0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000816000036129475760405162461bcd60e51b815260206004820152600d60248201526c04469766973696f6e206279203609c1b6044820152606401610cb0565b60006129538385614244565b905061295f8385614481565b156112b0578061296e81614495565b95945050505050565b6001600160a01b03821660009081526008602052604090206003810154808311156129fc5760405162461bcd60e51b815260206004820152602f60248201527f5374726174656779206c6f73732063616e6e6f7420626520677265617465722060448201526e3a3430b71030b63637b1b0ba34b7b760891b6064820152608401610cb0565b600c5415612a6b576000612a2e600d54600c5486612a1a9190614217565b612a249190614244565b8460020154612b57565b90508015612a695780836002016000828254612a4a9190614287565b9250508190555080600c6000828254612a639190614287565b90915550505b505b82826005016000828254612a7f9190614274565b9250508190555082826003016000828254612a9a9190614287565b9250508190555082600d6000828254612ab39190614287565b909155505050505050565b6001600160a01b038216600090815260086020526040812060010154819061271090612aea9085614217565b612af49190614244565b905080156112b0576000612b0760025490565b905060008115612b3257612b196127c5565b612b238385614217565b612b2d9190614244565b612b34565b825b601354909150612b4d906001600160a01b031682613689565b5050905092915050565b6000818310612b6657816112b0565b5090919050565b6040516001600160a01b03831660248201526044810182905261135290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613748565b6040516001600160a01b0380851660248301528316604482015260648101829052612c089085906323b872dd60e01b90608401612b99565b50505050565b600080601154600e5442612c229190614287565b612c2c9190614217565b9050670de0b6b3a7640000811015612c6c57670de0b6b3a764000060125482612c559190614217565b612c5f9190614244565b6012546111839190614287565b600091505090565b6000612c808484611f85565b90506000198114612c085781811015612cdb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cb0565b612c0884848484036127e1565b6001600160a01b038316612d4c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cb0565b6001600160a01b038216612dae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cb0565b6001600160a01b03831660009081526020819052604090205481811015612e265760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610cb0565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612c08565b6000612e9661381a565b83600003612ed75760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610cb0565b60025484612ee36127c5565b612eed9190614217565b612ef79190614244565b600b549091508082111561325f57600954600090815b818110156131ab57838511156131ab57600060098281548110612f3257612f32614400565b60009182526020808320909101546001600160a01b03168083526008909152604082206003015490925090819003612f6b5750506131a3565b6000612f778789614287565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612fe1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613005919061429a565b90506000846001600160a01b0316632e1a7d4d6130228587612b57565b6040518263ffffffff1660e01b815260040161304091815260200190565b6020604051808303816000875af115801561305f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613083919061429a565b6040516370a0823160e01b815230600482015290915060009083906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156130ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613113919061429a565b61311d9190614287565b9050613129818b614274565b995081156131535761313b828c614287565b9a50613147828a614274565b98506131538683612977565b6001600160a01b0386166000908152600860205260408120600301805483929061317e908490614287565b9250508190555080600d60008282546131979190614287565b90915550505050505050505b600101612f0d565b50600b839055828411156131e8578293506131c46127c5565b6002546131d18487614274565b6131db9190614217565b6131e59190614244565b96505b601054612710906131f98487614274565b6132039190614217565b61320d9190614244565b82111561325c5760405162461bcd60e51b815260206004820152601e60248201527f5769746864726177206c6f7373206578636565647320736c69707061676500006044820152606401610cb0565b50505b6132698386613873565b81600b600082825461327b9190614287565b909155506132b590506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168584612b6d565b60408051838152602081018790526001600160a01b03808616929087169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a4506112b06001600755565b61131b81336139a5565b61331f828261261e565b600082815260066020526040902061135290826126a4565b61334182826139fe565b60008281526006602052604090206113529082613a65565b600061336361381a565b600f5460ff16156133c75760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f74206465706f73697420647572696e6720656d657267656e63792060448201526739b43aba3237bbb760c11b6064820152608401610cb0565b826000036134085760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606401610cb0565b600a5483613414611cb3565b61341e9190614274565b111561345c5760405162461bcd60e51b815260206004820152600d60248201526c15985d5b1d081a5cc8199d5b1b609a1b6044820152606401610cb0565b600061346760025490565b90508060000361347957839150613498565b6134816127c5565b61348b8286614217565b6134959190614244565b91505b6134a28383613689565b83600b60008282546134b49190614274565b909155506134ef90506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087612bd0565b60408051858152602081018490526001600160a01b0385169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a350610ac76001600755565b60006112b08383613a7a565b6000610ac7825490565b600081815260018301602052604081205461359d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ac7565b506000610ac7565b60408051600480825260a0820190925260609160009190602082016080803683370190505090506000801b816000815181106135e3576135e3614400565b6020026020010181815250506000805160206145c08339815191528160018151811061361157613611614400565b6020026020010181815250506000805160206145a08339815191528160028151811061363f5761363f614400565b6020026020010181815250506000805160206145e08339815191528160038151811061366d5761366d614400565b6020908102919091010152919050565b60006112b0838361198c565b6001600160a01b0382166136df5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610cb0565b80600260008282546136f19190614274565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600061379d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613aa49092919063ffffffff16565b80519091501561135257808060200190518101906137bb91906144c4565b6113525760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610cb0565b60026007540361386c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cb0565b6002600755565b6001600160a01b0382166138d35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610cb0565b6001600160a01b038216600090815260208190526040902054818110156139475760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610cb0565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6139af828261198c565b611329576139bc81613abb565b6139c7836020613acd565b6040516020016139d89291906144e1565b60408051601f198184030181529082905262461bcd60e51b8252610cb091600401613f5e565b613a08828261198c565b156113295760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006112b0836001600160a01b038416613c69565b6000826000018281548110613a9157613a91614400565b9060005260206000200154905092915050565b6060613ab38484600085613d5c565b949350505050565b6060610ac76001600160a01b03831660145b60606000613adc836002614217565b613ae7906002614274565b67ffffffffffffffff811115613aff57613aff6144ae565b6040519080825280601f01601f191660200182016040528015613b29576020820181803683370190505b509050600360fc1b81600081518110613b4457613b44614400565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613b7357613b73614400565b60200101906001600160f81b031916908160001a9053506000613b97846002614217565b613ba2906001614274565b90505b6001811115613c1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613bd657613bd6614400565b1a60f81b828281518110613bec57613bec614400565b60200101906001600160f81b031916908160001a90535060049490941c93613c1381614556565b9050613ba5565b5083156112b05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cb0565b60008181526001830160205260408120548015613d52576000613c8d600183614287565b8554909150600090613ca190600190614287565b9050818114613d06576000866000018281548110613cc157613cc1614400565b9060005260206000200154905080876000018481548110613ce457613ce4614400565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d1757613d1761456d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ac7565b6000915050610ac7565b606082471015613dbd5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610cb0565b600080866001600160a01b03168587604051613dd99190614583565b60006040518083038185875af1925050503d8060008114613e16576040519150601f19603f3d011682016040523d82523d6000602084013e613e1b565b606091505b509150915061127c8783838760608315613e96578251600003613e8f576001600160a01b0385163b613e8f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610cb0565b5081613ab3565b613ab38383815115613eab5781518083602001fd5b8060405162461bcd60e51b8152600401610cb09190613f5e565b508054600082559060005260206000209081019061131b91905b80821115613ef35760008155600101613edf565b5090565b600060208284031215613f0957600080fd5b5035919050565b600060208284031215613f2257600080fd5b81356001600160e01b0319811681146112b057600080fd5b60005b83811015613f55578181015183820152602001613f3d565b50506000910152565b6020815260008251806020840152613f7d816040850160208701613f3a565b601f01601f19169190910160400192915050565b6001600160a01b038116811461131b57600080fd5b60008060408385031215613fb957600080fd5b8235613fc481613f91565b946020939093013593505050565b60008060408385031215613fe557600080fd5b50508035926020909101359150565b801515811461131b57600080fd5b60006020828403121561401457600080fd5b81356112b081613ff4565b60008060006060848603121561403457600080fd5b833561403f81613f91565b9250602084013561404f81613f91565b929592945050506040919091013590565b6000806040838503121561407357600080fd5b82359150602083013561408581613f91565b809150509250929050565b6000602082840312156140a257600080fd5b81356112b081613f91565b600080602083850312156140c057600080fd5b823567ffffffffffffffff808211156140d857600080fd5b818501915085601f8301126140ec57600080fd5b8135818111156140fb57600080fd5b8660208260051b850101111561411057600080fd5b60209290920196919550909350505050565b60008060006060848603121561413757600080fd5b83359250602084013561414981613f91565b9150604084013561415981613f91565b809150509250925092565b6000806040838503121561417757600080fd5b823561418281613f91565b9150602083013561408581613f91565b6000806000606084860312156141a757600080fd5b83356141b281613f91565b95602085013595506040909401359392505050565b600181811c908216806141db57607f821691505b6020821081036141fb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ac757610ac7614201565b634e487b7160e01b600052601260045260246000fd5b6000826142535761425361422e565b500490565b6000600160ff1b820161426d5761426d614201565b5060000390565b80820180821115610ac757610ac7614201565b81810381811115610ac757610ac7614201565b6000602082840312156142ac57600080fd5b5051919050565b6000602082840312156142c557600080fd5b815160ff811681146112b057600080fd5b60208082526018908201527f496e76616c696420737472617465677920616464726573730000000000000000604082015260600190565b600181815b8085111561434857816000190482111561432e5761432e614201565b8085161561433b57918102915b93841c9390800290614312565b509250929050565b60008261435f57506001610ac7565b8161436c57506000610ac7565b8160018114614382576002811461438c576143a8565b6001915050610ac7565b60ff84111561439d5761439d614201565b50506001821b610ac7565b5060208310610133831016604e8410600b84101617156143cb575081810a610ac7565b6143d5838361430d565b80600019048211156143e9576143e9614201565b029392505050565b60006112b060ff841683614350565b634e487b7160e01b600052603260045260246000fd5b60208082528181018390526000908460408401835b8681101561445957823561443e81613f91565b6001600160a01b03168252918301919083019060010161442b565b509695505050505050565b60006020828403121561447657600080fd5b81516112b081613f91565b6000826144905761449061422e565b500690565b6000600182016144a7576144a7614201565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156144d657600080fd5b81516112b081613ff4565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614519816017850160208801613f3a565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161454a816028840160208801613f3a565b01602801949350505050565b60008161456557614565614201565b506000190190565b634e487b7160e01b600052603160045260246000fd5b60008251614595818460208701613f3a565b919091019291505056fe8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe8df8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42b17d0a42cc710456bf9c3efb785dcd0cb93a0ac358113307b5c64b285b516b5ca2646970667358221220ffb098d7e998874e0c0908759e966814aa82a1aa0eb91d542db11e5fc1aefccc64736f6c63430008120033000000000000000000000000420000000000000000000000000000000000004200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000eb9c9b785aa7818b2ebc8f9842926c4b9f707e4b0000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000174f50204d756c74692d5374726174656779205661756c74000000000000000000000000000000000000000000000000000000000000000000000000000000000572662d4f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001e71aee6081f62053123140aacc7a06021d7734800000000000000000000000081876677843d00a7d792e1617459ac2e932025760000000000000000000000001a20d7a31e5b3bc5f02c8a146ef6f394502a10c40000000000000000000000004c3490df15edfa178333445ce568ec6d99b5d71c00000000000000000000000000000000000000000000000000000000000000030000000000000000000000009bc776dbb134ef9d7014db1823cd755ac5015203000000000000000000000000eb9c9b785aa7818b2ebc8f9842926c4b9f707e4b000000000000000000000000b0c9d5851def8a2aac4a23031ca2610f8c3483f9