Sponsored Link:   SHIFT.cash - smart-contract based car title lending platform, 30 billion market, 35+ employees. Join NOW.
Contract Overview | CopytrackTokenSale
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 31968 txns
Token Tracker 0xf44745fbd41f6a1ba151df190db0564c5fcc4410
Misc  
   
Address Watch Add To Watch List
Contract Creator 0xaab326fd8541f11c861938b2e116d35276c01314at txn 0xef5c443b5844de7a60766f5121fbd938e33c50ecf3f755e27d591b3138504bb5
Token Tracker
  Latest 25 txns from a total Of 31968 transactions View All

TxHash Age From To Value [TxFee]
0xf92e2636d690c727dbaecafd124b239cb68fdb80c98ca74b1447615cf9d881961 day 2 hrs ago0xefd53457d18c9eab5fc4cc041cc7ae10bfe9ca72  IN   CopytrackTokenSale0.04628487 Ether0.00042794
0xb9a88e96e482b70e4f8fdba644b15026da6fe911674dc6a70c65d8ed701b8e2c2 days 18 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.08 Ether0.00128382
0x762117360aa258043b20cf76ec401a0d2be53531025e5878142bea81bc70a5d02 days 18 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.1 Ether0.00128382
0x1673d055aa3e1e8a4af726d3993758cb85e400804f1f392e8ad5830e4d1332b43 days 45 mins ago0xcd0b1f4b75d0649b23ff9ea9e3068afe9efc28af  IN   CopytrackTokenSale0.15 Ether0.00128382
0x53297b8b0c00313fa867b85cd80b827336ce98dd397a2a28772f296170c38f414 days 7 hrs ago0xe33d7ac77746b6065d2d5edb148ae09874644bd0  IN   CopytrackTokenSale0.1 Ether0.00128382
0xef99c32fa417937890615c86564c4533ca19688fa608467ccade99965516a0a65 days 19 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0x1e13d77ff28f254f2284b0d2ddb34f473d2c9ef4296b08b0eef5da7d20568b145 days 19 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0x49e1b14c9915f1761acb3ce9d42c2c4e1156ba7ce98adaf273aa687720c1d6ad5 days 19 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0x220ab216fd01b5378d910dc4f80a9211fb7edb1e52b8afdb0a0303a10e82915e5 days 19 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0xbae1f52ba64890203d3249f5987a1c310399c42c5ba57aad98a32055e5bf3f015 days 19 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.00128382
0xd7f7c62894009979ed58dc6b80b472bc92ad6848741f0c0a25e5539ade80d6466 days 16 hrs ago0xd6184e9c903e09516b1f2eadbfb33b809608e747  IN   CopytrackTokenSale0.1 Ether0.001305217
0xbcd9cf2ba372f59e1d0352025b29c0c222121d41e51d7d3716e7a10554924f5e7 days 6 hrs ago0xaa56ad0c576f53ae400748f718cd320f255621a6  IN   CopytrackTokenSale0.13514 Ether0.001112644
0xc177f0ae915209265e3645fc767c4aae3c7a9222dfbce6fccc3b3972d977f6687 days 15 hrs ago0xd6184e9c903e09516b1f2eadbfb33b809608e747  IN   CopytrackTokenSale0.11 Ether0.00128382
0x9c8b147425ef01fe20cbf655dd5aa4ec23a860ab5f69e0b6676a335d139bf5867 days 15 hrs ago0xd6184e9c903e09516b1f2eadbfb33b809608e747  IN   CopytrackTokenSale0.1 Ether0.00128382
0xa1faddebd4291e375f8ff374083edc25593cf162dfe00966e4ee7447e8a1b1f27 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale0.9 Ether0.00128382
0xac7ef721571493e8954484de1f88d583d6a6215fe8a3bc47dde27e93b20da9eb7 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale1 Ether0.00128382
0xc5a59aa08bc9e028b922f2b0e10153fc20384cdf7b41b16476656ba4281f07137 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale1 Ether0.00128382
0x292f13604ccaef8cd1961b48b77a8310287e1560f18dd5a62ba7300ba4fce5d47 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale1 Ether0.00128382
0x846485945f8478bc1c52be8f3b60d2781871908e034cc07a6948ac8d73677f827 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale1 Ether0.000042794
0xaa3f4aab8f93f5ade5a9f689b221820dd1d941b428bb571307064b73858411657 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale1 Ether0.00128382
0x6cb054d7abc567fd0a78837e81520e277ba96ae359c2a0f59782d271c15c612d7 days 22 hrs ago0x0694851b46840e7b2741d1c2b417546c853b309f  IN   CopytrackTokenSale1 Ether0.00128382
0x9ffc87c5b09605252ee35c94791989b12703bd2cf16c79431df49d2a45007b758 days 7 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0xa0169e8150727db92d4f52cdf662a0de2c029bf12f2e222beada7c329cae28e58 days 7 hrs ago0x618f2c628a8bc43a4267665b46c08c872f89cfde  IN   CopytrackTokenSale0.07 Ether0.00128382
0x1a89fcce8bbf4af979c2fb0cfb9f5823f9927b46ec699647869fe472ce7922f48 days 8 hrs ago0xb8506ef0a6c574b11e1ea9b7218ce990d930f459  IN   CopytrackTokenSale1 Ether0.001412202
0x43a91c37333e30f02caded81f61f413ff83322bac606ed16f73974535775e3948 days 21 hrs ago0xf440a7fd5cf26d88b7ddf717776daea722370378  IN   CopytrackTokenSale0.1 Ether0.000877277
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x8081fe9cc18c3b43ea5d74ed88f19de5b4439d32d8371d93e61c8e4871a3420d506179713 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b71 Ether
0x8de19f2f35ee0407043ff3522092952c0f4ea92cd25243d9f3d3588e390d6b94506179713 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b71 Ether
0x19a87abee3c9814b2cbdda8e9831c7be7d57ca731f7dc29332ba46cd348706ac506179313 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.8951060665 Ether
0x374a570cd2d3c782b5d9f12953796d7b5f852f35947ea99620a39eb4f44ba33a506179313 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b79.9 Ether
0xff605f58c91e18adecb07b57a736c1cd218de412debd79282dc334f0e7149348506178413 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x600acf9527209ce4ed0d65aa05b4d42f847d310a129ad0f077e7a6e3f8a0729e506177613 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b72 Ether
0x7e9cdae1e0cbc23fc95d46269c27cc49cd3bb9e9f61c7e0de6a16ae223cfd710506177213 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.27 Ether
0xccb363c0a86f7aebb2cce597d2ca95fd9006f4189a53ab242949742df549dc9d506177113 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.3 Ether
0xdb4e6f7b9fd29a74df9c299ce4eaad4f75e97f3757e27007e4124da042a7a5f5506177113 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x2207d5d8b0ad6cfe7059c47ea3df4c32a3c2f75eaf201d5379519a86a57f495c506177113 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x44ffc59c8934540d8ce1e6b797310419cbd857868aa9447b0a5fed289364beab506177013 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.995 Ether
0xce289c160833cc5490c9b51ed4d10b48f7f090fe711f9c036a706b6919a6e836506177013 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x650a1930dfbe2584cb11c690542de29e34fb145404b26bf8d43837360b7a976f506176713 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.491 Ether
0xb3b7b87ba3b802dbc5836c0dc59a1a503d5ea4e02ec69d2b69b6483af2c52194506176713 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x740b2f357667260ef01ca3249545828b1ca84bf70747f64a2aafd4ad0db1aa50506176613 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.5 Ether
0x2480bde485503d24cdb52d414093f7b42679746621a9a1ce3ac6fa9882184fba506176513 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0x6b1f45fa66c9a184aff46e47950f79039f3e5163a6d6614030c2b0f5a1f5a1aa506176413 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b72 Ether
0xde9ddb1990030adb76d403bdcfd087b3dadcbcea9181aaa2bb34d6e24b417465506175713 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.57713872 Ether
0x67a0cb1e2a1ed548a3d4cb5fe3c7952278488c20c91adbb94fe27a632dae539b506175613 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b71.68 Ether
0x79153fa00c5944bbbbd67c1331577b8bb4db78ffbbdd48941c591008529737de506175513 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.1 Ether
0xda5ab806d9992b1dce8c4cb91fe688bbc2038b53a214e61bed108e58a8fe913f506175413 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.5 Ether
0xc0ec687ae061f1711b2f83078d40180c8a1b195c0c0d8f00876ea54add50d49d506175213 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.41 Ether
0x9a9afb28cb04b18ff88d53e75d65a23e5b400d3dd82f134b511488bb3ebdc324506175113 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.14958 Ether
0x2bfa29da4d4967c7901dd4ee901801cb3edb1f39e357ab363b2ff1428b388081506175013 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b70.5563278 Ether
0xdee2b97ff439677e125eb610ad1dace13d1f88d1c1e9b401b099c4c4a912e396506174813 days 18 hrs ago0xf04436b2edaa1b777045e1eefc6dba8bd2aebab80x9df172fc167a8a567c208fc14e3435eb8043e2b73.036 Ether
[ Download CSV Export  ] 
Contract Source Code Verified
Contract Name: TokenSale
Compiler Version: v0.4.18+commit.9cf6e910
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity ^0.4.18;

