Contract Overview |  BloomToken
Balance: 0 Ether
Ether Value: $0
Transactions: 36680 txns
Token Tracker: Bloom (BLT)
 Latest 25 transactions from a total of 36680 transactions

TxHash Age From To Value [TxFee]
0xd48bc20a2ea2994c1505bb1c89ce8102f128c68440f0e972b72ea9b37319818a4 mins ago0x02d4d72b7c492b9aa52174454ef622f22d9e7075  IN   BloomToken0 Ether0.00206355
0x00d965b025834b6c1a913f5a22846ae39941f2f43b99ccfe3aca8e2d1600721855 mins ago0x02d4d72b7c492b9aa52174454ef622f22d9e7075  IN   BloomToken0 Ether0.001196859
0xbda452c854c78197726edfa5ef8a08037c00767d2704d47e5e307f8cc30d91f21 hr 13 mins ago0x02d4d72b7c492b9aa52174454ef622f22d9e7075  IN   BloomToken0 Ether0.000165084
0xa8596c52cc7e872dda6d1c37187c801423c32bdb20cb418fd05d80de31fa9a742 hrs 5 mins ago0x02d4d72b7c492b9aa52174454ef622f22d9e7075  IN   BloomToken0 Ether0.000165084
0x25111b2d5076cf0f568331d4a95fa2b9da25d918beebdf8bf60f0fcfe6ab9f9f2 hrs 7 mins ago0x02d4d72b7c492b9aa52174454ef622f22d9e7075  IN   BloomToken0 Ether0.000247626
0xab51e60e3ae1421cb645b19be8a4314e062fc06a8489f8a8eb531098cff4cc4c5 hrs 2 mins ago0xc0ba17218126f02ff9f6067c0585487eb857e885  IN   BloomToken0 Ether0.000186000006
0xd20fb42b7a1a6ebbe17e34a48faa09c59f1b6523b5cd2c743cf56cc2a1d787ac8 hrs 49 mins ago0x6742bb9590d11ae4b8040ad18ed9ab53d5210eb9  IN   BloomToken0 Ether0.000186000006
0x3d48fe8863b5bb9180eb6d2c975323dd2bb797f85f5a51f824808bef5b2ecac612 hrs 2 mins ago0x467513757ddea55a991de4c9b5e399e51aa7b313  IN   BloomToken0 Ether0.000186000006
0x96ecd8a1356f9a68b7a7dd669e8a8e764f53119e57a79bb91ab74c9019a9215e14 hrs 13 mins ago0xba826fec90cefdf6706858e5fbafcb27a290fbe0  IN   BloomToken0 Ether0.005303928
0x7197e2088089a14df885ad98fbe0a46c42c3c7126a90d595dc39f0ce52152bcf18 hrs 46 mins agoBibox  IN   BloomToken0 Ether0.00213832
0x9d969b7871cf9526241ada3ccabee5bc890332cf572f40af743ae2d9a606f88623 hrs 37 mins ago0x038c19e3e2315aeab4a9d63466a824b557e3d038  IN   BloomToken0 Ether0.001988973
0x20c94a9940bb713b463b63c5771c69223b12f3be25d70a6d6e9bd0e8f79b9f5323 hrs 38 mins ago0x6b260ed42e76aa6c809137e2099346e92c2905b3  IN   BloomToken0 Ether0.001988973
0x239171ec9d56f155e6335f2880b17a42e3dbc8a145147e148125a682e192cab723 hrs 42 mins ago0x80a7a062dd6d7ae9346fb20af4c6d260f4d1eed4  IN   BloomToken0 Ether0.001553853
0x472f37a913b1f0d2785d05166ff16aa1d5ed0bd29b657a8b52ce378d3a7fc94f23 hrs 42 mins ago0x2f008159bf6c38072b62282354fac33e5b4d1598  IN   BloomToken0 Ether0.001988973
0x8febad2cea65df580f548808a3f728f2b88331a5bf736050cefaebf2e361658c23 hrs 43 mins ago0x3231e7239488b68be21eb56356ddc09f6841722f  IN   BloomToken0 Ether0.001986285
0x3b1c0209843a3a0a44b712fe72e89b94399b5bead2fe59a5c36ff872c0bd98da23 hrs 50 mins agoBibox  IN   BloomToken0 Ether0.00189298
0xa96456f7b3b4f8f2de2b56a26a2f7145f4d2b2a9fbe31bbc89ed05a376f7e64123 hrs 50 mins ago0x2fff7fd03280ca1848e2f2866192a3c96f807126  IN   BloomToken0 Ether0.001555197
0x8d05ad8160c077a7ad665a07094bb13aa589aa0e6ef8a77c7ed7a253f1d6147723 hrs 50 mins ago0xd43b6b2fba73352cd98799cfb4c8553f8ec0121c  IN   BloomToken0 Ether0.001555197
0xb652a89e76667cc2e87050a20f8dd1f849fc8561657c830e9c28f6e6fd6efacc23 hrs 50 mins ago0x808269a1a7a3d2e0f007bfab92ab83a00332a1ea  IN   BloomToken0 Ether0.001552509
0x62ff4edb972605ad376bc5754a17df0ca721e238217ec294dda79b1b63faab4523 hrs 50 mins ago0xf5b01277954c1e857e0009dda950d008414adb66  IN   BloomToken0 Ether0.001988973
0xffc9f7d87c4fd2c61642605ab0fbcae3eda2ebbddd6994386b81cdb11f15dafa1 day 3 mins ago0xdf19a1ec84b967f2cf70e4cd4ff4b0beb5b7c386  IN   BloomToken0 Ether0.001552509
0xe679f2cb3ac0825b61a4718511aa3306f0992f3d3bd7f053e8e64fe3f9216c2f1 day 3 mins ago0x87dfa3d8224ccc1e21f49007432df3f31c588d6a  IN   BloomToken0 Ether0.001986285
0xbe3d52fa8793cd07f377d6436f31b083b4c3dea75dfba2bcd377742c5edfe9301 day 1 hr ago0x656ec1e97bab06666cd2d53695a70b00e3f0f843  IN   BloomToken0 Ether0.001553853
0x0481f421b6f86645e84dae54d02bcee86cbff29e53052d59cca54ee630fca0451 day 1 hr ago0xd4e308528c9db16519566db05a09d26ccf3e1372  IN   BloomToken0 Ether0.001986285
0x5d25d1136d5ee5a7d3b2994382dafebeea477654b574637001304d0538b848e71 day 2 hrs ago0xaea01435fd259f9da1b2858b0fd14577c150ea3a  IN   BloomToken0 Ether0.001986285
[ 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
0xdaabd6f3a53022a5ba5f9d74e297ade863e00d9d3645564cbf0caeb9be56363e5481940273 days 6 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb43.40579003 Ether
0x5728bb138d4092d5c4771cca00268ad77c2de6584e4ac71faa37b01dfc453a725289058305 days 15 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.2792 Ether
0xae345de4086a7c0e471a0c9747289d2ee73ddf322470ecfda38be62f2b96e23f5117029334 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x98cc5e509c1e89e8cc76c78f55535345da322935b358ae38afca5cdf9df061865116896334 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xd43c0f0eabcd08ff386ed29b21b6d1661801635f74c9d4d5b59881a5517648095116835334 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x4fce77982a2549f93757a7085f0beb7525cc2b86e03944214ad91abb179747395116810334 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xee10159e9835bccadb0610080d431895fdc322dca9d7d743458a9639d0f7a55c5112433335 days 15 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xe5c7208a8534eb27b31131f9a460e84b07a577a0f799328f2bc8aeaf8728a3e14997645354 days 23 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.0003 Ether
0x122646806d2fea41a97db7fb6403979770b30013705c2589f4de8d14c72414db4996471355 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.001 Ether
0xf03a67648c32953c42c349ca63a411544186d0896710c9cbe2440e69560e39474930853366 days 7 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.09276 Ether
0xc367cbd7dea57b3f969eadcdcf5fd28d7b0d03a3ca13be51cbe780e17b7bbcff4837235383 days 9 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.5 Ether
0x61e2763117824c33d9e903b5c1a6279c29b3b5aca98b30a5b5a0faff397ceef44836060383 days 13 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.05 Ether
0x380252e0862ba2097e6212aa03acd8eae7b17aad56969df34e6472b7101943134832872384 days 2 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.96766138 Ether
0x9f594928c6ed5c11e71e7e6c3745560ff662f5c6e9f73b6c7a3c2c60866314604832409384 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.6 Ether
0xd871598f9e918f52e01aacf4ff8e3d090c0a05d60166ad1d5ebd9a17f67c767d4810127388 days 7 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac2 Ether
0x9adea1f235358d2d30741905fc8f43d13b1927d0a63c3667e8f163148b50c0a74805307388 days 19 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x2b2fefc722dd87bfc329ad36b279255795efc9426bad4d35b9eb589229621c2a4805242388 days 19 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x3f7ac8deca293b0ad618a39308968eb61d07a1bd0af605d1a51e863abfeddd254805215388 days 19 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x5fbd5a07ef5e4b21211350049de20708c2aca5da032fe91c98e2e2f06e0f99f64803081389 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x33e6b6a6ef3dd99bb3bd48b741f7aa3dbc61122a5fa4b5729298400b9f60af8c4783966392 days 8 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.019 Ether
0x256d30d943cd97c04125972e9b2caabe80ac684ad6c3c39be8ca0fb37b5ad7634746095399 days 49 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.39 Ether
0xf21666c10fff1bedc27540803e5bed8e2e9e77b8b30df70061007c09786e46694702795406 days 13 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.48318051 Ether
0x67cba4d653a56b589094cedcd0c2ab978c90e093773070fe1093583a5eeea3644666912412 days 20 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.2924213 Ether
0x5deb87b8c7e8f577c6c663a241ad185122bfd763a10dd114b32410ef502d9dd14666900412 days 20 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.29 Ether
0xa0c7471f4bd3e4dc19123fb55665db16cf2672627558454f997bce9d51005d504666898412 days 20 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.001 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), NestedArrayFunctionCallDecoder (medium-severity), ZeroFunctionSelector (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BLT
Compiler Text: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.13;

library Math {
  function max64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a < b ? a : b;
  }
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

contract TokenController {
    /// @notice Called when `_owner` sends ether to the MiniMe Token contract
    /// @param _owner The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
    function proxyPayment(address _owner) payable returns(bool);

    /// @notice Notifies the controller about a token transfer allowing the
    ///  controller to react if desired
    /// @param _from The origin of the transfer
    /// @param _to The destination of the transfer
    /// @param _amount The amount of the transfer
    /// @return False if the controller does not authorize the transfer
    function onTransfer(address _from, address _to, uint _amount) returns(bool);

    /// @notice Notifies the controller about an approval allowing the
    ///  controller to react if desired
    /// @param _owner The address that calls `approve()`
    /// @param _spender The spender in the `approve()` call
    /// @param _amount The amount in the `approve()` call
    /// @return False if the controller does not authorize the approval
    function onApprove(address _owner, address _spender, uint _amount)
        returns(bool);
}

contract Controlled {
    /// @notice The address of the controller is the only address that can call
    ///  a function with this modifier
    modifier onlyController { require(msg.sender == controller); _; }

    address public controller;

    function Controlled() { controller = msg.sender;}

    /// @notice Changes the controller of the contract
    /// @param _newController The new controller of the contract
    function changeController(address _newController) onlyController {
        controller = _newController;
    }
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 _amount, address _token, bytes _data);
}

