Contract 0xE61fDAF474Fac07063f2234Fb9e60C1163Cfa850 2

 

Contract Overview

CoinDefi: COIN Token
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0xe264bdd1ab79bafffae4a5a533431c78b55d2e48cd9f47a81b0c24eb872719d3Approve(pending)2021-10-24 7:09:572 days 10 hrs ago0x017aedf5aa79d762650a4709319909a0b5b8cc82 IN CoinDefi: COIN Token0 Ether(Pending)(Pending)
0x90fd2424f024e6c5534bbff9b178fc097419bd3f89b333429103db9bba981ad4Transfer(pending)2021-10-24 2:34:592 days 14 hrs ago0xb666abef88deaa1bc717dbedb1756219e9934989 IN CoinDefi: COIN Token0 Ether(Pending)(Pending)
0x3059203a5c5a4d66f8ac312d115722e348bacc4ec20b44448911697ef9b898a2Approve134925412021-10-26 10:47:076 hrs 23 mins ago0x1cf9001ff8df345eb5e641ab0e74cf6b166ea8a3 IN  CoinDefi: COIN Token0 Ether0.00214360558880.381190514
0xb3b89adc021dc127a0268e4c706e322fec9f2b19634b46c692fa692a706dab94Approve134925252021-10-26 10:43:476 hrs 27 mins ago0x1cf9001ff8df345eb5e641ab0e74cf6b166ea8a3 IN  CoinDefi: COIN Token0 Ether0.00221846956183.188449132
0xd25f4af481d5b468b865048651dbe2a0d82694cd7bb550b5c25a3d09d5761e76Approve134924272021-10-26 10:23:166 hrs 47 mins ago0x2fb7d83b4a7b3439c1231e35d5475810a2698328 IN  CoinDefi: COIN Token0 Ether0.004833781082 103.800487078
0xa8e55831ea7b67dd43f6a73b9cabddf7c90353338942cce6ed2f8a2a31481b31Transfer134920852021-10-26 9:06:078 hrs 4 mins ago0x8c005f6a3a6e3a38487c507abccbc49a46b3e15e IN  CoinDefi: COIN Token0 Ether0.00290056780789.341705403
0xf8d685bf86e518925dec09e6d25364b83597ed810024811b8f2127736715b231Approve134911542021-10-26 5:37:4611 hrs 33 mins ago0xccb9ad826020435f5c5f995bd415603750787ba6 IN  CoinDefi: COIN Token0 Ether0.003893689681 83.612989214
0x134dddb64fc57928567359dcadebbcc102d687dfa42e59530fc95bfaa5eb6b6bApprove134909202021-10-26 4:41:0512 hrs 29 mins ago0xea89d221103029849d0c73ba6daad7eea816711c IN  CoinDefi: COIN Token0 Ether0.004989989818 107.154909357
0x4a6be99da19bc2beb973551106f1bb59e0a4aedd34b93207e5738e96c858fdb9Approve134898012021-10-26 0:29:0316 hrs 41 mins ago0xb6cc73fdc374c4fc7734433f46147ea8117178b3 IN  CoinDefi: COIN Token0 Ether0.0055835032119.9
0x8a52a4967a36a686e048d7e63348f1a287d6dac59a3a88e3a04715ff082e84daApprove134890602021-10-25 21:42:3919 hrs 28 mins ago0xdf5d02d4d5addb5abda2e905fb88259ca83b37bd IN  CoinDefi: COIN Token0 Ether0.005913729086 126.991261944
0xa539c740c65f4d2ea17701f92af9c509d41a81575d8f9a4d6309952464596db5Approve134881032021-10-25 18:04:4823 hrs 6 mins ago0x346bd8bed3c3c629713a30fc32dd46bb471cc36f IN  CoinDefi: COIN Token0 Ether0.006025200786 129.385002294
0x20ebe2eb55b34a481c31558c8a8e8747aad917fd3c66d1dde268b2091449a64eApprove134865082021-10-25 12:11:161 day 4 hrs ago0xc376ba24017baf607448e004fae87453f4fd70e2 IN  CoinDefi: COIN Token0 Ether0.002731843738 58.663540165
0xdd28aa0ce0fe0fdd8cdc2e41edc1f973e030989060d9542b45ae79a627637c4cApprove134862392021-10-25 11:09:331 day 6 hrs ago0xb145ed68c0232e725fcd14cdcec49bf2a2adce92 IN  CoinDefi: COIN Token0 Ether0.00286383677661.864615403
0x4820d0ad68867372af4f3fa0f2f526a0b8b05f75c230a1a63e73a2e7aa9b7496Transfer134861962021-10-25 10:59:111 day 6 hrs ago0x36764914480f06866e3ef718d333684cf3d67b9a IN  CoinDefi: COIN Token0 Ether0.002907407274 60.872812577
0xd536b164ac6b322b42e32778514105f5c4a134cfc0bcb175b9079cd261b94e1bApprove134861782021-10-25 10:55:031 day 6 hrs ago0x3ca0db631217e9d931542253ab2831aaabfb0dbc IN  CoinDefi: COIN Token0 Ether0.00168913422257.839139229
0xf769a70690086842bf4f6ac69b8b46dd5705378a46515e40b31bfcae49e9c3beTransfer134861592021-10-25 10:50:571 day 6 hrs ago0x7781cc2369b67655188ced8c4597683cd3b1c574 IN  CoinDefi: COIN Token0 Ether0.0049945395
0x03bd13dc43be35e5cdda7f77281d36e5f911d39f9f00d140f842dc559c64b418Approve134858822021-10-25 9:49:061 day 7 hrs ago0xcc4ea42fc4766d5283fdb4429d40b4eb094337cd IN  CoinDefi: COIN Token0 Ether0.00286740463261.574571228
0x3f601b60ed0dd673df4f219b896edd872b9ab5bc3df7c80ab9d723547b6dbf3eTransfer134858382021-10-25 9:38:491 day 7 hrs ago0x966047ba1fa613fcda032429c1780e85ba9ef76e IN  CoinDefi: COIN Token0 Ether0.003086936736 64.664140453
0xac5d0d32ead1c05e31db6b9a53e2f05c43d80998eb60d1c78c7c3e58d9f847d4Approve134857632021-10-25 9:19:561 day 7 hrs ago0x23172aa9800da68f8d2d9488c93ff3a25f43d2b6 IN  CoinDefi: COIN Token0 Ether0.00254687360354.691496379
0xb2861e4ffe71222084870f09b2062cc9826be3232787944596d063301a3a0082Approve134855162021-10-25 8:26:221 day 8 hrs ago0x2ac28b5b4e1df672fa5340fa922dd2c1d17c24d9 IN  CoinDefi: COIN Token0 Ether0.002514696769 54.000531895
0x3934025f47e738854d7f19bf4af58fee29be8070a14c2e4d4bcf20f01e914c79Transfer134836712021-10-25 1:35:361 day 15 hrs ago0x798073a3b93e2132438314f4ae3f9f6106eeb801 IN  CoinDefi: COIN Token0 Ether0.003373515135
0xfaa71fda9979f9307a81c2e4b2efe451cf1d7c3e9898704ba631ee6707e3c1cfTransfer134836712021-10-25 1:35:361 day 15 hrs ago0x798073a3b93e2132438314f4ae3f9f6106eeb801 IN  CoinDefi: COIN Token0 Ether0.00261832951754.847909781
0x388239a7ed3bbf461535818c7b83cbd7402efd171b9555088c5882993e577a96Approve134826162021-10-24 21:44:221 day 19 hrs ago0x9bbef40aae7672184d95774faa96b740bd96b125 IN  CoinDefi: COIN Token0 Ether0.00427314718691.761449634
0xeced095a9d5d72b8ba80831466a632021f9388c7465647f4292ade893465d718Approve134822842021-10-24 20:28:121 day 20 hrs ago0x30586cec385ad23abf7da82af44a5af847603ff8 IN  CoinDefi: COIN Token0 Ether0.005269593672113.159115118
0x89f950be9321a47fa135af20f4071269b20e8f1bc323cc474fbaa5ebd8271ed3Approve134804782021-10-24 13:32:572 days 3 hrs ago0x03d06608532ab8a7c820b8b2051e4be88d8793e6 IN  CoinDefi: COIN Token0 Ether0.00210897525972.215287602
[ Download CSV Export 

OVERVIEW

Coin is a cross-chain P2P decentralized wallet, exchange, and assistant powered by atomic swap and artificial intelligence technology.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CoinToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-20
*/

pragma solidity ^0.4.24;

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

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

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

/**
 * @title 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;
  address public coinvest;
  mapping (address => bool) public admins;

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

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

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

  modifier onlyCoinvest() {
      require(msg.sender == coinvest);
      _;
  }

  modifier onlyAdmin() {
      require(admins[msg.sender]);
      _;
  }

  /**
   * @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) onlyOwner public {
    require(newOwner != address(0));
    emit OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
  
  /**
   * @dev Changes the Coinvest wallet that will receive funds from investment contract.
   * @param _newCoinvest The address of the new wallet.
  **/
  function transferCoinvest(address _newCoinvest) 
    external
    onlyCoinvest
  {
    require(_newCoinvest != address(0));
    coinvest = _newCoinvest;
  }

  /**
   * @dev Used to add admins who are allowed to add funds to the investment contract.
   * @param _user The address of the admin to add or remove.
   * @param _status True to add the user, False to remove the user.
  **/
  function alterAdmin(address _user, bool _status)
    external
    onlyCoinvest
  {
    require(_user != address(0));
    require(_user != coinvest);
    admins[_user] = _status;
  }

}

