Sponsored Link:   WELL – WORKING HEALTHCARE U.S. PLATFORM - RAISED $3M IN PRE-ICO – JOIN NOW WITH 40% BONUS
Contract Overview | SimpleTokenSale
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 21097 txns
Token Tracker 0x2c4e8f2d746113d0696ce89b35f0d8bf88e0aeca
Misc  
   
Address Watch Add To Watch List
Contract Creator 0x592f56f480033c80642437d888258cd77f57edceat txn 0x97e6ff14b3c6a7e7c9b400a774b5cc3b7fcf75c600851f8553e7a6de66269db8
Token Tracker
  Latest 25 txns from a total Of 21097 transactions View All

TxHash Age From To Value [TxFee]
0xb4d167ad2f40eace96f15a2afb4b913abda99170f87ab2378394b80be6d2796524 days 18 hrs ago0x0068271c4dd98f26204dbe08c328601d59f4ac0d  IN   SimpleTokenSale0 Ether0.00236664
0x208defe9833b11f278c7f53722e5c06aa6d8f6a05a50b70f31a59e146e86724c24 days 18 hrs ago0x30919d40baba58042df48f91de0b7b14280d793b  IN   SimpleTokenSale0 Ether0.0025176
0xae668a8e16d885558e48e3161ec6e9c0040cf15f8e08fba72335ffa8b4bad8c524 days 18 hrs ago0x0068271c4dd98f26204dbe08c328601d59f4ac0d  IN   SimpleTokenSale0 Ether0.00246904
0x0eaea8f920260339a42c196cef3a2fd47ce8725ad34cb230bb22e3af28fe643d29 days 8 hrs agoBittrex  IN   SimpleTokenSale1.894 Ether0.00197739
0xa2766a3da61014ca64b97f7094f280edc752c8a1517c199cd9438206c8aee83b66 days 11 hrs ago0x30919d40baba58042df48f91de0b7b14280d793b  IN   SimpleTokenSale0 Ether0.0030225
0x78688d0126b203992a0ac1fb1cc9ada9ec55ac794432a178e8b5efcb555e647666 days 11 hrs ago0x30919d40baba58042df48f91de0b7b14280d793b  IN   SimpleTokenSale0 Ether0.0015872
0xa0d097a9ad1b1dd648ef4928066f1cd72a79ddce8295bcd18081f5e8772d153066 days 13 hrs ago0x30919d40baba58042df48f91de0b7b14280d793b  IN   SimpleTokenSale0 Ether0.0032705
0xd0ecb92b152976ea5a841ef9e155dddeb915acab98a35d184ff67a51316f27f266 days 13 hrs ago0x30919d40baba58042df48f91de0b7b14280d793b  IN   SimpleTokenSale0 Ether0.002889
0x26b826da17002830d862b33f579426aef7f808ecd3060377a1c7a07659f8e2d776 days 23 hrs ago0x133ce36fb3298a3eaf0ab0591d0110af4395d5c8  IN   SimpleTokenSale0.25 Ether0.000471534
0x7208ae98942ff199378a44e3423ac633feba0b67169dc50d4261872026517dcb77 days 5 hrs ago0xa6ffc40f6ca0acf5a0ddeb0ee0eec3e4fa1bef18  IN   SimpleTokenSale0.4 Ether0.000718528
0x0f085fd43ed65b34e76b7b1cafc013274f37a7461399a91e7b7cc2a89527b6d079 days 4 hrs ago0x58cc4b284236e038036b4a6fad52b4b5cfcdd16b  IN   SimpleTokenSale2.83 Ether0.000471534
0xd545777560dcbae6cbb349257389b83fafc8214976e3af194fdafeb7a767923a79 days 4 hrs ago0x8f6be3229a69be0a10d048b8c53ed922a535c72e  IN   SimpleTokenSale2.5 Ether0.000471534
0x99b9383d3a3606c37b9d38f51c9eca1a213fd0781bb692015355e033ed8419bb79 days 4 hrs ago0x42c6bd28f2a12073593d1a488d57fead16b8a1e3  IN   SimpleTokenSale20 Ether0.000471534
0x05cdd466dc890b339cd91584d14dc8c931fccb7505004ff4b1d25aea3207720f79 days 15 hrs ago0xbae61be79d238a727b8c020b203d076d1f4ad47a  IN   SimpleTokenSale3 Ether0.00022454
0x96953bc5f42a1485c9b6f9297a9b396d4a6ea35ec1e7f30efd87c27e19e6bb5579 days 16 hrs ago0x6db09df4af38c71cdf73f5cf474307a208b5ffcb  IN   SimpleTokenSale0.25 Ether0.00134724
0x4ba1ab960b2f91781d6169edb6fb32a46b58d459cf48f725b90e96b006777a5179 days 16 hrs ago0xfa17f8239750f4dc1a2fe3ddb6d3d8005e02ffd6  IN   SimpleTokenSale0.3 Ether0.000471534
0x12714fbd128df5016250dddbaeb7a87286f11a7a5b310b582f3269c0718c6ca479 days 18 hrs ago0x476793c8a7cdc53cb52cdd008a80094740485b46  IN   SimpleTokenSale1 Ether0.00022454
0x6f03e7f8aade87ac5dd893bc83b1162f8b25ddca5a4f953633ace8c149052cd779 days 18 hrs ago0xdb5e0392e06d67510b6f32fa571985a398754de4  IN   SimpleTokenSale23.989460638 Ether0.000471534
0xb99a655cda62014d4e4366f083ac5e258beeced3d6efd6b62069e1ebfef122c479 days 18 hrs ago0x90dcbd38394dc7e997d164127239d9ee4c1bc309  IN   SimpleTokenSale0.105 Ether0.00022454
0xdb807630980edf25862d101a43e9c9635916d9769c780e6e8a5475e79b7d9ef279 days 18 hrs ago0xfd7a92330bbed765fabbf4e89edfb214bd1ef045  IN   SimpleTokenSale3 Ether0.000583804
0xc4123cdb31e6039a3820b3d0111462a072977029c49c75a3ccc363925524b04e79 days 18 hrs ago0x5bc9dfc36434a7d6deb297e723804c68c719b985  IN   SimpleTokenSale0.18 Ether0.00056135
0xc604a1009fd4cf8de4c7673fe681bb6eba354cbe935546f0fabaaeb2e36f15a979 days 18 hrs ago0x1ab2f234f57991a987ef6c8ae50b0eea771917c4  IN   SimpleTokenSale0.142540798 Ether0.000404172
0xcde3ac5871774460742f37ec645b62de0f424a04f3392c1fc6222e11f9cfade979 days 18 hrs ago0x3bbc990c33cd785f8915e14ce593561677cb71e1  IN   SimpleTokenSale10 Ether0.000471534
0x37d4d12c6a318e6a27f9c46c15a9398cadb4fa9235590cb2123e06607503b2f679 days 18 hrs ago0xd762524f689cc097093ad821ff878d8e6987c157  IN   SimpleTokenSale1.3 Ether0.000471534
0x062e57ad33bea055fa36cdee9373b0c3f0e171cbe5cbd367a29ff87d4215196f79 days 18 hrs ago0x5dc660a131937d73872ef5478b121b53029ab084  IN   SimpleTokenSale0.7 Ether0.00056135
[ 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
0x68c925628a65ff97a8b86f6690bb68c4b2928cf7379e58df3a411963ff24c560465623879 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b2.68699556 Ether
0x882bd5e29356e338a029147df90a57241e582293894b74f582673414326bf917465623879 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b3.9 Ether
0xaa7a37f96b873c959f76f6a524231b6314b42c0715962332afe4869fae283303465623879 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b13.479904822 Ether
0x60f22221545265a744eb6f97d2586f48c3cd52553ed3f164eed578f848ceb8f3465623479 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b5 Ether
0xd550b5fd0e5ab1f14fd8496fb351596b4136da228c4ef1ad5d0d461f58661a35465623479 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1 Ether
0x808c7152e2b14080dd8c6e69eb81c43ea51d581d99f83ba7bd56a0edaf695d22465623479 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b2 Ether
0x22e61ddc689fb6a92e9de987a92cc8cbdd6e7c2d3a75794c72b91987077267ed465623479 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.4396837 Ether
0x508ae32a60ddba63ae1895b7766ceed9b5a1a3f5c7932350ea10693b3eb9f40b465623379 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.5 Ether
0xe7b1e64e171fe23caacc872cdbd489806bc3a8a79dc8a5d739bd3f58c3b3718b465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b3.5 Ether
0xb278112a90370e0c5f3a46b5f6bbb94bfa83fd968aacbff0f57d516da8cbefe0465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.5 Ether
0x37ee3ea6e057f4b2055fe73b48c9511aabda968761899faac30a53b925f3b0e2465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.20629221 Ether
0xa15843a9f607ad39fac3c784c131ce7567642aaa477df4d83733f2a5310af881465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.86 Ether
0xbaf808541f5650daf4625536bbf7178f2b622ef2109ee81e186514c72d3eae87465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.2 Ether
0xdbfa86409f3cff0bd49d94965f921c17e3c50a4b5d3e40b84649c715b56944a6465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b9 Ether
0xe5e93ecd162f4eb09060317cde6055aeea72d647dd99e68601a8dbb2b35cd34a465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b1.413071735 Ether
0xd8ad178bfb00635ff85c0b720f1d8739e3b143ffb9f9a8b8d8bed36bdb7841bc465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.7 Ether
0x15c555d54ed637b4795b8818744b0cce2ab3f557bb38dfc66d70f311ec4dee53465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.5 Ether
0x58389f97ca12d075ea20f140563ff9c9bd0452d3d5f97b355ad5a524f8582e6a465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.25 Ether
0x3b457f2b358be1ce17262da49d95b8f2ac979f94ef81ea1ab743185a7bb1a274465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b10 Ether
0xa451f061af47ac45e093b128bf1402e02c5db3779bf2500bd130d4ae7d91683a465623279 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.16130333091378337 Ether
0x4835d389a8a3a53a6d5d165b311594a94ad1c27b0e3b35a8dbddc2eb2a77ccd5465623179 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.25 Ether
0x0f37836e28f3acba08a15663485f6cd8db5fcec622b9bfcc69fb2d55e5400236465623179 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.3 Ether
0x5abdcf7cd42a0a56e1dadf0dee10a8a88998b0e48744838a0d9b6907e7e15935465623179 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b10 Ether
0x5ac00a1ebb463548721cf5c752a27142b1051b8d521aa3073da0bb3e2981dd84465623179 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b0.32 Ether
0x260fc7f135d1b884413b461fbf53f08ed15dc14de82c60dea80f83e3fe404822465623179 days 18 hrs ago0x58b7056deb51ed292614f0da1e94e7e9c589828d0x2ef2782905830533d218b7ff4d15b8c0981ce84b4.54 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.17;

// ----------------------------------------------------------------------------
// Token Trustee Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
// SafeMath Library Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
//
// Based on the SafeMath library by the OpenZeppelin team.
// Copyright (c) 2016 Smart Contract Solutions, Inc.
// https://github.com/OpenZeppelin/zeppelin-solidity
// The MIT License.
// ----------------------------------------------------------------------------


library SafeMath {

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;

        assert(a == 0 || c / a == b);

        return c;
    }


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

//
// Implements basic ownership with 2-step transfers.
//
contract Owned {

    address public owner;
    address public proposedOwner;

    event OwnershipTransferInitiated(address indexed _proposedOwner);
    event OwnershipTransferCompleted(address indexed _newOwner);


    function Owned() public {
        owner = msg.sender;
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender));
        _;
    }


    function isOwner(address _address) internal view returns (bool) {
        return (_address == owner);
    }


    function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) {
        proposedOwner = _proposedOwner;

        OwnershipTransferInitiated(_proposedOwner);

        return true;
    }


    function completeOwnershipTransfer() public returns (bool) {
        require(msg.sender == proposedOwner);

        owner = proposedOwner;
        proposedOwner = address(0);

        OwnershipTransferCompleted(owner);

        return true;
    }
}

