ETH Price: $2,981.17 (+2.09%)
Gas: 2 Gwei

Contract

0x3A8A97123bcCd826228e5EB4144b48cce169517B
 

Overview

ETH Balance

31.497416153614773578 ETH

Eth Value

$93,899.05 (@ $2,981.17/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Request Refund197704552024-04-30 20:17:1166 days ago1714508231IN
0x3A8A9712...ce169517B
0 ETH0.0005066415.91079815
Request Refund187608992023-12-11 5:32:59207 days ago1702272779IN
0x3A8A9712...ce169517B
0 ETH0.0009732530.56422382
Request Refund177638682023-07-24 15:30:59347 days ago1690212659IN
0x3A8A9712...ce169517B
0 ETH0.0021353667.05930632
Request Refund130933742021-08-25 8:08:181045 days ago1629878898IN
0x3A8A9712...ce169517B
0 ETH0.0025248879.29162923
Request Refund117883202021-02-04 7:10:211247 days ago1612422621IN
0x3A8A9712...ce169517B
0 ETH0.00298716133.1000016
Request Refund116790552021-01-18 11:42:261264 days ago1610970146IN
0x3A8A9712...ce169517B
0 ETH0.0009592840.00000145
Request Refund111014682020-10-21 19:47:591353 days ago1603309679IN
0x3A8A9712...ce169517B
0 ETH0.0008079436
Request Refund85342802019-09-12 10:05:181758 days ago1568282718IN
0x3A8A9712...ce169517B
0 ETH0.0008548941
Request Refund79765072019-06-17 14:44:181845 days ago1560782658IN
0x3A8A9712...ce169517B
0 ETH0.000062553
Transfer73942542019-03-18 17:30:481936 days ago1552930248IN
0x3A8A9712...ce169517B
0 ETH0.000123475
Transfer73942272019-03-18 17:25:151936 days ago1552929915IN
0x3A8A9712...ce169517B
0 ETH0.000098774
Request Refund73929062019-03-18 12:36:211936 days ago1552912581IN
0x3A8A9712...ce169517B
0 ETH0.0008548941
Request Refund72912842019-03-02 16:39:001952 days ago1551544740IN
0x3A8A9712...ce169517B
0 ETH0.000062553
Transfer72912452019-03-02 16:29:421952 days ago1551544182IN
0x3A8A9712...ce169517B
0 ETH0.0002549210.35
Request Refund72898552019-03-02 11:11:051952 days ago1551525065IN
0x3A8A9712...ce169517B
0 ETH0.000062553
Request Refund72860682019-03-01 21:01:391953 days ago1551474099IN
0x3A8A9712...ce169517B
0 ETH0.000068973
Request Refund72860662019-03-01 21:01:021953 days ago1551474062IN
0x3A8A9712...ce169517B
0 ETH0.000062553
Request Refund72841242019-03-01 13:26:391953 days ago1551446799IN
0x3A8A9712...ce169517B
0 ETH0.000114955
Request Refund72841222019-03-01 13:26:261953 days ago1551446786IN
0x3A8A9712...ce169517B
0 ETH0.000114955
Request Refund72841202019-03-01 13:25:501953 days ago1551446750IN
0x3A8A9712...ce169517B
0 ETH0.000104255
Request Refund67757122018-11-26 10:40:222048 days ago1543228822IN
0x3A8A9712...ce169517B
0 ETH0.00012516
Abort67757032018-11-26 10:37:582048 days ago1543228678IN
0x3A8A9712...ce169517B
0 ETH0.01962169666
Pause63325062018-09-14 22:00:392121 days ago1536962439IN
0x3A8A9712...ce169517B
0 ETH0.000248765
Add To Whitelist63321252018-09-14 20:26:082121 days ago1536956768IN
0x3A8A9712...ce169517B
0 ETH0.000260325.7
Transfer63320342018-09-14 20:02:392121 days ago1536955359IN
0x3A8A9712...ce169517B
0.20137531 ETH0.0032340841
View all transactions

Latest 15 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
197704552024-04-30 20:17:1166 days ago1714508231
0x3A8A9712...ce169517B
1 ETH
187608992023-12-11 5:32:59207 days ago1702272779
0x3A8A9712...ce169517B
0.04 ETH
177638682023-07-24 15:30:59347 days ago1690212659
0x3A8A9712...ce169517B
0.2308 ETH
130933742021-08-25 8:08:181045 days ago1629878898
0x3A8A9712...ce169517B
59.9 ETH
117883202021-02-04 7:10:211247 days ago1612422621
0x3A8A9712...ce169517B
24.83966586 ETH
111014682020-10-21 19:47:591353 days ago1603309679
0x3A8A9712...ce169517B
0.1 ETH
85342802019-09-12 10:05:181758 days ago1568282718
0x3A8A9712...ce169517B
0.2 ETH
79765072019-06-17 14:44:181845 days ago1560782658
0x3A8A9712...ce169517B
2.00611933 ETH
73929062019-03-18 12:36:211936 days ago1552912581
0x3A8A9712...ce169517B
0.75 ETH
72912842019-03-02 16:39:001952 days ago1551544740
0x3A8A9712...ce169517B
1.6 ETH
72898552019-03-02 11:11:051952 days ago1551525065
0x3A8A9712...ce169517B
1.2598 ETH
72860662019-03-01 21:01:021953 days ago1551474062
0x3A8A9712...ce169517B
0.35 ETH
72841202019-03-01 13:25:501953 days ago1551446750
0x3A8A9712...ce169517B
1.5386 ETH
67757122018-11-26 10:40:222048 days ago1543228822
0x3A8A9712...ce169517B
1,000.97982581 ETH
61628462018-08-17 8:59:482149 days ago1534496388
0x3A8A9712...ce169517B
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QCOToken

Compiler Version
v0.4.19+commit.c4cbbb05

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-08-17
*/

pragma solidity ^0.4.11;

// File: zeppelin/token/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: zeppelin/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: zeppelin/token/BasicToken.sol

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    // SafeMath.sub will throw if there is not enough balance.
    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    Transfer(msg.sender, _to, _value);
    return true;
  }

  /**
  * @dev Gets the balance of the specified address.
  * @param _owner The address to query the the balance of.
  * @return An uint256 representing the amount owned by the passed address.
  */
  function balanceOf(address _owner) public constant returns (uint256 balance) {
    return balances[_owner];
  }

}