/**
 * @dev Abstract contract for approveAndCall.
**/
contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}

/**
 * @title Coin Utility Token
 * @dev ERC20 contract utilizing ERC865 structure (3esmit's implementation with alterations).
 * @dev to allow users to pay Ethereum fees in tokens.
 * @author Coin -- Robert M.C. Forster
**/
contract CoinToken is Ownable {
    using SafeMathLib for uint256;
    
    string public constant symbol = "COIN";
    string public constant name = "Coin Utility Token";
    
    uint8 public constant decimals = 18;
    uint256 private _totalSupply = 107142857 * (10 ** 18);
    
    // Function sigs to be used within contract for signature recovery.
    bytes4 internal constant transferSig = 0xa9059cbb;
    bytes4 internal constant approveSig = 0x095ea7b3;
    bytes4 internal constant increaseApprovalSig = 0xd73dd623;
    bytes4 internal constant decreaseApprovalSig = 0x66188463;
    bytes4 internal constant approveAndCallSig = 0xcae9ca51;
    bytes4 internal constant revokeHashSig = 0x70de43f1;

    // Balances for each account
    mapping(address => uint256) balances;

    // Owner of account approves the transfer of an amount to another account
    mapping(address => mapping (address => uint256)) allowed;
    
    // Mapping of past used hashes: true if already used.
    mapping(address => mapping (bytes32 => bool)) invalidHashes;

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed from, address indexed spender, uint tokens);
    event HashRedeemed(bytes32 indexed txHash, address indexed from);

    /**
     * @dev Set owner and beginning balance.
    **/
    constructor()
      public
    {
        balances[msg.sender] = _totalSupply;
    }

    /**
     * @dev approveAndCall reception used primarily to pay gas with other tokens.
    **/
    function receiveApproval(address _from, uint256 _amount, address _token, bytes _data) 
      public
    {
        require(msg.sender != address(this));
        require(address(this).delegatecall(_data));
        _from; _amount; _token;
    }