//
// Implements a more advanced ownership and permission model based on owner,
// admin and ops per Simple Token key management specification.
//
contract OpsManaged is Owned {

    address public opsAddress;
    address public adminAddress;

    event AdminAddressChanged(address indexed _newAddress);
    event OpsAddressChanged(address indexed _newAddress);


    function OpsManaged() public
        Owned()
    {
    }


    modifier onlyAdmin() {
        require(isAdmin(msg.sender));
        _;
    }


    modifier onlyAdminOrOps() {
        require(isAdmin(msg.sender) || isOps(msg.sender));
        _;
    }


    modifier onlyOwnerOrAdmin() {
        require(isOwner(msg.sender) || isAdmin(msg.sender));
        _;
    }


    modifier onlyOps() {
        require(isOps(msg.sender));
        _;
    }


    function isAdmin(address _address) internal view returns (bool) {
        return (adminAddress != address(0) && _address == adminAddress);
    }


    function isOps(address _address) internal view returns (bool) {
        return (opsAddress != address(0) && _address == opsAddress);
    }


    function isOwnerOrOps(address _address) internal view returns (bool) {
        return (isOwner(_address) || isOps(_address));
    }


    // Owner and Admin can change the admin address. Address can also be set to 0 to 'disable' it.
    function setAdminAddress(address _adminAddress) external onlyOwnerOrAdmin returns (bool) {
        require(_adminAddress != owner);
        require(_adminAddress != address(this));
        require(!isOps(_adminAddress));

        adminAddress = _adminAddress;

        AdminAddressChanged(_adminAddress);

        return true;
    }


    // Owner and Admin can change the operations address. Address can also be set to 0 to 'disable' it.
    function setOpsAddress(address _opsAddress) external onlyOwnerOrAdmin returns (bool) {
        require(_opsAddress != owner);
        require(_opsAddress != address(this));
        require(!isAdmin(_opsAddress));

        opsAddress = _opsAddress;

        OpsAddressChanged(_opsAddress);

        return true;
    }
}

contract SimpleTokenConfig {

    string  public constant TOKEN_SYMBOL   = "ST";
    string  public constant TOKEN_NAME     = "Simple Token";
    uint8   public constant TOKEN_DECIMALS = 18;

    uint256 public constant DECIMALSFACTOR = 10**uint256(TOKEN_DECIMALS);
    uint256 public constant TOKENS_MAX     = 800000000 * DECIMALSFACTOR;
}

contract ERC20Interface {

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);

    function name() public view returns (string);
    function symbol() public view returns (string);
    function decimals() public view returns (uint8);
    function totalSupply() public view returns (uint256);

    function balanceOf(address _owner) public view returns (uint256 balance);
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);

    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
}