// File: zeppelin/token/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: zeppelin/token/StandardToken.sol

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = _allowance.sub(_value);
    Transfer(_from, _to, _value);
    return true;
  }

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval (address _spender, uint _addedValue)
    returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  function decreaseApproval (address _spender, uint _subtractedValue)
    returns (bool success) {
    uint oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue > oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

// File: contracts/QravityTeamTimelock.sol

contract QravityTeamTimelock {
    using SafeMath for uint256;

    uint16 constant ORIGIN_YEAR = 1970;

    // Account that can release tokens
    address public controller;

    uint256 public releasedAmount;

    ERC20Basic token;

    function QravityTeamTimelock(ERC20Basic _token, address _controller)
    public
    {
        require(address(_token) != 0x0);
        require(_controller != 0x0);
        token = _token;
        controller = _controller;
    }

    /**
     * @notice Transfers tokens held by timelock to beneficiary.
     */
    function release(address _beneficiary, uint256 _amount)
    public
    {
        require(msg.sender == controller);
        require(_amount > 0);
        require(_amount <= availableAmount(now));
        token.transfer(_beneficiary, _amount);
        releasedAmount = releasedAmount.add(_amount);
    }

    function availableAmount(uint256 timestamp)
    public view
    returns (uint256 amount)
    {
        uint256 totalWalletAmount = releasedAmount.add(token.balanceOf(this));
        uint256 canBeReleasedAmount = totalWalletAmount.mul(availablePercent(timestamp)).div(100);
        return canBeReleasedAmount.sub(releasedAmount);
    }

    function availablePercent(uint256 timestamp)
    public view
    returns (uint256 factor)
    {
       uint256[10] memory releasePercent = [uint256(0), 20, 30, 40, 50, 60, 70, 80, 90, 100];
       uint[10] memory releaseTimes = [
           toTimestamp(2020, 4, 1),
           toTimestamp(2020, 7, 1),
           toTimestamp(2020, 10, 1),
           toTimestamp(2021, 1, 1),
           toTimestamp(2021, 4, 1),
           toTimestamp(2021, 7, 1),
           toTimestamp(2021, 10, 1),
           toTimestamp(2022, 1, 1),
           toTimestamp(2022, 4, 1),
           0
        ];

        // Set default to the 0% bonus.
        uint256 timeIndex = 0;

        for (uint256 i = 0; i < releaseTimes.length; i++) {
            if (timestamp < releaseTimes[i] || releaseTimes[i] == 0) {
                timeIndex = i;
                break;
            }
        }
        return releasePercent[timeIndex];
    }

    // Timestamp functions based on
    // https://github.com/pipermerriam/ethereum-datetime/blob/master/contracts/DateTime.sol
    function toTimestamp(uint16 year, uint8 month, uint8 day)
    internal pure returns (uint timestamp) {
        uint16 i;

        // Year
        timestamp += (year - ORIGIN_YEAR) * 1 years;
        timestamp += (leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR)) * 1 days;

        // Month
        uint8[12] memory monthDayCounts;
        monthDayCounts[0] = 31;
        if (isLeapYear(year)) {
                monthDayCounts[1] = 29;
        }
        else {
                monthDayCounts[1] = 28;
        }
        monthDayCounts[2] = 31;
        monthDayCounts[3] = 30;
        monthDayCounts[4] = 31;
        monthDayCounts[5] = 30;
        monthDayCounts[6] = 31;
        monthDayCounts[7] = 31;
        monthDayCounts[8] = 30;
        monthDayCounts[9] = 31;
        monthDayCounts[10] = 30;
        monthDayCounts[11] = 31;

        for (i = 1; i < month; i++) {
            timestamp += monthDayCounts[i - 1] * 1 days;
        }

        // Day
        timestamp += (day - 1) * 1 days;

        // Hour, Minute, and Second are assumed as 0 (we calculate in GMT)

        return timestamp;
    }

    function leapYearsBefore(uint year)
    internal pure returns (uint) {
        year -= 1;
        return year / 4 - year / 100 + year / 400;
    }

    function isLeapYear(uint16 year)
    internal pure returns (bool) {
        if (year % 4 != 0) {
            return false;
        }
        if (year % 100 != 0) {
            return true;
        }
        if (year % 400 != 0) {
            return false;
        }
        return true;
    }
}

// File: contracts/Bonus.sol

library Bonus {
    uint16 constant ORIGIN_YEAR = 1970;
    struct BonusData {
        uint[7] factors; // aditional entry for 0% bonus
        uint[6] cutofftimes;
    }

    // Use storage keyword so that we write this to persistent storage.
    function initBonus(BonusData storage data)
    internal
    {
        data.factors = [uint256(300), 250, 200, 150, 100, 50, 0];
        data.cutofftimes = [toTimestamp(2018, 9, 1),
                            toTimestamp(2018, 9, 8),
                            toTimestamp(2018, 9, 15),
                            toTimestamp(2018, 9, 22),
                            toTimestamp(2018, 9, 29),
                            toTimestamp(2018, 10, 8)];
    }

    function getBonusFactor(uint timestamp, BonusData storage data)
    internal view returns (uint256 factor)
    {
        uint256 countcutoffs = data.cutofftimes.length;
        // Set default to the 0% bonus.
        uint256 timeIndex = countcutoffs;

        for (uint256 i = 0; i < countcutoffs; i++) {
            if (timestamp < data.cutofftimes[i]) {
                timeIndex = i;
                break;
            }
        }

        return data.factors[timeIndex];
    }

    function getFollowingCutoffTime(uint timestamp, BonusData storage data)
    internal view returns (uint nextTime)
    {
        uint256 countcutoffs = data.cutofftimes.length;
        // Set default to 0 meaning "no cutoff any more".
        nextTime = 0;

        for (uint256 i = 0; i < countcutoffs; i++) {
            if (timestamp < data.cutofftimes[i]) {
                nextTime = data.cutofftimes[i];
                break;
            }
        }

        return nextTime;
    }

    // Timestamp functions based on
    // https://github.com/pipermerriam/ethereum-datetime/blob/master/contracts/DateTime.sol
    function toTimestamp(uint16 year, uint8 month, uint8 day)
    internal pure returns (uint timestamp) {
        uint16 i;

        // Year
        timestamp += (year - ORIGIN_YEAR) * 1 years;
        timestamp += (leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR)) * 1 days;

        // Month
        uint8[12] memory monthDayCounts;
        monthDayCounts[0] = 31;
        if (isLeapYear(year)) {
                monthDayCounts[1] = 29;
        }
        else {
                monthDayCounts[1] = 28;
        }
        monthDayCounts[2] = 31;
        monthDayCounts[3] = 30;
        monthDayCounts[4] = 31;
        monthDayCounts[5] = 30;
        monthDayCounts[6] = 31;
        monthDayCounts[7] = 31;
        monthDayCounts[8] = 30;
        monthDayCounts[9] = 31;
        monthDayCounts[10] = 30;
        monthDayCounts[11] = 31;

        for (i = 1; i < month; i++) {
            timestamp += monthDayCounts[i - 1] * 1 days;
        }

        // Day
        timestamp += (day - 1) * 1 days;

        // Hour, Minute, and Second are assumed as 0 (we calculate in GMT)

        return timestamp;
    }

    function leapYearsBefore(uint year)
    internal pure returns (uint) {
        year -= 1;
        return year / 4 - year / 100 + year / 400;
    }

    function isLeapYear(uint16 year)
    internal pure returns (bool) {
        if (year % 4 != 0) {
            return false;
        }
        if (year % 100 != 0) {
            return true;
        }
        if (year % 400 != 0) {
            return false;
        }
        return true;
    }
}

// File: contracts/QCOToken.sol

/*
Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20.
*/
pragma solidity ^0.4.11;