contract MiniMeToken is Controlled {

    string public name;                //The Token's name: e.g. DigixDAO Tokens
    uint8 public decimals;             //Number of decimals of the smallest unit
    string public symbol;              //An identifier: e.g. REP
    string public version = 'MMT_0.1'; //An arbitrary versioning scheme


    /// @dev `Checkpoint` is the structure that attaches a block number to a
    ///  given value, the block number attached is the one that last changed the
    ///  value
    struct  Checkpoint {

        // `fromBlock` is the block number that the value was generated from
        uint128 fromBlock;

        // `value` is the amount of tokens at a specific block number
        uint128 value;
    }

    // `parentToken` is the Token address that was cloned to produce this token;
    //  it will be 0x0 for a token that was not cloned
    MiniMeToken public parentToken;

    // `parentSnapShotBlock` is the block number from the Parent Token that was
    //  used to determine the initial distribution of the Clone Token
    uint public parentSnapShotBlock;

    // `creationBlock` is the block number that the Clone Token was created
    uint public creationBlock;

    // `balances` is the map that tracks the balance of each address, in this
    //  contract when the balance changes the block number that the change
    //  occurred is also included in the map
    mapping (address => Checkpoint[]) balances;

    // `allowed` tracks any extra transfer rights as in all ERC20 tokens
    mapping (address => mapping (address => uint256)) allowed;

    // Tracks the history of the `totalSupply` of the token
    Checkpoint[] totalSupplyHistory;

    // Flag that determines if the token is transferable or not.
    bool public transfersEnabled;

    // The factory used to create new clone tokens
    MiniMeTokenFactory public tokenFactory;

////////////////
// Constructor
////////////////

    /// @notice Constructor to create a MiniMeToken
    /// @param _tokenFactory The address of the MiniMeTokenFactory contract that
    ///  will create the Clone token contracts, the token factory needs to be
    ///  deployed first
    /// @param _parentToken Address of the parent token, set to 0x0 if it is a
    ///  new token
    /// @param _parentSnapShotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token, set to 0 if it
    ///  is a new token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    function MiniMeToken(
        address _tokenFactory,
        address _parentToken,
        uint _parentSnapShotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) {
        tokenFactory = MiniMeTokenFactory(_tokenFactory);
        name = _tokenName;                                 // Set the name
        decimals = _decimalUnits;                          // Set the decimals
        symbol = _tokenSymbol;                             // Set the symbol
        parentToken = MiniMeToken(_parentToken);
        parentSnapShotBlock = _parentSnapShotBlock;
        transfersEnabled = _transfersEnabled;
        creationBlock = block.number;
    }