//
// Standard ERC20 implementation, with ownership.
//
contract ERC20Token is ERC20Interface, Owned {

    using SafeMath for uint256;

    string  private tokenName;
    string  private tokenSymbol;
    uint8   private tokenDecimals;
    uint256 internal tokenTotalSupply;

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


    function ERC20Token(string _symbol, string _name, uint8 _decimals, uint256 _totalSupply) public
        Owned()
    {
        tokenSymbol      = _symbol;
        tokenName        = _name;
        tokenDecimals    = _decimals;
        tokenTotalSupply = _totalSupply;
        balances[owner]  = _totalSupply;

        // According to the ERC20 standard, a token contract which creates new tokens should trigger
        // a Transfer event and transfers of 0 values must also fire the event.
        Transfer(0x0, owner, _totalSupply);
    }


    function name() public view returns (string) {
        return tokenName;
    }


    function symbol() public view returns (string) {
        return tokenSymbol;
    }


    function decimals() public view returns (uint8) {
        return tokenDecimals;
    }


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


    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner];
    }


    function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }


    function transfer(address _to, uint256 _value) public returns (bool success) {
        // According to the EIP20 spec, "transfers of 0 values MUST be treated as normal
        // transfers and fire the Transfer event".
        // Also, should throw if not enough balance. This is taken care of by SafeMath.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(msg.sender, _to, _value);

        return true;
    }


    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        balances[_from] = balances[_from].sub(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(_from, _to, _value);

        return true;
    }


    function approve(address _spender, uint256 _value) public returns (bool success) {

        allowed[msg.sender][_spender] = _value;

        Approval(msg.sender, _spender, _value);

        return true;
    }
}

//
// SimpleToken is a standard ERC20 token with some additional functionality:
// - It has a concept of finalize
// - Before finalize, nobody can transfer tokens except:
//     - Owner and operations can transfer tokens
//     - Anybody can send back tokens to owner
// - After finalize, no restrictions on token transfers
//

//
// Permissions, according to the ST key management specification.
//
//                                    Owner    Admin   Ops
// transfer (before finalize)           x               x
// transferForm (before finalize)       x               x
// finalize                                      x
//

contract SimpleToken is ERC20Token, OpsManaged, SimpleTokenConfig {

    bool public finalized;


    // Events
    event Burnt(address indexed _from, uint256 _amount);
    event Finalized();


    function SimpleToken() public
        ERC20Token(TOKEN_SYMBOL, TOKEN_NAME, TOKEN_DECIMALS, TOKENS_MAX)
        OpsManaged()
    {
        finalized = false;
    }


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

        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, _to);

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


    function checkTransferAllowed(address _sender, address _to) private view {
        if (finalized) {
            // Everybody should be ok to transfer once the token is finalized.
            return;
        }

        // Owner and Ops are allowed to transfer tokens before the sale is finalized.
        // This allows the tokens to move from the TokenSale contract to a beneficiary.
        // We also allow someone to send tokens back to the owner. This is useful among other
        // cases, for the Trustee to transfer unlocked tokens back to the owner (reclaimTokens).
        require(isOwnerOrOps(_sender) || _to == owner);
    }

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

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

        Burnt(msg.sender, _value);

        return true;
    }


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

        finalized = true;

        Finalized();

        return true;
    }
}

//
// Implements a simple trustee which can release tokens based on
// an explicit call from the owner.
//

//
// Permissions, according to the ST key management specification.
//
//                                Owner    Admin   Ops   Revoke
// grantAllocation                           x      x
// revokeAllocation                                        x
// processAllocation                                x
// reclaimTokens                             x
// setRevokeAddress                 x                      x
//

contract Trustee is OpsManaged {

    using SafeMath for uint256;


    SimpleToken public tokenContract;

    struct Allocation {
        uint256 amountGranted;
        uint256 amountTransferred;
        bool    revokable;
    }

    // The trustee has a special 'revoke' key which is allowed to revoke allocations.
    address public revokeAddress;

    // Total number of tokens that are currently allocated.
    // This does not include tokens that have been processed (sent to an address) already or
    // the ones in the trustee's account that have not been allocated yet.
    uint256 public totalLocked;

    mapping (address => Allocation) public allocations;


    //
    // Events
    //
    event AllocationGranted(address indexed _from, address indexed _account, uint256 _amount, bool _revokable);
    event AllocationRevoked(address indexed _from, address indexed _account, uint256 _amountRevoked);
    event AllocationProcessed(address indexed _from, address indexed _account, uint256 _amount);
    event RevokeAddressChanged(address indexed _newAddress);
    event TokensReclaimed(uint256 _amount);


    function Trustee(SimpleToken _tokenContract) public
        OpsManaged()
    {
        require(address(_tokenContract) != address(0));

        tokenContract = _tokenContract;
    }


    modifier onlyOwnerOrRevoke() {
        require(isOwner(msg.sender) || isRevoke(msg.sender));
        _;
    }


    modifier onlyRevoke() {
        require(isRevoke(msg.sender));
        _;
    }


    function isRevoke(address _address) private view returns (bool) {
        return (revokeAddress != address(0) && _address == revokeAddress);
    }


    // Owner and revoke can change the revoke address. Address can also be set to 0 to 'disable' it.
    function setRevokeAddress(address _revokeAddress) external onlyOwnerOrRevoke returns (bool) {
        require(_revokeAddress != owner);
        require(!isAdmin(_revokeAddress));
        require(!isOps(_revokeAddress));

        revokeAddress = _revokeAddress;

        RevokeAddressChanged(_revokeAddress);

        return true;
    }


    // Allows admin or ops to create new allocations for a specific account.
    function grantAllocation(address _account, uint256 _amount, bool _revokable) public onlyAdminOrOps returns (bool) {
        require(_account != address(0));
        require(_account != address(this));
        require(_amount > 0);

        // Can't create an allocation if there is already one for this account.
        require(allocations[_account].amountGranted == 0);

        if (isOps(msg.sender)) {
            // Once the token contract is finalized, the ops key should not be able to grant allocations any longer.
            // Before finalized, it is used by the TokenSale contract to allocate pre-sales.
            require(!tokenContract.finalized());
        }

        totalLocked = totalLocked.add(_amount);
        require(totalLocked <= tokenContract.balanceOf(address(this)));

        allocations[_account] = Allocation({
            amountGranted     : _amount,
            amountTransferred : 0,
            revokable         : _revokable
        });

        AllocationGranted(msg.sender, _account, _amount, _revokable);

        return true;
    }


    // Allows the revoke key to revoke allocations, if revoke is allowed.
    function revokeAllocation(address _account) external onlyRevoke returns (bool) {
        require(_account != address(0));

        Allocation memory allocation = allocations[_account];

        require(allocation.revokable);

        uint256 ownerRefund = allocation.amountGranted.sub(allocation.amountTransferred);

        delete allocations[_account];

        totalLocked = totalLocked.sub(ownerRefund);

        AllocationRevoked(msg.sender, _account, ownerRefund);

        return true;
    }


    // Push model which allows ops to transfer tokens to the beneficiary.
    // The exact amount to transfer is calculated based on agreements with
    // the beneficiaries. Here we only restrict that the total amount transfered cannot
    // exceed what has been granted.
    function processAllocation(address _account, uint256 _amount) external onlyOps returns (bool) {
        require(_account != address(0));
        require(_amount > 0);

        Allocation storage allocation = allocations[_account];

        require(allocation.amountGranted > 0);

        uint256 transferable = allocation.amountGranted.sub(allocation.amountTransferred);

        if (transferable < _amount) {
           return false;
        }

        allocation.amountTransferred = allocation.amountTransferred.add(_amount);

        // Note that transfer will fail if the token contract has not been finalized yet.
        require(tokenContract.transfer(_account, _amount));

        totalLocked = totalLocked.sub(_amount);

        AllocationProcessed(msg.sender, _account, _amount);

        return true;
    }


    // Allows the admin to claim back all tokens that are not currently allocated.
    // Note that the trustee should be able to move tokens even before the token is
    // finalized because SimpleToken allows sending back to owner specifically.
    function reclaimTokens() external onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));

        // If balance <= amount locked, there is nothing to reclaim.
        require(ownBalance > totalLocked);

        uint256 amountReclaimed = ownBalance.sub(totalLocked);

        address tokenOwner = tokenContract.owner();
        require(tokenOwner != address(0));

        require(tokenContract.transfer(tokenOwner, amountReclaimed));

        TokensReclaimed(amountReclaimed);

        return true;
    }
}

