[ { "inputs": [], "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": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BoostedBalanceUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "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": true, "internalType": "address", "name": "asset", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "Initialize", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "RecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "RewardPaid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "currentRewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "periodFinish", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "historicalRewards", "type": "uint256" } ], "name": "RewardsAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsQueued", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Sweep", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "transfered", "type": "uint256" } ], "name": "TransferredPenalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardPerTokenStored", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rewards", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "userRewardPerTokenPaid", "type": "uint256" } ], "name": "UpdatedRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "BOOSTING_FACTOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "BOOST_DENOMINATOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PRECISION_FACTOR", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REWARD_TOKEN", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VEYFI", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VE_YFI_POOL", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "boostedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "controller", "outputs": [ { "internalType": "contract IGaugeController", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "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": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReward", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getReward", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "historicalRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_asset", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_controller", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_accounts", "type": "address[]" } ], "name": "kick", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastTimeRewardApplicable", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastUpdateTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "nextBoostedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "periodFinish", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "recipients", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardPerTokenStored", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newController", "type": "address" } ], "name": "setController", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" } ], "name": "setRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "sweep", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "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": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userRewardPerTokenPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_claim", "type": "bool" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_assets", "type": "uint256" }, { "internalType": "address", "name": "_receiver", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "bool", "name": "_claim", "type": "bool" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b8062000063575062000050306200013d60201b6200118d1760201c565b15801562000063575060005460ff166001145b620000cb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000ef576000805461ff0019166101001790555b801562000136576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b506200014c565b6001600160a01b03163b151590565b612da5806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106103b95760003560e01c806392eefe9b116101f4578063c67ffb4e1161011a578063d905777e116100ad578063ebe2b12b1161007c578063ebe2b12b14610779578063ef8b30f714610444578063f2fde38b14610782578063f77c47911461079557600080fd5b8063d905777e14610706578063dd62ed3e14610734578063df136d6514610747578063eb8203121461075057600080fd5b8063cd3daf9d116100e9578063cd3daf9d146106fe578063ce96cb7714610706578063d045f2c414610719578063d0e30db01461072c57600080fd5b8063c67ffb4e146106d3578063c6e6f59214610444578063c8f33c91146106e6578063ccd34cd5146106ef57600080fd5b8063a9059cbb11610192578063b6b55f2511610161578063b6b55f251461069a578063ba087652146106ad578063c00007b0146106c0578063c63d75b61461055557600080fd5b8063a9059cbb14610659578063b3d7f6b914610444578063b460af941461066c578063b5387c781461067f57600080fd5b8063980091fc116101ce578063980091fc1461061057806399248ea714610618578063a457c2d714610633578063a810a54c1461064657600080fd5b806392eefe9b146105f557806394bf804d1461056a57806395d89b411461060857600080fd5b8063313ce567116102e45780636e553f65116102775780637d2f791d116102465780637d2f791d146105a157806380faa57d146105bc5780638b876347146105c45780638da5cb5b146105e457600080fd5b80636e553f651461056a57806370a082311461057d578063715018a6146105905780637b0a47ee1461059857600080fd5b80633ccfd60b116102b35780633ccfd60b146105455780633d18b9121461054d578063402d267d146105555780634cdad5061461044457600080fd5b8063313ce567146104e557806338d52e0f146104f4578063395093511461051f5780633bbed4a01461053257600080fd5b80630a28a4771161035c5780631beabcd21161032b5780631beabcd21461048d57806323b872dd146104b6578063246581f7146104c9578063262d3d6d146104dc57600080fd5b80630a28a477146104445780631530e6d81461046857806318160ddd1461047d5780631bd32ed31461048557600080fd5b806306fdde031161039857806306fdde031461040f5780630700037d1461042457806307a2d13a14610444578063095ea7b31461045557600080fd5b80628cc262146103be57806301681a62146103e457806301e1d11414610407575b600080fd5b6103d16103cc36600461262a565b6107a8565b6040519081526020015b60405180910390f35b6103f76103f236600461262a565b6107e1565b60405190151581526020016103db565b6103d161090f565b61041761091f565b6040516103db9190612671565b6103d161043236600461262a565b606b6020526000908152604090205481565b6103d16104523660046126a4565b90565b6103f76104633660046126bd565b6109b1565b61047b6104763660046126e7565b6109cb565b005b606e546103d1565b6103d1600a81565b6103d161049b36600461262a565b6001600160a01b0316600090815260a0602052604090205490565b6103f76104c436600461275c565b610a1a565b61047b6104d7366004612807565b610a3e565b6103d160695481565b604051601281526020016103db565b609e54610507906001600160a01b031681565b6040516001600160a01b0390911681526020016103db565b6103f761052d3660046126bd565b610d3b565b61047b61054036600461262a565b610d5d565b6103d1610db4565b6103f7610dcb565b6103d161056336600461262a565b5060001990565b6103d16105783660046128b9565b610de8565b6103d161058b36600461262a565b610dfb565b61047b610e16565b6103d160665481565b6105077390c1f9220d90d3966fbee24045edd73e1d588ad581565b6103d1610e2a565b6103d16105d236600461262a565b606a6020526000908152604090205481565b6033546001600160a01b0316610507565b61047b61060336600461262a565b610e38565b610417610eb8565b6103d1600181565b6105077341252e8691e964f7de35156b68493bab6797a27581565b6103f76106413660046126bd565b610ec7565b6103d16106543660046128f3565b610f42565b6103f76106673660046126bd565b610f58565b6103d161067a366004612910565b610f66565b610507732391fc8f5e417526338f5aa3968b1851c16d894e81565b6103d16106a83660046126a4565b610f7d565b6103d16106bb366004612910565b610f8d565b6103f76106ce36600461262a565b610f9c565b6103d16106e136600461262a565b610fbc565b6103d160675481565b6103d1670de0b6b3a764000081565b6103d1610fc7565b6103d161071436600461262a565b610fd1565b6103d161072736600461294c565b610fdc565b6103d1610ff3565b6103d161074236600461299b565b6110e9565b6103d160685481565b61050761075e36600461262a565b60a1602052600090815260409020546001600160a01b031681565b6103d160655481565b61047b61079036600461262a565b611114565b609f54610507906001600160a01b031681565b6000806107b48361119c565b6001600160a01b0384166000908152606b60205260409020549091506107da90826129db565b9392505050565b60006107eb6111fe565b6107f482611258565b156108385760405162461bcd60e51b815260206004820152600f60248201526e383937ba32b1ba32b2103a37b5b2b760891b60448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a391906129f3565b90506108c1836108bb6033546001600160a01b031690565b83611295565b826001600160a01b03167fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c77826040516108fc91815260200190565b60405180910390a260019150505b919050565b600061091a606e5490565b905090565b6060606f805461092e90612a0c565b80601f016020809104026020016040519081016040528092919081815260200182805461095a90612a0c565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b6000336109bf8185856112f8565b60019150505b92915050565b60005b81811015610a1557610a058383838181106109eb576109eb612a40565b9050602002016020810190610a00919061262a565b61141c565b610a0e81612a56565b90506109ce565b505050565b600033610a2885828561148c565b610a33858585611506565b506001949350505050565b600054610100900460ff1615808015610a5e5750600054600160ff909116105b80610a785750303b158015610a78575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161082f565b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b07846116c2565b609e80546001600160a01b0319166001600160a01b03878116919091179091558316610b755760405162461bcd60e51b815260206004820152601760248201527f5f636f6e74726f6c6c6572203078302061646472657373000000000000000000604482015260640161082f565b82609f60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610cae856001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610bdd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c059190810190612a6f565b604051602001610c159190612add565b604051602081830303815290604052866001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c62573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c8a9190810190612a6f565b604051602001610c9a9190612b0c565b60405160208183030381529060405261170d565b836001600160a01b0316856001600160a01b03167fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a60405160405180910390a38015610d34576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6000336109bf818585610d4e83836110e9565b610d5891906129db565b6112f8565b33600081815260a1602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519092917f62e69886a5df0ba8ffcacbfc1388754e7abd9bde24b036354c561f1acd4e459391a350565b600061091a610dc233610dfb565b33336000611742565b600033610dd781611833565b610de033611b46565b600191505090565b6000610df48383611c63565b5090919050565b6001600160a01b03166000908152606c602052604090205490565b610e1e6111fe565b610e286000611d1f565b565b600061091a42606554611d71565b610e406111fe565b6001600160a01b038116610e965760405162461bcd60e51b815260206004820152601e60248201527f636f6e74726f6c6c65722073686f756c64206e6f7420626520656d7074790000604482015260640161082f565b609f80546001600160a01b0319166001600160a01b0392909216919091179055565b60606070805461092e90612a0c565b60003381610ed582866110e9565b905083811015610f355760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161082f565b610a3382868684036112f8565b60006109c5610f5033610dfb565b333385611742565b6000336109bf818585611506565b6000610f758484846000611742565b949350505050565b6000610f898233611c63565b5090565b6000610f758484846001611742565b600081610fa881611833565b610fb183611b46565b600191505b50919050565b60006109c582611d80565b600061091a611d94565b60006109c582610dfb565b6000610fea85858585611742565b95945050505050565b609e546040516370a0823160e01b815233600482015260009182916110dd916001600160a01b0316906370a0823190602401602060405180830381865afa158015611042573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106691906129f3565b609e54604051636eb1769f60e11b81523360048201523060248201526001600160a01b039091169063dd62ed3e90604401602060405180830381865afa1580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d891906129f3565b611d71565b905061090a8133611c63565b6001600160a01b039182166000908152606d6020908152604080832093909416825291909152205490565b61111c6111fe565b6001600160a01b0381166111815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161082f565b61118a81611d1f565b50565b6001600160a01b03163b151590565b6001600160a01b0381166000908152606a6020526040812054670de0b6b3a7640000906111c7611d94565b6111d19190612b37565b6001600160a01b038416600090815260a060205260409020546111f49190612b4e565b6109c59190612b6d565b6033546001600160a01b03163314610e285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161082f565b60006001600160a01b0382167341252e8691e964f7de35156b68493bab6797a27514806109c5575050609e546001600160a01b0390811691161490565b6040516001600160a01b038316602482015260448101829052610a1590849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611ded565b6001600160a01b03831661135a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161082f565b6001600160a01b0382166113bb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161082f565b6001600160a01b038381166000818152606d602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b8061142681611833565b600061143183610dfb565b9050600061143f8483611ebf565b6001600160a01b038516600081815260a06020526040908190208390555191925090600080516020612d508339815191529061147e9084815260200190565b60405180910390a250505050565b600061149884846110e9565b9050600019811461150057818110156114f35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161082f565b61150084848484036112f8565b50505050565b6001600160a01b03831661156a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161082f565b6001600160a01b0382166115cc5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161082f565b6115d783838361201f565b6001600160a01b0383166000908152606c60205260409020548181101561164f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161082f565b6001600160a01b038085166000818152606c602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116af9086815260200190565b60405180910390a361150084848461204f565b6001600160a01b0381166111815760405162461bcd60e51b81526020600482015260126024820152715f6f776e657220307830206164647265737360701b604482015260640161082f565b600054610100900460ff166117345760405162461bcd60e51b815260040161082f90612b8f565b61173e828261210d565b5050565b6000846000036117945760405162461bcd60e51b815260206004820152601e60248201527f526577617264506f6f6c203a2043616e6e6f7420776974686472617720300000604482015260640161082f565b336001600160a01b038416146117af576117af83338761148c565b6117b9838661214d565b81156117c8576117c883611b46565b609e546117df906001600160a01b03168587611295565b60408051868152602081018790526001600160a01b03808616929087169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a450929392505050565b606554421015801561184c5750600061184a61090f565b115b156119e157611859611d94565b6068819055506000806000609f60009054906101000a90046001600160a01b03166001600160a01b0316634e71d92d6040518163ffffffff1660e01b81526004016060604051808303816000875af11580156118b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118dd9190612bda565b925092509250600060695483856118f49190612b37565b6118fe9190612b37565b905080156119415761190e61090f565b611920670de0b6b3a764000083612b4e565b61192a9190612b6d565b6068600082825461193b91906129db565b90915550505b600061195062127500846129db565b905060006212750061196a670de0b6b3a764000087612b4e565b6119749190612b6d565b6067859055606583905560668190556069879055604080518781526020810187905290810184905260608101829052608081018890529091507f944ffd3678415a15cbfef07dd7d9f20cdc6f36d12588a4ba7e8eb440f32c61be9060a00160405180910390a15050505050505b6119e9611d94565b6068556119f4610e2a565b6067556001600160a01b0381161561118a576001600160a01b038116600090815260a0602052604090205415611acd576000611a2f8261119c565b90506000611a3c83612294565b6001600160a01b0384166000908152606b6020526040812080549293508492909190611a699084906129db565b9091555060009050611a7b8383612b37565b9050611a86816122dc565b836001600160a01b03167ffdcc759119f4a689ba608afdccb078153573a5a615700713ebb84704609694cc82604051611ac191815260200190565b60405180910390a25050505b6068546001600160a01b0382166000818152606a60208181526040808420869055606754606b83529381902054928252805186815291820193909352918201526060810192909252907ffbe590c835e1c07f8e971c36021d1be46f43f7b0b6dc5413dbd5753590569d589060800160405180910390a250565b6000611b5182611d80565b6001600160a01b038316600081815260a06020526040908190208390555191925090600080516020612d5083398151915290611b909084815260200190565b60405180910390a26001600160a01b0382166000908152606b60205260409020548015610a15576001600160a01b038084166000908152606b6020908152604080832083905560a1909152902054168015611c0957611c047341252e8691e964f7de35156b68493bab6797a2758284611295565b611c28565b611c287341252e8691e964f7de35156b68493bab6797a2758584611295565b836001600160a01b03167fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04868360405161147e91815260200190565b81600003611cb35760405162461bcd60e51b815260206004820152601d60248201527f526577617264506f6f6c203a2043616e6e6f74206465706f7369742030000000604482015260640161082f565b609e54611ccb906001600160a01b03163330856123e3565b611cd5818361241b565b60408051838152602081018490526001600160a01b0383169133917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7910160405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818310610df45750919050565b60006109c582611d8f84610dfb565b611ebf565b6000611d9e61090f565b600003611dac575060685490565b611db461090f565b606654606754611dc2610e2a565b611dcc9190612b37565b611dd69190612b4e565b611de09190612b6d565b60685461091a91906129db565b6000611e42826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124f09092919063ffffffff16565b805190915015610a155780806020019051810190611e609190612c08565b610a155760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161082f565b6000807390c1f9220d90d3966fbee24045edd73e1d588ad56001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3891906129f3565b905080600003611f4b57829150506109c5565b610f75600a611f5b600182612b37565b6040516370a0823160e01b81526001600160a01b038816600482015284907390c1f9220d90d3966fbee24045edd73e1d588ad5906370a0823190602401602060405180830381865afa158015611fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd991906129f3565b606e54611fe69190612b4e565b611ff09190612b6d565b611ffa9190612b4e565b612005600187612b4e565b61200f91906129db565b6120199190612b6d565b84611d71565b6001600160a01b038316156120375761203783611833565b6001600160a01b03821615610a1557610a1582611833565b6001600160a01b038316156120ac5761206783611d80565b6001600160a01b038416600081815260a0602052604090819020839055519091600080516020612d50833981519152916120a391815260200190565b60405180910390a25b6001600160a01b03821615610a15576120c482611d80565b6001600160a01b038316600081815260a0602052604090819020839055519091600080516020612d508339815191529161210091815260200190565b60405180910390a2505050565b600054610100900460ff166121345760405162461bcd60e51b815260040161082f90612b8f565b606f6121408382612c73565b506070610a158282612c73565b6001600160a01b0382166121ad5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161082f565b6121b98260008361201f565b6001600160a01b0382166000908152606c60205260409020548181101561222d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161082f565b6001600160a01b0383166000818152606c602090815260408083208686039055606e80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a158360008461204f565b6001600160a01b0381166000908152606a6020526040812054670de0b6b3a7640000906122bf611d94565b6122c99190612b37565b6122d284610dfb565b6111f49190612b4e565b60405163095ea7b360e01b8152732391fc8f5e417526338f5aa3968b1851c16d894e6004820152602481018290527341252e8691e964f7de35156b68493bab6797a2759063095ea7b3906044016020604051808303816000875af1158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190612c08565b50604051630852cd8d60e31b815260048101829052732391fc8f5e417526338f5aa3968b1851c16d894e906342966c68906024016020604051808303816000875af11580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173e9190612c08565b6040516001600160a01b03808516602483015283166044820152606481018290526115009085906323b872dd60e01b906084016112c1565b6001600160a01b0382166124715760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161082f565b61247d6000838361201f565b80606e600082825461248f91906129db565b90915550506001600160a01b0382166000818152606c60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361173e6000838361204f565b6060610f75848460008585600080866001600160a01b031685876040516125179190612d33565b60006040518083038185875af1925050503d8060008114612554576040519150601f19603f3d011682016040523d82523d6000602084013e612559565b606091505b509150915061256a87838387612575565b979650505050505050565b606083156125e45782516000036125dd576001600160a01b0385163b6125dd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161082f565b5081610f75565b610f7583838151156125f95781518083602001fd5b8060405162461bcd60e51b815260040161082f9190612671565b80356001600160a01b038116811461090a57600080fd5b60006020828403121561263c57600080fd5b6107da82612613565b60005b83811015612660578181015183820152602001612648565b838111156115005750506000910152565b6020815260008251806020840152612690816040850160208701612645565b601f01601f19169190910160400192915050565b6000602082840312156126b657600080fd5b5035919050565b600080604083850312156126d057600080fd5b6126d983612613565b946020939093013593505050565b600080602083850312156126fa57600080fd5b823567ffffffffffffffff8082111561271257600080fd5b818501915085601f83011261272657600080fd5b81358181111561273557600080fd5b8660208260051b850101111561274a57600080fd5b60209290920196919550909350505050565b60008060006060848603121561277157600080fd5b61277a84612613565b925061278860208501612613565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127d7576127d7612798565b604052919050565b600067ffffffffffffffff8211156127f9576127f9612798565b50601f01601f191660200190565b6000806000806080858703121561281d57600080fd5b61282685612613565b935061283460208601612613565b925061284260408601612613565b9150606085013567ffffffffffffffff81111561285e57600080fd5b8501601f8101871361286f57600080fd5b803561288261287d826127df565b6127ae565b81815288602083850101111561289757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600080604083850312156128cc57600080fd5b823591506128dc60208401612613565b90509250929050565b801515811461118a57600080fd5b60006020828403121561290557600080fd5b81356107da816128e5565b60008060006060848603121561292557600080fd5b8335925061293560208501612613565b915061294360408501612613565b90509250925092565b6000806000806080858703121561296257600080fd5b8435935061297260208601612613565b925061298060408601612613565b91506060850135612990816128e5565b939692955090935050565b600080604083850312156129ae57600080fd5b6129b783612613565b91506128dc60208401612613565b634e487b7160e01b600052601160045260246000fd5b600082198211156129ee576129ee6129c5565b500190565b600060208284031215612a0557600080fd5b5051919050565b600181811c90821680612a2057607f821691505b602082108103610fb657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060018201612a6857612a686129c5565b5060010190565b600060208284031215612a8157600080fd5b815167ffffffffffffffff811115612a9857600080fd5b8201601f81018413612aa957600080fd5b8051612ab761287d826127df565b818152856020838501011115612acc57600080fd5b610fea826020830160208601612645565b6603ca3b0bab3b2960cd1b815260008251612aff816007850160208701612645565b9190910160070192915050565b6279472d60e81b815260008251612b2a816003850160208701612645565b9190910160030192915050565b600082821015612b4957612b496129c5565b500390565b6000816000190483118215151615612b6857612b686129c5565b500290565b600082612b8a57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600080600060608486031215612bef57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215612c1a57600080fd5b81516107da816128e5565b601f821115610a1557600081815260208120601f850160051c81016020861015612c4c5750805b601f850160051c820191505b81811015612c6b57828155600101612c58565b505050505050565b815167ffffffffffffffff811115612c8d57612c8d612798565b612ca181612c9b8454612a0c565b84612c25565b602080601f831160018114612cd65760008415612cbe5750858301515b600019600386901b1c1916600185901b178555612c6b565b600085815260208120601f198616915b82811015612d0557888601518255948401946001909101908401612ce6565b5085821015612d235787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612d45818460208701612645565b919091019291505056fe291ff844d30f85bb011aca3bfccedead238b6ed2e4b283504e3c2231d134524ba2646970667358221220f9091adf8108da5282e345476b130fe277f3ce5cba9299502e87eb94e2bf549664736f6c634300080f0033