Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 102 txns
Token Tracker: ToorCoin (TOOR)
 Latest 25 txns From a total of 102 Transactions

TxHash Age From To Value [TxFee]
0xf13fe4293f99d7950b93616990a831c426368a16862ecf7a93a0937a6c5f18721 day 9 hrs ago0x521db06bf657ed1d6c98553a70319a8ddbac75a3  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.018718158499
0x72dfe33da7e141a29b362b0caf87b9b4998939149fb31641ffed132c3f592d252 days 14 hrs ago0xbb3ed2a0eb60eee8c0dbf6d1b74e8b0a21fab056  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00042
0x787a900da2b692a010bf14b3a4cccfa6205a705599a31cf2874bb5431a13cf513 days 55 mins ago0x3101d6a23f212c64a7a3492d343000e713206791  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00046016
0xe39e8681d141d01444a16d57b77e219952eeec65acc44c57b7e4ecbad0eeae5e3 days 7 hrs ago0xd562f635c75d2d7f3be0005fbd3808a5cfb896bd  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00036025
0x68cf7c97dfe9a3b6a191355f8ab98fdfdb528a416a346cce8b6f8355961a512f3 days 7 hrs ago0xd562f635c75d2d7f3be0005fbd3808a5cfb896bd  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000391425
0xc84fd033b45d4064c38254b884c93a7cd4422643a04f212ce2e02e401868175c6 days 11 hrs ago0xbb3ed2a0eb60eee8c0dbf6d1b74e8b0a21fab056  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00036
0xd8926bf08d5fece5bb8b21531e53067c1a3319cc2c60cf69720e791185e5bcaa20 days 9 hrs ago0x1ddee157dcf57de28b0e03ca011d85a007744550  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0.01 Ether0.000505104
0xae1fb890da7901ad547ace17f7b30a877d51843a9c5971c27c48c0a78938527320 days 9 hrs ago0x1ddee157dcf57de28b0e03ca011d85a007744550  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0.001 Ether0.000505104
0x2f4395ad3b51860600c9ba6822a4add6871602b942ecb8a2445b48585819d11823 days 22 hrs ago0x521db06bf657ed1d6c98553a70319a8ddbac75a3  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.003622431785
0xc88f347758faf1d55693fe5ff583082a231bdc32d20b63bb7d9068c037e6a79f52 days 5 hrs ago0xcadeb66b39ceecc12630f85a0739de723bbdb5ab  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.0003276156
0x037e6243c9cd778d50e298006a650b7e5ed8a3a0086be094093fc2fba919fdc052 days 7 hrs ago0xcadeb66b39ceecc12630f85a0739de723bbdb5ab  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00024
0xaa17abc679bacb3beaf7731f2fc9b4eb13dedc04c7b686c3bda574c0b2b7cd5052 days 21 hrs ago0xe01a56101c63fd56050445a28b4b6ba346d2a05e  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00017978
0x35086016b81de416805ba6519e71dab4d3285b8b68d2cf46fef7bca426b08d5b52 days 21 hrs ago0xe01a56101c63fd56050445a28b4b6ba346d2a05e  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00014802
0x330a243293d4aaa0d1ca2494ceaafcd6a77e2874bab13614c09fe29c2e01047d53 days 23 hrs ago0x736fb84ba7a615e38176b42159f1d1a874a33fe1  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000143824
0x7441b9ae4a7e8c7b404586d765ac314a5781a5d324fa06d09f4c894ef0c3bef054 days 19 hrs ago0x404935e6b798f82ef4e4c0c7d435a5e75c4618d6  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00009139
0x9d88feeda5c506084eed449d70560f425d59166423a3c20fe130ec290cad49b361 days 1 hr ago0x3410b04c2362496d0d06a0be58658e7cd5b50e31  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.0003
0xc6f09d7daf5b55895d446f6d648ceff2507b6e52c08c11cf3f732ad484b293a762 days 1 hr ago0x005c1ed2e9512a07bc83e0122c86d599f2384b8d  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000285788
0x954b88551c8ac403ac3d5c48acaf71db05008eddee11c8059176f744a4b2674d62 days 1 hr ago0x005c1ed2e9512a07bc83e0122c86d599f2384b8d  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000310392
0x4b676f4a0abc61d83be00279d98f873effa7515ec1a2869799ff6b53e743fad762 days 1 hr ago0xb3fb825c7ffb5cbad945122576053d98172dfc9f  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000359116
0xef0dbb48833c29ec3cf36937892e7717cc606a79cd98bcd7c058ff49c68e8fa262 days 1 hr ago0xb3fb825c7ffb5cbad945122576053d98172dfc9f  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000418604
0x5d9b705f3e4726a95b4d9117c0c9c2753fb6d24e0b4c2053792e8dbb0890add562 days 4 hrs ago0x41b0bad46f536956646f2b70027375dcd64619e8  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.00089779
0x6633f24d16026442b587c20478094d30772c2b9ea8f2b91d03668b02a97620cf63 days 5 hrs ago0x8a0c04d06ec64f8ab307ad107e3545d035bcc44d  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000418604
0x83e43ec6452e4e8168c1ebf2894dfbab89490d90e3f9d427983f94dc475b768f63 days 7 hrs ago0x8a0c04d06ec64f8ab307ad107e3545d035bcc44d  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.0003
0x8a96fa7fb0e94ca61f564ca253241faaedc050de7ad0cb1880140625d6484f5064 days 20 hrs ago0x08ba0bc97700331c56658eef298e96ae6610f1a7  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.000107412
0xd304e6969a28cfd472a4f3628b62247f604a7454678403a9a1be925873e5fdae64 days 20 hrs ago0x08ba0bc97700331c56658eef298e96ae6610f1a7  IN   0x8eb965ee9ccfbce76c0a06264492c0afefc2826d0 Ether0.0002519099
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: ToorToken
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.18;

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


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


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

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

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

}


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







