Sponsored Link:   ARNA Genomics - FIRST BLOCKCHAIN BIOTECH ECOSYSTEM. Join ICO Now!
Contract Overview | TokenCard-ICO
ETH Balance: 44.227125022670567692 Ether
ETH USD Value: $20,246.74 (@ $457.79/ETH)
No Of Transactions: 2863 txns
  Latest 25 txns from a total Of 2863 transactions View All

TxHash Age From To Value [TxFee]
0xf1993e3fca102079826987cdc4af95d57a20d29ebc5056d9e605f3448266affa51 days 7 mins ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   TokenCard-ICO0 Ether0.000305488
0x0b4f0236b49791617f3e49aab2323ebd464ddfcdcb32705db140ad6b6f0ffdfb51 days 10 hrs ago0x2ff4d83d13fb20b88614fbe38aaceaadad9d53fc  IN   TokenCard-ICO0 Ether0.000358032
0x42bdfbd48d23bedbf951f39146b983e539f640e697333f3cf19dfd03e510fb3f119 days 14 hrs ago0xbc8428b4aec8dc1d30900ad322e3366b0fec18a5  IN   TokenCard-ICO0 Ether0.0021
0xdc3a56a3df05501502fe03e69212e8112ad32f1e04ccdc8de66fd4b4abc088b7119 days 14 hrs ago0xbc8428b4aec8dc1d30900ad322e3366b0fec18a5  IN   TokenCard-ICO0 Ether0.0021
0xc473245debc816f01a891f532b62c5f66c31df356119cb624f4d13d03d186043188 days 10 hrs ago0x00db2b9178f83bec59a6327eddf8a8cb54f764ff  IN   TokenCard-ICO0 Ether0.01
0x8ca753f9ae07d51620b44a3f41a3fdceb0c4567d5b295bbae58aa3e47f3392a0188 days 22 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.001224909
0x29284caf5849c52a5ba559fcdcaf0ebdae8563d15a576b3c64d19b7178404426188 days 22 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.000606669
0x1f27dc934a14c71cf45cb88f79ca2a72ea4712f8d7d177cef2739f8ce013a600191 days 4 hrs ago0x51e07ebffb63c575d3aa5c7f25c5b6fcae1da362  IN   TokenCard-ICO0.1 Ether0.002268
0x0022630ab31c60474a52d4334011ebf0992d52c09f3111fc3ea9bb39c6f58c01191 days 4 hrs ago0x51e07ebffb63c575d3aa5c7f25c5b6fcae1da362  IN   TokenCard-ICO0.1 Ether0.012519
0x9da1ac841b60a369dc5f87d45b56578537d522d4eade96eaf48010cc37d4f2c0196 days 16 hrs ago0x483280195a600ea8800bad3aeb9575f84cfcb76b  IN   TokenCard-ICO1 Ether0.009584913
0xd48877804b8ac70e534dca0bacc9dfe791d4161b2d84a695bf3b4d7769c7cd04200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0009056
0xd1d255e103c76eedf041fbbb01b3223f42804e51f6eb34e02cad78dc0c2f72ad200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00154924
0x015def488638a2238108e9383bdbd48c5b76ecd6d8ad8db44e4ae5a3f739d00e200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0009116
0x1f7471db01f939e790a185d8c17268b608b345f509c7a0b7831910d74369c645200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0022783
0xa29f0c0cc48b601b9d46a64bbbf856a64f9d7d433e66f5fb194d628c8bdf4064200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0008944
0xaf08089a5f2c783a9a9233cbbda477709dd065dc44638e77d2b2a14e184b4429200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00090056
0xbbbd252680b650b1990637c6aeb61f2512b2841f0138e353da801f56caa908da200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00133538
0xf9c8327551f6d5d14bb4381cd85d6b712b67b9a0849f0123d42b77b54a8b0b19200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00088888
0xd80dd5f30f297e3a9124fdc60cbb5bbf4a052e1da7abe99229eeaff91ad4d66a200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00090672
0x298332363aa57a717e6a88d21d018236921ad3d94a2a83a66bc4d496efcc106c200 days 3 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00090756
0xa0ecfc45e19765a3e9946620edf4f18b93f783406d9ac21e98d515b5eec5a609200 days 12 hrs ago0x810858f00f41f99873e97a5018d83cab22843c9f  IN   TokenCard-ICO30 Ether0.008173
0x3f6c6d1fdd8421ce2eb6b32d36e85ae4ba0f6ba4bd25b65a5ccbb06a7753c032203 days 11 hrs ago0x012297e50d181aab3f2c7e426a62172777e7fff2  IN   TokenCard-ICO0.009 Ether0.001259517
0x00f12554e3edc53be0d3722503191d079eb32ab9d4260f924fb68c6175da0c31204 days 21 hrs ago0x49554ab51b4785d1927f10c125f7873548c35e55  IN   TokenCard-ICO10 Ether0.00161104
0x2bade0257cedff0b1801cc984e833160ecb6d82e7605bbac38555a3e29abe0ef205 days 26 mins ago0x00db2b9178f83bec59a6327eddf8a8cb54f764ff  IN   TokenCard-ICO0 Ether0.042
0xcb0c75172464d0599132307439104e8f35708c7fd72f45ed353fe2d58a6e0943205 days 10 hrs ago0x617057bf5415d81fe19f8ef2cbbe4a9ee4c46da9  IN   TokenCard-ICO0 Ether0.00058182
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
  Latest 11 Internal Transactions