/**
 * @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 view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

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

  function div(uint256 a, uint256 b) internal pure 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 pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

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

/**
 * @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));
    require(_value <= balances[msg.sender]);

    // 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 view returns (uint256 balance) {
    return balances[_owner];
  }

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view 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);
}

/**
 * @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)) internal 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));
    require(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].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 view returns (uint256) {
    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) public returns (bool) {
    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) public returns (bool) {
    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;
  }

}

//
// CPYToken is a standard ERC20 token with additional functionality:
// - tokenSaleContract receives the whole balance for distribution
// - Tokens are only transferable by the tokenSaleContract until finalization
// - Token holders can burn their tokens after finalization
//
contract Token is StandardToken {

    string  public constant name   = "COPYTRACK Token";
    string  public constant symbol = "CPY";

    uint8 public constant   decimals = 18;

    uint256 constant EXA       = 10 ** 18;
    uint256 public totalSupply = 100 * 10 ** 6 * EXA;

    bool public finalized = false;

    address public tokenSaleContract;

    //
    // EVENTS
    //
    event Finalized();

    event Burnt(address indexed _from, uint256 _amount);


    // Initialize the token with the tokenSaleContract and transfer the whole balance to it
    function Token(address _tokenSaleContract)
        public
    {
        // Make sure address is set
        require(_tokenSaleContract != 0);

        balances[_tokenSaleContract] = totalSupply;

        tokenSaleContract = _tokenSaleContract;
    }


    // Implementation of the standard transfer method that takes the finalize flag into account
    function transfer(address _to, uint256 _value)
        public
        returns (bool success)
    {
        checkTransferAllowed(msg.sender);

        return super.transfer(_to, _value);
    }


    // Implementation of the standard transferFrom method that takes into account the finalize flag
    function transferFrom(address _from, address _to, uint256 _value)
        public
        returns (bool success)
    {
        checkTransferAllowed(msg.sender);

        return super.transferFrom(_from, _to, _value);
    }


    function checkTransferAllowed(address _sender)
        private
        view
    {
        if (finalized) {
            // Every token holder should be allowed to transfer tokens once token was finalized
            return;
        }

        // Only allow tokenSaleContract to transfer tokens before finalization
        require(_sender == tokenSaleContract);
    }


    // Finalize method marks the point where token transfers are finally allowed for everybody
    function finalize()
        external
        returns (bool success)
    {
        require(!finalized);
        require(msg.sender == tokenSaleContract);

        finalized = true;

        Finalized();

        return true;
    }


    // Implement a burn function to permit msg.sender to reduce its balance which also reduces totalSupply
    function burn(uint256 _value)
        public
        returns (bool success)
    {
        require(finalized);
        require(_value <= balances[msg.sender]);

        balances[msg.sender] = balances[msg.sender].sub(_value);
        totalSupply = totalSupply.sub(_value);

        Burnt(msg.sender, _value);

        return true;
    }
}

contract TokenSaleConfig  {
    uint public constant EXA = 10 ** 18;

    uint256 public constant PUBLIC_START_TIME         = 1515542400; //Wed, 10 Jan 2018 00:00:00 +0000
    uint256 public constant END_TIME                  = 1518220800; //Sat, 10 Feb 2018 00:00:00 +0000
    uint256 public constant CONTRIBUTION_MIN          = 0.1 ether;
    uint256 public constant CONTRIBUTION_MAX          = 2500.0 ether;

    uint256 public constant COMPANY_ALLOCATION        = 40 * 10 ** 6 * EXA; //40 million;

    Tranche[4] public tranches;

    struct Tranche {
        // How long this tranche will be active
        uint untilToken;

        // How many tokens per ether you will get while this tranche is active
        uint tokensPerEther;
    }

    function TokenSaleConfig()
        public
    {
        tranches[0] = Tranche({untilToken : 5000000 * EXA, tokensPerEther : 1554});
        tranches[1] = Tranche({untilToken : 10000000 * EXA, tokensPerEther : 1178});
        tranches[2] = Tranche({untilToken : 20000000 * EXA, tokensPerEther : 1000});
        tranches[3] = Tranche({untilToken : 60000000, tokensPerEther : 740});
    }
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


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


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

contract TokenSale is TokenSaleConfig, Ownable {
    using SafeMath for uint;

    Token  public  tokenContract;

    // We keep track of whether the sale has been finalized, at which point
    // no additional contributions will be permitted.
    bool public finalized = false;

    // lookup for max wei amount per user allowed
    mapping (address => uint256) public contributors;

    // the total amount of wei raised
    uint256 public totalWeiRaised = 0;

    // the total amount of token raised
    uint256 public totalTokenSold = 0;

    // address where funds are collected
    address public fundingWalletAddress;

    // address which manages the whitelist (KYC)
    mapping (address => bool) public whitelistOperators;

    // lookup addresses for whitelist
    mapping (address => bool) public whitelist;


    // early bird investments
    address[] public earlyBirds;

    mapping (address => uint256) public earlyBirdInvestments;


    //
    // MODIFIERS
    //

    // Throws if purchase would exceed the min max contribution.
    // @param _contribute address
    // @param _weiAmount the amount intended to spend
    modifier withinContributionLimits(address _contributorAddress, uint256 _weiAmount) {
        uint256 totalContributionAmount = contributors[_contributorAddress].add(_weiAmount);
        require(_weiAmount >= CONTRIBUTION_MIN);
        require(totalContributionAmount <= CONTRIBUTION_MAX);
        _;
    }

    // Throws if called by any account not on the whitelist.
    // @param _address Address which should execute the function
    modifier onlyWhitelisted(address _address) {
        require(whitelist[_address] == true);
        _;
    }

    // Throws if called by any account not on the whitelistOperators list
    modifier onlyWhitelistOperator()
    {
        require(whitelistOperators[msg.sender] == true);
        _;
    }

    //Throws if sale is finalized or token sale end time has been reached
    modifier onlyDuringSale() {
        require(finalized == false);
        require(currentTime() <= END_TIME);
        _;
    }

    //Throws if sale is finalized
    modifier onlyAfterFinalized() {
        require(finalized);
        _;
    }



    //
    // EVENTS
    //
    event LogWhitelistUpdated(address indexed _account);

    event LogTokensPurchased(address indexed _account, uint256 _cost, uint256 _tokens, uint256 _totalTokenSold);

    event UnsoldTokensBurnt(uint256 _amount);

    event Finalized();

    // Initialize a new TokenSale contract
    // @param _fundingWalletAddress Address which all ether will be forwarded to
    function TokenSale(address _fundingWalletAddress)
        public
    {
        //make sure _fundingWalletAddress is set
        require(_fundingWalletAddress != 0);

        fundingWalletAddress = _fundingWalletAddress;
    }

    // Connect a token to the tokenSale
    // @param _fundingWalletAddress Address which all ether will be forwarded to
    function connectToken(Token _tokenContract)
        external
        onlyOwner
    {
        require(totalTokenSold == 0);
        require(tokenContract == address(0));

        //make sure token is untouched
        require(_tokenContract.balanceOf(address(this)) == _tokenContract.totalSupply());

        tokenContract = _tokenContract;

        // sent tokens to company vault
        tokenContract.transfer(fundingWalletAddress, COMPANY_ALLOCATION);
        processEarlyBirds();
    }

    function()
        external
        payable
    {
        uint256 cost = buyTokens(msg.sender, msg.value);

        // forward contribution to the fundingWalletAddress
        fundingWalletAddress.transfer(cost);
    }

    // execution of the actual token purchase
    function buyTokens(address contributorAddress, uint256 weiAmount)
        onlyDuringSale
        onlyWhitelisted(contributorAddress)
        withinContributionLimits(contributorAddress, weiAmount)
        private
    returns (uint256 costs)
    {
        assert(tokenContract != address(0));

        uint256 tokensLeft = getTokensLeft();

        // make sure we still have tokens left for sale
        require(tokensLeft > 0);

        uint256 tokenAmount = calculateTokenAmount(weiAmount);
        uint256 cost = weiAmount;
        uint256 refund = 0;

        // we sell till we dont have anything left
        if (tokenAmount > tokensLeft) {
            tokenAmount = tokensLeft;

            // calculate actual cost for partial amount of tokens.
            cost = tokenAmount / getCurrentTokensPerEther();

            // calculate refund for contributor.
            refund = weiAmount.sub(cost);
        }

        // transfer the tokens to the contributor address
        tokenContract.transfer(contributorAddress, tokenAmount);

        // keep track of the amount bought by the contributor
        contributors[contributorAddress] = contributors[contributorAddress].add(cost);


        //if we got a refund process it now
        if (refund > 0) {
            // transfer back everything that exceeded the amount of tokens left
            contributorAddress.transfer(refund);
        }

        // increase stats
        totalWeiRaised += cost;
        totalTokenSold += tokenAmount;

        LogTokensPurchased(contributorAddress, cost, tokenAmount, totalTokenSold);

        // If all tokens available for sale have been sold out, finalize the sale automatically.
        if (tokensLeft.sub(tokenAmount) == 0) {
            finalizeInternal();
        }


        //return the actual cost of the sale
        return cost;
    }

    // ask the connected token how many tokens we have left 
    function getTokensLeft()
        public
        view
    returns (uint256 tokensLeft)
    {
        return tokenContract.balanceOf(this);
    }

    // calculate the current tokens per ether
    function getCurrentTokensPerEther()
        public
        view
    returns (uint256 tokensPerEther)
    {
        uint i;
        uint defaultTokensPerEther = tranches[tranches.length - 1].tokensPerEther;

        if (currentTime() >= PUBLIC_START_TIME) {
            return defaultTokensPerEther;
        }

        for (i = 0; i < tranches.length; i++) {
            if (totalTokenSold >= tranches[i].untilToken) {
                continue;
            }

            //sell until the contract has nor more tokens
            return tranches[i].tokensPerEther;
        }

        return defaultTokensPerEther;
    }

    // calculate the token amount for a give weiAmount
    function calculateTokenAmount(uint256 weiAmount)
        public
        view
    returns (uint256 tokens)
    {
        return weiAmount * getCurrentTokensPerEther();
    }

    //
    // WHITELIST
    //

    // add a new whitelistOperator
    function addWhitelistOperator(address _address)
        public
        onlyOwner
    {
        whitelistOperators[_address] = true;
    }

    // remove a whitelistOperator
    function removeWhitelistOperator(address _address)
        public
        onlyOwner
    {
        require(whitelistOperators[_address]);

        delete whitelistOperators[_address];
    }


    // Allows whitelistOperators to add an account to the whitelist.
    // Only those accounts will be allowed to contribute during the sale.
    function addToWhitelist(address _address)
        public
        onlyWhitelistOperator
    {
        require(_address != address(0));

        whitelist[_address] = true;
        LogWhitelistUpdated(_address);
    }

    // Allows whitelistOperators to remove an account from the whitelist.
    function removeFromWhitelist(address _address)
        public
        onlyWhitelistOperator
    {
        require(_address != address(0));

        delete whitelist[_address];
    }

    //returns the current time, needed for tests
    function currentTime()
        public
        view
        returns (uint256 _currentTime)
    {
        return now;
    }


    // Allows the owner to finalize the sale.
    function finalize()
        external
        onlyOwner
        returns (bool)
    {
        //allow only after the defined end_time
        require(currentTime() > END_TIME);

        return finalizeInternal();
    }


    // The internal one will be called if tokens are sold out or
    // the end time for the sale is reached, in addition to being called
    // from the public version of finalize().
    function finalizeInternal() private returns (bool) {
        require(!finalized);

        finalized = true;

        Finalized();

        //also finalize the token contract
        tokenContract.finalize();

        return true;
    }

    // register an early bird investment
    function addEarlyBird(address _address, uint256 weiAmount)
        onlyOwner
        withinContributionLimits(_address, weiAmount)
        external
    {
        // only allowed as long as we dont have a connected token
        require(tokenContract == address(0));

        earlyBirds.push(_address);
        earlyBirdInvestments[_address] = weiAmount;

        // auto whitelist early bird;
        whitelist[_address] = true;
    }

    // transfer the tokens bought by the early birds before contract creation
    function processEarlyBirds()
        private
    {
        for (uint256 i = 0; i < earlyBirds.length; i++)
        {
            address earlyBirdAddress = earlyBirds[i];
            uint256 weiAmount = earlyBirdInvestments[earlyBirdAddress];

            buyTokens(earlyBirdAddress, weiAmount);
        }
    }


    // allows everyone to burn all unsold tokens in the sale contract after finalized.
    function burnUnsoldTokens()
        external
        onlyAfterFinalized
        returns (bool)
    {
        uint256 leftTokens = getTokensLeft();

        require(leftTokens > 0);

        // let'em burn
        require(tokenContract.burn(leftTokens));

        UnsoldTokensBurnt(leftTokens);

        return true;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"earlyBirds","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeWhitelistOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributors","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"tranches","outputs":[{"name":"untilToken","type":"uint256"},{"name":"tokensPerEther","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PUBLIC_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"weiAmount","type":"uint256"}],"name":"addEarlyBird","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalWeiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTokensPerEther","outputs":[{"name":"tokensPerEther","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addWhitelistOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"COMPANY_ALLOCATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistOperators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"earlyBirdInvestments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"burnUnsoldTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"connectToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingWalletAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"weiAmount","type":"uint256"}],"name":"calculateTokenAmount","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"_currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensLeft","outputs":[{"name":"tokensLeft","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_fundingWalletAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"}],"name":"LogWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_totalTokenSold","type":"uint256"}],"name":"LogTokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"UnsoldTokensBurnt","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526009805460a060020a60ff02191690556000600b819055600c55341561002957600080fd5b60405160208061132c8339810160405280805191506040905080519081016040526a0422ca8b0a00a42500000081526106126020820152600081518155602082015160019091015550604080519081016040526a084595161401484a000000815261049a6020820152600281518155602082015160019091015550604080519081016040526a108b2a2c2802909400000081526103e8602082015260048151815560208201516001909101555060408051908101604052630393870081526102e4602082015260068151815560208201516001909101555060088054600160a060020a03338116600160a060020a0319909216919091179091558116151561013057600080fd5b600d8054600160a060020a031916600160a060020a03929092169190911790556111cd8061015f6000396000f3006060604052600436106101715763ffffffff60e060020a6000350416630428c6aa81146101b6578063159c18bc146101e85780631a2309f0146102095780631f6d49421461022e57806326c259621461024d578063297c41431461027b578063305006841461028e57806337ba682d146102b05780634bb278f3146102c357806353f4db01146102ea57806355a373d6146102fd5780635e402ae2146103105780636c749c26146103235780636ee18573146103365780637064f0af1461035557806383a4f2f5146103685780638ab1d681146103875780638da5cb5b146103a657806393bbafd1146103b9578063940bb344146103d857806399413b4e146103eb5780639b19251a1461040a5780639ce21f3c14610429578063a24bcf461461043c578063b3f05b9714610452578063b5f7f63614610465578063ba9bb82714610478578063d18e81b31461048b578063de5f98661461049e578063e43252d7146104b1578063f2fde38b146104d0575b600061017d33346104ef565b600d54909150600160a060020a031681156108fc0282604051600060405180830381858888f1935050505015156101b357600080fd5b50005b34156101c157600080fd5b6101cc6004356107ab565b604051600160a060020a03909116815260200160405180910390f35b34156101f357600080fd5b610207600160a060020a03600435166107d3565b005b341561021457600080fd5b61021c610836565b60405190815260200160405180910390f35b341561023957600080fd5b61021c600160a060020a0360043516610843565b341561025857600080fd5b610263600435610855565b60405191825260208201526040908101905180910390f35b341561028657600080fd5b61021c610874565b341561029957600080fd5b610207600160a060020a036004351660243561087c565b34156102bb57600080fd5b61021c610979565b34156102ce57600080fd5b6102d6610981565b604051901515815260200160405180910390f35b34156102f557600080fd5b61021c6109c4565b341561030857600080fd5b6101cc6109ca565b341561031b57600080fd5b61021c6109d9565b341561032e57600080fd5b61021c610a58565b341561034157600080fd5b610207600160a060020a0360043516610a64565b341561036057600080fd5b61021c610aa3565b341561037357600080fd5b6102d6600160a060020a0360043516610ab2565b341561039257600080fd5b610207600160a060020a0360043516610ac7565b34156103b157600080fd5b6101cc610b27565b34156103c457600080fd5b61021c600160a060020a0360043516610b36565b34156103e357600080fd5b6102d6610b48565b34156103f657600080fd5b610207600160a060020a0360043516610c2f565b341561041557600080fd5b6102d6600160a060020a0360043516610e07565b341561043457600080fd5b6101cc610e1c565b341561044757600080fd5b61021c600435610e2b565b341561045d57600080fd5b6102d6610e3d565b341561047057600080fd5b61021c610e4d565b341561048357600080fd5b61021c610e53565b341561049657600080fd5b61021c610e5f565b34156104a957600080fd5b61021c610e63565b34156104bc57600080fd5b610207600160a060020a0360043516610edd565b34156104db57600080fd5b610207600160a060020a0360043516610f6f565b600954600090819081908190819060a060020a900460ff161561051157600080fd5b635a7e360061051e610e5f565b111561052957600080fd5b600160a060020a0387166000908152600f6020526040902054879060ff16151560011461055557600080fd5b600160a060020a0388166000908152600a602052604081205489918991610582908363ffffffff61100a16565b905067016345785d8a000082101561059957600080fd5b68878678326eac9000008111156105af57600080fd5b600954600160a060020a031615156105c357fe5b6105cb610e63565b9750600088116105da57600080fd5b6105e38a610e2b565b9650899550600094508787111561061f578796506105ff6109d9565b8781151561060957fe5b04955061061c8a8763ffffffff61102016565b94505b600954600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561067e57600080fd5b6102c65a03f1151561068f57600080fd5b50505060405180515050600160a060020a038b166000908152600a60205260409020546106c2908763ffffffff61100a16565b600160a060020a038c166000908152600a602052604081209190915585111561071657600160a060020a038b1685156108fc0286604051600060405180830381858888f19350505050151561071657600080fd5b600b805487019055600c8054880190819055600160a060020a038c16907f1f3e1c8dd1ea65dd1302cbe3ef11178a614ac6f634819e13ce4e6326350d2a839088908a9060405180848152602001838152602001828152602001935050505060405180910390a261078c888863ffffffff61102016565b151561079c5761079a611032565b505b50939998505050505050505050565b60108054829081106107b957fe5b600091825260209091200154600160a060020a0316905081565b60085433600160a060020a039081169116146107ee57600080fd5b600160a060020a0381166000908152600e602052604090205460ff16151561081557600080fd5b600160a060020a03166000908152600e60205260409020805460ff19169055565b68878678326eac90000081565b600a6020526000908152604090205481565b6000816004811061086257fe5b60020201805460019091015490915082565b635a55578081565b60085433600160a060020a0390811691161461089757600080fd5b600160a060020a0382166000908152600a6020526040812054839183916108c4908363ffffffff61100a16565b905067016345785d8a00008210156108db57600080fd5b68878678326eac9000008111156108f157600080fd5b600954600160a060020a03161561090757600080fd5b60108054600181016109198382611168565b5060009182526020808320919091018054600160a060020a0390981673ffffffffffffffffffffffffffffffffffffffff199098168817905595815260118652604080822095909555600f9095525050509020805460ff19166001179055565b635a7e360081565b60085460009033600160a060020a0390811691161461099f57600080fd5b635a7e36006109ac610e5f565b116109b657600080fd5b6109be611032565b90505b90565b600b5481565b600954600160a060020a031681565b6007546000908190635a5557806109ee610e5f565b106109fb57809250610a53565b600091505b6004821015610a4f5760008260048110610a1657fe5b6002020154600c5410610a2857610a44565b60008260048110610a3557fe5b60020201600101549250610a53565b600190910190610a00565b8092505b505090565b670de0b6b3a764000081565b60085433600160a060020a03908116911614610a7f57600080fd5b600160a060020a03166000908152600e60205260409020805460ff19166001179055565b6a211654585005212800000081565b600e6020526000908152604090205460ff1681565b600160a060020a0333166000908152600e602052604090205460ff161515600114610af157600080fd5b600160a060020a0381161515610b0657600080fd5b600160a060020a03166000908152600f60205260409020805460ff19169055565b600854600160a060020a031681565b60116020526000908152604090205481565b600954600090819060a060020a900460ff161515610b6557600080fd5b610b6d610e63565b905060008111610b7c57600080fd5b600954600160a060020a03166342966c688260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610bcd57600080fd5b6102c65a03f11515610bde57600080fd5b505050604051805190501515610bf357600080fd5b7f8a18a804523143af3d2399b3fdf76bf116e01d31987f8e774d8f1282f013cb7e8160405190815260200160405180910390a1600191505b5090565b60085433600160a060020a03908116911614610c4a57600080fd5b600c5415610c5757600080fd5b600954600160a060020a031615610c6d57600080fd5b80600160a060020a03166318160ddd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610cb357600080fd5b6102c65a03f11515610cc457600080fd5b5050506040518051905081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d2557600080fd5b6102c65a03f11515610d3657600080fd5b50505060405180519050141515610d4c57600080fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038381169190911791829055600d549181169163a9059cbb91166a211654585005212800000060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610de057600080fd5b6102c65a03f11515610df157600080fd5b5050506040518051905050610e04611106565b50565b600f6020526000908152604090205460ff1681565b600d54600160a060020a031681565b6000610e356109d9565b909102919050565b60095460a060020a900460ff1681565b600c5481565b67016345785d8a000081565b4290565b600954600090600160a060020a03166370a0823130836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610ebe57600080fd5b6102c65a03f11515610ecf57600080fd5b505050604051805191505090565b600160a060020a0333166000908152600e602052604090205460ff161515600114610f0757600080fd5b600160a060020a0381161515610f1c57600080fd5b600160a060020a0381166000818152600f602052604090819020805460ff191660011790557f8988c1ff37289662f7d1a6f736d91aada3cb9216b6614a53b94f210ea4a0af25905160405180910390a250565b60085433600160a060020a03908116911614610f8a57600080fd5b600160a060020a0381161515610f9f57600080fd5b600854600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60008282018381101561101957fe5b9392505050565b60008282111561102c57fe5b50900390565b60095460009060a060020a900460ff161561104c57600080fd5b6009805474ff0000000000000000000000000000000000000000191660a060020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1600954600160a060020a0316634bb278f36000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110e457600080fd5b6102c65a03f115156110f557600080fd5b505050604051805150600191505090565b600080805b60105483101561116357601080548490811061112357fe5b6000918252602080832090910154600160a060020a03168083526011909152604090912054909250905061115782826104ef565b5060019092019161110b565b505050565b815481835581811511611163576000838152602090206111639181019083016109c191905b80821115610c2b576000815560010161118d5600a165627a7a723058204b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c100290000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7

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

-----Decoded View---------------
Found 1 constructor arguments :
Arg [0] : 0000000000000000000000009df172fc167a8a567c208fc14e3435eb8043e2b7


   Swarm Source:
bzzr://4b33382d7f9993a7001fcc64f07f7c24c83fed1ec29682b960566af3e16821c1

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.