///////////////////
// ERC20 Methods
///////////////////

    /// @notice Send `_amount` tokens to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _amount) returns (bool success) {
        require(transfersEnabled);
        return doTransfer(msg.sender, _to, _amount);
    }

    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
    ///  is approved by `_from`
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(address _from, address _to, uint256 _amount
    ) returns (bool success) {

        // The controller of this contract can move tokens around at will,
        //  this is important to recognize! Confirm that you trust the
        //  controller of this contract, which in most situations should be
        //  another open source smart contract or 0x0
        if (msg.sender != controller) {
            require(transfersEnabled);

            // The standard ERC 20 transferFrom functionality
            if (allowed[_from][msg.sender] < _amount) return false;
            allowed[_from][msg.sender] -= _amount;
        }
        return doTransfer(_from, _to, _amount);
    }

    /// @dev This is the actual transfer function in the token contract, it can
    ///  only be called by other functions in this contract.
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function doTransfer(address _from, address _to, uint _amount
    ) internal returns(bool) {

           if (_amount == 0) {
               return true;
           }

           require(parentSnapShotBlock < block.number);

           // Do not allow transfer to 0x0 or the token contract itself
           require((_to != 0) && (_to != address(this)));

           // If the amount being transfered is more than the balance of the
           //  account the transfer returns false
           var previousBalanceFrom = balanceOfAt(_from, block.number);
           if (previousBalanceFrom < _amount) {
               return false;
           }

           // Alerts the token controller of the transfer
           if (isContract(controller)) {
               require(TokenController(controller).onTransfer(_from, _to, _amount));
           }

           // First update the balance array with the new value for the address
           //  sending the tokens
           updateValueAtNow(balances[_from], previousBalanceFrom - _amount);

           // Then update the balance array with the new value for the address
           //  receiving the tokens
           var previousBalanceTo = balanceOfAt(_to, block.number);
           require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
           updateValueAtNow(balances[_to], previousBalanceTo + _amount);

           // An event to make the transfer easy to find on the blockchain
           Transfer(_from, _to, _amount);

           return true;
    }

    /// @param _owner The address that's balance is being requested
    /// @return The balance of `_owner` at the current block
    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balanceOfAt(_owner, block.number);
    }

    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address _spender, uint256 _amount) returns (bool success) {
        require(transfersEnabled);

        // To change the approve amount you first have to reduce the addresses`
        //  allowance to zero by calling `approve(_spender,0)` if it is not
        //  already 0 to mitigate the race condition described here:
        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((_amount == 0) || (allowed[msg.sender][_spender] == 0));

        // Alerts the token controller of the approve function call
        if (isContract(controller)) {
            require(TokenController(controller).onApprove(msg.sender, _spender, _amount));
        }

        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }

    /// @dev This function makes it easy to read the `allowed[]` map
    /// @param _owner The address of the account that owns the token
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens of _owner that _spender is allowed
    ///  to spend
    function allowance(address _owner, address _spender
    ) constant returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `_spender`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param _spender The address of the contract able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(address _spender, uint256 _amount, bytes _extraData
    ) returns (bool success) {
        require(approve(_spender, _amount));

        ApproveAndCallFallBack(_spender).receiveApproval(
            msg.sender,
            _amount,
            this,
            _extraData
        );

        return true;
    }

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply() constant returns (uint) {
        return totalSupplyAt(block.number);
    }


////////////////
// Query balance and totalSupply in History
////////////////

    /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
    /// @param _owner The address from which the balance will be retrieved
    /// @param _blockNumber The block number when the balance is queried
    /// @return The balance at `_blockNumber`
    function balanceOfAt(address _owner, uint _blockNumber) constant
        returns (uint) {

        // These next few lines are used when the balance of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.balanceOfAt` be queried at the
        //  genesis block for that token as this contains initial balance of
        //  this token
        if ((balances[_owner].length == 0)
            || (balances[_owner][0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
            } else {
                // Has no parent
                return 0;
            }

        // This will return the expected balance during normal situations
        } else {
            return getValueAt(balances[_owner], _blockNumber);
        }
    }

    /// @notice Total amount of tokens at a specific `_blockNumber`.
    /// @param _blockNumber The block number when the totalSupply is queried
    /// @return The total amount of tokens at `_blockNumber`
    function totalSupplyAt(uint _blockNumber) constant returns(uint) {

        // These next few lines are used when the totalSupply of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.totalSupplyAt` be queried at the
        //  genesis block for this token as that contains totalSupply of this
        //  token at this block number.
        if ((totalSupplyHistory.length == 0)
            || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
            } else {
                return 0;
            }

        // This will return the expected totalSupply during normal situations
        } else {
            return getValueAt(totalSupplyHistory, _blockNumber);
        }
    }

