ETH Price: $2,929.68 (+0.16%)
Gas: 4 Gwei

Token

xETH-G (xETH-G)
 

Overview

Max Total Supply

4,023,151.25445238730039632 xETH-G

Holders

1,031 (0.00%)

Total Transfers

-

Market

Price

$0.44 @ 0.000151 ETH (+0.01%)

Onchain Market Cap

$1,785,563.23

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

xETH-G is a rebase token with 2 fully developed staking dAPPs, no negative rebases, governance, dynamic peg, and built in deflationary mechanisms to reduce supply.

ICO Information

ICO Address   0x5F59e094c2C8bB61E67990F21fED5E5418652E33
    0x7A2fA12119364ADE2414A8dd302aD80224B1Bd22
    0xBDd5985B85F23E91a67B16756B0c899F2dc5FcEd
ICO Start Date : Dec 10, 2020
ICO End Date : Dec 10, 2020 
ICO Price : $0.60

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XplosiveEthereum

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
petersburg EvmVersion
File 1 of 6 : XplosiveEthereum.sol
// SPDX-License-Identifier: UNLICENSED
/**
 *
 * ██╗  ██╗███████╗████████╗██╗  ██╗
 * ╚██╗██╔╝██╔════╝╚══██╔══╝██║  ██║
 *  ╚███╔╝ █████╗     ██║   ███████║
 *  ██╔██╗ ██╔══╝     ██║   ██╔══██║
 * ██╔╝ ██╗███████╗   ██║   ██║  ██║
 * ╚═╝  ╚═╝╚══════╝   ╚═╝   ╚═╝  ╚═╝
 *
 *    An Ethereum pegged
 * base-down, burn-up currency.
 *
 *  https://xEth.finance
 *
 *
**/


/// SWC-103:  Floating Pragma
pragma solidity 0.6.12;

import "./XplosiveSafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import '@openzeppelin/contracts/utils/Pausable.sol';
import './XplosiveRebaser.sol';