contract QCOToken is StandardToken {

    // data structures
    enum States {
        Initial, // deployment time
        ValuationSet,
        Ico, // whitelist addresses, accept funds, update balances
        Aborted, // ICO aborted
        Operational, // production phase
        Paused         // for contract upgrades
    }

    mapping(address => uint256) public ethPossibleRefunds;

    uint256 public soldTokens;

    string public constant name = "Qravity Coin Token";

    string public constant symbol = "QCO";

    uint8 public constant decimals = 18;

    mapping(address => bool) public whitelist;

    address public stateControl;

    address public whitelistControl;

    address public withdrawControl;

    address public tokenAssignmentControl;

    address public teamWallet;

    address public reserves;

    States public state;

    uint256 public endBlock;

    uint256 public ETH_QCO; //number of tokens per ETH

    uint256 constant pointMultiplier = 1e18; //100% = 1*10^18 points

    uint256 public constant maxTotalSupply = 1000000000 * pointMultiplier; //1B tokens

    uint256 public constant percentForSale = 50;

    Bonus.BonusData bonusData;

    event Mint(address indexed to, uint256 amount);
    event MintFinished();

    bool public mintingFinished = false;

    //pausing the contract should extend the ico dates into the future.
    uint256 public pauseOffset = 0;

    uint256 public pauseLastStart = 0;


    //this creates the contract and stores the owner. it also passes in 3 addresses to be used later during the lifetime of the contract.
    function QCOToken(
        address _stateControl
    , address _whitelistControl
    , address _withdrawControl
    , address _tokenAssignmentControl
    , address _teamControl
    , address _reserves)
    public
    {
        stateControl = _stateControl;
        whitelistControl = _whitelistControl;
        withdrawControl = _withdrawControl;
        tokenAssignmentControl = _tokenAssignmentControl;
        moveToState(States.Initial);
        endBlock = 0;
        ETH_QCO = 0;
        totalSupply = maxTotalSupply;
        soldTokens = 0;
        Bonus.initBonus(bonusData);
        teamWallet = address(new QravityTeamTimelock(this, _teamControl));

        reserves = _reserves;
        balances[reserves] = totalSupply;
        Mint(reserves, totalSupply);
        Transfer(0x0, reserves, totalSupply);
    }

    event Whitelisted(address addr);

    event StateTransition(States oldState, States newState);

    modifier onlyWhitelist() {
        require(msg.sender == whitelistControl);
        _;
    }

    modifier onlyStateControl() {
        require(msg.sender == stateControl);
        _;
    }

    modifier onlyTokenAssignmentControl() {
        require(msg.sender == tokenAssignmentControl);
        _;
    }

    modifier onlyWithdraw() {
        require(msg.sender == withdrawControl);
        _;
    }

    modifier requireState(States _requiredState) {
        require(state == _requiredState);
        _;
    }

    /**
    BEGIN ICO functions
    */

    //this is the main funding function, it updates the balances of tokens during the ICO.
    //no particular incentive schemes have been implemented here
    //it is only accessible during the "ICO" phase.
    function() payable
    public
    requireState(States.Ico)
    {
        require(whitelist[msg.sender] == true);
        require(msg.value > 0);
        // We have reports that some wallet contracts may end up sending a single null-byte.
        // Still reject calls of unknown functions, which are always at least 4 bytes of data.
        require(msg.data.length < 4);
        require(block.number < endBlock);

        uint256 soldToTuserWithBonus = calcBonus(msg.value);

        issueTokensToUser(msg.sender, soldToTuserWithBonus);
        ethPossibleRefunds[msg.sender] = ethPossibleRefunds[msg.sender].add(msg.value);
    }

    function issueTokensToUser(address beneficiary, uint256 amount)
    internal
    {
        uint256 soldTokensAfterInvestment = soldTokens.add(amount);
        require(soldTokensAfterInvestment <= maxTotalSupply.mul(percentForSale).div(100));

        balances[beneficiary] = balances[beneficiary].add(amount);
        balances[reserves] = balances[reserves].sub(amount);
        soldTokens = soldTokensAfterInvestment;
        Transfer(reserves, beneficiary, amount);
    }

    function getCurrentBonusFactor()
    public view
    returns (uint256 factor)
    {
        //we pass in  now-pauseOffset as the "now time" for purposes of calculating the bonus factor
        return Bonus.getBonusFactor(now - pauseOffset, bonusData);
    }

    function getNextCutoffTime()
    public view returns (uint timestamp)
    {
        return Bonus.getFollowingCutoffTime(now - pauseOffset, bonusData);
    }

    function calcBonus(uint256 weiAmount)
    constant
    public
    returns (uint256 resultingTokens)
    {
        uint256 basisTokens = weiAmount.mul(ETH_QCO);
        //percentages are integer numbers as per mill (promille) so we can accurately calculate 0.5% = 5. 100% = 1000
        uint256 perMillBonus = getCurrentBonusFactor();
        //100% + bonus % times original amount divided by 100%.
        return basisTokens.mul(per_mill + perMillBonus).div(per_mill);
    }

    uint256 constant per_mill = 1000;


    function moveToState(States _newState)
    internal
    {
        StateTransition(state, _newState);
        state = _newState;
    }
    // ICO contract configuration function
    // new_ETH_QCO is the new rate of ETH in QCO to use when no bonus applies
    // newEndBlock is the absolute block number at which the ICO must stop. It must be set after now + silence period.
    function updateEthICOVariables(uint256 _new_ETH_QCO, uint256 _newEndBlock)
    public
    onlyStateControl
    {
        require(state == States.Initial || state == States.ValuationSet);
        require(_new_ETH_QCO > 0);
        require(block.number < _newEndBlock);
        endBlock = _newEndBlock;
        // initial conversion rate of ETH_QCO set now, this is used during the Ico phase.
        ETH_QCO = _new_ETH_QCO;
        moveToState(States.ValuationSet);
    }

    function startICO()
    public
    onlyStateControl
    requireState(States.ValuationSet)
    {
        require(block.number < endBlock);
        moveToState(States.Ico);
    }

    function addPresaleAmount(address beneficiary, uint256 amount)
    public
    onlyTokenAssignmentControl
    {
        require(state == States.ValuationSet || state == States.Ico);
        issueTokensToUser(beneficiary, amount);
    }


    function endICO()
    public
    onlyStateControl
    requireState(States.Ico)
    {
        burnAndFinish();
        moveToState(States.Operational);
    }

    function anyoneEndICO()
    public
    requireState(States.Ico)
    {
        require(block.number > endBlock);
        burnAndFinish();
        moveToState(States.Operational);
    }

    function burnAndFinish()
    internal
    {
        totalSupply = soldTokens.mul(100).div(percentForSale);

        uint256 teamAmount = totalSupply.mul(22).div(100);
        balances[teamWallet] = teamAmount;
        Transfer(reserves, teamWallet, teamAmount);

        uint256 reservesAmount = totalSupply.sub(soldTokens).sub(teamAmount);
        // Burn all tokens over the target amount.
        Transfer(reserves, 0x0, balances[reserves].sub(reservesAmount).sub(teamAmount));
        balances[reserves] = reservesAmount;

        mintingFinished = true;
        MintFinished();
    }

    function addToWhitelist(address _whitelisted)
    public
    onlyWhitelist
        //    requireState(States.Ico)
    {
        whitelist[_whitelisted] = true;
        Whitelisted(_whitelisted);
    }


    //emergency pause for the ICO
    function pause()
    public
    onlyStateControl
    requireState(States.Ico)
    {
        moveToState(States.Paused);
        pauseLastStart = now;
    }

    //in case we want to completely abort
    function abort()
    public
    onlyStateControl
    requireState(States.Paused)
    {
        moveToState(States.Aborted);
    }

    //un-pause
    function resumeICO()
    public
    onlyStateControl
    requireState(States.Paused)
    {
        moveToState(States.Ico);
        //increase pauseOffset by the time it was paused
        pauseOffset = pauseOffset + (now - pauseLastStart);
    }

    //in case of a failed/aborted ICO every investor can get back their money
    function requestRefund()
    public
    requireState(States.Aborted)
    {
        require(ethPossibleRefunds[msg.sender] > 0);
        //there is no need for updateAccount(msg.sender) since the token never became active.
        uint256 payout = ethPossibleRefunds[msg.sender];
        //reverse calculate the amount to pay out
        ethPossibleRefunds[msg.sender] = 0;
        msg.sender.transfer(payout);
    }

    //after the ICO has run its course, the withdraw account can drain funds bit-by-bit as needed.
    function requestPayout(uint _amount)
    public
    onlyWithdraw //very important!
    requireState(States.Operational)
    {
        msg.sender.transfer(_amount);
    }

    //if this contract gets a balance in some other ERC20 contract - or even iself - then we can rescue it.
    function rescueToken(ERC20Basic _foreignToken, address _to)
    public
    onlyTokenAssignmentControl
    {
        _foreignToken.transfer(_to, _foreignToken.balanceOf(this));
    }
    /**
    END ICO functions
    */

    /**
    BEGIN ERC20 functions
    */
    function transfer(address _to, uint256 _value)
    public
    requireState(States.Operational)
    returns (bool success) {
        return super.transfer(_to, _value);
    }

    function transferFrom(address _from, address _to, uint256 _value)
    public
    requireState(States.Operational)
    returns (bool success) {
        return super.transferFrom(_from, _to, _value);
    }

    /**
    END ERC20 functions
    */
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"stateControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"weiAmount","type":"uint256"}],"name":"calcBonus","outputs":[{"name":"resultingTokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauseOffset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ETH_QCO","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"anyoneEndICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_new_ETH_QCO","type":"uint256"},{"name":"_newEndBlock","type":"uint256"}],"name":"updateEthICOVariables","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"abort","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_foreignToken","type":"address"},{"name":"_to","type":"address"}],"name":"rescueToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNextCutoffTime","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"endICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"soldTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserves","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentBonusFactor","outputs":[{"name":"factor","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"startICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"requestPayout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"resumeICO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"percentForSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauseLastStart","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenAssignmentControl","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"amount","type":"uint256"}],"name":"addPresaleAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"requestRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_whitelisted","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ethPossibleRefunds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_stateControl","type":"address"},{"name":"_whitelistControl","type":"address"},{"name":"_withdrawControl","type":"address"},{"name":"_tokenAssignmentControl","type":"address"},{"name":"_teamControl","type":"address"},{"name":"_reserves","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldState","type":"uint8"},{"indexed":false,"name":"newState","type":"uint8"}],"name":"StateTransition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