////////////////
// Clone Token Method
////////////////

    /// @notice Creates a new clone token with the initial distribution being
    ///  this token at `_snapshotBlock`
    /// @param _cloneTokenName Name of the clone token
    /// @param _cloneDecimalUnits Number of decimals of the smallest unit
    /// @param _cloneTokenSymbol Symbol of the clone token
    /// @param _snapshotBlock Block when the distribution of the parent token is
    ///  copied to set the initial distribution of the new clone token;
    ///  if the block is zero than the actual block, the current block is used
    /// @param _transfersEnabled True if transfers are allowed in the clone
    /// @return The address of the new MiniMeToken Contract
    function createCloneToken(
        string _cloneTokenName,
        uint8 _cloneDecimalUnits,
        string _cloneTokenSymbol,
        uint _snapshotBlock,
        bool _transfersEnabled
        ) returns(address) {
        if (_snapshotBlock == 0) _snapshotBlock = block.number;
        MiniMeToken cloneToken = tokenFactory.createCloneToken(
            this,
            _snapshotBlock,
            _cloneTokenName,
            _cloneDecimalUnits,
            _cloneTokenSymbol,
            _transfersEnabled
            );

        cloneToken.changeController(msg.sender);

        // An event to make the token easy to find on the blockchain
        NewCloneToken(address(cloneToken), _snapshotBlock);
        return address(cloneToken);
    }

////////////////
// Generate and destroy tokens
////////////////

    /// @notice Generates `_amount` tokens that are assigned to `_owner`
    /// @param _owner The address that will be assigned the new tokens
    /// @param _amount The quantity of tokens generated
    /// @return True if the tokens are generated correctly
    function generateTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
        uint previousBalanceTo = balanceOf(_owner);
        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
        updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
        updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
        Transfer(0, _owner, _amount);
        return true;
    }


    /// @notice Burns `_amount` tokens from `_owner`
    /// @param _owner The address that will lose the tokens
    /// @param _amount The quantity of tokens to burn
    /// @return True if the tokens are burned correctly
    function destroyTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply >= _amount);
        uint previousBalanceFrom = balanceOf(_owner);
        require(previousBalanceFrom >= _amount);
        updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
        updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);
        Transfer(_owner, 0, _amount);
        return true;
    }

////////////////
// Enable tokens transfers
////////////////


    /// @notice Enables token holders to transfer their tokens freely if true
    /// @param _transfersEnabled True if transfers are allowed in the clone
    function enableTransfers(bool _transfersEnabled) onlyController {
        transfersEnabled = _transfersEnabled;
    }

////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////

    /// @dev `getValueAt` retrieves the number of tokens at a given block number
    /// @param checkpoints The history of values being queried
    /// @param _block The block number to retrieve the value at
    /// @return The number of tokens being queried
    function getValueAt(Checkpoint[] storage checkpoints, uint _block
    ) constant internal returns (uint) {
        if (checkpoints.length == 0) return 0;

        // Shortcut for the actual value
        if (_block >= checkpoints[checkpoints.length-1].fromBlock)
            return checkpoints[checkpoints.length-1].value;
        if (_block < checkpoints[0].fromBlock) return 0;

        // Binary search of the value in the array
        uint min = 0;
        uint max = checkpoints.length-1;
        while (max > min) {
            uint mid = (max + min + 1)/ 2;
            if (checkpoints[mid].fromBlock<=_block) {
                min = mid;
            } else {
                max = mid-1;
            }
        }
        return checkpoints[min].value;
    }

    /// @dev `updateValueAtNow` used to update the `balances` map and the
    ///  `totalSupplyHistory`
    /// @param checkpoints The history of data being updated
    /// @param _value The new number of tokens
    function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value
    ) internal  {
        if ((checkpoints.length == 0)
        || (checkpoints[checkpoints.length -1].fromBlock < block.number)) {
               Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ];
               newCheckPoint.fromBlock =  uint128(block.number);
               newCheckPoint.value = uint128(_value);
           } else {
               Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
               oldCheckPoint.value = uint128(_value);
           }
    }

    /// @dev Internal function to determine if an address is a contract
    /// @param _addr The address being queried
    /// @return True if `_addr` is a contract
    function isContract(address _addr) constant internal returns(bool) {
        uint size;
        if (_addr == 0) return false;
        assembly {
            size := extcodesize(_addr)
        }
        return size>0;
    }

    /// @dev Helper function to return a min betwen the two uints
    function min(uint a, uint b) internal returns (uint) {
        return a < b ? a : b;
    }

    /// @notice The fallback function: If the contract's controller has not been
    ///  set to 0, then the `proxyPayment` method is called which relays the
    ///  ether and creates tokens as described in the token controller contract
    function ()  payable {
        require(isContract(controller));
        require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender));
    }

//////////
// Safety Methods
//////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) onlyController {
        if (_token == 0x0) {
            controller.transfer(this.balance);
            return;
        }

        MiniMeToken token = MiniMeToken(_token);
        uint balance = token.balanceOf(this);
        token.transfer(controller, balance);
        ClaimedTokens(_token, controller, balance);
    }

////////////////
// Events
////////////////
    event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
    event Transfer(address indexed _from, address indexed _to, uint256 _amount);
    event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock);
    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _amount
        );

}

contract MiniMeTokenFactory {

    /// @notice Update the DApp by creating a new token with new functionalities
    ///  the msg.sender becomes the controller of this clone token
    /// @param _parentToken Address of the token being cloned
    /// @param _snapshotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    /// @return The address of the new token contract
    function createCloneToken(
        address _parentToken,
        uint _snapshotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) returns (MiniMeToken) {
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
            );

        newToken.changeController(msg.sender);
        return newToken;
    }
}

