Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Staking
Overview
Max Total Supply
480,947,096.740144045769938772 FEY
Holders
1,317 (0.00%)
Market
Price
$0.01 @ 0.000002 ETH
Onchain Market Cap
$2,666,205.21
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FEYToken
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Multiple files format)Audit Report
// SPDX-License-Identifier: -- 💰 -- import './Token.sol'; pragma solidity ^0.7.3; contract FEYToken is Token { using SafeMath for uint256; /** * @notice returns the interest rate by getting the global variable * YEARLY_INTEREST and subtracting the percentage passed. * Lowers the default interest rate as amount staked rises towards the totalSupply. * Used to record the rates for snapshots + to calculate stake interest * @param _percentage any uint256 figure * @return interestRate */ function getInterestRateYearly( uint256 _percentage ) public pure returns (uint256 interestRate) { return _percentage > 100 ? uint256(YEARLY_INTEREST).mul(uint256(10000)).div(_percentage) : YEARLY_INTEREST.mul(100); } /** * @notice a no args function used to get current APY * @dev _precision in getPercent is fixed to 4 * @return percentage -- totalStaked on a particular day out of totalSupply * @return interestRateYearly -- APY based on relative size of current total stakes */ function getYearlyInterestLatest() public view returns ( uint256 percentage, uint256 interestRateYearly ) { percentage = getPercent( globals.totalStakedAmount, totalSupply, 4 ); interestRateYearly = getInterestRateYearly( percentage ); } /** * @notice function used to get APY of a specific day * @param _day integer for the target day, starting @ 0 * @dev _precision in getPercent is fixed to 4 * @return percentage -- totalStaked on a particular day out of totalSupply * @return interestRateYearly -- APY based on relative size of stake */ function getYearlyInterestHistorical( uint256 _day ) public view returns ( uint256 percentage, uint256 interestRateYearly ) { SnapShot memory s = snapshots[_day]; if (s.totalSupply == 0) { return getYearlyInterestLatest(); } percentage = getPercent( s.totalStakedAmount, s.totalSupply, 4 ); interestRateYearly = getInterestRateYearly( percentage ); } /** * @notice calculates amount of interest earned per second * @param _stakedAmount principal amount * @param _totalStakedAmount summation of principal amount staked by everyone * @param _seconds time spent earning interest on a particular day * _seconds will be passed as the full SECONDS_IN_DAY for full days that we staked * _seconds will be the seconds that have passed by the time getInterest is called on the last day * @dev _precision in getPercent is fixed to 4 * @return durationInterestAmt -- totalStaked on a particular day out of totalSupply */ function getInterest( uint256 _stakedAmount, uint256 _totalStakedAmount, uint256 _seconds ) public view returns (uint256 durationInterestAmt) { uint256 percentage = getPercent( _totalStakedAmount, totalSupply, 4 ); uint256 interestRateYearly = getInterestRateYearly( percentage ); uint256 yearFullAmount = _stakedAmount .mul(interestRateYearly) .div(100); uint256 dailyInterestAmt = getPercent( yearFullAmount, 31556952, 0 ); durationInterestAmt = dailyInterestAmt .mul(_seconds) .div(100); } /** * @notice admin function to close a matured stake OBO the staker * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @dev can only close after all of the seconds of the last day have passed */ function closeGhostStake( uint256 _stakingId ) external onlyOwner { (uint256 daysOld, uint256 secondsOld) = getStakeAge( _stakingId ); require( daysOld == MAX_STAKE_DAYS && secondsOld == SECONDS_IN_DAY, 'FEYToken: not old enough' ); _closeStake( stakeList[_stakingId].userAddress, _stakingId ); emit ClosedGhostStake( daysOld, secondsOld, _stakingId ); } /** * @notice calculates number of days and remaining seconds on current day that a stake is open * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @return daysTotal -- number of complete days that the stake has been open * @return secondsToday -- number of seconds the stake has been open on the current day */ function getStakeAge( uint256 _stakingId ) public view returns ( uint256 daysTotal, uint256 secondsToday ) { StakeElement memory _stakeElement = stakeList[_stakingId]; uint256 secondsTotal = getNow() .sub(_stakeElement.stakedAt); daysTotal = secondsTotal .div(SECONDS_IN_DAY); if (daysTotal > MAX_STAKE_DAYS) { daysTotal = MAX_STAKE_DAYS; secondsToday = SECONDS_IN_DAY; } else { secondsToday = secondsTotal .mod(SECONDS_IN_DAY); } } /** * @notice calculates amount of interest due to be credited to the staker based on: * number of days and remaining seconds on current day that a stake is open * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @return stakeInterest -- total interest per second the stake was open on each day */ function getStakeInterest( uint256 _stakingId ) public view returns ( uint256 stakeInterest ) { StakeElement memory _stakeElement = stakeList[_stakingId]; if (_stakeElement.isActive == false) { stakeInterest = _stakeElement.interestAmount; } else { ( uint256 daysTotal, uint256 secondsToday ) = getStakeAge(_stakingId); uint256 finalDay = _currentFeyDay(); uint256 startDay = finalDay.sub(daysTotal); for (uint256 _day = startDay; _day < finalDay; _day++) { stakeInterest += getInterest( _stakeElement.stakedAmount, snapshots[_day].totalStakedAmount, SECONDS_IN_DAY ); } stakeInterest += getInterest( _stakeElement.stakedAmount, globals.totalStakedAmount, secondsToday ); } } /** * @notice penalties are taken if you close a stake before the completion of the 4th day * if closed before the end of the 15th day: 7.5% of staked amount is penalized * if closed before the end of the 30th day: 5% of staked amount is penalized * if closed before the end of the 45th day: 2.5% of staked amount is penalized * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @return penaltyAmount -- amount that will be debited from the stakers principal when they close their stake */ function getStakePenalty( uint256 _stakingId ) public view returns (uint256 penaltyAmount) { StakeElement memory _stakeElement = stakeList[_stakingId]; uint256 daysDifference = getNow() .sub(_stakeElement.stakedAt) .div(SECONDS_IN_DAY); if (daysDifference < 15) { penaltyAmount = percentCalculator( _stakeElement.stakedAmount, 750 ); } else if (daysDifference < 30) { penaltyAmount = percentCalculator( _stakeElement.stakedAmount, 500 ); } else if (daysDifference < 45) { penaltyAmount = percentCalculator( _stakeElement.stakedAmount, 250 ); } } /** * @notice calculates principal + interest - penalty (if applicable) * Note: this does not calculate a return rate, only what the sum would be if the stake was closed at that moment * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @dev the calculated value is only in memory * @return uint256 -- principal + interest - penalty */ function estimateReturn( uint256 _stakingId ) public view returns (uint256) { StakeElement memory _stakeElement = stakeList[_stakingId]; if (_stakeElement.isActive == false) { return _stakeElement.returnAmount; } return _stakeElement.stakedAmount .add(getStakeInterest(_stakingId)) .sub(getStakePenalty(_stakingId)); } /** * @notice close a stake older than 1 full day to: * 1) credit principal + interest - penalty to the balance of the staker * 2) update totalStakedAmount in globals * 3) take snapshot of current FEY status before the stake closes * No interest is accrued unless the stake is at least on its 4th day * Updates global variables to reflect the closed stake * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @return stakedAmount -- represents the total calculated by: principal + interest - penalty * @return penaltyAmount -- amount that will be debited from the stakers principal when they close their stake * @return interestAmount -- amount that will be debited from the stakers principal when they close their stake */ function closeStake( uint256 _stakingId ) public snapshotTriggerOnClose returns ( uint256 stakedAmount, uint256 penaltyAmount, uint256 interestAmount ) { return _closeStake( msg.sender, _stakingId ); } function _closeStake( address _staker, uint256 _stakingId ) internal returns ( uint256 stakedAmount, uint256 penaltyAmount, uint256 interestAmount ) { StakeElement memory _stakeElement = stakeList[_stakingId]; uint256 daysDifference = getNow() .sub(_stakeElement.stakedAt) .div(SECONDS_IN_DAY); require( daysDifference >= 3, 'FEYToken: immature stake' ); require( _stakeElement.userAddress == _staker, 'FEYToken: wrong stake owner' ); require( _stakeElement.isActive, 'FEYToken: stake not active' ); _stakeElement.isActive = false; stakedAmount = _stakeElement.stakedAmount; if (daysDifference >= 45) { interestAmount = getStakeInterest( _stakingId ); } penaltyAmount = getStakePenalty( _stakingId ); totalSupply = totalSupply .add(interestAmount) .sub(penaltyAmount); _stakeElement.interestAmount = interestAmount; _stakeElement.returnAmount = stakedAmount .add(interestAmount) .sub(penaltyAmount); stakeList[_stakingId] = _stakeElement; balances[_staker] = balances[_staker].add(_stakeElement.returnAmount); globals.totalStakedAmount = globals.totalStakedAmount.sub(stakedAmount); emit StakeEnd( _stakingId, _staker, _stakeElement.returnAmount ); emit Transfer( address(0x0), _staker, _stakeElement.returnAmount ); } /** * @notice open a stake: * 1) must be greater than MINIMUM_STAKE in Declarations * 2) address opening the stake must have the amount of funds that they wish to stake in their balances[0xaddress] * 3) increment the global incrementId that is used to set the stakingId * 3) take snapshot of current FEY status before the stake is opened * Updates global variables to reflect the new stake * @param _amount the amount that you want to stake, will become your principal amount * @return true if no revert or error occurs */ function openStake( uint256 _amount ) external incrementId snapshotTriggerOnOpen returns (bool) { require( _transferCheck( msg.sender, address(0x0), _amount, true ), 'FEYToken: _transferCheck failed' ); require( _amount >= MINIMUM_STAKE, 'FEYToken: stake below minimum' ); balances[msg.sender] = balances[msg.sender].sub(_amount); stakeList[globals.stakingId] = StakeElement( msg.sender, _amount, 0, 0, getNow(), true ); globals.totalStakedAmount = globals.totalStakedAmount.add(_amount); emit StakeStart( globals.stakingId, msg.sender, _amount ); emit Transfer( msg.sender, address(0), _amount ); return true; } /** * @notice getter for the data of a specific stake * @param _stakingId ID of the stake, used as the Key from the stakeList mapping * @return _stakedAmount -- represents the total calculated by: principal + interest - penalty * @return _userAddress -- address that was used to open the stake * @return _returnAmount -- principal + interest - penalty * @return interestAmount -- amount of interest accrued after closing the stake * @return _stakedAt -- timestamp of when stake was opened * @return _isActive -- boolean for if the stake is open and accruing interest */ function getStaking( uint256 _stakingId ) external view returns ( uint256 _stakedAmount, address _userAddress, uint256 _returnAmount, uint256 interestAmount, uint256 _stakedAt, bool _isActive ) { StakeElement memory _stakeElement = stakeList[_stakingId]; return ( _stakeElement.stakedAmount, _stakeElement.userAddress, _stakeElement.returnAmount, _stakeElement.interestAmount, _stakeElement.stakedAt, _stakeElement.isActive ); } }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; abstract contract Declaration { string public name = "Feyorra"; string public symbol = "FEY"; uint256 public decimals = 18; uint256 public totalSupply = 1000000000E18; uint256 public constant YEARLY_INTEREST = 410; uint256 public constant MINIMUM_STAKE = 100E18; uint256 public constant SECONDS_IN_DAY = 86400; uint256 public constant MAX_STAKE_DAYS = 1825; uint256 public immutable LAUNCH_TIME; struct Globals { uint256 stakingId; uint256 currentFeyDay; uint256 totalStakedAmount; } struct StakeElement { address userAddress; uint256 stakedAmount; uint256 returnAmount; uint256 interestAmount; uint256 stakedAt; bool isActive; } struct SnapShot { uint256 totalSupply; uint256 totalStakedAmount; } mapping(address => uint256) public balances; mapping(address => mapping(address => uint256)) public allowances; mapping(uint256 => SnapShot) public snapshots; mapping(uint256 => StakeElement) public stakeList; Globals public globals; modifier incrementId() { _; globals.stakingId++; } constructor() { LAUNCH_TIME = block.timestamp; balances[msg.sender] = totalSupply; } }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; abstract contract Events { event StakeStart( uint256 indexed _stakingId, address _address, uint256 _amount ); event StakeEnd( uint256 indexed _stakingId, address _address, uint256 _amount ); event Transfer( address indexed _from, address indexed _to, uint256 _value ); event Approval( address indexed _owner, address indexed _spender, uint256 _value ); event ClosedGhostStake( uint256 daysOld, uint256 secondsOld, uint256 stakeId ); event SnapshotCaptured( uint256 _totalSupply, uint256 _totalStakedAmount, uint64 _snapshotDay ); }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; import './Timing.sol'; import './Ownable.sol'; import './Events.sol'; import './SafeMath.sol'; contract Helper is Ownable, Timing, Events { using SafeMath for uint256; /** * @notice burns set amount of tokens * @dev currently unused based on changing requirements * @param _amount -- amount to be burned * @return true if burn() succeeds */ function burn( uint256 _amount ) external onlyOwner returns (bool) { require( balances[msg.sender].sub(_amount) >= 0, 'FEYToken: exceeding balance' ); totalSupply = totalSupply.sub(_amount); balances[msg.sender] = balances[msg.sender].sub(_amount); emit Transfer( msg.sender, address(0x0), _amount ); return true; } /** * @notice Groups common requirements in global, internal function * @dev Used by Transfer(), TransferFrom(), OpenStake() * @param _sender -- msg.sender of the functions listed above * @param _recipient -- recipient of amount * @param _amount -- amount that is transferred * @param _allowBurnAddress -- boolean to allow burning tokens * @return balance[] value of the input address */ function _transferCheck( address _sender, address _recipient, uint256 _amount, bool _allowBurnAddress ) internal view returns (bool) { if (_allowBurnAddress == false) { require( _recipient != address(0x0), 'FEYToken: cannot send to burn address' ); } require( balances[_sender] >= _amount, 'FEYToken: exceeding balance' ); require( balances[_recipient].add(_amount) >= balances[_recipient], 'FEYToken: overflow detected' ); return true; } /** * @notice Used to calculate % that is staked out of the totalSupply * @dev Used by getYearlyInterestLatest(), getYearlyInterestHistorical(), + twice in getInterest() * @param _numerator -- numerator, typically globals.totalStakedAmount * @param _denominator -- denominator, typically totalSupply * @param _precision -- number of decimal points, fixed at 4 * @return quotient -- calculated value */ function getPercent( uint256 _numerator, uint256 _denominator, uint256 _precision ) public pure returns(uint256 quotient) { uint256 numerator = _numerator * 10 ** (_precision + 1); quotient = ((numerator / _denominator) + 5) / 10; } /** * @notice Used to reduce value by a set percentage amount * @dev Used to calculate penaltyAmount * @param _value -- initial value, typically _stakeElement.stakedAmount * @param _perc -- percentage reduction that will be applied * @return percentageValue -- value reduced by the input percentage */ function percentCalculator( uint256 _value, uint256 _perc ) public pure returns (uint256 percentageValue) { percentageValue = _value .mul(_perc) .div(10000); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.8.0; contract Migrations { address public owner; uint public last_completed_migration; constructor() { owner = msg.sender; } modifier restricted() { if (msg.sender == owner) _; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } function upgrade(address new_address) public restricted { Migrations upgraded = Migrations(new_address); upgraded.setCompleted(last_completed_migration); } }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; contract Ownable { address public owner; event ownershipChanged( address indexed _invoker, address indexed _newOwner ); constructor() { owner = msg.sender; } modifier onlyOwner() { require( msg.sender == owner, 'Ownable: must be the owner' ); _; } function changeOwner( address _newOwner ) external onlyOwner returns (bool) { require( _newOwner != address(0), 'Ownable: new owner must not be the blackhole address' ); owner = _newOwner; emit ownershipChanged( msg.sender, _newOwner ); return true; } }
// SPDX-License-Identifier: -- 🎲 -- pragma solidity ^0.7.0; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, 'SafeMath: subtraction overflow'); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, 'SafeMath: division by zero'); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, 'SafeMath: modulo by zero'); return a % b; } }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; import "./Helper.sol"; abstract contract Snapshot is Helper { using SafeMath for uint; /** * @notice modifier to capture snapshots when a stake is opened * @dev used in OpenStake() in FeyToken */ modifier snapshotTriggerOnOpen() { _; _dailySnapshotPoint( _currentFeyDay() ); } /** * @notice modifier to capture snapshots when a stake is closed * @dev used in CloseStake() in FeyToken */ modifier snapshotTriggerOnClose() { _dailySnapshotPoint( _currentFeyDay() ); _; } /** * @notice Manually capture snapshot */ function manualDailySnapshot() external { _dailySnapshotPoint( _currentFeyDay() ); } /** * @notice takes in todays feyday + updates all missing snapshot days with todays data * @param _updateDay -- current FeyDay as outputted from timing's _currentFeyDay() function * Emits SnapshotCaptured event */ function _dailySnapshotPoint( uint64 _updateDay ) private { for (uint256 _day = globals.currentFeyDay; _day < _updateDay; _day++) { SnapShot memory s = snapshots[_day]; s.totalSupply = totalSupply; s.totalStakedAmount = globals.totalStakedAmount; snapshots[_day] = s; globals.currentFeyDay++; } emit SnapshotCaptured( totalSupply, globals.totalStakedAmount, _updateDay ); } }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; import './Declaration.sol'; abstract contract Timing is Declaration { /** * @notice external view function to get current FeyDay, unless called at LAUNCH_TIME, in which case it will return 0 to save gas * @dev called by _currentFeyDay * @return current FeyDay */ function currentFeyDay() public view returns (uint64) { return getNow() >= LAUNCH_TIME ? _currentFeyDay() : 0; } /** * @notice internal view function to calculate current FeyDay by using _feyDayFromStamp() * @dev called by snapshotTrigger(), manualDailySnapshot(), + getStakeInterest() * @return current FeyDay */ function _currentFeyDay() internal view returns (uint64) { return _feyDayFromStamp(getNow()); } /** * @notice calculates difference between passed timestamp + original LAUNCH_TIME, set when contract was deployed * @dev called by _currentFeyDay * @param _timestamp -- timestamp to use for difference * @return number of days between timestamp param + LAUNCH_TIME */ function _feyDayFromStamp( uint256 _timestamp ) internal view returns (uint64) { return uint64((_timestamp - LAUNCH_TIME) / SECONDS_IN_DAY); } /** * @dev called by getStakeAge(), getStakePenalty, closeStake(), openStake(), + _currentFeyDay * @return current block.timestamp */ function getNow() public view returns (uint256) { return block.timestamp; } }
// SPDX-License-Identifier: -- 💰 -- pragma solidity ^0.7.3; import "./Snapshot.sol"; contract Token is Snapshot { using SafeMath for uint256; /** * @notice Moves amount tokens from the caller’s account to recipient. * Returns a boolean value indicating whether the operation succeeded. * @dev See {IERC20-transfer}. * Emits an {Transfer} event indicating a successful transfer. * @param _receiver -- recipient of amount * @param _amount -- amount that is transferred * @return true if transfer() succeeds */ function transfer( address _receiver, uint256 _amount ) external returns (bool) { require( _transferCheck( msg.sender, _receiver, _amount, false ), 'Token: _transferCheck failed' ); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_receiver] = balances[_receiver].add(_amount); emit Transfer( msg.sender, _receiver, _amount ); return true; } /** * @notice 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. * @dev See {IERC20-transferFrom}. * Emits an {Transfer} event indicating a successful transfer. * @param _owner -- address who is sending the transfer amount * @param _receiver -- recipient of amount * @param _amount -- amount that is transferred * @return true if transferFrom() succeeds */ function transferFrom( address _owner, address _receiver, uint256 _amount ) external returns (bool) { require( _transferCheck( _owner, _receiver, _amount, false ), 'Token: _transferCheck failed' ); require( allowances[_owner][msg.sender] >= _amount, 'Token: exceeding allowance' ); allowances[_owner][msg.sender] = allowances[_owner][msg.sender].sub(_amount); balances[_owner] = balances[_owner].sub(_amount); balances[_receiver] = balances[_receiver].add(_amount); emit Transfer( _owner, _receiver, _amount ); return true; } /** * @notice Sets amount as the allowance of spender over the caller’s tokens. * @dev See {IERC20-approve}. * Emits an {Approval} event indicating how much was approved and whom is the spender * @param _spender -- approved address * @param _amount -- amount that they are approved to spend * @return true if Approve() succeeds */ function approve( address _spender, uint256 _amount ) external returns (bool) { allowances[msg.sender][_spender] = _amount; emit Approval( msg.sender, _spender, _amount ); return true; } /** * @notice Returns the amount of tokens owned by account. * @dev See {IERC20-approve}. * @param _address -- address whose balance will be returned * @return balance[] value of the input address */ function balanceOf( address _address ) external view returns (uint256) { return balances[_address]; } /** * @notice 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. * @dev See {IERC20-allowance}. * @param _owner -- owner address * @param _spender -- address that is approved to spend tokens * @return allowances[] value of the input addresses to reflect the value mapped to the _spender's address */ function allowance( address _owner, address _spender ) external view returns (uint256) { return allowances[_owner][_spender]; } }
Contract Security Audit
- JohnWick - Januay 11th, 2021 - Security Audit Report
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"daysOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondsOld","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeId","type":"uint256"}],"name":"ClosedGhostStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalStakedAmount","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"_snapshotDay","type":"uint64"}],"name":"SnapshotCaptured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_stakingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakeEnd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_stakingId","type":"uint256"},{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakeStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_invoker","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"ownershipChanged","type":"event"},{"inputs":[],"name":"LAUNCH_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STAKE_DAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_STAKE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_IN_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"YEARLY_INTEREST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"closeGhostStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"closeStake","outputs":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"penaltyAmount","type":"uint256"},{"internalType":"uint256","name":"interestAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentFeyDay","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"estimateReturn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakedAmount","type":"uint256"},{"internalType":"uint256","name":"_totalStakedAmount","type":"uint256"},{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"getInterest","outputs":[{"internalType":"uint256","name":"durationInterestAmt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"getInterestRateYearly","outputs":[{"internalType":"uint256","name":"interestRate","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getNow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_precision","type":"uint256"}],"name":"getPercent","outputs":[{"internalType":"uint256","name":"quotient","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"getStakeAge","outputs":[{"internalType":"uint256","name":"daysTotal","type":"uint256"},{"internalType":"uint256","name":"secondsToday","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"getStakeInterest","outputs":[{"internalType":"uint256","name":"stakeInterest","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"getStakePenalty","outputs":[{"internalType":"uint256","name":"penaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"getStaking","outputs":[{"internalType":"uint256","name":"_stakedAmount","type":"uint256"},{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_returnAmount","type":"uint256"},{"internalType":"uint256","name":"interestAmount","type":"uint256"},{"internalType":"uint256","name":"_stakedAt","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_day","type":"uint256"}],"name":"getYearlyInterestHistorical","outputs":[{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"uint256","name":"interestRateYearly","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getYearlyInterestLatest","outputs":[{"internalType":"uint256","name":"percentage","type":"uint256"},{"internalType":"uint256","name":"interestRateYearly","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globals","outputs":[{"internalType":"uint256","name":"stakingId","type":"uint256"},{"internalType":"uint256","name":"currentFeyDay","type":"uint256"},{"internalType":"uint256","name":"totalStakedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDailySnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"openStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_perc","type":"uint256"}],"name":"percentCalculator","outputs":[{"internalType":"uint256","name":"percentageValue","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"snapshots","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"totalStakedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeList","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"returnAmount","type":"uint256"},{"internalType":"uint256","name":"interestAmount","type":"uint256"},{"internalType":"uint256","name":"stakedAt","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052600760a0819052664665796f72726160c81b60c09081526200002a9160019190620000aa565b506040805180820190915260038082526246455960e81b60209092019182526200005791600291620000aa565b5060126003556b033b2e3c9fd0803ce80000006004553480156200007a57600080fd5b50600080546001600160a01b03191633908117825542608052600454908252600560205260409091205562000156565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000e257600085556200012d565b82601f10620000fd57805160ff19168380011785556200012d565b828001600101855582156200012d579182015b828111156200012d57825182559160200191906001019062000110565b506200013b9291506200013f565b5090565b5b808211156200013b576000815560010162000140565b608051611fdc6200017b6000398061078f52806111a45280611ee65250611fdc6000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806355b6ed5c1161013b578063a9059cbb116100b8578063d6565a2d1161007c578063d6565a2d146106eb578063dd62ed3e14610708578063e498484c14610736578063f67e675614610753578063f7d623bb146107705761023d565b8063a9059cbb1461066c578063bbe4fd5014610698578063bd5bf4ce146106a0578063c3124525146106db578063d2e6bcfa146106e35761023d565b80638da5cb5b116100ff5780638da5cb5b146105d25780638f2dbc21146105f657806395d89b411461061b57806399d0cfa114610623578063a6f9dae1146106465761023d565b806355b6ed5c1461055157806358ff4ddd1461057f578063613fc9fd1461059c57806361a52a36146105a457806370a08231146105ac5761023d565b806323b872dd116101c9578063313ce5671161018d578063313ce5671461045957806331eb3f37146104615780633a6088db146104bb57806342966c68146104d85780634c86259e146104f55761023d565b806323b872dd146103ad57806325c01505146103e357806326986d3f1461040257806327e235e31461040a578063291ab43b146104305761023d565b80630eb1bc08116102105780630eb1bc081461032157806317f4cb8b1461032957806318160ddd146103465780631c89edc71461034e5780631df5b4d2146103845761023d565b8063022466b51461024257806306fdde031461025c57806308dbbb03146102d9578063095ea7b3146102e1575b600080fd5b61024a61078d565b60408051918252519081900360200190f35b6102646107b1565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029e578181015183820152602001610286565b50505050905090810190601f1680156102cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61024a61083e565b61030d600480360360408110156102f757600080fd5b506001600160a01b03813516906020013561084b565b604080519115158252519081900360200190f35b61024a6108b2565b61024a6004803603602081101561033f57600080fd5b50356108b8565b61024a61099c565b61036b6004803603602081101561036457600080fd5b50356109a2565b6040805192835260208301919091528051918290030190f35b61024a6004803603606081101561039a57600080fd5b5080359060208101359060400135610a0d565b61030d600480360360608110156103c357600080fd5b506001600160a01b03813581169160208101359091169060400135610a6f565b610400600480360360208110156103f957600080fd5b5035610c2e565b005b61024a610d69565b61024a6004803603602081101561042057600080fd5b50356001600160a01b0316610d6f565b61024a6004803603606081101561044657600080fd5b5080359060208101359060400135610d81565b61024a610dad565b61047e6004803603602081101561047757600080fd5b5035610db3565b604080519687526001600160a01b0390951660208701528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b61024a600480360360208110156104d157600080fd5b5035610e26565b61030d600480360360208110156104ee57600080fd5b5035610f2e565b6105126004803603602081101561050b57600080fd5b5035611063565b604080516001600160a01b03909716875260208701959095528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b61024a6004803603604081101561056757600080fd5b506001600160a01b03813581169160200135166110a5565b61024a6004803603602081101561059557600080fd5b50356110c2565b61040061115d565b61024a61116f565b61024a600480360360208110156105c257600080fd5b50356001600160a01b0316611176565b6105da611191565b604080516001600160a01b039092168252519081900360200190f35b6105fe6111a0565b6040805167ffffffffffffffff9092168252519081900360200190f35b6102646111e5565b61024a6004803603604081101561063957600080fd5b508035906020013561123d565b61030d6004803603602081101561065c57600080fd5b50356001600160a01b031661124f565b61030d6004803603604081101561068257600080fd5b506001600160a01b038135169060200135611341565b61024a611433565b6106bd600480360360208110156106b657600080fd5b5035611437565b60408051938452602084019290925282820152519081900360600190f35b6106bd61145e565b61036b61146a565b61036b6004803603602081101561070157600080fd5b5035611491565b61024a6004803603604081101561071e57600080fd5b506001600160a01b03813581169160200135166114aa565b61024a6004803603602081101561074c57600080fd5b50356114d5565b61036b6004803603602081101561076957600080fd5b5035611503565b61030d6004803603602081101561078657600080fd5b50356115ba565b7f000000000000000000000000000000000000000000000000000000000000000081565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108365780601f1061080b57610100808354040283529160200191610836565b820191906000526020600020905b81548152906001019060200180831161081957829003601f168201915b505050505081565b68056bc75e2d6310000081565b3360008181526006602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b61019a81565b6000818152600860209081526040808320815160c08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830181905260059091015460ff16151560a0830152829061093f90620151809061093990610933611433565b906117de565b9061183b565b9050600f8110156109615761095a82602001516102ee61123d565b9250610995565b601e81101561097a5761095a82602001516101f461123d565b602d81101561099557610992826020015160fa61123d565b92505b5050919050565b60045481565b6000818152600760209081526040808320815180830190925280548083526001909101549282019290925282916109e5576109db61146a565b9250925050610a08565b6109f9816020015182600001516004610d81565b9250610a04836114d5565b9150505b915091565b600080610a1e846004546004610d81565b90506000610a2b826114d5565b90506000610a3e606461093989856118a5565b90506000610a52826301e185586000610d81565b9050610a63606461093983896118a5565b98975050505050505050565b6000610a7e84848460006118fe565b610acf576040805162461bcd60e51b815260206004820152601c60248201527f546f6b656e3a205f7472616e73666572436865636b206661696c656400000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600660209081526040808320338452909152902054821115610b47576040805162461bcd60e51b815260206004820152601a60248201527f546f6b656e3a20657863656564696e6720616c6c6f77616e6365000000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600660209081526040808320338452909152902054610b7590836117de565b6001600160a01b038516600081815260066020908152604080832033845282528083209490945591815260059091522054610bb090836117de565b6001600160a01b038086166000908152600560205260408082209390935590851681522054610bdf9083611a38565b6001600160a01b038085166000818152600560209081526040918290209490945580518681529051919392881692600080516020611f6283398151915292918290030190a35060019392505050565b6000546001600160a01b03163314610c8a576040805162461bcd60e51b815260206004820152601a60248201527927bbb730b136329d1036bab9ba103132903a34329037bbb732b960311b604482015290519081900360640190fd5b600080610c9683611503565b9150915061072182148015610cad57506201518081145b610cfe576040805162461bcd60e51b815260206004820152601860248201527f464559546f6b656e3a206e6f74206f6c6420656e6f7567680000000000000000604482015290519081900360640190fd5b600083815260086020526040902054610d20906001600160a01b031684611a92565b5050604080518481526020810184905280820186905290517f9fb5c0857986c4f071d2fdb4e3d5e9a116bb3be34ecc8a4ca1abe6a886d098d292509081900360600190a1505050565b61072181565b60056020526000908152604090205481565b600060018201600a90810a850290848281610d9857fe5b0460050181610da357fe5b0495945050505050565b60035481565b600090815260086020908152604091829020825160c08101845281546001600160a01b03168082526001830154938201849052600283015494820185905260038301546060830181905260048401546080840181905260059094015460ff16151560a09093018390529395909493929190565b6000818152600860209081526040808320815160c08101835281546001600160a01b0316815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301526005015460ff16151560a08201819052610e985780606001519150610f28565b600080610ea485611503565b915091506000610eb2611db8565b67ffffffffffffffff1690506000610eca82856117de565b9050805b82811015610f0a57610efe8660200151600760008481526020019081526020016000206001015462015180610a0d565b90960195600101610ece565b50610f1f856020015160096002015485610a0d565b86019550505050505b50919050565b600080546001600160a01b03163314610f8b576040805162461bcd60e51b815260206004820152601a60248201527927bbb730b136329d1036bab9ba103132903a34329037bbb732b960311b604482015290519081900360640190fd5b33600090815260056020526040812054610fa590846117de565b1015610ff8576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a20657863656564696e672062616c616e63650000000000604482015290519081900360640190fd5b60045461100590836117de565b6004553360009081526005602052604090205461102290836117de565b33600081815260056020908152604080832094909455835186815293519193600080516020611f62833981519152929081900390910190a35060015b919050565b6008602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909160ff1686565b600660209081526000928352604080842090915290825290205481565b6000818152600860209081526040808320815160c08101835281546001600160a01b0316815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301526005015460ff16151560a082018190526111335760400151905061105e565b61115661113f846108b8565b61093361114b86610e26565b602085015190611a38565b9392505050565b61116d611168611db8565b611dca565b565b6201518081565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b031681565b60007f00000000000000000000000000000000000000000000000000000000000000006111cb611433565b10156111d85760006111e0565b6111e0611db8565b905090565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108365780601f1061080b57610100808354040283529160200191610836565b600061115661271061093985856118a5565b600080546001600160a01b031633146112ac576040805162461bcd60e51b815260206004820152601a60248201527927bbb730b136329d1036bab9ba103132903a34329037bbb732b960311b604482015290519081900360640190fd5b6001600160a01b0382166112f15760405162461bcd60e51b8152600401808060200182810382526034815260200180611f2e6034913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0384169081178255604051909133917f5d92051b4a9b6e7154c5be37e18edd17bfd2e650a3a6dbf8c3eded0ef431ff0e9190a3506001919050565b600061135033848460006118fe565b6113a1576040805162461bcd60e51b815260206004820152601c60248201527f546f6b656e3a205f7472616e73666572436865636b206661696c656400000000604482015290519081900360640190fd5b336000908152600560205260409020546113bb90836117de565b33600090815260056020526040808220929092556001600160a01b038516815220546113e79083611a38565b6001600160a01b038416600081815260056020908152604091829020939093558051858152905191923392600080516020611f628339815191529281900390910190a350600192915050565b4290565b6000806000611447611168611db8565b6114513385611a92565b9250925092509193909250565b600954600a54600b5483565b6000806114806009600201546004546004610d81565b915061148b826114d5565b90509091565b6007602052600090815260409020805460019091015482565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000606482116114f1576114ec61019a60646118a5565b6108ac565b6108ac8261093961019a6127106118a5565b6000818152600860209081526040808320815160c08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830181905260059091015460ff16151560a0830152829190829061157890610933611433565b9050611587816201518061183b565b93506107218411156115a35761072193506201518092506115b3565b6115b08162015180611e7b565b92505b5050915091565b60006115ca3360008460016118fe565b61161b576040805162461bcd60e51b815260206004820152601f60248201527f464559546f6b656e3a205f7472616e73666572436865636b206661696c656400604482015290519081900360640190fd5b68056bc75e2d63100000821015611679576040805162461bcd60e51b815260206004820152601d60248201527f464559546f6b656e3a207374616b652062656c6f77206d696e696d756d000000604482015290519081900360640190fd5b3360009081526005602052604090205461169390836117de565b33600081815260056020908152604080832094909455835160c08101855292835282018590529181018290526060810191909152608081016116d3611433565b815260016020918201819052600954600090815260088352604090819020845181546001600160a01b0319166001600160a01b0390911617815592840151918301919091558201516002820155606082015160038201556080820151600482015560a0909101516005909101805460ff1916911515919091179055600b5461175b9083611a38565b600b55600954604080513381526020810185905281517f32705d413ffd76af5104215480a9b5784ae0349bc7fd042427e7f186d3bee6a2929181900390910190a26040805183815290516000913391600080516020611f628339815191529181900360200190a35060016117d0611168611db8565b600980546001019055919050565b600082821115611835576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211611891576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161189c57fe5b04949350505050565b6000826118b4575060006108ac565b828202828482816118c157fe5b04146111565760405162461bcd60e51b8152600401808060200182810382526021815260200180611f0d6021913960400191505060405180910390fd5b60008161194a576001600160a01b03841661194a5760405162461bcd60e51b8152600401808060200182810382526025815260200180611f826025913960400191505060405180910390fd5b6001600160a01b0385166000908152600560205260409020548311156119b7576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a20657863656564696e672062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600560205260409020546119da8185611a38565b1015611a2d576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a206f766572666c6f772064657465637465640000000000604482015290519081900360640190fd5b506001949350505050565b600082820183811015611156576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818152600860209081526040808320815160c08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830181905260059091015460ff16151560a0830152829182918290611b1190620151809061093990610933611433565b90506003811015611b69576040805162461bcd60e51b815260206004820152601860248201527f464559546f6b656e3a20696d6d6174757265207374616b650000000000000000604482015290519081900360640190fd5b866001600160a01b031682600001516001600160a01b031614611bd3576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a2077726f6e67207374616b65206f776e65720000000000604482015290519081900360640190fd5b8160a00151611c29576040805162461bcd60e51b815260206004820152601a60248201527f464559546f6b656e3a207374616b65206e6f7420616374697665000000000000604482015290519081900360640190fd5b600060a083015260208201519450602d8110611c4b57611c4886610e26565b92505b611c54866108b8565b9350611c6f8461093385600454611a3890919063ffffffff16565b60045560608201839052611c87846109338786611a38565b6040838101918252600088815260086020908152828220865181546001600160a01b0319166001600160a01b03918216178255828801516001830155945160028201819055606088015160038301556080880151600483015560a08801516005928301805460ff1916911515919091179055948c16835290522054611d0b91611a38565b6001600160a01b038816600090815260056020526040902055600b54611d3190866117de565b600b5560408083015181516001600160a01b038a1681526020810191909152815188927f1400fbd2ee4a2075080df3e8fe9550cae0dab5bd1d037452a12390141e45563d928290030190a2604080830151815190815290516001600160a01b03891691600091600080516020611f628339815191529181900360200190a350509250925092565b60006111e0611dc5611433565b611ee0565b600a545b8167ffffffffffffffff16811015611e2857600081815260076020818152604080842081518083019092526004548252600b5482840190815294869052929091525181559051600191820155600a80548201905501611dce565b50600454600b5460408051928352602083019190915267ffffffffffffffff831682820152517f94a13e9f9a91f7369c805b3cd3ffa4ae084c462ce95a364deeb1db54b4672f879181900360600190a150565b600081611ecf576040805162461bcd60e51b815260206004820152601860248201527f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000604482015290519081900360640190fd5b818381611ed857fe5b069392505050565b620151807f0000000000000000000000000000000000000000000000000000000000000000909103049056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a206e6577206f776e6572206d757374206e6f742062652074686520626c61636b686f6c652061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef464559546f6b656e3a2063616e6e6f742073656e6420746f206275726e2061646472657373a2646970667358221220c1917cf1139d22cdade3da4c9bb704080c483bc9a0e2340e761658bcd06d5bc864736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023d5760003560e01c806355b6ed5c1161013b578063a9059cbb116100b8578063d6565a2d1161007c578063d6565a2d146106eb578063dd62ed3e14610708578063e498484c14610736578063f67e675614610753578063f7d623bb146107705761023d565b8063a9059cbb1461066c578063bbe4fd5014610698578063bd5bf4ce146106a0578063c3124525146106db578063d2e6bcfa146106e35761023d565b80638da5cb5b116100ff5780638da5cb5b146105d25780638f2dbc21146105f657806395d89b411461061b57806399d0cfa114610623578063a6f9dae1146106465761023d565b806355b6ed5c1461055157806358ff4ddd1461057f578063613fc9fd1461059c57806361a52a36146105a457806370a08231146105ac5761023d565b806323b872dd116101c9578063313ce5671161018d578063313ce5671461045957806331eb3f37146104615780633a6088db146104bb57806342966c68146104d85780634c86259e146104f55761023d565b806323b872dd146103ad57806325c01505146103e357806326986d3f1461040257806327e235e31461040a578063291ab43b146104305761023d565b80630eb1bc08116102105780630eb1bc081461032157806317f4cb8b1461032957806318160ddd146103465780631c89edc71461034e5780631df5b4d2146103845761023d565b8063022466b51461024257806306fdde031461025c57806308dbbb03146102d9578063095ea7b3146102e1575b600080fd5b61024a61078d565b60408051918252519081900360200190f35b6102646107b1565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029e578181015183820152602001610286565b50505050905090810190601f1680156102cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61024a61083e565b61030d600480360360408110156102f757600080fd5b506001600160a01b03813516906020013561084b565b604080519115158252519081900360200190f35b61024a6108b2565b61024a6004803603602081101561033f57600080fd5b50356108b8565b61024a61099c565b61036b6004803603602081101561036457600080fd5b50356109a2565b6040805192835260208301919091528051918290030190f35b61024a6004803603606081101561039a57600080fd5b5080359060208101359060400135610a0d565b61030d600480360360608110156103c357600080fd5b506001600160a01b03813581169160208101359091169060400135610a6f565b610400600480360360208110156103f957600080fd5b5035610c2e565b005b61024a610d69565b61024a6004803603602081101561042057600080fd5b50356001600160a01b0316610d6f565b61024a6004803603606081101561044657600080fd5b5080359060208101359060400135610d81565b61024a610dad565b61047e6004803603602081101561047757600080fd5b5035610db3565b604080519687526001600160a01b0390951660208701528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b61024a600480360360208110156104d157600080fd5b5035610e26565b61030d600480360360208110156104ee57600080fd5b5035610f2e565b6105126004803603602081101561050b57600080fd5b5035611063565b604080516001600160a01b03909716875260208701959095528585019390935260608501919091526080840152151560a0830152519081900360c00190f35b61024a6004803603604081101561056757600080fd5b506001600160a01b03813581169160200135166110a5565b61024a6004803603602081101561059557600080fd5b50356110c2565b61040061115d565b61024a61116f565b61024a600480360360208110156105c257600080fd5b50356001600160a01b0316611176565b6105da611191565b604080516001600160a01b039092168252519081900360200190f35b6105fe6111a0565b6040805167ffffffffffffffff9092168252519081900360200190f35b6102646111e5565b61024a6004803603604081101561063957600080fd5b508035906020013561123d565b61030d6004803603602081101561065c57600080fd5b50356001600160a01b031661124f565b61030d6004803603604081101561068257600080fd5b506001600160a01b038135169060200135611341565b61024a611433565b6106bd600480360360208110156106b657600080fd5b5035611437565b60408051938452602084019290925282820152519081900360600190f35b6106bd61145e565b61036b61146a565b61036b6004803603602081101561070157600080fd5b5035611491565b61024a6004803603604081101561071e57600080fd5b506001600160a01b03813581169160200135166114aa565b61024a6004803603602081101561074c57600080fd5b50356114d5565b61036b6004803603602081101561076957600080fd5b5035611503565b61030d6004803603602081101561078657600080fd5b50356115ba565b7f000000000000000000000000000000000000000000000000000000005ff9379681565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108365780601f1061080b57610100808354040283529160200191610836565b820191906000526020600020905b81548152906001019060200180831161081957829003601f168201915b505050505081565b68056bc75e2d6310000081565b3360008181526006602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b61019a81565b6000818152600860209081526040808320815160c08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830181905260059091015460ff16151560a0830152829061093f90620151809061093990610933611433565b906117de565b9061183b565b9050600f8110156109615761095a82602001516102ee61123d565b9250610995565b601e81101561097a5761095a82602001516101f461123d565b602d81101561099557610992826020015160fa61123d565b92505b5050919050565b60045481565b6000818152600760209081526040808320815180830190925280548083526001909101549282019290925282916109e5576109db61146a565b9250925050610a08565b6109f9816020015182600001516004610d81565b9250610a04836114d5565b9150505b915091565b600080610a1e846004546004610d81565b90506000610a2b826114d5565b90506000610a3e606461093989856118a5565b90506000610a52826301e185586000610d81565b9050610a63606461093983896118a5565b98975050505050505050565b6000610a7e84848460006118fe565b610acf576040805162461bcd60e51b815260206004820152601c60248201527f546f6b656e3a205f7472616e73666572436865636b206661696c656400000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600660209081526040808320338452909152902054821115610b47576040805162461bcd60e51b815260206004820152601a60248201527f546f6b656e3a20657863656564696e6720616c6c6f77616e6365000000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600660209081526040808320338452909152902054610b7590836117de565b6001600160a01b038516600081815260066020908152604080832033845282528083209490945591815260059091522054610bb090836117de565b6001600160a01b038086166000908152600560205260408082209390935590851681522054610bdf9083611a38565b6001600160a01b038085166000818152600560209081526040918290209490945580518681529051919392881692600080516020611f6283398151915292918290030190a35060019392505050565b6000546001600160a01b03163314610c8a576040805162461bcd60e51b815260206004820152601a60248201527927bbb730b136329d1036bab9ba103132903a34329037bbb732b960311b604482015290519081900360640190fd5b600080610c9683611503565b9150915061072182148015610cad57506201518081145b610cfe576040805162461bcd60e51b815260206004820152601860248201527f464559546f6b656e3a206e6f74206f6c6420656e6f7567680000000000000000604482015290519081900360640190fd5b600083815260086020526040902054610d20906001600160a01b031684611a92565b5050604080518481526020810184905280820186905290517f9fb5c0857986c4f071d2fdb4e3d5e9a116bb3be34ecc8a4ca1abe6a886d098d292509081900360600190a1505050565b61072181565b60056020526000908152604090205481565b600060018201600a90810a850290848281610d9857fe5b0460050181610da357fe5b0495945050505050565b60035481565b600090815260086020908152604091829020825160c08101845281546001600160a01b03168082526001830154938201849052600283015494820185905260038301546060830181905260048401546080840181905260059094015460ff16151560a09093018390529395909493929190565b6000818152600860209081526040808320815160c08101835281546001600160a01b0316815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301526005015460ff16151560a08201819052610e985780606001519150610f28565b600080610ea485611503565b915091506000610eb2611db8565b67ffffffffffffffff1690506000610eca82856117de565b9050805b82811015610f0a57610efe8660200151600760008481526020019081526020016000206001015462015180610a0d565b90960195600101610ece565b50610f1f856020015160096002015485610a0d565b86019550505050505b50919050565b600080546001600160a01b03163314610f8b576040805162461bcd60e51b815260206004820152601a60248201527927bbb730b136329d1036bab9ba103132903a34329037bbb732b960311b604482015290519081900360640190fd5b33600090815260056020526040812054610fa590846117de565b1015610ff8576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a20657863656564696e672062616c616e63650000000000604482015290519081900360640190fd5b60045461100590836117de565b6004553360009081526005602052604090205461102290836117de565b33600081815260056020908152604080832094909455835186815293519193600080516020611f62833981519152929081900390910190a35060015b919050565b6008602052600090815260409020805460018201546002830154600384015460048501546005909501546001600160a01b039094169492939192909160ff1686565b600660209081526000928352604080842090915290825290205481565b6000818152600860209081526040808320815160c08101835281546001600160a01b0316815260018201549381019390935260028101549183019190915260038101546060830152600481015460808301526005015460ff16151560a082018190526111335760400151905061105e565b61115661113f846108b8565b61093361114b86610e26565b602085015190611a38565b9392505050565b61116d611168611db8565b611dca565b565b6201518081565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b031681565b60007f000000000000000000000000000000000000000000000000000000005ff937966111cb611433565b10156111d85760006111e0565b6111e0611db8565b905090565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108365780601f1061080b57610100808354040283529160200191610836565b600061115661271061093985856118a5565b600080546001600160a01b031633146112ac576040805162461bcd60e51b815260206004820152601a60248201527927bbb730b136329d1036bab9ba103132903a34329037bbb732b960311b604482015290519081900360640190fd5b6001600160a01b0382166112f15760405162461bcd60e51b8152600401808060200182810382526034815260200180611f2e6034913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0384169081178255604051909133917f5d92051b4a9b6e7154c5be37e18edd17bfd2e650a3a6dbf8c3eded0ef431ff0e9190a3506001919050565b600061135033848460006118fe565b6113a1576040805162461bcd60e51b815260206004820152601c60248201527f546f6b656e3a205f7472616e73666572436865636b206661696c656400000000604482015290519081900360640190fd5b336000908152600560205260409020546113bb90836117de565b33600090815260056020526040808220929092556001600160a01b038516815220546113e79083611a38565b6001600160a01b038416600081815260056020908152604091829020939093558051858152905191923392600080516020611f628339815191529281900390910190a350600192915050565b4290565b6000806000611447611168611db8565b6114513385611a92565b9250925092509193909250565b600954600a54600b5483565b6000806114806009600201546004546004610d81565b915061148b826114d5565b90509091565b6007602052600090815260409020805460019091015482565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000606482116114f1576114ec61019a60646118a5565b6108ac565b6108ac8261093961019a6127106118a5565b6000818152600860209081526040808320815160c08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830181905260059091015460ff16151560a0830152829190829061157890610933611433565b9050611587816201518061183b565b93506107218411156115a35761072193506201518092506115b3565b6115b08162015180611e7b565b92505b5050915091565b60006115ca3360008460016118fe565b61161b576040805162461bcd60e51b815260206004820152601f60248201527f464559546f6b656e3a205f7472616e73666572436865636b206661696c656400604482015290519081900360640190fd5b68056bc75e2d63100000821015611679576040805162461bcd60e51b815260206004820152601d60248201527f464559546f6b656e3a207374616b652062656c6f77206d696e696d756d000000604482015290519081900360640190fd5b3360009081526005602052604090205461169390836117de565b33600081815260056020908152604080832094909455835160c08101855292835282018590529181018290526060810191909152608081016116d3611433565b815260016020918201819052600954600090815260088352604090819020845181546001600160a01b0319166001600160a01b0390911617815592840151918301919091558201516002820155606082015160038201556080820151600482015560a0909101516005909101805460ff1916911515919091179055600b5461175b9083611a38565b600b55600954604080513381526020810185905281517f32705d413ffd76af5104215480a9b5784ae0349bc7fd042427e7f186d3bee6a2929181900390910190a26040805183815290516000913391600080516020611f628339815191529181900360200190a35060016117d0611168611db8565b600980546001019055919050565b600082821115611835576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211611891576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161189c57fe5b04949350505050565b6000826118b4575060006108ac565b828202828482816118c157fe5b04146111565760405162461bcd60e51b8152600401808060200182810382526021815260200180611f0d6021913960400191505060405180910390fd5b60008161194a576001600160a01b03841661194a5760405162461bcd60e51b8152600401808060200182810382526025815260200180611f826025913960400191505060405180910390fd5b6001600160a01b0385166000908152600560205260409020548311156119b7576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a20657863656564696e672062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600560205260409020546119da8185611a38565b1015611a2d576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a206f766572666c6f772064657465637465640000000000604482015290519081900360640190fd5b506001949350505050565b600082820183811015611156576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818152600860209081526040808320815160c08101835281546001600160a01b031681526001820154938101939093526002810154918301919091526003810154606083015260048101546080830181905260059091015460ff16151560a0830152829182918290611b1190620151809061093990610933611433565b90506003811015611b69576040805162461bcd60e51b815260206004820152601860248201527f464559546f6b656e3a20696d6d6174757265207374616b650000000000000000604482015290519081900360640190fd5b866001600160a01b031682600001516001600160a01b031614611bd3576040805162461bcd60e51b815260206004820152601b60248201527f464559546f6b656e3a2077726f6e67207374616b65206f776e65720000000000604482015290519081900360640190fd5b8160a00151611c29576040805162461bcd60e51b815260206004820152601a60248201527f464559546f6b656e3a207374616b65206e6f7420616374697665000000000000604482015290519081900360640190fd5b600060a083015260208201519450602d8110611c4b57611c4886610e26565b92505b611c54866108b8565b9350611c6f8461093385600454611a3890919063ffffffff16565b60045560608201839052611c87846109338786611a38565b6040838101918252600088815260086020908152828220865181546001600160a01b0319166001600160a01b03918216178255828801516001830155945160028201819055606088015160038301556080880151600483015560a08801516005928301805460ff1916911515919091179055948c16835290522054611d0b91611a38565b6001600160a01b038816600090815260056020526040902055600b54611d3190866117de565b600b5560408083015181516001600160a01b038a1681526020810191909152815188927f1400fbd2ee4a2075080df3e8fe9550cae0dab5bd1d037452a12390141e45563d928290030190a2604080830151815190815290516001600160a01b03891691600091600080516020611f628339815191529181900360200190a350509250925092565b60006111e0611dc5611433565b611ee0565b600a545b8167ffffffffffffffff16811015611e2857600081815260076020818152604080842081518083019092526004548252600b5482840190815294869052929091525181559051600191820155600a80548201905501611dce565b50600454600b5460408051928352602083019190915267ffffffffffffffff831682820152517f94a13e9f9a91f7369c805b3cd3ffa4ae084c462ce95a364deeb1db54b4672f879181900360600190a150565b600081611ecf576040805162461bcd60e51b815260206004820152601860248201527f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000604482015290519081900360640190fd5b818381611ed857fe5b069392505050565b620151807f000000000000000000000000000000000000000000000000000000005ff93796909103049056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a206e6577206f776e6572206d757374206e6f742062652074686520626c61636b686f6c652061646472657373ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef464559546f6b656e3a2063616e6e6f742073656e6420746f206275726e2061646472657373a2646970667358221220c1917cf1139d22cdade3da4c9bb704080c483bc9a0e2340e761658bcd06d5bc864736f6c63430007060033
Deployed Bytecode Sourcemap
88:15275:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;464:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;103:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:46;;;:::i;2955:301:9:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2955:301:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;257:45:0;;;:::i;7732:836:2:-;;;;;;;;;;;;;;;;-1:-1:-1;7732:836:2;;:::i;208:42:0:-;;;:::i;1909:545:2:-;;;;;;;;;;;;;;;;-1:-1:-1;1909:545:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3091:752;;;;;;;;;;;;;;;;-1:-1:-1;3091:752:2;;;;;;;;;;;;:::i;1737:847:9:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1737:847:9;;;;;;;;;;;;;;;;;:::i;4113:574:2:-;;;;;;;;;;;;;;;;-1:-1:-1;4113:574:2;;:::i;:::-;;412:45:0;;;:::i;924:43::-;;;;;;;;;;;;;;;;-1:-1:-1;924:43:0;-1:-1:-1;;;;;924:43:0;;:::i;2475:308:3:-;;;;;;;;;;;;;;;;-1:-1:-1;2475:308:3;;;;;;;;;;;;:::i;174:28:0:-;;;:::i;14712:649:2:-;;;;;;;;;;;;;;;;-1:-1:-1;14712:649:2;;:::i;:::-;;;;;;;-1:-1:-1;;;;;14712:649:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6091:1058;;;;;;;;;;;;;;;;-1:-1:-1;6091:1058:2;;:::i;441:494:3:-;;;;;;;;;;;;;;;;-1:-1:-1;441:494:3;;:::i;1096:49:0:-;;;;;;;;;;;;;;;;-1:-1:-1;1096:49:0;;:::i;:::-;;;;-1:-1:-1;;;;;1096:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;973:65;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;973:65:0;;;;;;;;;;:::i;8989:433:2:-;;;;;;;;;;;;;;;;-1:-1:-1;8989:433:2;;:::i;744:129:7:-;;;:::i;360:46:0:-;;;:::i;3486:153:9:-;;;;;;;;;;;;;;;;-1:-1:-1;3486:153:9;-1:-1:-1;;;;;3486:153:9;;:::i;89:20:5:-;;;:::i;:::-;;;;-1:-1:-1;;;;;89:20:5;;;;;;;;;;;;;;354:176:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;139:28:0;;;:::i;3119:243:3:-;;;;;;;;;;;;;;;;-1:-1:-1;3119:243:3;;;;;;;:::i;422:411:5:-;;;;;;;;;;;;;;;;-1:-1:-1;422:411:5;-1:-1:-1;;;;;422:411:5;;:::i;562:615:9:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;562:615:9;;;;;;;;:::i;1546:115:8:-;;;:::i;10270:329:2:-;;;;;;;;;;;;;;;;-1:-1:-1;10270:329:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1152:22:0;;;:::i;1168:382:2:-;;;:::i;1045:45:0:-;;;;;;;;;;;;;;;;-1:-1:-1;1045:45:0;;:::i;4137:187:9:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4137:187:9;;;;;;;;;;:::i;560:293:2:-;;;;;;;;;;;;;;;;-1:-1:-1;560:293:2;;:::i;5078:637::-;;;;;;;;;;;;;;;;-1:-1:-1;5078:637:2;;:::i;13004:1059::-;;;;;;;;;;;;;;;;-1:-1:-1;13004:1059:2;;:::i;464:36:0:-;;;:::o;103:30::-;;;;;;;;;;;;;;;-1:-1:-1;;103:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;308:46::-;348:6;308:46;:::o;2955:301:9:-;3095:10;3063:4;3084:22;;;:10;:22;;;;;;;;-1:-1:-1;;;;;3084:32:9;;;;;;;;;;;:42;;;3142:85;;;;;;;3063:4;;3084:32;;3095:10;;3142:85;;;;;;;;-1:-1:-1;3245:4:9;2955:301;;;;;:::o;257:45:0:-;299:3;257:45;:::o;7732:836:2:-;7836:21;7909;;;:9;:21;;;;;;;;7873:57;;;;;;;;;-1:-1:-1;;;;;7873:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7836:21;;7966:82;;401:5:0;;7966:49:2;;:8;:6;:8::i;:::-;:25;;:49::i;:::-;:66;;:82::i;:::-;7941:107;;8080:2;8063:14;:19;8059:503;;;8115:96;8150:13;:26;;;8194:3;8115:17;:96::i;:::-;8099:112;;8059:503;;;8250:2;8233:14;:19;8229:333;;;8285:96;8320:13;:26;;;8364:3;8285:17;:96::i;8229:333::-;8420:2;8403:14;:19;8399:163;;;8455:96;8490:13;:26;;;8534:3;8455:17;:96::i;:::-;8439:112;;8399:163;7732:836;;;;;:::o;208:42:0:-;;;;:::o;1909:545:2:-;2032:18;2135:15;;;:9;:15;;;;;;;;2115:35;;;;;;;;;;;;;;;;;;;;;;;;;2032:18;;2161:81;;2206:25;:23;:25::i;:::-;2199:32;;;;;;;2161:81;2265:95;2289:1;:19;;;2322:1;:13;;;2349:1;2265:10;:95::i;:::-;2252:108;;2392:55;2427:10;2392:21;:55::i;:::-;2371:76;;1909:545;;;;;:::o;3091:752::-;3256:27;3299:18;3320:92;3344:18;3376:11;;3401:1;3320:10;:92::i;:::-;3299:113;;3423:26;3452:55;3487:10;3452:21;:55::i;:::-;3423:84;-1:-1:-1;3518:22:2;3543:72;3611:3;3543:50;:13;3423:84;3543:30;:50::i;:72::-;3518:97;;3626:24;3653:85;3677:14;3705:8;3727:1;3653:10;:85::i;:::-;3626:112;-1:-1:-1;3771:65:2;3832:3;3771:43;3626:112;3805:8;3771:33;:43::i;:65::-;3749:87;3091:752;-1:-1:-1;;;;;;;;3091:752:2:o;1737:847:9:-;1875:4;1916:127;1948:6;1972:9;1999:7;2024:5;1916:14;:127::i;:::-;1895:202;;;;;-1:-1:-1;;;1895:202:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2129:18:9;;;;;;:10;:18;;;;;;;;2148:10;2129:30;;;;;;;;:41;-1:-1:-1;2129:41:9;2108:114;;;;;-1:-1:-1;;;2108:114:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2274:18:9;;;;;;:10;:18;;;;;;;;2293:10;2274:30;;;;;;;;:43;;2309:7;2274:34;:43::i;:::-;-1:-1:-1;;;;;2233:18:9;;;;;;:10;:18;;;;;;;;2252:10;2233:30;;;;;;;:84;;;;2355:16;;;:8;:16;;;;;:29;;2376:7;2355:20;:29::i;:::-;-1:-1:-1;;;;;2328:16:9;;;;;;;:8;:16;;;;;;:56;;;;2425:19;;;;;;;:32;;2449:7;2425:23;:32::i;:::-;-1:-1:-1;;;;;2395:19:9;;;;;;;:8;:19;;;;;;;;;:62;;;;2473:82;;;;;;;2395:19;;2473:82;;;;-1:-1:-1;;;;;;;;;;;2473:82:9;;;;;;;;-1:-1:-1;2573:4:9;1737:847;;;;;:::o;4113:574:2:-;341:5:5;;-1:-1:-1;;;;;341:5:5;327:10;:19;306:92;;;;;-1:-1:-1;;;306:92:5;;;;;;;;;;;;-1:-1:-1;;;306:92:5;;;;;;;;;;;;;;;4222:15:2::1;4239:18:::0;4270:45:::1;4295:10;4270:11;:45::i;:::-;4221:94;;;;453:4:0;4347:7:2;:25;:69;;;;;401:5:0;4388:10:2;:28;4347:69;4326:140;;;::::0;;-1:-1:-1;;;4326:140:2;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4502:21;::::0;;;:9:::1;:21;::::0;;;;:33;4477:92:::1;::::0;-1:-1:-1;;;;;4502:33:2::1;4512:10:::0;4477:11:::1;:92::i;:::-;-1:-1:-1::0;;4585:95:2::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;-1:-1:-1;4585:95:2;;;;;;;::::1;408:1:5;;4113:574:2::0;:::o;412:45:0:-;453:4;412:45;:::o;924:43::-;;;;;;;;;;;;;:::o;2475:308:3:-;2631:16;2716:1;2703:14;;2696:2;:22;;;2683:35;;;2753:12;2683:35;2753:12;2741:24;;;;;2769:1;2740:30;2739:37;;;;;;;2475:308;-1:-1:-1;;;;;2475:308:3:o;174:28:0:-;;;;:::o;14712:649:2:-;14826:21;15072;;;:9;:21;;;;;;;;;15036:57;;;;;;;;;-1:-1:-1;;;;;15036:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14712:649::o;6091:1058::-;6209:21;6291;;;:9;:21;;;;;;;;6255:57;;;;;;;;;-1:-1:-1;;;;;6255:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6323:820;;6391:13;:28;;;6375:44;;6323:820;;;6470:17;6505:20;6542:23;6554:10;6542:11;:23::i;:::-;6452:113;;;;6580:16;6599;:14;:16::i;:::-;6580:35;;;-1:-1:-1;6629:16:2;6648:23;6580:35;6661:9;6648:12;:23::i;:::-;6629:42;-1:-1:-1;6629:42:2;6686:273;6723:8;6716:4;:15;6686:273;;;6776:168;6809:13;:26;;;6857:9;:15;6867:4;6857:15;;;;;;;;;;;:33;;;401:5:0;6776:11:2;:168::i;:::-;6759:185;;;;6733:6;;6686:273;;;;6990:142;7019:13;:26;;;7063:7;:25;;;7106:12;6990:11;:142::i;:::-;6973:159;;;;6323:820;;;;;6091:1058;;;;:::o;441:494:3:-;538:4;341:5:5;;-1:-1:-1;;;;;341:5:5;327:10;:19;306:92;;;;;-1:-1:-1;;;306:92:5;;;;;;;;;;;;-1:-1:-1;;;306:92:5;;;;;;;;;;;;;;;588:10:3::1;616:1;579:20:::0;;;:8:::1;:20;::::0;;;;;:33:::1;::::0;604:7;579:24:::1;:33::i;:::-;:38;;558:112;;;::::0;;-1:-1:-1;;;558:112:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;703:11;::::0;:24:::1;::::0;719:7;703:15:::1;:24::i;:::-;681:11;:46:::0;778:10:::1;769:20;::::0;;;:8:::1;:20;::::0;;;;;:33:::1;::::0;794:7;769:24:::1;:33::i;:::-;747:10;738:20;::::0;;;:8:::1;:20;::::0;;;;;;;:64;;;;818:88;;;;;;;738:20;;-1:-1:-1;;;;;;;;;;;818:88:3;;;;;;;;;::::1;-1:-1:-1::0;924:4:3::1;408:1:5;441:494:3::0;;;:::o;1096:49:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1096:49:0;;;;;;;;;;;;;:::o;973:65::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;8989:433:2:-;9092:7;9151:21;;;:9;:21;;;;;;;;9115:57;;;;;;;;;-1:-1:-1;;;;;9115:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9183:96;;9242:26;;;;-1:-1:-1;9234:34:2;;9183:96;9296:119;9387:27;9403:10;9387:15;:27::i;:::-;9296:73;9340:28;9357:10;9340:16;:28::i;:::-;9296:26;;;;;:43;:73::i;:119::-;9289:126;8989:433;-1:-1:-1;;;8989:433:2:o;744:129:7:-;807:59;840:16;:14;:16::i;:::-;807:19;:59::i;:::-;744:129::o;360:46:0:-;401:5;360:46;:::o;3486:153:9:-;-1:-1:-1;;;;;3614:18:9;3584:7;3614:18;;;:8;:18;;;;;;;3486:153::o;89:20:5:-;;;-1:-1:-1;;;;;89:20:5;;:::o;354:176:8:-;424:6;465:11;453:8;:6;:8::i;:::-;:23;;:70;;522:1;453:70;;;491:16;:14;:16::i;:::-;446:77;;354:176;:::o;139:28:0:-;;;;;;;;;;;;;;-1:-1:-1;;139:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3119:243:3;3244:23;3301:54;3349:5;3301:30;:6;3325:5;3301:23;:30::i;422:411:5:-;528:4;341:5;;-1:-1:-1;;;;;341:5:5;327:10;:19;306:92;;;;;-1:-1:-1;;;306:92:5;;;;;;;;;;;;-1:-1:-1;;;306:92:5;;;;;;;;;;;;;;;-1:-1:-1;;;;;578:23:5;::::1;557:122;;;;-1:-1:-1::0;;;557:122:5::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;698:5;:17:::0;;-1:-1:-1;;;;;;698:17:5::1;-1:-1:-1::0;;;;;698:17:5;::::1;::::0;;::::1;::::0;;731:73:::1;::::0;698:17;;761:10:::1;::::0;731:73:::1;::::0;698:5;731:73:::1;-1:-1:-1::0;822:4:5::1;422:411:::0;;;:::o;562:615:9:-;672:4;713:131;745:10;773:9;800:7;825:5;713:14;:131::i;:::-;692:206;;;;;-1:-1:-1;;;692:206:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;949:10;940:20;;;;:8;:20;;;;;;:33;;965:7;940:24;:33::i;:::-;918:10;909:20;;;;:8;:20;;;;;;:64;;;;-1:-1:-1;;;;;1014:19:9;;;;;;:32;;1038:7;1014:23;:32::i;:::-;-1:-1:-1;;;;;984:19:9;;;;;;:8;:19;;;;;;;;;:62;;;;1062:86;;;;;;;984:19;;1084:10;;-1:-1:-1;;;;;;;;;;;1062:86:9;;;;;;;;;-1:-1:-1;1166:4:9;562:615;;;;:::o;1546:115:8:-;1639:15;1546:115;:::o;10270:329:2:-;10400:20;10434:21;10469:22;606:59:7;639:16;:14;:16::i;606:59::-;10523:69:2::1;10548:10;10572;10523:11;:69::i;:::-;10516:76;;;;;;10270:329:::0;;;;;:::o;1152:22:0:-;;;;;;;;:::o;1168:382:2:-;1261:18;1293:26;1357:99;1381:7;:25;;;1420:11;;1445:1;1357:10;:99::i;:::-;1344:112;;1488:55;1523:10;1488:21;:55::i;:::-;1467:76;;1168:382;;:::o;1045:45:0:-;;;;;;;;;;;;;;;;;;;:::o;4137:187:9:-;-1:-1:-1;;;;;4289:18:9;;;4259:7;4289:18;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;4137:187::o;560:293:2:-;671:20;728:3;714:11;:17;:132;;822:24;299:3:0;842::2;822:19;:24::i;:::-;714:132;;;746:61;795:11;746:44;299:3:0;783:5:2;746:28;:44::i;5078:637::-;5191:17;5303:21;;;:9;:21;;;;;;;;5267:57;;;;;;;;;-1:-1:-1;;;;;5267:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5191:17;;5267:57;5191:17;;5358:49;;:8;:6;:8::i;:49::-;5335:72;-1:-1:-1;5430:45:2;5335:72;401:5:0;5430:29:2;:45::i;:::-;5418:57;;453:4:0;5490:9:2;:26;5486:223;;;453:4:0;5533:26:2;;401:5:0;5573:29:2;;5486:223;;;5649:49;:12;401:5:0;5649:33:2;:49::i;:::-;5634:64;;5486:223;5078:637;;;;;:::o;13004:1059::-;13138:4;13179:133:::2;13211:10;13247:3;13269:7;13294:4;13179:14;:133::i;:::-;13158:211;;;::::0;;-1:-1:-1;;;13158:211:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;348:6:0;13401:7:2;:24;;13380:100;;;::::0;;-1:-1:-1;;;13380:100:2;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;13531:10;13522:20;::::0;;;:8:::2;:20;::::0;;;;;:33:::2;::::0;13547:7;13522:24:::2;:33::i;:::-;13500:10;13491:20;::::0;;;:8:::2;:20;::::0;;;;;;;:64;;;;13597:137;;::::2;::::0;::::2;::::0;;;;;;::::2;::::0;;;;;;;;;;;;;;;;;;;13698:8:::2;:6;:8::i;:::-;13597:137:::0;;13720:4:::2;13597:137;::::0;;::::2;::::0;;;13576:7:::2;:17:::0;-1:-1:-1;13566:28:2;;;:9:::2;:28:::0;;;;;;;:168;;;;-1:-1:-1;;;;;;13566:168:2::2;-1:-1:-1::0;;;;;13566:168:2;;::::2;;::::0;;;;::::2;::::0;;;::::2;::::0;;;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;-1:-1:-1;;13566:168:2::2;::::0;::::2;;::::0;;;::::2;::::0;;13781:25;;:38:::2;::::0;13811:7;13781:29:::2;:38::i;:::-;13745:25:::0;:74;:7:::2;13859:17:::0;13835:96:::2;::::0;;13890:10:::2;13835:96:::0;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;;;;;;;;::::2;13947:87;::::0;;;;;;;14001:1:::2;::::0;13969:10:::2;::::0;-1:-1:-1;;;;;;;;;;;13947:87:2;;;;::::2;::::0;;::::2;-1:-1:-1::0;14052:4:2::2;349:59:7::1;382:16;:14;:16::i;349:59::-;1225:7:0::0;:19;;;;;;13004:1059:2;;-1:-1:-1;13004:1059:2:o;270:178:6:-;328:7;360:1;355;:6;;347:49;;;;;-1:-1:-1;;;347:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;418:5:6;;;270:178::o;700:259::-;758:7;789:1;785;:5;777:44;;;;;-1:-1:-1;;;777:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;831:9;847:1;843;:5;;;;;;;700:259;-1:-1:-1;;;;700:259:6:o;454:240::-;512:7;535:6;531:45;;-1:-1:-1;564:1:6;557:8;;531:45;598:5;;;602:1;598;:5;:1;621:5;;;;;:10;613:56;;;;-1:-1:-1;;;613:56:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1365:670:3;1552:4;1577:26;1573:179;;-1:-1:-1;;;;;1644:26:3;;1619:122;;;;-1:-1:-1;;;1619:122:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1783:17:3;;;;;;:8;:17;;;;;;:28;-1:-1:-1;1783:28:3;1762:102;;;;;-1:-1:-1;;;1762:102:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1933:20:3;;;;;;:8;:20;;;;;;1896:33;1933:20;1921:7;1896:24;:33::i;:::-;:57;;1875:131;;;;;-1:-1:-1;;;1875:131:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2024:4:3;1365:670;;;;;;:::o;89:175:6:-;147:7;178:5;;;201:6;;;;193:46;;;;;-1:-1:-1;;;193:46:6;;;;;;;;;;;;;;;;;;;;;;;;;;;10605:1797:2;10732:20;10884:21;;;:9;:21;;;;;;;;10848:57;;;;;;;;;-1:-1:-1;;;;;10848:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10732:20;;;;;;10941:82;;401:5:0;;10941:49:2;;:8;:6;:8::i;:82::-;10916:107;;11073:1;11055:14;:19;;11034:90;;;;;-1:-1:-1;;;11034:90:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;11185:7;-1:-1:-1;;;;;11156:36:2;:13;:25;;;-1:-1:-1;;;;;11156:36:2;;11135:110;;;;;-1:-1:-1;;;11135:110:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;11277:13;:22;;;11256:95;;;;;-1:-1:-1;;;11256:95:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;11387:5;11362:22;;;:30;11418:26;;;;;-1:-1:-1;11477:2:2;11459:20;;11455:126;;11512:58;11546:10;11512:16;:58::i;:::-;11495:75;;11455:126;11607:49;11636:10;11607:15;:49::i;:::-;11591:65;;11681:76;11743:13;11681:44;11710:14;11681:11;;:28;;:44;;;;:::i;:76::-;11667:11;:90;11768:28;;;:45;;;11852:77;11915:13;11852:45;:12;11799:14;11852:29;:45::i;:77::-;11823:26;;;;:106;;;11940:21;;;;:9;:21;;;;;;;:37;;;;-1:-1:-1;;;;;;11940:37:2;-1:-1:-1;;;;;11940:37:2;;;;;;;;;;-1:-1:-1;11940:37:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11940:37:2;;;;;;;;;;12016:17;;;;;;;;;:49;;:21;:49::i;:::-;-1:-1:-1;;;;;11988:17:2;;;;;;:8;:17;;;;;:77;12112:25;;:43;;12142:12;12112:29;:43::i;:::-;12076:25;:79;12238:26;;;;;12171:103;;-1:-1:-1;;;;;12171:103:2;;;;;;;;;;;;;12193:10;;12171:103;;;;;;;;12359:26;;;;;12290:105;;;;;;;-1:-1:-1;;;;;12290:105:2;;;12320:3;;-1:-1:-1;;;;;;;;;;;12290:105:2;;;;;;;;10605:1797;;;;;;;:::o;757:135:8:-;830:6;859:26;876:8;:6;:8::i;:::-;859:16;:26::i;1114:547:7:-;1226:21;;1206:319;1256:10;1249:17;;:4;:17;1206:319;;;1291:17;1311:15;;;:9;:15;;;;;;;;1291:35;;;;;;;;1357:11;;1341:27;;1404:25;;1291:35;;;1382:47;;;1457:15;;;;;;;;:19;;;;;1291:35;;;;1457:19;1491:21;:23;;;;;;1268:6;1206:319;;;-1:-1:-1;1570:11:7;;1595:25;;1540:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1114:547;:::o;965:149:6:-;1023:7;1050:6;1042:43;;;;;-1:-1:-1;;;1042:43:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;1106:1;1102;:5;;;;;;;965:149;-1:-1:-1;;;965:149:6:o;1192:194:8:-;401:5:0;1349:11:8;1336:24;;;1335:43;;1192:194::o
Swarm Source
ipfs://c1917cf1139d22cdade3da4c9bb704080c483bc9a0e2340e761658bcd06d5bc8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.