/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        assert(c / a == b);
        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        assert(c >= a);
        return c;
    }
}

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

    struct Account {
        uint balance;
        uint lastInterval;
    }

    mapping(address => Account) public accounts;
    mapping(uint256 => uint256) ratesByYear;
    mapping (address => mapping (address => uint256)) internal allowed;
    uint256 private rateMultiplier;

    uint256 initialSupply_;
    uint256 totalSupply_;
    uint256 public maxSupply;
    uint256 public startTime;
    uint256 public pendingRewardsToMint;

    string public name;
    uint public decimals;
    string public symbol;

    uint256 private tokenGenInterval; // This defines the frequency at which we calculate rewards
    uint256 private vestingPeriod; // Defines how often tokens vest to team
    uint256 private cliff; // Defines the minimum amount of time required before tokens vest
    uint256 public pendingInstallments; // Defines the number of pending vesting installments for team
    uint256 public paidInstallments; // Defines the number of paid vesting installments for team
    uint256 private totalVestingPool; //  Defines total vesting pool set aside for team
    uint256 public pendingVestingPool; // Defines pending tokens in pool set aside for team
    uint256 public finalIntervalForTokenGen; // The last instance of reward calculation, after which rewards will cease
    uint256 private totalRateWindows; // This specifies the number of rate windows over the total period of time
    uint256 private intervalsPerWindow; // Total number of times we calculate rewards within 1 rate window

    // Variable to define once reward generation is complete
    bool public rewardGenerationComplete;

    // Ether addresses of founders and company
    mapping(uint256 => address) public distributionAddresses;

    // Events section
    event Mint(address indexed to, uint256 amount);
    event Burn(address indexed burner, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function ToorToken() public {
        name = "ToorCoin";
        decimals = 18;
        symbol = "TOOR";

        // Setup the token staking reward percentage per year
        rateMultiplier = 10**9;
        ratesByYear[1] = 1.00474436 * 10**9;
        ratesByYear[2] = 1.003278088 * 10**9;
        ratesByYear[3] = 1.002799842 * 10**9;
        ratesByYear[4] = 1.002443535 * 10**9;
        ratesByYear[5] = 1.002167763 * 10**9;
        ratesByYear[6] = 1.001947972 * 10**9;
        ratesByYear[7] = 1.001768676 * 10**9;
        ratesByYear[8] = 1.001619621 * 10**9;
        ratesByYear[9] = 1.001493749 * 10**9;
        ratesByYear[10] = 1.001386038 * 10**9;
        ratesByYear[11] = 1.001292822 * 10**9;
        ratesByYear[12] = 1.001211358 * 10**9;
        ratesByYear[13] = 1.001139554 * 10**9;
        ratesByYear[14] = 1.001075789 * 10**9;
        ratesByYear[15] = 1.001018783 * 10**9;
        ratesByYear[16] = 1.000967516 * 10**9;
        ratesByYear[17] = 1.000921162 * 10**9;
        ratesByYear[18] = 1.000879048 * 10**9;
        ratesByYear[19] = 1.000840616 * 10**9;
        ratesByYear[20] = 1.000805405 * 10**9;

        totalRateWindows = 20;
        
        maxSupply = 100000000 * 10**18;
        initialSupply_ = 13500000 * 10**18;
        pendingInstallments = 7;
        paidInstallments = 0;
        totalVestingPool = 4500000 * 10**18;
        startTime = now;

        distributionAddresses[1] = 0x7d3BC9bb69dAB0544d34b7302DED8806bCF715e6; // founder 1
        distributionAddresses[2] = 0x34Cf9afae3f926B9D040CA7A279C411355c5C480; // founder 2
        distributionAddresses[3] = 0x059Cbd8A57b1dD944Da020a0D0a18D8dD7e78E04; // founder 3
        distributionAddresses[4] = 0x4F8bC705827Fb8A781b27B9F02d2491F531f8962; // founder 4
        distributionAddresses[5] = 0x532d370a98a478714625E9148D1205be061Df3bf; // founder 5
        distributionAddresses[6] = 0xDe485bB000fA57e73197eF709960Fb7e32e0380E; // company
        distributionAddresses[7] = 0xd562f635c75D2d7f3BE0005FBd3808a5cfb896bd; // bounty
        
        // This is for 20 years
        tokenGenInterval = 603936;  // This is roughly 1 week in seconds
        uint256 timeToGenAllTokens = 628093440; // This is close to 20 years in seconds

        rewardGenerationComplete = false;
        
        // Mint initial tokens
        accounts[distributionAddresses[6]].balance = (initialSupply_ * 60) / 100; // 60% of initial balance goes to Company
        accounts[distributionAddresses[6]].lastInterval = 0;
        generateMintEvents(distributionAddresses[6],accounts[distributionAddresses[6]].balance);
        accounts[distributionAddresses[7]].balance = (initialSupply_ * 40) / 100; // 40% of inital balance goes to Bounty
        accounts[distributionAddresses[7]].lastInterval = 0;
        generateMintEvents(distributionAddresses[7],accounts[distributionAddresses[7]].balance);

        pendingVestingPool = totalVestingPool;
        pendingRewardsToMint = maxSupply - initialSupply_ - totalVestingPool;
        totalSupply_ = initialSupply_;
        vestingPeriod = timeToGenAllTokens / (totalRateWindows * 12); // One vesting period is a month
        cliff = vestingPeriod * 6; // Cliff is six vesting periods aka 6 months roughly
        finalIntervalForTokenGen = timeToGenAllTokens / tokenGenInterval;
        intervalsPerWindow = finalIntervalForTokenGen / totalRateWindows;
    }

    // This gives the total supply of actual minted coins. Does not take rewards pending minting into consideration
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    // This function is called directly by users who wish to transfer tokens
    function transfer(address _to, uint256 _value) canTransfer(_to) public returns (bool) {
        // Call underlying transfer method and pass in the sender address
        transferBasic(msg.sender, _to, _value);
        return true;
    }

    // This function is called by both transfer and transferFrom
    function transferBasic(address _from, address _to, uint256 _value) internal {
        uint256 tokensOwedSender = 0;
        uint256 tokensOwedReceiver = 0;
        uint256 balSender = balanceOfBasic(_from);

        // Distribute rewards tokens first
        if (!rewardGenerationComplete) {
            tokensOwedSender = tokensOwed(_from);
            require(_value <= (balSender.add(tokensOwedSender))); // Sender should have the number of tokens they want to send

            tokensOwedReceiver = tokensOwed(_to);

            // If there were tokens owed, increase total supply accordingly
            if ((tokensOwedSender.add(tokensOwedReceiver)) > 0) {
                increaseTotalSupply(tokensOwedSender.add(tokensOwedReceiver)); // This will break if total exceeds max cap
                pendingRewardsToMint = pendingRewardsToMint.sub(tokensOwedSender.add(tokensOwedReceiver));
            }

            // If there were tokens owed, raise mint events for them
            raiseEventIfMinted(_from, tokensOwedSender);
            raiseEventIfMinted(_to, tokensOwedReceiver);
        } else {
            require(_value <= balSender);
        }
        
        // Update balances of sender and receiver
        accounts[_from].balance = (balSender.add(tokensOwedSender)).sub(_value);
        accounts[_to].balance = (accounts[_to].balance.add(tokensOwedReceiver)).add(_value);

        // Update last intervals for sender and receiver
        uint256 currInt = intervalAtTime(now);
        accounts[_from].lastInterval = currInt;
        accounts[_to].lastInterval = currInt;

        emit Transfer(_from, _to, _value);
    }

    // If you want to transfer tokens to multiple receivers at once
    function batchTransfer(address[] _receivers, uint256 _value) public returns (bool) {
        uint256 cnt = _receivers.length;
        uint256 amount = cnt.mul(_value);
        
        // Check that the value to send is more than 0
        require(_value > 0);

        // Add pending rewards for sender first
        if (!rewardGenerationComplete) {
            addReward(msg.sender);
        }

        // Get current balance of sender
        uint256 balSender = balanceOfBasic(msg.sender);

        // Check that the sender has the required amount
        require(balSender >= amount);

        // Update balance and lastInterval of sender
        accounts[msg.sender].balance = balSender.sub(amount);
        uint256 currInt = intervalAtTime(now);
        accounts[msg.sender].lastInterval = currInt;
        
        
        for (uint i = 0; i < cnt; i++) {
            // Add pending rewards for receiver first
            if (!rewardGenerationComplete) {
                address receiver = _receivers[i];
                
                addReward(receiver);
            }

            // Update balance and lastInterval of receiver
            accounts[_receivers[i]].balance = (accounts[_receivers[i]].balance).add(_value);
            accounts[_receivers[i]].lastInterval = currInt;
            emit Transfer(msg.sender, _receivers[i], _value);
        }

        return true;
    }

    // This function allows someone to withdraw tokens from someone's address
    // For this to work, the person needs to have been approved by the account owner (via the approve function)
    function transferFrom(address _from, address _to, uint256 _value) canTransfer(_to) public returns (bool)
    {
        // Check that function caller has been approved to withdraw tokens
        require(_value <= allowed[_from][msg.sender]);

        // Call out base transfer method
        transferBasic(_from, _to, _value);

        // Subtract withdrawn tokens from allowance
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);

        return true;
    }

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

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

  
   // Increase the amount of tokens that an owner allowed to a spender.
   // approve should be called when allowed[_spender] == 0. To increment
   // allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined)
    function increaseApproval(address _spender, uint _addedValue) public returns (bool)
    {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

   // Decrease the amount of tokens that an owner allowed to a spender.
   // approve should be called when allowed[_spender] == 0. To decrement
   // allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined)
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool)
    {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    function raiseEventIfMinted(address owner, uint256 tokensToReward) private returns (bool) {
        if (tokensToReward > 0) {
            generateMintEvents(owner, tokensToReward);
        }
    }

    function addReward(address owner) private returns (bool) {
        uint256 tokensToReward = tokensOwed(owner);

        if (tokensToReward > 0) {
            increaseTotalSupply(tokensToReward); // This will break if total supply exceeds max cap. Should never happen though as tokensOwed checks for this condition
            accounts[owner].balance = accounts[owner].balance.add(tokensToReward);
            accounts[owner].lastInterval = intervalAtTime(now);
            pendingRewardsToMint = pendingRewardsToMint.sub(tokensToReward); // This helps track rounding errors when computing rewards
            generateMintEvents(owner, tokensToReward);
        }

        return true;
    }

    // This function is to vest tokens to the founding team
    // This deliberately doesn't use SafeMath as all the values are controlled without risk of overflow
    function vestTokens() public returns (bool) {
        require(pendingInstallments > 0);
        require(paidInstallments < 7);
        require(pendingVestingPool > 0);
        require(now - startTime > cliff);

        // If they have rewards pending, allocate those first
        if (!rewardGenerationComplete) {
            for (uint256 i = 1; i <= 5; i++) {
                addReward(distributionAddresses[i]);
            }
        }

        uint256 currInterval = intervalAtTime(now);
        uint256 tokensToVest = 0;
        uint256 totalTokensToVest = 0;
        uint256 totalPool = totalVestingPool;

        uint256[2] memory founderCat;
        founderCat[0] = 0;
        founderCat[1] = 0;

        uint256[5] memory origFounderBal;
        origFounderBal[0] = accounts[distributionAddresses[1]].balance;
        origFounderBal[1] = accounts[distributionAddresses[2]].balance;
        origFounderBal[2] = accounts[distributionAddresses[3]].balance;
        origFounderBal[3] = accounts[distributionAddresses[4]].balance;
        origFounderBal[4] = accounts[distributionAddresses[5]].balance;

        uint256[2] memory rewardCat;
        rewardCat[0] = 0;
        rewardCat[1] = 0;

        // Pay out cliff
        if (paidInstallments < 1) {
            uint256 intervalAtCliff = intervalAtTime(cliff + startTime);
            tokensToVest = totalPool / 4;

            founderCat[0] = tokensToVest / 4;
            founderCat[1] = tokensToVest / 8;

            // Update vesting pool
            pendingVestingPool -= tokensToVest;

            // This condition checks if there are any rewards to pay after the cliff
            if (currInterval > intervalAtCliff && !rewardGenerationComplete) {
                rewardCat[0] = tokensOwedByInterval(founderCat[0], intervalAtCliff, currInterval);
                rewardCat[1] = rewardCat[0] / 2;

                // Add rewards to founder tokens being vested
                founderCat[0] += rewardCat[0];
                founderCat[1] += rewardCat[1];

                // Increase total amount of tokens to vest
                tokensToVest += ((3 * rewardCat[0]) + (2 * rewardCat[1]));

                // Reduce pending rewards
                pendingRewardsToMint -= ((3 * rewardCat[0]) + (2 * rewardCat[1]));
            }

            // Vest tokens for each of the founders, this includes any rewards pending since cliff passed
            accounts[distributionAddresses[1]].balance += founderCat[0];
            accounts[distributionAddresses[2]].balance += founderCat[0];
            accounts[distributionAddresses[3]].balance += founderCat[0];
            accounts[distributionAddresses[4]].balance += founderCat[1];
            accounts[distributionAddresses[5]].balance += founderCat[1];

            totalTokensToVest = tokensToVest;

            // Update pending and paid installments
            pendingInstallments -= 1;
            paidInstallments += 1;
        }

        // Calculate the pending non-cliff installments to pay based on current time
        uint256 installments = ((currInterval * tokenGenInterval) - cliff) / vestingPeriod;
        uint256 installmentsToPay = installments + 1 - paidInstallments;

        // If there are no installments to pay, skip this
        if (installmentsToPay > 0) {
            if (installmentsToPay > pendingInstallments) {
                installmentsToPay = pendingInstallments;
            }

            // 12.5% vesting monthly after the cliff
            tokensToVest = (totalPool * 125) / 1000;

            founderCat[0] = tokensToVest / 4;
            founderCat[1] = tokensToVest / 8;

            uint256 intervalsAtVest = 0;

            // Loop through installments to pay, so that we can add token holding rewards as we go along
            for (uint256 installment = paidInstallments; installment < (installmentsToPay + paidInstallments); installment++) {
                intervalsAtVest = intervalAtTime(cliff + (installment * vestingPeriod) + startTime);

                // This condition checks if there are any rewards to pay after the cliff
                if (currInterval >= intervalsAtVest && !rewardGenerationComplete) {
                    rewardCat[0] = tokensOwedByInterval(founderCat[0], intervalsAtVest, currInterval);
                    rewardCat[1] = rewardCat[0] / 2;

                    // Increase total amount of tokens to vest
                    totalTokensToVest += tokensToVest;
                    totalTokensToVest += ((3 * rewardCat[0]) + (2 * rewardCat[1]));

                    // Reduce pending rewards
                    pendingRewardsToMint -= ((3 * rewardCat[0]) + (2 * rewardCat[1]));

                    // Vest tokens for each of the founders, this includes any rewards pending since vest interval passed
                    accounts[distributionAddresses[1]].balance += (founderCat[0] + rewardCat[0]);
                    accounts[distributionAddresses[2]].balance += (founderCat[0] + rewardCat[0]);
                    accounts[distributionAddresses[3]].balance += (founderCat[0] + rewardCat[0]);
                    accounts[distributionAddresses[4]].balance += (founderCat[1] + rewardCat[1]);
                    accounts[distributionAddresses[5]].balance += (founderCat[1] + rewardCat[1]);
                }
            }

            // Reduce pendingVestingPool and update pending and paid installments
            pendingVestingPool -= (installmentsToPay * tokensToVest);
            pendingInstallments -= installmentsToPay;
            paidInstallments += installmentsToPay;
        }

        // Increase total supply by the number of tokens being vested
        increaseTotalSupply(totalTokensToVest);
            
        accounts[distributionAddresses[1]].lastInterval = currInterval;
        accounts[distributionAddresses[2]].lastInterval = currInterval;
        accounts[distributionAddresses[3]].lastInterval = currInterval;
        accounts[distributionAddresses[4]].lastInterval = currInterval;
        accounts[distributionAddresses[5]].lastInterval = currInterval;

        // Create events for token generation
        generateMintEvents(distributionAddresses[1], (accounts[distributionAddresses[1]].balance - origFounderBal[0]));
        generateMintEvents(distributionAddresses[2], (accounts[distributionAddresses[2]].balance - origFounderBal[1]));
        generateMintEvents(distributionAddresses[3], (accounts[distributionAddresses[3]].balance - origFounderBal[2]));
        generateMintEvents(distributionAddresses[4], (accounts[distributionAddresses[4]].balance - origFounderBal[3]));
        generateMintEvents(distributionAddresses[5], (accounts[distributionAddresses[5]].balance - origFounderBal[4]));
    }

    function increaseTotalSupply (uint256 tokens) private returns (bool) {
        require ((totalSupply_.add(tokens)) <= maxSupply);
        totalSupply_ = totalSupply_.add(tokens);

        return true;
    }

    function tokensOwed(address owner) public view returns (uint256) {
        // This array is introduced to circumvent stack depth issues
        uint256 currInterval = intervalAtTime(now);
        uint256 lastInterval = accounts[owner].lastInterval;
        uint256 balance = accounts[owner].balance;

        return tokensOwedByInterval(balance, lastInterval, currInterval);
    }

    function tokensOwedByInterval(uint256 balance, uint256 lastInterval, uint256 currInterval) public view returns (uint256) {
        // Once the specified address has received all possible rewards, don't calculate anything
        if (lastInterval >= currInterval || lastInterval >= finalIntervalForTokenGen) {
            return 0;
        }

        uint256 tokensHeld = balance; //tokensHeld
        uint256 intPerWin = intervalsPerWindow;
        uint256 totalRateWinds = totalRateWindows;

        // Defines the number of intervals we compute rewards for at a time
        uint256 intPerBatch = 5; // Hardcoded here instead of storing on blockchain to save gas

        mapping(uint256 => uint256) ratByYear = ratesByYear;
        uint256 ratMultiplier = rateMultiplier;

        uint256 minRateWindow = (lastInterval / intPerWin).add(1);
        uint256 maxRateWindow = (currInterval / intPerWin).add(1);
        if (maxRateWindow > totalRateWinds) {
            maxRateWindow = totalRateWinds;
        }

        // Loop through pending periods of rewards, and calculate the total balance user should hold
        for (uint256 rateWindow = minRateWindow; rateWindow <= maxRateWindow; rateWindow++) {
            uint256 intervals = getIntervalsForWindow(rateWindow, lastInterval, currInterval, intPerWin);

            // This part is to ensure we don't overflow when rewards are pending for a large number of intervals
            // Loop through interval in batches
            while (intervals > 0) {
                if (intervals >= intPerBatch) {
                    tokensHeld = (tokensHeld.mul(ratByYear[rateWindow] ** intPerBatch)) / (ratMultiplier ** intPerBatch);
                    intervals = intervals.sub(intPerBatch);
                } else {
                    tokensHeld = (tokensHeld.mul(ratByYear[rateWindow] ** intervals)) / (ratMultiplier ** intervals);
                    intervals = 0;
                }
            }            
        }

        // Rewards owed are the total balance that user SHOULD have minus what they currently have
        return (tokensHeld.sub(balance));
    }

    function intervalAtTime(uint256 time) public view returns (uint256) {
        // Check to see that time passed in is not before contract generation time, as that would cause a negative value in the next step
        if (time <= startTime) {
            return 0;
        }

        // Based on time passed in, check how many intervals have elapsed
        uint256 interval = (time.sub(startTime)) / tokenGenInterval;
        uint256 finalInt = finalIntervalForTokenGen; // Assign to local to reduce gas
        
        // Return max intervals if it's greater than that time
        if (interval > finalInt) {
            return finalInt;
        } else {
            return interval;
        }
    }

    // This function checks how many intervals for a given window do we owe tokens to someone for 
    function getIntervalsForWindow(uint256 rateWindow, uint256 lastInterval, uint256 currInterval, uint256 intPerWind) public pure returns (uint256) {
        // If lastInterval for holder falls in a window previous to current one, the lastInterval for the window passed into the function would be the window start interval
        if (lastInterval < ((rateWindow.sub(1)).mul(intPerWind))) {
            lastInterval = ((rateWindow.sub(1)).mul(intPerWind));
        }

        // If currentInterval for holder falls in a window higher than current one, the currentInterval for the window passed into the function would be the window end interval
        if (currInterval > rateWindow.mul(intPerWind)) {
            currInterval = rateWindow.mul(intPerWind);
        }

        return currInterval.sub(lastInterval);
    }

    // This function tells the balance of tokens at a particular address
    function balanceOf(address _owner) public view returns (uint256 balance) {
        if (rewardGenerationComplete) {
            return accounts[_owner].balance;
        } else {
            return (accounts[_owner].balance).add(tokensOwed(_owner));
        }
    }

    function balanceOfBasic(address _owner) public view returns (uint256 balance) {
        return accounts[_owner].balance;
    }

    // This functions returns the last time at which rewards were transferred to a particular address
    function lastTimeOf(address _owner) public view returns (uint256 interval, uint256 time) {
        return (accounts[_owner].lastInterval, ((accounts[_owner].lastInterval).mul(tokenGenInterval)).add(startTime));
    }

    // This function is not meant to be used. It's only written as a fail-safe against potential unforeseen issues
    function mint(address _to, uint256 _amount) onlyOwner public returns (bool) {
        // Add pending rewards for recipient of minted tokens
        if (!rewardGenerationComplete) {
            addReward(_to);
        }

        // Increase total supply by minted amount
        increaseTotalSupply(_amount);

        // Update balance and last interval
        accounts[_to].lastInterval = intervalAtTime(now);
        accounts[_to].balance = (accounts[_to].balance).add(_amount);

        generateMintEvents(_to, _amount);
        return true;
    }

    function generateMintEvents(address _to, uint256 _amount) private returns (bool) {
        emit Mint(_to, _amount);
        emit Transfer(address(0), _to, _amount);

        return true;
    }

    // Allows the burning of tokens
    function burn(uint256 _value) public {
        require(_value <= balanceOf(msg.sender));

        // First add any rewards pending for the person burning tokens
        if (!rewardGenerationComplete) {
            addReward(msg.sender);
        }

        // Update balance and lastInterval of person burning tokens
        accounts[msg.sender].balance = (accounts[msg.sender].balance).sub(_value);
        accounts[msg.sender].lastInterval = intervalAtTime(now);

        // Update total supply
        totalSupply_ = totalSupply_.sub(_value);

        // Raise events
        emit Burn(msg.sender, _value);
        emit Transfer(msg.sender, address(0), _value);
    }

    // These set of functions allow changing of founder and company addresses
    function setFounder(uint256 id, address _to) onlyOwner public returns (bool) {
        require(_to != address(0));
        distributionAddresses[id] = _to;
        return true;
    }

    // This is a setter for rewardGenerationComplete. It will be used to see if token rewards need to be computed, and can only be set by owner
    function setRewardGenerationComplete(bool _value) onlyOwner public returns (bool) {
        rewardGenerationComplete = _value;
        return true;
    }

    // This function is added to get a state of where the token is in term of reward generation
    function getNow() public view returns (uint256, uint256, uint256) {
        return (now, block.number, intervalAtTime(now));
    }

    // This modifier is used on the transfer method and defines where tokens CANNOT be sent
    modifier canTransfer(address _to) {
        require(_to != address(0)); // Transfer should not be allowed to burn tokens
        _;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"time","type":"uint256"}],"name":"intervalAtTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"lastTimeOf","outputs":[{"name":"interval","type":"uint256"},{"name":"time","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"tokensOwed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"balance","type":"uint256"},{"name":"lastInterval","type":"uint256"},{"name":"currInterval","type":"uint256"}],"name":"tokensOwedByInterval","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paidInstallments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingRewardsToMint","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accounts","outputs":[{"name":"balance","type":"uint256"},{"name":"lastInterval","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receivers","type":"address[]"},{"name":"_value","type":"uint256"}],"name":"batchTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingVestingPool","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"_to","type":"address"}],"name":"setFounder","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"bool"}],"name":"setRewardGenerationComplete","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"vestTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getNow","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"distributionAddresses","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardGenerationComplete","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rateWindow","type":"uint256"},{"name":"lastInterval","type":"uint256"},{"name":"currInterval","type":"uint256"},{"name":"intPerWind","type":"uint256"}],"name":"getIntervalsForWindow","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOfBasic","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingInstallments","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"finalIntervalForTokenGen","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"}]

  Contract Creation Code Switch To Opcodes View
