[ { "inputs": [], "name": "ExistingToken", "type": "error" }, { "inputs": [], "name": "InvalidAddress", "type": "error" }, { "inputs": [], "name": "NoRewards", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "UnknownToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newManager", "type": "address" } ], "name": "ManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "proposedOwner", "type": "address" } ], "name": "OwnerProposed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "contract IERC20", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "RewardAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "RewardPaid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenCount", "type": "uint256" } ], "name": "RewardTokenAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newRewardDuration", "type": "uint256" } ], "name": "RewardsDurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "Staked", "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": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "Withdrawn", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "addRewardToken", "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": [ { "internalType": "address", "name": "_walletAddress", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newManager", "type": "address" } ], "name": "changeManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "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": "address", "name": "_walletAddress", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_walletAddress", "type": "address" } ], "name": "earnedByToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exitFarm", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_stakeAmount", "type": "uint256" } ], "name": "farmDeposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_withdrawAmount", "type": "uint256" } ], "name": "farmWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getRewardTokens", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "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": "_stakeToken", "type": "address" }, { "internalType": "uint256", "name": "_defaultDuration", "type": "uint256" }, { "internalType": "address", "name": "_ownerAddress", "type": "address" }, { "internalType": "address", "name": "_managerAddress", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastTimeRewardApplicable", "outputs": [ { "internalType": "uint256", "name": "res", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastUpdateTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "managerAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ownerAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "periodFinished", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "proposeNewOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proposedOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_recoveryAmount", "type": "uint256" } ], "name": "recoverToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "rewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rewardTokens", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewards", "outputs": [ { "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "perTokenStored", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_rewardDuration", "type": "uint256" } ], "name": "setRewardDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_rewardTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "_newRewardRates", "type": "uint256[]" } ], "name": "setRewardRates", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakeToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenCount", "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": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
6080604052348015600e575f80fd5b50612a4b8061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610282575f3560e01c806390717dd311610157578063b29a8140116100d2578063cf73a1bc11610088578063dd62ed3e1161006e578063dd62ed3e146105a3578063f1229777146105e8578063f520e7e5146105fb575f80fd5b8063cf73a1bc14610563578063d153b60c14610583575f80fd5b8063c4f59f9b116100b8578063c4f59f9b1461053d578063c8f33c9114610552578063cddaf3581461055b575f80fd5b8063b29a814014610517578063c0ed00c91461052a575f80fd5b8063a457c2d711610127578063a9a901971161010d578063a9a90197146104de578063b1899bd6146104f1578063b1f8100d14610504575f80fd5b8063a457c2d7146104b8578063a9059cbb146104cb575f80fd5b806390717dd31461048157806395d89b41146104945780639f181b5e1461049c578063a3fbbaae146104a5575f80fd5b8063313ce5671161020157806351ed6a30116101b75780637bb7bed11161019d5780637bb7bed11461044657806380faa57d146104595780638f84aa0914610461575f80fd5b806351ed6a30146103cc57806370a0823114610411575f80fd5b806339509351116101e7578063395093511461039e5780633b9e9b45146103b15780634e71e0c8146103c4575f80fd5b8063313ce5671461037c578063372500ab14610396575f80fd5b80630962c4f9116102565780631c03e6cc1161023c5780631c03e6cc1461034157806323b872dd146103565780632b8c8a6414610369575f80fd5b80630962c4f91461032257806318160ddd14610339575f80fd5b80628cc2621461028657806306fdde03146102af5780630700037d146102c4578063095ea7b3146102ff575b5f80fd5b610299610294366004612426565b610604565b6040516102a69190612446565b60405180910390f35b6102b76106c5565b6040516102a69190612488565b6102ea6102d2366004612426565b600e6020525f90815260409020805460019091015482565b604080519283526020830191909152016102a6565b61031261030d3660046124db565b610750565b60405190151581526020016102a6565b61032b60065481565b6040519081526020016102a6565b60025461032b565b61035461034f366004612426565b610766565b005b610312610364366004612503565b6108dd565b61035461037736600461253d565b6109ac565b610384601281565b60405160ff90911681526020016102a6565b610354610a40565b6103126103ac3660046124db565b610b60565b61032b6103bf366004612554565b610ba8565b610354610c60565b6005546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b61032b61041f366004612426565b73ffffffffffffffffffffffffffffffffffffffff165f9081526003602052604090205490565b6103ec61045436600461253d565b610d81565b61032b610db6565b6009546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b61035461048f36600461253d565b610dcc565b6102b7610e55565b61032b600c5481565b6103546104b3366004612426565b610e62565b6103126104c63660046124db565b610f31565b6103126104d93660046124db565b610f74565b6103546104ec3660046125ca565b610fa5565b6103546104ff3660046126b4565b611164565b610354610512366004612426565b611412565b6103546105253660046124db565b6114da565b61035461053836600461253d565b611763565b6105456118c0565b6040516102a69190612720565b61032b60085481565b610354611998565b600b546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b600a546103ec9073ffffffffffffffffffffffffffffffffffffffff1681565b61032b6105b1366004612554565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260046020908152604080832093909416825291909152205490565b61032b6105f6366004612426565b6119bb565b61032b60075481565b600d546060905f9067ffffffffffffffff8111156106245761062461276d565b60405190808252806020026020018201604052801561064d578160200160208202803683370190505b5090505f5b600d548110156106be57610699600d82815481106106725761067261279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff1685610ba8565b8282815181106106ab576106ab61279a565b6020908102919091010152600101610652565b5092915050565b5f80546106d1906127c7565b80601f01602080910402602001604051908101604052809291908181526020018280546106fd906127c7565b80156107485780601f1061071f57610100808354040283529160200191610748565b820191905f5260205f20905b81548152906001019060200180831161072b57829003601f168201915b505050505081565b5f61075c338484611a3a565b5060015b92915050565b61076e611aa8565b6014600c5410610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a204d41585f544f4b454e535f524560448201527f414348454400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61080e81611b2b565b600d8054600180820183555f929092527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600c5461088a9161283f565b600c81905560405190815273ffffffffffffffffffffffffffffffffffffffff8216907f68e3e9397770d9dfa88c0953a34e1a70a05416b3895957f5b689787a920791c49060200160405180910390a250565b5f6108e6611bfc565b836108f081611c8a565b836108fa81611c8a565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146109955773ffffffffffffffffffffffffffffffffffffffff86165f9081526004602090815260408083203384529091528120805486929061098f908490612852565b90915550505b6109a0868686611d34565b50600195945050505050565b6109b4611bfc565b6109bd33611c8a565b336109c88282611dcf565b6005546109ec9073ffffffffffffffffffffffffffffffffffffffff168284611dd9565b8073ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a3491815260200190565b60405180910390a25050565b610a48611bfc565b610a5133611c8a565b335f5b600d54811015610b5c575f600d8281548110610a7257610a7261279a565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600e9091526040822090925090610aaf8386610ba8565b90508015610b515773ffffffffffffffffffffffffffffffffffffffff85165f908152600283016020526040812055610ae9838683611dd9565b8273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f540798df468d7b23d11f156fdb954cb19ad414d150722a7b6d55ba369dea792e83604051610b4891815260200190565b60405180910390a35b505050600101610a54565b5050565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161075c918590610ba390869061283f565b611a3a565b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600e602090815260408083209385168352600384019091528120549091908290610bed866119bb565b610bf79190612852565b73ffffffffffffffffffffffffffffffffffffffff85165f90815260028401602090815260408083205460039092529091205491925090670de0b6b3a764000090610c43908490612865565b610c4d919061287c565b610c57919061283f565b95945050505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f44796e616d69635265776172644661726d3a20494e56414c49445f43414e444960448201527f444154450000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600a54600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040519081527fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369060200160405180910390a1565b600d8181548110610d90575f80fd5b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b5f6006544210610dc7575060065490565b504290565b610dd4611bfc565b610ddd33611c8a565b33610de88282611eb2565b600554610e0d9073ffffffffffffffffffffffffffffffffffffffff16823085611f24565b8073ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d83604051610a3491815260200190565b600180546106d1906127c7565b610e6a611aa8565b73ffffffffffffffffffffffffffffffffffffffff8116610eb7576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f198db6e425fb8aafd1823c6ca50be2d51e5764571a5ae0f0f21c6812e45def0b906020015b60405180910390a150565b335f81815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161075c918590610ba3908690612852565b5f610f7d611bfc565b610f8633611c8a565b82610f9081611c8a565b610f9b338585611d34565b5060019392505050565b5f8711611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44796e616d69635265776172644661726d3a20494e56414c49445f445552415460448201527f494f4e000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600754156110c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f44796e616d69635265776172644661726d3a20414c52454144595f494e49544960448201527f414c495a4544000000000000000000000000000000000000000000000000000060648201526084016107fc565b60078790555f6110d58486836128ff565b5060016110e38284836128ff565b506005805473ffffffffffffffffffffffffffffffffffffffff808b167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560098054898416908316179055600b80549288169290911691909117905561115a670de0b6b3a764000061dead611eb2565b5050505050505050565b61116c611f88565b611174611bfc565b828114611203576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f44796e616d69635265776172644661726d3a2041525241595f4c454e4754485f60448201527f4d49534d4154434800000000000000000000000000000000000000000000000060648201526084016107fc565b600d548314611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f44796e616d69635265776172644661726d3a20544f4b454e5f4c454e4754485f60448201527f4d49534d4154434800000000000000000000000000000000000000000000000060648201526084016107fc565b61129e828261202f565b5f5b838110156113f657600d81815481106112bb576112bb61279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff168585838181106112ee576112ee61279a565b90506020020160208101906113039190612426565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f44796e616d69635265776172644661726d3a20494e56414c49445f544f4b454e60448201527f5f4f52444552000000000000000000000000000000000000000000000000000060648201526084016107fc565b6113ee8585838181106113bb576113bb61279a565b90506020020160208101906113d09190612426565b8484848181106113e2576113e261279a565b90506020020135612099565b6001016112a0565b504260088190556007546114099161283f565b60065550505050565b61141a611aa8565b73ffffffffffffffffffffffffffffffffffffffff8116611467576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f35b5da26a401fdbef2e1cfabeec2c10a6121d56f136be501a393c284cdd1af5890602001610f26565b6114e2611aa8565b600554829073ffffffffffffffffffffffffffffffffffffffff90811690821603611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f44796e616d69635265776172644661726d3a205354414b455f544f4b454e000060448201526064016107fc565b5f5b600d548110156116e857600d81815481106115885761158861279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908516036116e0575f6115c08561dead610ba8565b905080841115611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a204e4f545f454e4f5547485f524560448201527f574152445300000000000000000000000000000000000000000000000000000060648201526084016107fc565b61165a611bfc565b61166561dead611c8a565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600e6020908152604080832061dead84526002019091529020546116a5908590612852565b73ffffffffffffffffffffffffffffffffffffffff86165f908152600e6020908152604080832061dead8452600201909152902055506116e8565b60010161156b565b5060095461170e90829073ffffffffffffffffffffffffffffffffffffffff1684611dd9565b8073ffffffffffffffffffffffffffffffffffffffff167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288360405161175691815260200190565b60405180910390a2505050565b61176b611aa8565b5f81116117fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f44796e616d69635265776172644661726d3a20494e56414c49445f445552415460448201527f494f4e000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b600654421161188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f44796e616d69635265776172644661726d3a204f4e474f494e475f444953545260448201527f49425554494f4e0000000000000000000000000000000000000000000000000060648201526084016107fc565b60078190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d390602001610f26565b600d546060905f9067ffffffffffffffff8111156118e0576118e061276d565b604051908082528060200260200182016040528015611909578160200160208202803683370190505b5090505f5b600d5481101561199257600d818154811061192b5761192b61279a565b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106119655761196561279a565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161190e565b50919050565b335f908152600360205260409020546119b0816109ac565b6119b8610a40565b50565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600e6020526040812060085482906119ec610db6565b6119f69190612852565b90505f600254670de0b6b3a7640000845f015484611a149190612865565b611a1e9190612865565b611a28919061287c565b9050808360010154610c57919061283f565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60095473ffffffffffffffffffffffffffffffffffffffff163314611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f44796e616d69635265776172644661726d3a20494e56414c49445f4f574e455260448201526064016107fc565b565b73ffffffffffffffffffffffffffffffffffffffff8116611b78576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b600d54811015610b5c57600d8181548110611b9757611b9761279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff90811690831603611bf4576040517fe4ed28f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611b7a565b5f5b600d54811015611c7c575f600d8281548110611c1c57611c1c61279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff169050611c48816119bb565b73ffffffffffffffffffffffffffffffffffffffff9091165f908152600e6020526040902060019081019190915501611bfe565b50611c85610db6565b600855565b5f5b600d54811015610b5c575f600d8281548110611caa57611caa61279a565b5f91825260208083209091015473ffffffffffffffffffffffffffffffffffffffff16808352600e9091526040909120909150611ce78285610ba8565b73ffffffffffffffffffffffffffffffffffffffff85165f908152600283016020908152604080832093909355600180850154600390950190915291902091909155919091019050611c8c565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260036020526040902054611d64908290612852565b73ffffffffffffffffffffffffffffffffffffffff8481165f8181526003602090815260408083209590955592861680825290849020805486019055925184815290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a9b565b610b5c8282612243565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052611ead9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526122d6565b505050565b81600254611ec0919061283f565b60025573ffffffffffffffffffffffffffffffffffffffff81165f818152600360209081526040808320805487019055518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f829085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611e2b565b50505050565b600b5473ffffffffffffffffffffffffffffffffffffffff163314611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f44796e616d69635265776172644661726d3a20494e56414c49445f4d414e414760448201527f455200000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b5f5b81811015612066575f83838381811061204c5761204c61279a565b90506020020135111561205e57505050565b600101612031565b506040517f3fb087f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a282612375565b73ffffffffffffffffffffffffffffffffffffffff82165f908152600e602052604090206006548391904210156121af578054831015612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f44796e616d69635265776172644661726d3a20524154455f43414e545f44454360448201527f524541534500000000000000000000000000000000000000000000000000000060648201526084016107fc565b5f426006546121739190612852565b82549091505f906121849083612865565b600b549091506121ac90859073ffffffffffffffffffffffffffffffffffffffff1683611dd9565b50505b8281556007545f906121c2908590612865565b600b549091506121eb90849073ffffffffffffffffffffffffffffffffffffffff163084611f24565b604080518581526020810183905273ffffffffffffffffffffffffffffffffffffffff8716917f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474910160405180910390a25050505050565b60028054839003905573ffffffffffffffffffffffffffffffffffffffff81165f9081526003602052604090205461227c908390612852565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600360205260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f189086815260200190565b5f8060205f8451602086015f885af1806122f5576040513d5f823e3d81fd5b50505f513d9150811561230c578060011415612326565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611f82576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107fc565b5f5b600d548110156123cb57600d81815481106123945761239461279a565b5f9182526020909120015473ffffffffffffffffffffffffffffffffffffffff908116908316036123c3575050565b600101612377565b506040517f8698bf3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114612421575f80fd5b919050565b5f60208284031215612436575f80fd5b61243f826123fe565b9392505050565b602080825282518282018190525f918401906040840190835b8181101561247d57835183526020938401939092019160010161245f565b509095945050505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f80604083850312156124ec575f80fd5b6124f5836123fe565b946020939093013593505050565b5f805f60608486031215612515575f80fd5b61251e846123fe565b925061252c602085016123fe565b929592945050506040919091013590565b5f6020828403121561254d575f80fd5b5035919050565b5f8060408385031215612565575f80fd5b61256e836123fe565b915061257c602084016123fe565b90509250929050565b5f8083601f840112612595575f80fd5b50813567ffffffffffffffff8111156125ac575f80fd5b6020830191508360208285010111156125c3575f80fd5b9250929050565b5f805f805f805f8060c0898b0312156125e1575f80fd5b6125ea896123fe565b9750602089013596506125ff60408a016123fe565b955061260d60608a016123fe565b9450608089013567ffffffffffffffff811115612628575f80fd5b6126348b828c01612585565b90955093505060a089013567ffffffffffffffff811115612653575f80fd5b61265f8b828c01612585565b999c989b5096995094979396929594505050565b5f8083601f840112612683575f80fd5b50813567ffffffffffffffff81111561269a575f80fd5b6020830191508360208260051b85010111156125c3575f80fd5b5f805f80604085870312156126c7575f80fd5b843567ffffffffffffffff8111156126dd575f80fd5b6126e987828801612673565b909550935050602085013567ffffffffffffffff811115612708575f80fd5b61271487828801612673565b95989497509550505050565b602080825282518282018190525f918401906040840190835b8181101561247d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101612739565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c908216806127db57607f821691505b602082108103611992577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561076057610760612812565b8181038181111561076057610760612812565b808202811582820484141761076057610760612812565b5f826128af577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b601f821115611ead57805f5260205f20601f840160051c810160208510156128d95750805b601f840160051c820191505b818110156128f8575f81556001016128e5565b5050505050565b67ffffffffffffffff8311156129175761291761276d565b61292b8361292583546127c7565b836128b4565b5f601f84116001811461297b575f85156129455750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556128f8565b5f838152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08716915b828110156129c857868501358255602094850194600190920191016129a8565b5086821015612a03577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b018355505050505056fea2646970667358221220193db1e50b18e8f491ff2df84acc986d4aabf5810f8182f61b04f15f52412d6964736f6c634300081a0033