ParentTxHash Block Age From To Value
0x8ca753f9ae07d51620b44a3f41a3fdceb0c4567d5b295bbae58aa3e47f3392a03734934188 days 22 hrs ago0x49edf201c1e139282643d5e7c6fb0c7219ad1db70x000f372e3e45ada03456aef3b90c545ff2b7329c166,666.6666666666625 Ether
0xcf9d28efcd1f6b6c7639a3e3e3a2cf99296d0f388143a9c80a8941e6a73af1353638804206 days 4 hrs ago0x211457a48a72e66130a369af6c5a8164f92700120x49edf201c1e139282643d5e7c6fb0c7219ad1db715 Ether
0xbbc636c14d7fe36dc20b57f6fd995798887b4bbe15c493616916032be33a9b623638687206 days 5 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0x02264c9386a2ffebc6567be51c820283e6830aa8283f98d5261058925b13f0553638659206 days 5 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0xf1ec06acce2b34d5e45a3fc52a747bdb1bc22b08f859a25833359941b229971a3638644206 days 5 hrs ago0x1c68d5cf7ddda7aa00f32473d5dc4545a863fa100x49edf201c1e139282643d5e7c6fb0c7219ad1db710 Ether
0xbf58d416dc6338f4ac67dd8a62eef5ac58552fc5a7f29066e17510ccc3f659ac3638635206 days 5 hrs ago0x211457a48a72e66130a369af6c5a8164f92700120x49edf201c1e139282643d5e7c6fb0c7219ad1db715 Ether
0x28e9dbf8f9b7aa3ed753f1939530275ec6a3b12cb78ed4b404d394862fa58a443638578206 days 5 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0x36f9464067c014a24abd050dafb64d7449b082bf0e9d2a3e2de8e9eb789e5d623638526206 days 5 hrs ago0x7d54afc509ba292c9f3ba153045a92af46ca2fe70x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0x70b4260d447952f6a275da8bdd73f7e7418c3753e133729fe92743035c1135593638507206 days 6 hrs ago0x7d54afc509ba292c9f3ba153045a92af46ca2fe70x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0xb2d995ee83dd00c4159259a5b4cb60c2011dcc99a111c1a18835c866f632073c3638484206 days 6 hrs ago0xf812ae96e6838ba9966e2108b4718e164ffe679f0x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0xf14533700aeddcde82598da309425e0fc7198a099863fd1ac71e5f69b90aac313638478206 days 6 hrs ago0x0e4e39133f5285b72ce962d3288048a1be334f6f0x49edf201c1e139282643d5e7c6fb0c7219ad1db710 Ether
[ Download CSV Export  ] 
Contract Name: ICO
Compiler Version: v0.4.10+commit.f0d539ae
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity >=0.4.4;

contract Sale {
    uint public startTime;
    uint public stopTime;
    uint public target;
    uint public raised;
    uint public collected;
    uint public numContributors;
    mapping(address => uint) public balances;

    function buyTokens(address _a, uint _eth, uint _time) returns (uint); 
    function getTokens(address holder) constant returns (uint); 
    function getRefund(address holder) constant returns (uint); 
    function getSoldTokens() constant returns (uint); 
    function getOwnerEth() constant returns (uint); 
    function tokensPerEth() constant returns (uint);
    function isActive(uint time) constant returns (bool); 
    function isComplete(uint time) constant returns (bool); 
}

contract Constants {
    uint DECIMALS = 8;
}

contract EventDefinitions {
    event logSaleStart(uint startTime, uint stopTime);
    event logPurchase(address indexed purchaser, uint eth);
    event logClaim(address indexed purchaser, uint refund, uint tokens);

    //Token standard events
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
} 

contract Testable {
    uint fakeTime;
    bool public testing;
    modifier onlyTesting() {
        if (!testing) throw;
        _;
    }
    function setFakeTime(uint t) onlyTesting {
        fakeTime = t;
    }
    function addMinutes(uint m) onlyTesting {
        fakeTime = fakeTime + (m * 1 minutes);
    }
    function addDays(uint d) onlyTesting {
        fakeTime = fakeTime + (d * 1 days);
    }
    function currTime() constant returns (uint) {
        if (testing) {
            return fakeTime;
        } else {
            return block.timestamp;
        }
    }
    function weiPerEth() constant returns (uint) {
        if (testing) {
            return 200;
        } else {
            return 10**18;
        }
    }
}

contract Owned {
    address public owner;
    
    modifier onlyOwner() {
        if (msg.sender != owner) throw;
        _;
    }

    address newOwner;

    function changeOwner(address _newOwner) onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() {
        if (msg.sender == newOwner) {
            owner = newOwner;
        }
    }    
}

//from Zeppelin
contract SafeMath {
    function safeMul(uint a, uint b) internal returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeSub(uint a, uint b) internal returns (uint) {
        assert(b <= a);
        return a - b;
    }

    function safeAdd(uint a, uint b) internal returns (uint) {
        uint c = a + b;
        assert(c>=a && c>=b);
        return c;
    }

    function assert(bool assertion) internal {
        if (!assertion) throw;
    }
}