/** ******************************** ERC20 ********************************* **/

    /**
     * @dev Transfers coins from one address to another.
     * @param _to The recipient of the transfer amount.
     * @param _amount The amount of tokens to transfer.
    **/
    function transfer(address _to, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_transfer(msg.sender, _to, _amount));
        return true;
    }
    
    /**
     * @dev An allowed address can transfer tokens from another's address.
     * @param _from The owner of the tokens to be transferred.
     * @param _to The address to which the tokens will be transferred.
     * @param _amount The amount of tokens to be transferred.
    **/
    function transferFrom(address _from, address _to, uint _amount)
      public
    returns (bool success)
    {
        require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount);

        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount);
        require(_transfer(_from, _to, _amount));
        return true;
    }
    
    /**
     * @dev Approves a wallet to transfer tokens on one's behalf.
     * @param _spender The wallet approved to spend tokens.
     * @param _amount The amount of tokens approved to spend.
    **/
    function approve(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_approve(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Increases the allowed amount for spender from msg.sender.
     * @param _spender The address to increase allowed amount for.
     * @param _amount The amount of tokens to increase allowed amount by.
    **/
    function increaseApproval(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_increaseApproval(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Decreases the allowed amount for spender from msg.sender.
     * @param _spender The address to decrease allowed amount for.
     * @param _amount The amount of tokens to decrease allowed amount by.
    **/
    function decreaseApproval(address _spender, uint256 _amount) 
      public
    returns (bool success)
    {
        require(_decreaseApproval(msg.sender, _spender, _amount));
        return true;
    }
    
    /**
     * @dev Used to approve an address and call a function on it in the same transaction.
     * @dev _spender The address to be approved to spend COIN.
     * @dev _amount The amount of COIN to be approved to spend.
     * @dev _data The data to send to the called contract.
    **/
    function approveAndCall(address _spender, uint256 _amount, bytes _data) 
      public
    returns (bool success) 
    {
        require(_approve(msg.sender, _spender, _amount));
        ApproveAndCallFallBack(_spender).receiveApproval(msg.sender, _amount, address(this), _data);
        return true;
    }

/** ****************************** Internal ******************************** **/
    
    /**
     * @dev Internal transfer for all functions that transfer.
     * @param _from The address that is transferring coins.
     * @param _to The receiving address of the coins.
     * @param _amount The amount of coins being transferred.
    **/
    function _transfer(address _from, address _to, uint256 _amount)
      internal
    returns (bool success)
    {
        require (_to != address(0), "Invalid transfer recipient address.");
        require(balances[_from] >= _amount, "Sender does not have enough balance.");
        
        balances[_from] = balances[_from].sub(_amount);
        balances[_to] = balances[_to].add(_amount);
        
        emit Transfer(_from, _to, _amount);
        return true;
    }
    
    /**
     * @dev Internal approve for all functions that require an approve.
     * @param _owner The owner who is allowing spender to use their balance.
     * @param _spender The wallet approved to spend tokens.
     * @param _amount The amount of tokens approved to spend.
    **/
    function _approve(address _owner, address _spender, uint256 _amount) 
      internal
    returns (bool success)
    {
        allowed[_owner][_spender] = _amount;
        emit Approval(_owner, _spender, _amount);
        return true;
    }
    
    /**
     * @dev Increases the allowed by "_amount" for "_spender" from "owner"
     * @param _owner The address that tokens may be transferred from.
     * @param _spender The address that may transfer these tokens.
     * @param _amount The amount of tokens to transfer.
    **/
    function _increaseApproval(address _owner, address _spender, uint256 _amount)
      internal
    returns (bool success)
    {
        allowed[_owner][_spender] = allowed[_owner][_spender].add(_amount);
        emit Approval(_owner, _spender, allowed[_owner][_spender]);
        return true;
    }
    
    /**
     * @dev Decreases the allowed by "_amount" for "_spender" from "_owner"
     * @param _owner The owner of the tokens to decrease allowed for.
     * @param _spender The spender whose allowed will decrease.
     * @param _amount The amount of tokens to decrease allowed by.
    **/
    function _decreaseApproval(address _owner, address _spender, uint256 _amount)
      internal
    returns (bool success)
    {
        if (allowed[_owner][_spender] <= _amount) allowed[_owner][_spender] = 0;
        else allowed[_owner][_spender] = allowed[_owner][_spender].sub(_amount);
        
        emit Approval(_owner, _spender, allowed[_owner][_spender]);
        return true;
    }
    
/** ************************ Delegated Functions *************************** **/

    /**
     * @dev Called by delegate with a signed hash of the transaction data to allow a user
     * @dev to transfer tokens without paying gas in Ether (they pay in COIN instead).
     * @param _signature Signed hash of data for this transfer.
     * @param _to The address to transfer COIN to.
     * @param _value The amount of COIN to transfer.
     * @param _gasPrice Price (IN COIN) that will be paid per unit of gas by user to "delegate".
     * @param _nonce Nonce of the user's new transaction.
    **/
    function transferPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        // Log starting gas left of transaction for later gas price calculations.
        uint256 gas = gasleft();
        
        // Recover signer address from signature; ensure address is valid.
        address from = recoverPreSigned(_signature, transferSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");
        
        // Require the hash has not been used, declare it used.
        bytes32 txHash = getPreSignedHash(transferSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        // Internal transfer.
        require(_transfer(from, _to, _value));

        // If the delegate is charging, pay them for gas in COIN.
        if (_gasPrice > 0) {
            // 35000 because of base fee of 21000 and ~14000 for the fee transfer.
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Called by a delegate with signed hash to approve a transaction for user.
     * @dev All variables equivalent to transfer except _to:
     * @param _to The address that will be approved to transfer COIN from user's wallet.
    **/
    function approvePreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, approveSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(approveSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_approve(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }

        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Used to increase the amount allowed for "_to" to spend from "from"
     * @dev A bare approve allows potentially nasty race conditions when using a delegate.
    **/
    function increaseApprovalPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        uint256 _gasPrice, 
        uint256 _nonce)
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(increaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_increaseApproval(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Added for the same reason as increaseApproval. Decreases to 0 if "_value" is greater than allowed.
    **/
    function decreaseApprovalPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value, 
        uint256 _gasPrice, 
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(decreaseApprovalSig, _to, _value, "", _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        require(_decreaseApproval(from, _to, _value));

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }

        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev approveAndCallPreSigned allows a user to approve a contract and call a function on it
     * @dev in the same transaction. As with the other presigneds, a delegate calls this with signed data from user.
     * @dev This function is the big reason we're using gas price and calculating gas use.
     * @dev Using this with the investment contract can result in varying gas costs.
     * @param _extraData The data to send to the contract.
    **/
    function approveAndCallPreSigned(
        bytes _signature,
        address _to, 
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce) 
      public
    returns (bool) 
    {
        uint256 gas = gasleft();
        address from = recoverPreSigned(_signature, approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
        require(from != address(0), "Invalid signature provided.");

        bytes32 txHash = getPreSignedHash(approveAndCallSig, _to, _value, _extraData, _gasPrice, _nonce);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        if (_value > 0) require(_approve(from, _to, _value));
        ApproveAndCallFallBack(_to).receiveApproval(from, _value, address(this), _extraData);

        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }

/** *************************** Revoke PreSigned ************************** **/
    
    /**
     * @dev Revoke hash without going through a delegate.
     * @param _hashToRevoke The hash that you no longer want to be used.
    **/
    function revokeHash(bytes32 _hashToRevoke)
      public
    returns (bool)
    {
        invalidHashes[msg.sender][_hashToRevoke] = true;
        return true;
    }
    
    /**
     * @dev Revoke hash through a delegate.
     * @param _signature The signature allowing this revocation.
     * @param _hashToRevoke The hash that you would like revoked.
     * @param _gasPrice The amount of token wei to be paid for each uint of gas.
    **/
    function revokeHashPreSigned(
        bytes _signature,
        bytes32 _hashToRevoke,
        uint256 _gasPrice)
      public
    returns (bool)
    {
        uint256 gas = gasleft();
        address from = recoverRevokeHash(_signature, _hashToRevoke, _gasPrice);
        require(from != address(0), "Invalid signature provided.");
        
        bytes32 txHash = getRevokeHash(_hashToRevoke, _gasPrice);
        require(!invalidHashes[from][txHash], "Transaction has already been executed.");
        invalidHashes[from][txHash] = true;

        invalidHashes[from][_hashToRevoke] = true;
        
        if (_gasPrice > 0) {
            gas = 35000 + gas.sub(gasleft());
            require(_transfer(from, tx.origin, _gasPrice.mul(gas)), "Gas cost could not be paid.");
        }
        
        emit HashRedeemed(txHash, from);
        return true;
    }
    
    /**
     * @dev Get hash for a revocation.
     * @param _hashToRevoke The signature to be revoked.
     * @param _gasPrice The amount to be paid to delegate for sending this tx.
    **/
    function getRevokeHash(bytes32 _hashToRevoke, uint256 _gasPrice)
      public
      view
    returns (bytes32 txHash)
    {
        return keccak256(abi.encodePacked(address(this), revokeHashSig, _hashToRevoke, _gasPrice));
    }

    /**
     * @dev Recover the address from a revocation hash.
     * @param _hashToRevoke The hash to be revoked.
     * @param _signature The signature allowing this revocation.
     * @param _gasPrice The amount of token wei to be paid for each unit of gas.
    **/
    function recoverRevokeHash(bytes _signature, bytes32 _hashToRevoke, uint256 _gasPrice)
      public
      view
    returns (address from)
    {
        return ecrecoverFromSig(getSignHash(getRevokeHash(_hashToRevoke, _gasPrice)), _signature);
    }
    
/** ************************** PreSigned Constants ************************ **/

    /**
     * @dev Used in frontend and contract to get hashed data of any given pre-signed transaction.
     * @param _to The address to transfer COIN to.
     * @param _value The amount of COIN to be transferred.
     * @param _extraData Extra data of tx if needed. Transfers and approves will leave this null.
     * @param _function Function signature of the pre-signed function being used.
     * @param _gasPrice The agreed-upon amount of COIN to be paid per unit of gas.
     * @param _nonce The user's nonce of the new transaction.
    **/
    function getPreSignedHash(
        bytes4 _function,
        address _to, 
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce)
      public
      view
    returns (bytes32 txHash) 
    {
        return keccak256(abi.encodePacked(address(this), _function, _to, _value, _extraData, _gasPrice, _nonce));
    }
    
    /**
     * @dev Recover an address from a signed pre-signed hash.
     * @param _sig The signed hash.
     * @param _function The function signature for function being called.
     * @param _to The address to transfer/approve/transferFrom/etc. tokens to.
     * @param _value The amont of tokens to transfer/approve/etc.
     * @param _extraData The extra data included in the transaction, if any.
     * @param _gasPrice The amount of token wei to be paid to the delegate for each unit of gas.
     * @param _nonce The user's nonce for this transaction.
    **/
    function recoverPreSigned(
        bytes _sig,
        bytes4 _function,
        address _to,
        uint256 _value,
        bytes _extraData,
        uint256 _gasPrice,
        uint256 _nonce) 
      public
      view
    returns (address recovered)
    {
        return ecrecoverFromSig(getSignHash(getPreSignedHash(_function, _to, _value, _extraData, _gasPrice, _nonce)), _sig);
    }
    
    /**
     * @dev Add signature prefix to hash for recovery à la ERC191.
     * @param _hash The hashed transaction to add signature prefix to.
    **/
    function getSignHash(bytes32 _hash)
      public
      pure
    returns (bytes32 signHash)
    {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash));
    }

    /**
     * @dev Helps to reduce stack depth problems for delegations. Thank you to Bokky for this!
     * @param hash The hash of signed data for the transaction.
     * @param sig Contains r, s, and v for recovery of address from the hash.
    **/
    function ecrecoverFromSig(bytes32 hash, bytes sig) 
      public 
      pure 
    returns (address recoveredAddress) 
    {
        bytes32 r;
        bytes32 s;
        uint8 v;
        if (sig.length != 65) return address(0);
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            // Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread.
            // There is no 'mload8' to do this, but that would be nicer.
            v := byte(0, mload(add(sig, 96)))
        }
        // Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28]
        // geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053
        if (v < 27) v += 27;
        if (v != 27 && v != 28) return address(0);
        return ecrecover(hash, v, r, s);
    }

/** ****************************** Constants ******************************* **/
    
    /**
     * @dev Return total supply of token.
    **/
    function totalSupply() 
      external
      view 
     returns (uint256)
    {
        return _totalSupply;
    }

    /**
     * @dev Return balance of a certain address.
     * @param _owner The address whose balance we want to check.
    **/
    function balanceOf(address _owner)
      external
      view 
    returns (uint256) 
    {
        return balances[_owner];
    }
    
    /**
     * @dev Allowed amount for a user to spend of another's tokens.
     * @param _owner The owner of the tokens approved to spend.
     * @param _spender The address of the user allowed to spend the tokens.
    **/
    function allowance(address _owner, address _spender) 
      external
      view 
    returns (uint256) 
    {
        return allowed[_owner][_spender];
    }
    
/** ****************************** onlyOwner ******************************* **/
    
    /**
     * @dev Allow the owner to take ERC20 tokens off of this contract if they are accidentally sent.
    **/
    function tokenEscape(address _tokenContract)
      external
      onlyOwner
    {
        CoinToken lostToken = CoinToken(_tokenContract);
        
        uint256 stuckTokens = lostToken.balanceOf(address(this));
        lostToken.transfer(owner, stuckTokens);
    }
    
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"coinvest","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sig","type":"bytes"},{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"recoverPreSigned","outputs":[{"name":"recovered","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_status","type":"bool"}],"name":"alterAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"transferPreSigned","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":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"tokenEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"admins","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"recoverRevokeHash","outputs":[{"name":"from","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approvePreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_hashToRevoke","type":"bytes32"}],"name":"revokeHash","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"decreaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"revokeHashPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_token","type":"address"},{"name":"_data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_hashToRevoke","type":"bytes32"},{"name":"_gasPrice","type":"uint256"}],"name":"getRevokeHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_function","type":"bytes4"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"getPreSignedHash","outputs":[{"name":"txHash","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"increaseApprovalPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"}],"name":"getSignHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_signature","type":"bytes"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"},{"name":"_gasPrice","type":"uint256"},{"name":"_nonce","type":"uint256"}],"name":"approveAndCallPreSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"sig","type":"bytes"}],"name":"ecrecoverFromSig","outputs":[{"name":"recoveredAddress","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","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":false,"inputs":[{"name":"_newCoinvest","type":"address"}],"name":"transferCoinvest","outputs":[],"payable":false,"stateMutability":"nonpayable","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":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"txHash","type":"bytes32"},{"indexed":true,"name":"from","type":"address"}],"name":"HashRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526a58a061ea91aa7f2584000060035534801561001f57600080fd5b5060008054600160a060020a0319908116339081178084556001805490931682178355600160a060020a039081168452600260209081526040808620805460ff1990811687179091558554909316865280862080549093169094179091556003549184526004905291205561258b806100996000396000f3006080604052600436106101875763ffffffff60e060020a60003504166306fdde03811461018c5780630958a9f314610216578063095ea7b31461024757806309ea63e31461027f57806310840303146103595780631296830d1461038157806318160ddd146103f457806323b872dd1461041b578063313ce567146104455780633f45440614610470578063429b62e514610491578063476e492f146104b2578063617b390b14610514578063661884631461058757806370a08231146105ab57806370de43f1146105cc5780638be52783146105e45780638da5cb5b146106575780638e421f161461066c5780638f4ffcb1146106ce57806395d89b411461073e578063a59b3d4614610753578063a9059cbb1461076e578063a9a0b49514610792578063adb8249e14610829578063b15aa5b71461089c578063c8d4b389146108b4578063cae9ca511461096a578063d4acaf6c146109d3578063d73dd62314610a31578063dd62ed3e14610a55578063dfb6c46814610a7c578063f2fde38b14610a9d575b600080fd5b34801561019857600080fd5b506101a1610abe565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101db5781810151838201526020016101c3565b50505050905090810190601f1680156102085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022257600080fd5b5061022b610af5565b60408051600160a060020a039092168252519081900360200190f35b34801561025357600080fd5b5061026b600160a060020a0360043516602435610b04565b604080519115158252519081900360200190f35b34801561028b57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b94369492936024939284019190819084018382808284375050604080516020601f60608a01358b0180359182018390048302840183018552818452989b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff198b35169b600160a060020a03848d0135169b958601359a919950975060809094019550919350918201918190840183828082843750949750508435955050506020909201359150610b259050565b34801561036557600080fd5b5061037f600160a060020a03600435166024351515610b52565b005b34801561038d57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135610bc4565b34801561040057600080fd5b50610409610e08565b60408051918252519081900360200190f35b34801561042757600080fd5b5061026b600160a060020a0360043581169060243516604435610e0e565b34801561045157600080fd5b5061045a610edc565b6040805160ff9092168252519081900360200190f35b34801561047c57600080fd5b5061037f600160a060020a0360043516610ee1565b34801561049d57600080fd5b5061026b600160a060020a0360043516611030565b3480156104be57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261022b9436949293602493928401919081908401838280828437509497505084359550505060209092013591506110459050565b34801561052057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a0316945050506020820135916040810135915060600135611065565b34801561059357600080fd5b5061026b600160a060020a03600435166024356111c9565b3480156105b757600080fd5b50610409600160a060020a03600435166111d6565b3480156105d857600080fd5b5061026b6004356111f1565b3480156105f057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561121b565b34801561066357600080fd5b5061022b61137f565b34801561067857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050843595505050602090920135915061138e9050565b3480156106da57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261037f94600160a060020a0381358116956024803596604435909316953695608494920191819084018382808284375094975061158a9650505050505050565b34801561074a57600080fd5b506101a161161d565b34801561075f57600080fd5b50610409600435602435611654565b34801561077a57600080fd5b5061026b600160a060020a036004351660243561171b565b34801561079e57600080fd5b50604080516020601f606435600481810135928301849004840285018401909552818452610409947bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1981351694600160a060020a0360248035919091169560443595369560849493019181908401838280828437509497505084359550505060209092013591506117289050565b34801561083557600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375094975050508335600160a060020a031694505050602082013591604081013591506060013561189f565b3480156108a857600080fd5b50610409600435611a03565b3480156108c057600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261026b94369492936024939284019190819084018382808284375050604080516020888301358a018035601f8101839004830284018301909452838352979a8935600160a060020a03169a8a8301359a91999098506060909101965091945090810192508190840183828082843750949750508435955050506020909201359150611aad9050565b34801561097657600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261026b948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611dff9650505050505050565b3480156109df57600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261022b958335953695604494919390910191908190840183828082843750949750611f1b9650505050505050565b348015610a3d57600080fd5b5061026b600160a060020a0360043516602435611ff0565b348015610a6157600080fd5b50610409600160a060020a0360043581169060243516611ffd565b348015610a8857600080fd5b5061037f600160a060020a0360043516612028565b348015610aa957600080fd5b5061037f600160a060020a0360043516612083565b60408051808201909152601281527f436f696e205574696c69747920546f6b656e0000000000000000000000000000602082015281565b600154600160a060020a031681565b6000610b11338484612117565b1515610b1c57600080fd5b50600192915050565b6000610b46610b40610b3b898989898989611728565b611a03565b89611f1b565b98975050505050505050565b600154600160a060020a03163314610b6957600080fd5b600160a060020a0382161515610b7e57600080fd5b600154600160a060020a0383811691161415610b9957600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b6000806000805a9250610bf68963a9059cbb60e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515610c46576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b610c6e63a9059cbb60e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615610cef576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612182565b1515610d3357600080fd5b6000861115610dc357610d4d5a849063ffffffff61235e16565b6188b8019250610d6d8232610d68898763ffffffff61237016565b612182565b1515610dc3576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a350600198975050505050505050565b60035490565b600160a060020a0383166000908152600460205260408120548211801590610e595750600160a060020a03841660009081526005602090815260408083203384529091529020548211155b1515610e6457600080fd5b600160a060020a0384166000908152600560209081526040808320338452909152902054610e98908363ffffffff61235e16565b600160a060020a0385166000908152600560209081526040808320338452909152902055610ec7848484612182565b1515610ed257600080fd5b5060019392505050565b601281565b600080548190600160a060020a03163314610efb57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d6020811015610f8957600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b505050506040513d602081101561102957600080fd5b5050505050565b60026020526000908152604090205460ff1681565b600061105d611057610b3b8585611654565b85611f1b565b949350505050565b6000806000805a92506110978963095ea7b360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a03821615156110e7576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61110f63095ea7b360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611190576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d28828989612117565b6000610b1133848461239b565b600160a060020a031660009081526004602052604090205490565b33600090815260066020908152604080832093835292905220805460ff1916600190811790915590565b6000806000805a925061124d89636618846360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a038216151561129d576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6112c5636618846360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611346576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d2882898961239b565b600054600160a060020a031681565b6000806000805a92506113a2878787611045565b9150600160a060020a03821615156113f2576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b6113fc8686611654565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff161561147d576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528082208054600160ff1991821681179092558984529183208054909216179055851115611547576114d65a849063ffffffff61235e16565b6188b80192506114f18232610d68888763ffffffff61237016565b1515611547576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019695505050505050565b3330141561159757600080fd5b30600160a060020a03168160405180828051906020019080838360005b838110156115cc5781810151838201526020016115b4565b50505050905090810190601f1680156115f95780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561161757600080fd5b50505050565b60408051808201909152600481527f434f494e00000000000000000000000000000000000000000000000000000000602082015281565b604080516c0100000000000000000000000030026020808301919091527f70de43f1000000000000000000000000000000000000000000000000000000006034830152603882018590526058808301859052835180840390910181526078909201928390528151600093918291908401908083835b602083106116e85780518252601f1990920191602091820191016116c9565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209695505050505050565b6000610b11338484612182565b6000308787878787876040516020018088600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401877bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260040186600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140185815260200184805190602001908083835b602083106117fb5780518252601f1990920191602091820191016117dc565b51815160209384036101000a60001901801990921691161790529201948552508381019290925250604080518084038301815292810190819052825192975095508594508601925090508083835b602083106118685780518252601f199092019160209182019101611849565b5181516020939093036101000a600019018019909116921691909117905260405192018290039091209a9950505050505050505050565b6000806000805a92506118d18963d73dd62360e060020a028a8a60206040519081016040528060008152508b8b610b25565b9150600160a060020a0382161515611921576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b61194963d73dd62360e060020a02898960206040519081016040528060008152508a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff16156119ca576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091529020805460ff19166001179055610d288289896124b8565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c909201928390528151600093918291908401908083835b60208310611a7b5780518252601f199092019160209182019101611a5c565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b6000806000805a9250611ae58a7fcae9ca51000000000000000000000000000000000000000000000000000000008b8b8b8b8b610b25565b9150600160a060020a0382161515611b35576040805160e560020a62461bcd02815260206004820152601b6024820152600080516020612540833981519152604482015290519081900360640190fd5b611b637fcae9ca51000000000000000000000000000000000000000000000000000000008a8a8a8a8a611728565b600160a060020a038316600090815260066020908152604080832084845290915290205490915060ff1615611be4576040805160e560020a62461bcd02815260206004820152602660248201526000805160206125008339815191526044820152600080516020612520833981519152606482015290519081900360840190fd5b600160a060020a03821660009081526006602090815260408083208484529091528120805460ff19166001179055881115611c2f57611c24828a8a612117565b1515611c2f57600080fd5b88600160a060020a0316638f4ffcb1838a308b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611d1657600080fd5b505af1158015611d2a573d6000803e3d6000fd5b505050506000861115611db957611d485a849063ffffffff61235e16565b6188b8019250611d638232610d68898763ffffffff61237016565b1515611db9576040805160e560020a62461bcd02815260206004820152601b60248201527f47617320636f737420636f756c64206e6f7420626520706169642e0000000000604482015290519081900360640190fd5b604051600160a060020a0383169082907ff4a65fdaee7ca2336b6b5ea720055552af3fd371f7ebe46b8c83fa89d8c733f890600090a35060019998505050505050505050565b6000611e0c338585612117565b1515611e1757600080fd5b6040517f8f4ffcb10000000000000000000000000000000000000000000000000000000081523360048201818152602483018690523060448401819052608060648501908152865160848601528651600160a060020a038a1695638f4ffcb195948a94938a939192909160a490910190602085019080838360005b83811015611eaa578181015183820152602001611e92565b50505050905090810190601f168015611ed75780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015611ef957600080fd5b505af1158015611f0d573d6000803e3d6000fd5b506001979650505050505050565b60008060008084516041141515611f355760009350611fe7565b50505060208201516040830151606084015160001a601b60ff82161015611f5a57601b015b8060ff16601b14158015611f7257508060ff16601c14155b15611f805760009350611fe7565b60408051600080825260208083018085528a905260ff8516838501526060830187905260808301869052925160019360a0808501949193601f19840193928390039091019190865af1158015611fda573d6000803e3d6000fd5b5050506020604051035193505b50505092915050565b6000610b113384846124b8565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b600154600160a060020a0316331461203f57600080fd5b600160a060020a038116151561205457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461209a57600080fd5b600160a060020a03811615156120af57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03808416600081815260056020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000600160a060020a038316151561220a576040805160e560020a62461bcd02815260206004820152602360248201527f496e76616c6964207472616e7366657220726563697069656e7420616464726560448201527f73732e0000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03841660009081526004602052604090205482111561229f576040805160e560020a62461bcd028152602060048201526024808201527f53656e64657220646f6573206e6f74206861766520656e6f7567682062616c6160448201527f6e63652e00000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0384166000908152600460205260409020546122c8908363ffffffff61235e16565b600160a060020a0380861660009081526004602052604080822093909355908516815220546122fd908363ffffffff6124f016565b600160a060020a0380851660008181526004602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b60008282111561236a57fe5b50900390565b600082820283158061238c575082848281151561238957fe5b04145b151561239457fe5b9392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205482106123f657600160a060020a038085166000908152600560209081526040808320938716835292905290812055612453565b600160a060020a0380851660009081526005602090815260408083209387168352929052205461242c908363ffffffff61235e16565b600160a060020a038086166000908152600560209081526040808320938816835292905220555b600160a060020a0384811660008181526005602090815260408083209488168084529482529182902054825190815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a35060019392505050565b600160a060020a03808416600090815260056020908152604080832093861683529290529081205461242c908363ffffffff6124f016565b60008282018381101561239457fe005472616e73616374696f6e2068617320616c7265616479206265656e2065786563757465642e0000000000000000000000000000000000000000000000000000496e76616c6964207369676e61747572652070726f76696465642e0000000000a165627a7a72305820c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b0029

Deployed ByteCode Sourcemap

3352:22390:0:-;;;;;;;;;-1:-1:-1;;;3352:22390:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3476:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3476:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3476:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1078:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1078:23:0;;;;;;;;-1:-1:-1;;;;;1078:23:0;;;;;;;;;;;;;;6520:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6520:189:0;-1:-1:-1;;;;;6520:189:0;;;;;;;;;;;;;;;;;;;;;;;;;22261:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22261:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22261:401:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22261:401:0;;;;-1:-1:-1;;;;;22261:401:0;;;;;;;;;;;;;-1:-1:-1;22261:401:0;-1:-1:-1;22261:401:0;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;22261:401:0;;;;;;;;;;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;;22261:401:0;;;-1:-1:-1;;;22261:401:0;;;;;;-1:-1:-1;22261:401:0;;-1:-1:-1;22261:401:0;2732:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2732:188:0;-1:-1:-1;;;;;2732:188:0;;;;;;;;;;;11558:1381;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11558:1381:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11558:1381:0;;-1:-1:-1;;;11558:1381:0;;-1:-1:-1;;;;;11558:1381:0;;-1:-1:-1;;;11558:1381:0;;;;;;;;;;-1:-1:-1;11558:1381:0;;;;;24437:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24437:120:0;;;;;;;;;;;;;;;;;;;;5940:359;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5940:359:0;-1:-1:-1;;;;;5940:359:0;;;;;;;;;;;;3539:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3539:35:0;;;;;;;;;;;;;;;;;;;;;;;25458:275;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25458:275:0;-1:-1:-1;;;;;25458:275:0;;;;;1106:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1106:39:0;-1:-1:-1;;;;;1106:39:0;;;;;20398:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20398:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20398:254:0;;-1:-1:-1;;20398:254:0;;;-1:-1:-1;;;20398:254:0;;;;;;-1:-1:-1;20398:254:0;;-1:-1:-1;20398:254:0;13207:945;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13207:945:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13207:945:0;;-1:-1:-1;;;13207:945:0;;-1:-1:-1;;;;;13207:945:0;;-1:-1:-1;;;13207:945:0;;;;;;;;;;-1:-1:-1;13207:945:0;;;;;7404:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7404:207:0;-1:-1:-1;;;;;7404:207:0;;;;;;;24699:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;24699:135:0;-1:-1:-1;;;;;24699:135:0;;;;;18324:170;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18324:170:0;;;;;15484:982;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15484:982:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15484:982:0;;-1:-1:-1;;;15484:982:0;;-1:-1:-1;;;;;15484:982:0;;-1:-1:-1;;;15484:982:0;;;;;;;;;;-1:-1:-1;15484:982:0;;;;;1053:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1053:20:0;;;;18784:887;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18784:887:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18784:887:0;;-1:-1:-1;;18784:887:0;;;-1:-1:-1;;;18784:887:0;;;;;;-1:-1:-1;18784:887:0;;-1:-1:-1;18784:887:0;4925:247;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4925:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4925:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4925:247:0;;-1:-1:-1;4925:247:0;;-1:-1:-1;;;;;;;4925:247:0;3431:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3431:38:0;;;;19879:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19879:235:0;;;;;;;5454:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;5454:181:0;-1:-1:-1;;;;;5454:181:0;;;;;;;21305:367;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21305:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21305:367:0;;;;-1:-1:-1;;;;;21305:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21305:367:0;;-1:-1:-1;;21305:367:0;;;-1:-1:-1;;;21305:367:0;;;;;;-1:-1:-1;21305:367:0;;-1:-1:-1;21305:367:0;14354:988;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14354:988:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14354:988:0;;-1:-1:-1;;;14354:988:0;;-1:-1:-1;;;;;14354:988:0;;-1:-1:-1;;;14354:988:0;;;;;;;;;;-1:-1:-1;14354:988:0;;;;;22833:195;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22833:195:0;;;;;16951:1127;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16951:1127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16951:1127:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16951:1127:0;;;;;;;;;;;-1:-1:-1;16951:1127:0;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;16951:1127:0;;;;-1:-1:-1;16951:1127:0;;;;;;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;;16951:1127:0;;;-1:-1:-1;;;16951:1127:0;;;;;;-1:-1:-1;16951:1127:0;;-1:-1:-1;16951:1127:0;7921:312;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7921:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7921:312:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7921:312:0;;-1:-1:-1;7921:312:0;;-1:-1:-1;;;;;;;7921:312:0;23294:986;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23294:986:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23294:986:0;;-1:-1:-1;23294:986:0;;-1:-1:-1;;;;;;;23294:986:0;6953:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6953:207:0;-1:-1:-1;;;;;6953:207:0;;;;;;;25075:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25075:163:0;-1:-1:-1;;;;;25075:163:0;;;;;;;;;;2332:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2332:162:0;-1:-1:-1;;;;;2332:162:0;;;;;1986:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1986:178:0;-1:-1:-1;;;;;1986:178:0;;;;;3476:50;;;;;;;;;;;;;;;;;;;:::o;1078:23::-;;;-1:-1:-1;;;;;1078:23:0;;:::o;6520:189::-;6601:12;6639:39;6648:10;6660:8;6670:7;6639:8;:39::i;:::-;6631:48;;;;;;;;-1:-1:-1;6697:4:0;6520:189;;;;:::o;22261:401::-;22504:17;22546:108;22563:84;22575:71;22592:9;22603:3;22608:6;22616:10;22628:9;22639:6;22575:16;:71::i;:::-;22563:11;:84::i;:::-;22649:4;22546:16;:108::i;:::-;22539:115;22261:401;-1:-1:-1;;;;;;;;22261:401:0:o;2732:188::-;1715:8;;-1:-1:-1;;;;;1715:8:0;1701:10;:22;1693:31;;;;;;-1:-1:-1;;;;;2831:19:0;;;;2823:28;;;;;;2875:8;;-1:-1:-1;;;;;2866:17:0;;;2875:8;;2866:17;;2858:26;;;;;;-1:-1:-1;;;;;2891:13:0;;;;;;;;:6;:13;;;;;:23;;-1:-1:-1;;2891:23:0;;;;;;;;;;2732:188::o;11558:1381::-;11744:4;11850:11;11970:12;12217:14;11864:9;11850:23;;11985:77;12002:10;3759;-1:-1:-1;;;12014:11:0;12027:3;12032:6;11985:77;;;;;;;;;;;;;12044:9;12055:6;11985:16;:77::i;:::-;11970:92;-1:-1:-1;;;;;;12081:18:0;;;;12073:58;;;;;-1:-1:-1;;;;;12073:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12073:58:0;;;;;;;;;;;;;;;12234:65;3759:10;-1:-1:-1;;;12251:11:0;12264:3;12269:6;12234:65;;;;;;;;;;;;;12281:9;12292:6;12234:16;:65::i;:::-;-1:-1:-1;;;;;12319:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;12217:82;;-1:-1:-1;12319:27:0;;12318:28;12310:79;;;;;-1:-1:-1;;;;;12310:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12310:79:0;;;;-1:-1:-1;;;;;;;;;;;12310:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;12400:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;12400:34:0;12430:4;12400:34;;;12486:28;12414:4;12502:3;12507:6;12486:9;:28::i;:::-;12478:37;;;;;;;;12611:1;12599:9;:13;12595:263;;;12727:18;12735:9;12727:3;;:18;:7;:18;:::i;:::-;12719:5;:26;;-1:-1:-1;12768:46:0;12778:4;12784:9;12795:18;:9;12719:26;12795:18;:13;:18;:::i;:::-;12768:9;:46::i;:::-;12760:86;;;;;;;-1:-1:-1;;;;;12760:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12883:26;;-1:-1:-1;;;;;12883:26:0;;;12896:6;;12883:26;;;;;-1:-1:-1;12927:4:0;;11558:1381;-1:-1:-1;;;;;;;;11558:1381:0:o;24437:120::-;24537:12;;24437:120;:::o;5940:359::-;-1:-1:-1;;;;;6070:15:0;;6032:12;6070:15;;;:8;:15;;;;;;:26;-1:-1:-1;6070:26:0;;;:67;;-1:-1:-1;;;;;;6100:14:0;;;;;;:7;:14;;;;;;;;6115:10;6100:26;;;;;;;;:37;-1:-1:-1;6100:37:0;6070:67;6062:76;;;;;;;;-1:-1:-1;;;;;6180:14:0;;;;;;:7;:14;;;;;;;;6195:10;6180:26;;;;;;;;:39;;6211:7;6180:39;:30;:39;:::i;:::-;-1:-1:-1;;;;;6151:14:0;;;;;;:7;:14;;;;;;;;6166:10;6151:26;;;;;;;:68;6238:30;6159:5;6255:3;6260:7;6238:9;:30::i;:::-;6230:39;;;;;;;;-1:-1:-1;6287:4:0;5940:359;;;;;:::o;3539:35::-;3572:2;3539:35;:::o;25458:275::-;25552:19;1634:5;;25552:19;;-1:-1:-1;;;;;1634:5:0;1620:10;:19;1612:28;;;;;;25642:34;;;;;;25670:4;25642:34;;;;;;25584:14;;-1:-1:-1;;;;;;25642:19:0;;;;;:34;;;;;;;;;;;;;;-1:-1:-1;25642:19:0;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;25642:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25642:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25642:34:0;25706:5;;;25687:38;;;;;;-1:-1:-1;;;;;25706:5:0;;;25687:38;;;;;;;;;;;;25642:34;;-1:-1:-1;25687:18:0;;;;;;:38;;;;;25642:34;;25687:38;;;;;;;;;;;:18;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;25687:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25687:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;25458:275:0:o;1106:39::-;;;;;;;;;;;;;;;:::o;20398:254::-;20525:12;20562:82;20579:52;20591:39;20605:13;20620:9;20591:13;:39::i;20579:52::-;20633:10;20562:16;:82::i;:::-;20555:89;20398:254;-1:-1:-1;;;;20398:254:0:o;13207:945::-;13392:4;13415:11;13449:12;13622:14;13429:9;13415:23;;13464:76;13481:10;3814;-1:-1:-1;;;13493:10:0;13505:3;13510:6;13464:76;;;;;;;;;;;;;13522:9;13533:6;13464:16;:76::i;:::-;13449:91;-1:-1:-1;;;;;;13559:18:0;;;;13551:58;;;;;-1:-1:-1;;;;;13551:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13551:58:0;;;;;;;;;;;;;;;13639:64;3814:10;-1:-1:-1;;;13656:10:0;13668:3;13673:6;13639:64;;;;;;;;;;;;;13685:9;13696:6;13639:16;:64::i;:::-;-1:-1:-1;;;;;13723:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;13622:81;;-1:-1:-1;13723:27:0;;13722:28;13714:79;;;;;-1:-1:-1;;;;;13714:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;13714:79:0;;;;-1:-1:-1;;;;;;;;;;;13714:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13804:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;13804:34:0;13834:4;13804:34;;;13859:27;13818:4;13874:3;13879:6;13859:8;:27::i;7404:207::-;7494:12;7532:48;7550:10;7562:8;7572:7;7532:17;:48::i;24699:135::-;-1:-1:-1;;;;;24810:16:0;24777:7;24810:16;;;:8;:16;;;;;;;24699:135::o;18324:170::-;18431:10;18395:4;18417:25;;;:13;:25;;;;;;;;:40;;;;;;;:47;;-1:-1:-1;;18417:47:0;18460:4;18417:47;;;;;;18460:4;18324:170::o;15484:982::-;15679:4;15702:11;15736:12;15918:14;15716:9;15702:23;;15751:85;15768:10;3942;-1:-1:-1;;;15780:19:0;15801:3;15806:6;15751:85;;;;;;;;;;;;;15818:9;15829:6;15751:16;:85::i;:::-;15736:100;-1:-1:-1;;;;;;15855:18:0;;;;15847:58;;;;;-1:-1:-1;;;;;15847:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15847:58:0;;;;;;;;;;;;;;;15935:73;3942:10;-1:-1:-1;;;15952:19:0;15973:3;15978:6;15935:73;;;;;;;;;;;;;15990:9;16001:6;15935:16;:73::i;:::-;-1:-1:-1;;;;;16028:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;15918:90;;-1:-1:-1;16028:27:0;;16027:28;16019:79;;;;;-1:-1:-1;;;;;16019:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16019:79:0;;;;-1:-1:-1;;;;;;;;;;;16019:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16109:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;16109:34:0;16139:4;16109:34;;;16164:36;16123:4;16188:3;16193:6;16164:17;:36::i;1053:20::-;;;-1:-1:-1;;;;;1053:20:0;;:::o;18784:887::-;18929:4;18951:11;18985:12;19145:14;18965:9;18951:23;;19000:55;19018:10;19030:13;19045:9;19000:17;:55::i;:::-;18985:70;-1:-1:-1;;;;;;19074:18:0;;;;19066:58;;;;;-1:-1:-1;;;;;19066:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19066:58:0;;;;;;;;;;;;;;;19162:39;19176:13;19191:9;19162:13;:39::i;:::-;-1:-1:-1;;;;;19221:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;19145:56;;-1:-1:-1;19221:27:0;;19220:28;19212:79;;;;;-1:-1:-1;;;;;19212:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19212:79:0;;;;-1:-1:-1;;;;;;;;;;;19212:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19302:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;:34;;19332:4;-1:-1:-1;;19302:34:0;;;;;;;;19349;;;;;;:41;;;;;;;;19415:13;;19411:179;;;19459:18;19467:9;19459:3;;:18;:7;:18;:::i;:::-;19451:5;:26;;-1:-1:-1;19500:46:0;19510:4;19516:9;19527:18;:9;19451:26;19527:18;:13;:18;:::i;19500:46::-;19492:86;;;;;;;-1:-1:-1;;;;;19492:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19615:26;;-1:-1:-1;;;;;19615:26:0;;;19628:6;;19615:26;;;;;-1:-1:-1;19659:4:0;;18784:887;-1:-1:-1;;;;;;18784:887:0:o;4925:247::-;5050:10;5072:4;5050:27;;5042:36;;;;;;5105:4;-1:-1:-1;;;;;5097:26:0;5124:5;5097:33;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5097:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5089:42;;;;;;;;4925:247;;;;:::o;3431:38::-;;;;;;;;;;;;;;;;;;;:::o;19879:235::-;20033:72;;;;20058:4;20033:72;;;;;;;;;20065:13;20033:72;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20033:72:0;;;;;;;;20023:83;;19984:14;;20033:72;;;20023:83;;;;;20033:72;20023:83;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;20023:83:0;;;;;;;;;;;;-1:-1:-1;;;;;;19879:235:0:o;5454:181::-;5531:12;5569:35;5579:10;5591:3;5596:7;5569:9;:35::i;21305:367::-;21527:14;21602:4;21609:9;21620:3;21625:6;21633:10;21645:9;21656:6;21577:86;;;;;;-1:-1:-1;;;;;21577:86:0;-1:-1:-1;;;;;21577:86:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21577:86:0;-1:-1:-1;;;;;21577:86:0;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;21577:86:0;;;;;-1:-1:-1;21577:86:0;;;;;;;-1:-1:-1;21577:86:0;;;26:21:-1;;;22:32;;6:49;;21577:86:0;;;;;;;21567:97;;21577:86;;-1:-1:-1;21577:86:0;-1:-1:-1;21577:86:0;;-1:-1:-1;21567:97:0;;;-1:-1:-1;21567:97:0;-1:-1:-1;21567:97:0;21577:86;21567:97;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;21567:97:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;21305:367:0:o;14354:988::-;14547:4;14570:11;14604:12;14786:14;14584:9;14570:23;;14619:85;14636:10;3878;-1:-1:-1;;;14648:19:0;14669:3;14674:6;14619:85;;;;;;;;;;;;;14686:9;14697:6;14619:16;:85::i;:::-;14604:100;-1:-1:-1;;;;;;14723:18:0;;;;14715:58;;;;;-1:-1:-1;;;;;14715:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14715:58:0;;;;;;;;;;;;;;;14803:73;3878:10;-1:-1:-1;;;14820:19:0;14841:3;14846:6;14803:73;;;;;;;;;;;;;14858:9;14869:6;14803:16;:73::i;:::-;-1:-1:-1;;;;;14896:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;14786:90;;-1:-1:-1;14896:27:0;;14895:28;14887:79;;;;;-1:-1:-1;;;;;14887:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14887:79:0;;;;-1:-1:-1;;;;;;;;;;;14887:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14977:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;14977:34:0;15007:4;14977:34;;;15032:36;14991:4;15056:3;15061:6;15032:17;:36::i;22833:195::-;22960:59;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;22960:59:0;;;;;;;;22950:70;;22909:16;;22960:59;;;22950:70;;;;;22960:59;22950:70;36:153:-1;66:2;58:11;;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;;;;365:33;;22950:70:0;;;;;;;;;;;;-1:-1:-1;;;;;22833:195:0:o;16951:1127::-;17169:4;17192:11;17226:12;17414:14;17206:9;17192:23;-1:-1:-1;17241:91:0;17258:10;17270:17;17289:3;17294:6;17302:10;17314:9;17325:6;17241:16;:91::i;:::-;17226:106;-1:-1:-1;;;;;;17351:18:0;;;;17343:58;;;;;-1:-1:-1;;;;;17343:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17343:58:0;;;;;;;;;;;;;;;17431:79;17448:17;17467:3;17472:6;17480:10;17492:9;17503:6;17431:16;:79::i;:::-;-1:-1:-1;;;;;17530:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;;17414:96;;-1:-1:-1;17530:27:0;;17529:28;17521:79;;;;;-1:-1:-1;;;;;17521:79:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17521:79:0;;;;-1:-1:-1;;;;;;;;;;;17521:79:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17611:19:0;;;;;;:13;:19;;;;;;;;:27;;;;;;;;:34;;-1:-1:-1;;17611:34:0;17641:4;17611:34;;;17662:10;;17658:52;;;17682:27;17691:4;17697:3;17702:6;17682:8;:27::i;:::-;17674:36;;;;;;;;17744:3;-1:-1:-1;;;;;17721:43:0;;17765:4;17771:6;17787:4;17794:10;17721:84;;;;;-1:-1:-1;;;17721:84:0;;;;;;;-1:-1:-1;;;;;17721:84:0;-1:-1:-1;;;;;17721:84:0;;;;;;;;;;;-1:-1:-1;;;;;17721:84:0;-1:-1:-1;;;;;17721:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17721:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17721:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17721:84:0;;;;17834:1;17822:9;:13;17818:179;;;17866:18;17874:9;17866:3;;:18;:7;:18;:::i;:::-;17858:5;:26;;-1:-1:-1;17907:46:0;17917:4;17923:9;17934:18;:9;17858:26;17934:18;:13;:18;:::i;17907:46::-;17899:86;;;;;;;-1:-1:-1;;;;;17899:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18022:26;;-1:-1:-1;;;;;18022:26:0;;;18035:6;;18022:26;;;;;-1:-1:-1;18066:4:0;;16951:1127;-1:-1:-1;;;;;;;;;16951:1127:0:o;7921:312::-;8022:12;8061:39;8070:10;8082:8;8092:7;8061:8;:39::i;:::-;8053:48;;;;;;;;8112:91;;;;;8161:10;8112:91;;;;;;;;;;;;8190:4;8112:91;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8112:48:0;;;;;8161:10;8173:7;;8190:4;8197:5;;8112:91;;;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8112:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8112:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;8221:4:0;;7921:312;-1:-1:-1;;;;;;;7921:312:0:o;23294:986::-;23388:24;23431:9;23451;23471:7;23493:3;:10;23507:2;23493:16;;23489:39;;;23526:1;23511:17;;;;23489:39;-1:-1:-1;;;23583:2:0;23574:12;;23568:19;23621:2;23612:12;;23606:19;23866:2;23857:12;;23851:19;23848:1;23843:28;24167:2;24163:6;;;;24159:19;;;24176:2;24171:7;24159:19;24193:1;:7;;24198:2;24193:7;;:18;;;;;24204:1;:7;;24209:2;24204:7;;24193:18;24189:41;;;24228:1;24213:17;;;;24189:41;24248:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24248:24:0;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24248:24:0;;;;;;;;24241:31;;23294:986;;;;;;;;:::o;6953:207::-;7043:12;7081:48;7099:10;7111:8;7121:7;7081:17;:48::i;25075:163::-;-1:-1:-1;;;;;25205:15:0;;;25172:7;25205:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;;25075:163::o;2332:162::-;1715:8;;-1:-1:-1;;;;;1715:8:0;1701:10;:22;1693:31;;;;;;-1:-1:-1;;;;;2431:26:0;;;;2423:35;;;;;;2465:8;:23;;-1:-1:-1;;2465:23:0;-1:-1:-1;;;;;2465:23:0;;;;;;;;;;2332:162::o;1986:178::-;1634:5;;-1:-1:-1;;;;;1634:5:0;1620:10;:19;1612:28;;;;;;-1:-1:-1;;;;;2063:22:0;;;;2055:31;;;;;;2119:5;;;2098:37;;-1:-1:-1;;;;;2098:37:0;;;;2119:5;;;2098:37;;;2142:5;:16;;-1:-1:-1;;2142:16:0;-1:-1:-1;;;;;2142:16:0;;;;;;;;;;1986:178::o;9375:246::-;-1:-1:-1;;;;;9505:15:0;;;9475:12;9505:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:35;;;9556;;;;;;;9475:12;;9505:25;:15;9556:35;;;;;;;;;;;-1:-1:-1;9609:4:0;9375:246;;;;;:::o;8589:481::-;8683:12;-1:-1:-1;;;;;8722:17:0;;;;8713:66;;;;;-1:-1:-1;;;;;8713:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8798:15:0;;;;;;:8;:15;;;;;;:26;-1:-1:-1;8798:26:0;8790:75;;;;;-1:-1:-1;;;;;8790:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8904:15:0;;;;;;:8;:15;;;;;;:28;;8924:7;8904:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;8886:15:0;;;;;;;:8;:15;;;;;;:46;;;;8959:13;;;;;;;:26;;8977:7;8959:26;:17;:26;:::i;:::-;-1:-1:-1;;;;;8943:13:0;;;;;;;:8;:13;;;;;;;;;:42;;;;9011:29;;;;;;;8943:13;;9011:29;;;;;;;;;;;;;-1:-1:-1;9058:4:0;8589:481;;;;;:::o;575:113::-;633:7;656:6;;;;649:14;;;;-1:-1:-1;677:5:0;;;575:113::o;146:147::-;204:7;232:5;;;251:6;;;:20;;;270:1;265;261;:5;;;;;;;;:10;251:20;244:28;;;;;;286:1;146:147;-1:-1:-1;;;146:147:0:o;10537:400::-;-1:-1:-1;;;;;10679:15:0;;;10645:12;10679:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:36;-1:-1:-1;10675:153:0;;-1:-1:-1;;;;;10717:15:0;;;10745:1;10717:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;:29;10675:153;;;-1:-1:-1;;;;;10790:15:0;;;;;;;:7;:15;;;;;;;;:25;;;;;;;;;;:38;;10820:7;10790:38;:29;:38;:::i;:::-;-1:-1:-1;;;;;10762:15:0;;;;;;;:7;:15;;;;;;;;:25;;;;;;;;;:66;10675:153;-1:-1:-1;;;;;10854:53:0;;;10881:15;;;;:7;:15;;;;;;;;10854:53;;;10881:25;;;;;;;;;;;10854:53;;;;;;;;;;;;;;;;;-1:-1:-1;10925:4:0;10537:400;;;;;:::o;9923:303::-;-1:-1:-1;;;;;10089:15:0;;;10031:12;10089:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;;;:38;;10119:7;10089:38;:29;:38;:::i;696:133::-;754:7;782:5;;;801:6;;;;794:14;;

Swarm Source

bzzr://c5f31889e3915aad670c448dac3aa2e66d2b27260024d48e62c2b7ab26b2697b
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.