[ { "inputs": [ { "internalType": "address", "name": "xGrailToken_", "type": "address" }, { "internalType": "uint256", "name": "startTime_", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "CycleDividendsPercentUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "DistributedTokenDisabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "DistributedTokenEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" } ], "name": "DistributedTokenRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DividendsAddedToPending", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "DividendsCollected", "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": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "UserUpdated", "type": "event" }, { "inputs": [], "name": "DEFAULT_CYCLE_DIVIDENDS_PERCENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_CYCLE_DIVIDENDS_PERCENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_DISTRIBUTED_TOKENS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_CYCLE_DIVIDENDS_PERCENT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "addDividendsToPending", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "allocate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentCycleStartTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cycleDurationSeconds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "userAddress", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "deallocate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "disableDistributedToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "distributedToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "distributedTokensLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "dividendsInfo", "outputs": [ { "internalType": "uint256", "name": "currentDistributionAmount", "type": "uint256" }, { "internalType": "uint256", "name": "currentCycleDistributedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "pendingAmount", "type": "uint256" }, { "internalType": "uint256", "name": "distributedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "accDividendsPerShare", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "internalType": "uint256", "name": "cycleDividendsPercent", "type": "uint256" }, { "internalType": "bool", "name": "distributionDisabled", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "emergencyWithdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "enableDistributedToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "harvestAllDividends", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "harvestDividends", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "isDistributedToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "massUpdateDividendsInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "nextCycleStartTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "userAddress", "type": "address" } ], "name": "pendingDividendsAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenToRemove", "type": "address" } ], "name": "removeTokenFromDistributedTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalAllocation", "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": "updateCurrentCycleStartTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "percent", "type": "uint256" } ], "name": "updateCycleDividendsPercent", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "updateDividendsInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "users", "outputs": [ { "internalType": "uint256", "name": "pendingDividends", "type": "uint256" }, { "internalType": "uint256", "name": "rewardDebt", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "usersAllocation", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "xGrailToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60a060405262093a806008553480156200001857600080fd5b50604051620031ce380380620031ce833981810160405260408110156200003e57600080fd5b50805160209091015160006200005362000108565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556001600160a01b038216620000ec576040805162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015290519081900360640190fd5b60609190911b6001600160601b0319166080526009556200010c565b3390565b60805160601c61309a62000134600039806108085280610dd85280610ebd525061309a6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c806379203dc41161012a578063d2af0b94116100bd578063de9d477e1161008c578063eb141dcf11610071578063eb141dcf146106f0578063f2fde38b146106f8578063f494ec5a1461072b5761020b565b8063de9d477e1461068a578063e895cca3146106bd5761020b565b8063d2af0b941461066a578063d637ff8314610672578063dd1917191461067a578063ddd48f47146106825761020b565b806393c563af116100f957806393c563af146105c9578063b989185a146105fc578063bd394a8d1461062f578063c4d3e083146106375761020b565b806379203dc4146105a9578063799fb965146105b15780638da5cb5b146105b9578063911c935c146105c15761020b565b8063549230c9116101a25780635e80536a116101715780635e80536a146105125780636e34b818146105665780636ff1c9bc1461056e578063715018a6146105a15761020b565b8063549230c9146103e55780635726d26e146104775780635b2acf171461047f5780635d9b436a146104f55761020b565b80633999a4e5116101de5780633999a4e51461036b57806339f7df5f146103a457806346fa466a146103ac57806347b32f28146103dd5761020b565b8063034d7fcb146102105780631c75e369146102575780632d9c97a4146102eb57806335d2506d14610338575b600080fd5b6102436004803603602081101561022657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610764565b604080519115158252519081900360200190f35b6102e96004803603606081101561026d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156102aa57600080fd5b8201836020820111156102bc57600080fd5b803590602001918460018302840111640100000000831117156102de57600080fd5b509092509050610779565b005b6103266004803603604081101561030157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166108e0565b60408051918252519081900360200190f35b6102e96004803603602081101561034e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a5e565b6102e96004803603604081101561038157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610acc565b6102e9610d20565b6103b4610dd6565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102e9610dfa565b6102e9600480360360608110156103fb57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561043857600080fd5b82018360208201111561044a57600080fd5b8035906020019184600183028401116401000000008311171561046c57600080fd5b509092509050610e2e565b6102e9610f7c565b6104b26004803603602081101561049557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f9f565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c0840152151560e083015251908190036101000190f35b6103b46004803603602081101561050b57600080fd5b5035610fe5565b61054d6004803603604081101561052857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661105b565b6040805192835260208301919091528051918290030190f35b61032661107f565b6102e96004803603602081101561058457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611085565b6102e961129c565b6103266113b3565b6103266113b9565b6103b46113bf565b6103266113db565b6102e9600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113e0565b6102e96004803603602081101561061257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661161c565b610326611747565b6103266004803603602081101561064d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611758565b61032661176a565b61032661176f565b6102e9611788565b6103266118d6565b6102e9600480360360208110156106a057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166118dc565b6102e9600480360360208110156106d357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a62565b610326611c0e565b6102e96004803603602081101561070e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611c13565b6102e96004803603604081101561074157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611db4565b6000610771600283611f88565b90505b919050565b600260015414156107eb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461087e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612ef8602d913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600660205260408120546108ae9085611faa565b905060006108c785600754611faa90919063ffffffff16565b90506108d486838361201e565b50506001805550505050565b6000600754600014156108f557506000610a58565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602081905260408220908101546005820154919290919061093387612186565b905061093d61176f565b6109456121d8565b11156109bd5761098861098160075461097b662386f26fc10000610975866109758961096f61176f565b906121dc565b90612253565b906122c6565b8490611faa565b925061099261176f565b91506109ba60085461097b606461097b8860060154896002015461225390919063ffffffff16565b90505b6109e161098160075461097b662386f26fc10000610975866109758961096f6121d8565b73ffffffffffffffffffffffffffffffffffffffff8881166000908152600560209081526040808320938b168352928152828220805460019091015460069092529290912054929550610a5192610a4b919061096f90670de0b6b3a76400009061097b908a612253565b90611faa565b9450505050505b92915050565b80610a6a600282611f88565b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612e036030913960400191505060405180910390fd5b610ac882612347565b5050565b60026001541415610b3e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600155604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff8516916370a0823191602480820192602092909190829003018186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d6020811015610bdd57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff84166000818152600460205260409020919250610c13903330866124ff565b6000610cb2838673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c8057600080fd5b505afa158015610c94573d6000803e3d6000fd5b505050506040513d6020811015610caa57600080fd5b5051906121dc565b6002830154909150610cc49082611faa565b600283015560408051828152905173ffffffffffffffffffffffffffffffffffffffff8716917f28fd761b1b374f526d6eba05c1081e7547a7a6b978161fac6bded2f1dc7a9952919081900360200190a2505060018055505050565b60026001541415610d9257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001819055506000610da6600261259a565b905060005b81811015610dce57610dc6610dc16002836125a5565b6125b1565b600101610dab565b505060018055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e06600261259a565b905060005b81811015610ac857610e26610e216002836125a5565b612347565b600101610e0b565b60026001541415610ea057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001553373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610f33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612ef8602d913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260066020526040812054610f6390856121dc565b905060006108c7856007546121dc90919063ffffffff16565b6000610f8661176f565b905080610f916121d8565b10610f9c5760098190555b50565b6004602081905260009182526040909120805460018201546002830154600384015494840154600585015460068601546007909601549496939592949192909160ff1688565b600081610ff2600261259a565b8110611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612ecb602d913960400191505060405180910390fd5b6110546002846125a5565b9392505050565b60056020908152600092835260408084209091529082529020805460019091015482565b61271081565b600260015414156110f757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556111046126b3565b73ffffffffffffffffffffffffffffffffffffffff166111226113bf565b73ffffffffffffffffffffffffffffffffffffffff16146111a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561120d57600080fd5b505afa158015611221573d6000803e3d6000fd5b505050506040513d602081101561123757600080fd5b5051905080611291576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180612fda6028913960400191505060405180910390fd5b610dce8233836126b7565b6112a46126b3565b73ffffffffffffffffffffffffffffffffffffffff166112c26113bf565b73ffffffffffffffffffffffffffffffffffffffff161461134457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60075481565b60095481565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b606481565b6113e86126b3565b73ffffffffffffffffffffffffffffffffffffffff166114066113bf565b73ffffffffffffffffffffffffffffffffffffffff161461148857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020600581015415806114c25750600781015460ff165b611517576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180612e946037913960400191505060405180910390fd5b600a611523600261259a565b10611579576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612dd16032913960400191505060405180910390fd5b60058101546115905761158a6121d8565b60058201555b60068101546115a157606460068201555b6007810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556115d66002836127a8565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907fefa645a0ab6703d2f2e7f177f50d16c90ce1c71e317bb91cbbdab430e0a3968290600090a25050565b6002600154141561168e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600181905561169f9082611f88565b6117375773ffffffffffffffffffffffffffffffffffffffff811660009081526004602052604090206003015461173757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f686172766573744469766964656e64733a20696e76616c696420746f6b656e00604482015290519081900360640190fd5b611740816125b1565b5060018055565b6000611753600261259a565b905090565b60066020526000908152604090205481565b600a81565b6000611753600854600954611faa90919063ffffffff16565b600260015414156117fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026001556118076126b3565b73ffffffffffffffffffffffffffffffffffffffff166118256113bf565b73ffffffffffffffffffffffffffffffffffffffff16146118a757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60005b6118b4600261259a565b811015611740576118ce6118c96002836125a5565b611085565b6001016118aa565b60085490565b6118e46126b3565b73ffffffffffffffffffffffffffffffffffffffff166119026113bf565b73ffffffffffffffffffffffffffffffffffffffff161461198457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020600781015460ff1680156119bc57508054155b611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180612f6c6033913960400191505060405180910390fd5b611a1c6002836127ca565b5060405173ffffffffffffffffffffffffffffffffffffffff8316907f17cd3cc84c669de8c5c4218fd1d9814e647b547d1e7f59287ea6989aa4e032c290600090a25050565b611a6a6126b3565b73ffffffffffffffffffffffffffffffffffffffff16611a886113bf565b73ffffffffffffffffffffffffffffffffffffffff1614611b0a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600460205260409020600581015415801590611b475750600781015460ff16155b611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603981526020018061302c6039913960400191505060405180910390fd5b6007810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405173ffffffffffffffffffffffffffffffffffffffff8316907f961f10509197d967c55f8720c2b6a80d48433ef36db1b12cf3bf6bcf66da434690600090a25050565b600181565b611c1b6126b3565b73ffffffffffffffffffffffffffffffffffffffff16611c396113bf565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612e6e6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611dbc6126b3565b73ffffffffffffffffffffffffffffffffffffffff16611dda6113bf565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b612710811115611eb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180612f9f603b913960400191505060405180910390fd5b6001811015611f11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180612e33603b913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526004602090815260409182902060068101805490869055835181815292830186905283519194909390927f82ebda75a31dc518c1b711aab73005a4dddecaf297cee2cf545e72b6a799eb51929081900390910190a250505050565b60006110548373ffffffffffffffffffffffffffffffffffffffff84166127ec565b60008282018381101561105457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600660205260408120549061204f600261259a565b905060005b818110156121155760006120696002836125a5565b905061207481612347565b73ffffffffffffffffffffffffffffffffffffffff8082166000818152600560209081526040808320948c168352938152838220928252600490819052928120909201546001820154919290916120db9061096f670de0b6b3a764000061097b8b87612253565b83549091506120ea9082611faa565b8355612102670de0b6b3a764000061097b8b85612253565b6001938401555050919091019050612054565b5073ffffffffffffffffffffffffffffffffffffffff85166000818152600660209081526040918290208790556007869055815185815290810187905281517f97ce9d7086176d6da45e4e7999788176e2629a7591ffe505b0c1b13fe8052cc6929181900390910190a25050505050565b6000612193600283611f88565b61219f57506000610774565b60085473ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054610771919061097b906064612253565b4290565b60008282111561224d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261226257506000610a58565b8282028284828161226f57fe5b0414611054576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f4b6021913960400191505060405180910390fd5b600080821161233657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161233f57fe5b049392505050565b60006123516121d8565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460205260409020909150612381610f7c565b6005810154600482015481841161239b5750505050610f9c565b60075415806123ab575060095484105b156123bb57505060050155610f9c565b82546001840154600954841015612470576007546123f1906109819061097b662386f26fc100006109758661096f896064612253565b600786015490935060ff1661244b57600385015461240f9083611faa565b600386015560028501546006860154612431906127109061097b908490612253565b808755925061244081846121dc565b600287015550612467565b600385015461245a9083611faa565b6003860155600080865591505b50600954925060005b600061248861247e89612186565b61097589886121dc565b9050612495836064612253565b61249f8383611faa565b11156124b7576124b48261096f856064612253565b90505b6124c18282611faa565b60018701556007546124e9906124e29061097b84662386f26fc10000612253565b8590611faa565b6004870155505050506005909101919091555050565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612594908590612804565b50505050565b6000610771826128dc565b600061105483836128e0565b6125ba81612347565b73ffffffffffffffffffffffffffffffffffffffff81166000818152600560209081526040808320338085529083528184209484526004808452828520015490845260069092528220546001840154919290916126339061262b9061096f670de0b6b3a764000061097b8789612253565b855490611faa565b60008555905061264f670de0b6b3a764000061097b8486612253565b600185015561265f8533836126b7565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff87169133917f45a4759e6c135135eaba72e35bf196d59fd6fe17e1772d731f05dc25ec5a96a29181900360200190a35050505050565b3390565b80156127a35760008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561272657600080fd5b505afa15801561273a573d6000803e3d6000fd5b505050506040513d602081101561275057600080fd5b50519050808211156127825761277d73ffffffffffffffffffffffffffffffffffffffff8516848361295e565b612594565b61259473ffffffffffffffffffffffffffffffffffffffff8516848461295e565b505050565b60006110548373ffffffffffffffffffffffffffffffffffffffff84166129eb565b60006110548373ffffffffffffffffffffffffffffffffffffffff8416612a35565b60009081526001919091016020526040902054151590565b6000612866826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612b199092919063ffffffff16565b8051909150156127a35780806020019051602081101561288557600080fd5b50516127a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613002602a913960400191505060405180910390fd5b5490565b8154600090821061293c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612daf6022913960400191505060405180910390fd5b82600001828154811061294b57fe5b9060005260206000200154905092915050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526127a3908490612804565b60006129f783836127ec565b612a2d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a58565b506000610a58565b60008181526001830160205260408120548015612b0f5783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110612a8657fe5b9060005260206000200154905080876000018481548110612aa357fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612ad357fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610a58565b6000915050610a58565b6060612b288484600085612b30565b949350505050565b606082471015612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612f256026913960400191505060405180910390fd5b612b9485612cea565b612bff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310612c6857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612c2b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612cca576040519150601f19603f3d011682016040523d82523d6000602084013e612ccf565b606091505b5091509150612cdf828286612cf0565b979650505050505050565b3b151590565b60608315612cff575081611054565b825115612d0f5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d73578181015183820152602001612d5b565b50505050905090810190601f168015612da05780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473656e61626c654469737472696275746564546f6b656e3a20746f6f206d616e79206469737472696275746564546f6b656e7376616c69646174654469737472696275746564546f6b656e733a20746f6b656e20646f6573206e6f74206578697374737570646174654379636c654469766964656e647350657263656e743a2070657263656e74206d7573746e277420657863656564206d696e696d756d4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373656e61626c654469737472696275746564546f6b656e3a20416c726561647920656e61626c6564206469766964656e647320746f6b656e76616c69646174654469737472696275746564546f6b656e73496e6465783a20696e646578206578697374733f78477261696c546f6b656e4f6e6c793a2063616c6c65722073686f756c642062652058477261696c546f6b656e416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7772656d6f7665546f6b656e46726f6d4469737472696275746564546f6b656e733a2063616e6e6f742062652072656d6f7665647570646174654379636c654469766964656e647350657263656e743a2070657263656e74206d7573746e277420657863656564206d6178696d756d656d657267656e637957697468647261773a20746f6b656e2062616c616e6365206973206e756c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656464697361626c654469737472696275746564546f6b656e3a20416c72656164792064697361626c6564206469766964656e647320746f6b656ea26469706673582212202576472124c385712432ff60d6681db5a1b69a6f30b01d69446a0cd11f612feb64736f6c63430007060033000000000000000000000000f192897fc39bf766f1011a858de964457bca58320000000000000000000000000000000000000000000000000000000066140670