contract Token is SafeMath, Owned, Constants {
    uint public totalSupply;

    address ico;
    address controller;

    string public name;
    uint8 public decimals; 
    string public symbol;     

    modifier onlyControllers() {
        if (msg.sender != ico &&
            msg.sender != controller) throw;
        _;
    }

    modifier onlyPayloadSize(uint numwords) {
        assert(msg.data.length == numwords * 32 + 4);
        _;
    } 

    function Token() { 
        owner = msg.sender;
        name = "Monolith TKN";
        decimals = uint8(DECIMALS);
        symbol = "TKN";
    }

    function setICO(address _ico) onlyOwner {
        if (ico != 0) throw;
        ico = _ico;
    }
    function setController(address _controller) onlyOwner {
        if (controller != 0) throw;
        controller = _controller;
    }
    
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
    event Mint(address owner, uint amount);

    //only called from contracts so don't need msg.data.length check
    function mint(address addr, uint amount) onlyControllers {
        if (maxSupply > 0 && safeAdd(totalSupply, amount) > maxSupply) throw;
        balanceOf[addr] = safeAdd(balanceOf[addr], amount);
        totalSupply = safeAdd(totalSupply, amount);
        Mint(addr, amount);
    }

    mapping(address => uint) public balanceOf;
    mapping (address => mapping (address => uint)) public allowance;

    function transfer(address _to, uint _value) 
    onlyPayloadSize(2)
    returns (bool success) {
        if (balanceOf[msg.sender] < _value) return false;

        balanceOf[msg.sender] = balanceOf[msg.sender] - _value;
        balanceOf[_to] = safeAdd(balanceOf[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint _value) 
    onlyPayloadSize(3)
    returns (bool success) {
        if (balanceOf[_from] < _value) return false; 

        var allowed = allowance[_from][msg.sender];
        if (allowed < _value) return false;

        balanceOf[_to] = safeAdd(balanceOf[_to], _value);
        balanceOf[_from] = safeSub(balanceOf[_from], _value);
        allowance[_from][msg.sender] = safeSub(allowed, _value);
        Transfer(_from, _to, _value);
        return true;
    }

    function approve(address _spender, uint _value) 
    onlyPayloadSize(2)
    returns (bool success) {
        //require user to set to zero before resetting to nonzero
        if ((_value != 0) && (allowance[msg.sender][_spender] != 0)) {
            return false;
        }
    
        allowance[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function increaseApproval (address _spender, uint _addedValue) 
    onlyPayloadSize(2)
    returns (bool success) {
        uint oldValue = allowance[msg.sender][_spender];
        allowance[msg.sender][_spender] = safeAdd(oldValue, _addedValue);
        return true;
    }

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

    //Holds accumulated dividend tokens other than TKN
    TokenHolder tokenholder;

    //once locked, can no longer upgrade tokenholder
    bool lockedTokenHolder;

    function lockTokenHolder() onlyOwner {
        lockedTokenHolder = true;
    }

    //while unlocked, 
    //this gives owner lots of power over held dividend tokens
    //effectively can deny access to all accumulated tokens
    //thus crashing TKN value
    function setTokenHolder(address _th) onlyOwner {
        if (lockedTokenHolder) throw;
        tokenholder = TokenHolder(_th);
    }

    event Burn(address burner, uint amount);

    function burn(uint _amount) returns (bool result) {
        if (_amount > balanceOf[msg.sender]) return false;
        balanceOf[msg.sender] = safeSub(balanceOf[msg.sender], _amount);
        totalSupply = safeSub(totalSupply, _amount);
        result = tokenholder.burn(msg.sender, _amount);
        if (!result) throw;
        Burn(msg.sender, _amount);
    }

    uint public maxSupply;

    function setMaxSupply(uint _maxSupply) {
        if (msg.sender != controller) throw;
        if (maxSupply > 0) throw;
        maxSupply = _maxSupply;
    }
}

contract TokenHolder {
    function burn(address _burner, uint _amount)
    returns (bool result) { 
        return false;
    }
}


contract ICO is EventDefinitions, Testable, SafeMath, Owned {
    Token public token;
    address public controller;
    address public payee;

    Sale[] public sales;
    
    //salenum => minimum wei
    mapping (uint => uint) saleMinimumPurchases;

    //next sale number user can claim from
    mapping (address => uint) public nextClaim;

    //net contributed ETH by each user (in case of stop/refund)
    mapping (address => uint) refundInStop;

    modifier tokenIsSet() {
        if (address(token) == 0) throw;
        _;
    }

    modifier onlyController() {
        if (msg.sender != address(controller)) throw;
        _;
    }

    function ICO() { 
        owner = msg.sender;
        payee = msg.sender;
        allStopper = msg.sender;
    }

    //payee can only be changed once
    //intent is to lock payee to a contract that holds or distributes funds
    //in deployment, be sure to do this before changing owner!
    //we initialize to owner to keep things simple if there's no payee contract
    function changePayee(address newPayee) 
    onlyOwner notAllStopped {
        payee = newPayee;
    }

    function setToken(address _token) onlyOwner {
        if (address(token) != 0x0) throw;
        token = Token(_token);
    }

    //before adding sales, we can set this to be a test ico
    //this lets us manipulate time and drastically lowers weiPerEth
    function setAsTest() onlyOwner {
        if (sales.length == 0) {
            testing = true;
        }
    }

    function setController(address _controller) 
    onlyOwner notAllStopped {
        if (address(controller) != 0x0) throw;
        controller = _controller; //ICOController(_controller);
    }

    //********************************************************
    //Sales
    //********************************************************

    function addSale(address sale, uint minimumPurchase) 
    onlyController notAllStopped {
        uint salenum = sales.length;
        sales.push(Sale(sale));
        saleMinimumPurchases[salenum] = minimumPurchase;
        logSaleStart(Sale(sale).startTime(), Sale(sale).stopTime());
    }

    function addSale(address sale) onlyController {
        addSale(sale, 0);
    }

    function getCurrSale() constant returns (uint) {
        if (sales.length == 0) throw; //no reason to call before startFirstSale
        return sales.length - 1;
    }

    function currSaleActive() constant returns (bool) {
        return sales[getCurrSale()].isActive(currTime());
    }

    function currSaleComplete() constant returns (bool) {
        return sales[getCurrSale()].isComplete(currTime());
    }

    function numSales() constant returns (uint) {
        return sales.length;
    }

    function numContributors(uint salenum) constant returns (uint) {
        return sales[salenum].numContributors();
    }

    //********************************************************
    //ETH Purchases
    //********************************************************

    event logPurchase(address indexed purchaser, uint value);

    function () payable {
        deposit();
    }

    function deposit() payable notAllStopped {
        doDeposit(msg.sender, msg.value);

        //not in doDeposit because only for Eth:
        uint contrib = refundInStop[msg.sender];
        refundInStop[msg.sender] = contrib + msg.value;

        logPurchase(msg.sender, msg.value);
    }

    //is also called by token contributions
    function doDeposit(address _for, uint _value) private {
        uint currSale = getCurrSale();
        if (!currSaleActive()) throw;
        if (_value < saleMinimumPurchases[currSale]) throw;

        uint tokensToMintNow = sales[currSale].buyTokens(_for, _value, currTime());

        if (tokensToMintNow > 0) {
            token.mint(_for, tokensToMintNow);
        }
    }

    //********************************************************
    //Token Purchases
    //********************************************************

    //Support for purchase via other tokens
    //We don't attempt to deal with those tokens directly
    //We just give admin ability to tell us what deposit to credit
    //We only allow for first sale 
    //because first sale normally has no refunds
    //As written, the refund would be in ETH

    event logPurchaseViaToken(
                        address indexed purchaser, address indexed token, 
                        uint depositedTokens, uint ethValue, 
                        bytes32 _reference);

    event logPurchaseViaFiat(
                        address indexed purchaser, uint ethValue, 
                        bytes32 _reference);

    mapping (bytes32 => bool) public mintRefs;
    mapping (address => uint) public raisedFromToken;
    uint public raisedFromFiat;

    function depositFiat(address _for, uint _ethValue, bytes32 _reference) 
    notAllStopped onlyOwner {
        if (getCurrSale() > 0) throw; //only first sale allows this
        if (mintRefs[_reference]) throw; //already minted for this reference
        mintRefs[_reference] = true;
        raisedFromFiat = safeAdd(raisedFromFiat, _ethValue);

        doDeposit(_for, _ethValue);
        logPurchaseViaFiat(_for, _ethValue, _reference);
    }

    function depositTokens(address _for, address _token, 
                           uint _ethValue, uint _depositedTokens, 
                           bytes32 _reference) 
    notAllStopped onlyOwner {
        if (getCurrSale() > 0) throw; //only first sale allows this
        if (mintRefs[_reference]) throw; //already minted for this reference
        mintRefs[_reference] = true;
        raisedFromToken[_token] = safeAdd(raisedFromToken[_token], _ethValue);

        //tokens do not count toward price changes and limits
        //we have to look up pricing, and do our own mint()
        uint tokensPerEth = sales[0].tokensPerEth();
        uint tkn = safeMul(_ethValue, tokensPerEth) / weiPerEth();
        token.mint(_for, tkn);
        
        logPurchaseViaToken(_for, _token, _depositedTokens, _ethValue, _reference);
    }

    //********************************************************
    //Roundoff Protection
    //********************************************************
    //protect against roundoff in payouts
    //this prevents last person getting refund from not being able to collect
    function safebalance(uint bal) private returns (uint) {
        if (bal > this.balance) {
            return this.balance;
        } else {
            return bal;
        }
    }

    //It'd be nicer if last person got full amount
    //instead of getting shorted by safebalance()
    //topUp() allows admin to deposit excess ether to cover it
    //and later get back any left over 

    uint public topUpAmount;

    function topUp() payable onlyOwner notAllStopped {
        topUpAmount = safeAdd(topUpAmount, msg.value);
    }

    function withdrawTopUp() onlyOwner notAllStopped {
        uint amount = topUpAmount;
        topUpAmount = 0;
        if (!msg.sender.call.value(safebalance(amount))()) throw;
    }

    //********************************************************
    //Claims
    //********************************************************

    //Claim whatever you're owed, 
    //from whatever completed sales you haven't already claimed
    //this covers refunds, and any tokens not minted immediately
    //(i.e. auction tokens, not firstsale tokens)
    function claim() notAllStopped {
        var (tokens, refund, nc) = claimable(msg.sender, true);
        nextClaim[msg.sender] = nc;
        logClaim(msg.sender, refund, tokens);
        if (tokens > 0) {
            token.mint(msg.sender, tokens);
        }
        if (refund > 0) {
            refundInStop[msg.sender] = safeSub(refundInStop[msg.sender], refund);
            if (!msg.sender.send(safebalance(refund))) throw;
        }
    }

    //Allow admin to claim on behalf of user and send to any address.
    //Scenarios:
    //  user lost key
    //  user sent from an exchange
    //  user has expensive fallback function
    //  user is unknown, funds presumed abandoned
    //We only allow this after one year has passed.
    function claimFor(address _from, address _to) 
    onlyOwner notAllStopped {
        var (tokens, refund, nc) = claimable(_from, false);
        nextClaim[_from] = nc;

        logClaim(_from, refund, tokens);

        if (tokens > 0) {
            token.mint(_to, tokens);
        }
        if (refund > 0) {
            refundInStop[_from] = safeSub(refundInStop[_from], refund);
            if (!_to.send(safebalance(refund))) throw;
        }
    }

    function claimable(address _a, bool _includeRecent) 
    constant private tokenIsSet 
    returns (uint tokens, uint refund, uint nc) {
        nc = nextClaim[_a];

        while (nc < sales.length &&
               sales[nc].isComplete(currTime()) &&
               ( _includeRecent || 
                 sales[nc].stopTime() + 1 years < currTime() )) 
        {
            refund = safeAdd(refund, sales[nc].getRefund(_a));
            tokens = safeAdd(tokens, sales[nc].getTokens(_a));
            nc += 1;
        }
    }

    function claimableTokens(address a) constant returns (uint) {
        var (tokens, refund, nc) = claimable(a, true);
        return tokens;
    }

    function claimableRefund(address a) constant returns (uint) {
        var (tokens, refund, nc) = claimable(a, true);
        return refund;
    }

    function claimableTokens() constant returns (uint) {
        return claimableTokens(msg.sender);
    }

    function claimableRefund() constant returns (uint) {
        return claimableRefund(msg.sender);
    }

    //********************************************************
    //Withdraw ETH
    //********************************************************

    mapping (uint => bool) ownerClaimed;

    function claimableOwnerEth(uint salenum) constant returns (uint) {
        uint time = currTime();
        if (!sales[salenum].isComplete(time)) return 0;
        return sales[salenum].getOwnerEth();
    }

    function claimOwnerEth(uint salenum) onlyOwner notAllStopped {
        if (ownerClaimed[salenum]) throw;

        uint ownereth = claimableOwnerEth(salenum);
        if (ownereth > 0) {
            ownerClaimed[salenum] = true;
            if ( !payee.call.value(safebalance(ownereth))() ) throw;
        }
    }

    //********************************************************
    //Sweep tokens sent here
    //********************************************************

    //Support transfer of erc20 tokens out of this contract's address
    //Even if we don't intend for people to send them here, somebody will

    event logTokenTransfer(address token, address to, uint amount);

    function transferTokens(address _token, address _to) onlyOwner {
        Token token = Token(_token);
        uint balance = token.balanceOf(this);
        token.transfer(_to, balance);
        logTokenTransfer(_token, _to, balance);
    }

    //********************************************************
    //Emergency Stop
    //********************************************************

    bool allstopped;
    bool permastopped;

    //allow allStopper to be more secure address than owner
    //in which case it doesn't make sense to let owner change it again
    address allStopper;
    function setAllStopper(address _a) onlyOwner {
        if (allStopper != owner) return;
        allStopper = _a;
    }
    modifier onlyAllStopper() {
        if (msg.sender != allStopper) throw;
        _;
    }

    event logAllStop();
    event logAllStart();

    modifier allStopped() {
        if (!allstopped) throw;
        _;
    }

    modifier notAllStopped() {
        if (allstopped) throw;
        _;
    }

    function allStop() onlyAllStopper {
        allstopped = true;    
        logAllStop();
    }

    function allStart() onlyAllStopper {
        if (!permastopped) {
            allstopped = false;
            logAllStart();
        }
    }

    function emergencyRefund(address _a, uint _amt) 
    allStopped 
    onlyAllStopper {
        //if you start actually calling this refund, the disaster is real.
        //Don't allow restart, so this can't be abused 
        permastopped = true;

        uint amt = _amt;

        uint ethbal = refundInStop[_a];

        //convenient default so owner doesn't have to look up balances
        //this is fine as long as no funds have been stolen
        if (amt == 0) amt = ethbal; 

        //nobody can be refunded more than they contributed
        if (amt > ethbal) amt = ethbal;

        //since everything is halted, safer to call.value
        //so we don't have to worry about expensive fallbacks
        if ( !_a.call.value(safebalance(amt))() ) throw;
    }

    function raised() constant returns (uint) {
        return sales[getCurrSale()].raised();
    }

    function tokensPerEth() constant returns (uint) {
        return sales[getCurrSale()].tokensPerEth();
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"raisedFromToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"}],"name":"setAllStopper","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPayee","type":"address"}],"name":"changePayee","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currSaleActive","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_token","type":"address"},{"name":"_ethValue","type":"uint256"},{"name":"_depositedTokens","type":"uint256"},{"name":"_reference","type":"bytes32"}],"name":"depositTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"allStart","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currSaleComplete","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sale","type":"address"}],"name":"addSale","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"salenum","type":"uint256"}],"name":"claimableOwnerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimableRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"},{"name":"_amt","type":"uint256"}],"name":"emergencyRefund","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"transferTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"a","type":"address"}],"name":"claimableRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"salenum","type":"uint256"}],"name":"numContributors","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"t","type":"uint256"}],"name":"setFakeTime","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"a","type":"address"}],"name":"claimableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"testing","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"m","type":"uint256"}],"name":"addMinutes","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"setAsTest","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numSales","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raisedFromFiat","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"salenum","type":"uint256"}],"name":"claimOwnerEth","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawTopUp","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payee","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"claimFor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sales","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"mintRefs","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"nextClaim","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"d","type":"uint256"}],"name":"addDays","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"topUp","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"topUpAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getCurrSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"allStop","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_ethValue","type":"uint256"},{"name":"_reference","type":"bytes32"}],"name":"depositFiat","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sale","type":"address"},{"name":"minimumPurchase","type":"uint256"}],"name":"addSale","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"logPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"depositedTokens","type":"uint256"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"_reference","type":"bytes32"}],"name":"logPurchaseViaToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"_reference","type":"bytes32"}],"name":"logPurchaseViaFiat","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"logTokenTransfer","type":"event"},{"anonymous":false,"inputs":[],"name":"logAllStop","type":"event"},{"anonymous":false,"inputs":[],"name":"logAllStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startTime","type":"uint256"},{"indexed":false,"name":"stopTime","type":"uint256"}],"name":"logSaleStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"refund","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"logClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000c57fe5b5b6001805461010060a860020a03191661010033600160a060020a03169081029190911790915560058054600160a060020a03191682179055600f80546201000060b060020a031916620100009092029190911790555b5b61234b806100736000396000f300606060405236156102355763ffffffff60e060020a60003504166307cbe8ab8114610246578063144fa6d714610274578063156773ca146102925780631a6af7b7146102b05780631c1bc850146102d2578063379ba3b7146102f05780633fe3f42714610314578063443f95dc1461034157806348b17b64146103535780634a6d0292146103775780634e71d92d1461039557806353cea153146103a75780635ab827f6146103cc57806367f8a8b8146103ee5780636a092e791461040f5780636c530ee3146104335780636e1e063f1461045557806371c1d1961461048357806379ba5097146104a85780637a08339d146104ba57806384d24226146104cf5780638d03b102146104fd5780638da5cb5b146105215780638ff591b41461054d57806392eefe9b1461056257806398e54c551461058057806399aa93c8146105925780639c492b9e146105b4578063a015cb10146105d6578063a6f9dae1146105eb578063a8af232b14610609578063ae90b2131461061b578063b4ba9e1114610647578063b5f522f71461066b578063bab8fe401461069a578063cbdd69b5146106bc578063cd5681d5146106de578063cf00746014610705578063d0e30db014610733578063dabd5d651461073d578063dc29f1de14610752578063dd592a321461075c578063e12097b71461077e578063ecb6c47a146107a0578063eeee7cc0146107b2578063efecab8a146107d6578063f0ea4bfc146107f7578063f77c479114610819578063fc0c546a14610845575b6102445b610241610871565b5b565b005b341561024e57fe5b610262600160a060020a03600435166108ef565b60408051918252519081900360200190f35b341561027c57fe5b610244600160a060020a0360043516610901565b005b341561029a57fe5b610244600160a060020a0360043516610959565b005b34156102b857fe5b6102626109d6565b60408051918252519081900360200190f35b34156102da57fe5b610244600160a060020a03600435166109f4565b005b34156102f857fe5b610300610a47565b604080519115158252519081900360200190f35b341561031c57fe5b610244600160a060020a0360043581169060243516604435606435608435610aeb565b005b341561034957fe5b610244610d17565b005b341561035b57fe5b610300610d82565b604080519115158252519081900360200190f35b341561037f57fe5b610244600160a060020a0360043516610e26565b005b341561039d57fe5b610244610e52565b005b34156103af57fe5b610262600435610fc2565b60408051918252519081900360200190f35b34156103d457fe5b610262611100565b60408051918252519081900360200190f35b34156103f657fe5b610244600160a060020a0360043516602435611111565b005b341561041757fe5b610244600160a060020a03600435811690602435166111c9565b005b341561043b57fe5b610262611336565b60408051918252519081900360200190f35b341561045d57fe5b610262600160a060020a036004351661135f565b60408051918252519081900360200190f35b341561048b57fe5b610262600435611384565b60408051918252519081900360200190f35b34156104b057fe5b610244611416565b005b34156104c257fe5b610244600435611467565b005b34156104d757fe5b610262600160a060020a0360043516611483565b60408051918252519081900360200190f35b341561050557fe5b6103006114a8565b604080519115158252519081900360200190f35b341561052957fe5b6105316114b1565b60408051600160a060020a039092168252519081900360200190f35b341561055557fe5b6102446004356114c5565b005b341561056a57fe5b610244600160a060020a03600435166114e7565b005b341561058857fe5b610244611551565b005b341561059a57fe5b61026261158c565b60408051918252519081900360200190f35b34156105bc57fe5b610262611593565b60408051918252519081900360200190f35b34156105de57fe5b610244600435611599565b005b34156105f357fe5b610244600160a060020a0360043516611655565b005b341561061157fe5b610244611696565b005b341561062357fe5b61053161170e565b60408051600160a060020a039092168252519081900360200190f35b341561064f57fe5b610244600160a060020a036004358116906024351661171d565b005b341561067357fe5b6105316004356118b4565b60408051600160a060020a039092168252519081900360200190f35b34156106a257fe5b6102626118e6565b60408051918252519081900360200190f35b34156106c457fe5b6102626118f7565b60408051918252519081900360200190f35b34156106e657fe5b61030060043561198c565b604080519115158252519081900360200190f35b341561070d57fe5b610262600160a060020a03600435166119a1565b60408051918252519081900360200190f35b610244610871565b005b341561074557fe5b6102446004356119b3565b005b6102446119d7565b005b341561076457fe5b610262611a1d565b60408051918252519081900360200190f35b341561078657fe5b610262611a23565b60408051918252519081900360200190f35b34156107a857fe5b610244611a41565b005b34156107ba57fe5b610244600160a060020a0360043516602435604435611a9d565b005b34156107de57fe5b610244600160a060020a0360043516602435611b80565b005b34156107ff57fe5b610262611d08565b60408051918252519081900360200190f35b341561082157fe5b610531611d9d565b60408051600160a060020a039092168252519081900360200190f35b341561084d57fe5b610531611dac565b60408051600160a060020a039092168252519081900360200190f35b600f5460009060ff16156108855760006000fd5b61088f3334611dbb565b50600160a060020a033316600081815260096020908152604091829020805434808201909255835191825292519293927fc30df14cb928081d7587d26c00adb1c5483c8049cc0456e2d2e8e226dfb7c920929181900390910190a25b5b50565b600b6020526000908152604090205481565b60015433600160a060020a0390811661010090920416146109225760006000fd5b600354600160a060020a0316156109395760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b5b50565b60015433600160a060020a03908116610100909204161461097a5760006000fd5b600154600f54620100009004600160a060020a0390811661010090920416146109a2576108eb565b600f805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a038416021790555b5b50565b60015460009060ff16156109ed57506000546109f0565b50425b5b90565b60015433600160a060020a039081166101009092041614610a155760006000fd5b600f5460ff1615610a265760006000fd5b60058054600160a060020a031916600160a060020a0383161790555b5b5b50565b60006006610a53611a23565b81548110610a5d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03166382afd23b610a936109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600f54600090819060ff1615610b015760006000fd5b60015433600160a060020a039081166101009092041614610b225760006000fd5b6000610b2c611a23565b1115610b385760006000fd5b6000838152600a602052604090205460ff1615610b555760006000fd5b6000838152600a60209081526040808320805460ff19166001179055600160a060020a0389168352600b909152902054610b8f9086611f28565b600160a060020a0387166000908152600b6020526040812091909155600680549091908110610bba57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663cbdd69b56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610c1f57fe5b60325a03f11515610c2c57fe5b5050604051519250610c3e9050611336565b610c488684611f50565b811515610c5157fe5b6003546040805160e060020a6340c10f19028152600160a060020a038c81166004830152949093046024840181905290519094509216916340c10f199160448082019260009290919082900301818387803b1515610cab57fe5b60325a03f11515610cb857fe5b505060408051868152602081018890528082018690529051600160a060020a03808a1693508a16917f15910e5cea9f22af6be011580707d2135bf1a23bf888657249f6e887af70a1fc919081900360600190a35b5b5b50505050505050565b600f5433600160a060020a03908116620100009092041614610d395760006000fd5b600f54610100900460ff16151561024157600f805460ff191690556040517f31ebd13fa817dd60b9d0ca3b04f5c010467dad9e01dce48c68ccd946dd8ec62990600090a15b5b5b565b60006006610d8e611a23565b81548110610d9857fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a6610a936109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b60045433600160a060020a03908116911614610e425760006000fd5b6108eb816000611b80565b5b5b50565b600f546000908190819060ff1615610e6a5760006000fd5b610e75336001611f7f565b600160a060020a03331660008181526008602090815260409182902084905581518581529081018690528151959850939650919450927fb72449e538635569e6f2eb1500da813bc2847392fa6a6972966a484ea8f9d73a9281900390910190a26000831115610f43576003546040805160e060020a6340c10f19028152600160a060020a03338116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b1515610f3257fe5b60325a03f11515610f3f57fe5b5050505b6000821115610fba57600160a060020a033316600090815260096020526040902054610f6f9083612278565b600160a060020a0333166000818152600960205260409020919091556108fc610f9784612291565b6040518115909202916000818181858888f193505050501515610fba5760006000fd5b5b5b5b505050565b60006000610fce6109d6565b9050600683815481101515610fdf57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a6826000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b151561104c57fe5b60325a03f1151561105957fe5b5050604051511515905061107057600091506110fa565b600680548490811061107e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663c5dacf686000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156110e357fe5b60325a03f115156110f057fe5b5050604051519250505b50919050565b600061110b3361135f565b90505b90565b600f54600090819060ff1615156111285760006000fd5b600f5433600160a060020a0390811662010000909204161461114a5760006000fd5b5050600f805461ff001916610100179055600160a060020a0382166000908152600960205260409020548190811515611181578091505b8082111561118d578091505b83600160a060020a03166111a083612291565b604051600081818185876185025a03f19250505015156111c05760006000fd5b5b5b5b50505050565b600154600090819033600160a060020a0390811661010090920416146111ef5760006000fd5b83915081600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561125257fe5b60325a03f1151561125f57fe5b50505060405180519050905081600160a060020a031663a9059cbb84836000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15156112d357fe5b60325a03f115156112e057fe5b505060408051600160a060020a0380881682528616602082015280820184905290517f977a8f1bdcf5f444d404662ea2c090d707ebcef1be61b37fe6ce74d0c6288fb892509081900360600190a15b5b50505050565b60015460009060ff161561134c575060c86109f0565b50670de0b6b3a76400006109f0565b5b90565b6000600060006000611372856001611f7f565b9250925092508193505b505050919050565b600060068281548110151561139557fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316638f03850b6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156113fa57fe5b60325a03f1151561140757fe5b5050604051519150505b919050565b60025433600160a060020a03908116911614156102415760025460018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff00199092169190911790555b5b565b60015460ff1615156114795760006000fd5b60008190555b5b50565b6000600060006000611496856001611f7f565b9250925092508293505b505050919050565b60015460ff1681565b6001546101009004600160a060020a031681565b60015460ff1615156114d75760006000fd5b60008054603c83020190555b5b50565b60015433600160a060020a0390811661010090920416146115085760006000fd5b600f5460ff16156115195760006000fd5b600454600160a060020a0316156115305760006000fd5b60048054600160a060020a031916600160a060020a0383161790555b5b5b50565b60015433600160a060020a0390811661010090920416146115725760006000fd5b6006541515610241576001805460ff1916811790555b5b5b565b6006545b90565b600c5481565b60015460009033600160a060020a0390811661010090920416146115bd5760006000fd5b600f5460ff16156115ce5760006000fd5b6000828152600e602052604090205460ff16156115eb5760006000fd5b6115f482610fc2565b9050600081111561164d576000828152600e60205260409020805460ff19166001179055600554600160a060020a031661162d82612291565b604051600081818185876185025a03f192505050151561164d5760006000fd5b5b5b5b5b5050565b60015433600160a060020a0390811661010090920416146116765760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b5b50565b60015460009033600160a060020a0390811661010090920416146116ba5760006000fd5b600f5460ff16156116cb5760006000fd5b50600d80546000909155600160a060020a0333166116e882612291565b604051600081818185876185025a03f19250505015156108eb5760006000fd5b5b5b5b50565b600554600160a060020a031681565b6001546000908190819033600160a060020a0390811661010090920416146117455760006000fd5b600f5460ff16156117565760006000fd5b611761856000611f7f565b600160a060020a03881660008181526008602090815260409182902084905581518581529081018690528151959850939650919450927fb72449e538635569e6f2eb1500da813bc2847392fa6a6972966a484ea8f9d73a9281900390910190a2600083111561182f576003546040805160e060020a6340c10f19028152600160a060020a03878116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b151561181e57fe5b60325a03f1151561182b57fe5b5050505b60008211156118a957600160a060020a03851660009081526009602052604090205461185b9083612278565b600160a060020a0380871660009081526009602052604090209190915584166108fc61188684612291565b6040518115909202916000818181858888f1935050505015156118a95760006000fd5b5b5b5b5b5050505050565b60068054829081106118c257fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600061110b33611483565b90505b90565b60006006611903611a23565b8154811061190d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663cbdd69b56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600a6020526000908152604090205460ff1681565b60086020526000908152604090205481565b60015460ff1615156119c55760006000fd5b600080546201518083020190555b5b50565b60015433600160a060020a0390811661010090920416146119f85760006000fd5b600f5460ff1615611a095760006000fd5b611a15600d5434611f28565b600d555b5b5b565b600d5481565b6006546000901515611a355760006000fd5b50600654600019015b90565b600f5433600160a060020a03908116620100009092041614611a635760006000fd5b600f805460ff191660011790556040517f0a9a784214055eda7660e0eea4cac1eb3e349173dce3741cb49393e72e98070190600090a15b5b565b600f5460ff1615611aae5760006000fd5b60015433600160a060020a039081166101009092041614611acf5760006000fd5b6000611ad9611a23565b1115611ae55760006000fd5b6000818152600a602052604090205460ff1615611b025760006000fd5b6000818152600a60205260409020805460ff19166001179055600c54611b289083611f28565b600c55611b358383611dbb565b60408051838152602081018390528151600160a060020a038616927f8a890695a0d1d5bc0de2dd9278f1b080ce4fa5f192849361d46119e98dea1f4d928290030190a25b5b5b505050565b60045460009033600160a060020a03908116911614611b9f5760006000fd5b600f5460ff1615611bb05760006000fd5b5060068054908160018101611bc583826122d4565b916000526020600020900160005b8154600160a060020a038088166101009390930a8381029102199091161790915560008381526007602090815260408083208790558051820183905280517f78e9792500000000000000000000000000000000000000000000000000000000815290517fea217d4dc825d94490e4479842497722c85e7da8444afc5a5c6928966e85849395506378e9792593600480840194938390030190829087803b1515611c7857fe5b60325a03f11515611c8557fe5b5050506040518051905084600160a060020a03166303ff5e736000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515611cd557fe5b60325a03f11515611ce257fe5b5050604080518051938152602081019390935280519283900301919050a15b5b5b505050565b60006006611d14611a23565b81548110611d1e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663f0ea4bfc6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600454600160a060020a031681565b600354600160a060020a031681565b60006000611dc7611a23565b9150611dd1610a47565b1515611ddd5760006000fd5b600082815260076020526040902054831015611df95760006000fd5b6006805483908110611e0757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663d2395dcd8585611e3f6109d6565b6000604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1515611e9d57fe5b60325a03f11515611eaa57fe5b50506040515191505060008111156111c0576003546040805160e060020a6340c10f19028152600160a060020a03878116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b1515611f1057fe5b60325a03f11515610d0c57fe5b5050505b5b50505050565b6000828201611f45848210801590611f405750838210155b6122c3565b8091505b5092915050565b6000828202611f45841580611f405750838583811515611f6c57fe5b04145b6122c3565b8091505b5092915050565b60035460009081908190600160a060020a03161515611f9e5760006000fd5b50600160a060020a0384166000908152600860205260409020545b6006548110801561205d57506006805482908110611fd357fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a66120096109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b151561204757fe5b60325a03f1151561205457fe5b50506040515190505b80156121055750838061210557506120736109d6565b600680548390811061208157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03166303ff5e736000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156120e657fe5b60325a03f115156120f357fe5b505050604051805190506301e1338001105b5b1561226f576121b78260068381548110151561211e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663696c58c4886000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561219d57fe5b60325a03f115156121aa57fe5b5050604051519050611f28565b9150612265836006838154811015156121cc57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663450efe21886000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561219d57fe5b60325a03f115156121aa57fe5b5050604051519050611f28565b9250600101611fb9565b5b5b9250925092565b6000612286838311156122c3565b508082035b92915050565b600030600160a060020a0316318211156122b65750600160a060020a03301631611411565b5080611411565b5b919050565b8015156108eb5760006000fd5b5b50565b815481835581811511610fba57600083815260209020610fba9181019083016122fe565b5b505050565b6109f091905b808211156123185760008155600101612304565b5090565b905600a165627a7a72305820f0811d8f921c387af47f7a37b04616fc6ee77f8321d9bb1e4ac21f3b1c61db8e0029

   Swarm Source:
bzzr://f0811d8f921c387af47f7a37b04616fc6ee77f8321d9bb1e4ac21f3b1c61db8e
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.