[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_rewardsDistributor", "type": "address" }, { "internalType": "address", "name": "_batonMonitor", "type": "address" }, { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "address", "name": "_pairAddress", "type": "address" }, { "internalType": "uint256", "name": "_rewardsDuration", "type": "uint256" }, { "internalType": "address", "name": "_batonFactory", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "surplusAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recoveredTo", "type": "address" } ], "name": "FoundSurplus", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "migration", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "MigrationComplete", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "migration", "type": "address" } ], "name": "MigrationInitiated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Received", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "RewardAdded", "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": "newDuration", "type": "uint256" } ], "name": "RewardsDurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Staked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_rewardsDistributor", "type": "address" } ], "name": "UpdateRewardsDistributor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newRewardsDuration", "type": "uint256" } ], "name": "UpdateRewardsDuration", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawn", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batonFactory", "outputs": [ { "internalType": "contract BatonFactory", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "batonMonitor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "basisPoints", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "calculatePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "harvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_migration", "type": "address" } ], "name": "initiateMigration", "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": [], "name": "migrate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "migration", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "migrationComplete", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256", "name": "minLpTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minPrice", "type": "uint256" }, { "internalType": "uint256", "name": "maxPrice", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "bytes32[][]", "name": "proofs", "type": "bytes32[][]" }, { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "bytes", "name": "payload", "type": "bytes" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "internalType": "struct ReservoirOracle.Message[]", "name": "messages", "type": "tuple[]" } ], "name": "nftAddAndStake", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "notifyRewardAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pair", "outputs": [ { "internalType": "contract Pair", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "periodFinish", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "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": [], "name": "rewardsDistributor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsToken", "outputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsDistributor", "type": "address" } ], "name": "setRewardsDistributor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rewardsDuration", "type": "uint256" } ], "name": "setRewardsDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakingToken", "outputs": [ { "internalType": "contract ERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userRewardPerTokenPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAndHarvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "minBaseTokenOutputAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minFractionalTokenOutputAmount", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "withdrawAndRemoveLPFromPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "minBaseTokenOutputAmount", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "bool", "name": "withFee", "type": "bool" } ], "name": "withdrawAndRemoveNftFromPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
6101206040523480156200001257600080fd5b506040516200417138038062004171833981016040819052620000359162000542565b600080546001600160a81b0319166101006001600160a01b038a169081029190911782556040518992907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b038716620000e15760405162461bcd60e51b815260206004820152601d60248201527f5f6f776e65722073686f756c646e74206265206164647265737328302900000060448201526064015b60405180910390fd5b6001600160a01b0386166200014c5760405162461bcd60e51b815260206004820152602a60248201527f5f726577617264734469737472696275746f722073686f756c646e74206265206044820152696164647265737328302960b01b6064820152608401620000d8565b6001600160a01b038516620001b05760405162461bcd60e51b8152602060048201526024808201527f5f6261746f6e4d6f6e69746f722073686f756c646e74206265206164647265736044820152637328302960e01b6064820152608401620000d8565b6001600160a01b038416620002145760405162461bcd60e51b8152602060048201526024808201527f5f72657761726473546f6b656e2073686f756c646e74206265206164647265736044820152637328302960e01b6064820152608401620000d8565b6001600160a01b038316620002785760405162461bcd60e51b815260206004820152602360248201527f5f70616972416464726573732073686f756c646e74206265206164647265737360448201526228302960e81b6064820152608401620000d8565b6001600160a01b038116620002dc5760405162461bcd60e51b8152602060048201526024808201527f5f6261746f6e466163746f72792073686f756c646e74206265206164647265736044820152637328302960e01b6064820152608401620000d8565b6001600160a01b03808416608081905290851660a05260408051635fcbd28560e01b81529051635fcbd285916004808201926020929091908290030181865afa1580156200032e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003549190620005e1565b6001600160a01b0390811660c052600b80546001600160a01b03191691881691909117905581620003c85760405162461bcd60e51b815260206004820152601c60248201527f5f726577617264734475726174696f6e2063616e6e6f742062652030000000006044820152606401620000d8565b63096601808210620004325760405162461bcd60e51b815260206004820152602c60248201527f5f726577617264734475726174696f6e2063616e6e6f74206265206d6f72652060448201526b7468656e203520796561727360a01b6064820152608401620000d8565b60038290556001600160a01b0380861660e05281811661010052608051604080516323e6650160e11b8152905191909216916347ccca029160048083019260209291908290030181865afa1580156200048f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b59190620005e1565b60805160405163a22cb46560e01b81526001600160a01b0391821660048201526001602482015291169063a22cb46590604401600060405180830381600087803b1580156200050357600080fd5b505af115801562000518573d6000803e3d6000fd5b505050505050505050505062000608565b6001600160a01b03811681146200053f57600080fd5b50565b600080600080600080600060e0888a0312156200055e57600080fd5b87516200056b8162000529565b60208901519097506200057e8162000529565b6040890151909650620005918162000529565b6060890151909550620005a48162000529565b6080890151909450620005b78162000529565b60a089015160c08a01519194509250620005d18162000529565b8091505092959891949750929550565b600060208284031215620005f457600080fd5b8151620006018162000529565b9392505050565b60805160a05160c05160e05161010051613a5962000718600039600081816106820152818161101f0152818161131101528181611bae0152611ea6015260008181610846015281816110dc015281816113ce01528181611c7b01528181611f63015261267901526000818161060e01528181610d01015281816110ba01528181611122015281816113ac01528181611f41015281816124e30152612b190152600081816107dc015281816117840152818161192801528181611a1001528181611c5901528181611cc10152818161258a01526128cc01526000818161075d01528181610a9001528181610bd101528181611458015281816114df01528181611f9b015261204c0152613a596000f3fe6080604052600436106102be5760003560e01c806372f702f31161016e578063a8aa1b31116100cb578063d1f5c33b1161007f578063e4710a4811610064578063e4710a4814610834578063ebe2b12b14610868578063f2fde38b1461087e57600080fd5b8063d1f5c33b146107fe578063df136d651461081e57600080fd5b8063cc1a378f116100b0578063cc1a378f14610795578063cd3daf9d146107b5578063d1af0c7d146107ca57600080fd5b8063a8aa1b311461074b578063c8f33c911461077f57600080fd5b80638980f11f116101225780638da5cb5b116101075780638da5cb5b146106f15780638fd3ab8014610716578063a694fc3a1461072b57600080fd5b80638980f11f146106a45780638b876347146106c457600080fd5b806380faa57d1161015357806380faa57d146106465780638456cb591461065b57806384a9dd731461067057600080fd5b806372f702f3146105fc5780637b0a47ee1461063057600080fd5b806332a38f6b1161021c5780634641257d116101d057806360a77ec4116101b557806360a77ec41461058657806370a08231146105a657806371726c92146105dc57600080fd5b80634641257d146105595780635c975abb1461056e57600080fd5b80633c6b16ab116102015780633c6b16ab146105045780633f2a5540146105245780633f4ba83a1461054457600080fd5b806332a38f6b146104d9578063386a9525146104ee57600080fd5b80631e69cece116102735780632bff884f116102585780632bff884f146104575780632e1a7d4d146104995780633059bfcb146104b957600080fd5b80631e69cece146104225780632133e3b91461043757600080fd5b8063150b7a02116102a4578063150b7a021461035f5780631705a3bd146103d557806318160ddd1461040d57600080fd5b80628cc262146102ff5780630700037d1461033257600080fd5b366102fa5760405134815233907f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258749060200160405180910390a2005b600080fd5b34801561030b57600080fd5b5061031f61031a366004613280565b61089e565b6040519081526020015b60405180910390f35b34801561033e57600080fd5b5061031f61034d366004613280565b60086020526000908152604090205481565b34801561036b57600080fd5b506103a461037a3660046132a4565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610329565b3480156103e157600080fd5b50600a546103f5906001600160a01b031681565b6040516001600160a01b039091168152602001610329565b34801561041957600080fd5b5060065461031f565b61043561043036600461338f565b610939565b005b34801561044357600080fd5b5061031f610452366004613452565b610e6f565b34801561046357600080fd5b50600a546104899074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610329565b3480156104a557600080fd5b506104356104b4366004613474565b610e93565b3480156104c557600080fd5b506104356104d436600461348d565b611185565b3480156104e557600080fd5b5061043561154f565b3480156104fa57600080fd5b5061031f60035481565b34801561051057600080fd5b5061043561051f366004613474565b611572565b34801561053057600080fd5b50600b546103f5906001600160a01b031681565b34801561055057600080fd5b50610435611abb565b34801561056557600080fd5b50610435611b22565b34801561057a57600080fd5b5060005460ff16610489565b34801561059257600080fd5b506104356105a13660046134cd565b611d1a565b3480156105b257600080fd5b5061031f6105c1366004613280565b6001600160a01b031660009081526009602052604090205490565b3480156105e857600080fd5b506104356105f7366004613280565b6121d3565b34801561060857600080fd5b506103f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561063c57600080fd5b5061031f60025481565b34801561065257600080fd5b5061031f612404565b34801561066757600080fd5b5061043561241b565b34801561067c57600080fd5b506103f57f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b057600080fd5b506104356106bf366004613540565b612482565b3480156106d057600080fd5b5061031f6106df366004613280565b60076020526000908152604090205481565b3480156106fd57600080fd5b506000546103f59061010090046001600160a01b031681565b34801561072257600080fd5b5061043561266e565b34801561073757600080fd5b50610435610746366004613474565b61293f565b34801561075757600080fd5b506103f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561078b57600080fd5b5061031f60045481565b3480156107a157600080fd5b506104356107b0366004613474565b612b82565b3480156107c157600080fd5b5061031f612c8e565b3480156107d657600080fd5b506103f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561080a57600080fd5b50610435610819366004613280565b612d0d565b34801561082a57600080fd5b5061031f60055481565b34801561084057600080fd5b506103f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561087457600080fd5b5061031f60015481565b34801561088a57600080fd5b50610435610899366004613280565b612e4e565b6000806108a9612c8e565b6001600160a01b038416600090815260076020526040812054919250906108d0908361359b565b6001600160a01b038516600090815260096020526040812054919250670de0b6b3a76400006108ff84846135ae565b61090991906135c5565b6001600160a01b03871660009081526008602052604090205490915061092f9082613600565b9695505050505050565b600154421061098f5760405162461bcd60e51b815260206004820152601760248201527f54686973206661726d206973206e6f742061637469766500000000000000000060448201526064015b60405180910390fd5b610997612f17565b600a5474010000000000000000000000000000000000000000900460ff1615610a285760405162461bcd60e51b815260206004820152603e60248201527f5468697320636f6e747261637420686173206265656e206d696772617465642c60448201527f20796f752063616e6e6f74206465706f736974206e65772066756e64732e00006064820152608401610986565b33610a31612c8e565b600555610a3c612404565b6004556001600160a01b03811615610a8357610a578161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b60005b8a811015610bcc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166347ccca026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b109190613613565b6001600160a01b03166342842e0e33308f8f86818110610b3257610b32613630565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610ba157600080fd5b505af1158015610bb5573d6000803e3d6000fd5b505050508080610bc49061365f565b915050610a86565b5060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634cfb998a34348f8f8f8f8f8f8f8f8f8f6040518d63ffffffff1660e01b8152600401610c309b9a99989796959493929190613863565b60206040518083038185885af1158015610c4e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c73919061398e565b905060008111610cc55760405162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b6520300000000000000000000000000000000000006044820152606401610986565b80600654610cd39190613600565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d74919061398e565b14610de75760405162461bcd60e51b815260206004820152603460248201527f7374616b696e67546f6b656e2062616c616e6365206469646e7420757064617460448201527f652066726f6d206c70546f6b656e416d6f756e740000000000000000000000006064820152608401610986565b80600654610df59190613600565b60065533600090815260096020526040902054610e13908290613600565b33600081815260096020526040908190209290925590517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90610e599084815260200190565b60405180910390a2505050505050505050505050565b600080612710610e7f84866135ae565b610e8991906135c5565b9150505b92915050565b33610e9c612c8e565b600555610ea7612404565b6004556001600160a01b03811615610eee57610ec28161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b60008211610f3e5760405162461bcd60e51b815260206004820152601160248201527f43616e6e6f7420776974686472617720300000000000000000000000000000006044820152606401610986565b33600090815260096020526040902054821115610fc35760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207769746864726177206d6f7265207468656e20796f7520686160448201527f7665207374616b656400000000000000000000000000000000000000000000006064820152608401610986565b81600654610fd1919061359b565b60065533600090815260096020526040902054610fef90839061359b565b60096000336001600160a01b03166001600160a01b031681526020019081526020016000208190555060006110a57f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166324ee8e716040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f919061398e565b84610e6f565b90508015611101576111016001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083612f6a565b600061110d828561359b565b90508015611149576111496001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383612f6a565b60405181815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a250505050565b3361118e612c8e565b600555611199612404565b6004556001600160a01b038116156111e0576111b48161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b600085116112305760405162461bcd60e51b815260206004820152601160248201527f43616e6e6f7420776974686472617720300000000000000000000000000000006044820152606401610986565b336000908152600960205260409020548511156112b55760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207769746864726177206d6f7265207468656e20796f7520686160448201527f7665207374616b656400000000000000000000000000000000000000000000006064820152608401610986565b846006546112c3919061359b565b600655336000908152600960205260409020546112e190869061359b565b60096000336001600160a01b03166001600160a01b031681526020019081526020016000208190555060006113977f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166324ee8e716040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611391919061398e565b87610e6f565b905080156113f3576113f36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083612f6a565b60006113ff828861359b565b90508015611509576040517f1ae74cdd0000000000000000000000000000000000000000000000000000000081526004810182905260248101879052604481018690526064810185905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631ae74cdd9060840160408051808303816000875af11580156114a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c491906139a7565b915091506114d2338361300f565b6115066001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383612f6a565b50505b611511611b22565b60405181815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a250505050505050565b3360009081526009602052604090205461156890610e93565b611570611b22565b565b600b546001600160a01b031633148061159a575060005461010090046001600160a01b031633145b61160c5760405162461bcd60e51b815260206004820152602960248201527f43616c6c6572206973206e6f7420526577617264734469737472696275746f7260448201527f20636f6e747261637400000000000000000000000000000000000000000000006064820152608401610986565b600a5474010000000000000000000000000000000000000000900460ff161561169d5760405162461bcd60e51b815260206004820152603e60248201527f5468697320636f6e747261637420686173206265656e206d696772617465642c60448201527f20796f752063616e6e6f74206465706f736974206e65772066756e64732e00006064820152608401610986565b60006116a7612c8e565b6005556116b2612404565b6004556001600160a01b038116156116f9576116cd8161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b600082116117495760405162461bcd60e51b815260206004820152601260248201527f7265776172642063616e6e6f74206265203000000000000000000000000000006044820152606401610986565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f991906139cb565b50600060015442106118465760035461181290846135c5565b6002556003546118229042613600565b60015560035460025461183591906135ae565b61183f908461359b565b90506118a8565b600042600154611856919061359b565b905060006002548261186891906135ae565b9050816118758287613600565b61187f91906135c5565b600281905561188f9083906135ae565b6118998287613600565b6118a3919061359b565b925050505b6000600254116118fa5760405162461bcd60e51b815260206004820152600f60248201527f7265776172642072617465203d203000000000000000000000000000000000006044820152606401610986565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199b919061398e565b6003546002546119ab91906135ae565b11156119f95760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f206869676800000000000000006044820152606401610986565b8015611a7f57600b54611a39906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612f6a565b600b54604080518381526001600160a01b0390921660208301527f3cd094c348efde9110a082dc51109d392ac0874b24682147545ed2a1f8c7e5e5910160405180910390a15b426004556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b60005461010090046001600160a01b03163314611b1a5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b61157061306f565b33611b2b612c8e565b600555611b36612404565b6004556001600160a01b03811615611b7d57611b518161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b600060086000336001600160a01b03166001600160a01b031681526020019081526020016000205490506000611c347f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663adcc63976040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e919061398e565b83610e6f565b3360009081526008602052604081205590508015611ca057611ca06001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083612f6a565b6000611cac828461359b565b90508015611ce857611ce86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383612f6a565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e048690602001611177565b33611d23612c8e565b600555611d2e612404565b6004556001600160a01b03811615611d7557611d498161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b60008711611dc55760405162461bcd60e51b815260206004820152601160248201527f43616e6e6f7420776974686472617720300000000000000000000000000000006044820152606401610986565b33600090815260096020526040902054871115611e4a5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207769746864726177206d6f7265207468656e20796f7520686160448201527f7665207374616b656400000000000000000000000000000000000000000000006064820152608401610986565b86600654611e58919061359b565b60065533600090815260096020526040902054611e7690889061359b565b60096000336001600160a01b03166001600160a01b03168152602001908152602001600020819055506000611f2c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166324ee8e716040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f26919061398e565b89610e6f565b90508015611f8857611f886001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083612f6a565b6000611f94828a61359b565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634cba3eca848c8c8c8c8c6040518763ffffffff1660e01b8152600401611fef969594939291906139e8565b60408051808303816000875af115801561200d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203191906139a7565b9150915061203f338361300f565b60005b87811015612188577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166347ccca026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cc9190613613565b6001600160a01b03166342842e0e30338c8c868181106120ee576120ee613630565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561215d57600080fd5b505af1158015612171573d6000803e3d6000fd5b5050505080806121809061365f565b915050612042565b50612191611b22565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a25050505050505050505050565b60005461010090046001600160a01b031633146122325760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b600a5474010000000000000000000000000000000000000000900460ff16156122c35760405162461bcd60e51b815260206004820152603e60248201527f5468697320636f6e747261637420686173206265656e206d696772617465642c60448201527f20796f752063616e6e6f74206465706f736974206e65772066756e64732e00006064820152608401610986565b6001600160a01b03811661233f5760405162461bcd60e51b815260206004820152602160248201527f506c65617365206d69677261746520746f20612076616c69642061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610986565b306001600160a01b038216036123975760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74206d69677261746520746f2073656c66000000000000000000006044820152606401610986565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fbf3aee0580cb96d1eb8ffba88fb8dc83e973b7cdf4a18be5a0d3cbb4e6ecb3d3906020015b60405180910390a150565b60006001544210612416575060015490565b504290565b60005461010090046001600160a01b0316331461247a5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b6115706130df565b60005461010090046001600160a01b031633146124e15760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036125885760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420776974686472617720746865207374616b696e6720746f6b6560448201527f6e000000000000000000000000000000000000000000000000000000000000006064820152608401610986565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036126095760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207769746864726177207468652072657761726420746f6b656e6044820152606401610986565b600054612628906001600160a01b038481169161010090041683612f6a565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461270c5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f74204261746f6e4d6f6e69746f7220636f6e747260448201527f61637400000000000000000000000000000000000000000000000000000000006064820152608401610986565b600a546001600160a01b031661278a5760405162461bcd60e51b815260206004820152603260248201527f436f6e7472616374206f776e6572206d7573742066697273742063616c6c206960448201527f6e6974696174654d6967726174696f6e282900000000000000000000000000006064820152608401610986565b600a5474010000000000000000000000000000000000000000900460ff161561281b5760405162461bcd60e51b815260206004820152603e60248201527f5468697320636f6e747261637420686173206265656e206d696772617465642c60448201527f20796f752063616e6e6f74206465706f736974206e65772066756e64732e00006064820152608401610986565b600154421061286c5760405162461bcd60e51b815260206004820152601760248201527f54686973206661726d206973206e6f74206163746976650000000000000000006044820152606401610986565b600061287661313a565b600a8054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff821617909155426001559091506128f5906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612f6a565b600a54604080516001600160a01b0390921682526020820183905242908201527f0172d08d81df86673f7e65d3d77b5dfa9b07a646ac6aca2f3b25e2b93ffb3430906060016123f9565b600a5474010000000000000000000000000000000000000000900460ff16156129d05760405162461bcd60e51b815260206004820152603e60248201527f5468697320636f6e747261637420686173206265656e206d696772617465642c60448201527f20796f752063616e6e6f74206465706f736974206e65772066756e64732e00006064820152608401610986565b6001544210612a215760405162461bcd60e51b815260206004820152601760248201527f54686973206661726d206973206e6f74206163746976650000000000000000006044820152606401610986565b612a29612f17565b33612a32612c8e565b600555612a3d612404565b6004556001600160a01b03811615612a8457612a588161089e565b6001600160a01b0382166000908152600860209081526040808320939093556005546007909152919020555b60008211612ad45760405162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b6520300000000000000000000000000000000000006044820152606401610986565b81600654612ae29190613600565b60065533600090815260096020526040902054612b00908390613600565b33600081815260096020526040902091909155612b49907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690308561316a565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d9060200160405180910390a25050565b60005461010090046001600160a01b03163314612be15760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b600154421015612c595760405162461bcd60e51b815260206004820152602b60248201527f706f6f6c2069732072756e6e696e672c2063616e6e6f7420757064617465207460448201527f6865206475726174696f6e0000000000000000000000000000000000000000006064820152608401610986565b60038190556040518181527f93ffc29e2d73e3e6b3262dfdc8cd0e6e838568a0860474ed3087f830a82f4aad906020016123f9565b6000600654600003612ca1575060055490565b6000612cab612404565b9050600060045482612cbd919061359b565b90506000600254670de0b6b3a7640000612cd791906135ae565b905060006006548284612cea91906135ae565b612cf491906135c5565b905080600554612d049190613600565b94505050505090565b60005461010090046001600160a01b03163314612d6c5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b6001600160a01b038116612de85760405162461bcd60e51b815260206004820152602860248201527f5f726577617264734469737472696275746f722063616e6e6f7420626520616460448201527f64726573732830290000000000000000000000000000000000000000000000006064820152608401610986565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f8c1a55060e521f27a67c03004984808ed1060d76b4abbe8c74f6d11484ac5043906020016123f9565b60005461010090046001600160a01b03163314612ead5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610986565b600080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b60005460ff16156115705760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610986565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806130095760405162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610986565b50505050565b600080600080600085875af190508061306a5760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610986565b505050565b613077613216565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6130e7612f17565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586130c23390565b600080429050600081600154613150919061359b565b905060008160025461316291906135ae565b949350505050565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061320f5760405162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610986565b5050505050565b60005460ff166115705760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610986565b6001600160a01b038116811461327d57600080fd5b50565b60006020828403121561329257600080fd5b813561329d81613268565b9392505050565b6000806000806000608086880312156132bc57600080fd5b85356132c781613268565b945060208601356132d781613268565b935060408601359250606086013567ffffffffffffffff808211156132fb57600080fd5b818801915088601f83011261330f57600080fd5b81358181111561331e57600080fd5b89602082850101111561333057600080fd5b9699959850939650602001949392505050565b60008083601f84011261335557600080fd5b50813567ffffffffffffffff81111561336d57600080fd5b6020830191508360208260051b850101111561338857600080fd5b9250929050565b60008060008060008060008060008060e08b8d0312156133ae57600080fd5b8a3567ffffffffffffffff808211156133c657600080fd5b6133d28e838f01613343565b909c509a5060208d0135995060408d0135985060608d0135975060808d0135965060a08d013591508082111561340757600080fd5b6134138e838f01613343565b909650945060c08d013591508082111561342c57600080fd5b506134398d828e01613343565b915080935050809150509295989b9194979a5092959850565b6000806040838503121561346557600080fd5b50508035926020909101359150565b60006020828403121561348657600080fd5b5035919050565b600080600080608085870312156134a357600080fd5b5050823594602084013594506040840135936060013592509050565b801515811461327d57600080fd5b60008060008060008060a087890312156134e657600080fd5b863595506020870135945060408701359350606087013567ffffffffffffffff81111561351257600080fd5b61351e89828a01613343565b9094509250506080870135613532816134bf565b809150509295509295509295565b6000806040838503121561355357600080fd5b823561355e81613268565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610e8d57610e8d61356c565b8082028115828204841417610e8d57610e8d61356c565b6000826135fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820180821115610e8d57610e8d61356c565b60006020828403121561362557600080fd5b815161329d81613268565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136905761369061356c565b5060010190565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156136c957600080fd5b8260051b80836020870137939093016020019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261371757600080fd5b830160208101925035905067ffffffffffffffff81111561373757600080fd5b80360382131561338857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b81835260006020808501808196508560051b81019150846000805b88811015613855578385038a5282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818936030181126137e8578283fd5b88018035865260806137fc888301836136e2565b828a8a015261380e838a018284613746565b925050506040808301358189015250606061382b818401846136e2565b9350888303828a015261383f838583613746565b9d8a019d985050509387019350506001016137aa565b509298975050505050505050565b8b8152600060206101008184015261388061010084018d8f613697565b8b60408501528a60608501528960808501528860a085015283810360c0850152808782528282019050828860051b8301018960005b8a811015613963577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18d360301811261391657600080fd5b8c01868101903567ffffffffffffffff81111561393257600080fd5b8060051b360382131561394457600080fd5b61394f858284613697565b9588019594505050908501906001016138b5565b505085810360e087015261397881888a61378f565b9450505050509c9b505050505050505050505050565b6000602082840312156139a057600080fd5b5051919050565b600080604083850312156139ba57600080fd5b505080516020909101519092909150565b6000602082840312156139dd57600080fd5b815161329d816134bf565b86815285602082015284604082015260a060608201526000613a0e60a083018587613697565b9050821515608083015297965050505050505056fea2646970667358221220afd062ab7f1ce1130225242a24677e8238626f3498607434ff6628cd8af709df64736f6c6343000813003300000000000000000000000076905df68bad78bca25312b2a7619f9b43145262000000000000000000000000eb8d09235255b37fbc810df41fa879225c04639a0000000000000000000000009e902766d3e2e33aa07c4433919cca6a2c6b96d00000000000000000000000005bf30f8487f99e6f3ca3b6be8e151978958e5cd80000000000000000000000005bf30f8487f99e6f3ca3b6be8e151978958e5cd80000000000000000000000000000000000000000000000000000000000bb3500000000000000000000000000eb8d09235255b37fbc810df41fa879225c04639a