0 txs
3 calls
constructor
constructor()
functions
calculateRewards
viewfunction calculateRewards(address stakerAddr) view returns (uint256)
cloudGovernor
viewfunction cloudGovernor() view returns (address)
cloudRewardPool
viewfunction cloudRewardPool() view returns (address)
cloudStakeVault
viewfunction cloudStakeVault() view returns (address)
cloudToken
viewfunction cloudToken() view returns (address)
cloudUtils
viewfunction cloudUtils() view returns (address)
forceFailTest
viewfunction forceFailTest() view returns (uint256)
getAllStakers
viewfunction getAllStakers(uint256 start, uint256 count) view returns (address[] stakerOuts, uint256[] amounts)
getAprE2
viewfunction getAprE2() view returns (uint256)
getStakedCheckpoints
viewfunction getStakedCheckpoints(address user) view returns (tuple[])
getStakersData
viewfunction getStakersData(address[] stakerAddresses) view returns (uint256[] stakedAmounts, bool[] isActives)
getStakingParams
viewfunction getStakingParams() view returns (uint32 _minStakeAmount, uint16 _cooldown, uint16 _governanceInactivityThreshold, uint16 _autoUnstakePeriod, uint8 _aprMin, uint8 _aprMax, uint8 _stakedCircSupplyMin, uint8 _stakedCircSupplyMax, uint8 _maintenanceBatchSize)
getVersion
purefunction getVersion() pure returns (string)
lastProcessedStaker
viewfunction lastProcessedStaker() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
stakerList
viewfunction stakerList(uint256) view returns (address)
stakers
viewfunction stakers(address) view returns (uint256 stakedAmount, uint256 lastRewardClaimTime, uint256 unstakingAmount, uint256 unstakingStartTime, uint256 totalEarnedRewards, uint256 lastActivityTime, bool isActive)
totalStaked
viewfunction totalStaked() view returns (uint256)
totalStakedForTally
viewfunction totalStakedForTally() view returns (uint256)
totalStakers
viewfunction totalStakers() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userStakedForTally
viewfunction userStakedForTally(address stakerAddr, uint256 blockNumber) view returns (uint256)
cancelUnstaking
nonpayablefunction cancelUnstaking()
claimRewards
nonpayablefunction claimRewards()
claimUnstakedTokens
nonpayablefunction claimUnstakedTokens()
handleInactivity
nonpayablefunction handleInactivity(uint256 batchSize)
handleInactivityOne
nonpayablefunction handleInactivityOne(address stakerAddr)
initialize
nonpayablefunction initialize(address _cloudToken, address _cloudStakeVault, address _cloudRewardPool, address _cloudUtils)
initializeV2
nonpayablefunction initializeV2(address _cloudGovernor)
initiateUnstake
nonpayablefunction initiateUnstake(uint256 amount)
pause
nonpayablefunction pause()
recoverMistakenTokens
nonpayablefunction recoverMistakenTokens(address _token, address _recipient, uint256 _amount)
renounceOwnership
nonpayablefunction renounceOwnership()
setForceFailTest
nonpayablefunction setForceFailTest(uint256 _fail)
stake
nonpayablefunction stake(uint256 amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateStakingParameters
nonpayablefunction updateStakingParameters(uint8[] keys, uint256[] values)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AutoUnstaked
event AutoUnstaked(address indexed staker, uint256 amount)
handleInactivityCompleted
event handleInactivityCompleted()
handleInactivityProcessed
event handleInactivityProcessed(uint256 lastProcessedStaker)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RewardsClaimed
event RewardsClaimed(address indexed staker, uint256 rewards)
Staked
event Staked(address indexed staker, uint256 stakedAmount)
StakerData
event StakerData(address indexed staker, uint256 totalStakedAmount)
StakerDeactivated
event StakerDeactivated(address indexed staker, uint256 stakedAmount)
StakerReactivated
event StakerReactivated(address indexed staker, uint256 stakedAmount)
Unpaused
event Unpaused(address account)
UnstakeCancelled
event UnstakeCancelled(address indexed staker, uint256 amount)
Unstaked
event Unstaked(address indexed staker, uint256 amount)
Unstaking
event Unstaking(address indexed staker, uint256 amount)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516143d862000104600039600081816130a5015281816130ce015261320f01526143d86000f3fe6080604052600436106102465760003560e01c80637d06bf9411610139578063ad3cb1cc116100b6578063e68ac4841161007a578063e68ac4841461078d578063e9887dbb146107ad578063f1d8e9ef146107cd578063f2fde38b146107e3578063f4d89f9b14610803578063f8c8765e1461083157600080fd5b8063ad3cb1cc146106cf578063ae5ac92114610700578063ba673dd814610720578063cdf69e2714610740578063dae5cd101461076057600080fd5b80638da5cb5b116100fd5780638da5cb5b146105a05780639168ae72146105dd578063986fed301461066f578063a63a1f6a1461068f578063a694fc3a146106af57600080fd5b80637d06bf94146105345780637e5e841114610549578063817b1cd21461055f5780638456cb5914610575578063869890381461058a57600080fd5b80634f1ef286116101c75780635cc635901161018b5780635cc635901461044d5780635e112dd01461046d57806364ab86751461048d578063705fc046146104ad578063715018a61461051f57600080fd5b80634f1ef286146103ca57806352d1902d146103dd57806353842a5c146103f25780635b5927f5146104075780635c975abb1461041d57600080fd5b8063348e50c61161020e578063348e50c61461032f578063372500ab1461034f578063382f2e0a146103645780633d5573dd146103925780633f4ba83a146103b557600080fd5b80630d8e6e2c1461024b578063100eadc01461029557806316a1b0f9146102cd57806329b6eca9146102ef578063320e74141461030f575b600080fd5b34801561025757600080fd5b5060408051808201909152600f81526e21b637bab229ba30b5b4b733903b1960891b60208201525b60405161028c9190613d39565b60405180910390f35b3480156102a157600080fd5b506015546102b5906001600160a01b031681565b6040516001600160a01b03909116815260200161028c565b3480156102d957600080fd5b506102ed6102e8366004613d6c565b610851565b005b3480156102fb57600080fd5b506102ed61030a366004613da1565b610884565b34801561031b57600080fd5b506001546102b5906001600160a01b031681565b34801561033b57600080fd5b506102b561034a366004613d6c565b610a32565b34801561035b57600080fd5b506102ed610a5c565b34801561037057600080fd5b5061038461037f366004613e02565b610b12565b60405161028c929190613eea565b34801561039e57600080fd5b506103a7610c4f565b60405190815260200161028c565b3480156103c157600080fd5b506102ed610f5c565b6102ed6103d8366004613f43565b610f6c565b3480156103e957600080fd5b506103a7610f8b565b3480156103fe57600080fd5b506102ed610fa8565b34801561041357600080fd5b506103a760065481565b34801561042957600080fd5b506000805160206143638339815191525460ff16604051901515815260200161028c565b34801561045957600080fd5b506102ed610468366004613d6c565b611188565b34801561047957600080fd5b506103a7610488366004613fe8565b611195565b34801561049957600080fd5b506103a76104a8366004613da1565b611255565b3480156104b957600080fd5b506104c2611387565b6040805163ffffffff909a168a5261ffff98891660208b01529688169689019690965295909316606087015260ff9182166080870152811660a086015290811660c085015291821660e0840152166101008201526101200161028c565b34801561052b57600080fd5b506102ed61140a565b34801561054057600080fd5b506102ed61141c565b34801561055557600080fd5b506103a760105481565b34801561056b57600080fd5b506103a760055481565b34801561058157600080fd5b506102ed6114b0565b34801561059657600080fd5b506103a760045481565b3480156105ac57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102b5565b3480156105e957600080fd5b506106386105f8366004613da1565b6012602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919060ff1687565b604080519788526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e00161028c565b34801561067b57600080fd5b506102ed61068a366004614056565b6114c0565b34801561069b57600080fd5b506102ed6106aa366004613da1565b611f80565b3480156106bb57600080fd5b506102ed6106ca366004613d6c565b612000565b3480156106db57600080fd5b5061027f604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561070c57600080fd5b506102ed61071b366004613d6c565b612437565b34801561072c57600080fd5b506000546102b5906001600160a01b031681565b34801561074c57600080fd5b506002546102b5906001600160a01b031681565b34801561076c57600080fd5b5061078061077b366004613da1565b61248d565b60405161028c91906140c1565b34801561079957600080fd5b506003546102b5906001600160a01b031681565b3480156107b957600080fd5b506102ed6107c8366004614110565b612516565b3480156107d957600080fd5b506103a760115481565b3480156107ef57600080fd5b506102ed6107fe366004613da1565b61258d565b34801561080f57600080fd5b5061082361081e36600461414c565b6125c8565b60405161028c92919061416e565b34801561083d57600080fd5b506102ed61084c3660046141c5565b612761565b610859612a24565b610861612a55565b61086a81612a8d565b610881600160008051602061438383398151915255565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806108cd575080546001600160401b03808416911610155b156108eb5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556001600160a01b0383166109675760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420676f7665726e6f722061646472657373000000000000000060448201526064015b60405180910390fd5b601580546001600160a01b0319166001600160a01b03851617905560135460005b818110156109e4576000601382815481106109a5576109a5614219565b60009182526020808320909101546001600160a01b0316808352601290915260409091208054919250906109da908390612bb9565b5050600101610988565b5050805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b60138181548110610a4257600080fd5b6000918252602090912001546001600160a01b0316905081565b610a64612a24565b610a6c612a55565b610a7533612c87565b3360009081526012602052604090208054610ac55760405162461bcd60e51b815260206004820152601060248201526f4e6f207374616b656420746f6b656e7360801b604482015260640161095e565b610ace33612da3565b610ad733612e43565b33600090815260126020526040902042600590910155610af8600f54612a8d565b50610b10600160008051602061438383398151915255565b565b80516060908190806001600160401b03811115610b3157610b31613dbc565b604051908082528060200260200182016040528015610b5a578160200160208202803683370190505b509250806001600160401b03811115610b7557610b75613dbc565b604051908082528060200260200182016040528015610b9e578160200160208202803683370190505b50915060005b81811015610c4857600060126000878481518110610bc457610bc4614219565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002090508060000154858381518110610c0557610c05614219565b60209081029190910101526006810154845160ff90911690859084908110610c2f57610c2f614219565b9115156020928302919091019091015250600101610ba4565b5050915091565b6000806064600d54670de0b6b3a7640000610c6a9190614245565b610c74919061425c565b905060006064600e54670de0b6b3a7640000610c909190614245565b610c9a919061425c565b90506000600c54670de0b6b3a7640000610cb49190614245565b90506000600360009054906101000a90046001600160a01b03166001600160a01b0316632b112e496040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f919061427e565b905060008111610d965760405162461bcd60e51b815260206004820152602c60248201527f43697263756c6174696e6720737570706c79206d75737420626520677265617460448201526b6572207468616e207a65726f60a01b606482015260840161095e565b600081600554670de0b6b3a7640000610daf9190614245565b610db9919061425c565b90506000858211610dcc57506000610e15565b848210610de25750670de0b6b3a7640000610e15565b610dec8686614297565b610df68784614297565b610e0890670de0b6b3a7640000614245565b610e12919061425c565b90505b6000600b54600c54610e279190614297565b610e319083614245565b610e3b9086614297565b90506000610e50662386f26fc100008361425c565b90506000600260009054906101000a90046001600160a01b03166001600160a01b0316635e42b4556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb919061427e565b90508061271083600554610edf9190614245565b610ee9919061425c565b1115610f3f5760055415610f2657600554610f05826064614245565b610f1790670de0b6b3a7640000614245565b610f21919061425c565b610f29565b60005b9250610f3c662386f26fc100008461425c565b91505b611388821115610f4f5761138891505b5098975050505050505050565b610f64612fdf565b610b1061303a565b610f7461309a565b610f7d8261313f565b610f878282613147565b5050565b6000610f95613204565b5060008051602061434383398151915290565b610fb0612a24565b610fb8612a55565b610fc133612c87565b33600090815260126020526040902060028101546110215760405162461bcd60e51b815260206004820152601e60248201527f4e6f20746f6b656e7320696e20756e7374616b696e672070726f636573730000604482015260640161095e565b600854816003015461103391906142aa565b4210156110825760405162461bcd60e51b815260206004820152601a60248201527f436f6f6c646f776e20706572696f64206e6f7420706173736564000000000000604482015260640161095e565b61108b33612da3565b600281018054600091829055600383019190915560015460405163f3fef3a360e01b8152336004820152602481018390526001600160a01b039091169063f3fef3a390604401600060405180830381600087803b1580156110eb57600080fd5b505af11580156110ff573d6000803e3d6000fd5b50506040518381523392507f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75915060200160405180910390a2815460405190815233907f0576ba0bd327ada39943c18e69bae9543988e7ca0b77aafed90d7ffe329ce6639060200160405180910390a25050610b10600160008051602061438383398151915255565b611190612fdf565b601155565b6001600160a01b038216600090815260166020526040812080548083036111c15760009250505061124f565b805b80156112475784836111d6600184614297565b815481106111e6576111e6614219565b906000526020600020906002020160000154116112355782611209600183614297565b8154811061121957611219614219565b906000526020600020906002020160010154935050505061124f565b8061123f816142bd565b9150506111c3565b506000925050505b92915050565b6001600160a01b0381166000908152601260209081526040808320815160e0810183528154815260018201549381018490526002820154928101929092526003810154606083015260048101546080830152600581015460a08301526006015460ff16151560c0820152906113015760405162461bcd60e51b81526020600482015260126024820152714e6f207265776172647320686973746f727960701b604482015260640161095e565b60008160200151426113139190614297565b9050600061131f610c4f565b9050600064496cebb8008383866000015161133a9190614245565b6113449190614245565b61134e919061425c565b9050633b9aca0061136382631dcd65006142aa565b61136d919061425c565b905061137d81633b9aca00614245565b9695505050505050565b6000806000806000806000806000670de0b6b3a76400006007546113ab919061425c565b9850620151806008546113be919061425c565b9750620151806009546113d1919061425c565b965062015180600a546113e4919061425c565b9550600b549450600c549350600d549250600e549150600f549050909192939495969798565b611412612fdf565b610b10600061324d565b611424612a24565b61142c612a55565b61143533612c87565b33600090815260126020526040902060028101546114955760405162461bcd60e51b815260206004820152601860248201527f4e6f20756e7374616b696e6720696e2070726f67726573730000000000000000604482015260640161095e565b61149e33612da3565b6114a733612e43565b610ad7336132be565b6114b8612fdf565b610b106133dc565b6114c8612fdf565b6114d0612a24565b8281146115185760405162461bcd60e51b8152602060048201526016602482015275082e4e4c2f240d8cadccee8d0e640dad2e6dac2e8c6d60531b604482015260640161095e565b60005b83811015611f7957600085858381811061153757611537614219565b905060200201602081019061154c91906142d4565b60ff160361168457600083838381811061156857611568614219565b90506020020135116115ce5760405162461bcd60e51b815260206004820152602960248201527f6d696e5374616b65416d6f756e74206d757374206265206120706f7369746976604482015268329034b73a32b3b2b960b91b606482015260840161095e565b620186a08383838181106115e4576115e4614219565b9050602002013511156116505760405162461bcd60e51b815260206004820152602e60248201527f6d696e5374616b65416d6f756e74206d757374206265206c657373207468616e60448201526d080c4c0c0b0c0c0c0810d313d55160921b606482015260840161095e565b82828281811061166257611662614219565b90506020020135670de0b6b3a764000061167c9190614245565b600755611f71565b600185858381811061169857611698614219565b90506020020160208101906116ad91906142d4565b60ff16036117ca5760008383838181106116c9576116c9614219565b905060200201351161171d5760405162461bcd60e51b815260206004820152601960248201527f436f6f6c646f776e206d75737420626520706f73697469766500000000000000604482015260640161095e565b601e83838381811061173157611731614219565b9050602002013511156117915760405162461bcd60e51b815260206004820152602260248201527f436f6f6c646f776e206d757374206265206c657373207468616e203330206461604482015261797360f01b606482015260840161095e565b8282828181106117a3576117a3614219565b9050602002013560186117b69190614245565b6117c290610e10614245565b600855611f71565b60028585838181106117de576117de614219565b90506020020160208101906117f391906142d4565b60ff16036118b357600083838381811061180f5761180f614219565b905060200201351161187a5760405162461bcd60e51b815260206004820152602e60248201527f476f7665726e616e6365496e61637469766974795468726573686f6c64206d7560448201526d737420626520706f73697469766560901b606482015260840161095e565b82828281811061188c5761188c614219565b90506020020135601861189f9190614245565b6118ab90610e10614245565b600955611f71565b60038585838181106118c7576118c7614219565b90506020020160208101906118dc91906142d4565b60ff16036119905760008383838181106118f8576118f8614219565b90506020020135116119575760405162461bcd60e51b815260206004820152602260248201527f4175746f556e7374616b65506572696f64206d75737420626520706f73697469604482015261766560f01b606482015260840161095e565b82828281811061196957611969614219565b90506020020135601861197c9190614245565b61198890610e10614245565b600a55611f71565b60048585838181106119a4576119a4614219565b90506020020160208101906119b991906142d4565b60ff1603611aaf57600c548383838181106119d6576119d6614219565b905060200201351115611a2b5760405162461bcd60e51b815260206004820152601860248201527f6170724d696e206d757374206265203c3d206170724d61780000000000000000604482015260640161095e565b6064838383818110611a3f57611a3f614219565b905060200201351115611a8c5760405162461bcd60e51b815260206004820152601560248201527406170724d696e206d757374206265203c3d2031303605c1b604482015260640161095e565b828282818110611a9e57611a9e614219565b6020029190910135600b5550611f71565b6005858583818110611ac357611ac3614219565b9050602002016020810190611ad891906142d4565b60ff1603611bce57600b54838383818110611af557611af5614219565b905060200201351015611b4a5760405162461bcd60e51b815260206004820152601860248201527f6170724d6178206d757374206265203e3d206170724d696e0000000000000000604482015260640161095e565b6064838383818110611b5e57611b5e614219565b905060200201351115611bab5760405162461bcd60e51b815260206004820152601560248201527406170724d6178206d757374206265203c3d2031303605c1b604482015260640161095e565b828282818110611bbd57611bbd614219565b6020029190910135600c5550611f71565b6006858583818110611be257611be2614219565b9050602002016020810190611bf791906142d4565b60ff1603611d1b57600e54838383818110611c1457611c14614219565b905060200201351115611c845760405162461bcd60e51b815260206004820152603260248201527f7374616b656443697263537570706c794d696e206d757374206265203c3d20736044820152710e8c2d6cac886d2e4c6a6eae0e0d8f29ac2f60731b606482015260840161095e565b6064838383818110611c9857611c98614219565b905060200201351115611cf85760405162461bcd60e51b815260206004820152602260248201527f7374616b656443697263537570706c794d696e206d757374206265203c3d2031604482015261030360f41b606482015260840161095e565b828282818110611d0a57611d0a614219565b6020029190910135600d5550611f71565b6007858583818110611d2f57611d2f614219565b9050602002016020810190611d4491906142d4565b60ff1603611e6857600d54838383818110611d6157611d61614219565b905060200201351015611dd15760405162461bcd60e51b815260206004820152603260248201527f7374616b656443697263537570706c794d6178206d757374206265203e3d20736044820152713a30b5b2b221b4b931a9bab838363ca6b4b760711b606482015260840161095e565b6064838383818110611de557611de5614219565b905060200201351115611e455760405162461bcd60e51b815260206004820152602260248201527f7374616b656443697263537570706c794d6178206d757374206265203c3d2031604482015261030360f41b606482015260840161095e565b828282818110611e5757611e57614219565b6020029190910135600e5550611f71565b6008858583818110611e7c57611e7c614219565b9050602002016020810190611e9191906142d4565b60ff1603611f31576064838383818110611ead57611ead614219565b905060200201351115611f0e5760405162461bcd60e51b815260206004820152602360248201527f6d61696e74656e616e6365426174636853697a65206d757374206265203c3d2060448201526203130360ec1b606482015260840161095e565b828282818110611f2057611f20614219565b6020029190910135600f5550611f71565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c696420706172616d65746572206b657960581b604482015260640161095e565b60010161151b565b5050505050565b611f88612a24565b611f90612a55565b60115460011461086a57601154600203611ff75760405162461bcd60e51b815260206004820152602260248201527f466f7263654661696c546573743a20496e74656e74696f6e616c206661696c75604482015261726560f01b606482015260840161095e565b61086a81613425565b612008612a24565b612010612a55565b32331461205f5760405162461bcd60e51b815260206004820152601c60248201527f536d61727420636f6e7472616374732063616e6e6f74207374616b6500000000604482015260640161095e565b600081116120be5760405162461bcd60e51b815260206004820152602660248201527f5374616b6520616d6f756e74206d7573742062652067726561746572207468616044820152656e207a65726f60d01b606482015260840161095e565b6120c733612c87565b3360009081526012602052604090206007546002820154825484916120eb916142aa565b6120f591906142aa565b101561214e5760405162461bcd60e51b815260206004820152602260248201527f546f74616c207374616b652062656c6f77206d696e696d756d20726571756972604482015261195960f21b606482015260840161095e565b600054600154604051636eb1769f60e11b81523360048201526001600160a01b0391821660248201528492919091169063dd62ed3e90604401602060405180830381865afa1580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c8919061427e565b101561220f5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b604482015260640161095e565b61221833612da3565b61222133612e43565b61222a336132be565b33600090815260146020526040812054900361229d5760138054600181810183557f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09090910180546001600160a01b0319163390811790915591546000928352601460205260409092209190915542908201555b8054828260006122ad83856142aa565b9091555050426001830155670de0b6b3a7640000811080156122e05750670de0b6b3a76400006122dd84836142aa565b10155b156122fb57600480549060006122f5836142f7565b91905055505b826005600082825461230d91906142aa565b92505081905550826006600082825461232691906142aa565b90915550508154612338903390612bb9565b6001546040516311f9fbc960e21b8152336004820152602481018590526001600160a01b03909116906347e7ef2490604401600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b50506040518581523392507f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d915060200160405180910390a2815460405190815233907f0576ba0bd327ada39943c18e69bae9543988e7ca0b77aafed90d7ffe329ce6639060200160405180910390a2336000908152601260205260409020426005909101555050610881600160008051602061438383398151915255565b61243f612a24565b612447612a55565b61245033612c87565b61245933612da3565b61246233612e43565b61246c338261359a565b3360009081526012602052604090204260059091015561086a600f54612a8d565b6001600160a01b0381166000908152601660209081526040808320805482518185028101850190935280835260609492939192909184015b8282101561250b578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906124c5565b505050509050919050565b61251e612fdf565b6001600160a01b0382166125745760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420726563697069656e74206164647265737300000000000000604482015260640161095e565b6125886001600160a01b0384168383613786565b505050565b612595612fdf565b6001600160a01b0381166125bf57604051631e4fbdf760e01b81526000600482015260240161095e565b6108818161324d565b60135460609081908085106125f657505060408051600080825260208201908152818301909252915061275a565b600061260285876142aa565b90508181111561260f5750805b600061261b8783614297565b9050806001600160401b0381111561263557612635613dbc565b60405190808252806020026020018201604052801561265e578160200160208202803683370190505b509450806001600160401b0381111561267957612679613dbc565b6040519080825280602002602001820160405280156126a2578160200160208202803683370190505b50935060005b8181101561275557600060136126be838b6142aa565b815481106126ce576126ce614219565b9060005260206000200160009054906101000a90046001600160a01b031690508087838151811061270157612701614219565b6001600160a01b03928316602091820292909201810191909152908216600090815260129091526040902054865187908490811061274157612741614219565b6020908102919091010152506001016126a8565b505050505b9250929050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156127a65750825b90506000826001600160401b031660011480156127c25750303b155b9050811580156127d0575080155b156127ee5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561281857845460ff60401b1916600160401b1785555b6001600160a01b0389166128665760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b604482015260640161095e565b6001600160a01b0388166128bc5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964207374616b65207661756c7420616464726573730000000000604482015260640161095e565b6001600160a01b0387166129125760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642072657761726420706f6f6c20616464726573730000000000604482015260640161095e565b6001600160a01b0386166129685760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964207574696c7320636f6e747261637420616464726573730000604482015260640161095e565b612971336137d8565b6129796137e9565b6129816137f1565b612989613801565b600080546001600160a01b03808c166001600160a01b031992831617909255600180548b8416908316179055600280548a841690831617905560038054928916929091169190911790558315612a1957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b6000805160206143638339815191525460ff1615610b105760405163d93c066560e01b815260040160405180910390fd5b600080516020614383833981519152805460011901612a8757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b80600003612a985750565b601054601354600091905b8082108015612ab157508383105b15612b0c57600060138381548110612acb57612acb614219565b6000918252602090912001546001600160a01b03169050612aeb81613425565b82612af5816142f7565b9350508380612b03906142f7565b94505050612aa3565b7fcef555289d278526cf0ac6da6eff22f5ebb634310aa856bea4a90456afdea0cd60008311612b3c576000612b47565b612b47600184614297565b60405190815260200160405180910390a180821015612b665781612b69565b60005b6010819055600003612b9f576040517ffcc6afeb6eabd700f1eea158e76a026531d65d41f1c540cc11c9c299c506c1c590600090a15b50505050565b600160008051602061438383398151915255565b6001600160a01b038216600090815260166020526040902080548015801590612c0e57504382612bea600184614297565b81548110612bfa57612bfa614219565b906000526020600020906002020160000154145b15612c4a578282612c20600184614297565b81548110612c3057612c30614219565b906000526020600020906002020160010181905550612b9f565b5060408051808201909152438152602080820193845282546001808201855560009485529190932091516002909302909101918255915191015550565b600154604051632a973daf60e01b81526001600160a01b0383811660048301526000921690632a973daf90602401602060405180830381865afa158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf6919061427e565b6001600160a01b038316600090815260126020526040902090915081158015612d1f5750805415155b156125885780546000808355600283018190556003830155670de0b6b3a76400008110612d5c5760048054906000612d56836142bd565b91905055505b8060056000828254612d6e9190614297565b9091555050600682015460ff1615612b9f578060066000828254612d929190614297565b90915550612b9f9050846000612bb9565b6001600160a01b0381166000908152601260205260409020600681015460ff16610f87576006808201805460ff1916600117905581548154909190600090612dec9084906142aa565b90915550508054612dfe908390612bb9565b80546040519081526001600160a01b038316907f6f6973265640ac6e8478176c656b7fba83cf6954613131cb621b5637575c8499906020015b60405180910390a25050565b6001600160a01b03811660009081526012602052604081208054909103612e68575050565b80600101544211612ebb5760405162461bcd60e51b815260206004820152601860248201527f416c726561647920636c61696d656420726563656e746c790000000000000000604482015260640161095e565b6000612ec683611255565b905060008111612f0f5760405162461bcd60e51b81526020600482015260146024820152734e6f207265776172647320617661696c61626c6560601b604482015260640161095e565b42826001018190555080826004016000828254612f2c91906142aa565b909155505060025460405163a8031a1d60e01b81526001600160a01b038581166004830152602482018490529091169063a8031a1d90604401600060405180830381600087803b158015612f7f57600080fd5b505af1158015612f93573d6000803e3d6000fd5b50505050826001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051612fd291815260200190565b60405180910390a2505050565b336130117f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610b105760405163118cdaa760e01b815233600482015260240161095e565b613042613811565b600080516020614363833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061312157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613115600080516020614343833981519152546001600160a01b031690565b6001600160a01b031614155b15610b105760405163703e46dd60e11b815260040160405180910390fd5b610881612fdf565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156131a1575060408051601f3d908101601f1916820190925261319e9181019061427e565b60015b6131c957604051634c9c8ce360e01b81526001600160a01b038316600482015260240161095e565b60008051602061434383398151915281146131fa57604051632a87526960e21b81526004810182905260240161095e565b6125888383613841565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b105760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0381166000908152601260205260409020600281015415610f875780546002820154808360006132f583866142aa565b90915550506000600284018190556003840155670de0b6b3a7640000821080156133305750670de0b6b3a764000061332d82846142aa565b10155b1561334b5760048054906000613345836142f7565b91905055505b806005600082825461335d91906142aa565b9091555050600683015460ff161561339357806006600082825461338191906142aa565b90915550508254613393908590612bb9565b836001600160a01b03167f02fbe69eb5474cc010b6c0c236dd70755556cee48c19373e79147100e04de70b826040516133ce91815260200190565b60405180910390a250505050565b6133e4612a24565b600080516020614363833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361307c565b6001600160a01b03811660009081526012602052604090204261344783612c87565b81541561359157600682015460ff161561351b57600954826005015461346d91906142aa565b811061351b576015546040516303efc45560e01b81526001600160a01b03858116600483015260009216906303efc45590602401602060405180830381865afa1580156134be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e2919061427e565b905082600501548111156134f857600583018190555b600954836005015461350a91906142aa565b82106135195761351984613897565b505b600a54826005015461352d91906142aa565b811061359157815461353e84612e43565b61354c84846000015461359a565b836001600160a01b03167fd85bb9a5496264e131a18dc4a714b6edfa05b1a7a4574d424b11d7b8e698a66b8260405161358791815260200190565b60405180910390a2505b6125888361392c565b6001600160a01b0382166000908152601260205260409020816135f45760405162461bcd60e51b81526020600482015260126024820152710416d6f756e74206d757374206265203e20360741b604482015260640161095e565b80548211156136455760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74207374616b65642062616c616e63650000000000604482015260640161095e565b8054828260006136558385614297565b925050819055508282600201600082825461367091906142aa565b9091555050426003830155670de0b6b3a764000081108015906136a35750670de0b6b3a76400006136a18483614297565b105b156136be57600480549060006136b8836142bd565b91905055505b82600560008282546136d09190614297565b9091555050600682015460ff16156137065782600660008282546136f49190614297565b90915550508154613706908590612bb9565b836001600160a01b03167ff2619dcba9802bb8ec071016f659320c48304701ba220f0420bed16f87139a668460405161374191815260200190565b60405180910390a281546040519081526001600160a01b038516907f0576ba0bd327ada39943c18e69bae9543988e7ca0b77aafed90d7ffe329ce663906020016133ce565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612588908490613aa8565b6137e0613b19565b61088181613b62565b610b10613b19565b6137f9613b19565b610b10613b6a565b613809613b19565b610b10613b72565b6000805160206143638339815191525460ff16610b1057604051638dfc202b60e01b815260040160405180910390fd5b61384a82613b93565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561388f576125888282613bf8565b610f87613c6e565b6001600160a01b0381166000908152601260205260409020600681015460ff1615610f87576006808201805460ff19169055815481549091906000906138de908490614297565b909155506138ef9050826000612bb9565b80546040519081526001600160a01b038316907fd6fb4563a9899296379bebfb34db928ba7f33262a854a4ebafcc65a74471ec5f90602001612e37565b6001600160a01b03811660009081526016602052604081208054909181900361395457505050565b6213c6808160005b838110156139a9578285828154811061397757613977614219565b906000526020600020906002020160000154436139949190614297565b116139a1578091506139a9565b60010161395c565b50806000036139b9575050505050565b806001036139c8575050505050565b60006139d5600183614297565b905060006139e38286614297565b905060005b81811015613a5057866139fb82856142aa565b81548110613a0b57613a0b614219565b9060005260206000209060020201878281548110613a2b57613a2b614219565b60009182526020909120825460029092020190815560019182015490820155016139e8565b5060005b613a5e8287614297565b811015613a9e5786805480613a7557613a75614310565b600082815260208120600260001990930192830201818155600190810191909155915501613a54565b5050505050505050565b600080602060008451602086016000885af180613acb576040513d6000823e3d81fd5b50506000513d91508115613ae3578060011415613af0565b6001600160a01b0384163b155b15612b9f57604051635274afe760e01b81526001600160a01b038516600482015260240161095e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610b1057604051631afcd79f60e31b815260040160405180910390fd5b612595613b19565b612ba5613b19565b613b7a613b19565b600080516020614363833981519152805460ff19169055565b806001600160a01b03163b600003613bc957604051634c9c8ce360e01b81526001600160a01b038216600482015260240161095e565b60008051602061434383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051613c159190614326565b600060405180830381855af49150503d8060008114613c50576040519150601f19603f3d011682016040523d82523d6000602084013e613c55565b606091505b5091509150613c65858383613c8d565b95945050505050565b3415610b105760405163b398979f60e01b815260040160405180910390fd5b606082613ca257613c9d82613cec565b613ce5565b8151158015613cb957506001600160a01b0384163b155b15613ce257604051639996b31560e01b81526001600160a01b038516600482015260240161095e565b50805b9392505050565b805115613cfc5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60005b83811015613d30578181015183820152602001613d18565b50506000910152565b6020815260008251806020840152613d58816040850160208701613d15565b601f01601f19169190910160400192915050565b600060208284031215613d7e57600080fd5b5035919050565b80356001600160a01b0381168114613d9c57600080fd5b919050565b600060208284031215613db357600080fd5b613ce582613d85565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613dfa57613dfa613dbc565b604052919050565b60006020808385031215613e1557600080fd5b82356001600160401b0380821115613e2c57600080fd5b818501915085601f830112613e4057600080fd5b813581811115613e5257613e52613dbc565b8060051b9150613e63848301613dd2565b8181529183018401918481019088841115613e7d57600080fd5b938501935b83851015613ea257613e9385613d85565b82529385019390850190613e82565b98975050505050505050565b60008151808452602080850194506020840160005b83811015613edf57815187529582019590820190600101613ec3565b509495945050505050565b604081526000613efd6040830185613eae565b82810360208481019190915284518083528582019282019060005b81811015613f36578451151583529383019391830191600101613f18565b5090979650505050505050565b60008060408385031215613f5657600080fd5b613f5f83613d85565b91506020808401356001600160401b0380821115613f7c57600080fd5b818601915086601f830112613f9057600080fd5b813581811115613fa257613fa2613dbc565b613fb4601f8201601f19168501613dd2565b91508082528784828501011115613fca57600080fd5b80848401858401376000848284010152508093505050509250929050565b60008060408385031215613ffb57600080fd5b61400483613d85565b946020939093013593505050565b60008083601f84011261402457600080fd5b5081356001600160401b0381111561403b57600080fd5b6020830191508360208260051b850101111561275a57600080fd5b6000806000806040858703121561406c57600080fd5b84356001600160401b038082111561408357600080fd5b61408f88838901614012565b909650945060208701359150808211156140a857600080fd5b506140b587828801614012565b95989497509550505050565b602080825282518282018190526000919060409081850190868401855b82811015614103578151805185528601518685015292840192908501906001016140de565b5091979650505050505050565b60008060006060848603121561412557600080fd5b61412e84613d85565b925061413c60208501613d85565b9150604084013590509250925092565b6000806040838503121561415f57600080fd5b50508035926020909101359150565b604080825283519082018190526000906020906060840190828701845b828110156141b05781516001600160a01b03168452928401929084019060010161418b565b505050838103602085015261137d8186613eae565b600080600080608085870312156141db57600080fd5b6141e485613d85565b93506141f260208601613d85565b925061420060408601613d85565b915061420e60608601613d85565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761124f5761124f61422f565b60008261427957634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561429057600080fd5b5051919050565b8181038181111561124f5761124f61422f565b8082018082111561124f5761124f61422f565b6000816142cc576142cc61422f565b506000190190565b6000602082840312156142e657600080fd5b813560ff81168114613ce557600080fd5b6000600182016143095761430961422f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b60008251614338818460208701613d15565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212208a66de9ca32d68286cc0b72d37a659426380d043f62930d2153c21ca8198c80764736f6c63430008160033