// ----------------------------------------------------------------------------
// Pausable Contract Implementation
//
// Copyright (c) 2017 OpenST Ltd.
// https://simpletoken.org/
//
// The MIT Licence.
//
// Based on the Pausable contract by the OpenZeppelin team.
// Copyright (c) 2016 Smart Contract Solutions, Inc.
// https://github.com/OpenZeppelin/zeppelin-solidity
// The MIT License.
// ----------------------------------------------------------------------------

contract Pausable is OpsManaged {

  event Pause();
  event Unpause();

  bool public paused = false;


  modifier whenNotPaused() {
    require(!paused);
    _;
  }


  modifier whenPaused() {
    require(paused);
    _;
  }


  function pause() public onlyAdmin whenNotPaused {
    paused = true;

    Pause();
  }


  function unpause() public onlyAdmin whenPaused {
    paused = false;

    Unpause();
  }
}

contract TokenSaleConfig is SimpleTokenConfig {

    uint256 public constant PHASE1_START_TIME         = 1510664400; // 2017-11-14, 13:00:00 UTC
    uint256 public constant PHASE2_START_TIME         = 1510750800; // 2017-11-15, 13:00:00 UTC
    uint256 public constant END_TIME                  = 1512133199; // 2017-12-01, 12:59:59 UTC
    uint256 public constant CONTRIBUTION_MIN          = 0.1 ether;
    uint256 public constant CONTRIBUTION_MAX          = 10000.0 ether;

    // This is the maximum number of tokens each individual account is allowed to
    // buy during Phase 1 of the token sale (whitelisted phase)
    // Calculated based on 300 USD/ETH * 10 ETH / 0.0833 USD / token = ~36,000
    uint256 public constant PHASE1_ACCOUNT_TOKENS_MAX = 36000     * DECIMALSFACTOR;

    uint256 public constant TOKENS_SALE               = 240000000 * DECIMALSFACTOR;
    uint256 public constant TOKENS_FOUNDERS           = 80000000  * DECIMALSFACTOR;
    uint256 public constant TOKENS_ADVISORS           = 80000000  * DECIMALSFACTOR;
    uint256 public constant TOKENS_EARLY_BACKERS      = 44884831  * DECIMALSFACTOR;
    uint256 public constant TOKENS_ACCELERATOR        = 217600000 * DECIMALSFACTOR;
    uint256 public constant TOKENS_FUTURE             = 137515169 * DECIMALSFACTOR;

    // We use a default for when the contract is deployed but this can be changed afterwards
    // by calling the setTokensPerKEther function
    // For the public sale, tokens are priced at 0.0833 USD/token.
    // So if we have 300 USD/ETH -> 300,000 USD/KETH / 0.0833 USD/token = ~3,600,000
    uint256 public constant TOKENS_PER_KETHER         = 3600000;

    // Constant used by buyTokens as part of the cost <-> tokens conversion.
    // 18 for ETH -> WEI, TOKEN_DECIMALS (18 for Simple Token), 3 for the K in tokensPerKEther.
    uint256 public constant PURCHASE_DIVIDER          = 10**(uint256(18) - TOKEN_DECIMALS + 3);

}

//
// Implementation of the 1st token sale for Simple Token
//
// * Lifecycle *
// Initialization sequence should be as follow:
//    1. Deploy SimpleToken contract
//    2. Deploy Trustee contract
//    3. Deploy TokenSale contract
//    4. Set operationsAddress of SimpleToken contract to TokenSale contract
//    5. Set operationsAddress of Trustee contract to TokenSale contract
//    6. Set operationsAddress of TokenSale contract to some address
//    7. Transfer tokens from owner to TokenSale contract
//    8. Transfer tokens from owner to Trustee contract
//    9. Initialize TokenSale contract
//
// Pre-sale sequence:
//    - Set tokensPerKEther
//    - Set phase1AccountTokensMax
//    - Add presales
//    - Add allocations for founders, advisors, etc.
//    - Update whitelist
//
// After-sale sequence:
//    1. Finalize the TokenSale contract
//    2. Finalize the SimpleToken contract
//    3. Set operationsAddress of TokenSale contract to 0
//    4. Set operationsAddress of SimpleToken contract to 0
//    5. Set operationsAddress of Trustee contract to some address
//
// Anytime
//    - Add/Remove allocations
//

//
// Permissions, according to the ST key management specification.
//
//                                Owner    Admin   Ops
// initialize                       x
// changeWallet                              x
// updateWhitelist                                  x
// setTokensPerKEther                        x
// setPhase1AccountTokensMax                 x
// addPresale                                x
// pause / unpause                           x
// reclaimTokens                             x
// burnUnsoldTokens                          x
// finalize                                  x
//