6060604052601b805460ff191690556000601c819055601d5534156200002457600080fd5b60405160c080620028cc83398101604052808051919060200180519190602001805191906020018051919060200180519190602001805160068054600160a060020a03808b16600160a060020a031992831617909255600780548a84169083161790556008805489841690831617905560098054928816929091169190911790559150620000c390506000640100000000620015686200020382021704565b6000600c819055600d8190556b033b2e3c9fd0803ce80000008155600455620000fb600e64010000000062001769620002ba82021704565b308262000107620005c9565b600160a060020a0392831681529116602082015260409081019051809103906000f08015156200013657600080fd5b600a8054600160a060020a0319908116600160a060020a0393841617909155600b80549091168383161780825560008054918416815260016020526040908190208290559154909216917f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885915190815260200160405180910390a2600b5460008054600160a060020a03909216917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060405190815260200160405180910390a350505050505062000697565b600b547f3a779de46631dd65116ae538600f1bc3c338200c6aef638429b5de43301c28f79074010000000000000000000000000000000000000000900460ff1682604051808360058111156200025557fe5b60ff1681526020018260058111156200026a57fe5b60ff1681526020019250505060405180910390a1600b805482919060a060020a60ff02191674010000000000000000000000000000000000000000836005811115620002b257fe5b021790555050565b60e0604051908101604090815261012c825260fa602083015260c8908201526096606082015260646080820152603260a0820152600060c0820152620003049082906007620005da565b5060c060405190810160405280620003306107e26009600164010000000062001843620003fc82021704565b8152602001620003546107e26009600864010000000062001843620003fc82021704565b8152602001620003786107e26009600f64010000000062001843620003fc82021704565b81526020016200039c6107e26009601664010000000062001843620003fc82021704565b8152602001620003c06107e26009601d64010000000062001843620003fc82021704565b8152602001620003e46107e2600a600864010000000062001843620003fc82021704565b9052620003f890600783019060066200061d565b5050565b600080620004096200064d565b63ffffffff6301e1338061ffff6107b119890116021692909201916200043f6107b2640100000000620019646200055482021704565b6200045c61ffff8816640100000000620019646200055482021704565b601f8352036201518002929092019162000484866401000000006200197f6200056d82021704565b156200049757601d60208201526200049f565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8460ff168261ffff16101562000537578061ffff600019840116600c81106200051357fe5b602002015160ff16620151800262ffffff16830192508180600101925050620004ee565b50506000199190910160ff16620151800262ffffff160192915050565b600019016064810460048204036101908204015b919050565b6000600461ffff83160661ffff16156200058a5750600062000568565b606461ffff83160661ffff1615620005a55750600162000568565b61019061ffff83160661ffff1615620005c15750600062000568565b506001919050565b604051610756806200217683390190565b82600781019282156200060b579160200282015b828111156200060b578251825591602001919060010190620005ee565b506200061992915062000677565b5090565b82600681019282156200060b57916020028201828111156200060b578251825591602001919060010190620005ee565b610180604051908101604052600c815b6000815260001990910190602001816200065d5790505090565b6200069491905b808211156200061957600081556001016200067e565b90565b611acf80620006a76000396000f3006060604052600436106101f55763ffffffff60e060020a60003504166304b2bf9981146102c957806305d2035b146102f857806306fdde031461031f578063083c6323146103a9578063095ea7b3146103ce57806309f3ad26146103f057806318160ddd146104065780632344acdf1461041957806323b872dd1461042c57806328250d43146104545780632ab4d05214610467578063313ce5671461047a57806332b3c323146104a357806334bb3ee1146104b857806335a063b4146104d157806341f1d4dd146104e45780634707d000146104f757806347f8b8631461051c5780634f2484091461052f57806359927044146105425780635ed9ebfc1461055557806366188463146105685780636aa9c82b1461058a57806370a082311461059d57806375172a8b146105bc5780637d363720146105cf5780637fa8c158146105e25780638456cb59146105f55780638f97e3a01461060857806395d89b411461061e5780639b19251a146106315780639cbd7da514610650578063a9059cbb14610663578063b21ed44e14610685578063c19d93fb14610698578063c4bebd69146106cf578063c8c2ed54146106e2578063cc577f38146106f5578063d5cef13314610717578063d73dd6231461072a578063dd62ed3e1461074c578063e43252d714610771578063f8b1fb1214610790575b6000600280600b5460a060020a900460ff16600581111561021257fe5b1461021c57600080fd5b600160a060020a03331660009081526005602052604090205460ff16151560011461024657600080fd5b6000341161025357600080fd5b6004361061026057600080fd5b600c54431061026e57600080fd5b610277346107af565b91506102833383610801565b600160a060020a0333166000908152600360205260409020546102ac903463ffffffff6108ff16565b600160a060020a0333166000908152600360205260409020555050005b34156102d457600080fd5b6102dc610915565b604051600160a060020a03909116815260200160405180910390f35b341561030357600080fd5b61030b610924565b604051901515815260200160405180910390f35b341561032a57600080fd5b61033261092d565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561036e578082015183820152602001610356565b50505050905090810190601f16801561039b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b457600080fd5b6103bc610964565b60405190815260200160405180910390f35b34156103d957600080fd5b61030b600160a060020a036004351660243561096a565b34156103fb57600080fd5b6103bc6004356107af565b341561041157600080fd5b6103bc6109d6565b341561042457600080fd5b6103bc6109dc565b341561043757600080fd5b61030b600160a060020a03600435811690602435166044356109e2565b341561045f57600080fd5b6103bc610a1d565b341561047257600080fd5b6103bc610a23565b341561048557600080fd5b61048d610a33565b60405160ff909116815260200160405180910390f35b34156104ae57600080fd5b6104b6610a38565b005b34156104c357600080fd5b6104b6600435602435610a80565b34156104dc57600080fd5b6104b6610b15565b34156104ef57600080fd5b6102dc610b5f565b341561050257600080fd5b6104b6600160a060020a0360043581169060243516610b6e565b341561052757600080fd5b6103bc610c6d565b341561053a57600080fd5b6104b6610c84565b341561054d57600080fd5b6102dc610cc4565b341561056057600080fd5b6103bc610cd3565b341561057357600080fd5b61030b600160a060020a0360043516602435610cd9565b341561059557600080fd5b6102dc610dd3565b34156105a857600080fd5b6103bc600160a060020a0360043516610de2565b34156105c757600080fd5b6102dc610e01565b34156105da57600080fd5b6103bc610e10565b34156105ed57600080fd5b6104b6610e21565b341561060057600080fd5b6104b6610e79565b341561061357600080fd5b6104b6600435610eca565b341561062957600080fd5b610332610f3b565b341561063c57600080fd5b61030b600160a060020a0360043516610f72565b341561065b57600080fd5b6104b6610f87565b341561066e57600080fd5b61030b600160a060020a0360043516602435610fe3565b341561069057600080fd5b6103bc611014565b34156106a357600080fd5b6106ab611019565b604051808260058111156106bb57fe5b60ff16815260200191505060405180910390f35b34156106da57600080fd5b6103bc611029565b34156106ed57600080fd5b6102dc61102f565b341561070057600080fd5b6104b6600160a060020a036004351660243561103e565b341561072257600080fd5b6104b66110ab565b341561073557600080fd5b61030b600160a060020a036004351660243561113d565b341561075757600080fd5b6103bc600160a060020a03600435811690602435166111e1565b341561077c57600080fd5b6104b6600160a060020a036004351661120c565b341561079b57600080fd5b6103bc600160a060020a036004351661128c565b60008060006107c9600d548561129e90919063ffffffff16565b91506107d3610e10565b90506107f96103e86107ed8482850163ffffffff61129e16565b9063ffffffff6112c216565b949350505050565b600454600090610817908363ffffffff6108ff16565b905061083b60646107ed6b033b2e3c9fd0803ce8000000603263ffffffff61129e16565b81111561084757600080fd5b600160a060020a038316600090815260016020526040902054610870908363ffffffff6108ff16565b600160a060020a0380851660009081526001602052604080822093909355600b54909116815220546108a8908363ffffffff6112d916565b600b8054600160a060020a0390811660009081526001602052604090819020939093556004849055905485821692911690600080516020611a848339815191529085905190815260200160405180910390a3505050565b60008282018381101561090e57fe5b9392505050565b600654600160a060020a031681565b601b5460ff1681565b60408051908101604052601281527f5172617669747920436f696e20546f6b656e0000000000000000000000000000602082015281565b600c5481565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b601c5481565b6000600480600b5460a060020a900460ff1660058111156109ff57fe5b14610a0957600080fd5b610a148585856112eb565b95945050505050565b600d5481565b6b033b2e3c9fd0803ce800000081565b601281565b600280600b5460a060020a900460ff166005811115610a5357fe5b14610a5d57600080fd5b600c544311610a6b57600080fd5b610a73611403565b610a7d6004611568565b50565b60065433600160a060020a03908116911614610a9b57600080fd5b6000600b5460a060020a900460ff166005811115610ab557fe5b1480610ad857506001600b5460a060020a900460ff166005811115610ad657fe5b145b1515610ae357600080fd5b60008211610af057600080fd5b43819010610afd57600080fd5b600c819055600d829055610b116001611568565b5050565b60065433600160a060020a03908116911614610b3057600080fd5b600580600b5460a060020a900460ff166005811115610b4b57fe5b14610b5557600080fd5b610a7d6003611568565b600754600160a060020a031681565b60095433600160a060020a03908116911614610b8957600080fd5b600160a060020a03821663a9059cbb82826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610be757600080fd5b6102c65a03f11515610bf857600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c4e57600080fd5b6102c65a03f11515610c5f57600080fd5b505050604051805150505050565b6000610c7e601c544203600e611608565b90505b90565b60065433600160a060020a03908116911614610c9f57600080fd5b600280600b5460a060020a900460ff166005811115610cba57fe5b14610a6b57600080fd5b600a54600160a060020a031681565b60045481565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610d3657600160a060020a033381166000908152600260209081526040808320938816835292905290812055610d6d565b610d46818463ffffffff6112d916565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600854600160a060020a031681565b600160a060020a0381166000908152600160205260409020545b919050565b600b54600160a060020a031681565b6000610c7e601c544203600e611656565b60065433600160a060020a03908116911614610e3c57600080fd5b600180600b5460a060020a900460ff166005811115610e5757fe5b14610e6157600080fd5b600c544310610e6f57600080fd5b610a7d6002611568565b60065433600160a060020a03908116911614610e9457600080fd5b600280600b5460a060020a900460ff166005811115610eaf57fe5b14610eb957600080fd5b610ec36005611568565b5042601d55565b60085433600160a060020a03908116911614610ee557600080fd5b600480600b5460a060020a900460ff166005811115610f0057fe5b14610f0a57600080fd5b600160a060020a03331682156108fc0283604051600060405180830381858888f193505050501515610b1157600080fd5b60408051908101604052600381527f51434f0000000000000000000000000000000000000000000000000000000000602082015281565b60056020526000908152604090205460ff1681565b60065433600160a060020a03908116911614610fa257600080fd5b600580600b5460a060020a900460ff166005811115610fbd57fe5b14610fc757600080fd5b610fd16002611568565b601d544203601c5401601c8190555050565b6000600480600b5460a060020a900460ff16600581111561100057fe5b1461100a57600080fd5b6107f984846116a5565b603281565b600b5460a060020a900460ff1681565b601d5481565b600954600160a060020a031681565b60095433600160a060020a0390811691161461105957600080fd5b6001600b5460a060020a900460ff16600581111561107357fe5b148061109657506002600b5460a060020a900460ff16600581111561109457fe5b145b15156110a157600080fd5b610b118282610801565b6000600380600b5460a060020a900460ff1660058111156110c857fe5b146110d257600080fd5b600160a060020a033316600090815260036020526040812054116110f557600080fd5b600160a060020a033316600081815260036020526040808220805492905590935083156108fc0290849051600060405180830381858888f193505050501515610b1157600080fd5b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611175908363ffffffff6108ff16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60075433600160a060020a0390811691161461122757600080fd5b600160a060020a03811660009081526005602052604090819020805460ff191660011790557faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5490829051600160a060020a03909116815260200160405180910390a150565b60036020526000908152604090205481565b60008282028315806112ba57508284828115156112b757fe5b04145b151561090e57fe5b60008082848115156112d057fe5b04949350505050565b6000828211156112e557fe5b50900390565b600080600160a060020a038416151561130357600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054611349908463ffffffff6112d916565b600160a060020a03808716600090815260016020526040808220939093559086168152205461137e908463ffffffff6108ff16565b600160a060020a0385166000908152600160205260409020556113a7818463ffffffff6112d916565b600160a060020a0380871660008181526002602090815260408083203386168452909152908190209390935590861691600080516020611a848339815191529086905190815260200160405180910390a3506001949350505050565b60008061142160326107ed606460045461129e90919063ffffffff16565b600081905561143e906064906107ed90601663ffffffff61129e16565b600a8054600160a060020a03908116600090815260016020526040908190208490559154600b549395508116921690600080516020611a848339815191529085905190815260200160405180910390a36114b5826114a96004546000546112d990919063ffffffff16565b9063ffffffff6112d916565b600b54600160a060020a031660008181526001602052604081205492935091600080516020611a84833981519152906114fa9086906114a9908763ffffffff6112d916565b60405190815260200160405180910390a3600b54600160a060020a0316600090815260016020819052604091829020839055601b805460ff191690911790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa08905160405180910390a15050565b600b547f3a779de46631dd65116ae538600f1bc3c338200c6aef638429b5de43301c28f79060a060020a900460ff1682604051808360058111156115a857fe5b60ff1681526020018260058111156115bc57fe5b60ff1681526020019250505060405180910390a1600b805482919074ff0000000000000000000000000000000000000000191660a060020a83600581111561160057fe5b021790555050565b60006006815b8181101561164e5760078401816006811061162557fe5b01548510156116465760078401816006811061163d57fe5b0154925061164e565b60010161160e565b505092915050565b6000600680825b8281101561168d5760078501816006811061167457fe5b01548610156116855780915061168d565b60010161165d565b84826007811061169957fe5b01549695505050505050565b6000600160a060020a03831615156116bc57600080fd5b600160a060020a0333166000908152600160205260409020546116e5908363ffffffff6112d916565b600160a060020a03338116600090815260016020526040808220939093559085168152205461171a908363ffffffff6108ff16565b600160a060020a038085166000818152600160205260409081902093909355913390911690600080516020611a848339815191529085905190815260200160405180910390a350600192915050565b60e0604051908101604090815261012c825260fa602083015260c8908201526096606082015260646080820152603260a0820152600060c08201526117b190829060076119d5565b5060c0604051908101604052806117cd6107e260096001611843565b81526020016117e16107e260096008611843565b81526020016117f56107e26009600f611843565b81526020016118096107e260096016611843565b815260200161181d6107e26009601d611843565b81526020016118316107e2600a6008611843565b9052610b119060078301906006611a13565b60008061184e611a40565b63ffffffff6301e1338061ffff6107b119890116021692909201916118746107b2611964565b6118818761ffff16611964565b601f835203620151800292909201916118998661197f565b156118aa57601d60208201526118b2565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8460ff168261ffff161015611947578061ffff600019840116600c811061192457fe5b602002015160ff16620151800262ffffff16830192508180600101925050611901565b50506000199190910160ff16620151800262ffffff160192915050565b60001901600061019082046064830460048404030192915050565b6000600461ffff83160661ffff161561199a57506000610dfc565b606461ffff83160661ffff16156119b357506001610dfc565b61019061ffff83160661ffff16156119cd57506000610dfc565b506001919050565b8260078101928215611a03579160200282015b82811115611a035782518255916020019190600101906119e8565b50611a0f929150611a69565b5090565b8260068101928215611a035791602002820182811115611a035782518255916020019190600101906119e8565b610180604051908101604052600c815b600081526000199091019060200181611a505790505090565b610c8191905b80821115611a0f5760008155600101611a6f5600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d11ff8b522b140874d01a0b04226c1959f98931994e09d5b6b53094913a8904600296060604052341561000f57600080fd5b6040516040806107568339810160405280805191906020018051915050600160a060020a038216151561004157600080fd5b600160a060020a038116151561005657600080fd5b60028054600160a060020a03938416600160a060020a031991821617909155600080549290931691161790556106c5806100916000396000f3006060604052600436106100535763ffffffff60e060020a6000350416630357371d811461005857806317df74f91461007c57806345d30a17146100a4578063b5c150d4146100b7578063f77c4791146100cd575b600080fd5b341561006357600080fd5b61007a600160a060020a03600435166024356100fc565b005b341561008757600080fd5b6100926004356101cd565b60405190815260200160405180910390f35b34156100af57600080fd5b610092610369565b34156100c257600080fd5b61009260043561036f565b34156100d857600080fd5b6100e0610446565b604051600160a060020a03909116815260200160405180910390f35b60005433600160a060020a0390811691161461011757600080fd5b6000811161012457600080fd5b61012d4261036f565b81111561013957600080fd5b600254600160a060020a031663a9059cbb838360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561019857600080fd5b6102c65a03f115156101a957600080fd5b505050604051805150506001546101c6908263ffffffff61045516565b6001555050565b60006101d7610648565b6101df610648565b600080610140604051908101604052806000815260200160148152602001601e81526020016028815260200160328152602001603c81526020016046815260200160508152602001605a815260200160648152509350610140604051908101604052806102516107e46004600161046b565b81526020016102656107e46007600161046b565b81526020016102796107e4600a600161046b565b815260200161028c6107e560018061046b565b81526020016102a06107e56004600161046b565b81526020016102b46107e56007600161046b565b81526020016102c86107e5600a600161046b565b81526020016102db6107e660018061046b565b81526020016102ef6107e66004600161046b565b81526020016000815250925060009150600090505b600a81101561034e578281600a811061031957fe5b602002015186108061033957508281600a811061033257fe5b6020020151155b156103465780915061034e565b600101610304565b8382600a811061035a57fe5b60200201519695505050505050565b60015481565b600254600090819081906103fb90600160a060020a03166370a0823130846040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103d257600080fd5b6102c65a03f115156103e357600080fd5b5050506040518051600154915063ffffffff61045516565b9150610427606461041b61040e876101cd565b859063ffffffff61058c16565b9063ffffffff6105b016565b905061043e600154826105c790919063ffffffff16565b949350505050565b600054600160a060020a031681565b60008282018381101561046457fe5b9392505050565b600080610476610670565b63ffffffff6301e1338061ffff6107b1198901160216929092019161049c6107b26105d9565b6104a98761ffff166105d9565b601f835203620151800292909201916104c1866105f2565b156104d257601d60208201526104da565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8460ff168261ffff16101561056f578061ffff600019840116600c811061054c57fe5b602002015160ff16620151800262ffffff16830192508180600101925050610529565b50506000199190910160ff16620151800262ffffff160192915050565b60008282028315806105a857508284828115156105a557fe5b04145b151561046457fe5b60008082848115156105be57fe5b04949350505050565b6000828211156105d357fe5b50900390565b600019016064810460048204036101908204015b919050565b6000600461ffff83160661ffff161561060d575060006105ed565b606461ffff83160661ffff1615610626575060016105ed565b61019061ffff83160661ffff1615610640575060006105ed565b506001919050565b610140604051908101604052600a815b60008152602001906001900390816106585790505090565b610180604051908101604052600c815b60008152600019909101906020018161068057905050905600a165627a7a72305820a64107b873852fa68f373aba8ece0a73b3566920de55da095f2759d81657cfc60029000000000000000000000000ff89c17b57cb419a3836db9aa03df1141f71210e00000000000000000000000042d8483f7b26ca1832edccbc89c5f6d3f6a9a95e0000000000000000000000006591c31af3026133d6a98991dcb2583f5d0f336c00000000000000000000000002ac4f727fca7ba22c896b858e109f6323bcb3e9000000000000000000000000edaad6c55337355bd4a939db1d705748f8d5d18400000000000000000000000076bccab7e540bafc3aa2a4cb6ca697f136b1e6ae