contract MiniMeVestedToken is MiniMeToken {
  using SafeMath for uint256;
  using Math for uint64;

  struct TokenGrant {
    address granter;     // 20 bytes
    uint256 value;       // 32 bytes
    uint64 cliff;
    uint64 vesting;
    uint64 start;        // 3 * 8 = 24 bytes
    bool revokable;
    bool burnsOnRevoke;  // 2 * 1 = 2 bits? or 2 bytes?
  } // total 78 bytes = 3 sstore per operation (32 per sstore)

  event NewTokenGrant(address indexed from, address indexed to, uint256 value, uint256 grantId);

  mapping (address => TokenGrant[]) public grants;

  mapping (address => bool) public canCreateGrants;
  address public vestingWhitelister;

  modifier canTransfer(address _sender, uint _value) {
    require(spendableBalanceOf(_sender) >= _value);
    _;
  }

  modifier onlyVestingWhitelister {
    require(msg.sender == vestingWhitelister);
    _;
  }

  function MiniMeVestedToken (
      address _tokenFactory,
      address _parentToken,
      uint _parentSnapShotBlock,
      string _tokenName,
      uint8 _decimalUnits,
      string _tokenSymbol,
      bool _transfersEnabled
  ) public
    MiniMeToken(_tokenFactory, _parentToken, _parentSnapShotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled) {
    vestingWhitelister = msg.sender;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  // @dev Add canTransfer modifier before allowing transfer and transferFrom to go through
  function transfer(address _to, uint _value)
           public
           canTransfer(msg.sender, _value)
           returns (bool success) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint _value)
           public
           canTransfer(_from, _value)
           returns (bool success) {
    return super.transferFrom(_from, _to, _value);
  }

  function spendableBalanceOf(address _holder) public constant returns (uint) {
    return transferableTokens(_holder, uint64(now)); // solhint-disable not-rely-on-time
  }

  /**
   * @dev Grant tokens to a specified address
   * @param _to address The address which the tokens will be granted to.
   * @param _value uint256 The amount of tokens to be granted.
   * @param _start uint64 Time of the beginning of the grant.
   * @param _cliff uint64 Time of the cliff period.
   * @param _vesting uint64 The vesting period.
   */
  function grantVestedTokens(
    address _to,
    uint256 _value,
    uint64 _start,
    uint64 _cliff,
    uint64 _vesting,
    bool _revokable,
    bool _burnsOnRevoke
  ) public {
    // Check start, cliff and vesting are properly order to ensure correct functionality of the formula.
    require(_cliff >= _start);
    require(_vesting >= _cliff);

    require(canCreateGrants[msg.sender]);
    require(tokenGrantsCount(_to) < 20);   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    TokenGrant memory grant = TokenGrant(
      _revokable ? msg.sender : 0,
      _value,
      _cliff,
      _vesting,
      _start,
      _revokable,
      _burnsOnRevoke
    );

    uint256 count = grants[_to].push(grant);

    assert(transfer(_to, _value));

    NewTokenGrant(msg.sender, _to, _value, count - 1);
  }

  function setCanCreateGrants(address _addr, bool _allowed)
           public onlyVestingWhitelister {
    doSetCanCreateGrants(_addr, _allowed);
  }

  function changeVestingWhitelister(address _newWhitelister) public onlyVestingWhitelister {
    require(_newWhitelister != 0);
    doSetCanCreateGrants(vestingWhitelister, false);
    vestingWhitelister = _newWhitelister;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _receiver Recipient of revoked tokens.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, address _receiver, uint256 _grantId) public onlyVestingWhitelister {
    require(_receiver != 0);

    TokenGrant storage grant = grants[_holder][_grantId];

    require(grant.revokable);
    require(grant.granter == msg.sender); // Only granter can revoke it

    address receiver = grant.burnsOnRevoke ? 0xdead : _receiver;

    uint256 nonVested = nonVestedTokens(grant, uint64(now));

    // remove grant from array
    delete grants[_holder][_grantId];
    grants[_holder][_grantId] = grants[_holder][grants[_holder].length.sub(1)];
    grants[_holder].length -= 1;

    doTransfer(_holder, receiver, nonVested);
  }

  /**
   * @dev Check the amount of grants that an address has.
   * @param _holder The holder of the grants.
   * @return A uint256 representing the total amount of grants.
   */
  function tokenGrantsCount(address _holder) public constant returns (uint index) {
    return grants[_holder].length;
  }

  /**
   * @dev Get all information about a specific grant.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   * @return Returns all the values that represent a TokenGrant(address, value, start, cliff,
   * revokability, burnsOnRevoke, and vesting) plus the vested value at the current time.
   */
  function tokenGrant(address _holder, uint256 _grantId) public constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant storage grant = grants[_holder][_grantId];

    granter = grant.granter;
    value = grant.value;
    start = grant.start;
    cliff = grant.cliff;
    vesting = grant.vesting;
    revokable = grant.revokable;
    burnsOnRevoke = grant.burnsOnRevoke;

    vested = vestedTokens(grant, uint64(now));
  }

  // @dev The date in which all tokens are transferable for the holder
  // Useful for displaying purposes (not used in any logic calculations)
  function lastTokenIsTransferableDate(address holder) public constant returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = tokenGrantsCount(holder);
    for (uint256 i = 0; i < grantIndex; i++) {
      date = grants[holder][i].vesting.max64(date);
    }
    return date;
  }

  // @dev How many tokens can a holder transfer at a point in time
  function transferableTokens(address holder, uint64 time) public constant returns (uint256) {
    uint256 grantIndex = tokenGrantsCount(holder);

    if (grantIndex == 0) return balanceOf(holder); // shortcut for holder without grants

    // Iterate through all the grants the holder has, and add all non-vested tokens
    uint256 nonVested = 0;
    for (uint256 i = 0; i < grantIndex; i++) {
      nonVested = nonVested.add(nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    return balanceOf(holder).sub(nonVested);
  }

  function doSetCanCreateGrants(address _addr, bool _allowed)
           internal {
    canCreateGrants[_addr] = _allowed;
  }

  /**
   * @dev Calculate amount of vested tokens at a specific time
   * @param tokens uint256 The amount of tokens granted
   * @param time uint64 The time to be checked
   * @param start uint64 The time representing the beginning of the grant
   * @param cliff uint64  The cliff period, the period before nothing can be paid out
   * @param vesting uint64 The vesting period
   * @return An uint256 representing the amount of vested tokens of a specific grant
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Cliff    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) internal constant returns (uint256)
    {

    // Shortcuts for before cliff and after vesting cases.
    if (time < cliff) return 0;
    if (time >= vesting) return tokens;

    // Interpolate all vested tokens.
    // As before cliff the shortcut returns 0, we can use just this function to
    // calculate it.

    // vested = tokens * (time - start) / (vesting - start)
    uint256 vested = tokens.mul(
                             time.sub(start)
                           ).div(vesting.sub(start));

    return vested;
  }

  /**
   * @dev Calculate the amount of non vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time uint64 The time to be checked
   * @return An uint256 representing the amount of non vested tokens of a specific grant on the
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant storage grant, uint64 time) internal constant returns (uint256) {
    // Of all the tokens of the grant, how many of them are not vested?
    // grantValue - vestedTokens
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @dev Get the amount of vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time The time to be checked
   * @return An uint256 representing the amount of vested tokens of a specific grant at a specific time.
   */
  function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return calculateVestedTokens(
      grant.value,
      uint256(time),
      uint256(grant.start),
      uint256(grant.cliff),
      uint256(grant.vesting)
    );
  }
}

