Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 225 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake | 13729470 | 1178 days ago | IN | 0 ETH | 0.00589436 | ||||
Unstake | 13256477 | 1253 days ago | IN | 0 ETH | 0.00453806 | ||||
Unstake | 13088711 | 1279 days ago | IN | 0 ETH | 0.0044044 | ||||
Unstake | 13087833 | 1279 days ago | IN | 0 ETH | 0.00488572 | ||||
Unstake | 13041312 | 1286 days ago | IN | 0 ETH | 0.00219514 | ||||
Unstake | 12967280 | 1297 days ago | IN | 0 ETH | 0.00527436 | ||||
Unstake | 12952410 | 1300 days ago | IN | 0 ETH | 0.00200653 | ||||
Unstake | 12932405 | 1303 days ago | IN | 0 ETH | 0.00133768 | ||||
Unstake | 12931374 | 1303 days ago | IN | 0 ETH | 0.00127688 | ||||
Unstake | 12908214 | 1307 days ago | IN | 0 ETH | 0.00297939 | ||||
Stake Incv Rewar... | 12613200 | 1353 days ago | IN | 0 ETH | 0.0018546 | ||||
Unstake | 12612394 | 1353 days ago | IN | 0 ETH | 0.00071089 | ||||
Unstake | 12611524 | 1353 days ago | IN | 0 ETH | 0.00101964 | ||||
Unstake | 12606432 | 1354 days ago | IN | 0 ETH | 0.0007759 | ||||
Stake Incv Rewar... | 12606391 | 1354 days ago | IN | 0 ETH | 0.0016912 | ||||
Unstake | 12598502 | 1355 days ago | IN | 0 ETH | 0.00096155 | ||||
Stake Incv Rewar... | 12574929 | 1359 days ago | IN | 0 ETH | 0.00308063 | ||||
Unstake | 12550594 | 1363 days ago | IN | 0 ETH | 0.00139645 | ||||
Unstake | 12550594 | 1363 days ago | IN | 0 ETH | 0.00139528 | ||||
Unstake | 12550594 | 1363 days ago | IN | 0 ETH | 0.00112747 | ||||
Unstake | 12550594 | 1363 days ago | IN | 0 ETH | 0.00231468 | ||||
Stake | 12534570 | 1365 days ago | IN | 0 ETH | 0.00309906 | ||||
Stake | 12503379 | 1370 days ago | IN | 0 ETH | 0.00279647 | ||||
Stake | 12497478 | 1371 days ago | IN | 0 ETH | 0.00708441 | ||||
Stake | 12495998 | 1371 days ago | IN | 0 ETH | 0.00621926 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CourtFarming_HTStake
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-03-13 */ pragma solidity ^0.5.0; interface ICourtStake{ function lockedStake(uint256 amount, address beneficiar, uint256 StartReleasingTime, uint256 batchCount, uint256 batchPeriod) external; } interface IMERC20 { function mint(address account, uint amount) external; } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * IMPORTANT: It is unsafe to assume that an address for which this * function returns false is an externally-owned account (EOA) and not a * contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != 0x0 && codehash != accountHash); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract CourtFarming_HTStake { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 public constant stakedToken = IERC20(0x6f259637dcD74C767781E37Bc6133cd6A68aa161); IMERC20 public constant courtToken = IMERC20(0x0538A9b4f4dcB0CB01A7fA34e17C0AC947c22553); uint256 private _totalStaked; mapping(address => uint256) private _balances; // last updated block number uint256 private _lastUpdateBlock; // incentive rewards uint256 public incvFinishBlock; // finish incentive rewarding block number uint256 private _incvRewardPerBlock; // incentive reward per block uint256 private _incvAccRewardPerToken; // accumulative reward per token mapping(address => uint256) private _incvRewards; // reward balances mapping(address => uint256) private _incvPrevAccRewardPerToken;// previous accumulative reward per token (for a user) uint256 public incvStartReleasingTime; // incentive releasing time uint256 public incvBatchPeriod; // incentive batch period uint256 public incvBatchCount; // incentive batch count mapping(address => uint256) public incvWithdrawn; address public owner; enum TransferRewardState { Succeeded, RewardsStillLocked } address public courtStakeAddress; event Staked(address indexed user, uint256 amount); event Unstaked(address indexed user, uint256 amount); event ClaimReward(address indexed user, uint256 reward); event ClaimIncentiveReward(address indexed user, uint256 reward); event StakeRewards(address indexed user, uint256 amount, uint256 lockTime); event CourtStakeChanged(address oldAddress, address newAddress); event StakeParametersChanged(uint256 incvRewardPerBlock, uint256 incvRewardFinsishBlock, uint256 incvLockTime); constructor () public { owner = msg.sender; uint256 incvRewardsPerBlock = 8267195767195767; uint256 incvRewardsPeriodInDays = 90; incvStartReleasingTime = 1620914400; // 13/05/2021 // check https://www.epochconverter.com/ for timestamp incvBatchPeriod = 1 days; incvBatchCount = 1; _stakeParametrsCalculation(incvRewardsPerBlock, incvRewardsPeriodInDays, incvStartReleasingTime); _lastUpdateBlock = blockNumber(); } function _stakeParametrsCalculation(uint256 incvRewardsPerBlock, uint256 incvRewardsPeriodInDays, uint256 iLockTime) internal{ uint256 incvRewardBlockCount = incvRewardsPeriodInDays * 5760; uint256 incvRewardPerBlock = incvRewardsPerBlock; _incvRewardPerBlock = incvRewardPerBlock * (1e18); incvFinishBlock = blockNumber().add(incvRewardBlockCount); incvStartReleasingTime = iLockTime; } function changeStakeParameters( uint256 incvRewardsPerBlock, uint256 incvRewardsPeriodInDays, uint256 iLockTime) public { require(msg.sender == owner, "can be called by owner only"); updateReward(address(0)); _stakeParametrsCalculation(incvRewardsPerBlock, incvRewardsPeriodInDays, iLockTime); emit StakeParametersChanged( _incvRewardPerBlock, incvFinishBlock, incvStartReleasingTime); } function updateReward(address account) public { // reward algorithm // in general: rewards = (reward per token ber block) user balances uint256 cnBlock = blockNumber(); // update accRewardPerToken, in case totalSupply is zero; do not increment accRewardPerToken if (_totalStaked > 0) { uint256 incvlastRewardBlock = cnBlock < incvFinishBlock ? cnBlock : incvFinishBlock; if (incvlastRewardBlock > _lastUpdateBlock) { _incvAccRewardPerToken = incvlastRewardBlock.sub(_lastUpdateBlock) .mul(_incvRewardPerBlock).div(_totalStaked) .add(_incvAccRewardPerToken); } } _lastUpdateBlock = cnBlock; if (account != address(0)) { uint256 incAccRewardPerTokenForUser = _incvAccRewardPerToken.sub(_incvPrevAccRewardPerToken[account]); if (incAccRewardPerTokenForUser > 0) { _incvRewards[account] = _balances[account] .mul(incAccRewardPerTokenForUser) .div(1e18) .add(_incvRewards[account]); _incvPrevAccRewardPerToken[account] = _incvAccRewardPerToken; } } } function stake(uint256 amount) public { updateReward(msg.sender); if (amount > 0) { _totalStaked = _totalStaked.add(amount); _balances[msg.sender] = _balances[msg.sender].add(amount); stakedToken.safeTransferFrom(msg.sender, address(this), amount); emit Staked(msg.sender, amount); } } function unstake(uint256 amount, bool claim) public { updateReward(msg.sender); if (amount > 0) { _totalStaked = _totalStaked.sub(amount); _balances[msg.sender] = _balances[msg.sender].sub(amount); stakedToken.safeTransfer(msg.sender, amount); emit Unstaked(msg.sender, amount); } claim = false; } function stakeIncvRewards(uint256 amount) public returns (bool) { updateReward(msg.sender); uint256 incvReward = _incvRewards[msg.sender]; if (amount > incvReward || courtStakeAddress == address(0)) { return false; } _incvRewards[msg.sender] -= amount; // no need to use safe math sub, since there is check for amount > reward courtToken.mint(address(this), amount); ICourtStake courtStake = ICourtStake(courtStakeAddress); courtStake.lockedStake(amount, msg.sender, incvStartReleasingTime, incvBatchCount, incvBatchPeriod); emit StakeRewards(msg.sender, amount, incvStartReleasingTime); } function setCourtStake(address courtStakeAdd) public { require(msg.sender == owner, "only contract owner can change"); address oldAddress = courtStakeAddress; courtStakeAddress = courtStakeAdd; IERC20 courtTokenERC20 = IERC20(address(courtToken)); courtTokenERC20.approve(courtStakeAdd, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); emit CourtStakeChanged(oldAddress, courtStakeAdd); } function rewards(address account) public view returns (uint256 reward, uint256 incvReward) { // read version of update uint256 cnBlock = blockNumber(); uint256 incvAccRewardPerToken = _incvAccRewardPerToken; // update accRewardPerToken, in case totalSupply is zero; do not increment accRewardPerToken if (_totalStaked > 0) { uint256 incvLastRewardBlock = cnBlock < incvFinishBlock ? cnBlock : incvFinishBlock; if (incvLastRewardBlock > _lastUpdateBlock) { incvAccRewardPerToken = incvLastRewardBlock.sub(_lastUpdateBlock) .mul(_incvRewardPerBlock).div(_totalStaked) .add(incvAccRewardPerToken); } } incvReward = _balances[account] .mul(incvAccRewardPerToken.sub(_incvPrevAccRewardPerToken[account])) .div(1e18) .add(_incvRewards[account]) .sub(incvWithdrawn[account]); reward = 0; } function incvRewardInfo() external view returns (uint256 cBlockNumber, uint256 incvRewardPerBlock, uint256 incvRewardFinishBlock, uint256 incvRewardFinishTime, uint256 incvRewardLockTime) { cBlockNumber = blockNumber(); incvRewardFinishBlock = incvFinishBlock; incvRewardPerBlock = _incvRewardPerBlock.div(1e18); if( cBlockNumber < incvFinishBlock){ incvRewardFinishTime = block.timestamp.add(incvFinishBlock.sub(cBlockNumber).mul(15)); }else{ incvRewardFinishTime = block.timestamp.sub(cBlockNumber.sub(incvFinishBlock).mul(15)); } incvRewardLockTime=incvStartReleasingTime; } // expected reward, // please note this is only expectation, because total balance may changed during the day function expectedRewardsToday(uint256 amount) external view returns (uint256 reward, uint256 incvReward) { reward = 0; uint256 totalIncvRewardPerDay = _incvRewardPerBlock * 5760; incvReward = totalIncvRewardPerDay.div(_totalStaked.add(amount)).mul(amount).div(1e18); } function lastUpdateBlock() external view returns(uint256) { return _lastUpdateBlock; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function totalStaked() external view returns (uint256) { return _totalStaked; } function blockNumber() public view returns (uint256) { return block.number; } function getCurrentTime() public view returns(uint256){ return block.timestamp; } function getVestedAmount(uint256 lockedAmount, uint256 time) internal view returns(uint256){ // if time < StartReleasingTime: then return 0 if(time < incvStartReleasingTime){ return 0; } // if locked amount 0 return 0 if (lockedAmount == 0){ return 0; } // elapsedBatchCount = ((time - startReleasingTime) / batchPeriod) + 1 uint256 elapsedBatchCount = time.sub(incvStartReleasingTime) .div(incvBatchPeriod) .add(1); // vestedAmount = lockedAmount * elapsedBatchCount / batchCount uint256 vestedAmount = lockedAmount .mul(elapsedBatchCount) .div(incvBatchCount); if(vestedAmount > lockedAmount){ vestedAmount = lockedAmount; } return vestedAmount; } function incvRewardClaim() public returns(uint256 amount){ updateReward(msg.sender); amount = getVestedAmount(_incvRewards[msg.sender], getCurrentTime()).sub(incvWithdrawn[msg.sender]); if(amount > 0){ incvWithdrawn[msg.sender] = incvWithdrawn[msg.sender].add(amount); courtToken.mint(msg.sender, amount); emit ClaimIncentiveReward(msg.sender, amount); } } function getBeneficiaryInfo(address ibeneficiary) external view returns(address beneficiary, uint256 totalLocked, uint256 withdrawn, uint256 releasableAmount, uint256 nextBatchTime, uint256 currentTime){ beneficiary = ibeneficiary; currentTime = getCurrentTime(); totalLocked = _incvRewards[ibeneficiary]; withdrawn = incvWithdrawn[ibeneficiary]; ( , uint256 incvReward) = rewards(ibeneficiary); releasableAmount = getVestedAmount(incvReward, getCurrentTime()).sub(incvWithdrawn[beneficiary]); nextBatchTime = getIncNextBatchTime(incvReward, ibeneficiary, currentTime); } function getIncNextBatchTime(uint256 lockedAmount, address beneficiary, uint256 time) internal view returns(uint256){ // if total vested equal to total locked then return 0 if(getVestedAmount(lockedAmount, time) == _incvRewards[beneficiary]){ return 0; } // if time less than startReleasingTime: then return sartReleasingTime if(time <= incvStartReleasingTime){ return incvStartReleasingTime; } // find the next batch time uint256 elapsedBatchCount = time.sub(incvStartReleasingTime) .div(incvBatchPeriod) .add(1); uint256 nextBatchTime = elapsedBatchCount .mul(incvBatchPeriod) .add(incvStartReleasingTime); return nextBatchTime; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimIncentiveReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"CourtStakeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"incvRewardPerBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"incvRewardFinsishBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"incvLockTime","type":"uint256"}],"name":"StakeParametersChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockTime","type":"uint256"}],"name":"StakeRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"incvRewardsPerBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardsPeriodInDays","type":"uint256"},{"internalType":"uint256","name":"iLockTime","type":"uint256"}],"name":"changeStakeParameters","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"courtStakeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"courtToken","outputs":[{"internalType":"contract IMERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"expectedRewardsToday","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"incvReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"ibeneficiary","type":"address"}],"name":"getBeneficiaryInfo","outputs":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"totalLocked","type":"uint256"},{"internalType":"uint256","name":"withdrawn","type":"uint256"},{"internalType":"uint256","name":"releasableAmount","type":"uint256"},{"internalType":"uint256","name":"nextBatchTime","type":"uint256"},{"internalType":"uint256","name":"currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvBatchCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvBatchPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvFinishBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"incvRewardClaim","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"incvRewardInfo","outputs":[{"internalType":"uint256","name":"cBlockNumber","type":"uint256"},{"internalType":"uint256","name":"incvRewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardFinishBlock","type":"uint256"},{"internalType":"uint256","name":"incvRewardFinishTime","type":"uint256"},{"internalType":"uint256","name":"incvRewardLockTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incvStartReleasingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"incvWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastUpdateBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"incvReward","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"courtStakeAdd","type":"address"}],"name":"setCourtStake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeIncvRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claim","type":"bool"}],"name":"unstake","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600c80546001600160a01b0319163317905563609d30e06008819055620151806009556001600a55661d5ef882fe087790605a906200005e90839083906001600160e01b036200007d16565b620000716001600160e01b03620000c916565b600255506200012f9050565b670de0b6b3a76400008302600455611680820283620000bd82620000a96001600160e01b03620000c916565b620000cd60201b62000fc41790919060201c565b60035550506008555050565b4390565b60008282018381101562000128576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61156c806200013f6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b90736f259637dcd74c767781e37bc6133cd6a68aa161908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d5990736f259637dcd74c767781e37bc6133cd6a68aa16190308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b736f259637dcd74c767781e37bc6133cd6a68aa16181565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158207a8166ac000370746f08d0a21e22f58392ea8117ec788152529ecd71d5af6d5f64736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806372dacd79116100de578063a694fc3a11610097578063cc7a262e11610071578063cc7a262e14610401578063d6db152d14610409578063eb09b6cb14610411578063ef0b75691461041957610173565b8063a694fc3a146103b3578063aed5900f146103d0578063c3443b69146103f957610173565b806372dacd791461033d578063817b1cd2146103455780638da5cb5b1461034d57806399b015f0146103555780639ebea88c14610386578063a218141b146103ab57610173565b8063568c9a7011610130578063568c9a701461029357806357371ade1461029b57806357e871e7146102c3578063632447c9146102cb57806370a08231146102f157806371f61cae1461031757610173565b80630700037d1461017857806329cb924d146101b7578063366dc083146101d1578063374d496a146102345780633d99af2e14610267578063528ebbda1461026f575b600080fd5b61019e6004803603602081101561018e57600080fd5b50356001600160a01b0316610436565b6040805192835260208301919091528051918290030190f35b6101bf610557565b60408051918252519081900360200190f35b6101f7600480360360208110156101e757600080fd5b50356001600160a01b031661055c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61023c6105eb565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b6101bf610694565b61027761069a565b604080516001600160a01b039092168252519081900360200190f35b6101bf6106a9565b6102c1600480360360208110156102b157600080fd5b50356001600160a01b03166106af565b005b6101bf610804565b6102c1600480360360208110156102e157600080fd5b50356001600160a01b0316610808565b6101bf6004803603602081101561030757600080fd5b50356001600160a01b031661092c565b6101bf6004803603602081101561032d57600080fd5b50356001600160a01b031661094b565b6101bf61095d565b6101bf610a77565b610277610a7d565b6103726004803603602081101561036b57600080fd5b5035610a8c565b604080519115158252519081900360200190f35b6102c16004803603604081101561039c57600080fd5b50803590602001351515610c1e565b6101bf610cd5565b6102c1600480360360208110156103c957600080fd5b5035610cdb565b6102c1600480360360608110156103e657600080fd5b5080359060208101359060400135610d93565b610277610e53565b610277610e6b565b6101bf610e83565b6101bf610e89565b61019e6004803603602081101561042f57600080fd5b5035610e8f565b6000806000610443610804565b60055460005491925090156104c1576000600354831061046557600354610467565b825b90506002548111156104bf576104bc826104b06000546104a460045461049860025488610ede90919063ffffffff16565b9063ffffffff610f2916565b9063ffffffff610f8216565b9063ffffffff610fc416565b91505b505b6001600160a01b0385166000908152600b60209081526040808320546006835281842054600790935292205461054a929161053e916104b090670de0b6b3a7640000906104a49061051990899063ffffffff610ede16565b6001600160a01b038d166000908152600160205260409020549063ffffffff610f2916565b9063ffffffff610ede16565b9250600093505050915091565b425b90565b8060008080808061056b610557565b6001600160a01b038816600090815260066020908152604080832054600b90925282205490975095509091506105a088610436565b6001600160a01b0389166000908152600b60205260409020549092506105d2915061053e836105cd610557565b61101e565b93506105df818984611093565b92505091939550919395565b60008060008060006105fb610804565b600354600454919650935061061e90670de0b6b3a764000063ffffffff610f8216565b935060035485101561065b57610654610647600f61049888600354610ede90919063ffffffff16565b429063ffffffff610fc416565b9150610688565b610685610678600f61049860035489610ede90919063ffffffff16565b429063ffffffff610ede16565b91505b60085490509091929394565b600a5481565b600d546001600160a01b031681565b60035481565b600c546001600160a01b0316331461070e576040805162461bcd60e51b815260206004820152601e60248201527f6f6e6c7920636f6e7472616374206f776e65722063616e206368616e67650000604482015290519081900360640190fd5b600d80546001600160a01b038381166001600160a01b0319831681179093556040805163095ea7b360e01b81526004810194909452600019602485015251911691730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255391829163095ea7b39160448083019260209291908290030181600087803b15801561078e57600080fd5b505af11580156107a2573d6000803e3d6000fd5b505050506040513d60208110156107b857600080fd5b5050604080516001600160a01b0380851682528516602082015281517f792c21b3a699347e8ba7f050a0a835bed14336a5284e2476670fae2e20a269f1929181900390910190a1505050565b4390565b6000610812610804565b6000549091501561086b576000600354821061083057600354610832565b815b9050600254811115610869576108656005546104b06000546104a460045461049860025488610ede90919063ffffffff16565b6005555b505b60028190556001600160a01b03821615610928576001600160a01b0382166000908152600760205260408120546005546108aa9163ffffffff610ede16565b90508015610926576001600160a01b0383166000908152600660209081526040808320546001909252909120546108fa91906104b090670de0b6b3a7640000906104a4908663ffffffff610f2916565b6001600160a01b0384166000908152600660209081526040808320939093556005546007909152919020555b505b5050565b6001600160a01b0381166000908152600160205260409020545b919050565b600b6020526000908152604090205481565b600061096833610808565b336000908152600b6020908152604080832054600690925290912054610995919061053e906105cd610557565b9050801561055957336000908152600b60205260409020546109bd908263ffffffff610fc416565b336000818152600b60205260408082209390935582516340c10f1960e01b81526004810192909252602482018490529151730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b50506040805184815290513393507f6fe937bf2c13cbdc6c3e1644deef42cd89a7694c31f592ce251e90727af12e2792509081900360200190a290565b60005490565b600c546001600160a01b031681565b6000610a9733610808565b3360009081526006602052604090205480831180610abe5750600d546001600160a01b0316155b15610acd576000915050610946565b336000908152600660205260408082208054869003905580516340c10f1960e01b8152306004820152602481018690529051730538a9b4f4dcb0cb01a7fa34e17c0ac947c22553926340c10f19926044808201939182900301818387803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050600d54600854600a546009546040805163caa32b9160e01b8152600481018b9052336024820152604481019490945260648401929092526084830152516001600160a01b03909216935083925063caa32b919160a480830192600092919082900301818387803b158015610bc057600080fd5b505af1158015610bd4573d6000803e3d6000fd5b505060085460408051888152602081019290925280513394507f8b8ede3b1a5bbf7eb12af900b210a8f77a6251f55ef3a3caab5250dcf1589c4b9350918290030190a25050919050565b610c2733610808565b811561092857600054610c40908363ffffffff610ede16565b600090815533815260016020526040902054610c62908363ffffffff610ede16565b33600081815260016020526040902091909155610c9b90736f259637dcd74c767781e37bc6133cd6a68aa161908463ffffffff61112316565b60408051838152905133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75919081900360200190a25050565b60025490565b610ce433610808565b8015610d9057600054610cfd908263ffffffff610fc416565b600090815533815260016020526040902054610d1f908263ffffffff610fc416565b33600081815260016020526040902091909155610d5990736f259637dcd74c767781e37bc6133cd6a68aa16190308463ffffffff61117516565b60408051828152905133917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d919081900360200190a25b50565b600c546001600160a01b03163314610df2576040805162461bcd60e51b815260206004820152601b60248201527f63616e2062652063616c6c6564206279206f776e6572206f6e6c790000000000604482015290519081900360640190fd5b610dfc6000610808565b610e078383836111d5565b60045460035460085460408051938452602084019290925282820152517f42bc0b5308138fcf9b84f2d9cabfe315aa695643792e122d567b1bf0f3af3ac59181900360600190a1505050565b730538a9b4f4dcb0cb01a7fa34e17c0ac947c2255381565b736f259637dcd74c767781e37bc6133cd6a68aa16181565b60085481565b60095481565b600080600091506000600454611680029050610ed6670de0b6b3a76400006104a486610498610ec989600054610fc490919063ffffffff16565b869063ffffffff610f8216565b915050915091565b6000610f2083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611201565b90505b92915050565b600082610f3857506000610f23565b82820282848281610f4557fe5b0414610f205760405162461bcd60e51b81526004018080602001828103825260218152602001806114ed6021913960400191505060405180910390fd5b6000610f2083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611298565b600082820183811015610f20576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600060085482101561103257506000610f23565b8261103f57506000610f23565b600061106160016104b06009546104a460085488610ede90919063ffffffff16565b9050600061107e600a546104a48488610f2990919063ffffffff16565b90508481111561108b5750835b949350505050565b6001600160a01b0382166000908152600660205260408120546110b6858461101e565b14156110c45750600061111c565b60085482116110d6575060085461111c565b60006110f860016104b06009546104a460085488610ede90919063ffffffff16565b905060006111176008546104b060095485610f2990919063ffffffff16565b925050505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109269084906112fd565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526111cf9085906112fd565b50505050565b670de0b6b3a764000083026004556116808202836111f5826104b0610804565b60035550506008555050565b600081848411156112905760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561125557818101518382015260200161123d565b50505050905090810190601f1680156112825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836112e75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561125557818101518382015260200161123d565b5060008385816112f357fe5b0495945050505050565b61130f826001600160a01b03166114b5565b611360576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061139e5780518252601f19909201916020918201910161137f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611400576040519150601f19603f3d011682016040523d82523d6000602084013e611405565b606091505b50915091508161145c576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156111cf5780806020019051602081101561147857600080fd5b50516111cf5760405162461bcd60e51b815260040180806020018281038252602a81526020018061150e602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470811580159061108b575014159291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158207a8166ac000370746f08d0a21e22f58392ea8117ec788152529ecd71d5af6d5f64736f6c63430005110032
Deployed Bytecode Sourcemap
15290:12114:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15290:12114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21807:1023;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21807:1023:0;-1:-1:-1;;;;;21807:1023:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24379:95;;;:::i;:::-;;;;;;;;;;;;;;;;25853:711;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25853:711:0;-1:-1:-1;;;;;25853:711:0;;:::i;:::-;;;;-1:-1:-1;;;;;25853:711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22838:671;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16346:29;;;:::i;16585:32::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16585:32:0;;;;;;;;;;;;;;15780:30;;;:::i;21324:475::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21324:475:0;-1:-1:-1;;;;;21324:475:0;;:::i;:::-;;24277:90;;;:::i;18553:1274::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18553:1274:0;-1:-1:-1;;;;;18553:1274:0;;:::i;24056:112::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24056:112:0;-1:-1:-1;;;;;24056:112:0;;:::i;16407:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16407:49:0;-1:-1:-1;;;;;16407:49:0;;:::i;25391:450::-;;;:::i;24176:93::-;;;:::i;16465:20::-;;;:::i;20616:700::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20616:700:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20214:392;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20214:392:0;;;;;;;;;:::i;23948:100::-;;;:::i;19835:371::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19835:371:0;;:::i;18111:434::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18111:434:0;;;;;;;;;;;;:::i;15493:88::-;;;:::i;15397:87::-;;;:::i;16210:37::-;;;:::i;16283:30::-;;;:::i;23639:301::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23639:301:0;;:::i;21807:1023::-;21862:14;21878:18;21944:15;21962:13;:11;:13::i;:::-;22028:22;;21996:29;22169:12;21944:31;;-1:-1:-1;22028:22:0;22169:16;22165:410;;22216:27;22256:15;;22246:7;:25;:53;;22284:15;;22246:53;;;22274:7;22246:53;22216:83;;22340:16;;22318:19;:38;22314:250;;;22401:147;22526:21;22401:102;22490:12;;22401:84;22465:19;;22401:41;22425:16;;22401:19;:23;;:41;;;;:::i;:::-;:63;:84;:63;:84;:::i;:::-;:88;:102;:88;:102;:::i;:::-;:124;:147;:124;:147;:::i;:::-;22377:171;;22314:250;22165:410;;-1:-1:-1;;;;;22768:22:0;;;;;;:13;:22;;;;;;;;;22731:12;:21;;;;;;22659:26;:35;;;;;;22600:191;;22768:22;22600:153;;:116;;22711:4;;22600:96;;22633:62;;:21;;:62;:25;:62;:::i;:::-;-1:-1:-1;;;;;22600:18:0;;;;;;:9;:18;;;;;;;:96;:32;:96;:::i;:153::-;:167;:191;:167;:191;:::i;:::-;22587:204;;22821:1;22812:10;;21807:1023;;;;;:::o;24379:95::-;24451:15;24379:95;;:::o;25853:711::-;26132:12;25930:19;;;;;26169:16;:14;:16::i;:::-;-1:-1:-1;;;;;26220:26:0;;;;;;:12;:26;;;;;;;;;26269:13;:27;;;;;;26220:26;;-1:-1:-1;26269:27:0;-1:-1:-1;26155:30:0;;-1:-1:-1;26333:21:0;26233:12;26333:7;:21::i;:::-;-1:-1:-1;;;;;26434:26:0;;;;;;:13;:26;;;;;;26307:47;;-1:-1:-1;26384:77:0;;-1:-1:-1;26384:45:0;26307:47;26412:16;:14;:16::i;:::-;26384:15;:45::i;:77::-;26365:96;;26488:58;26508:10;26520:12;26534:11;26488:19;:58::i;:::-;26472:74;;25853:711;;;;;;;;:::o;22838:671::-;22887:20;22909:26;22937:29;22968:28;22998:26;23052:13;:11;:13::i;:::-;23100:15;;23147:19;;23037:28;;-1:-1:-1;23100:15:0;-1:-1:-1;23147:29:0;;23171:4;23147:29;:23;:29;:::i;:::-;23126:50;;23206:15;;23191:12;:30;23187:263;;;23260:62;23280:41;23318:2;23280:33;23300:12;23280:15;;:19;;:33;;;;:::i;:41::-;23260:15;;:62;:19;:62;:::i;:::-;23237:85;;23187:263;;;23376:62;23396:41;23434:2;23396:33;23413:15;;23396:12;:16;;:33;;;;:::i;:41::-;23376:15;;:62;:19;:62;:::i;:::-;23353:85;;23187:263;23479:22;;23460:41;;22838:671;;;;;:::o;16346:29::-;;;;:::o;16585:32::-;;;-1:-1:-1;;;;;16585:32:0;;:::o;15780:30::-;;;;:::o;21324:475::-;21410:5;;-1:-1:-1;;;;;21410:5:0;21396:10;:19;21388:62;;;;;-1:-1:-1;;;21388:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21484:17;;;-1:-1:-1;;;;;21512:33:0;;;-1:-1:-1;;;;;;21512:33:0;;;;;;;21623:106;;;-1:-1:-1;;;21623:106:0;;;;;;;;;-1:-1:-1;;21623:106:0;;;;;21484:17;;;15538:42;;;;21623:23;;:106;;;;;;;;;;;;;;21463:18;15538:42;21623:106;;;5:2:-1;;;;30:1;27;20:12;5:2;21623:106:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21623:106:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;21747:44:0;;;-1:-1:-1;;;;;21747:44:0;;;;;;;21623:106;21747:44;;;;;;;;;;;;;;;;21324:475;;;:::o;24277:90::-;24347:12;24277:90;:::o;18553:1274::-;18716:15;18734:13;:11;:13::i;:::-;18881:1;18866:12;18716:31;;-1:-1:-1;18866:16:0;18862:398;;18899:27;18939:15;;18929:7;:25;:53;;18967:15;;18929:53;;;18957:7;18929:53;18899:83;;19023:16;;19001:19;:38;18997:252;;;19085:148;19210:22;;19085:102;19174:12;;19085:84;19149:19;;19085:41;19109:16;;19085:19;:23;;:41;;;;:::i;:148::-;19060:22;:173;18997:252;18862:398;;19272:16;:26;;;-1:-1:-1;;;;;19315:21:0;;;19311:509;;-1:-1:-1;;;;;19420:35:0;;19355;19420;;;:26;:35;;;;;;19393:22;;:63;;;:26;:63;:::i;:::-;19355:101;-1:-1:-1;19477:31:0;;19473:336;;-1:-1:-1;;;;;19690:21:0;;;;;;:12;:21;;;;;;;;;19570:9;:18;;;;;;;:142;;19690:21;19570:97;;19662:4;;19570:69;;19611:27;19570:69;:40;:69;:::i;:142::-;-1:-1:-1;;;;;19529:21:0;;;;;;:12;:21;;;;;;;;:183;;;;19771:22;;19733:26;:35;;;;;;:60;19473:336;19311:509;;18553:1274;;:::o;24056:112::-;-1:-1:-1;;;;;24142:18:0;;24115:7;24142:18;;;:9;:18;;;;;;24056:112;;;;:::o;16407:49::-;;;;;;;;;;;;;:::o;25391:450::-;25433:14;25459:24;25472:10;25459:12;:24::i;:::-;25581:10;25567:25;;;;:13;:25;;;;;;;;;25519:12;:24;;;;;;;25503:90;;25567:25;25503:59;;25545:16;:14;:16::i;25503:90::-;25494:99;-1:-1:-1;25617:10:0;;25614:220;;25685:10;25671:25;;;;:13;:25;;;;;;:37;;25701:6;25671:37;:29;:37;:::i;:::-;25657:10;25643:25;;;;:13;:25;;;;;;:65;;;;25725:35;;-1:-1:-1;;;25725:35:0;;;;;;;;;;;;;;;;;15538:42;;25725:15;;:35;;;;;;;;;;;25643:25;15538:42;25725:35;;;5:2:-1;;;;30:1;27;20:12;5:2;25725:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25782:40:0;;;;;;;;25803:10;;-1:-1:-1;25782:40:0;;-1:-1:-1;25782:40:0;;;;;;;;25391:450;:::o;24176:93::-;24222:7;24249:12;24176:93;:::o;16465:20::-;;;-1:-1:-1;;;;;16465:20:0;;:::o;20616:700::-;20674:4;20691:24;20704:10;20691:12;:24::i;:::-;20760:10;20726:18;20747:24;;;:12;:24;;;;;;20790:19;;;;:54;;-1:-1:-1;20813:17:0;;-1:-1:-1;;;;;20813:17:0;:31;20790:54;20786:99;;;20868:5;20861:12;;;;;20786:99;20910:10;20897:24;;;;:12;:24;;;;;;:34;;;;;;;21019:38;;-1:-1:-1;;;21019:38:0;;21043:4;21019:38;;;;;;;;;;;;15538:42;;21019:15;;:38;;;;;;;;;;;20897:24;15538:42;21019:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21019:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21107:17:0;;21180:22;;21204:14;;21220:15;;21136:100;;;-1:-1:-1;;;21136:100:0;;;;;;;;21168:10;21136:100;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21107:17:0;;;;-1:-1:-1;21107:17:0;;-1:-1:-1;21136:22:0;;:100;;;;;21070:22;;21136:100;;;;;;;21070:22;21107:17;21136:100;;;5:2:-1;;;;30:1;27;20:12;5:2;21136:100:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21285:22:0;;21252:56;;;;;;;;;;;;;;;21265:10;;-1:-1:-1;21252:56:0;;-1:-1:-1;21252:56:0;;;;;;;20616:700;;;;;:::o;20214:392::-;20277:24;20290:10;20277:12;:24::i;:::-;20318:10;;20314:261;;20360:12;;:24;;20377:6;20360:24;:16;:24;:::i;:::-;20345:12;:39;;;20433:10;20423:21;;:9;:21;;;;;;:33;;20449:6;20423:33;:25;:33;:::i;:::-;20409:10;20399:21;;;;:9;:21;;;;;:57;;;;20471:44;;15441:42;;20508:6;20471:44;:24;:44;:::i;:::-;20535:28;;;;;;;;20544:10;;20535:28;;;;;;;;;;-1:-1:-1;;20214:392:0:o;23948:100::-;24024:16;;23948:100;:::o;19835:371::-;19884:24;19897:10;19884:12;:24::i;:::-;19925:10;;19921:278;;19967:12;;:24;;19984:6;19967:24;:16;:24;:::i;:::-;19952:12;:39;;;20040:10;20030:21;;:9;:21;;;;;;:33;;20056:6;20030:33;:25;:33;:::i;:::-;20016:10;20006:21;;;;:9;:21;;;;;:57;;;;20078:63;;15441:42;;20127:4;20134:6;20078:63;:28;:63;:::i;:::-;20161:26;;;;;;;;20168:10;;20161:26;;;;;;;;;;19921:278;19835:371;:::o;18111:434::-;18266:5;;-1:-1:-1;;;;;18266:5:0;18252:10;:19;18244:59;;;;;-1:-1:-1;;;18244:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18314:24;18335:1;18314:12;:24::i;:::-;18351:83;18378:19;18399:23;18424:9;18351:26;:83::i;:::-;18476:19;;18497:15;;18514:22;;18452:85;;;;;;;;;;;;;;;;;;;;;;;;;;;18111:434;;;:::o;15493:88::-;15538:42;15493:88;:::o;15397:87::-;15441:42;15397:87;:::o;16210:37::-;;;;:::o;16283:30::-;;;;:::o;23639:301::-;23708:14;23724:18;23764:1;23755:10;;23776:29;23808:19;;23830:4;23808:26;23776:58;;23859:73;23927:4;23859:63;23915:6;23859:51;23885:24;23902:6;23885:12;;:16;;:24;;;;:::i;:::-;23859:21;;:51;:25;:51;:::i;:73::-;23845:87;;23639:301;;;;:::o;1577:136::-;1635:7;1662:43;1666:1;1669;1662:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1655:50;;1577:136;;;;;:::o;2493:471::-;2551:7;2796:6;2792:47;;-1:-1:-1;2826:1:0;2819:8;;2792:47;2863:5;;;2867:1;2863;:5;:1;2887:5;;;;;:10;2879:56;;;;-1:-1:-1;;;2879:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3432:132;3490:7;3517:39;3521:1;3524;3517:39;;;;;;;;;;;;;;;;;:3;:39::i;1121:181::-;1179:7;1211:5;;;1235:6;;;;1227:46;;;;;-1:-1:-1;;;1227:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24486:887;24570:7;24665:22;;24658:4;:29;24655:68;;;-1:-1:-1;24710:1:0;24703:8;;24655:68;24779:17;24775:57;;-1:-1:-1;24819:1:0;24812:8;;24775:57;24924:25;24961:80;25039:1;24961:63;25008:15;;24961:32;24970:22;;24961:4;:8;;:32;;;;:::i;:80::-;24924:117;;25128:21;25161:75;25221:14;;25161:45;25188:17;25161:12;:26;;:45;;;;:::i;:75::-;25128:108;;25267:12;25252;:27;25249:85;;;-1:-1:-1;25310:12:0;25249:85;25353:12;24486:887;-1:-1:-1;;;;24486:887:0:o;26576:819::-;-1:-1:-1;;;;;26811:25:0;;26684:7;26811:25;;;:12;:25;;;;;;26772:35;26788:12;26802:4;26772:15;:35::i;:::-;:64;26769:103;;;-1:-1:-1;26859:1:0;26852:8;;26769:103;26975:22;;26967:4;:30;26964:90;;-1:-1:-1;27020:22:0;;27013:29;;26964:90;27103:25;27140:80;27218:1;27140:63;27187:15;;27140:32;27149:22;;27140:4;:8;;:32;;;;:::i;:80::-;27103:117;;27233:21;27266:86;27329:22;;27266:48;27298:15;;27266:17;:31;;:48;;;;:::i;:86::-;27233:119;-1:-1:-1;;;26576:819:0;;;;;;:::o;12130:176::-;12239:58;;;-1:-1:-1;;;;;12239:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12239:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12213:85:0;;12232:5;;12213:18;:85::i;12314:204::-;12441:68;;;-1:-1:-1;;;;;12441:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12441:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12415:95:0;;12434:5;;12415:18;:95::i;:::-;12314:204;;;;:::o;17658:445::-;17975:4;17953:27;;17931:19;:49;17855:4;17829:30;;17899:19;18009:39;17829:30;18009:13;:11;:13::i;:39::-;17991:15;:57;-1:-1:-1;;18061:22:0;:34;-1:-1:-1;;17658:445:0:o;2050:192::-;2136:7;2172:12;2164:6;;;;2156:29;;;;-1:-1:-1;;;2156:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2156:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2208:5:0;;;2050:192::o;4094:345::-;4180:7;4282:12;4275:5;4267:28;;;;-1:-1:-1;;;4267:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;4267:28:0;;4306:9;4322:1;4318;:5;;;;;;;4094:345;-1:-1:-1;;;;;4094:345:0:o;14169:1114::-;14773:27;14781:5;-1:-1:-1;;;;;14773:25:0;;:27::i;:::-;14765:71;;;;;-1:-1:-1;;;14765:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14910:12;14924:23;14959:5;-1:-1:-1;;;;;14951:19:0;14971:4;14951:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14951:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14909:67:0;;;;14995:7;14987:52;;;;;-1:-1:-1;;;14987:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15056:17;;:21;15052:224;;15198:10;15187:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15187:30:0;15179:85;;;;-1:-1:-1;;;15179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9061:810;9121:4;9780:20;;9623:66;9820:15;;;;;:42;;-1:-1:-1;9839:23:0;;;9812:51;-1:-1:-1;;9061:810:0:o
Swarm Source
bzzr://7a8166ac000370746f08d0a21e22f58392ea8117ec788152529ecd71d5af6d5f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.