contract XplosiveEthereum is Ownable, Pausable, Rebasable
{
    using XplosiveSafeMath for uint256;

    event Transfer(address indexed from, address indexed to, uint amount);
    event Approval(address indexed owner, address indexed spender, uint amount);

    event Rebase(uint256 indexed epoch, uint256 scalingFactor);

    event WhitelistFrom(address _addr, bool _whitelisted);
    event WhitelistTo(address _addr, bool _whitelisted);
    event WhitelistRebase(address _addr, bool _whitelisted);

    string public name     = "xETH-G";
    string public symbol   = "xETH-G";
    uint8  public decimals = 18;

    // address public rebaser;
    address public rewardAddress;

    /**
     * @notice Internal decimals used to handle scaling factor
     */
    uint256 public constant internalDecimals = 10**24;

    /**
     * @notice Used for percentage maths
     */
    uint256 public constant BASE = 10**18;

    /**
     * @notice Scaling factor that adjusts everyone's balances
     */
    uint256 public xETHScalingFactor  = BASE;

    mapping (address => uint256) internal _xETHBalances;
    mapping (address => mapping (address => uint256)) internal _allowedFragments;

    mapping(address => bool) public whitelistFrom;
    mapping(address => bool) public whitelistTo;
    mapping(address => bool) public whitelistRebase;

    address public noRebaseAddress;

    uint256 initSupply = 0;
    uint256 _totalSupply = 0;
    uint16 public SELL_FEE = 33;
    uint16 public TX_FEE = 50;

    constructor( uint256 initialSupply, address initialSupplyAddr )
    public
    Ownable()
    Pausable()
    Rebasable()
    {
        _mint(initialSupplyAddr,initialSupply);
    }

    function totalSupply()
    public
    view
    returns (uint256)
    {
        return _totalSupply;
    }

    function getSellBurn(uint256 value)
    public
    view
    whenNotPaused
    returns (uint256)
    {
        uint256 nPercent = value.divRound(SELL_FEE);
        return nPercent;
    }

    function getTxBurn(uint256 value)
    public
    view
    whenNotPaused
    returns (uint256)
    {
        uint256 nPercent = value.divRound(TX_FEE);
        return nPercent;
    }

    function _isWhitelisted(address _from, address _to)
    internal
    view
    returns (bool)
    {
        return whitelistFrom[_from]||whitelistTo[_to];
    }

    function _isRebaseWhitelisted(address _addr)
    internal
    view
    returns (bool)
    {
        return whitelistRebase[_addr];
    }

    function setWhitelistedTo(address _addr, bool _whitelisted)
    external
    onlyOwner
    {
        emit WhitelistTo(_addr, _whitelisted);
        whitelistTo[_addr] = _whitelisted;
    }

    function setTxFee(uint16 fee)
    external
    onlyRebaser
    whenNotPaused
    {
        TX_FEE = fee;
    }

    function setSellFee(uint16 fee)
    external
    onlyRebaser
    whenNotPaused
    {
        SELL_FEE = fee;
    }

    function setWhitelistedFrom(address _addr, bool _whitelisted)
    external
    onlyOwner
    {
        emit WhitelistFrom(_addr, _whitelisted);
        whitelistFrom[_addr] = _whitelisted;
    }

    function setWhitelistedRebase(address _addr, bool _whitelisted)
    external
    onlyOwner
    {
        emit WhitelistRebase(_addr, _whitelisted);
        whitelistRebase[_addr] = _whitelisted;
    }

    function setNoRebaseAddress(address _addr)
    external
    onlyOwner
    {
        noRebaseAddress = _addr;
    }

    /**
    * @notice Computes the current max scaling factor
    */
    function maxScalingFactor()
    external
    view
    whenNotPaused
    returns (uint256)
    {
        return _maxScalingFactor();
    }

    function _maxScalingFactor()
    internal
    view
    returns (uint256)
    {
        // scaling factor can only go up to 2**256-1 = initSupply * xETHScalingFactor
        // this is used to check if xETHScalingFactor will be too high to compute balances when rebasing.
        return uint256(-1) / initSupply;
    }

    function _mint(address to, uint256 amount)
    internal
    {
      // increase totalSupply
      _totalSupply = _totalSupply.add(amount);

      // get underlying value
      uint256 xETHValue = amount.mul(internalDecimals).div(xETHScalingFactor);

      // increase initSupply
      initSupply = initSupply.add(xETHValue);

      // make sure the mint didnt push maxScalingFactor too low
      require(xETHScalingFactor <= _maxScalingFactor(), "max scaling factor too low");

      // add balance
      _xETHBalances[to] = _xETHBalances[to].add(xETHValue);

      emit Transfer(address(0),to,amount);
    }

    /* - ERC20 functionality - */

    /**
    * @dev Transfer tokens to a specified address.
    * @param to The address to transfer to.
    * @param value The amount to be transferred.
    * @return True on success, false otherwise.
    */
    function transfer(address to, uint256 value)
    external
    whenNotPaused
    returns (bool)
    {
        // underlying balance is stored in xETH, so divide by current scaling factor

        // note, this means as scaling factor grows, dust will be untransferrable.
        // minimum transfer value == xETHScalingFactor / 1e24;

        // get amount in underlying
        //from noRebaseWallet
        if(_isRebaseWhitelisted(msg.sender))
        {
            uint256 noReValue = value.mul(internalDecimals).div(BASE);
            uint256 noReNextValue = noReValue.mul(BASE).div(xETHScalingFactor);
            _xETHBalances[msg.sender] = _xETHBalances[msg.sender].sub(noReValue); //value==underlying
            _xETHBalances[to] = _xETHBalances[to].add(noReNextValue);
            emit Transfer(msg.sender, to, value);
        }
        else if(_isRebaseWhitelisted(to))
        {
            uint256 fee = getSellBurn(value);
            uint256 tokensToBurn = fee/2;
            uint256 tokensForRewards = fee-tokensToBurn;
            uint256 tokensToTransfer = value-fee;

            uint256 xETHValue = value.mul(internalDecimals).div(xETHScalingFactor);
            uint256 xETHValueKeep = tokensToTransfer.mul(internalDecimals).div(xETHScalingFactor);
            uint256 xETHValueReward = tokensForRewards.mul(internalDecimals).div(xETHScalingFactor);


            uint256 xETHNextValue = xETHValueKeep.mul(xETHScalingFactor).div(BASE);

            _totalSupply = _totalSupply-fee;
            _xETHBalances[address(0)] = _xETHBalances[address(0)].add(fee/2);
            _xETHBalances[msg.sender] = _xETHBalances[msg.sender].sub(xETHValue);
            _xETHBalances[to] = _xETHBalances[to].add(xETHNextValue);
            _xETHBalances[rewardAddress] = _xETHBalances[rewardAddress].add(xETHValueReward);
            emit Transfer(msg.sender, to, tokensToTransfer);
            emit Transfer(msg.sender, address(0), tokensToBurn);
            emit Transfer(msg.sender, rewardAddress, tokensForRewards);
        }
        else
        {
            if(!_isWhitelisted(msg.sender, to))
            {
                uint256 fee = getTxBurn(value);
                uint256 tokensToBurn = fee/2;
                uint256 tokensForRewards = fee-tokensToBurn;
                uint256 tokensToTransfer = value-fee;

                uint256 xETHValue = value.mul(internalDecimals).div(xETHScalingFactor);
                uint256 xETHValueKeep = tokensToTransfer.mul(internalDecimals).div(xETHScalingFactor);
                uint256 xETHValueReward = tokensForRewards.mul(internalDecimals).div(xETHScalingFactor);

                _totalSupply = _totalSupply-fee;
                _xETHBalances[address(0)] = _xETHBalances[address(0)].add(fee/2);
                _xETHBalances[msg.sender] = _xETHBalances[msg.sender].sub(xETHValue);
                _xETHBalances[to] = _xETHBalances[to].add(xETHValueKeep);
                _xETHBalances[rewardAddress] = _xETHBalances[rewardAddress].add(xETHValueReward);
                emit Transfer(msg.sender, to, tokensToTransfer);
                emit Transfer(msg.sender, address(0), tokensToBurn);
                emit Transfer(msg.sender, rewardAddress, tokensForRewards);
            }
            else
            {
                uint256 xETHValue = value.mul(internalDecimals).div(xETHScalingFactor);

                _xETHBalances[msg.sender] = _xETHBalances[msg.sender].sub(xETHValue);
                _xETHBalances[to] = _xETHBalances[to].add(xETHValue);
                emit Transfer(msg.sender, to, xETHValue);
             }
        }
        return true;
    }

    /**
    * @dev Transfer tokens from one address to another.
    * @param from The address you want to send tokens from.
    * @param to The address you want to transfer to.
    * @param value The amount of tokens to be transferred.
    */
    function transferFrom(address from, address to, uint256 value)
    external
    whenNotPaused
    returns (bool)
    {
        // decrease allowance
        _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value);

        if(_isRebaseWhitelisted(from))
        {
            uint256 noReValue = value.mul(internalDecimals).div(BASE);
            uint256 noReNextValue = noReValue.mul(BASE).div(xETHScalingFactor);
            _xETHBalances[from] = _xETHBalances[from].sub(noReValue); //value==underlying
            _xETHBalances[to] = _xETHBalances[to].add(noReNextValue);
            emit Transfer(from, to, value);
        }
        else if(_isRebaseWhitelisted(to))
        {
            uint256 fee = getSellBurn(value);
            uint256 tokensForRewards = fee-(fee/2);
            uint256 tokensToTransfer = value-fee;

            uint256 xETHValue = value.mul(internalDecimals).div(xETHScalingFactor);
            uint256 xETHValueKeep = tokensToTransfer.mul(internalDecimals).div(xETHScalingFactor);
            uint256 xETHValueReward = tokensForRewards.mul(internalDecimals).div(xETHScalingFactor);
            uint256 xETHNextValue = xETHValueKeep.mul(xETHScalingFactor).div(BASE);

            _totalSupply = _totalSupply-fee;

            _xETHBalances[from] = _xETHBalances[from].sub(xETHValue);
            _xETHBalances[to] = _xETHBalances[to].add(xETHNextValue);
            _xETHBalances[rewardAddress] = _xETHBalances[rewardAddress].add(xETHValueReward);
            _xETHBalances[address(0)] = _xETHBalances[address(0)].add(fee/2);
            emit Transfer(from, to, tokensToTransfer);
            emit Transfer(from, address(0), fee/2);
            emit Transfer(from, rewardAddress, tokensForRewards);
        }
        else
        {
            if(!_isWhitelisted(from, to))
            {
                uint256 fee = getTxBurn(value);
                uint256 tokensToBurn = fee/2;
                uint256 tokensForRewards = fee-tokensToBurn;
                uint256 tokensToTransfer = value-fee;

                uint256 xETHValue = value.mul(internalDecimals).div(xETHScalingFactor);
                uint256 xETHValueKeep = tokensToTransfer.mul(internalDecimals).div(xETHScalingFactor);
                uint256 xETHValueReward = tokensForRewards.mul(internalDecimals).div(xETHScalingFactor);

                _totalSupply = _totalSupply-fee;
                _xETHBalances[address(0)] = _xETHBalances[address(0)].add(fee/2);
                _xETHBalances[from] = _xETHBalances[from].sub(xETHValue);
                _xETHBalances[to] = _xETHBalances[to].add(xETHValueKeep);
                _xETHBalances[rewardAddress] = _xETHBalances[rewardAddress].add(xETHValueReward);
                emit Transfer(from, to, tokensToTransfer);
                emit Transfer(from, address(0), tokensToBurn);
                emit Transfer(from, rewardAddress, tokensForRewards);
            }
            else
            {
                uint256 xETHValue = value.mul(internalDecimals).div(xETHScalingFactor);

                _xETHBalances[from] = _xETHBalances[from].sub(xETHValue);
                _xETHBalances[to] = _xETHBalances[to].add(xETHValue);
                emit Transfer(from, to, xETHValue);
             }
        }
        return true;
    }

    /**
    * @param who The address to query.
    * @return The balance of the specified address.
    */
    function balanceOf(address who)
    external
    view
    returns (uint256)
    {
        if(_isRebaseWhitelisted(who))
        {
            return _xETHBalances[who].mul(BASE).div(internalDecimals);
        }
        else
        {
            return _xETHBalances[who].mul(xETHScalingFactor).div(internalDecimals);
        }
    }

    /** @notice Currently returns the internal storage amount
    * @param who The address to query.
    * @return The underlying balance of the specified address.
    */
    function balanceOfUnderlying(address who)
    external
    view
    returns (uint256)
    {
        return _xETHBalances[who];
    }

    /**
     * @dev Function to check the amount of tokens that an owner has allowed to a spender.
     * @param owner_ The address which owns the funds.
     * @param spender The address which will spend the funds.
     * @return The number of tokens still available for the spender.
     */
    function allowance(address owner_, address spender)
    external
    view
    whenNotPaused
    returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    /**
     * @dev Approve the passed address to spend the specified amount of tokens on behalf of
     * msg.sender. This method is included for ERC20 compatibility.
     * increaseAllowance and decreaseAllowance should be used instead.
     * Changing an allowance with this method brings the risk that someone may transfer both
     * the old and the new allowance - if they are both greater than zero - if a transfer
     * transaction is mined before the later approve() call is mined.
     *
     * @param spender The address which will spend the funds.
     * @param value The amount of tokens to be spent.
     */
    function approve(address spender, uint256 value)
    external
    whenNotPaused
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev Increase the amount of tokens that an owner has allowed to a spender.
     * This method should be used instead of approve() to avoid the double approval vulnerability
     * described above.
     * @param spender The address which will spend the funds.
     * @param addedValue The amount of tokens to increase the allowance by.
     */
    function increaseAllowance(address spender, uint256 addedValue)
    external
    whenNotPaused
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner has allowed to a spender.
     *
     * @param spender The address which will spend the funds.
     * @param subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    whenNotPaused
    returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue)
        {
            _allowedFragments[msg.sender][spender] = 0;
        }
        else
        {
            _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue);
        }

        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    function _setRewardAddress(address rewards_)
    external
    onlyOwner
    {
        rewardAddress = rewards_;
    }

    /**
    * @notice Initiates a new rebase operation, provided the minimum time period has elapsed.
    *
    * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag
    *      Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate
    *      and targetRate is CpiOracleRate / baseCpi
    */
    function rebase(uint256 epoch, uint256 indexDelta, bool positive)
    external
    onlyRebaser
    whenNotPaused
    returns (uint256)
    {
        if (indexDelta == 0 || !positive)
        {
            emit Rebase(epoch, xETHScalingFactor);
            return _totalSupply;
        }

        uint256 newScalingFactor = xETHScalingFactor.mul(BASE.add(indexDelta)).div(BASE);
        if (newScalingFactor < _maxScalingFactor())
        {
            xETHScalingFactor = newScalingFactor;
        }
        else
        {
            xETHScalingFactor = _maxScalingFactor();
        }

        _totalSupply = ((initSupply.sub(_xETHBalances[address(0)]).sub(_xETHBalances[noRebaseAddress]))
            .mul(xETHScalingFactor).div(internalDecimals))
            .add(_xETHBalances[noRebaseAddress].mul(BASE).div(internalDecimals));

        emit Rebase(epoch, xETHScalingFactor);
        return _totalSupply;
    }

}