Deployed Bytecode

0x6060604052600436106101f55763ffffffff60e060020a60003504166304b2bf9981146102c957806305d2035b146102f857806306fdde031461031f578063083c6323146103a9578063095ea7b3146103ce57806309f3ad26146103f057806318160ddd146104065780632344acdf1461041957806323b872dd1461042c57806328250d43146104545780632ab4d05214610467578063313ce5671461047a57806332b3c323146104a357806334bb3ee1146104b857806335a063b4146104d157806341f1d4dd146104e45780634707d000146104f757806347f8b8631461051c5780634f2484091461052f57806359927044146105425780635ed9ebfc1461055557806366188463146105685780636aa9c82b1461058a57806370a082311461059d57806375172a8b146105bc5780637d363720146105cf5780637fa8c158146105e25780638456cb59146105f55780638f97e3a01461060857806395d89b411461061e5780639b19251a146106315780639cbd7da514610650578063a9059cbb14610663578063b21ed44e14610685578063c19d93fb14610698578063c4bebd69146106cf578063c8c2ed54146106e2578063cc577f38146106f5578063d5cef13314610717578063d73dd6231461072a578063dd62ed3e1461074c578063e43252d714610771578063f8b1fb1214610790575b6000600280600b5460a060020a900460ff16600581111561021257fe5b1461021c57600080fd5b600160a060020a03331660009081526005602052604090205460ff16151560011461024657600080fd5b6000341161025357600080fd5b6004361061026057600080fd5b600c54431061026e57600080fd5b610277346107af565b91506102833383610801565b600160a060020a0333166000908152600360205260409020546102ac903463ffffffff6108ff16565b600160a060020a0333166000908152600360205260409020555050005b34156102d457600080fd5b6102dc610915565b604051600160a060020a03909116815260200160405180910390f35b341561030357600080fd5b61030b610924565b604051901515815260200160405180910390f35b341561032a57600080fd5b61033261092d565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561036e578082015183820152602001610356565b50505050905090810190601f16801561039b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103b457600080fd5b6103bc610964565b60405190815260200160405180910390f35b34156103d957600080fd5b61030b600160a060020a036004351660243561096a565b34156103fb57600080fd5b6103bc6004356107af565b341561041157600080fd5b6103bc6109d6565b341561042457600080fd5b6103bc6109dc565b341561043757600080fd5b61030b600160a060020a03600435811690602435166044356109e2565b341561045f57600080fd5b6103bc610a1d565b341561047257600080fd5b6103bc610a23565b341561048557600080fd5b61048d610a33565b60405160ff909116815260200160405180910390f35b34156104ae57600080fd5b6104b6610a38565b005b34156104c357600080fd5b6104b6600435602435610a80565b34156104dc57600080fd5b6104b6610b15565b34156104ef57600080fd5b6102dc610b5f565b341561050257600080fd5b6104b6600160a060020a0360043581169060243516610b6e565b341561052757600080fd5b6103bc610c6d565b341561053a57600080fd5b6104b6610c84565b341561054d57600080fd5b6102dc610cc4565b341561056057600080fd5b6103bc610cd3565b341561057357600080fd5b61030b600160a060020a0360043516602435610cd9565b341561059557600080fd5b6102dc610dd3565b34156105a857600080fd5b6103bc600160a060020a0360043516610de2565b34156105c757600080fd5b6102dc610e01565b34156105da57600080fd5b6103bc610e10565b34156105ed57600080fd5b6104b6610e21565b341561060057600080fd5b6104b6610e79565b341561061357600080fd5b6104b6600435610eca565b341561062957600080fd5b610332610f3b565b341561063c57600080fd5b61030b600160a060020a0360043516610f72565b341561065b57600080fd5b6104b6610f87565b341561066e57600080fd5b61030b600160a060020a0360043516602435610fe3565b341561069057600080fd5b6103bc611014565b34156106a357600080fd5b6106ab611019565b604051808260058111156106bb57fe5b60ff16815260200191505060405180910390f35b34156106da57600080fd5b6103bc611029565b34156106ed57600080fd5b6102dc61102f565b341561070057600080fd5b6104b6600160a060020a036004351660243561103e565b341561072257600080fd5b6104b66110ab565b341561073557600080fd5b61030b600160a060020a036004351660243561113d565b341561075757600080fd5b6103bc600160a060020a03600435811690602435166111e1565b341561077c57600080fd5b6104b6600160a060020a036004351661120c565b341561079b57600080fd5b6103bc600160a060020a036004351661128c565b60008060006107c9600d548561129e90919063ffffffff16565b91506107d3610e10565b90506107f96103e86107ed8482850163ffffffff61129e16565b9063ffffffff6112c216565b949350505050565b600454600090610817908363ffffffff6108ff16565b905061083b60646107ed6b033b2e3c9fd0803ce8000000603263ffffffff61129e16565b81111561084757600080fd5b600160a060020a038316600090815260016020526040902054610870908363ffffffff6108ff16565b600160a060020a0380851660009081526001602052604080822093909355600b54909116815220546108a8908363ffffffff6112d916565b600b8054600160a060020a0390811660009081526001602052604090819020939093556004849055905485821692911690600080516020611a848339815191529085905190815260200160405180910390a3505050565b60008282018381101561090e57fe5b9392505050565b600654600160a060020a031681565b601b5460ff1681565b60408051908101604052601281527f5172617669747920436f696e20546f6b656e0000000000000000000000000000602082015281565b600c5481565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60005481565b601c5481565b6000600480600b5460a060020a900460ff1660058111156109ff57fe5b14610a0957600080fd5b610a148585856112eb565b95945050505050565b600d5481565b6b033b2e3c9fd0803ce800000081565b601281565b600280600b5460a060020a900460ff166005811115610a5357fe5b14610a5d57600080fd5b600c544311610a6b57600080fd5b610a73611403565b610a7d6004611568565b50565b60065433600160a060020a03908116911614610a9b57600080fd5b6000600b5460a060020a900460ff166005811115610ab557fe5b1480610ad857506001600b5460a060020a900460ff166005811115610ad657fe5b145b1515610ae357600080fd5b60008211610af057600080fd5b43819010610afd57600080fd5b600c819055600d829055610b116001611568565b5050565b60065433600160a060020a03908116911614610b3057600080fd5b600580600b5460a060020a900460ff166005811115610b4b57fe5b14610b5557600080fd5b610a7d6003611568565b600754600160a060020a031681565b60095433600160a060020a03908116911614610b8957600080fd5b600160a060020a03821663a9059cbb82826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610be757600080fd5b6102c65a03f11515610bf857600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c4e57600080fd5b6102c65a03f11515610c5f57600080fd5b505050604051805150505050565b6000610c7e601c544203600e611608565b90505b90565b60065433600160a060020a03908116911614610c9f57600080fd5b600280600b5460a060020a900460ff166005811115610cba57fe5b14610a6b57600080fd5b600a54600160a060020a031681565b60045481565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115610d3657600160a060020a033381166000908152600260209081526040808320938816835292905290812055610d6d565b610d46818463ffffffff6112d916565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a35060019392505050565b600854600160a060020a031681565b600160a060020a0381166000908152600160205260409020545b919050565b600b54600160a060020a031681565b6000610c7e601c544203600e611656565b60065433600160a060020a03908116911614610e3c57600080fd5b600180600b5460a060020a900460ff166005811115610e5757fe5b14610e6157600080fd5b600c544310610e6f57600080fd5b610a7d6002611568565b60065433600160a060020a03908116911614610e9457600080fd5b600280600b5460a060020a900460ff166005811115610eaf57fe5b14610eb957600080fd5b610ec36005611568565b5042601d55565b60085433600160a060020a03908116911614610ee557600080fd5b600480600b5460a060020a900460ff166005811115610f0057fe5b14610f0a57600080fd5b600160a060020a03331682156108fc0283604051600060405180830381858888f193505050501515610b1157600080fd5b60408051908101604052600381527f51434f0000000000000000000000000000000000000000000000000000000000602082015281565b60056020526000908152604090205460ff1681565b60065433600160a060020a03908116911614610fa257600080fd5b600580600b5460a060020a900460ff166005811115610fbd57fe5b14610fc757600080fd5b610fd16002611568565b601d544203601c5401601c8190555050565b6000600480600b5460a060020a900460ff16600581111561100057fe5b1461100a57600080fd5b6107f984846116a5565b603281565b600b5460a060020a900460ff1681565b601d5481565b600954600160a060020a031681565b60095433600160a060020a0390811691161461105957600080fd5b6001600b5460a060020a900460ff16600581111561107357fe5b148061109657506002600b5460a060020a900460ff16600581111561109457fe5b145b15156110a157600080fd5b610b118282610801565b6000600380600b5460a060020a900460ff1660058111156110c857fe5b146110d257600080fd5b600160a060020a033316600090815260036020526040812054116110f557600080fd5b600160a060020a033316600081815260036020526040808220805492905590935083156108fc0290849051600060405180830381858888f193505050501515610b1157600080fd5b600160a060020a033381166000908152600260209081526040808320938616835292905290812054611175908363ffffffff6108ff16565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a350600192915050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60075433600160a060020a0390811691161461122757600080fd5b600160a060020a03811660009081526005602052604090819020805460ff191660011790557faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5490829051600160a060020a03909116815260200160405180910390a150565b60036020526000908152604090205481565b60008282028315806112ba57508284828115156112b757fe5b04145b151561090e57fe5b60008082848115156112d057fe5b04949350505050565b6000828211156112e557fe5b50900390565b600080600160a060020a038416151561130357600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054611349908463ffffffff6112d916565b600160a060020a03808716600090815260016020526040808220939093559086168152205461137e908463ffffffff6108ff16565b600160a060020a0385166000908152600160205260409020556113a7818463ffffffff6112d916565b600160a060020a0380871660008181526002602090815260408083203386168452909152908190209390935590861691600080516020611a848339815191529086905190815260200160405180910390a3506001949350505050565b60008061142160326107ed606460045461129e90919063ffffffff16565b600081905561143e906064906107ed90601663ffffffff61129e16565b600a8054600160a060020a03908116600090815260016020526040908190208490559154600b549395508116921690600080516020611a848339815191529085905190815260200160405180910390a36114b5826114a96004546000546112d990919063ffffffff16565b9063ffffffff6112d916565b600b54600160a060020a031660008181526001602052604081205492935091600080516020611a84833981519152906114fa9086906114a9908763ffffffff6112d916565b60405190815260200160405180910390a3600b54600160a060020a0316600090815260016020819052604091829020839055601b805460ff191690911790557fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa08905160405180910390a15050565b600b547f3a779de46631dd65116ae538600f1bc3c338200c6aef638429b5de43301c28f79060a060020a900460ff1682604051808360058111156115a857fe5b60ff1681526020018260058111156115bc57fe5b60ff1681526020019250505060405180910390a1600b805482919074ff0000000000000000000000000000000000000000191660a060020a83600581111561160057fe5b021790555050565b60006006815b8181101561164e5760078401816006811061162557fe5b01548510156116465760078401816006811061163d57fe5b0154925061164e565b60010161160e565b505092915050565b6000600680825b8281101561168d5760078501816006811061167457fe5b01548610156116855780915061168d565b60010161165d565b84826007811061169957fe5b01549695505050505050565b6000600160a060020a03831615156116bc57600080fd5b600160a060020a0333166000908152600160205260409020546116e5908363ffffffff6112d916565b600160a060020a03338116600090815260016020526040808220939093559085168152205461171a908363ffffffff6108ff16565b600160a060020a038085166000818152600160205260409081902093909355913390911690600080516020611a848339815191529085905190815260200160405180910390a350600192915050565b60e0604051908101604090815261012c825260fa602083015260c8908201526096606082015260646080820152603260a0820152600060c08201526117b190829060076119d5565b5060c0604051908101604052806117cd6107e260096001611843565b81526020016117e16107e260096008611843565b81526020016117f56107e26009600f611843565b81526020016118096107e260096016611843565b815260200161181d6107e26009601d611843565b81526020016118316107e2600a6008611843565b9052610b119060078301906006611a13565b60008061184e611a40565b63ffffffff6301e1338061ffff6107b119890116021692909201916118746107b2611964565b6118818761ffff16611964565b601f835203620151800292909201916118998661197f565b156118aa57601d60208201526118b2565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8460ff168261ffff161015611947578061ffff600019840116600c811061192457fe5b602002015160ff16620151800262ffffff16830192508180600101925050611901565b50506000199190910160ff16620151800262ffffff160192915050565b60001901600061019082046064830460048404030192915050565b6000600461ffff83160661ffff161561199a57506000610dfc565b606461ffff83160661ffff16156119b357506001610dfc565b61019061ffff83160661ffff16156119cd57506000610dfc565b506001919050565b8260078101928215611a03579160200282015b82811115611a035782518255916020019190600101906119e8565b50611a0f929150611a69565b5090565b8260068101928215611a035791602002820182811115611a035782518255916020019190600101906119e8565b610180604051908101604052600c815b600081526000199091019060200181611a505790505090565b610c8191905b80821115611a0f5760008155600101611a6f5600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820d11ff8b522b140874d01a0b04226c1959f98931994e09d5b6b53094913a890460029

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