contract BLT is MiniMeVestedToken {
  function BLT(address _tokenFactory) public MiniMeVestedToken(
    _tokenFactory,
    0x0,           // no parent token
    0,             // no snapshot block number from parent
    "Bloom Token", // Token name
    18,            // Decimals
    "BLT",         // Symbol
    true           // Enable transfers
  ) {} // solhint-disable-line no-empty-blocks
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"spendableBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canCreateGrants","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_allowed","type":"bool"}],"name":"setCanCreateGrants","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"grants","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"start","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"tokenGrant","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"vested","type":"uint256"},{"name":"start","type":"uint64"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"lastTokenIsTransferableDate","outputs":[{"name":"date","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_start","type":"uint64"},{"name":"_cliff","type":"uint64"},{"name":"_vesting","type":"uint64"},{"name":"_revokable","type":"bool"},{"name":"_burnsOnRevoke","type":"bool"}],"name":"grantVestedTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_receiver","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"time","type":"uint64"}],"name":"transferableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vestingWhitelister","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newWhitelister","type":"address"}],"name":"changeVestingWhitelister","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"grantId","type":"uint256"}],"name":"NewTokenGrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405260408051908101604052600781527f4d4d545f302e3100000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000219565b5034156200005a57600080fd5b60405160208062002ed3833981016040528080519150505b806000806040805190810160405280600b81526020017f426c6f6f6d20546f6b656e000000000000000000000000000000000000000000815250601260408051908101604052600381527f424c540000000000000000000000000000000000000000000000000000000000602082015260015b868686868686865b5b60008054600160a060020a03191633600160a060020a03161790555b600b805461010060a860020a031916610100600160a060020a038a160217905560018480516200013f92916020019062000219565b506002805460ff191660ff851617905560038280516200016492916020019062000219565b5060058054600160a060020a031916600160a060020a0388161790556006859055600b805460ff1916821515179055436007555b5050600e8054600160a060020a03191633600160a060020a039081169190911791829055620001e096501693506001925050640100000000620001f081026200234a17049050565b5b505050505050505b50620002c3565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025c57805160ff19168380011785556200028c565b828001600101855582156200028c579182015b828111156200028c5782518255916020019190600101906200026f565b5b506200029b9291506200029f565b5090565b620002c091905b808211156200029b5760008155600101620002a6565b5090565b90565b612c0080620002d36000396000f300606060405236156101b15763ffffffff60e060020a60003504166302a72a4c811461025857806306fdde0314610289578063095ea7b3146103145780630f8f8b831461034a578063176345141461037b57806318160ddd146103a057806318cd55f3146103c55780631f9a391c146103f857806323b872dd1461041e5780632c71e60a1461045a578063313ce567146104d55780633cebb823146104fe5780634ee2cd7e1461051f57806354fd4d5014610553578063600e85b7146105de5780636638c0871461065f5780636c182e991461072357806370a082311461075f57806380a5400114610790578063827f32c0146107bf57806395d89b41146107f55780639754a4d914610880578063981b24d0146108c7578063a9059cbb146108ef578063b0cf0dcb14610925578063bef97c871461094f578063c5bcc4f114610976578063cae9ca511461099b578063d347c20514610a14578063d3ce77fe14610a52578063dd62ed3e14610a88578063df8de3e714610abf578063dfae7dc114610ae0578063e77772fe14610b0f578063f41e60c514610b3e578063f77c479114610b58578063fb13a70714610b87575b5b6000546101c790600160a060020a0316610ba8565b15156101d257600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b151561022e57600080fd5b6125ee5a03f1151561023f57600080fd5b5050505060405180519050151561025557600080fd5b5b005b341561026357600080fd5b610277600160a060020a0360043516610bd5565b60405190815260200160405180910390f35b341561029457600080fd5b61029c610bf4565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031f57600080fd5b610336600160a060020a0360043516602435610c92565b604051901515815260200160405180910390f35b341561035557600080fd5b610277600160a060020a0360043516610dfc565b60405190815260200160405180910390f35b341561038657600080fd5b610277610e10565b60405190815260200160405180910390f35b34156103ab57600080fd5b610277610e16565b60405190815260200160405180910390f35b34156103d057600080fd5b610336600160a060020a0360043516610e27565b604051901515815260200160405180910390f35b341561040357600080fd5b610255600160a060020a03600435166024351515610e3c565b005b341561042957600080fd5b610336600160a060020a0360043581169060243516604435610e67565b604051901515815260200160405180910390f35b341561046557600080fd5b61047c600160a060020a0360043516602435610e98565b604051600160a060020a039097168752602087019590955267ffffffffffffffff93841660408088019190915292841660608701529216608085015290151560a084015290151560c083015260e0909101905180910390f35b34156104e057600080fd5b6104e8610f1e565b60405160ff909116815260200160405180910390f35b341561050957600080fd5b610255600160a060020a0360043516610f27565b005b341561052a57600080fd5b610277600160a060020a0360043516602435610f62565b60405190815260200160405180910390f35b341561055e57600080fd5b61029c6110a8565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105e957600080fd5b610600600160a060020a0360043516602435611146565b604051600160a060020a039098168852602088019690965260408088019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c084015290151560e0830152610100909101905180910390f35b341561066a57600080fd5b61070760046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050843594602001351515935061129392505050565b604051600160a060020a03909116815260200160405180910390f35b341561072e57600080fd5b610742600160a060020a03600435166114c3565b60405167ffffffffffffffff909116815260200160405180910390f35b341561076a57600080fd5b610277600160a060020a036004351661154e565b60405190815260200160405180910390f35b341561079b57600080fd5b610707611562565b604051600160a060020a03909116815260200160405180910390f35b34156107ca57600080fd5b610336600160a060020a0360043516602435611571565b604051901515815260200160405180910390f35b341561080057600080fd5b61029c611644565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561088b57600080fd5b610255600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c43515156116e2565b005b34156108d257600080fd5b6102776004356119a7565b60405190815260200160405180910390f35b34156108fa57600080fd5b610336600160a060020a0360043516602435611a9f565b604051901515815260200160405180910390f35b341561093057600080fd5b610255600160a060020a0360043581169060243516604435611ace565b005b341561095a57600080fd5b610336611de5565b604051901515815260200160405180910390f35b341561098157600080fd5b610277611dee565b60405190815260200160405180910390f35b34156109a657600080fd5b61033660048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611df495505050505050565b604051901515815260200160405180910390f35b3415610a1f57600080fd5b610277600160a060020a036004351667ffffffffffffffff60243516611f12565b60405190815260200160405180910390f35b3415610a5d57600080fd5b610336600160a060020a0360043516602435611fca565b604051901515815260200160405180910390f35b3415610a9357600080fd5b610277600160a060020a0360043581169060243516612097565b60405190815260200160405180910390f35b3415610aca57600080fd5b610255600160a060020a03600435166120c4565b005b3415610aeb57600080fd5b610707612271565b604051600160a060020a03909116815260200160405180910390f35b3415610b1a57600080fd5b610707612280565b604051600160a060020a03909116815260200160405180910390f35b3415610b4957600080fd5b6102556004351515612294565b005b3415610b6357600080fd5b6107076122c2565b604051600160a060020a03909116815260200160405180910390f35b3415610b9257600080fd5b610255600160a060020a03600435166122d1565b005b600080600160a060020a0383161515610bc45760009150610bcf565b823b90506000811191505b50919050565b600160a060020a0381166000908152600c60205260409020545b919050565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b600b5460009060ff161515610ca657600080fd5b811580610cd65750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b1515610ce157600080fd5b600054610cf690600160a060020a0316610ba8565b15610d915760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610d6b57600080fd5b6102c65a03f11515610d7c57600080fd5b505050604051805190501515610d9157600080fd5b5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000610e088242611f12565b90505b919050565b60075481565b6000610e21436119a7565b90505b90565b600d6020526000908152604090205460ff1681565b600e5433600160a060020a03908116911614610e5757600080fd5b610e61828261234a565b5b5b5050565b6000838280610e7583610dfc565b1015610e8057600080fd5b610e8b868686612373565b92505b5b50509392505050565b600c60205281600052604060002081815481101515610eb357fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60025460ff1681565b60005433600160a060020a03908116911614610f4257600080fd5b60008054600160a060020a031916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600860205260408120541580610fc25750600160a060020a038316600090815260086020526040812080548492908110610fa757fe5b906000526020600020900160005b50546001608060020a0316115b1561107857600554600160a060020a03161561106b57600554600654600160a060020a0390911690634ee2cd7e908590610ffd908690612415565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104957600080fd5b6102c65a03f1151561105a57600080fd5b505050604051805190509050610df6565b506000610df6565b610df6565b600160a060020a038316600090815260086020526040902061109a908361242f565b9050610df6565b5b92915050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6000806000806000806000806000600c60008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561118657fe5b906000526020600020906003020160005b50805460018201546002830154600160a060020a039092169b50995067ffffffffffffffff608060020a820481169850808216975068010000000000000000820416955060ff60c060020a82048116955060c860020a90910416925090506112828160e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015242612589565b96505b509295985092959890939650565b6000808315156112a1574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b838110156113455780820151818401525b60200161132c565b50505050905090810190601f1680156113725780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156113a95780820151818401525b602001611390565b50505050905090810190601f1680156113d65780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15156113fa57600080fd5b6102c65a03f1151561140b57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561146457600080fd5b6102c65a03f1151561147557600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a28091505b5095945050505050565b426000806114d084610bd5565b9150600090505b8181101561154657600160a060020a0384166000908152600c60205260409020805461153b9185918490811061150957fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff16906125d9565b92505b6001016114d7565b5b5050919050565b6000610e088243610f62565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a0390811691161461159157600080fd5b611599610e16565b9150838201829010156115ab57600080fd5b6115b48561154e565b9050838101819010156115c657600080fd5b6115d3600a858401612608565b600160a060020a03851660009081526008602052604090206115f790828601612608565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6116ea612a92565b600067ffffffffffffffff808816908716101561170657600080fd5b67ffffffffffffffff808716908616101561172057600080fd5b600160a060020a0333166000908152600d602052604090205460ff16151561174757600080fd5b60146117528a610bd5565b1061175c57600080fd5b60e06040519081016040528085611774576000611776565b335b600160a060020a031681526020018981526020018767ffffffffffffffff1681526020018667ffffffffffffffff1681526020018867ffffffffffffffff16815260200185151581526020018415158152509150600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002080548060010182816118019190612ace565b916000526020600020906003020160005b50839081518154600160a060020a031916600160a060020a039190911617815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a082015160028201805491151560c060020a0278ff0000000000000000000000000000000000000000000000001990921691909117905560c08201516002909101805491151560c860020a0279ff00000000000000000000000000000000000000000000000000199092169190911790555090506119428989611a9f565b151561194a57fe5b88600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8a6001850360405191825260208201526040908101905180910390a35b505050505050505050565b600a5460009015806119e0575081600a60008154811015156119c557fe5b906000526020600020900160005b50546001608060020a0316115b15611a8757600554600160a060020a031615611a7a57600554600654600160a060020a039091169063981b24d090611a19908590612415565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a5857600080fd5b6102c65a03f11515611a6957600080fd5b505050604051805190509050610bef565b506000610bef565b610bef565b611a92600a8361242f565b9050610bef565b5b919050565b6000338280611aad83610dfc565b1015611ab857600080fd5b611ac285856126f1565b92505b5b505092915050565b600e546000908190819033600160a060020a03908116911614611af057600080fd5b600160a060020a0385161515611b0557600080fd5b600160a060020a0386166000908152600c60205260409020805485908110611b2957fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611b5857600080fd5b825433600160a060020a03908116911614611b7257600080fd5b600283015460c860020a900460ff16611b8b5784611b8f565b61dead5b9150611b9b8342612719565b600160a060020a0387166000908152600c6020526040902080549192509085908110611bc357fe5b906000526020600020906003020160005b508054600160a060020a0319168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a0388168152600c6020526040902080549091611c3c919063ffffffff6127c516565b81548110611c4657fe5b906000526020600020906003020160005b50600160a060020a0387166000908152600c60205260409020805486908110611c7c57fe5b906000526020600020906003020160005b5081548154600160a060020a031916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff00000000000000000000000000000000000000000000000000199092169190911790915586166000908152600c6020526040902080546000190190611dce9082612ace565b50611dda8683836127dc565b505b5b505050505050565b600b5460ff1681565b60065481565b6000611e008484610c92565b1515611e0b57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611ea45780820151818401525b602001611e8b565b50505050905090810190601f168015611ed15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515611ef257600080fd5b6102c65a03f11515611f0357600080fd5b505050600190505b9392505050565b600080600080611f2186610bd5565b9250821515611f3a57611f338661154e565b9350611fc1565b5060009050805b82811015611fa557600160a060020a0386166000908152600c602052604090208054611f9a91611f8d9184908110611f7557fe5b906000526020600020906003020160005b5087612719565b839063ffffffff6129bb16565b91505b600101611f41565b611fbe82611fb28861154e565b9063ffffffff6127c516565b93505b50505092915050565b600080548190819033600160a060020a03908116911614611fea57600080fd5b611ff2610e16565b91508382101561200157600080fd5b61200a8561154e565b90508381101561201957600080fd5b612026600a858403612608565b600160a060020a038516600090815260086020526040902061204a90858303612608565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b600160a060020a038083166000908152600960209081526040808320938516835292905220545b92915050565b60008054819033600160a060020a039081169116146120e257600080fd5b600160a060020a038316151561213057600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561212b57600080fd5b61226b565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561218a57600080fd5b6102c65a03f1151561219b57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561220b57600080fd5b6102c65a03f1151561221c57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b5b505050565b600e54600160a060020a031681565b600b546101009004600160a060020a031681565b60005433600160a060020a039081169116146122af57600080fd5b600b805460ff19168215151790555b5b50565b600054600160a060020a031681565b600e5433600160a060020a039081169116146122ec57600080fd5b600160a060020a038116151561230157600080fd5b600e5461231890600160a060020a0316600061234a565b600e8054600160a060020a031916600160a060020a038381169190911791829055610f5e9116600161234a565b5b5b50565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b6000805433600160a060020a0390811691161461240057600b5460ff16151561239b57600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156123d257506000611f0b565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b61240b8484846127dc565b90505b9392505050565b60008183106124245781612426565b825b90505b92915050565b60008060008085805490506000141561244b5760009350611fc1565b85548690600019810190811061245d57fe5b906000526020600020900160005b50546001608060020a031685106124b55785548690600019810190811061248e57fe5b906000526020600020900160005b5054608060020a90046001608060020a03169350611fc1565b8560008154811015156124c457fe5b906000526020600020900160005b50546001608060020a03168510156124ed5760009350611fc1565b8554600093506000190191505b8282111561254f5760026001838501015b04905084868281548110151561251d57fe5b906000526020600020900160005b50546001608060020a0316116125435780925061254a565b6001810391505b6124fa565b858381548110151561255d57fe5b906000526020600020900160005b5054608060020a90046001608060020a031693505b50505092915050565b600061242683602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166129d5565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156124245781612426565b825b90505b92915050565b8154600090819015806126455750835443908590600019810190811061262a57fe5b906000526020600020900160005b50546001608060020a0316105b156126ae578354849061265b8260018301612b32565b8154811061266557fe5b906000526020600020900160005b5080546001608060020a03858116608060020a024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506126ea565b8354849060001981019081106126c057fe5b906000526020600020900160005b5080546001608060020a03808616608060020a02911617815590505b5b50505050565b600b5460009060ff16151561270557600080fd5b6124263384846127dc565b90505b92915050565b60006124266127ab8460e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015284612589565b60018501549063ffffffff6127c516565b90505b92915050565b6000828211156127d157fe5b508082035b92915050565b600080808315156127f05760019250610e8e565b6006544390106127ff57600080fd5b600160a060020a03851615801590612829575030600160a060020a031685600160a060020a031614155b151561283457600080fd5b61283e8643610f62565b9150838210156128515760009250610e8e565b60005461286690600160a060020a0316610ba8565b156129015760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156128db57600080fd5b6102c65a03f115156128ec57600080fd5b50505060405180519050151561290157600080fd5b5b600160a060020a038616600090815260086020526040902061292690858403612608565b6129308543610f62565b90508381018190101561294257600080fd5b600160a060020a038516600090815260086020526040902061296690828601612608565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b6000828201838110156129ca57fe5b8091505b5092915050565b600080838610156129e957600091506114b9565b8286106129f8578691506114b9565b612a37612a0b848763ffffffff6127c516565b612a2b612a1e898963ffffffff6127c516565b8a9063ffffffff612a4716565b9063ffffffff612a7616565b90508091505b5095945050505050565b6000828202831580612a635750828482811515612a6057fe5b04145b15156129ca57fe5b8091505b5092915050565b6000808284811515612a8457fe5b0490508091505b5092915050565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760008381526020902061226b918101908301612bb3565b5b505050565b610e2491905b80821115612bac578054600160a060020a03191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600301612b62565b5090565b90565b610e2491905b80821115612bac5760008155600101612bb9565b5090565b905600a165627a7a7230582063d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e08040029000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e


   Swarm Source:
bzzr://63d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e0804

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.