60806040523480156200001157600080fd5b506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040805190810160405280600881526020017f546f6f72436f696e000000000000000000000000000000000000000000000000815250600a9080519060200190620000a192919062000b71565b506012600b819055506040805190810160405280600481526020017f544f4f5200000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000f792919062000b71565b50633b9aca00600481905550633be32ea8600260006001815260200190815260200160002081905550633bcccf08600260006002815260200190815260200160002081905550633bc582e2600260006003815260200190815260200160002081905550633bc0130f600260006004815260200190815260200160002081905550633bbbddd3600260006005815260200190815260200160002081905550633bb88344600260006006815260200190815260200160002081905550633bb5c6e4600260006007815260200190815260200160002081905550633bb380a5600260006008815260200190815260200160002081905550633bb194f5600260006009815260200190815260200160002081905550633baff03660026000600a815260200190815260200160002081905550633bae841660026000600b815260200190815260200160002081905550633bad45de60026000600c815260200190815260200160002081905550633bac2d6260026000600d815260200190815260200160002081905550633bab344d60026000600e815260200190815260200160002081905550633baa559f60026000600f815260200190815260200160002081905550633ba98d5c600260006010815260200190815260200160002081905550633ba8d84a600260006011815260200190815260200160002081905550633ba833c8600260006012815260200190815260200160002081905550633ba79da8600260006013815260200190815260200160002081905550633ba7141d60026000601481526020019081526020016000208190555060146015819055506a52b7d2dcc80cd2e40000006007819055506a0b2abc7767ce87fd800000600581905550600760108190555060006011819055506a03b8e97d229a2d5480000060128190555042600881905550737d3bc9bb69dab0544d34b7302ded8806bcf715e6601860006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507334cf9afae3f926b9d040ca7a279c411355c5c480601860006002815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073059cbd8a57b1dd944da020a0d0a18d8dd7e78e04601860006003815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f8bc705827fb8a781b27b9f02d2491f531f8962601860006004815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073532d370a98a478714625e9148d1205be061df3bf601860006005815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073de485bb000fa57e73197ef709960fb7e32e0380e601860006006815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d562f635c75d2d7f3be0005fbd3808a5cfb896bd601860006007815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062093720600d8190555063256ff20090506000601760006101000a81548160ff0219169083151502179055506064603c60055402811515620006ab57fe5b0460016000601860006006815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600060016000601860006006815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555062000867601860006006815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000601860006006815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015462000ab1640100000000026401000000009004565b5060646028600554028115156200087a57fe5b0460016000601860006007815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600060016000601860006007815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555062000a36601860006007815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016000601860006007815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015462000ab1640100000000026401000000009004565b506012546013819055506012546005546007540303600981905550600554600681905550600c601554028181151562000a6b57fe5b04600e819055506006600e5402600f81905550600d548181151562000a8c57fe5b0460148190555060155460145481151562000aa357fe5b046016819055505062000c20565b60008273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000bb457805160ff191683800117855562000be5565b8280016001018555821562000be5579182015b8281111562000be457825182559160200191906001019062000bc7565b5b50905062000bf4919062000bf8565b5090565b62000c1d91905b8082111562000c1957600081600090555060010162000bff565b5090565b90565b61414b8062000c306000396000f3006080604052600436106101c2576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063011de7aa146101c757806306fdde0314610208578063095ea7b31461029857806318160ddd146102fd57806323b872dd146103285780632a491877146103ad578063313ce5671461040b5780633d5dff531461043657806340c10f191461048d57806340db4b09146104f257806342966c681461054757806344defdfd1461057457806356f2eb901461059f5780635e5c06e2146105ca578063661884631461062857806370a082311461068d57806378e97925146106e457806383f12fec1461070f57806386dc8ace146107975780638da5cb5b146107c257806395d89b411461081957806399384976146108a9578063a60eb2991461090e578063a9059cbb14610955578063abf0c538146109ba578063bbe4fd50146109e9578063c0a21d3214610a22578063c61b8a4414610a8f578063c821861b14610abe578063c93e253d14610b1d578063d5abeb0114610b74578063d73dd62314610b9f578063dd62ed3e14610c04578063e799284514610c7b578063f26df08314610ca6578063f2fde38b14610cd1575b600080fd5b3480156101d357600080fd5b506101f260048036038101908080359060200190929190505050610d14565b6040518082815260200191505060405180910390f35b34801561021457600080fd5b5061021d610d71565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025d578082015181840152602081019050610242565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a457600080fd5b506102e3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e0f565b604051808215151515815260200191505060405180910390f35b34801561030957600080fd5b50610312610f01565b6040518082815260200191505060405180910390f35b34801561033457600080fd5b50610393600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f0b565b604051808215151515815260200191505060405180910390f35b3480156103b957600080fd5b506103ee600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110fb565b604051808381526020018281526020019250505060405180910390f35b34801561041757600080fd5b506104206111b5565b6040518082815260200191505060405180910390f35b34801561044257600080fd5b50610477600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506111bb565b6040518082815260200191505060405180910390f35b34801561049957600080fd5b506104d8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061126b565b604051808215151515815260200191505060405180910390f35b3480156104fe57600080fd5b506105316004803603810190808035906020019092919080359060200190929190803590602001909291905050506113f2565b6040518082815260200191505060405180910390f35b34801561055357600080fd5b506105726004803603810190808035906020019092919050505061157c565b005b34801561058057600080fd5b50610589611770565b6040518082815260200191505060405180910390f35b3480156105ab57600080fd5b506105b4611776565b6040518082815260200191505060405180910390f35b3480156105d657600080fd5b5061060b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061177c565b604051808381526020018281526020019250505060405180910390f35b34801561063457600080fd5b50610673600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117a0565b604051808215151515815260200191505060405180910390f35b34801561069957600080fd5b506106ce600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a31565b6040518082815260200191505060405180910390f35b3480156106f057600080fd5b506106f9611af7565b6040518082815260200191505060405180910390f35b34801561071b57600080fd5b5061077d6004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190929190505050611afd565b604051808215151515815260200191505060405180910390f35b3480156107a357600080fd5b506107ac611e1e565b6040518082815260200191505060405180910390f35b3480156107ce57600080fd5b506107d7611e24565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082557600080fd5b5061082e611e49565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561086e578082015181840152602081019050610853565b50505050905090810190601f16801561089b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108b557600080fd5b506108f460048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ee7565b604051808215151515815260200191505060405180910390f35b34801561091a57600080fd5b5061093b600480360381019080803515159060200190929190505050611fdc565b604051808215151515815260200191505060405180910390f35b34801561096157600080fd5b506109a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061205c565b604051808215151515815260200191505060405180910390f35b3480156109c657600080fd5b506109cf6120b1565b604051808215151515815260200191505060405180910390f35b3480156109f557600080fd5b506109fe6135b9565b60405180848152602001838152602001828152602001935050505060405180910390f35b348015610a2e57600080fd5b50610a4d600480360381019080803590602001909291905050506135d4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a9b57600080fd5b50610aa4613607565b604051808215151515815260200191505060405180910390f35b348015610aca57600080fd5b50610b076004803603810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061361a565b6040518082815260200191505060405180910390f35b348015610b2957600080fd5b50610b5e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506136bf565b6040518082815260200191505060405180910390f35b348015610b8057600080fd5b50610b8961370b565b6040518082815260200191505060405180910390f35b348015610bab57600080fd5b50610bea600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613711565b604051808215151515815260200191505060405180910390f35b348015610c1057600080fd5b50610c65600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061390d565b6040518082815260200191505060405180910390f35b348015610c8757600080fd5b50610c90613994565b6040518082815260200191505060405180910390f35b348015610cb257600080fd5b50610cbb61399a565b6040518082815260200191505060405180910390f35b348015610cdd57600080fd5b50610d12600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506139a0565b005b600080600060085484111515610d2d5760009250610d6a565b600d54610d4560085486613af590919063ffffffff16565b811515610d4e57fe5b049150601454905080821115610d6657809250610d6a565b8192505b5050919050565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e075780601f10610ddc57610100808354040283529160200191610e07565b820191906000526020600020905b815481529060010190602001808311610dea57829003601f168201915b505050505081565b600081600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600654905090565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610f4a57600080fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548311151515610fd557600080fd5b610fe0858585613b0e565b61106f83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613af590919063ffffffff16565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150509392505050565b600080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546111ac60085461119e600d54600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154613e2390919063ffffffff16565b613e5b90919063ffffffff16565b91509150915091565b600b5481565b6000806000806111ca42610d14565b9250600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549150600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506112618183856113f2565b9350505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112c857600080fd5b601760009054906101000a900460ff1615156112e9576112e783613e77565b505b6112f282613fb3565b506112fc42610d14565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061139782600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613e5b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506113e78383613ffe565b506001905092915050565b60008060008060008060008060008060008b8d10158061141457506014548d10155b156114225760009a5061156b565b8d9950601654985060155497506005965060029550600454945061145b60018a8f81151561144c57fe5b04613e5b90919063ffffffff16565b935061147c60018a8e81151561146d57fe5b04613e5b90919063ffffffff16565b92508783111561148a578792505b8391505b8282111515611555576114a3828e8e8c61361a565b90505b60008111156115485786811015156115085786850a6114e288886000868152602001908152602001600020540a8c613e2390919063ffffffff16565b8115156114eb57fe5b0499506115018782613af590919063ffffffff16565b9050611543565b80850a61153282886000868152602001908152602001600020540a8c613e2390919063ffffffff16565b81151561153b57fe5b049950600090505b6114a6565b818060010192505061148e565b6115688e8b613af590919063ffffffff16565b9a505b505050505050505050509392505050565b61158533611a31565b811115151561159357600080fd5b601760009054906101000a900460ff1615156115b4576115b233613e77565b505b61160981600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613af590919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061165842610d14565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506116b381600654613af590919063ffffffff16565b6006819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350565b60115481565b60095481565b60016020528060005260406000206000915090508060000154908060010154905082565b600080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808311156118b1576000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611945565b6118c48382613af590919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000601760009054906101000a900460ff1615611a9257600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050611af2565b611aef611a9e836111bb565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613e5b90919063ffffffff16565b90505b919050565b60085481565b600080600080600080600088519550611b1f8887613e2390919063ffffffff16565b9450600088111515611b3057600080fd5b601760009054906101000a900460ff161515611b5157611b4f33613e77565b505b611b5a336136bf565b9350848410151515611b6b57600080fd5b611b7e8585613af590919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550611bcd42610d14565b925082600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600091505b85821015611e0e57601760009054906101000a900460ff161515611c5e578882815181101515611c4757fe5b906020019060200201519050611c5c81613e77565b505b611cca88600160008c86815181101515611c7457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613e5b90919063ffffffff16565b600160008b85815181101515611cdc57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082600160008b85815181101515611d3a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508882815181101515611d9357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040518082815260200191505060405180910390a38180600101925050611c1b565b6001965050505050505092915050565b60135481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611edf5780601f10611eb457610100808354040283529160200191611edf565b820191906000526020600020905b815481529060010190602001808311611ec257829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f4457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f8057600080fd5b816018600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561203957600080fd5b81601760006101000a81548160ff02191690831515021790555060019050919050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561209b57600080fd5b6120a6338585613b0e565b600191505092915050565b6000806000806000806120c26140da565b6120ca6140fc565b6120d26140da565b6000806000806000806010541115156120ea57600080fd5b60076011541015156120fb57600080fd5b600060135411151561210c57600080fd5b600f54600854420311151561212057600080fd5b601760009054906101000a900460ff1615156121905760019c505b60058d11151561218f57612181601860008f815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613e77565b508c806001019d505061213b565b5b61219942610d14565b9b5060009a5060009950601254985060008860006002811015156121b957fe5b60200201818152505060008860016002811015156121d357fe5b60200201818152505060016000601860006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015487600060058110151561226257fe5b60200201818152505060016000601860006002815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548760016005811015156122f157fe5b60200201818152505060016000601860006003815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015487600260058110151561238057fe5b60200201818152505060016000601860006004815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015487600360058110151561240f57fe5b60200201818152505060016000601860006005815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015487600460058110151561249e57fe5b60200201818152505060008660006002811015156124b857fe5b60200201818152505060008660016002811015156124d257fe5b602002018181525050600160115410156129de576124f5600854600f5401610d14565b945060048981151561250357fe5b049a5060048b81151561251257fe5b0488600060028110151561252257fe5b60200201818152505060088b81151561253757fe5b0488600160028110151561254757fe5b6020020181815250508a601360008282540392505081905550848c11801561257c5750601760009054906101000a900460ff16155b156126c55761259f88600060028110151561259357fe5b6020020151868e6113f2565b8660006002811015156125ae57fe5b60200201818152505060028660006002811015156125c857fe5b60200201518115156125d657fe5b048660016002811015156125e657fe5b6020020181815250508560006002811015156125fe57fe5b602002015188600060028110151561261257fe5b60200201818151019150818152505085600160028110151561263057fe5b602002015188600160028110151561264457fe5b60200201818151019150818152505085600160028110151561266257fe5b602002015160020286600060028110151561267957fe5b6020020151600302018b019a5085600160028110151561269557fe5b60200201516002028660006002811015156126ac57fe5b6020020151600302016009600082825403925050819055505b8760006002811015156126d457fe5b602002015160016000601860006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555087600060028110151561276b57fe5b602002015160016000601860006002815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555087600060028110151561280257fe5b602002015160016000601860006003815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555087600160028110151561289957fe5b602002015160016000601860006004815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555087600160028110151561293057fe5b602002015160016000601860006005815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825401925050819055508a9950600160106000828254039250508190555060016011600082825401925050819055505b600e54600f54600d548e02038115156129f357fe5b049350601154600185010392506000831115612f4657601054831115612a195760105492505b6103e8607d8a02811515612a2957fe5b049a5060048b811515612a3857fe5b04886000600281101515612a4857fe5b60200201818152505060088b811515612a5d57fe5b04886001600281101515612a6d57fe5b6020020181815250506000915060115490505b6011548301811015612f1357612aa1600854600e548302600f540101610d14565b9150818c10158015612ac05750601760009054906101000a900460ff16155b15612f0657612ae3886000600281101515612ad757fe5b6020020151838e6113f2565b866000600281101515612af257fe5b6020020181815250506002866000600281101515612b0c57fe5b6020020151811515612b1a57fe5b04866001600281101515612b2a57fe5b6020020181815250508a8a019950856001600281101515612b4757fe5b6020020151600202866000600281101515612b5e57fe5b6020020151600302018a019950856001600281101515612b7a57fe5b6020020151600202866000600281101515612b9157fe5b602002015160030201600960008282540392505081905550856000600281101515612bb857fe5b6020020151886000600281101515612bcc57fe5b60200201510160016000601860006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282540192505081905550856000600281101515612c6457fe5b6020020151886000600281101515612c7857fe5b60200201510160016000601860006002815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282540192505081905550856000600281101515612d1057fe5b6020020151886000600281101515612d2457fe5b60200201510160016000601860006003815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282540192505081905550856001600281101515612dbc57fe5b6020020151886001600281101515612dd057fe5b60200201510160016000601860006004815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282540192505081905550856001600281101515612e6857fe5b6020020151886001600281101515612e7c57fe5b60200201510160016000601860006005815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825401925050819055505b8080600101915050612a80565b8a830260136000828254039250508190555082601060008282540392505081905550826011600082825401925050819055505b612f4f8a613fb3565b508b60016000601860006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508b60016000601860006002815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508b60016000601860006003815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508b60016000601860006004815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508b60016000601860006005815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613280601860006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860006005811015156131fe57fe5b602002015160016000601860006001815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403613ffe565b5061334a601860006002815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860016005811015156132c857fe5b602002015160016000601860006002815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403613ffe565b50613414601860006003815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600260058110151561339257fe5b602002015160016000601860006003815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403613ffe565b506134de601860006004815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600360058110151561345c57fe5b602002015160016000601860006004815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403613ffe565b506135a8601860006005815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688600460058110151561352657fe5b602002015160016000601860006005815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403613ffe565b505050505050505050505050505090565b600080600042436135c942610d14565b925092509250909192565b60186020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601760009054906101000a900460ff1681565b600061364282613634600188613af590919063ffffffff16565b613e2390919063ffffffff16565b8410156136725761366f82613661600188613af590919063ffffffff16565b613e2390919063ffffffff16565b93505b6136858286613e2390919063ffffffff16565b8311156136a25761369f8286613e2390919063ffffffff16565b92505b6136b58484613af590919063ffffffff16565b9050949350505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60075481565b60006137a282600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e5b90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139fb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515613a3757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000828211151515613b0357fe5b818303905092915050565b6000806000806000935060009250613b25876136bf565b9150601760009054906101000a900460ff161515613bf457613b46876111bb565b9350613b5b8483613e5b90919063ffffffff16565b8511151515613b6957600080fd5b613b72866111bb565b92506000613b898486613e5b90919063ffffffff16565b1115613bd957613baa613ba58486613e5b90919063ffffffff16565b613fb3565b50613bd2613bc18486613e5b90919063ffffffff16565b600954613af590919063ffffffff16565b6009819055505b613be387856140be565b50613bee86846140be565b50613c04565b818511151515613c0357600080fd5b5b613c2985613c1b8685613e5b90919063ffffffff16565b613af590919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550613cd685613cc885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613e5b90919063ffffffff16565b613e5b90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550613d2542610d14565b905080600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a350505050505050565b600080831415613e365760009050613e55565b8183029050818382811515613e4757fe5b04141515613e5157fe5b8090505b92915050565b60008183019050828110151515613e6e57fe5b80905092915050565b600080613e83836111bb565b90506000811115613fa957613e9781613fb3565b50613eed81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613e5b90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550613f3c42610d14565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613f9781600954613af590919063ffffffff16565b600981905550613fa78382613ffe565b505b6001915050919050565b6000600754613fcd83600654613e5b90919063ffffffff16565b11151515613fda57600080fd5b613fef82600654613e5b90919063ffffffff16565b60068190555060019050919050565b60008273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000808211156140d4576140d28383613ffe565b505b92915050565b6040805190810160405280600290602082028038833980820191505090505090565b60a0604051908101604052806005906020820280388339808201915050905050905600a165627a7a72305820743a4097f06e10351dce172395bc465febd64a21459f5646aa466412fba157c30029

   Swarm Source:
bzzr://743a4097f06e10351dce172395bc465febd64a21459f5646aa466412fba157c3

 

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.