000000000000000000000000ff89c17b57cb419a3836db9aa03df1141f71210e00000000000000000000000042d8483f7b26ca1832edccbc89c5f6d3f6a9a95e0000000000000000000000006591c31af3026133d6a98991dcb2583f5d0f336c00000000000000000000000002ac4f727fca7ba22c896b858e109f6323bcb3e9000000000000000000000000edaad6c55337355bd4a939db1d705748f8d5d18400000000000000000000000076bccab7e540bafc3aa2a4cb6ca697f136b1e6ae

-----Decoded View---------------
Arg [0] : _stateControl (address): 0xff89C17B57Cb419a3836Db9aa03df1141f71210e
Arg [1] : _whitelistControl (address): 0x42D8483f7B26Ca1832eDcCbc89C5F6d3f6A9a95E
Arg [2] : _withdrawControl (address): 0x6591C31Af3026133D6a98991DcB2583f5D0F336c
Arg [3] : _tokenAssignmentControl (address): 0x02aC4f727FcA7bA22C896B858e109F6323BcB3E9
Arg [4] : _teamControl (address): 0xEDAAD6C55337355Bd4a939db1D705748F8d5D184
Arg [5] : _reserves (address): 0x76BCCAb7E540BAFC3aa2A4Cb6ca697F136b1e6AE

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000ff89c17b57cb419a3836db9aa03df1141f71210e
Arg [1] : 00000000000000000000000042d8483f7b26ca1832edccbc89c5f6d3f6a9a95e
Arg [2] : 0000000000000000000000006591c31af3026133d6a98991dcb2583f5d0f336c
Arg [3] : 00000000000000000000000002ac4f727fca7ba22c896b858e109f6323bcb3e9
Arg [4] : 000000000000000000000000edaad6c55337355bd4a939db1d705748f8d5d184
Arg [5] : 00000000000000000000000076bccab7e540bafc3aa2a4cb6ca697f136b1e6ae


Swarm Source

bzzr://a64107b873852fa68f373aba8ece0a73b3566920de55da095f2759d81657cfc6

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.