File 2 of 6 : XplosiveRebaser.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.6.12;

import "@openzeppelin/contracts/access/Ownable.sol";

contract Rebasable is Ownable {
  address private _rebaser;

  event TransferredRebasership(address indexed previousRebaser, address indexed newRebaser);

  constructor() internal {
    address msgSender = _msgSender();
    _rebaser = msgSender;
    emit TransferredRebasership(address(0), msgSender);
  }

  function Rebaser() public view returns(address) {
    return _rebaser;
  }

  modifier onlyRebaser() {
    require(_rebaser == _msgSender(), "caller is not rebaser");
    _;
  }

  function transferRebasership(address newRebaser) public virtual onlyOwner {
    require(newRebaser != address(0), "new rebaser is address zero");
    emit TransferredRebasership(_rebaser, newRebaser);
    _rebaser = newRebaser;
  }
}

File 3 of 6 : XplosiveSafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @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 XplosiveSafeMath {
    /**
     * @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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function ceil(uint256 a, uint256 m) internal pure returns (uint256)
    {
        uint256 c = add(a,m);
        uint256 d = sub(c,1);
        return mul(div(d,m),m);
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

File 4 of 6 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 5 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "../GSN/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 6 of 6 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "../GSN/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "petersburg",
  "libraries": {
    "": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"initialSupplyAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"scalingFactor","type":"uint256"}],"name":"Rebase","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousRebaser","type":"address"},{"indexed":true,"internalType":"address","name":"newRebaser","type":"address"}],"name":"TransferredRebasership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"WhitelistTo","type":"event"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SELL_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"rewards_","type":"address"}],"name":"_setRewardAddress","outputs":[],"stateMutability":"nonpayable","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":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getSellBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"getTxBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"internalDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noRebaseAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setNoRebaseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setTxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_whitelisted","type":"bool"}],"name":"setWhitelistedTo","outputs":[],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRebaser","type":"address"}],"name":"transferRebasership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistTo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xETHScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c0604052600660808190527f784554482d47000000000000000000000000000000000000000000000000000060a090815262000040916002919062000579565b506040805180820190915260068082527f784554482d4700000000000000000000000000000000000000000000000000006020909201918252620000879160039162000579565b5060048054601260ff19909116179055670de0b6b3a76400006005556000600c819055600d55600e8054602161ffff199091161763ffff0000191662320000179055348015620000d657600080fd5b5060405162002f1938038062002f1983398181016040526040811015620000fc57600080fd5b508051602090910151600062000111620001d4565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b1916815562000172620001d4565b600180546001600160a01b0319166001600160a01b038316908117909155604051919250906000907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff43908290a350620001cc8183620001d8565b505062000615565b3390565b620001f481600d546200036260201b620024e01790919060201c565b600d8190555060006200023b6005546200022769d3c21bcecceda100000085620003e060201b6200253a1790919060201c565b6200045860201b620025931790919060201c565b90506200025981600c546200036260201b620024e01790919060201c565b600c5562000266620004a2565b6005541115620002d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526006602090815260409091205462000309918390620024e062000362821b17901c565b6001600160a01b03841660008181526006602090815260408083209490945583518681529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505050565b600082820183811015620003d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082620003f157506000620003da565b82820282848281620003ff57fe5b0414620003d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062002ef86021913960400191505060405180910390fd5b6000620003d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620004b860201b60201c565b6000600c5460001981620004b257fe5b04905090565b6000818362000562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620005265781810151838201526020016200050c565b50505050905090810190601f168015620005545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200056f57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005bc57805160ff1916838001178555620005ec565b82800160010185558215620005ec579182015b82811115620005ec578251825591602001919060010190620005cf565b50620005fa929150620005fe565b5090565b5b80821115620005fa5760008155600101620005ff565b6128d380620006256000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c8063715018a61161013b578063b72bb3d5116100b8578063e064648a1161007c578063e064648a146106a0578063ec342ad0146106c1578063f2fde38b146106c9578063fcdc7b1d146106ef578063ff12bbf4146107155761023d565b8063b72bb3d51461060e578063bf79cb0d14610616578063dd62ed3e14610644578063de2f716014610672578063de52014b146106985761023d565b80638da5cb5b116100ff5780638da5cb5b1461057857806395d89b4114610580578063a457c2d714610588578063a486309d146105b4578063a9059cbb146105e25761023d565b8063715018a6146104fc5780637af548c1146105045780637dbaed881461052f578063896871161461054c5780638cf57cb9146105705761023d565b806339509351116101c95780634773a6a91161018d5780634773a6a91461049f5780635c975abb146104be57806364dd48f5146104c65780636f97857b146104ce57806370a08231146104d65761023d565b806339509351146103e05780633986829d1461040c5780633af9e6691461042d5780633d1c28331461045357806343684b21146104795761023d565b806316b627d11161021057806316b627d11461033657806318160ddd1461035c57806323b872dd146103645780632411e7171461039a578063313ce567146103c25761023d565b806304cf86821461024257806306fdde0314610271578063095ea7b3146102ee57806311d3e6c41461032e575b600080fd5b61025f6004803603602081101561025857600080fd5b5035610743565b60408051918252519081900360200190f35b6102796107b4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b357818101518382015260200161029b565b50505050905090810190601f1680156102e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031a6004803603604081101561030457600080fd5b506001600160a01b03813516906020013561083f565b604080519115158252519081900360200190f35b61025f6108fa565b61031a6004803603602081101561034c57600080fd5b50356001600160a01b031661095a565b61025f61096f565b61031a6004803603606081101561037a57600080fd5b506001600160a01b03813581169160208101359091169060400135610975565b6103c0600480360360208110156103b057600080fd5b50356001600160a01b031661103d565b005b6103ca61114c565b6040805160ff9092168252519081900360200190f35b61031a600480360360408110156103f657600080fd5b506001600160a01b038135169060200135611155565b6103c06004803603602081101561042257600080fd5b503561ffff1661123b565b61025f6004803603602081101561044357600080fd5b50356001600160a01b031661130f565b6103c06004803603602081101561046957600080fd5b50356001600160a01b031661132a565b61031a6004803603602081101561048f57600080fd5b50356001600160a01b03166113a4565b6104a76113b9565b6040805161ffff9092168252519081900360200190f35b61031a6113c3565b61025f6113d3565b61025f6113e1565b61025f600480360360208110156104ec57600080fd5b50356001600160a01b03166113e7565b6103c061146e565b61025f6004803603606081101561051a57600080fd5b50803590602081013590604001351515611510565b61025f6004803603602081101561054557600080fd5b5035611754565b6105546117c2565b604080516001600160a01b039092168252519081900360200190f35b6105546117d1565b6105546117e5565b6102796117f4565b61031a6004803603604081101561059e57600080fd5b506001600160a01b03813516906020013561184f565b6103c0600480360360408110156105ca57600080fd5b506001600160a01b038135169060200135151561198b565b61031a600480360360408110156105f857600080fd5b506001600160a01b038135169060200135611a53565b61055461204d565b6103c06004803603604081101561062c57600080fd5b506001600160a01b038135169060200135151561205c565b61025f6004803603604081101561065a57600080fd5b506001600160a01b0381358116916020013516612124565b61031a6004803603602081101561068857600080fd5b50356001600160a01b03166121a3565b6104a76121b8565b6103c0600480360360208110156106b657600080fd5b503561ffff166121c8565b61025f612294565b6103c0600480360360208110156106df57600080fd5b50356001600160a01b03166122a0565b6103c06004803603602081101561070557600080fd5b50356001600160a01b0316612398565b6103c06004803603604081101561072b57600080fd5b506001600160a01b0381351690602001351515612418565b60008054600160a01b900460ff1615610796576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e546000906107ab90849061ffff166125d5565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b505050505081565b60008054600160a01b900460ff1615610892576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60008054600160a01b900460ff161561094d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61095561263e565b905090565b60096020526000908152604090205460ff1681565b600d5490565b60008054600160a01b900460ff16156109c8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b03841660009081526007602090815260408083203384529091529020546109f69083612653565b6001600160a01b0385166000908152600760209081526040808320338452909152902055610a2384612695565b15610b16576000610a50670de0b6b3a7640000610a4a8569d3c21bcecceda100000061253a565b90612593565b90506000610a75600554610a4a670de0b6b3a76400008561253a90919063ffffffff16565b6001600160a01b038716600090815260066020526040902054909150610a9b9083612653565b6001600160a01b038088166000908152600660205260408082209390935590871681522054610aca90826124e0565b6001600160a01b0380871660008181526006602090815260409182902094909455805188815290519193928a169260008051602061285e83398151915292918290030190a35050611032565b610b1f83612695565b15610d72576000610b2f83610743565b6005549091506002820482039082850390600090610b5b90610a4a8869d3c21bcecceda100000061253a565b90506000610b82600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000610ba9600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b90506000610bce670de0b6b3a7640000610a4a6005548661253a90919063ffffffff16565b600d805489900390556001600160a01b038c16600090815260066020526040902054909150610bfd9085612653565b6001600160a01b03808d1660009081526006602052604080822093909355908c1681522054610c2c90826124e0565b6001600160a01b03808c1660009081526006602052604080822093909355600454610100900490911681522054610c6390836124e0565b60045461010090046001600160a01b0316600090815260066020526040902055610cab6002885b60008052600660205260008051602061287e833981519152549190046124e0565b600080526006602090815260008051602061287e833981519152919091556040805187815290516001600160a01b038d811693908f169260008051602061285e833981519152929081900390910190a360006001600160a01b038c1660008051602061285e83398151915260028a60408051929091048252519081900360200190a36004546040805188815290516001600160a01b036101009093048316928e169160008051602061285e833981519152919081900360200190a350505050505050611032565b610d7c84846126b3565b610f78576000610d8b83611754565b60055490915060028204908183039083860390600090610db990610a4a8969d3c21bcecceda100000061253a565b90506000610de0600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000610e07600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b600d805489900390559050610e1d600288610c8a565b600660205260008051602061287e833981519152556001600160a01b038b1660009081526040902054610e509084612653565b6001600160a01b03808d1660009081526006602052604080822093909355908c1681522054610e7f90836124e0565b6001600160a01b03808c1660009081526006602052604080822093909355600454610100900490911681522054610eb690826124e0565b6004546001600160a01b03610100909104811660009081526006602090815260409182902093909355805187815290518d831693928f169260008051602061285e833981519152928290030190a36040805187815290516000916001600160a01b038e169160008051602061285e8339815191529181900360200190a36004546040805187815290516001600160a01b036101009093048316928e169160008051602061285e833981519152919081900360200190a350505050505050611032565b600554600090610f9690610a4a8569d3c21bcecceda100000061253a565b6001600160a01b038616600090815260066020526040902054909150610fbc9082612653565b6001600160a01b038087166000908152600660205260408082209390935590861681522054610feb90826124e0565b6001600160a01b03808616600081815260066020908152604091829020949094558051858152905191939289169260008051602061285e83398151915292918290030190a3505b5060015b9392505050565b6110456126f6565b6000546001600160a01b03908116911614611095576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b6001600160a01b0381166110f0576040805162461bcd60e51b815260206004820152601b60248201527f6e657720726562617365722069732061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff4390600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60045460ff1681565b60008054600160a01b900460ff16156111a8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b03871684529091529020546111d690836124e0565b3360008181526007602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6112436126f6565b6001546001600160a01b0390811691161461129d576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b600054600160a01b900460ff16156112ef576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e805461ffff909216620100000263ffff000019909216919091179055565b6001600160a01b031660009081526006602052604090205490565b6113326126f6565b6000546001600160a01b03908116911614611382576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60086020526000908152604090205460ff1681565b600e5461ffff1681565b600054600160a01b900460ff1690565b69d3c21bcecceda100000081565b60055481565b60006113f282612695565b15611439576001600160a01b0382166000908152600660205260409020546114329069d3c21bcecceda100000090610a4a90670de0b6b3a764000061253a565b90506107af565b6005546001600160a01b0383166000908152600660205260409020546114329169d3c21bcecceda100000091610a4a9161253a565b6114766126f6565b6000546001600160a01b039081169116146114c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061151a6126f6565b6001546001600160a01b03908116911614611574576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b600054600160a01b900460ff16156115c6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b8215806115d1575081155b1561161757600554604080519182525185917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a250600d54611036565b600061163b670de0b6b3a7640000610a4a61163282886124e0565b6005549061253a565b905061164561263e565b811015611656576005819055611662565b61165e61263e565b6005555b600b546001600160a01b031660009081526006602052604090205461170d906116a39069d3c21bcecceda100000090610a4a90670de0b6b3a764000061253a565b600554600b546001600160a01b031660009081526006602052604081205490805260008051602061287e83398151915254600c546117079369d3c21bcecceda100000093610a4a939192611701926116fb9190612653565b90612653565b9061253a565b906124e0565b600d55600554604080519182525186917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a25050600d549392505050565b60008054600160a01b900460ff16156117a7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e546000906107ab90849062010000900461ffff166125d5565b6001546001600160a01b031690565b60045461010090046001600160a01b031681565b6000546001600160a01b031690565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108375780601f1061080c57610100808354040283529160200191610837565b60008054600160a01b900460ff16156118a2576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b03871684529091529020548083106118f6573360009081526007602090815260408083206001600160a01b0388168452909152812055611925565b6119008184612653565b3360009081526007602090815260408083206001600160a01b03891684529091529020555b3360008181526007602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6119936126f6565b6000546001600160a01b039081169116146119e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60008054600160a01b900460ff1615611aa6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b611aaf33612695565b15611b8e576000611ad6670de0b6b3a7640000610a4a8569d3c21bcecceda100000061253a565b90506000611afb600554610a4a670de0b6b3a76400008561253a90919063ffffffff16565b33600090815260066020526040902054909150611b189083612653565b33600090815260066020526040808220929092556001600160a01b03871681522054611b4490826124e0565b6001600160a01b03861660008181526006602090815260409182902093909355805187815290519192339260008051602061285e8339815191529281900390910190a35050612044565b611b9783612695565b15611da6576000611ba783610743565b60055490915060028204908183039083860390600090611bd590610a4a8969d3c21bcecceda100000061253a565b90506000611bfc600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000611c23600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b90506000611c48670de0b6b3a7640000610a4a6005548661253a90919063ffffffff16565b600d80548a900390559050611c5e600289610c8a565b600660205260008051602061287e833981519152553360009081526040902054611c889085612653565b33600090815260066020526040808220929092556001600160a01b038d1681522054611cb490826124e0565b6001600160a01b03808d1660009081526006602052604080822093909355600454610100900490911681522054611ceb90836124e0565b6004546001600160a01b0361010090910481166000908152600660209081526040918290209390935580518881529051918e1692339260008051602061285e8339815191529281900390910190a3604080518881529051600091339160008051602061285e8339815191529181900360200190a36004546040805188815290516001600160a01b036101009093049290921691339160008051602061285e833981519152919081900360200190a35050505050505050612044565b611db033846126b3565b611f98576000611dbf83611754565b60055490915060028204908183039083860390600090611ded90610a4a8969d3c21bcecceda100000061253a565b90506000611e14600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000611e3b600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b600d805489900390559050611e51600288610c8a565b600660205260008051602061287e833981519152553360009081526040902054611e7b9084612653565b33600090815260066020526040808220929092556001600160a01b038c1681522054611ea790836124e0565b6001600160a01b03808c1660009081526006602052604080822093909355600454610100900490911681522054611ede90826124e0565b6004546001600160a01b0361010090910481166000908152600660209081526040918290209390935580518781529051918d1692339260008051602061285e8339815191529281900390910190a3604080518781529051600091339160008051602061285e8339815191529181900360200190a36004546040805187815290516001600160a01b036101009093049290921691339160008051602061285e833981519152919081900360200190a350505050505050612044565b600554600090611fb690610a4a8569d3c21bcecceda100000061253a565b33600090815260066020526040902054909150611fd39082612653565b33600090815260066020526040808220929092556001600160a01b03861681522054611fff90826124e0565b6001600160a01b03851660008181526006602090815260409182902093909355805184815290519192339260008051602061285e8339815191529281900390910190a3505b50600192915050565b600b546001600160a01b031681565b6120646126f6565b6000546001600160a01b039081169116146120b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fcea48012bdb313072f54da033c891e9ad17d42f6fff9a5a1b74dfc865c37e051929181900390910190a16001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60008054600160a01b900460ff1615612177576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b506001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b600a6020526000908152604090205460ff1681565b600e5462010000900461ffff1681565b6121d06126f6565b6001546001600160a01b0390811691161461222a576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b600054600160a01b900460ff161561227c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e805461ffff191661ffff92909216919091179055565b670de0b6b3a764000081565b6122a86126f6565b6000546001600160a01b039081169116146122f8576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b6001600160a01b03811661233d5760405162461bcd60e51b81526004018080602001828103825260268152602001806127f76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123a06126f6565b6000546001600160a01b039081169116146123f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6124206126f6565b6000546001600160a01b03908116911614612470576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600082820183811015611036576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612549575060006108f4565b8282028284828161255657fe5b04146110365760405162461bcd60e51b815260040180806020018281038252602181526020018061281d6021913960400191505060405180910390fd5b600061103683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126fa565b600081612617576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848161262257fe5b04905082848161262e57fe5b0615611036576001019392505050565b6000600c546000198161264d57fe5b04905090565b600061103683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279c565b6001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b03821660009081526008602052604081205460ff16806110365750506001600160a01b031660009081526009602052604090205460ff16919050565b3390565b600081836127865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561274b578181015183820152602001612733565b50505050905090810190601f1680156127785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161279257fe5b0495945050505050565b600081848411156127ee5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561274b578181015183820152602001612733565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8a2646970667358221220b3f1b09a486a66c7a94b6e12f6895a69db0ce8565303207cedc174ca6461f00b64736f6c634300060c0033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000000000000000000000026def16caa31719a00000000000000000000000000000447eea0067a045ca363c7da86a1376e93f59bf8d

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061023d5760003560e01c8063715018a61161013b578063b72bb3d5116100b8578063e064648a1161007c578063e064648a146106a0578063ec342ad0146106c1578063f2fde38b146106c9578063fcdc7b1d146106ef578063ff12bbf4146107155761023d565b8063b72bb3d51461060e578063bf79cb0d14610616578063dd62ed3e14610644578063de2f716014610672578063de52014b146106985761023d565b80638da5cb5b116100ff5780638da5cb5b1461057857806395d89b4114610580578063a457c2d714610588578063a486309d146105b4578063a9059cbb146105e25761023d565b8063715018a6146104fc5780637af548c1146105045780637dbaed881461052f578063896871161461054c5780638cf57cb9146105705761023d565b806339509351116101c95780634773a6a91161018d5780634773a6a91461049f5780635c975abb146104be57806364dd48f5146104c65780636f97857b146104ce57806370a08231146104d65761023d565b806339509351146103e05780633986829d1461040c5780633af9e6691461042d5780633d1c28331461045357806343684b21146104795761023d565b806316b627d11161021057806316b627d11461033657806318160ddd1461035c57806323b872dd146103645780632411e7171461039a578063313ce567146103c25761023d565b806304cf86821461024257806306fdde0314610271578063095ea7b3146102ee57806311d3e6c41461032e575b600080fd5b61025f6004803603602081101561025857600080fd5b5035610743565b60408051918252519081900360200190f35b6102796107b4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102b357818101518382015260200161029b565b50505050905090810190601f1680156102e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61031a6004803603604081101561030457600080fd5b506001600160a01b03813516906020013561083f565b604080519115158252519081900360200190f35b61025f6108fa565b61031a6004803603602081101561034c57600080fd5b50356001600160a01b031661095a565b61025f61096f565b61031a6004803603606081101561037a57600080fd5b506001600160a01b03813581169160208101359091169060400135610975565b6103c0600480360360208110156103b057600080fd5b50356001600160a01b031661103d565b005b6103ca61114c565b6040805160ff9092168252519081900360200190f35b61031a600480360360408110156103f657600080fd5b506001600160a01b038135169060200135611155565b6103c06004803603602081101561042257600080fd5b503561ffff1661123b565b61025f6004803603602081101561044357600080fd5b50356001600160a01b031661130f565b6103c06004803603602081101561046957600080fd5b50356001600160a01b031661132a565b61031a6004803603602081101561048f57600080fd5b50356001600160a01b03166113a4565b6104a76113b9565b6040805161ffff9092168252519081900360200190f35b61031a6113c3565b61025f6113d3565b61025f6113e1565b61025f600480360360208110156104ec57600080fd5b50356001600160a01b03166113e7565b6103c061146e565b61025f6004803603606081101561051a57600080fd5b50803590602081013590604001351515611510565b61025f6004803603602081101561054557600080fd5b5035611754565b6105546117c2565b604080516001600160a01b039092168252519081900360200190f35b6105546117d1565b6105546117e5565b6102796117f4565b61031a6004803603604081101561059e57600080fd5b506001600160a01b03813516906020013561184f565b6103c0600480360360408110156105ca57600080fd5b506001600160a01b038135169060200135151561198b565b61031a600480360360408110156105f857600080fd5b506001600160a01b038135169060200135611a53565b61055461204d565b6103c06004803603604081101561062c57600080fd5b506001600160a01b038135169060200135151561205c565b61025f6004803603604081101561065a57600080fd5b506001600160a01b0381358116916020013516612124565b61031a6004803603602081101561068857600080fd5b50356001600160a01b03166121a3565b6104a76121b8565b6103c0600480360360208110156106b657600080fd5b503561ffff166121c8565b61025f612294565b6103c0600480360360208110156106df57600080fd5b50356001600160a01b03166122a0565b6103c06004803603602081101561070557600080fd5b50356001600160a01b0316612398565b6103c06004803603604081101561072b57600080fd5b506001600160a01b0381351690602001351515612418565b60008054600160a01b900460ff1615610796576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e546000906107ab90849061ffff166125d5565b9150505b919050565b6002805460408051602060018416156101000260001901909316849004601f810184900484028201840190925281815292918301828280156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b505050505081565b60008054600160a01b900460ff1615610892576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360008181526007602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60008054600160a01b900460ff161561094d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61095561263e565b905090565b60096020526000908152604090205460ff1681565b600d5490565b60008054600160a01b900460ff16156109c8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b03841660009081526007602090815260408083203384529091529020546109f69083612653565b6001600160a01b0385166000908152600760209081526040808320338452909152902055610a2384612695565b15610b16576000610a50670de0b6b3a7640000610a4a8569d3c21bcecceda100000061253a565b90612593565b90506000610a75600554610a4a670de0b6b3a76400008561253a90919063ffffffff16565b6001600160a01b038716600090815260066020526040902054909150610a9b9083612653565b6001600160a01b038088166000908152600660205260408082209390935590871681522054610aca90826124e0565b6001600160a01b0380871660008181526006602090815260409182902094909455805188815290519193928a169260008051602061285e83398151915292918290030190a35050611032565b610b1f83612695565b15610d72576000610b2f83610743565b6005549091506002820482039082850390600090610b5b90610a4a8869d3c21bcecceda100000061253a565b90506000610b82600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000610ba9600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b90506000610bce670de0b6b3a7640000610a4a6005548661253a90919063ffffffff16565b600d805489900390556001600160a01b038c16600090815260066020526040902054909150610bfd9085612653565b6001600160a01b03808d1660009081526006602052604080822093909355908c1681522054610c2c90826124e0565b6001600160a01b03808c1660009081526006602052604080822093909355600454610100900490911681522054610c6390836124e0565b60045461010090046001600160a01b0316600090815260066020526040902055610cab6002885b60008052600660205260008051602061287e833981519152549190046124e0565b600080526006602090815260008051602061287e833981519152919091556040805187815290516001600160a01b038d811693908f169260008051602061285e833981519152929081900390910190a360006001600160a01b038c1660008051602061285e83398151915260028a60408051929091048252519081900360200190a36004546040805188815290516001600160a01b036101009093048316928e169160008051602061285e833981519152919081900360200190a350505050505050611032565b610d7c84846126b3565b610f78576000610d8b83611754565b60055490915060028204908183039083860390600090610db990610a4a8969d3c21bcecceda100000061253a565b90506000610de0600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000610e07600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b600d805489900390559050610e1d600288610c8a565b600660205260008051602061287e833981519152556001600160a01b038b1660009081526040902054610e509084612653565b6001600160a01b03808d1660009081526006602052604080822093909355908c1681522054610e7f90836124e0565b6001600160a01b03808c1660009081526006602052604080822093909355600454610100900490911681522054610eb690826124e0565b6004546001600160a01b03610100909104811660009081526006602090815260409182902093909355805187815290518d831693928f169260008051602061285e833981519152928290030190a36040805187815290516000916001600160a01b038e169160008051602061285e8339815191529181900360200190a36004546040805187815290516001600160a01b036101009093048316928e169160008051602061285e833981519152919081900360200190a350505050505050611032565b600554600090610f9690610a4a8569d3c21bcecceda100000061253a565b6001600160a01b038616600090815260066020526040902054909150610fbc9082612653565b6001600160a01b038087166000908152600660205260408082209390935590861681522054610feb90826124e0565b6001600160a01b03808616600081815260066020908152604091829020949094558051858152905191939289169260008051602061285e83398151915292918290030190a3505b5060015b9392505050565b6110456126f6565b6000546001600160a01b03908116911614611095576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b6001600160a01b0381166110f0576040805162461bcd60e51b815260206004820152601b60248201527f6e657720726562617365722069732061646472657373207a65726f0000000000604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fe8a195812977ad9c31215cd36cddec4a0a2cef58eb984d1169225de6e823ff4390600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60045460ff1681565b60008054600160a01b900460ff16156111a8576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b03871684529091529020546111d690836124e0565b3360008181526007602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6112436126f6565b6001546001600160a01b0390811691161461129d576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b600054600160a01b900460ff16156112ef576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e805461ffff909216620100000263ffff000019909216919091179055565b6001600160a01b031660009081526006602052604090205490565b6113326126f6565b6000546001600160a01b03908116911614611382576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60086020526000908152604090205460ff1681565b600e5461ffff1681565b600054600160a01b900460ff1690565b69d3c21bcecceda100000081565b60055481565b60006113f282612695565b15611439576001600160a01b0382166000908152600660205260409020546114329069d3c21bcecceda100000090610a4a90670de0b6b3a764000061253a565b90506107af565b6005546001600160a01b0383166000908152600660205260409020546114329169d3c21bcecceda100000091610a4a9161253a565b6114766126f6565b6000546001600160a01b039081169116146114c6576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061151a6126f6565b6001546001600160a01b03908116911614611574576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b600054600160a01b900460ff16156115c6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b8215806115d1575081155b1561161757600554604080519182525185917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a250600d54611036565b600061163b670de0b6b3a7640000610a4a61163282886124e0565b6005549061253a565b905061164561263e565b811015611656576005819055611662565b61165e61263e565b6005555b600b546001600160a01b031660009081526006602052604090205461170d906116a39069d3c21bcecceda100000090610a4a90670de0b6b3a764000061253a565b600554600b546001600160a01b031660009081526006602052604081205490805260008051602061287e83398151915254600c546117079369d3c21bcecceda100000093610a4a939192611701926116fb9190612653565b90612653565b9061253a565b906124e0565b600d55600554604080519182525186917f11c6bf55864ff83827df712625d7a80e5583eef0264921025e7cd22003a21511919081900360200190a25050600d549392505050565b60008054600160a01b900460ff16156117a7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e546000906107ab90849062010000900461ffff166125d5565b6001546001600160a01b031690565b60045461010090046001600160a01b031681565b6000546001600160a01b031690565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108375780601f1061080c57610100808354040283529160200191610837565b60008054600160a01b900460ff16156118a2576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b03871684529091529020548083106118f6573360009081526007602090815260408083206001600160a01b0388168452909152812055611925565b6119008184612653565b3360009081526007602090815260408083206001600160a01b03891684529091529020555b3360008181526007602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6119936126f6565b6000546001600160a01b039081169116146119e3576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517f88cf9b943f64811022537ee9f0141770d85e612eae3a3a39241abe5ca9f11382929181900390910190a16001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b60008054600160a01b900460ff1615611aa6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b611aaf33612695565b15611b8e576000611ad6670de0b6b3a7640000610a4a8569d3c21bcecceda100000061253a565b90506000611afb600554610a4a670de0b6b3a76400008561253a90919063ffffffff16565b33600090815260066020526040902054909150611b189083612653565b33600090815260066020526040808220929092556001600160a01b03871681522054611b4490826124e0565b6001600160a01b03861660008181526006602090815260409182902093909355805187815290519192339260008051602061285e8339815191529281900390910190a35050612044565b611b9783612695565b15611da6576000611ba783610743565b60055490915060028204908183039083860390600090611bd590610a4a8969d3c21bcecceda100000061253a565b90506000611bfc600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000611c23600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b90506000611c48670de0b6b3a7640000610a4a6005548661253a90919063ffffffff16565b600d80548a900390559050611c5e600289610c8a565b600660205260008051602061287e833981519152553360009081526040902054611c889085612653565b33600090815260066020526040808220929092556001600160a01b038d1681522054611cb490826124e0565b6001600160a01b03808d1660009081526006602052604080822093909355600454610100900490911681522054611ceb90836124e0565b6004546001600160a01b0361010090910481166000908152600660209081526040918290209390935580518881529051918e1692339260008051602061285e8339815191529281900390910190a3604080518881529051600091339160008051602061285e8339815191529181900360200190a36004546040805188815290516001600160a01b036101009093049290921691339160008051602061285e833981519152919081900360200190a35050505050505050612044565b611db033846126b3565b611f98576000611dbf83611754565b60055490915060028204908183039083860390600090611ded90610a4a8969d3c21bcecceda100000061253a565b90506000611e14600554610a4a69d3c21bcecceda10000008661253a90919063ffffffff16565b90506000611e3b600554610a4a69d3c21bcecceda10000008861253a90919063ffffffff16565b600d805489900390559050611e51600288610c8a565b600660205260008051602061287e833981519152553360009081526040902054611e7b9084612653565b33600090815260066020526040808220929092556001600160a01b038c1681522054611ea790836124e0565b6001600160a01b03808c1660009081526006602052604080822093909355600454610100900490911681522054611ede90826124e0565b6004546001600160a01b0361010090910481166000908152600660209081526040918290209390935580518781529051918d1692339260008051602061285e8339815191529281900390910190a3604080518781529051600091339160008051602061285e8339815191529181900360200190a36004546040805187815290516001600160a01b036101009093049290921691339160008051602061285e833981519152919081900360200190a350505050505050612044565b600554600090611fb690610a4a8569d3c21bcecceda100000061253a565b33600090815260066020526040902054909150611fd39082612653565b33600090815260066020526040808220929092556001600160a01b03861681522054611fff90826124e0565b6001600160a01b03851660008181526006602090815260409182902093909355805184815290519192339260008051602061285e8339815191529281900390910190a3505b50600192915050565b600b546001600160a01b031681565b6120646126f6565b6000546001600160a01b039081169116146120b4576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fcea48012bdb313072f54da033c891e9ad17d42f6fff9a5a1b74dfc865c37e051929181900390910190a16001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b60008054600160a01b900460ff1615612177576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b506001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b600a6020526000908152604090205460ff1681565b600e5462010000900461ffff1681565b6121d06126f6565b6001546001600160a01b0390811691161461222a576040805162461bcd60e51b815260206004820152601560248201527431b0b63632b91034b9903737ba103932b130b9b2b960591b604482015290519081900360640190fd5b600054600160a01b900460ff161561227c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600e805461ffff191661ffff92909216919091179055565b670de0b6b3a764000081565b6122a86126f6565b6000546001600160a01b039081169116146122f8576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b6001600160a01b03811661233d5760405162461bcd60e51b81526004018080602001828103825260268152602001806127f76026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123a06126f6565b6000546001600160a01b039081169116146123f0576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6124206126f6565b6000546001600160a01b03908116911614612470576040805162461bcd60e51b8152602060048201819052602482015260008051602061283e833981519152604482015290519081900360640190fd5b604080516001600160a01b0384168152821515602082015281517fc3d26c130d120a4bb874de56c8b5fb727ad2cfc3551ca49cd42ef248e893b69a929181900390910190a16001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b600082820183811015611036576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612549575060006108f4565b8282028284828161255657fe5b04146110365760405162461bcd60e51b815260040180806020018281038252602181526020018061281d6021913960400191505060405180910390fd5b600061103683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126fa565b600081612617576040805162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015290519081900360640190fd5b600082848161262257fe5b04905082848161262e57fe5b0615611036576001019392505050565b6000600c546000198161264d57fe5b04905090565b600061103683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279c565b6001600160a01b03166000908152600a602052604090205460ff1690565b6001600160a01b03821660009081526008602052604081205460ff16806110365750506001600160a01b031660009081526009602052604090205460ff16919050565b3390565b600081836127865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561274b578181015183820152602001612733565b50505050905090810190601f1680156127785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161279257fe5b0495945050505050565b600081848411156127ee5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561274b578181015183820152602001612733565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8a2646970667358221220b3f1b09a486a66c7a94b6e12f6895a69db0ce8565303207cedc174ca6461f00b64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000026def16caa31719a00000000000000000000000000000447eea0067a045ca363c7da86a1376e93f59bf8d

-----Decoded View---------------
Arg [0] : initialSupply (uint256): 2937000000000000000000000
Arg [1] : initialSupplyAddr (address): 0x447eea0067A045ca363C7dA86A1376E93f59BF8D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000026def16caa31719a00000
Arg [1] : 000000000000000000000000447eea0067a045ca363c7da86a1376e93f59bf8d


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.