2.6k txs
7.4k calls
constructor
constructor()
functions
adminWithdrawAddress
viewfunction adminWithdrawAddress() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getAllPoolsInfo
viewfunction getAllPoolsInfo() view returns (tuple[] allPoolsInfo)
getAllPoolsPendingRewards
viewfunction getAllPoolsPendingRewards(address user) view returns (uint256[] rewardsByPool, uint256 totalPendingRewards)
getPendingRewards
viewfunction getPendingRewards(uint16 pid, address userAddress) view returns (uint256)
getPoolInfo
viewfunction getPoolInfo(uint16 pid) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getTotalPoolsCount
viewfunction getTotalPoolsCount() view returns (uint16)
getTotalRewardedAmount
viewfunction getTotalRewardedAmount() view returns (uint256)
getTotalStakedAmount
viewfunction getTotalStakedAmount() view returns (uint256)
getUserAllPoolsInfo
viewfunction getUserAllPoolsInfo(address user) view returns (tuple[] userAllPoolsInfo)
getUserInfo
viewfunction getUserInfo(uint16 pid, address user) view returns (tuple)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
PRECISION
viewfunction PRECISION() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
adminWithdrawETH
nonpayablefunction adminWithdrawETH()
adminWithdrawToken
nonpayablefunction adminWithdrawToken(address token)
claimAll
nonpayablefunction claimAll()
claimSingle
nonpayablefunction claimSingle(uint16 pid)
deposit
nonpayablefunction deposit(uint16 pid, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAdminWithdrawAddress
nonpayablefunction setAdminWithdrawAddress(address _adminWithdrawAddress)
setupPool
nonpayablefunction setupPool(uint256 startTime, uint256 endTime, uint256 tokenEmissionRate, uint256 maxTotalReward, uint256 minStakePeriod, uint256 minAmount, uint256 totalStakeLimit, address stakeToken, address rewardToken)
unpause
nonpayablefunction unpause()
updatePool
nonpayablefunction updatePool(uint16 pid, uint256 newMinStakePeriod, uint256 newMinAmount, uint256 newTotalStakeLimit)
updatePoolInfo
nonpayablefunction updatePoolInfo(uint16 pid)
withdraw
nonpayablefunction withdraw(uint16 pid)
events
Claim
event Claim(uint256 indexed pid, address indexed user, address token, uint256 amount)
ClaimAll
event ClaimAll(address indexed user, address token, uint256 amount)
Deposit
event Deposit(uint256 indexed pid, address indexed user, address token, uint256 amount)
Paused
event Paused(address account)
PoolCreated
event PoolCreated(uint256 indexed pid, uint256 startTime, uint256 endTime, uint256 tokenEmissionRate, uint256 maxTotalReward, uint256 minStakePeriod, uint256 minAmount, uint256 totalStakeLimit, address stakeToken, address rewardToken)
PoolUpdated
event PoolUpdated(uint256 indexed pid, uint256 newMinStakePeriod, uint256 newMinAmount, uint256 newTotalStakeLimit)
ReceiveETH
event ReceiveETH(address indexed user, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TokenRecovered
event TokenRecovered(address beneficiary, address token, uint256 amount)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(uint256 indexed pid, address indexed user, address token, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AmountIsZero
error AmountIsZero()
CannotWithdrawBeforeMinStakePeriod
error CannotWithdrawBeforeMinStakePeriod()
DifferentRewardToken
error DifferentRewardToken(address token)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
FailedToWithdrawEth
error FailedToWithdrawEth(address beneficiary, uint256 amount)
InsufficientAmount
error InsufficientAmount(uint256 depositAmount)
InvalidEndDate
error InvalidEndDate()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
MaximumStakeAmountReached
error MaximumStakeAmountReached(uint256 stakeLimit)
PoolDoesNotExist
error PoolDoesNotExist(uint256 poolId)
PoolEnded
error PoolEnded()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RewardAmountIsZero
error RewardAmountIsZero()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StartDateIsInPast
error StartDateIsInPast()
TokenNullAddress
error TokenNullAddress()
creation bytecode
0x60806040526003805461ffff1916600117905534801561001e57600080fd5b506001805460ff19168155600255610037600033610068565b506100627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610068565b50610114565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661010a576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556100c23390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161010e565b5060005b92915050565b612bbc806101236000396000f3fe6080604052600436106101e75760003560e01c80638c39c36611610102578063c573692f11610095578063ed84fc9111610064578063ed84fc91146105f0578063f282c3af14610605578063f948d30f14610633578063fee9d13b1461065357600080fd5b8063c573692f1461055a578063d1058e5914610587578063d547741f1461059c578063e63ab1e9146105bc57600080fd5b8063a217fddf116100d1578063a217fddf146104e7578063a93406fa146104fc578063aaf5eb681461051c578063b4e614791461053857600080fd5b80638c39c3661461045a57806391d148541461049257806395be2db2146104b25780639bfb97d1146104d257600080fd5b80633d9728391161017a5780638456cb59116101495780638456cb59146103dd578063855c5d46146103f2578063859fe6c71461041a5780638793b8381461043a57600080fd5b80633d972839146103705780633f4ba83a14610390578063542472d1146103a55780635c975abb146103c557600080fd5b80632f2ff15d116101b65780632f2ff15d146102ee5780633545b0fe1461030e57806336568abe1461033b57806338adb6f01461035b57600080fd5b8063012eeb2f1461022857806301ffc9a71461025e578063233f8b0a1461028e578063248a9ca3146102b057600080fd5b366102235760405134815233907f830d2d700a97af574b186c80d40429385d24241565b08a7c559ba283a964d9b19060200160405180910390a2005b600080fd5b34801561023457600080fd5b50610248610243366004612680565b610673565b604051610255919061269b565b60405180910390f35b34801561026a57600080fd5b5061027e6102793660046126fd565b6107b7565b6040519015158152602001610255565b34801561029a57600080fd5b506102ae6102a9366004612739565b6107ee565b005b3480156102bc57600080fd5b506102e06102cb366004612772565b60009081526020819052604090206001015490565b604051908152602001610255565b3480156102fa57600080fd5b506102ae61030936600461278b565b61091e565b34801561031a57600080fd5b5061032e6103293660046127b7565b610949565b60405161025591906127e1565b34801561034757600080fd5b506102ae61035636600461278b565b6109bf565b34801561036757600080fd5b506004546102e0565b34801561037c57600080fd5b506102ae61038b366004612802565b6109f7565b34801561039c57600080fd5b506102ae610c7b565b3480156103b157600080fd5b506102ae6103c0366004612680565b610cad565b3480156103d157600080fd5b5060015460ff1661027e565b3480156103e957600080fd5b506102ae610cdb565b3480156103fe57600080fd5b50610407610d0d565b60405161ffff9091168152602001610255565b34801561042657600080fd5b506102ae61043536600461281d565b610d28565b34801561044657600080fd5b506102e06104553660046127b7565b611059565b34801561046657600080fd5b5060095461047a906001600160a01b031681565b6040516001600160a01b039091168152602001610255565b34801561049e57600080fd5b5061027e6104ad36600461278b565b61125f565b3480156104be57600080fd5b506102ae6104cd366004612802565b611288565b3480156104de57600080fd5b506005546102e0565b3480156104f357600080fd5b506102e0600081565b34801561050857600080fd5b506102ae610517366004612802565b6113e2565b34801561052857600080fd5b506102e0670de0b6b3a764000081565b34801561054457600080fd5b5061054d6114ed565b60405161025591906128e2565b34801561056657600080fd5b5061057a610575366004612802565b61165b565b6040516102559190612926565b34801561059357600080fd5b506102ae61170e565b3480156105a857600080fd5b506102ae6105b736600461278b565b61197d565b3480156105c857600080fd5b506102e07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105fc57600080fd5b506102ae6119a2565b34801561061157600080fd5b50610625610620366004612680565b611a95565b604051610255929190612935565b34801561063f57600080fd5b506102ae61064e366004612982565b611b64565b34801561065f57600080fd5b506102ae61066e366004612680565b611e9a565b60035460609060009061068c9060019061ffff16612a0f565b90508061ffff1667ffffffffffffffff8111156106ab576106ab612a29565b60405190808252806020026020018201604052801561070057816020015b6106ed60405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816106c95790505b50915060005b8161ffff168161ffff1610156107b05760076000610725836001612a3f565b61ffff1661ffff1681526020019081526020016000206000856001600160a01b03166001600160a01b031681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050838261ffff168151811061079d5761079d612a59565b6020908102919091010152600101610706565b5050919050565b60006001600160e01b03198216637965db0b60e01b14806107e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006107f981611f8e565b61ffff8516801580610811575060035461ffff168110155b1561083757604051631e657b1d60e01b8152600481018290526024015b60405180910390fd5b61ffff861660009081526006602052604090206001810154421061086e57604051632e95ae4160e21b815260040160405180910390fd5b8515801590610881575085816003015414155b1561088e57600381018690555b84158015906108a1575084816004015414155b156108ae57600481018590555b83158015906108c1575083816005015414155b156108ce57600581018490555b604080518781526020810187905290810185905261ffff8816907fb0a2ded49817748754bcca0474b24011f01d4574dd5c40e14197ffa2e6540fef9060600160405180910390a250505050505050565b60008281526020819052604090206001015461093981611f8e565b6109438383611f98565b50505050565b61096d60405180606001604052806000815260200160008152602001600081525090565b5061ffff821660009081526007602090815260408083206001600160a01b0385168452825291829020825160608101845281548152600182015492810192909252600201549181019190915292915050565b6001600160a01b03811633146109e85760405163334bd91960e11b815260040160405180910390fd5b6109f2828261202a565b505050565b6109ff612095565b610a076120bd565b61ffff8116801580610a1f575060035461ffff168110155b15610a4057604051631e657b1d60e01b81526004810182905260240161082e565b61ffff82166000908152600660209081526040808320600783528184203380865293529220600183015491929142108015610a8d575081600301548160020154610a8a9190612a6f565b42105b15610aab57604051637fbd233560e01b815260040160405180910390fd5b610ab4856113e2565b80548015610c185760008260010154610ada838660060154670de0b6b3a76400006120e1565b610ae49190612a82565b6000808555600185018190556008860180549293508492909190610b09908490612a82565b925050819055508160046000828254610b229190612a82565b9250508190555080846009016000828254610b3d9190612a6f565b925050819055508060056000828254610b569190612a6f565b9091555050600b840154600a8501546001600160a01b03908116911614610bb257600b840154610b91906001600160a01b03163087846121a6565b50600a840154610bac906001600160a01b03163087856121a6565b50610bd7565b600b840154610bd5906001600160a01b03163087610bd08587612a6f565b6121a6565b505b600b8401546040516001600160a01b038088169261ffff8b1692600080516020612b6783398151915292610c0e9216908690612a95565b60405180910390a3505b600a8301546040516001600160a01b038087169261ffff8a16927ffeb2000dca3e617cd6f3a8bbb63014bb54a124aac6ccbf73ee7229b4cd01f12092610c619216908690612a95565b60405180910390a35050505050610c786001600255565b50565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ca581611f8e565b610c786122f6565b6000610cb881611f8e565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d0581611f8e565b610c78612348565b600354600090610d239060019061ffff16612a0f565b905090565b610d30612095565b610d386120bd565b61ffff8216801580610d50575060035461ffff168110155b15610d7157604051631e657b1d60e01b81526004810182905260240161082e565b81600003610d92576040516310eb483f60e21b815260040160405180910390fd5b61ffff8316600090815260066020526040902060018101544210610dc957604051632e95ae4160e21b815260040160405180910390fd5b60008160050154118015610def57508060050154838260080154610ded9190612a6f565b115b15610e15578060050154604051638c5402b560e01b815260040161082e91815260200190565b60008160040154118015610e2c5750806004015483105b15610e4d576040516377b8dde360e01b81526004810184905260240161082e565b610e56846113e2565b61ffff84166000908152600760209081526040808320338085529252822080549192909115610ede578160010154610e9f83600001548660060154670de0b6b3a76400006120e1565b610ea99190612a82565b905080846009016000828254610ebf9190612a6f565b925050819055508060056000828254610ed89190612a6f565b90915550505b85826000016000828254610ef29190612a6f565b909155505081546006850154610f119190670de0b6b3a76400006120e1565b6001830155426002830155600884018054879190600090610f33908490612a6f565b925050819055508560046000828254610f4c9190612a6f565b90915550508015610fb257600b840154610f71906001600160a01b03163085846121a6565b50600b8401546040516001600160a01b038086169261ffff8b1692600080516020612b6783398151915292610fa99216908690612a95565b60405180910390a35b600a840154600090610fcf906001600160a01b031685308a6121a6565b9050808714610ff4576040516377b8dde360e01b81526004810182905260240161082e565b600a8501546040516001600160a01b038087169261ffff8c16927f2c0f148b435140de488c1b34647f1511c646f7077e87007bacf22ef9977a16d89261103d9216908690612a95565b60405180910390a35050505050506110556001600255565b5050565b61ffff82166000818152600660208181526040808420815161018081018352815481526001808301548286015260028084015483860152600384015460608085019190915260048501546080850152600585015460a08501529684015460c084015260078085015460e085015260088501546101008501526009850154610120850152600a8501546001600160a01b03908116610140860152600b909501548516610160850152988852978552838720928916875291845282862083519586018452805480875292810154948601949094529290950154908301529192611145576000925050506107e8565b81602001518260e0015110158015611161575061010082015115155b1561119957806020015161118682600001518460c00151670de0b6b3a76400006120e1565b6111909190612a82565b925050506107e8565b8160e00151421180156111b0575061010082015115155b80156111bc5750815142115b1561122c57600082604001516111da84600001518560e00151612383565b6111e8428660200151612399565b6111f29190612a82565b6111fc9190612aae565b905061121681670de0b6b3a76400008561010001516120e1565b8360c0018181516112279190612a6f565b905250505b806020015161124c82600001518460c00151670de0b6b3a76400006120e1565b6112569190612a82565b95945050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b611290612095565b6112986120bd565b61ffff81168015806112b0575060035461ffff168110155b156112d157604051631e657b1d60e01b81526004810182905260240161082e565b61ffff82166000908152600660209081526040808320600783528184203380865293529220909190611302856113e2565b8054156113d457600061132682600001548460060154670de0b6b3a76400006120e1565b9050600082600101548261133a9190612a82565b9050818360010181905550808460090160008282546113599190612a6f565b9250508190555080600560008282546113729190612a6f565b9091555050600b840154611391906001600160a01b03163087846121a6565b50600b8401546040516001600160a01b038088169261ffff8b1692600080516020612b67833981519152926113c99216908690612a95565b60405180910390a350505b50505050610c786001600255565b61ffff81168015806113fa575060035461ffff168110155b1561141b57604051631e657b1d60e01b81526004810182905260240161082e565b61ffff8216600090815260066020526040902060078101544281106114405750505050565b6008820154825481158061145357504281115b1561146957428460070181905550505050505050565b600184015480841061147e5750505050505050565b6000856002015461148f8487612383565b6114994285612399565b6114a39190612a82565b6114ad9190612aae565b90506114c281670de0b6b3a7640000866120e1565b8660060160008282546114d59190612a6f565b90915550504260079096019590955550505050505050565b6003546060906000906115069060019061ffff16612a0f565b90508061ffff1667ffffffffffffffff81111561152557611525612a29565b60405190808252806020026020018201604052801561155e57816020015b61154b6125f1565b8152602001906001900390816115435790505b50915060005b8161ffff168161ffff1610156116565760066000611583836001612a3f565b61ffff90811682526020808301939093526040918201600020825161018081018452815481526001820154948101949094526002810154928401929092526003820154606084015260048201546080840152600582015460a0840152600682015460c0840152600782015460e084015260088201546101008401526009820154610120840152600a8201546001600160a01b03908116610140850152600b9092015490911661016083015284518591841690811061164357611643612a59565b6020908102919091010152600101611564565b505090565b6116636125f1565b5061ffff16600090815260066020818152604092839020835161018081018552815481526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a08201529082015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a8201546001600160a01b03908116610140830152600b9092015490911661016082015290565b611716612095565b61171e6120bd565b60035433906000906117369060019061ffff16612a0f565b905060008060005b8361ffff168161ffff16101561191557600060068161175e846001612a3f565b61ffff168152602081019190915260400160009081209150600781611784856001612a3f565b61ffff1661ffff1681526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002090508261ffff166000036117e057600b8201546001600160a01b03169350611821565b600b8201546001600160a01b0385811691161461182157600b8201546040516304066c2760e01b81526001600160a01b03909116600482015260240161082e565b61182f610517846001612a3f565b80541561190b57600061185382600001548460060154670de0b6b3a76400006120e1565b905060008260010154826118679190612a82565b9050818360010181905550808460090160008282546118869190612a6f565b92505081905550806005600082825461189f9190612a6f565b909155506118af90508188612a6f565b96506001600160a01b0389166118c6866001612a3f565b61ffff16600080516020612b6783398151915286600b0160009054906101000a90046001600160a01b031684604051611900929190612a95565b60405180910390a350505b505060010161173e565b50811561192a57611928813086856121a6565b505b836001600160a01b03167f27ecefe7b0e4b53456c40bf09a9372f9650de8779fe3999eee3471216ba788918284604051611965929190612a95565b60405180910390a25050505061197b6001600255565b565b60008281526020819052604090206001015461199881611f8e565b610943838361202a565b60006119ad81611f8e565b6119b5612095565b60095460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114611a06576040519150601f19603f3d011682016040523d82523d6000602084013e611a0b565b606091505b5050905080611a3c57600954604051630cd9003760e01b815261082e916001600160a01b0316908490600401612a95565b600954604080516001600160a01b0390921682526000602083015281018390527f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f90969060600160405180910390a15050610c786001600255565b6003546060906000908190611ab09060019061ffff16612a0f565b90508061ffff1667ffffffffffffffff811115611acf57611acf612a29565b604051908082528060200260200182016040528015611af8578160200160208202803683370190505b50925060005b8161ffff168161ffff161015611b5d576000611b24611b1e836001612a3f565b87611059565b905080858361ffff1681518110611b3d57611b3d612a59565b6020908102919091010152611b528185612a6f565b935050600101611afe565b5050915091565b6000611b6f81611f8e565b611b77612095565b428a11611b9757604051634a1fb13960e11b815260040160405180910390fd5b888a10611bb75760405163398145cf60e11b815260040160405180910390fd5b871580611bc2575086155b15611be05760405163589efd7360e01b815260040160405180910390fd5b6001600160a01b0383161580611bfd57506001600160a01b038216155b15611c1b57604051631b65070360e11b815260040160405180910390fd5b6003805461ffff169081906000611c3183612ac5565b91906101000a81548161ffff021916908361ffff160217905550506040518061018001604052808c81526020018b81526020018a8152602001888152602001878152602001868152602001600081526020018c81526020016000815260200160008152602001856001600160a01b03168152602001846001600160a01b0316815250600660008361ffff1661ffff168152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a0160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061016082015181600b0160006101000a8154816001600160a01b0302191690836001600160a01b031602179055509050508060086000856001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055506000611de18433308c6121a6565b9050888114611e06576040516377b8dde360e01b81526004810182905260240161082e565b604080518d8152602081018d90529081018b9052606081018290526080810189905260a0810188905260c081018790526001600160a01b0380871660e0830152851661010082015261ffff8316907f1d139d44b209ce2d49e320ac5586fea0625ed63bb0739d258a773be02a264552906101200160405180910390a25050611e8e6001600255565b50505050505050505050565b6000611ea581611f8e565b611ead612095565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f189190612ae6565b600954909150611f35906001600160a01b038581169116836123a8565b600954604080516001600160a01b039283168152918516602083015281018290527f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f90969060600160405180910390a1506110556001600255565b610c788133612400565b6000611fa4838361125f565b612022576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611fda3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107e8565b5060006107e8565b6000612036838361125f565b15612022576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107e8565b60028054036120b757604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b60015460ff161561197b5760405163d93c066560e01b815260040160405180910390fd5b60008383028160001985870982811083820303915050806000036121185783828161210e5761210e612aff565b049250505061219f565b8084116121385760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918716906370a0823190602401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190612ae6565b9050821561225b57306001600160a01b03861603612246576122416001600160a01b03871685856123a8565b61225b565b61225b6001600160a01b03871686868661242b565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908816906370a0823190602401602060405180830381865afa1580156122a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c99190612ae6565b90508181116122e1576122dc8183612a82565b6122eb565b6122eb8282612a82565b979650505050505050565b6122fe612464565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6123506120bd565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361232b565b6000818311612392578161219f565b5090919050565b6000818310612392578161219f565b6109f283846001600160a01b031663a9059cbb85856040516024016123ce929190612a95565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612487565b61240a828261125f565b61105557808260405163e2517d3f60e01b815260040161082e929190612a95565b6040516001600160a01b0384811660248301528381166044830152606482018390526109439186918216906323b872dd906084016123ce565b60015460ff1661197b57604051638dfc202b60e01b815260040160405180910390fd5b600061249c6001600160a01b038416836124ea565b905080516000141580156124c15750808060200190518101906124bf9190612b15565b155b156109f257604051635274afe760e01b81526001600160a01b038416600482015260240161082e565b606061219f8383600084600080856001600160a01b031684866040516125109190612b37565b60006040518083038185875af1925050503d806000811461254d576040519150601f19603f3d011682016040523d82523d6000602084013e612552565b606091505b509150915061256286838361256c565b9695505050505050565b6060826125815761257c826125c8565b61219f565b815115801561259857506001600160a01b0384163b155b156125c157604051639996b31560e01b81526001600160a01b038516600482015260240161082e565b508061219f565b8051156125d85780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b80356001600160a01b038116811461267b57600080fd5b919050565b60006020828403121561269257600080fd5b61219f82612664565b602080825282518282018190526000918401906040840190835b818110156126f2576126dc8385518051825260208082015190830152604090810151910152565b60209390930192606092909201916001016126b5565b509095945050505050565b60006020828403121561270f57600080fd5b81356001600160e01b03198116811461219f57600080fd5b803561ffff8116811461267b57600080fd5b6000806000806080858703121561274f57600080fd5b61275885612727565b966020860135965060408601359560600135945092505050565b60006020828403121561278457600080fd5b5035919050565b6000806040838503121561279e57600080fd5b823591506127ae60208401612664565b90509250929050565b600080604083850312156127ca57600080fd5b6127d383612727565b91506127ae60208401612664565b815181526020808301519082015260408083015190820152606081016107e8565b60006020828403121561281457600080fd5b61219f82612727565b6000806040838503121561283057600080fd5b61283983612727565b946020939093013593505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516128c56101408401826001600160a01b03169052565b506101608101516109f26101608401826001600160a01b03169052565b602080825282518282018190526000918401906040840190835b818110156126f25761290f838551612847565b6020939093019261018092909201916001016128fc565b61018081016107e88284612847565b6040808252835190820181905260009060208501906060840190835b8181101561296f578351835260209384019390920191600101612951565b5050602093909301939093525092915050565b60008060008060008060008060006101208a8c0312156129a157600080fd5b8935985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a013592506129db60e08b01612664565b91506129ea6101008b01612664565b90509295985092959850929598565b634e487b7160e01b600052601160045260246000fd5b61ffff82811682821603908111156107e8576107e86129f9565b634e487b7160e01b600052604160045260246000fd5b61ffff81811683821601908111156107e8576107e86129f9565b634e487b7160e01b600052603260045260246000fd5b808201808211156107e8576107e86129f9565b818103818111156107e8576107e86129f9565b6001600160a01b03929092168252602082015260400190565b80820281158282048414176107e8576107e86129f9565b600061ffff821661ffff8103612add57612add6129f9565b60010192915050565b600060208284031215612af857600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600060208284031215612b2757600080fd5b8151801515811461219f57600080fd5b6000825160005b81811015612b585760208186018101518583015201612b3e565b50600092019182525091905056fea27580a77a01c86ee8598d930ae5f9a0ec6f146c6e0e9e9f50b95bacb3378718a2646970667358221220ecc8006985fb754ee0b4c3de20a28c00fddb0705f7a5e6e6c3f1590a8790a91964736f6c634300081b0033