contract TokenSale is OpsManaged, Pausable, TokenSaleConfig { // Pausable is also Owned

    using SafeMath for uint256;


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

    // The sale end time is initially defined by the END_TIME constant but it
    // may get extended if the sale is paused.
    uint256 public endTime;
    uint256 public pausedTime;

    // Number of tokens per 1000 ETH. See TokenSaleConfig for details.
    uint256 public tokensPerKEther;

    // Keeps track of the maximum amount of tokens that an account is allowed to purchase in phase 1.
    uint256 public phase1AccountTokensMax;

    // Address where the funds collected during the sale will be forwarded.
    address public wallet;

    // Token contract that the sale contract will interact with.
    SimpleToken public tokenContract;

    // Trustee contract to hold on token balances. The following token pools will be held by trustee:
    //    - Founders
    //    - Advisors
    //    - Early investors
    //    - Presales
    Trustee public trusteeContract;

    // Total amount of tokens sold during presale + public sale. Excludes pre-sale bonuses.
    uint256 public totalTokensSold;

    // Total amount of tokens given as bonus during presale. Will influence accelerator token balance.
    uint256 public totalPresaleBase;
    uint256 public totalPresaleBonus;

    // Map of addresses that have been whitelisted in advance (and passed KYC).
    // The whitelist value indicates what phase (1 or 2) the address has been whitelisted for.
    // Addresses whitelisted for phase 1 can also contribute during phase 2.
    mapping(address => uint8) public whitelist;


    //
    // EVENTS
    //
    event Initialized();
    event PresaleAdded(address indexed _account, uint256 _baseTokens, uint256 _bonusTokens);
    event WhitelistUpdated(address indexed _account, uint8 _phase);
    event TokensPurchased(address indexed _beneficiary, uint256 _cost, uint256 _tokens, uint256 _totalSold);
    event TokensPerKEtherUpdated(uint256 _amount);
    event Phase1AccountTokensMaxUpdated(uint256 _tokens);
    event WalletChanged(address _newWallet);
    event TokensReclaimed(uint256 _amount);
    event UnsoldTokensBurnt(uint256 _amount);
    event Finalized();


    function TokenSale(SimpleToken _tokenContract, Trustee _trusteeContract, address _wallet) public
        OpsManaged()
    {
        require(address(_tokenContract) != address(0));
        require(address(_trusteeContract) != address(0));
        require(_wallet != address(0));

        require(PHASE1_START_TIME >= currentTime());
        require(PHASE2_START_TIME > PHASE1_START_TIME);
        require(END_TIME > PHASE2_START_TIME);
        require(TOKENS_PER_KETHER > 0);
        require(PHASE1_ACCOUNT_TOKENS_MAX > 0);

        // Basic check that the constants add up to TOKENS_MAX
        uint256 partialAllocations = TOKENS_FOUNDERS.add(TOKENS_ADVISORS).add(TOKENS_EARLY_BACKERS);
        require(partialAllocations.add(TOKENS_SALE).add(TOKENS_ACCELERATOR).add(TOKENS_FUTURE) == TOKENS_MAX);

        wallet                 = _wallet;
        pausedTime             = 0;
        endTime                = END_TIME;
        finalized              = false;
        tokensPerKEther        = TOKENS_PER_KETHER;
        phase1AccountTokensMax = PHASE1_ACCOUNT_TOKENS_MAX;

        tokenContract   = _tokenContract;
        trusteeContract = _trusteeContract;
    }


    // Initialize is called to check some configuration parameters.
    // It expects that a certain amount of tokens have already been assigned to the sale contract address.
    function initialize() external onlyOwner returns (bool) {
        require(totalTokensSold == 0);
        require(totalPresaleBase == 0);
        require(totalPresaleBonus == 0);

        uint256 ownBalance = tokenContract.balanceOf(address(this));
        require(ownBalance == TOKENS_SALE);

        // Simple check to confirm that tokens are present
        uint256 trusteeBalance = tokenContract.balanceOf(address(trusteeContract));
        require(trusteeBalance >= TOKENS_FUTURE);

        Initialized();

        return true;
    }


    // Allows the admin to change the wallet where ETH contributions are sent.
    function changeWallet(address _wallet) external onlyAdmin returns (bool) {
        require(_wallet != address(0));
        require(_wallet != address(this));
        require(_wallet != address(trusteeContract));
        require(_wallet != address(tokenContract));

        wallet = _wallet;

        WalletChanged(wallet);

        return true;
    }



    //
    // TIME
    //

    function currentTime() public view returns (uint256 _currentTime) {
        return now;
    }


    modifier onlyBeforeSale() {
        require(hasSaleEnded() == false);
        require(currentTime() < PHASE1_START_TIME);
       _;
    }


    modifier onlyDuringSale() {
        require(hasSaleEnded() == false && currentTime() >= PHASE1_START_TIME);
        _;
    }

    modifier onlyAfterSale() {
        // require finalized is stronger than hasSaleEnded
        require(finalized);
        _;
    }


    function hasSaleEnded() private view returns (bool) {
        // if sold out or finalized, sale has ended
        if (totalTokensSold >= TOKENS_SALE || finalized) {
            return true;
        // else if sale is not paused (pausedTime = 0) 
        // and endtime has past, then sale has ended
        } else if (pausedTime == 0 && currentTime() >= endTime) {
            return true;
        // otherwise it is not past and not paused; or paused
        // and as such not ended
        } else {
            return false;
        }
    }



    //
    // WHITELIST
    //

    // Allows ops to add accounts to the whitelist.
    // Only those accounts will be allowed to contribute during the sale.
    // _phase = 1: Can contribute during phases 1 and 2 of the sale.
    // _phase = 2: Can contribute during phase 2 of the sale only.
    // _phase = 0: Cannot contribute at all (not whitelisted).
    function updateWhitelist(address _account, uint8 _phase) external onlyOps returns (bool) {
        require(_account != address(0));
        require(_phase <= 2);
        require(!hasSaleEnded());

        whitelist[_account] = _phase;

        WhitelistUpdated(_account, _phase);

        return true;
    }



    //
    // PURCHASES / CONTRIBUTIONS
    //

    // Allows the admin to set the price for tokens sold during phases 1 and 2 of the sale.
    function setTokensPerKEther(uint256 _tokensPerKEther) external onlyAdmin onlyBeforeSale returns (bool) {
        require(_tokensPerKEther > 0);

        tokensPerKEther = _tokensPerKEther;

        TokensPerKEtherUpdated(_tokensPerKEther);

        return true;
    }


    // Allows the admin to set the maximum amount of tokens that an account can buy during phase 1 of the sale.
    function setPhase1AccountTokensMax(uint256 _tokens) external onlyAdmin onlyBeforeSale returns (bool) {
        require(_tokens > 0);

        phase1AccountTokensMax = _tokens;

        Phase1AccountTokensMaxUpdated(_tokens);

        return true;
    }


    function () external payable whenNotPaused onlyDuringSale {
        buyTokens();
    }


    // This is the main function to process incoming ETH contributions.
    function buyTokens() public payable whenNotPaused onlyDuringSale returns (bool) {
        require(msg.value >= CONTRIBUTION_MIN);
        require(msg.value <= CONTRIBUTION_MAX);
        require(totalTokensSold < TOKENS_SALE);

        // All accounts need to be whitelisted to purchase.
        uint8 whitelistedPhase = whitelist[msg.sender];
        require(whitelistedPhase > 0);

        uint256 tokensMax = TOKENS_SALE.sub(totalTokensSold);

        if (currentTime() < PHASE2_START_TIME) {
            // We are in phase 1 of the sale
            require(whitelistedPhase == 1);

            uint256 accountBalance = tokenContract.balanceOf(msg.sender);

            // Can only purchase up to a maximum per account.
            // Calculate how much of that amount is still available.
            uint256 phase1Balance = phase1AccountTokensMax.sub(accountBalance);

            if (phase1Balance < tokensMax) {
                tokensMax = phase1Balance;
            }
        }

        require(tokensMax > 0);

        uint256 tokensBought = msg.value.mul(tokensPerKEther).div(PURCHASE_DIVIDER);
        require(tokensBought > 0);

        uint256 cost = msg.value;
        uint256 refund = 0;

        if (tokensBought > tokensMax) {
            // Not enough tokens available for full contribution, we will do partial.
            tokensBought = tokensMax;

            // Calculate actual cost for partial amount of tokens.
            cost = tokensBought.mul(PURCHASE_DIVIDER).div(tokensPerKEther);

            // Calculate refund for contributor.
            refund = msg.value.sub(cost);
        }

        totalTokensSold = totalTokensSold.add(tokensBought);

        // Transfer tokens to the account
        require(tokenContract.transfer(msg.sender, tokensBought));

        // Issue a ETH refund for any unused portion of the funds.
        if (refund > 0) {
            msg.sender.transfer(refund);
        }

        // Transfer the contribution to the wallet
        wallet.transfer(msg.value.sub(refund));

        TokensPurchased(msg.sender, cost, tokensBought, totalTokensSold);

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

        return true;
    }


    //
    // PRESALES
    //

    // Allows the admin to record pre-sales, before the public sale starts. Presale base tokens come out of the
    // main sale pool (the 30% allocation) while bonus tokens come from the remaining token pool.
    function addPresale(address _account, uint256 _baseTokens, uint256 _bonusTokens) external onlyAdmin onlyBeforeSale returns (bool) {
        require(_account != address(0));

        // Presales may have 0 bonus tokens but need to have a base amount of tokens sold.
        require(_baseTokens > 0);
        require(_bonusTokens < _baseTokens);

        // We do not count bonus tokens as part of the sale cap.
        totalTokensSold = totalTokensSold.add(_baseTokens);
        require(totalTokensSold <= TOKENS_SALE);

        uint256 ownBalance = tokenContract.balanceOf(address(this));
        require(_baseTokens <= ownBalance);

        totalPresaleBase  = totalPresaleBase.add(_baseTokens);
        totalPresaleBonus = totalPresaleBonus.add(_bonusTokens);

        // Move base tokens to the trustee
        require(tokenContract.transfer(address(trusteeContract), _baseTokens));

        // Presale allocations are marked as locked, they cannot be removed by the owner.
        uint256 tokens = _baseTokens.add(_bonusTokens);
        require(trusteeContract.grantAllocation(_account, tokens, false /* revokable */));

        PresaleAdded(_account, _baseTokens, _bonusTokens);

        return true;
    }


    //
    // PAUSE / UNPAUSE
    //

    // Allows the owner or admin to pause the sale for any reason.
    function pause() public onlyAdmin whenNotPaused {
        require(hasSaleEnded() == false);

        pausedTime = currentTime();

        return super.pause();
    }


    // Unpause may extend the end time of the public sale.
    // Note that we do not extend the start time of each phase.
    // Currently does not extend phase 1 end time, only final end time.
    function unpause() public onlyAdmin whenPaused {

        // If owner unpauses before sale starts, no impact on end time.
        uint256 current = currentTime();

        // If owner unpauses after sale starts, calculate how to extend end.
        if (current > PHASE1_START_TIME) {
            uint256 timeDelta;

            if (pausedTime < PHASE1_START_TIME) {
                // Pause was triggered before the start time, extend by time that
                // passed from proposed start time until now.
                timeDelta = current.sub(PHASE1_START_TIME);
            } else {
                // Pause was triggered while the sale was already started.
                // Extend end time by amount of time since pause.
                timeDelta = current.sub(pausedTime);
            }

            endTime = endTime.add(timeDelta);
        }

        pausedTime = 0;

        return super.unpause();
    }


    // Allows the admin to move bonus tokens still available in the sale contract
    // out before burning all remaining unsold tokens in burnUnsoldTokens().
    // Used to distribute bonuses to token sale participants when the sale has ended
    // and all bonuses are known.
    function reclaimTokens(uint256 _amount) external onlyAfterSale onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));
        require(_amount <= ownBalance);
        
        address tokenOwner = tokenContract.owner();
        require(tokenOwner != address(0));

        require(tokenContract.transfer(tokenOwner, _amount));

        TokensReclaimed(_amount);

        return true;
    }


    // Allows the admin to burn all unsold tokens in the sale contract.
    function burnUnsoldTokens() external onlyAfterSale onlyAdmin returns (bool) {
        uint256 ownBalance = tokenContract.balanceOf(address(this));

        require(tokenContract.burn(ownBalance));

        UnsoldTokensBurnt(ownBalance);

        return true;
    }


    // Allows the admin to finalize the sale and complete allocations.
    // The SimpleToken.admin also needs to finalize the token contract
    // so that token transfers are enabled.
    function finalize() external onlyAdmin returns (bool) {
        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();

        return true;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"PHASE1_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokensPerKEther","type":"uint256"}],"name":"setTokensPerKEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PURCHASE_DIVIDER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CONTRIBUTION_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_ACCELERATOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPresaleBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_adminAddress","type":"address"}],"name":"setAdminAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_SALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PHASE2_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_phase","type":"uint8"}],"name":"updateWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"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":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokens","type":"uint256"}],"name":"setPhase1AccountTokensMax","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_EARLY_BACKERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_account","type":"address"},{"name":"_baseTokens","type":"uint256"},{"name":"_bonusTokens","type":"uint256"}],"name":"addPresale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_opsAddress","type":"address"}],"name":"setOpsAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"reclaimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DECIMALSFACTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"opsAddress","outputs":[{"name":"","type":"address"}],"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":"_wallet","type":"address"}],"name":"changeWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_ADVISORS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalPresaleBase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPerKEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PHASE1_ACCOUNT_TOKENS_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pausedTime","outputs":[{"name":"","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":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"trusteeContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"initiateOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"_currentTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"completeOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"phase1AccountTokensMax","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_PER_KETHER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_FOUNDERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_FUTURE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_trusteeContract","type":"address"},{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_baseTokens","type":"uint256"},{"indexed":false,"name":"_bonusTokens","type":"uint256"}],"name":"PresaleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_account","type":"address"},{"indexed":false,"name":"_phase","type":"uint8"}],"name":"WhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_totalSold","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensPerKEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Phase1AccountTokensMaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newWallet","type":"address"}],"name":"WalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensReclaimed","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":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"AdminAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"OpsAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_proposedOwner","type":"address"}],"name":"OwnershipTransferInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransferCompleted","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526003805460a060020a60ff021916905534156200002057600080fd5b6040516060806200207383398101604052808051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911782559193509150841615156200007557600080fd5b600160a060020a03831615156200008b57600080fd5b600160a060020a0382161515620000a157600080fd5b620000b96401000000006200081e620001e482021704565b635a0ae8d01015620000ca57600080fd5b620001146a2520bb90685948ca1c0000620000ff6a422ca8b0a00a42500000008064010000000062001c52620001e882021704565b9064010000000062001c52620001e882021704565b90506b0295be96e640669720000000620001656a71bff83fbcdcd385e40000620000ff6ab3fe97a2fafd2f4000000081866ac685fa11e01ec6f000000064010000000062001c52620001e882021704565b146200017057600080fd5b5060088054600160a060020a0319908116600160a060020a03938416179091556000600555635a21524f6004556003805460a860020a60ff02191690556236ee8060065569079f905c6fd34e80000060075560098054821694831694909417909355600a80549093169116179055620001ff565b4290565b600082820183811015620001f857fe5b9392505050565b611e64806200020f6000396000f3006060604052600436106102635763ffffffff60e060020a6000350416630e4d591981146102b05780630e9d02cc146102d557806317393f04146102ff57806318821400146103125780631a2309f01461039c57806322bcabcd146103af5780632820d6a5146103c25780632a905318146103d55780632c1e816d146103e85780633197cbb6146104075780633280922b1461041a57806336484ea01461042d57806337ba682d146104405780633f4ba83a146104535780634bb278f3146104685780634d399cb31461047b578063521eb273146104a057806355a373d6146104cf5780635b7f415c146104e25780635c975abb1461050b57806363b201171461051e57806369a68f5f1461053157806369be51bb1461054757806369d0292d1461055a578063707789c51461057f5780637760da7f1461059e5780638129fc1c146105b45780638456cb59146105c75780638bc04eb7146105da5780638da5cb5b146105ed5780638ea6437614610600578063940bb3441461061357806398b9a2dc146106265780639978be95146106455780639b19251a14610658578063a09b7e2b14610677578063a5bc770c1461068a578063a67e91a81461069d578063a6e53b99146106b0578063b2cca39d146106c3578063b3f05b97146106d6578063ba9bb827146106e9578063bb133331146106fc578063c0b6f5611461070f578063d0febe4c1461072e578063d153b60c14610736578063d18e81b314610749578063e71a78111461075c578063e87a9d841461076f578063f527c85614610782578063f653279c14610645578063f92c9b4714610795578063fc6f9468146107a8575b60035460a060020a900460ff161561027a57600080fd5b6102826107bb565b15801561029a5750635a0ae8d061029761081e565b10155b15156102a557600080fd5b6102ad610822565b50005b34156102bb57600080fd5b6102c3610bdb565b60405190815260200160405180910390f35b34156102e057600080fd5b6102eb600435610be3565b604051901515815260200160405180910390f35b341561030a57600080fd5b6102c3610c6f565b341561031d57600080fd5b610325610c75565b60405160208082528190810183818151815260200191508051906020019080838360005b83811015610361578082015183820152602001610349565b50505050905090810190601f16801561038e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103a757600080fd5b6102c3610cac565b34156103ba57600080fd5b6102c3610cba565b34156103cd57600080fd5b6102c3610cc9565b34156103e057600080fd5b610325610ccf565b34156103f357600080fd5b6102eb600160a060020a0360043516610d06565b341561041257600080fd5b6102c3610dd9565b341561042557600080fd5b6102c3610ddf565b341561043857600080fd5b6102c3610dee565b341561044b57600080fd5b6102c3610df6565b341561045e57600080fd5b610466610dfe565b005b341561047357600080fd5b6102eb610eab565b341561048657600080fd5b6102eb600160a060020a036004351660ff60243516610ece565b34156104ab57600080fd5b6104b3610f83565b604051600160a060020a03909116815260200160405180910390f35b34156104da57600080fd5b6104b3610f92565b34156104ed57600080fd5b6104f5610fa1565b60405160ff909116815260200160405180910390f35b341561051657600080fd5b6102eb610fa6565b341561052957600080fd5b6102c3610fb6565b341561053c57600080fd5b6102eb600435610fbc565b341561055257600080fd5b6102c3611048565b341561056557600080fd5b6102eb600160a060020a0360043516602435604435611057565b341561058a57600080fd5b6102eb600160a060020a0360043516611324565b34156105a957600080fd5b6102eb6004356113f7565b34156105bf57600080fd5b6102eb6115e8565b34156105d257600080fd5b61046661177d565b34156105e557600080fd5b6102c36117cf565b34156105f857600080fd5b6104b36117db565b341561060b57600080fd5b6104b36117ea565b341561061e57600080fd5b6102eb6117f9565b341561063157600080fd5b6102eb600160a060020a0360043516611953565b341561065057600080fd5b6102c3611a49565b341561066357600080fd5b6104f5600160a060020a0360043516611a58565b341561068257600080fd5b6102c3611a6d565b341561069557600080fd5b6102c3611a73565b34156106a857600080fd5b6102c3611a79565b34156106bb57600080fd5b6102c3611a89565b34156106ce57600080fd5b6102c3611a97565b34156106e157600080fd5b6102eb611a9d565b34156106f457600080fd5b6102c3611aad565b341561070757600080fd5b6104b3611ab9565b341561071a57600080fd5b6102eb600160a060020a0360043516611ac8565b6102eb610822565b341561074157600080fd5b6104b3611b3d565b341561075457600080fd5b6102c361081e565b341561076757600080fd5b6102eb611b4c565b341561077a57600080fd5b6102c3611bd3565b341561078d57600080fd5b6102c3611bd9565b34156107a057600080fd5b6102c3611be0565b34156107b357600080fd5b6104b3611bef565b600b546000906ac685fa11e01ec6f0000000901015806107e4575060035460a860020a900460ff165b156107f15750600161081b565b60055415801561080a575060045461080761081e565b10155b156108175750600161081b565b5060005b90565b4290565b600080600080600080600080600360149054906101000a900460ff1615151561084a57600080fd5b6108526107bb565b15801561086a5750635a0ae8d061086761081e565b10155b151561087557600080fd5b67016345785d8a000034101561088a57600080fd5b69021e19e0c9bab24000003411156108a157600080fd5b600b546ac685fa11e01ec6f000000090106108bb57600080fd5b600160a060020a0333166000908152600e602052604081205460ff16975087116108e457600080fd5b600b54610903906ac685fa11e01ec6f00000009063ffffffff611bfe16565b9550635a0c3a5061091261081e565b10156109bf57600160ff88161461092857600080fd5b600954600160a060020a03166370a082313360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561098157600080fd5b6102c65a03f1151561099257600080fd5b50505060405180516007549096506109b191508663ffffffff611bfe16565b9350858410156109bf578395505b600086116109cc57600080fd5b6006546109f4906103e8906109e890349063ffffffff611c1016565b9063ffffffff611c3b16565b925060008311610a0357600080fd5b50349050600085831115610a4257600654869350610a2d906109e8856103e863ffffffff611c1016565b9150610a3f348363ffffffff611bfe16565b90505b600b54610a55908463ffffffff611c5216565b600b55600954600160a060020a031663a9059cbb338560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ab757600080fd5b6102c65a03f11515610ac857600080fd5b505050604051805190501515610add57600080fd5b6000811115610b1757600160a060020a03331681156108fc0282604051600060405180830381858888f193505050501515610b1757600080fd5b600854600160a060020a03166108fc610b36348463ffffffff611bfe16565b9081150290604051600060405180830381858888f193505050501515610b5b57600080fd5b33600160a060020a03167f0d1a0d5e3d583a0e92588799dd06e50fd78c07daf05f0cc06d7b848b1ca445f18385600b5460405180848152602001838152602001828152602001935050505060405180910390a2600b546ac685fa11e01ec6f00000001415610bcd57610bcb611c61565b505b600197505050505050505090565b635a0ae8d081565b6000610bee33611cd2565b1515610bf957600080fd5b610c016107bb565b15610c0b57600080fd5b635a0ae8d0610c1861081e565b10610c2257600080fd5b60008211610c2f57600080fd5b60068290557fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab8260405190815260200160405180910390a1506001919050565b6103e881565b60408051908101604052600c81527f53696d706c6520546f6b656e0000000000000000000000000000000000000000602082015281565b69021e19e0c9bab240000081565b6ab3fe97a2fafd2f4000000081565b600d5481565b60408051908101604052600281527f5354000000000000000000000000000000000000000000000000000000000000602082015281565b6000610d1133611d02565b80610d205750610d2033611cd2565b1515610d2b57600080fd5b600054600160a060020a0383811691161415610d4657600080fd5b30600160a060020a031682600160a060020a031614151515610d6757600080fd5b610d7082611d16565b15610d7a57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f17bb0532ac84902a52bb6799529153f5ea501fc54fbcf3ea00dbd42bceb6b0f460405160405180910390a2506001919050565b60045481565b6ac685fa11e01ec6f000000081565b635a0c3a5081565b635a21524f81565b600080610e0a33611cd2565b1515610e1557600080fd5b60035460a060020a900460ff161515610e2d57600080fd5b610e3561081e565b9150635a0ae8d0821115610e9a57635a0ae8d06005541015610e6c57610e6582635a0ae8d063ffffffff611bfe16565b9050610e83565b600554610e8090839063ffffffff611bfe16565b90505b600454610e96908263ffffffff611c5216565b6004555b6000600555610ea7611d43565b5050565b6000610eb633611cd2565b1515610ec157600080fd5b610ec9611c61565b905090565b6000610ed933611d16565b1515610ee457600080fd5b600160a060020a0383161515610ef957600080fd5b600260ff83161115610f0a57600080fd5b610f126107bb565b15610f1c57600080fd5b600160a060020a0383166000818152600e602052604090819020805460ff191660ff86161790557f7ed18aa59a2962897d3e7ed3da887dfb6a03cca6c3cfe8d74e55130f631791c89084905160ff909116815260200160405180910390a250600192915050565b600854600160a060020a031681565b600954600160a060020a031681565b601281565b60035460a060020a900460ff1681565b600b5481565b6000610fc733611cd2565b1515610fd257600080fd5b610fda6107bb565b15610fe457600080fd5b635a0ae8d0610ff161081e565b10610ffb57600080fd5b6000821161100857600080fd5b60078290557f744598cd73b148cd670bce32eb1ef87a62ed5b38792946e86f562d0860213ed48260405190815260200160405180910390a1506001919050565b6a2520bb90685948ca1c000081565b600080600061106533611cd2565b151561107057600080fd5b6110786107bb565b1561108257600080fd5b635a0ae8d061108f61081e565b1061109957600080fd5b600160a060020a03861615156110ae57600080fd5b600085116110bb57600080fd5b8484106110c757600080fd5b600b546110da908663ffffffff611c5216565b600b8190556ac685fa11e01ec6f00000009011156110f757600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561115057600080fd5b6102c65a03f1151561116157600080fd5b50505060405180519250508185111561117957600080fd5b600c5461118c908663ffffffff611c5216565b600c55600d546111a2908563ffffffff611c5216565b600d55600954600a54600160a060020a039182169163a9059cbb91168760006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561120b57600080fd5b6102c65a03f1151561121c57600080fd5b50505060405180519050151561123157600080fd5b611241858563ffffffff611c5216565b600a54909150600160a060020a03166395c8d4ee87836000806040516020015260405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401602060405180830381600087803b15156112ae57600080fd5b6102c65a03f115156112bf57600080fd5b5050506040518051905015156112d457600080fd5b85600160a060020a03167ffdd0298ea259dd9c953110328b22720e53774c2027c9667a5b275dc5e460cb12868660405191825260208201526040908101905180910390a250600195945050505050565b600061132f33611d02565b8061133e575061133e33611cd2565b151561134957600080fd5b600054600160a060020a038381169116141561136457600080fd5b30600160a060020a031682600160a060020a03161415151561138557600080fd5b61138e82611cd2565b1561139857600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557fac46a4511b8366ae3b7cf3cf342e31556274975598dcae03c866f8f0f55d51c460405160405180910390a2506001919050565b6000806000600360159054906101000a900460ff16151561141757600080fd5b61142033611cd2565b151561142b57600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561148457600080fd5b6102c65a03f1151561149557600080fd5b5050506040518051925050818411156114ad57600080fd5b600954600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114f557600080fd5b6102c65a03f1151561150657600080fd5b5050506040518051915050600160a060020a038116151561152657600080fd5b600954600160a060020a031663a9059cbb828660006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561158557600080fd5b6102c65a03f1151561159657600080fd5b5050506040518051905015156115ab57600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8460405190815260200160405180910390a15060019392505050565b60008060006115f633611d02565b151561160157600080fd5b600b541561160e57600080fd5b600c541561161b57600080fd5b600d541561162857600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561168157600080fd5b6102c65a03f1151561169257600080fd5b50505060405180519250506ac685fa11e01ec6f000000082146116b457600080fd5b600954600a54600160a060020a03918216916370a08231911660006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561171457600080fd5b6102c65a03f1151561172557600080fd5b50505060405180519150506a71bff83fbcdcd385e4000081101561174857600080fd5b7f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a160019250505090565b61178633611cd2565b151561179157600080fd5b60035460a060020a900460ff16156117a857600080fd5b6117b06107bb565b156117ba57600080fd5b6117c261081e565b6005556117cd611dbb565b565b670de0b6b3a764000081565b600054600160a060020a031681565b600254600160a060020a031681565b600354600090819060a860020a900460ff16151561181657600080fd5b61181f33611cd2565b151561182a57600080fd5b600954600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561188357600080fd5b6102c65a03f1151561189457600080fd5b5050506040518051600954909250600160a060020a031690506342966c688260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156118f257600080fd5b6102c65a03f1151561190357600080fd5b50505060405180519050151561191857600080fd5b7f8a18a804523143af3d2399b3fdf76bf116e01d31987f8e774d8f1282f013cb7e8160405190815260200160405180910390a1600191505090565b600061195e33611cd2565b151561196957600080fd5b600160a060020a038216151561197e57600080fd5b30600160a060020a031682600160a060020a03161415151561199f57600080fd5b600a54600160a060020a03838116911614156119ba57600080fd5b600954600160a060020a03838116911614156119d557600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384811691909117918290557f3ce716f94fe275e52428cbf6b7f388e5a65976d4edabc34355a77f5e89655bdc9116604051600160a060020a03909116815260200160405180910390a1506001919050565b6a422ca8b0a00a425000000081565b600e6020526000908152604090205460ff1681565b600c5481565b60065481565b6b0295be96e64066972000000081565b69079f905c6fd34e80000081565b60055481565b60035460a860020a900460ff1681565b67016345785d8a000081565b600a54600160a060020a031681565b6000611ad333611d02565b1515611ade57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b600154600160a060020a031681565b60015460009033600160a060020a03908116911614611b6a57600080fd5b6001805460008054600160a060020a0380841673ffffffffffffffffffffffffffffffffffffffff1992831617928390559216909255167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b60075481565b6236ee8081565b6a71bff83fbcdcd385e4000081565b600354600160a060020a031681565b600082821115611c0a57fe5b50900390565b6000828202831580611c2c5750828482811515611c2957fe5b04145b1515611c3457fe5b9392505050565b6000808284811515611c4957fe5b04949350505050565b600082820183811015611c3457fe5b60035460009060a860020a900460ff1615611c7b57600080fd5b6003805475ff000000000000000000000000000000000000000000191660a860020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a150600190565b600354600090600160a060020a031615801590611cfc5750600354600160a060020a038381169116145b92915050565b600054600160a060020a0390811691161490565b600254600090600160a060020a031615801590611cfc575050600254600160a060020a0390811691161490565b611d4c33611cd2565b1515611d5757600080fd5b60035460a060020a900460ff161515611d6f57600080fd5b6003805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b611dc433611cd2565b1515611dcf57600080fd5b60035460a060020a900460ff1615611de657600080fd5b6003805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15600a165627a7a72305820d70335dbd36e2892b2e69a9407bafe127794d39bc50a6ce104a0561861dad2e200290000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca0000000000000000000000004288f043370910c923f7a600526ca8064da05d0d0000000000000000000000002ef2782905830533d218b7ff4d15b8c0981ce84b

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

-----Decoded View---------------
Found 3 constructor arguments :
Arg [0] : 0000000000000000000000002c4e8f2d746113d0696ce89b35f0d8bf88e0aeca
Arg [1] : 0000000000000000000000004288f043370910c923f7a600526ca8064da05d0d
Arg [2] : 0000000000000000000000002ef2782905830533d218b7ff4d15b8c0981ce84b


   Swarm Source:
bzzr://d70335dbd36e2892b2e69a9407bafe127794d39bc50a6ce104a0561861dad2e2

 

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.