ETH Price: $3,402.39 (+3.84%)

Contract

0x12321Fb3e2548b03eaD42F09cAb239cff377b4e2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer75219632019-04-07 15:58:302111 days ago1554652710IN
Cln.network: Deployer
0.1 ETH0.000086934
Transfer51838592018-03-02 15:49:022512 days ago1520005742IN
Cln.network: Deployer
1.04 ETH0.0011953755
Transfer51470972018-02-24 9:32:402519 days ago1519464760IN
Cln.network: Deployer
0.414 ETH0.0003260115
Transfer51138102018-02-18 17:16:442524 days ago1518974204IN
Cln.network: Deployer
0.22 ETH0.001086750
Transfer51137822018-02-18 17:08:042524 days ago1518973684IN
Cln.network: Deployer
0.11 ETH0.000043462
Transfer51137602018-02-18 17:02:172524 days ago1518973337IN
Cln.network: Deployer
0.1 ETH0.000043462
Transfer51137412018-02-18 16:56:552524 days ago1518973015IN
Cln.network: Deployer
0.075 ETH0.000184752
Transfer51137402018-02-18 16:56:232524 days ago1518972983IN
Cln.network: Deployer
2.9 ETH0.0012475420
Transfer51137362018-02-18 16:55:422524 days ago1518972942IN
Cln.network: Deployer
3 ETH0.0027713130
Transfer51137342018-02-18 16:55:162524 days ago1518972916IN
Cln.network: Deployer
2.2 ETH0.0015594225
Transfer51137332018-02-18 16:54:492524 days ago1518972889IN
Cln.network: Deployer
2.63 ETH0.0037874541
Transfer51137272018-02-18 16:53:582524 days ago1518972838IN
Cln.network: Deployer
1.3 ETH0.0027713130
Transfer51137252018-02-18 16:53:402524 days ago1518972820IN
Cln.network: Deployer
0.2246 ETH0.0010851345
Transfer51137202018-02-18 16:52:002524 days ago1518972720IN
Cln.network: Deployer
2 ETH0.0027713130
Transfer51137172018-02-18 16:51:412524 days ago1518972701IN
Cln.network: Deployer
0.095 ETH0.000184752
Transfer51137172018-02-18 16:51:412524 days ago1518972701IN
Cln.network: Deployer
0.1 ETH0.000074753.1
Transfer51137162018-02-18 16:51:362524 days ago1518972696IN
Cln.network: Deployer
1.3 ETH0.0006330
Transfer51137152018-02-18 16:51:262524 days ago1518972686IN
Cln.network: Deployer
0.9873 ETH0.0027713130
Transfer51137152018-02-18 16:51:262524 days ago1518972686IN
Cln.network: Deployer
1 ETH0.0037874541
Transfer51137082018-02-18 16:50:272524 days ago1518972627IN
Cln.network: Deployer
4 ETH0.0037874541
Transfer51136972018-02-18 16:48:412524 days ago1518972521IN
Cln.network: Deployer
0.061 ETH0.00024954
Transfer51136952018-02-18 16:48:192524 days ago1518972499IN
Cln.network: Deployer
8 ETH0.0046188550
Transfer51136912018-02-18 16:46:392524 days ago1518972399IN
Cln.network: Deployer
0.062 ETH0.0001055
Transfer51136902018-02-18 16:46:302524 days ago1518972390IN
Cln.network: Deployer
0.9933 ETH0.0026874630
Transfer51136902018-02-18 16:46:302524 days ago1518972390IN
Cln.network: Deployer
0.1 ETH0.0025574541
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
51137412018-02-18 16:56:552524 days ago1518973015
Cln.network: Deployer
0.075 ETH
51137402018-02-18 16:56:232524 days ago1518972983
Cln.network: Deployer
2.9 ETH
51137362018-02-18 16:55:422524 days ago1518972942
Cln.network: Deployer
3 ETH
51137342018-02-18 16:55:162524 days ago1518972916
Cln.network: Deployer
2.2 ETH
51137332018-02-18 16:54:492524 days ago1518972889
Cln.network: Deployer
2.63 ETH
51137272018-02-18 16:53:582524 days ago1518972838
Cln.network: Deployer
1.3 ETH
51137202018-02-18 16:52:002524 days ago1518972720
Cln.network: Deployer
2 ETH
51137172018-02-18 16:51:412524 days ago1518972701
Cln.network: Deployer
0.095 ETH
51137152018-02-18 16:51:262524 days ago1518972686
Cln.network: Deployer
0.9873 ETH
51137152018-02-18 16:51:262524 days ago1518972686
Cln.network: Deployer
1 ETH
51137082018-02-18 16:50:272524 days ago1518972627
Cln.network: Deployer
4 ETH
51136972018-02-18 16:48:412524 days ago1518972521
Cln.network: Deployer
0.061 ETH
51136952018-02-18 16:48:192524 days ago1518972499
Cln.network: Deployer
8 ETH
51136902018-02-18 16:46:302524 days ago1518972390
Cln.network: Deployer
0.9933 ETH
51136902018-02-18 16:46:302524 days ago1518972390
Cln.network: Deployer
0.1 ETH
51136822018-02-18 16:43:522524 days ago1518972232
Cln.network: Deployer
0.5 ETH
51136712018-02-18 16:40:592524 days ago1518972059
Cln.network: Deployer
0.65 ETH
51136642018-02-18 16:39:342524 days ago1518971974
Cln.network: Deployer
0.996 ETH
51136622018-02-18 16:38:202524 days ago1518971900
Cln.network: Deployer
0.18 ETH
51136532018-02-18 16:36:582524 days ago1518971818
Cln.network: Deployer
0.16 ETH
51136462018-02-18 16:34:592524 days ago1518971699
Cln.network: Deployer
0.15 ETH
51136442018-02-18 16:34:242524 days ago1518971664
Cln.network: Deployer
0.99462492 ETH
51136412018-02-18 16:33:202524 days ago1518971600
Cln.network: Deployer
0.03 ETH
51136362018-02-18 16:32:482524 days ago1518971568
Cln.network: Deployer
1 ETH
51136362018-02-18 16:32:482524 days ago1518971568
Cln.network: Deployer
20 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ColuLocalNetworkSale

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-11
*/

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".
/// @dev Based on OpenZeppelin's Ownable.

contract Ownable {
    address public owner;
    address public newOwnerCandidate;

    event OwnershipRequested(address indexed _by, address indexed _to);
    event OwnershipTransferred(address indexed _from, address indexed _to);

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

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

    modifier onlyOwnerCandidate() {
        require(msg.sender == newOwnerCandidate);
        _;
    }

    /// @dev Proposes to transfer control of the contract to a newOwnerCandidate.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    function requestOwnershipTransfer(address _newOwnerCandidate) external onlyOwner {
        require(_newOwnerCandidate != address(0));

        newOwnerCandidate = _newOwnerCandidate;

        OwnershipRequested(msg.sender, newOwnerCandidate);
    }

    /// @dev Accept ownership transfer. This method needs to be called by the perviously proposed owner.
    function acceptOwnership() external onlyOwnerCandidate {
        address previousOwner = owner;

        owner = newOwnerCandidate;
        newOwnerCandidate = address(0);

        OwnershipTransferred(previousOwner, owner);
    }
}

/// @title Math operations with safety checks
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        require(a == 0 || c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // require(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // require(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) {
        require(b <= a);
        return a - b;
    }

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

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

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

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

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

    function toPower2(uint256 a) internal pure returns (uint256) {
        return mul(a, a);
    }

    function sqrt(uint256 a) internal pure returns (uint256) {
        uint256 c = (a + 1) / 2;
        uint256 b = a;
        while (c < b) {
            b = c;
            c = (a / c + c) / 2;
        }
        return b;
    }
}

/// @title ERC Token Standard #20 Interface (https://github.com/ethereum/EIPs/issues/20)
contract ERC20 {
    uint public totalSupply;
    function balanceOf(address _owner) constant public returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint remaining);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}



/// @title ERC Token Standard #677 Interface (https://github.com/ethereum/EIPs/issues/677)
contract ERC677 is ERC20 {
    function transferAndCall(address to, uint value, bytes data) public returns (bool ok);

    event TransferAndCall(address indexed from, address indexed to, uint value, bytes data);
}

/// @title ERC223Receiver Interface
/// @dev Based on the specs form: https://github.com/ethereum/EIPs/issues/223
contract ERC223Receiver {
    function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok);
}




/// @title Basic ERC20 token contract implementation.
/// @dev Based on OpenZeppelin's StandardToken.
contract BasicToken is ERC20 {
    using SafeMath for uint256;

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

    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);

    /// @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
    /// @param _spender address The address which will spend the funds.
    /// @param _value uint256 The amount of tokens to be spent.
    function approve(address _spender, uint256 _value) public returns (bool) {
        // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve (see NOTE)
        if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) {
            revert();
        }

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

        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 uint256 specifying the amount of tokens still available for the spender.
    function allowance(address _owner, address _spender) constant public returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }


    /// @dev Gets the balance of the specified address.
    /// @param _owner address The address to query the the balance of.
    /// @return uint256 representing the amount owned by the passed address.
    function balanceOf(address _owner) constant public returns (uint256 balance) {
        return balances[_owner];
    }

    /// @dev Transfer token to a specified address.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 The amount to be transferred.
    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);

        Transfer(msg.sender, _to, _value);

        return true;
    }

    /// @dev Transfer tokens from one address to another.
    /// @param _from address The address which you want to send tokens from.
    /// @param _to address The address which you want to transfer to.
    /// @param _value uint256 the amount of tokens to be transferred.
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        var _allowance = allowed[_from][msg.sender];

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);

        allowed[_from][msg.sender] = _allowance.sub(_value);

        Transfer(_from, _to, _value);

        return true;
    }
}






/// @title Standard677Token implentation, base on https://github.com/ethereum/EIPs/issues/677

contract Standard677Token is ERC677, BasicToken {

  /// @dev ERC223 safe token transfer from one address to another
  /// @param _to address the address which you want to transfer to.
  /// @param _value uint256 the amount of tokens to be transferred.
  /// @param _data bytes data that can be attached to the token transation
  function transferAndCall(address _to, uint _value, bytes _data) public returns (bool) {
    require(super.transfer(_to, _value)); // do a normal token transfer
    TransferAndCall(msg.sender, _to, _value, _data);
    //filtering if the target is a contract with bytecode inside it
    if (isContract(_to)) return contractFallback(_to, _value, _data);
    return true;
  }

  /// @dev called when transaction target is a contract
  /// @param _to address the address which you want to transfer to.
  /// @param _value uint256 the amount of tokens to be transferred.
  /// @param _data bytes data that can be attached to the token transation
  function contractFallback(address _to, uint _value, bytes _data) private returns (bool) {
    ERC223Receiver receiver = ERC223Receiver(_to);
    require(receiver.tokenFallback(msg.sender, _value, _data));
    return true;
  }

  /// @dev check if the address is contract
  /// assemble the given address bytecode. If bytecode exists then the _addr is a contract.
  /// @param _addr address the address to check
  function isContract(address _addr) private constant returns (bool is_contract) {
    // retrieve the size of the code on target address, this needs assembly
    uint length;
    assembly { length := extcodesize(_addr) }
    return length > 0;
  }
}





/// @title Token holder contract.
contract TokenHolder is Ownable {
    /// @dev Allow the owner to transfer out any accidentally sent ERC20 tokens.
    /// @param _tokenAddress address The address of the ERC20 contract.
    /// @param _amount uint256 The amount of tokens to be transferred.
    function transferAnyERC20Token(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) {
        return ERC20(_tokenAddress).transfer(owner, _amount);
    }
}






/// @title Colu Local Network contract.
/// @author Tal Beja.
contract ColuLocalNetwork is Ownable, Standard677Token, TokenHolder {
    using SafeMath for uint256;

    string public constant name = "Colu Local Network";
    string public constant symbol = "CLN";

    // Using same decimals value as ETH (makes ETH-CLN conversion much easier).
    uint8 public constant decimals = 18;

    // States whether token transfers is allowed or not.
    // Used during token sale.
    bool public isTransferable = false;

    event TokensTransferable();

    modifier transferable() {
        require(msg.sender == owner || isTransferable);
        _;
    }

    /// @dev Creates all tokens and gives them to the owner.
    function ColuLocalNetwork(uint256 _totalSupply) public {
        totalSupply = _totalSupply;
        balances[msg.sender] = totalSupply;
    }

    /// @dev start transferable mode.
    function makeTokensTransferable() external onlyOwner {
        if (isTransferable) {
            return;
        }

        isTransferable = true;

        TokensTransferable();
    }

    /// @dev Same ERC20 behavior, but reverts if not transferable.
    /// @param _spender address The address which will spend the funds.
    /// @param _value uint256 The amount of tokens to be spent.
    function approve(address _spender, uint256 _value) public transferable returns (bool) {
        return super.approve(_spender, _value);
    }

    /// @dev Same ERC20 behavior, but reverts if not transferable.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 The amount to be transferred.
    function transfer(address _to, uint256 _value) public transferable returns (bool) {
        return super.transfer(_to, _value);
    }

    /// @dev Same ERC20 behavior, but reverts if not transferable.
    /// @param _from address The address to send tokens from.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 the amount of tokens to be transferred.
    function transferFrom(address _from, address _to, uint256 _value) public transferable returns (bool) {
        return super.transferFrom(_from, _to, _value);
    }

    /// @dev Same ERC677 behavior, but reverts if not transferable.
    /// @param _to address The address to transfer to.
    /// @param _value uint256 The amount to be transferred.
    /// @param _data bytes data to send to receiver if it is a contract.
    function transferAndCall(address _to, uint _value, bytes _data) public transferable returns (bool success) {
      return super.transferAndCall(_to, _value, _data);
    }
}



 /// @title Standard ERC223 Token Receiver implementing tokenFallback function and tokenPayable modifier

contract Standard223Receiver is ERC223Receiver {
  Tkn tkn;

  struct Tkn {
    address addr;
    address sender; // the transaction caller
    uint256 value;
  }

  bool __isTokenFallback;

  modifier tokenPayable {
    require(__isTokenFallback);
    _;
  }

  /// @dev Called when the receiver of transfer is contract
  /// @param _sender address the address of tokens sender
  /// @param _value uint256 the amount of tokens to be transferred.
  /// @param _data bytes data that can be attached to the token transation
  function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok) {
    if (!supportsToken(msg.sender)) {
      return false;
    }

    // Problem: This will do a sstore which is expensive gas wise. Find a way to keep it in memory.
    // Solution: Remove the the data
    tkn = Tkn(msg.sender, _sender, _value);
    __isTokenFallback = true;
    if (!address(this).delegatecall(_data)) {
      __isTokenFallback = false;
      return false;
    }
    // avoid doing an overwrite to .token, which would be more expensive
    // makes accessing .tkn values outside tokenPayable functions unsafe
    __isTokenFallback = false;

    return true;
  }

  function supportsToken(address token) public constant returns (bool);
}





/// @title TokenOwnable
/// @dev The TokenOwnable contract adds a onlyTokenOwner modifier as a tokenReceiver with ownable addaptation

contract TokenOwnable is Standard223Receiver, Ownable {
    /// @dev Reverts if called by any account other than the owner for token sending.
    modifier onlyTokenOwner() {
        require(tkn.sender == owner);
        _;
    }
}






/// @title Vesting trustee contract for Colu Local Network.
/// @dev This Contract can't be TokenHolder, since it will allow its owner to drain its vested tokens.
/// @dev This means that any token sent to it different than ColuLocalNetwork is basicly stucked here forever.
/// @dev ColuLocalNetwork that sent here (by mistake) can withdrawn using the grant method.
contract VestingTrustee is TokenOwnable {
    using SafeMath for uint256;

    // Colu Local Network contract.
    ColuLocalNetwork public cln;

    // Vesting grant for a speicifc holder.
    struct Grant {
        uint256 value;
        uint256 start;
        uint256 cliff;
        uint256 end;
        uint256 installmentLength; // In seconds.
        uint256 transferred;
        bool revokable;
    }

    // Holder to grant information mapping.
    mapping (address => Grant) public grants;

    // Total tokens vested.
    uint256 public totalVesting;

    event NewGrant(address indexed _from, address indexed _to, uint256 _value);
    event TokensUnlocked(address indexed _to, uint256 _value);
    event GrantRevoked(address indexed _holder, uint256 _refund);

    uint constant OK = 1;
    uint constant ERR_INVALID_VALUE = 10001;
    uint constant ERR_INVALID_VESTED = 10002;
    uint constant ERR_INVALID_TRANSFERABLE = 10003;

    event Error(address indexed sender, uint error);

    /// @dev Constructor that initializes the address of the Colu Local Network contract.
    /// @param _cln ColuLocalNetwork The address of the previously deployed Colu Local Network contract.
    function VestingTrustee(ColuLocalNetwork _cln) public {
        require(_cln != address(0));

        cln = _cln;
    }

    /// @dev Allow only cln token to be tokenPayable
    /// @param token the token to check
    function supportsToken(address token) public constant returns (bool) {
        return (cln == token);
    }

    /// @dev Grant tokens to a specified address.
    /// @param _to address The holder address.
    /// @param _start uint256 The beginning of the vesting period (timestamp).
    /// @param _cliff uint256 When the first installment is made (timestamp).
    /// @param _end uint256 The end of the vesting period (timestamp).
    /// @param _installmentLength uint256 The length of each vesting installment (in seconds).
    /// @param _revokable bool Whether the grant is revokable or not.
    function grant(address _to, uint256 _start, uint256 _cliff, uint256 _end,
        uint256 _installmentLength, bool _revokable)
        external onlyTokenOwner tokenPayable {

        require(_to != address(0));
        require(_to != address(this)); // Protect this contract from receiving a grant.

        uint256 value = tkn.value;

        require(value > 0);

        // Require that every holder can be granted tokens only once.
        require(grants[_to].value == 0);

        // Require for time ranges to be consistent and valid.
        require(_start <= _cliff && _cliff <= _end);

        // Require installment length to be valid and no longer than (end - start).
        require(_installmentLength > 0 && _installmentLength <= _end.sub(_start));

        // Grant must not exceed the total amount of tokens currently available for vesting.
        require(totalVesting.add(value) <= cln.balanceOf(address(this)));

        // Assign a new grant.
        grants[_to] = Grant({
            value: value,
            start: _start,
            cliff: _cliff,
            end: _end,
            installmentLength: _installmentLength,
            transferred: 0,
            revokable: _revokable
        });

        // Since tokens have been granted, increase the total amount vested.
        totalVesting = totalVesting.add(value);

        NewGrant(msg.sender, _to, value);
    }

    /// @dev Grant tokens to a specified address.
    /// @param _to address The holder address.
    /// @param _value uint256 The amount of tokens to be granted.
    /// @param _start uint256 The beginning of the vesting period (timestamp).
    /// @param _cliff uint256 When the first installment is made (timestamp).
    /// @param _end uint256 The end of the vesting period (timestamp).
    /// @param _installmentLength uint256 The length of each vesting installment (in seconds).
    /// @param _revokable bool Whether the grant is revokable or not.
    function grant(address _to, uint256 _value, uint256 _start, uint256 _cliff, uint256 _end,
        uint256 _installmentLength, bool _revokable)
        external onlyOwner {

        require(_to != address(0));
        require(_to != address(this)); // Protect this contract from receiving a grant.
        require(_value > 0);

        // Require that every holder can be granted tokens only once.
        require(grants[_to].value == 0);

        // Require for time ranges to be consistent and valid.
        require(_start <= _cliff && _cliff <= _end);

        // Require installment length to be valid and no longer than (end - start).
        require(_installmentLength > 0 && _installmentLength <= _end.sub(_start));

        // Grant must not exceed the total amount of tokens currently available for vesting.
        require(totalVesting.add(_value) <= cln.balanceOf(address(this)));

        // Assign a new grant.
        grants[_to] = Grant({
            value: _value,
            start: _start,
            cliff: _cliff,
            end: _end,
            installmentLength: _installmentLength,
            transferred: 0,
            revokable: _revokable
        });

        // Since tokens have been granted, increase the total amount vested.
        totalVesting = totalVesting.add(_value);

        NewGrant(msg.sender, _to, _value);
    }

    /// @dev Revoke the grant of tokens of a specifed address.
    /// @dev Unlocked tokens will be sent to the grantee, the rest is transferred to the trustee's owner.
    /// @param _holder The address which will have its tokens revoked.
    function revoke(address _holder) public onlyOwner {
        Grant memory grant = grants[_holder];

        // Grant must be revokable.
        require(grant.revokable);

        // Get the total amount of vested tokens, acccording to grant.
        uint256 vested = calculateVestedTokens(grant, now);

        // Calculate the untransferred vested tokens.
        uint256 transferable = vested.sub(grant.transferred);

        if (transferable > 0) {
            // Update transferred and total vesting amount, then transfer remaining vested funds to holder.
            grant.transferred = grant.transferred.add(transferable);
            totalVesting = totalVesting.sub(transferable);
            require(cln.transfer(_holder, transferable));

            TokensUnlocked(_holder, transferable);
        }

        // Calculate amount of remaining tokens that can still be returned.
        uint256 refund = grant.value.sub(grant.transferred);

        // Remove the grant.
        delete grants[_holder];

        // Update total vesting amount and transfer previously calculated tokens to owner.
        totalVesting = totalVesting.sub(refund);
        require(cln.transfer(msg.sender, refund));

        GrantRevoked(_holder, refund);
    }

    /// @dev Calculate the amount of ready tokens of a holder.
    /// @param _holder address The address of the holder.
    /// @return a uint256 Representing a holder's total amount of vested tokens.
    function readyTokens(address _holder) public constant returns (uint256) {
        Grant memory grant = grants[_holder];

        if (grant.value == 0) {
            return 0;
        }

        uint256 vested = calculateVestedTokens(grant, now);

        if (vested == 0) {
            return 0;
        }

        return vested.sub(grant.transferred);
    }

    /// @dev Calculate the total amount of vested tokens of a holder at a given time.
    /// @param _holder address The address of the holder.
    /// @param _time uint256 The specific time to calculate against.
    /// @return a uint256 Representing a holder's total amount of vested tokens.
    function vestedTokens(address _holder, uint256 _time) public constant returns (uint256) {
        Grant memory grant = grants[_holder];
        if (grant.value == 0) {
            return 0;
        }

        return calculateVestedTokens(grant, _time);
    }

    /// @dev Calculate amount of vested tokens at a specifc time.
    /// @param _grant Grant The vesting grant.
    /// @param _time uint256 The time to be checked
    /// @return An uint256 Representing the amount of vested tokens of a specific grant.
    function calculateVestedTokens(Grant _grant, uint256 _time) private pure returns (uint256) {
        // If we're before the cliff, then nothing is vested.
        if (_time < _grant.cliff) {
            return 0;
        }

        // If we're after the end of the vesting period - everything is vested.
        if (_time >= _grant.end) {
            return _grant.value;
        }

        // Calculate amount of installments past until now.
        //
        // NOTE: result gets floored because of integer division.
        uint256 installmentsPast = _time.sub(_grant.start).div(_grant.installmentLength);

        // Calculate amount of days in entire vesting period.
        uint256 vestingDays = _grant.end.sub(_grant.start);

        // Calculate and return the number of tokens according to vesting days that have passed.
        return _grant.value.mul(installmentsPast.mul(_grant.installmentLength)).div(vestingDays);
    }

    /// @dev Unlock vested tokens and transfer them to the grantee.
    /// @return a uint The success or error code.
    function unlockVestedTokens() external returns (uint) {
        return unlockVestedTokens(msg.sender);
    }

    /// @dev Unlock vested tokens and transfer them to the grantee (helper function).
    /// @param _grantee address The address of the grantee.
    /// @return a uint The success or error code.
    function unlockVestedTokens(address _grantee) private returns (uint) {
        Grant storage grant = grants[_grantee];

        // Make sure the grant has tokens available.
        if (grant.value == 0) {
            Error(_grantee, ERR_INVALID_VALUE);
            return ERR_INVALID_VALUE;
        }

        // Get the total amount of vested tokens, acccording to grant.
        uint256 vested = calculateVestedTokens(grant, now);
        if (vested == 0) {
            Error(_grantee, ERR_INVALID_VESTED);
            return ERR_INVALID_VESTED;
        }

        // Make sure the holder doesn't transfer more than what he already has.
        uint256 transferable = vested.sub(grant.transferred);
        if (transferable == 0) {
            Error(_grantee, ERR_INVALID_TRANSFERABLE);
            return ERR_INVALID_TRANSFERABLE;
        }

        // Update transferred and total vesting amount, then transfer remaining vested funds to holder.
        grant.transferred = grant.transferred.add(transferable);
        totalVesting = totalVesting.sub(transferable);
        require(cln.transfer(_grantee, transferable));

        TokensUnlocked(_grantee, transferable);
        return OK;
    }

    /// @dev batchUnlockVestedTokens vested tokens and transfer them to the grantees.
    /// @param _grantees address[] The addresses of the grantees.
    /// @return a boo if success.
    function batchUnlockVestedTokens(address[] _grantees) external onlyOwner returns (bool success) {
        for (uint i = 0; i<_grantees.length; i++) {
            unlockVestedTokens(_grantees[i]);
        }
        return true;
    }

    /// @dev Allow the owner to transfer out any accidentally sent ERC20 tokens.
    /// @param _tokenAddress address The address of the ERC20 contract.
    /// @param _amount uint256 The amount of tokens to be transferred.
    function withdrawERC20(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) {
        if (_tokenAddress == address(cln)) {
            // If the token is cln, allow to withdraw only non vested tokens.
            uint256 availableCLN = cln.balanceOf(this).sub(totalVesting);
            require(_amount <= availableCLN);
        }
        return ERC20(_tokenAddress).transfer(owner, _amount);
    }
}








/// @title Colu Local Network sale contract.
/// @author Tal Beja.
contract ColuLocalNetworkSale is Ownable, TokenHolder {
    using SafeMath for uint256;

    // External parties:

    // Colu Local Network contract.
    ColuLocalNetwork public cln;

    // Vesting contract for presale participants.
    VestingTrustee public trustee;

    // Received funds are forwarded to this address.
    address public fundingRecipient;

    // Post-TDE multisig addresses.
    address public communityPoolAddress;
    address public futureDevelopmentPoolAddress;
    address public stakeholdersPoolAddress;

    // Colu Local Network decimals.
    // Using same decimals value as ETH (makes ETH-CLN conversion much easier).
    // This is the same as in Colu Local Network contract.
    uint256 public constant TOKEN_DECIMALS = 10 ** 18;

    // Additional Lockup Allocation Pool
    uint256 public constant ALAP = 40701333592592592592614116;

    // Maximum number of tokens in circulation: 1.5 trillion.
    uint256 public constant MAX_TOKENS = 15 * 10 ** 8 * TOKEN_DECIMALS + ALAP;

    // Maximum tokens offered in the sale (35%) + ALAP.
    uint256 public constant MAX_TOKENS_SOLD = 525 * 10 ** 6 * TOKEN_DECIMALS + ALAP;

    // Maximum tokens offered in the presale (from the initial 35% offered tokens) + ALAP.
    uint256 public constant MAX_PRESALE_TOKENS_SOLD = 2625 * 10 ** 5 * TOKEN_DECIMALS + ALAP;

    // Tokens allocated for Community pool (30%).
    uint256 public constant COMMUNITY_POOL = 45 * 10 ** 7 * TOKEN_DECIMALS;

    // Tokens allocated for Future development pool (29%).
    uint256 public constant FUTURE_DEVELOPMENT_POOL = 435 * 10 ** 6 * TOKEN_DECIMALS;

    // Tokens allocated for Stakeholdes pool (6%).
    uint256 public constant STAKEHOLDERS_POOL = 9 * 10 ** 7 * TOKEN_DECIMALS;

    // CLN to ETH ratio.
    uint256 public constant CLN_PER_ETH = 8600;

    // Sale start, end blocks (time ranges)
    uint256 public constant SALE_DURATION = 4 days;
    uint256 public startTime;
    uint256 public endTime;

    // Amount of tokens sold until now in the sale.
    uint256 public tokensSold = 0;

    // Amount of tokens sold until now in the presale.
    uint256 public presaleTokensSold = 0;

    // Accumulated amount each participant has contributed so far in the sale (in WEI).
    mapping (address => uint256) public participationHistory;

    // Accumulated amount each participant have contributed so far in the presale.
    mapping (address => uint256) public participationPresaleHistory;

    // Maximum amount that each particular is allowed to contribute (in ETH-WEI).
    // Defaults to zero. Serving as a functional whitelist. 
    mapping (address => uint256) public participationCaps;

    // Maximum amount ANYONE is currently allowed to contribute. Set to max uint256 so no limitation other than personal participationCaps.
    uint256 public hardParticipationCap = uint256(-1);

    // initialization of the contract, splitted from the constructor to avoid gas block limit.
    bool public initialized = false;

    // Vesting plan structure for presale
    struct VestingPlan {
        uint256 startOffset;
        uint256 cliffOffset;
        uint256 endOffset;
        uint256 installmentLength;
        uint8 alapPercent;
    }

    // Vesting plans for presale
    VestingPlan[] public vestingPlans;

    // Each token that is sent from the ColuLocalNetworkSale is considered as issued.
    event TokensIssued(address indexed to, uint256 tokens);

    /// @dev Reverts if called not before the sale.
    modifier onlyBeforeSale() {
        if (now >= startTime) {
            revert();
        }

        _;
    }

    /// @dev Reverts if called not during the sale.
    modifier onlyDuringSale() {
        if (tokensSold >= MAX_TOKENS_SOLD || now < startTime || now >= endTime) {
            revert();
        }

        _;
    }

    /// @dev Reverts if called before the sale ends.
    modifier onlyAfterSale() {
        if (!(tokensSold >= MAX_TOKENS_SOLD || now >= endTime)) {
            revert();
        }

        _;
    }

    /// @dev Reverts if called before the sale is initialized.
    modifier notInitialized() {
        if (initialized) {
            revert();
        }

        _;
    }


    /// @dev Reverts if called after the sale is initialized.
    modifier isInitialized() {
        if (!initialized) {
            revert();
        }

        _;
    }

    /// @dev Constructor sets the sale addresses and start time.
    /// @param _owner address The address of this contract owner.
    /// @param _fundingRecipient address The address of the funding recipient.
    /// @param _communityPoolAddress address The address of the community pool.
    /// @param _futureDevelopmentPoolAddress address The address of the future development pool.
    /// @param _stakeholdersPoolAddress address The address of the team pool.
    /// @param _startTime uint256 The start time of the token sale.
    function ColuLocalNetworkSale(address _owner,
        address _fundingRecipient,
        address _communityPoolAddress,
        address _futureDevelopmentPoolAddress,
        address _stakeholdersPoolAddress,
        uint256 _startTime) public {
        require(_owner != address(0));
        require(_fundingRecipient != address(0));
        require(_communityPoolAddress != address(0));
        require(_futureDevelopmentPoolAddress != address(0));
        require(_stakeholdersPoolAddress != address(0));
        require(_startTime > now);

        owner = _owner;
        fundingRecipient = _fundingRecipient;
        communityPoolAddress = _communityPoolAddress;
        futureDevelopmentPoolAddress = _futureDevelopmentPoolAddress;
        stakeholdersPoolAddress = _stakeholdersPoolAddress;
        startTime = _startTime;
        endTime = startTime + SALE_DURATION;
    }

    /// @dev Initialize the sale conditions.
    function initialize() public onlyOwner notInitialized {
        initialized = true;

        uint256 months = 1 years / 12;

        vestingPlans.push(VestingPlan(0, 0, 1, 1, 0));
        vestingPlans.push(VestingPlan(0, 0, 6 * months, 1 * months, 4));
        vestingPlans.push(VestingPlan(0, 0, 1 years, 1 * months, 12));
        vestingPlans.push(VestingPlan(0, 0, 2 years, 1 * months, 26));
        vestingPlans.push(VestingPlan(0, 0, 3 years, 1 * months, 35));

        // Deploy new ColuLocalNetwork contract.
        cln = new ColuLocalNetwork(MAX_TOKENS);

        // Deploy new VestingTrustee contract.
        trustee = new VestingTrustee(cln);

        // allocate pool tokens:
        // Issue the remaining tokens to designated pools.
        require(transferTokens(communityPoolAddress, COMMUNITY_POOL));

        // stakeholdersPoolAddress will create its own vesting trusts.
        require(transferTokens(stakeholdersPoolAddress, STAKEHOLDERS_POOL));
    }

    /// @dev Allocate tokens to presale participant according to its vesting plan and invesment value.
    /// @param _recipient address The presale participant address to recieve the tokens.
    /// @param _etherValue uint256 The invesment value (in ETH).
    /// @param _vestingPlanIndex uint8 The vesting plan index.
    function presaleAllocation(address _recipient, uint256 _etherValue, uint8 _vestingPlanIndex) external onlyOwner onlyBeforeSale isInitialized {
        require(_recipient != address(0));
        require(_vestingPlanIndex < vestingPlans.length);

        // Calculate plan and token amount.
        VestingPlan memory plan = vestingPlans[_vestingPlanIndex];
        uint256 tokensAndALAPPerEth = CLN_PER_ETH.mul(SafeMath.add(100, plan.alapPercent)).div(100);

        uint256 tokensLeftInPreSale = MAX_PRESALE_TOKENS_SOLD.sub(presaleTokensSold);
        uint256 weiLeftInSale = tokensLeftInPreSale.div(tokensAndALAPPerEth);
        uint256 weiToParticipate = SafeMath.min256(_etherValue, weiLeftInSale);
        require(weiToParticipate > 0);
        participationPresaleHistory[msg.sender] = participationPresaleHistory[msg.sender].add(weiToParticipate);
        uint256 tokensToTransfer = weiToParticipate.mul(tokensAndALAPPerEth);
        presaleTokensSold = presaleTokensSold.add(tokensToTransfer);
        tokensSold = tokensSold.add(tokensToTransfer);

        // Transfer tokens to trustee and create grant.
        grant(_recipient, tokensToTransfer, startTime.add(plan.startOffset), startTime.add(plan.cliffOffset),
            startTime.add(plan.endOffset), plan.installmentLength, false);
    }

    /// @dev Add a list of participants to a capped participation tier.
    /// @param _participants address[] The list of participant addresses.
    /// @param _cap uint256 The cap amount (in ETH-WEI).
    function setParticipationCap(address[] _participants, uint256 _cap) external onlyOwner isInitialized {
        for (uint i = 0; i < _participants.length; i++) {
            participationCaps[_participants[i]] = _cap;
        }
    }

    /// @dev Set hard participation cap for all participants.
    /// @param _cap uint256 The hard cap amount.
    function setHardParticipationCap(uint256 _cap) external onlyOwner isInitialized {
        require(_cap > 0);

        hardParticipationCap = _cap;
    }

    /// @dev Fallback function that will delegate the request to participate().
    function () external payable onlyDuringSale isInitialized {
        participate(msg.sender);
    }

    /// @dev Create and sell tokens to the caller.
    /// @param _recipient address The address of the recipient receiving the tokens.
    function participate(address _recipient) public payable onlyDuringSale isInitialized {
        require(_recipient != address(0));

        // Enforce participation cap (in WEI received).
        uint256 weiAlreadyParticipated = participationHistory[_recipient];
        uint256 participationCap = SafeMath.min256(participationCaps[_recipient], hardParticipationCap);
        uint256 cappedWeiReceived = SafeMath.min256(msg.value, participationCap.sub(weiAlreadyParticipated));
        require(cappedWeiReceived > 0);

        // Accept funds and transfer to funding recipient.
        uint256 tokensLeftInSale = MAX_TOKENS_SOLD.sub(tokensSold);
        uint256 weiLeftInSale = tokensLeftInSale.div(CLN_PER_ETH);
        uint256 weiToParticipate = SafeMath.min256(cappedWeiReceived, weiLeftInSale);
        participationHistory[_recipient] = weiAlreadyParticipated.add(weiToParticipate);
        fundingRecipient.transfer(weiToParticipate);

        // Transfer tokens to recipient.
        uint256 tokensToTransfer = weiToParticipate.mul(CLN_PER_ETH);
        if (tokensLeftInSale.sub(tokensToTransfer) < CLN_PER_ETH) {
            // If purchase would cause less than CLN_PER_ETH tokens to be left then nobody could ever buy them.
            // So, gift them to the last buyer.
            tokensToTransfer = tokensLeftInSale;
        }
        tokensSold = tokensSold.add(tokensToTransfer);
        require(transferTokens(_recipient, tokensToTransfer));

        // Partial refund if full participation not possible
        // e.g. due to cap being reached.
        uint256 refund = msg.value.sub(weiToParticipate);
        if (refund > 0) {
            msg.sender.transfer(refund);
        }
    }

    /// @dev Finalizes the token sale event: make future development pool grant (lockup) and make token transfarable.
    function finalize() external onlyAfterSale onlyOwner isInitialized {
        if (cln.isTransferable()) {
            revert();
        }

        // Add unsold token to the future development pool grant (lockup).
        uint256 tokensLeftInSale = MAX_TOKENS_SOLD.sub(tokensSold);
        uint256 futureDevelopmentPool = FUTURE_DEVELOPMENT_POOL.add(tokensLeftInSale);
        // Future Development Pool is locked for 3 years.
        grant(futureDevelopmentPoolAddress, futureDevelopmentPool, startTime, startTime.add(3 years),
            startTime.add(3 years), 1 days, false);

        // Make tokens Transferable, end the sale!.
        cln.makeTokensTransferable();
    }

    function grant(address _grantee, uint256 _amount, uint256 _start, uint256 _cliff, uint256 _end,
        uint256 _installmentLength, bool _revokable) private {
        // bytes4 grantSig = bytes4(keccak256("grant(address,uint256,uint256,uint256,uint256,bool)"));
        bytes4 grantSig = 0x5ee7e96d;
        // 6 arguments of size 32
        uint256 argsSize = 6 * 32;
        // sig + arguments size
        uint256 dataSize = 4 + argsSize;

        bytes memory m_data = new bytes(dataSize);

        assembly {
            // Add the signature first to memory
            mstore(add(m_data, 0x20), grantSig)
            // Add the parameters
            mstore(add(m_data, 0x24), _grantee)
            mstore(add(m_data, 0x44), _start)
            mstore(add(m_data, 0x64), _cliff)
            mstore(add(m_data, 0x84), _end)
            mstore(add(m_data, 0xa4), _installmentLength)
            mstore(add(m_data, 0xc4), _revokable)
        }

        require(transferTokens(trustee, _amount, m_data));
    }

    /// @dev Transfer tokens from the sale contract to a recipient.
    /// @param _recipient address The address of the recipient.
    /// @param _tokens uint256 The amount of tokens to transfer.
    function transferTokens(address _recipient, uint256 _tokens) private returns (bool ans) {
        ans = cln.transfer(_recipient, _tokens);
        if (ans) {
            TokensIssued(_recipient, _tokens);
        }
    }

    /// @dev Transfer tokens from the sale contract to a recipient.
    /// @param _recipient address The address of the recipient.
    /// @param _tokens uint256 The amount of tokens to transfer.
    /// @param _data bytes data to send to receiver if it is a contract.
    function transferTokens(address _recipient, uint256 _tokens, bytes _data) private returns (bool ans) {
        // Request Colu Local Network contract to transfer the requested tokens for the buyer.
        ans = cln.transferAndCall(_recipient, _tokens, _data);
        if (ans) {
            TokensIssued(_recipient, _tokens);
        }
    }

    /// @dev Requests to transfer control of the Colu Local Network contract to a new owner.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    ///
    /// NOTE:
    ///   1. The new owner will need to call Colu Local Network contract's acceptOwnership directly in order to accept the ownership.
    ///   2. Calling this method during the token sale will prevent the token sale to continue, since only the owner of
    ///      the Colu Local Network contract can transfer tokens during the sale.
    function requestColuLocalNetworkOwnershipTransfer(address _newOwnerCandidate) external onlyOwner {
        cln.requestOwnershipTransfer(_newOwnerCandidate);
    }

    /// @dev Accepts new ownership on behalf of the Colu Local Network contract.
    // This can be used by the sale contract itself to claim back ownership of the Colu Local Network contract.
    function acceptColuLocalNetworkOwnership() external onlyOwner {
        cln.acceptOwnership();
    }

    /// @dev Requests to transfer control of the VestingTrustee contract to a new owner.
    /// @param _newOwnerCandidate address The address to transfer ownership to.
    ///
    /// NOTE:
    ///   1. The new owner will need to call trustee contract's acceptOwnership directly in order to accept the ownership.
    ///   2. Calling this method during the token sale will prevent the token sale from alocation presale grunts add finalize, since only the owner of
    ///      the trustee contract can create grunts needed in the presaleAlocation add finalize methods.
    function requestVestingTrusteeOwnershipTransfer(address _newOwnerCandidate) external onlyOwner {
        trustee.requestOwnershipTransfer(_newOwnerCandidate);
    }

    /// @dev Accepts new ownership on behalf of the VestingTrustee contract.
    /// This can be used by the token sale contract itself to claim back ownership of the VestingTrustee contract.
    function acceptVestingTrusteeOwnership() external onlyOwner {
        trustee.acceptOwnership();
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_etherValue","type":"uint256"},{"name":"_vestingPlanIndex","type":"uint8"}],"name":"presaleAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS_SOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fundingRecipient","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationHistory","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"stakeholdersPoolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"vestingPlans","outputs":[{"name":"startOffset","type":"uint256"},{"name":"cliffOffset","type":"uint256"},{"name":"endOffset","type":"uint256"},{"name":"installmentLength","type":"uint256"},{"name":"alapPercent","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CLN_PER_ETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cap","type":"uint256"}],"name":"setHardParticipationCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"hardParticipationCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SALE_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FUTURE_DEVELOPMENT_POOL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationCaps","outputs":[{"name":"","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":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"STAKEHOLDERS_POOL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ALAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_participants","type":"address[]"},{"name":"_cap","type":"uint256"}],"name":"setParticipationCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cln","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COMMUNITY_POOL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptColuLocalNetworkOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"participate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestColuLocalNetworkOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwnerCandidate","type":"address"}],"name":"requestVestingTrusteeOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptVestingTrusteeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwnerCandidate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_PRESALE_TOKENS_SOLD","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"communityPoolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"futureDevelopmentPoolAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participationPresaleHistory","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"trustee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_fundingRecipient","type":"address"},{"name":"_communityPoolAddress","type":"address"},{"name":"_futureDevelopmentPoolAddress","type":"address"},{"name":"_stakeholdersPoolAddress","type":"address"},{"name":"_startTime","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"TokensIssued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526000600a819055600b55600019600f556010805460ff19169055341561002957600080fd5b60405160c08062003f1683398101604052808051919060200180519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a039081169190911790915590925087161515905061009357600080fd5b600160a060020a03851615156100a857600080fd5b600160a060020a03841615156100bd57600080fd5b600160a060020a03831615156100d257600080fd5b600160a060020a03821615156100e757600080fd5b4281116100f357600080fd5b60008054600160a060020a0319908116600160a060020a0398891617825560048054821697891697909717909655600580548716958816959095179094556006805486169387169390931790925560078054909416941693909317909155600882905562054600909101600955613da59081906200017190396000f3006060604052600436106101df5763ffffffff60e060020a6000350416630952c504811461023157806310ae4a7314610250578063158ef93e1461027857806317f5de951461029f5780631bb534ba146102c45780633197cbb6146102f3578063341c33041461030657806349432923146103195780634bb278f314610338578063518ab2a81461034b57806355b1182c1461035e5780635a592380146103715780635b3b20e1146103ba5780635b7f415c146103cd57806364329400146103e057806365b9e37d146103f65780636d79207c14610409578063751ecea01461041c57806376e532211461042f57806378e979251461044e57806379ba5097146104615780637eddea211461047457806381030e35146104875780638129fc1c1461049a57806383d880d0146104ad5780638da5cb5b146104cf57806390604005146104e2578063aeb47e2a146104f5578063b3b4ec5414610508578063b91038c71461051b578063baa835681461052f578063c28f9df11461054e578063cfabe67b1461056d578063d091b55014610580578063dc39d06d14610593578063e5514c9d146105b5578063ea02db0f146105c8578063ed3788c9146105db578063f47c84c5146105ee578063fae95a7114610601578063fdf97cb214610620575b600a546b01d3efeabe3216ca7036b2e4901015806101fe575060085442105b8061020b57506009544210155b1561021557600080fd5b60105460ff16151561022657600080fd5b61022f33610633565b005b341561023c57600080fd5b61022f600160a060020a0360043516610857565b341561025b57600080fd5b61022f600160a060020a036004351660243560ff604435166108ea565b341561028357600080fd5b61028b610b13565b604051901515815260200160405180910390f35b34156102aa57600080fd5b6102b2610b1c565b60405190815260200160405180910390f35b34156102cf57600080fd5b6102d7610b2c565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b6102b2610b3b565b341561031157600080fd5b6102b2610b41565b341561032457600080fd5b6102b2600160a060020a0360043516610b47565b341561034357600080fd5b61022f610b59565b341561035657600080fd5b6102b2610d08565b341561036957600080fd5b6102d7610d0e565b341561037c57600080fd5b610387600435610d1d565b6040519485526020850193909352604080850192909252606084015260ff909116608083015260a0909101905180910390f35b34156103c557600080fd5b6102b2610d5f565b34156103d857600080fd5b6102b2610d65565b34156103eb57600080fd5b61022f600435610d71565b341561040157600080fd5b6102b2610daf565b341561041457600080fd5b6102b2610db5565b341561042757600080fd5b6102b2610dbc565b341561043a57600080fd5b6102b2600160a060020a0360043516610dcc565b341561045957600080fd5b6102b2610dde565b341561046c57600080fd5b61022f610de4565b341561047f57600080fd5b6102b2610e71565b341561049257600080fd5b6102b2610e80565b34156104a557600080fd5b61022f610e8f565b34156104b857600080fd5b61022f6024600480358281019291013590356112b6565b34156104da57600080fd5b6102d7611331565b34156104ed57600080fd5b6102d7611340565b341561050057600080fd5b6102b261134f565b341561051357600080fd5b61022f61135f565b61022f600160a060020a0360043516610633565b341561053a57600080fd5b61022f600160a060020a03600435166113cf565b341561055957600080fd5b61022f600160a060020a036004351661144b565b341561057857600080fd5b61022f6114b6565b341561058b57600080fd5b6102d7611510565b341561059e57600080fd5b61028b600160a060020a036004351660243561151f565b34156105c057600080fd5b6102b26115c4565b34156105d357600080fd5b6102d76115d3565b34156105e657600080fd5b6102d76115e2565b34156105f957600080fd5b6102b26115f1565b341561060c57600080fd5b6102b2600160a060020a0360043516611601565b341561062b57600080fd5b6102d7611613565b6000806000806000806000806a21aad7b717d3774336b2e4670de0b6b3a7640000631f4add400201600a5410158061066c575060085442105b8061067957506009544210155b1561068357600080fd5b60105460ff16151561069457600080fd5b600160a060020a03891615156106a957600080fd5b600160a060020a0389166000908152600c6020908152604080832054600e90925290912054600f549199506106dd91611622565b96506106f8346106f3898b63ffffffff61163a16565b611622565b95506000861161070757600080fd5b600a54610727906b01d3efeabe3216ca7036b2e49063ffffffff61163a16565b945061073b8561219863ffffffff61164f16565b93506107478685611622565b9250610759888463ffffffff61166616565b600160a060020a03808b166000908152600c60205260409081902092909255600454169084156108fc0290859051600060405180830381858888f1935050505015156107a457600080fd5b6107b68361219863ffffffff61167816565b91506121986107cb868463ffffffff61163a16565b10156107d5578491505b600a546107e8908363ffffffff61166616565b600a556107f5898361169f565b151561080057600080fd5b610810348463ffffffff61163a16565b9050600081111561084c57600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561084c57600080fd5b505050505050505050565b60005433600160a060020a0390811691161461087257600080fd5b600160a060020a038116151561088757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b6108f2611963565b60008054819081908190819033600160a060020a0390811691161461091657600080fd5b600854421061092457600080fd5b60105460ff16151561093557600080fd5b600160a060020a038916151561094a57600080fd5b60115460ff88161061095b57600080fd5b6011805460ff891690811061096c57fe5b906000526020600020906005020160a0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260049091015460ff16608082019081529096506109f0906064906109e4906109d59083905160ff16611666565b6121989063ffffffff61167816565b9063ffffffff61164f16565b600b54909550610a12906afacd613aa4f520d9b6b2e49063ffffffff61163a16565b9350610a24848663ffffffff61164f16565b9250610a308884611622565b915060008211610a3f57600080fd5b600160a060020a0333166000908152600d6020526040902054610a68908363ffffffff61166616565b600160a060020a0333166000908152600d6020526040902055610a91828663ffffffff61167816565b600b54909150610aa7908263ffffffff61166616565b600b55600a54610abd908263ffffffff61166616565b600a5561084c8982610ad989516008549063ffffffff61166616565b610af08a602001516008549063ffffffff61166616565b610b078b604001516008549063ffffffff61166616565b8b606001516000611765565b60105460ff1681565b6b01d3efeabe3216ca7036b2e481565b600454600160a060020a031681565b60095481565b600b5481565b600c6020526000908152604090205481565b600a5460009081906b01d3efeabe3216ca7036b2e490101580610b7e57506009544210155b1515610b8957600080fd5b60005433600160a060020a03908116911614610ba457600080fd5b60105460ff161515610bb557600080fd5b600254600160a060020a0316632121dc756000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610bfd57600080fd5b6102c65a03f11515610c0e57600080fd5b5050506040518051905015610c2257600080fd5b600a54610c42906b01d3efeabe3216ca7036b2e49063ffffffff61163a16565b9150610c606b0167d2d5406637c8930000008363ffffffff61166616565b600654600854919250610cb191600160a060020a03909116908390610c8f816305a39a8063ffffffff61166616565b600854610ca6906305a39a8063ffffffff61166616565b620151806000611765565b600254600160a060020a0316635348ac956040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610cf057600080fd5b6102c65a03f11515610d0157600080fd5b5050505050565b600a5481565b600754600160a060020a031681565b6011805482908110610d2b57fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b61219881565b670de0b6b3a764000081565b60005433600160a060020a03908116911614610d8c57600080fd5b60105460ff161515610d9d57600080fd5b60008111610daa57600080fd5b600f55565b600f5481565b6205460081565b6b0167d2d5406637c89300000081565b600e6020526000908152604090205481565b60085481565b60015460009033600160a060020a03908116911614610e0257600080fd5b50600080546001805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6a4a723dc6b40b8a9a00000081565b6a21aad7b717d3774336b2e481565b6000805433600160a060020a03908116911614610eab57600080fd5b60105460ff1615610ebb57600080fd5b506010805460ff1916600190811790915560118054622819a0928101610ee18382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301819052600191830182905260608301919091526080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff90921691909117905550506011805460018101610f748382611996565b9160005260206000209060050201600060a060405190810160409081526000808352602083015260068602908201526060810185905260046080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055505060118054600181016110068382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526301e133809082015260608101859052600c6080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055505060118054600181016110998382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526303c267009082015260608101859052601a6080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff9092169190911790555050601180546001810161112c8382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526305a39a80908201526060810185905260236080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055506b04fa7032a6d093d29f36b2e490506111c36119c2565b908152602001604051809103906000f08015156111df57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790819055166112136119d2565b600160a060020a039091168152602001604051809103906000f080151561123957600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392831617905560055461127c91166b01743b34e18439b50200000061169f565b151561128757600080fd5b6007546112a890600160a060020a03166a4a723dc6b40b8a9a00000061169f565b15156112b357600080fd5b50565b6000805433600160a060020a039081169116146112d257600080fd5b60105460ff1615156112e357600080fd5b5060005b8281101561132b5781600e600086868581811061130057fe5b60209081029290920135600160a060020a0316835250810191909152604001600020556001016112e7565b50505050565b600054600160a060020a031681565b600254600160a060020a031681565b6b01743b34e18439b50200000081565b60005433600160a060020a0390811691161461137a57600080fd5b600254600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156113b957600080fd5b6102c65a03f115156113ca57600080fd5b505050565b60005433600160a060020a039081169116146113ea57600080fd5b600254600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561143a57600080fd5b6102c65a03f1151561132b57600080fd5b60005433600160a060020a0390811691161461146657600080fd5b600354600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561143a57600080fd5b60005433600160a060020a039081169116146114d157600080fd5b600354600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156113b957600080fd5b600154600160a060020a031681565b6000805433600160a060020a0390811691161461153b57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156115a157600080fd5b6102c65a03f115156115b257600080fd5b50505060405180519150505b92915050565b6afacd613aa4f520d9b6b2e481565b600554600160a060020a031681565b600654600160a060020a031681565b6b04fa7032a6d093d29f36b2e481565b600d6020526000908152604090205481565b600354600160a060020a031681565b60008183106116315781611633565b825b9392505050565b60008282111561164957600080fd5b50900390565b600080828481151561165d57fe5b04949350505050565b60008282018381101561163357600080fd5b6000828202831580611694575082848281151561169157fe5b04145b151561163357600080fd5b600254600090600160a060020a031663a9059cbb8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561170057600080fd5b6102c65a03f1151561171157600080fd5b505050604051805191505080156115be5782600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08360405190815260200160405180910390a292915050565b60008060006117726119e2565b7f5ee7e96d00000000000000000000000000000000000000000000000000000000935060c0925060c49150816040518059106117ab5750595b818152601f19601f8301168101602001604052905090508360208201528a60248201528860448201528760648201528660848201528560a48201528460c482015261180c600360009054906101000a9004600160a060020a03168b83611824565b151561181757600080fd5b5050505050505050505050565b600254600090600160a060020a0316634000aea085858585604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118b0578082015183820152602001611898565b50505050905090810190601f1680156118dd5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15156118fd57600080fd5b6102c65a03f1151561190e57600080fd5b505050604051805191505080156116335783600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08460405190815260200160405180910390a29392505050565b60a06040519081016040528060008152602001600081526020016000815260200160008152602001600060ff1681525090565b8154818355818115116113ca576005028160050283600052602060002091820191016113ca91906119f4565b604051610d6180611a3683390190565b6040516115e38061279783390190565b60206040519081016040526000815290565b611a3291905b80821115611a2e5760008082556001820181905560028201819055600382015560048101805460ff191690556005016119fa565b5090565b90560060606040526005805460a060020a60ff0219169055341561001f57600080fd5b604051602080610d618339810160405280805160048054600160a060020a033316600160a060020a0319909116811790915560018290556000908152600360205260409020555050610ceb806100766000396000f3006060604052600436106100d75763ffffffff60e060020a60003504166306fdde0381146100dc5780630952c50414610166578063095ea7b31461018757806318160ddd146101bd5780632121dc75146101e257806323b872dd146101f5578063313ce5671461021d5780634000aea0146102465780635348ac95146102ab57806370a08231146102be57806379ba5097146102dd5780638da5cb5b146102f057806395d89b411461031f578063a9059cbb14610332578063d091b55014610354578063dc39d06d14610367578063dd62ed3e14610389575b600080fd5b34156100e757600080fd5b6100ef6103ae565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012b578082015183820152602001610113565b50505050905090810190601f1680156101585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017157600080fd5b610185600160a060020a03600435166103e5565b005b341561019257600080fd5b6101a9600160a060020a0360043516602435610478565b604051901515815260200160405180910390f35b34156101c857600080fd5b6101d06104bd565b60405190815260200160405180910390f35b34156101ed57600080fd5b6101a96104c3565b341561020057600080fd5b6101a9600160a060020a03600435811690602435166044356104d3565b341561022857600080fd5b61023061051a565b60405160ff909116815260200160405180910390f35b341561025157600080fd5b6101a960048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061051f95505050505050565b34156102b657600080fd5b61018561055e565b34156102c957600080fd5b6101d0600160a060020a03600435166105e3565b34156102e857600080fd5b6101856105fe565b34156102fb57600080fd5b61030361068b565b604051600160a060020a03909116815260200160405180910390f35b341561032a57600080fd5b6100ef61069a565b341561033d57600080fd5b6101a9600160a060020a03600435166024356106d1565b341561035f57600080fd5b61030361070f565b341561037257600080fd5b6101a9600160a060020a036004351660243561071e565b341561039457600080fd5b6101d0600160a060020a03600435811690602435166107c0565b60408051908101604052601281527f436f6c75204c6f63616c204e6574776f726b0000000000000000000000000000602082015281565b60045433600160a060020a0390811691161461040057600080fd5b600160a060020a038116151561041557600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60045460009033600160a060020a03908116911614806104a1575060055460a060020a900460ff165b15156104ac57600080fd5b6104b683836107eb565b9392505050565b60015481565b60055460a060020a900460ff1681565b60045460009033600160a060020a03908116911614806104fc575060055460a060020a900460ff165b151561050757600080fd5b610512848484610893565b949350505050565b601281565b60045460009033600160a060020a0390811691161480610548575060055460a060020a900460ff165b151561055357600080fd5b6105128484846109bd565b60045433600160a060020a0390811691161461057957600080fd5b60055460a060020a900460ff1615610590576105e1565b6005805474ff0000000000000000000000000000000000000000191660a060020a1790557fa693ca1b20114bcad5861562c3007eb477c4926f79219f624bdbfde146fd2b6460405160405180910390a15b565b600160a060020a031660009081526003602052604090205490565b60055460009033600160a060020a0390811691161461061c57600080fd5b50600480546005805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600454600160a060020a031681565b60408051908101604052600381527f434c4e0000000000000000000000000000000000000000000000000000000000602082015281565b60045460009033600160a060020a03908116911614806106fa575060055460a060020a900460ff165b151561070557600080fd5b6104b68383610ab2565b600554600160a060020a031681565b60045460009033600160a060020a0390811691161461073c57600080fd5b600454600160a060020a038085169163a9059cbb91168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561079f57600080fd5b6102c65a03f115156107b057600080fd5b5050506040518051949350505050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600081158015906108205750600160a060020a0333811660009081526002602090815260408083209387168352929052205415155b1561082a57600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600080600160a060020a03841615156108ab57600080fd5b50600160a060020a038085166000818152600260209081526040808320339095168352938152838220549282526003905291909120546108f1908463ffffffff610b8816565b600160a060020a038087166000908152600360205260408082209390935590861681522054610926908463ffffffff610b9d16565b600160a060020a03851660009081526003602052604090205561094f818463ffffffff610b8816565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3506001949350505050565b60006109c98484610ab2565b15156109d457600080fd5b83600160a060020a031633600160a060020a03167fce8124fd2ae9fd7904103e5a9ebe88b527b9ca0e32a32fd497845c82706542d3858560405182815260406020820181815290820183818151815260200191508051906020019080838360005b83811015610a4d578082015183820152602001610a35565b50505050905090810190601f168015610a7a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3610a9184610baf565b15610aa857610aa1848484610bb7565b90506104b6565b5060019392505050565b6000600160a060020a0383161515610ac957600080fd5b600160a060020a033316600090815260036020526040902054610af2908363ffffffff610b8816565b600160a060020a033381166000908152600360205260408082209390935590851681522054610b27908363ffffffff610b9d16565b600160a060020a0380851660008181526003602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600082821115610b9757600080fd5b50900390565b6000828201838110156104b657600080fd5b6000903b1190565b600083600160a060020a03811663c0ee0b8a33868686604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c41578082015183820152602001610c29565b50505050905090810190601f168015610c6e5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1515610c8e57600080fd5b6102c65a03f11515610c9f57600080fd5b505050604051805190501515610cb457600080fd5b5060019493505050505600a165627a7a723058205ad7a6a2d562512bf45fa613c725473ae4db5a17be681123885fd9935ff3546f00296060604052341561000f57600080fd5b6040516020806115e38339810160405280805160038054600160a060020a033381166101000261010060a860020a03199092169190911790915590925082161515905061005b57600080fd5b60058054600160a060020a031916600160a060020a03929092169190911790556115598061008a6000396000f3006060604052600436106100d75763ffffffff60e060020a600035041663061f765081146100dc5780630952c5041461010f5780631a64adae146101305780631e075aba146101645780635ee7e96d146101825780636bfa379e146101b257806374a8f103146101d157806379ba5097146101f05780637c17357d1461020357806383fcf973146102165780638da5cb5b146102295780639060400514610258578063957924301461026b578063a1db97821461029e578063b869cea3146102c0578063c0ee0b8a1461031d578063d091b5501461034c575b600080fd5b34156100e757600080fd5b6100fb600160a060020a036004351661035f565b604051901515815260200160405180910390f35b341561011a57600080fd5b61012e600160a060020a0360043516610373565b005b341561013b57600080fd5b610152600160a060020a036004351660243561040b565b60405190815260200160405180910390f35b341561016f57600080fd5b6100fb60048035602481019101356104a8565b341561018d57600080fd5b61012e600160a060020a036004351660243560443560643560843560a4351515610510565b34156101bd57600080fd5b610152600160a060020a0360043516610782565b34156101dc57600080fd5b61012e600160a060020a0360043516610845565b34156101fb57600080fd5b61012e610b52565b341561020e57600080fd5b610152610c00565b341561022157600080fd5b610152610c06565b341561023457600080fd5b61023c610c16565b604051600160a060020a03909116815260200160405180910390f35b341561026357600080fd5b61023c610c2a565b341561027657600080fd5b61012e600160a060020a036004351660243560443560643560843560a43560c4351515610c39565b34156102a957600080fd5b6100fb600160a060020a0360043516602435610e91565b34156102cb57600080fd5b6102df600160a060020a0360043516610fee565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015290151560c083015260e0909101905180910390f35b341561032857600080fd5b6100fb60048035600160a060020a031690602480359160443591820191013561102f565b341561035757600080fd5b61023c611147565b600554600160a060020a0391821691161490565b60035433600160a060020a03908116610100909204161461039357600080fd5b600160a060020a03811615156103a857600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60006104156114ed565b600160a060020a038416600090815260066020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015290508051151561049457600091506104a1565b61049e8184611156565b91505b5092915050565b600354600090819033600160a060020a0390811661010090920416146104cd57600080fd5b5060005b82811015610506576104fd8484838181106104e857fe5b90506020020135600160a060020a03166111ff565b506001016104d1565b5060019392505050565b6003546001546000916101009004600160a060020a0390811691161461053557600080fd5b60035460ff16151561054657600080fd5b600160a060020a038716151561055b57600080fd5b30600160a060020a031687600160a060020a03161415151561057c57600080fd5b506002546000811161058d57600080fd5b600160a060020a038716600090815260066020526040902054156105b057600080fd5b8486111580156105c05750838511155b15156105cb57600080fd5b6000831180156105ea57506105e6848763ffffffff61148116565b8311155b15156105f557600080fd5b600554600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064e57600080fd5b6102c65a03f1151561065f57600080fd5b505050604051805160075490915061067d908363ffffffff61149616565b111561068857600080fd5b60e0604051908101604090815282825260208083018990528183018890526060830187905260808301869052600060a0840181905285151560c0850152600160a060020a038b168152600690915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff1916911515919091179055506007546107359082611496565b600755600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458360405190815260200160405180910390a350505050505050565b600061078c6114ed565b600160a060020a0383166000908152600660205260408082209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015291508151151561080a576000925061083e565b6108148242611156565b9050801515610826576000925061083e565b61083b8260a00151829063ffffffff61148116565b92505b5050919050565b61084d6114ed565b6003546000908190819033600160a060020a03908116610100909204161461087457600080fd5b600160a060020a038516600090815260066020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082019081529094505115156108f157600080fd5b6108fb8442611156565b92506109128460a00151849063ffffffff61148116565b91506000821115610a1057610932828560a001519063ffffffff61149616565b60a085015260075461094a908363ffffffff61148116565b600755600554600160a060020a031663a9059cbb868460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109ac57600080fd5b6102c65a03f115156109bd57600080fd5b5050506040518051905015156109d257600080fd5b84600160a060020a03167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888360405190815260200160405180910390a25b610a268460a0015185519063ffffffff61148116565b600160a060020a0386166000908152600660208190526040822082815560018101839055600281018390556003810183905560048101839055600581019290925501805460ff19169055600754909150610a86908263ffffffff61148116565b600755600554600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b84600160a060020a03167f740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f8260405190815260200160405180910390a25050505050565b60045460009033600160a060020a03908116911614610b7057600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff19909216909255918290048116929190910416817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b60075481565b6000610c11336111ff565b905090565b6003546101009004600160a060020a031681565b600554600160a060020a031681565b60035433600160a060020a039081166101009092041614610c5957600080fd5b600160a060020a0387161515610c6e57600080fd5b30600160a060020a031687600160a060020a031614151515610c8f57600080fd5b60008611610c9c57600080fd5b600160a060020a03871660009081526006602052604090205415610cbf57600080fd5b838511158015610ccf5750828411155b1515610cda57600080fd5b600082118015610cf95750610cf5838663ffffffff61148116565b8211155b1515610d0457600080fd5b600554600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d5d57600080fd5b6102c65a03f11515610d6e57600080fd5b5050506040518051600754909150610d8c908863ffffffff61149616565b1115610d9757600080fd5b60e0604051908101604090815287825260208083018890528183018790526060830186905260808301859052600060a0840181905284151560c0850152600160a060020a038b168152600690915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff191691151591909117905550600754610e449087611496565b600755600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458860405190815260200160405180910390a350505050505050565b600354600090819033600160a060020a039081166101009092041614610eb657600080fd5b600554600160a060020a0385811691161415610f6357600754600554610f549190600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f2d57600080fd5b6102c65a03f11515610f3e57600080fd5b505050604051805191905063ffffffff61148116565b905080831115610f6357600080fd5b600354600160a060020a038086169163a9059cbb91610100909104168560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610fcc57600080fd5b6102c65a03f11515610fdd57600080fd5b505050604051805195945050505050565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015495909601549395929491939092919060ff1687565b600061103a3361035f565b15156110485750600061113f565b60606040519081016040908152600160a060020a03338116835287166020830152810185905260008151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151600290910155506003805460ff19166001179055600160a060020a0330168383604051808383808284378201915050925050506000604051808303818561646e5a03f4915050151561113157506003805460ff19169055600061113f565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b6000806000846040015184101561117057600092506111f7565b8460600151841061118457845192506111f7565b6111ad85608001516111a18760200151879063ffffffff61148116565b9063ffffffff6114af16565b91506111c8856020015186606001519063ffffffff61148116565b90506111f4816111a16111e68860800151869063ffffffff6114c616565b88519063ffffffff6114c616565b92505b505092915050565b600160a060020a0381166000908152600660205260408120805482908190151561126c5784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271160405190815260200160405180910390a26127119350611479565b6112c88360e0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015242611156565b915081151561131a5784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271260405190815260200160405180910390a26127129350611479565b600583015461133090839063ffffffff61148116565b90508015156113825784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271360405190815260200160405180910390a26127139350611479565b6005830154611397908263ffffffff61149616565b60058401556007546113af908263ffffffff61148116565b600755600554600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561141157600080fd5b6102c65a03f1151561142257600080fd5b50505060405180519050151561143757600080fd5b84600160a060020a03167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888260405190815260200160405180910390a2600193505b505050919050565b60008282111561149057600080fd5b50900390565b6000828201838110156114a857600080fd5b9392505050565b60008082848115156114bd57fe5b04949350505050565b60008282028315806114e257508284828115156114df57fe5b04145b15156114a857600080fd5b60e06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600a165627a7a7230582023e279ba6dd17c7f0a8770f361cf7543be16a96d1d1db31ee899c3caf7ddfa8d0029a165627a7a72305820f0b0180cdeeba8e04242bf01de41a0a5ec21d89f2549775ddf4e6ca8672e806e0029000000000000000000000000a76e676c9cdc7aa2ab12b3ec4dd4c2be9a6774aa00000000000000000000000034df02e145f0a6b5df675e9dfab54ae745e6c4ff000000000000000000000000254158138007803eebc95d082c02d0db4381ebac0000000000000000000000006b83c6a03d99ffadf2416767d64cc959f1b2e2f5000000000000000000000000b0f37b1878fd6a3006467d9cacc8cdef082e11f8000000000000000000000000000000000000000000000000000000005a846b10

Deployed Bytecode

0x6060604052600436106101df5763ffffffff60e060020a6000350416630952c504811461023157806310ae4a7314610250578063158ef93e1461027857806317f5de951461029f5780631bb534ba146102c45780633197cbb6146102f3578063341c33041461030657806349432923146103195780634bb278f314610338578063518ab2a81461034b57806355b1182c1461035e5780635a592380146103715780635b3b20e1146103ba5780635b7f415c146103cd57806364329400146103e057806365b9e37d146103f65780636d79207c14610409578063751ecea01461041c57806376e532211461042f57806378e979251461044e57806379ba5097146104615780637eddea211461047457806381030e35146104875780638129fc1c1461049a57806383d880d0146104ad5780638da5cb5b146104cf57806390604005146104e2578063aeb47e2a146104f5578063b3b4ec5414610508578063b91038c71461051b578063baa835681461052f578063c28f9df11461054e578063cfabe67b1461056d578063d091b55014610580578063dc39d06d14610593578063e5514c9d146105b5578063ea02db0f146105c8578063ed3788c9146105db578063f47c84c5146105ee578063fae95a7114610601578063fdf97cb214610620575b600a546b01d3efeabe3216ca7036b2e4901015806101fe575060085442105b8061020b57506009544210155b1561021557600080fd5b60105460ff16151561022657600080fd5b61022f33610633565b005b341561023c57600080fd5b61022f600160a060020a0360043516610857565b341561025b57600080fd5b61022f600160a060020a036004351660243560ff604435166108ea565b341561028357600080fd5b61028b610b13565b604051901515815260200160405180910390f35b34156102aa57600080fd5b6102b2610b1c565b60405190815260200160405180910390f35b34156102cf57600080fd5b6102d7610b2c565b604051600160a060020a03909116815260200160405180910390f35b34156102fe57600080fd5b6102b2610b3b565b341561031157600080fd5b6102b2610b41565b341561032457600080fd5b6102b2600160a060020a0360043516610b47565b341561034357600080fd5b61022f610b59565b341561035657600080fd5b6102b2610d08565b341561036957600080fd5b6102d7610d0e565b341561037c57600080fd5b610387600435610d1d565b6040519485526020850193909352604080850192909252606084015260ff909116608083015260a0909101905180910390f35b34156103c557600080fd5b6102b2610d5f565b34156103d857600080fd5b6102b2610d65565b34156103eb57600080fd5b61022f600435610d71565b341561040157600080fd5b6102b2610daf565b341561041457600080fd5b6102b2610db5565b341561042757600080fd5b6102b2610dbc565b341561043a57600080fd5b6102b2600160a060020a0360043516610dcc565b341561045957600080fd5b6102b2610dde565b341561046c57600080fd5b61022f610de4565b341561047f57600080fd5b6102b2610e71565b341561049257600080fd5b6102b2610e80565b34156104a557600080fd5b61022f610e8f565b34156104b857600080fd5b61022f6024600480358281019291013590356112b6565b34156104da57600080fd5b6102d7611331565b34156104ed57600080fd5b6102d7611340565b341561050057600080fd5b6102b261134f565b341561051357600080fd5b61022f61135f565b61022f600160a060020a0360043516610633565b341561053a57600080fd5b61022f600160a060020a03600435166113cf565b341561055957600080fd5b61022f600160a060020a036004351661144b565b341561057857600080fd5b61022f6114b6565b341561058b57600080fd5b6102d7611510565b341561059e57600080fd5b61028b600160a060020a036004351660243561151f565b34156105c057600080fd5b6102b26115c4565b34156105d357600080fd5b6102d76115d3565b34156105e657600080fd5b6102d76115e2565b34156105f957600080fd5b6102b26115f1565b341561060c57600080fd5b6102b2600160a060020a0360043516611601565b341561062b57600080fd5b6102d7611613565b6000806000806000806000806a21aad7b717d3774336b2e4670de0b6b3a7640000631f4add400201600a5410158061066c575060085442105b8061067957506009544210155b1561068357600080fd5b60105460ff16151561069457600080fd5b600160a060020a03891615156106a957600080fd5b600160a060020a0389166000908152600c6020908152604080832054600e90925290912054600f549199506106dd91611622565b96506106f8346106f3898b63ffffffff61163a16565b611622565b95506000861161070757600080fd5b600a54610727906b01d3efeabe3216ca7036b2e49063ffffffff61163a16565b945061073b8561219863ffffffff61164f16565b93506107478685611622565b9250610759888463ffffffff61166616565b600160a060020a03808b166000908152600c60205260409081902092909255600454169084156108fc0290859051600060405180830381858888f1935050505015156107a457600080fd5b6107b68361219863ffffffff61167816565b91506121986107cb868463ffffffff61163a16565b10156107d5578491505b600a546107e8908363ffffffff61166616565b600a556107f5898361169f565b151561080057600080fd5b610810348463ffffffff61163a16565b9050600081111561084c57600160a060020a03331681156108fc0282604051600060405180830381858888f19350505050151561084c57600080fd5b505050505050505050565b60005433600160a060020a0390811691161461087257600080fd5b600160a060020a038116151561088757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b6108f2611963565b60008054819081908190819033600160a060020a0390811691161461091657600080fd5b600854421061092457600080fd5b60105460ff16151561093557600080fd5b600160a060020a038916151561094a57600080fd5b60115460ff88161061095b57600080fd5b6011805460ff891690811061096c57fe5b906000526020600020906005020160a0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260049091015460ff16608082019081529096506109f0906064906109e4906109d59083905160ff16611666565b6121989063ffffffff61167816565b9063ffffffff61164f16565b600b54909550610a12906afacd613aa4f520d9b6b2e49063ffffffff61163a16565b9350610a24848663ffffffff61164f16565b9250610a308884611622565b915060008211610a3f57600080fd5b600160a060020a0333166000908152600d6020526040902054610a68908363ffffffff61166616565b600160a060020a0333166000908152600d6020526040902055610a91828663ffffffff61167816565b600b54909150610aa7908263ffffffff61166616565b600b55600a54610abd908263ffffffff61166616565b600a5561084c8982610ad989516008549063ffffffff61166616565b610af08a602001516008549063ffffffff61166616565b610b078b604001516008549063ffffffff61166616565b8b606001516000611765565b60105460ff1681565b6b01d3efeabe3216ca7036b2e481565b600454600160a060020a031681565b60095481565b600b5481565b600c6020526000908152604090205481565b600a5460009081906b01d3efeabe3216ca7036b2e490101580610b7e57506009544210155b1515610b8957600080fd5b60005433600160a060020a03908116911614610ba457600080fd5b60105460ff161515610bb557600080fd5b600254600160a060020a0316632121dc756000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610bfd57600080fd5b6102c65a03f11515610c0e57600080fd5b5050506040518051905015610c2257600080fd5b600a54610c42906b01d3efeabe3216ca7036b2e49063ffffffff61163a16565b9150610c606b0167d2d5406637c8930000008363ffffffff61166616565b600654600854919250610cb191600160a060020a03909116908390610c8f816305a39a8063ffffffff61166616565b600854610ca6906305a39a8063ffffffff61166616565b620151806000611765565b600254600160a060020a0316635348ac956040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610cf057600080fd5b6102c65a03f11515610d0157600080fd5b5050505050565b600a5481565b600754600160a060020a031681565b6011805482908110610d2b57fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909160ff1685565b61219881565b670de0b6b3a764000081565b60005433600160a060020a03908116911614610d8c57600080fd5b60105460ff161515610d9d57600080fd5b60008111610daa57600080fd5b600f55565b600f5481565b6205460081565b6b0167d2d5406637c89300000081565b600e6020526000908152604090205481565b60085481565b60015460009033600160a060020a03908116911614610e0257600080fd5b50600080546001805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6a4a723dc6b40b8a9a00000081565b6a21aad7b717d3774336b2e481565b6000805433600160a060020a03908116911614610eab57600080fd5b60105460ff1615610ebb57600080fd5b506010805460ff1916600190811790915560118054622819a0928101610ee18382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301819052600191830182905260608301919091526080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff90921691909117905550506011805460018101610f748382611996565b9160005260206000209060050201600060a060405190810160409081526000808352602083015260068602908201526060810185905260046080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055505060118054600181016110068382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526301e133809082015260608101859052600c6080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055505060118054600181016110998382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526303c267009082015260608101859052601a6080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff9092169190911790555050601180546001810161112c8382611996565b9160005260206000209060050201600060a06040519081016040908152600080835260208301526305a39a80908201526060810185905260236080820152919050815181556020820151816001015560408201518160020155606082015181600301556080820151600491909101805460ff191660ff909216919091179055506b04fa7032a6d093d29f36b2e490506111c36119c2565b908152602001604051809103906000f08015156111df57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039283161790819055166112136119d2565b600160a060020a039091168152602001604051809103906000f080151561123957600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392831617905560055461127c91166b01743b34e18439b50200000061169f565b151561128757600080fd5b6007546112a890600160a060020a03166a4a723dc6b40b8a9a00000061169f565b15156112b357600080fd5b50565b6000805433600160a060020a039081169116146112d257600080fd5b60105460ff1615156112e357600080fd5b5060005b8281101561132b5781600e600086868581811061130057fe5b60209081029290920135600160a060020a0316835250810191909152604001600020556001016112e7565b50505050565b600054600160a060020a031681565b600254600160a060020a031681565b6b01743b34e18439b50200000081565b60005433600160a060020a0390811691161461137a57600080fd5b600254600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156113b957600080fd5b6102c65a03f115156113ca57600080fd5b505050565b60005433600160a060020a039081169116146113ea57600080fd5b600254600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561143a57600080fd5b6102c65a03f1151561132b57600080fd5b60005433600160a060020a0390811691161461146657600080fd5b600354600160a060020a0316630952c5048260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561143a57600080fd5b60005433600160a060020a039081169116146114d157600080fd5b600354600160a060020a03166379ba50976040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156113b957600080fd5b600154600160a060020a031681565b6000805433600160a060020a0390811691161461153b57600080fd5b60008054600160a060020a038086169263a9059cbb929091169085906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156115a157600080fd5b6102c65a03f115156115b257600080fd5b50505060405180519150505b92915050565b6afacd613aa4f520d9b6b2e481565b600554600160a060020a031681565b600654600160a060020a031681565b6b04fa7032a6d093d29f36b2e481565b600d6020526000908152604090205481565b600354600160a060020a031681565b60008183106116315781611633565b825b9392505050565b60008282111561164957600080fd5b50900390565b600080828481151561165d57fe5b04949350505050565b60008282018381101561163357600080fd5b6000828202831580611694575082848281151561169157fe5b04145b151561163357600080fd5b600254600090600160a060020a031663a9059cbb8484846040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561170057600080fd5b6102c65a03f1151561171157600080fd5b505050604051805191505080156115be5782600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08360405190815260200160405180910390a292915050565b60008060006117726119e2565b7f5ee7e96d00000000000000000000000000000000000000000000000000000000935060c0925060c49150816040518059106117ab5750595b818152601f19601f8301168101602001604052905090508360208201528a60248201528860448201528760648201528660848201528560a48201528460c482015261180c600360009054906101000a9004600160a060020a03168b83611824565b151561181757600080fd5b5050505050505050505050565b600254600090600160a060020a0316634000aea085858585604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118b0578082015183820152602001611898565b50505050905090810190601f1680156118dd5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15156118fd57600080fd5b6102c65a03f1151561190e57600080fd5b505050604051805191505080156116335783600160a060020a03167f21d739f160a7464fddaac4a1d1517d84e76b75618a053943b345c408c4160fe08460405190815260200160405180910390a29392505050565b60a06040519081016040528060008152602001600081526020016000815260200160008152602001600060ff1681525090565b8154818355818115116113ca576005028160050283600052602060002091820191016113ca91906119f4565b604051610d6180611a3683390190565b6040516115e38061279783390190565b60206040519081016040526000815290565b611a3291905b80821115611a2e5760008082556001820181905560028201819055600382015560048101805460ff191690556005016119fa565b5090565b90560060606040526005805460a060020a60ff0219169055341561001f57600080fd5b604051602080610d618339810160405280805160048054600160a060020a033316600160a060020a0319909116811790915560018290556000908152600360205260409020555050610ceb806100766000396000f3006060604052600436106100d75763ffffffff60e060020a60003504166306fdde0381146100dc5780630952c50414610166578063095ea7b31461018757806318160ddd146101bd5780632121dc75146101e257806323b872dd146101f5578063313ce5671461021d5780634000aea0146102465780635348ac95146102ab57806370a08231146102be57806379ba5097146102dd5780638da5cb5b146102f057806395d89b411461031f578063a9059cbb14610332578063d091b55014610354578063dc39d06d14610367578063dd62ed3e14610389575b600080fd5b34156100e757600080fd5b6100ef6103ae565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561012b578082015183820152602001610113565b50505050905090810190601f1680156101585780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017157600080fd5b610185600160a060020a03600435166103e5565b005b341561019257600080fd5b6101a9600160a060020a0360043516602435610478565b604051901515815260200160405180910390f35b34156101c857600080fd5b6101d06104bd565b60405190815260200160405180910390f35b34156101ed57600080fd5b6101a96104c3565b341561020057600080fd5b6101a9600160a060020a03600435811690602435166044356104d3565b341561022857600080fd5b61023061051a565b60405160ff909116815260200160405180910390f35b341561025157600080fd5b6101a960048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061051f95505050505050565b34156102b657600080fd5b61018561055e565b34156102c957600080fd5b6101d0600160a060020a03600435166105e3565b34156102e857600080fd5b6101856105fe565b34156102fb57600080fd5b61030361068b565b604051600160a060020a03909116815260200160405180910390f35b341561032a57600080fd5b6100ef61069a565b341561033d57600080fd5b6101a9600160a060020a03600435166024356106d1565b341561035f57600080fd5b61030361070f565b341561037257600080fd5b6101a9600160a060020a036004351660243561071e565b341561039457600080fd5b6101d0600160a060020a03600435811690602435166107c0565b60408051908101604052601281527f436f6c75204c6f63616c204e6574776f726b0000000000000000000000000000602082015281565b60045433600160a060020a0390811691161461040057600080fd5b600160a060020a038116151561041557600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60045460009033600160a060020a03908116911614806104a1575060055460a060020a900460ff165b15156104ac57600080fd5b6104b683836107eb565b9392505050565b60015481565b60055460a060020a900460ff1681565b60045460009033600160a060020a03908116911614806104fc575060055460a060020a900460ff165b151561050757600080fd5b610512848484610893565b949350505050565b601281565b60045460009033600160a060020a0390811691161480610548575060055460a060020a900460ff165b151561055357600080fd5b6105128484846109bd565b60045433600160a060020a0390811691161461057957600080fd5b60055460a060020a900460ff1615610590576105e1565b6005805474ff0000000000000000000000000000000000000000191660a060020a1790557fa693ca1b20114bcad5861562c3007eb477c4926f79219f624bdbfde146fd2b6460405160405180910390a15b565b600160a060020a031660009081526003602052604090205490565b60055460009033600160a060020a0390811691161461061c57600080fd5b50600480546005805473ffffffffffffffffffffffffffffffffffffffff19808416600160a060020a03838116919091179586905591169091559081169116817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600454600160a060020a031681565b60408051908101604052600381527f434c4e0000000000000000000000000000000000000000000000000000000000602082015281565b60045460009033600160a060020a03908116911614806106fa575060055460a060020a900460ff165b151561070557600080fd5b6104b68383610ab2565b600554600160a060020a031681565b60045460009033600160a060020a0390811691161461073c57600080fd5b600454600160a060020a038085169163a9059cbb91168460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561079f57600080fd5b6102c65a03f115156107b057600080fd5b5050506040518051949350505050565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600081158015906108205750600160a060020a0333811660009081526002602090815260408083209387168352929052205415155b1561082a57600080fd5b600160a060020a03338116600081815260026020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600080600160a060020a03841615156108ab57600080fd5b50600160a060020a038085166000818152600260209081526040808320339095168352938152838220549282526003905291909120546108f1908463ffffffff610b8816565b600160a060020a038087166000908152600360205260408082209390935590861681522054610926908463ffffffff610b9d16565b600160a060020a03851660009081526003602052604090205561094f818463ffffffff610b8816565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3506001949350505050565b60006109c98484610ab2565b15156109d457600080fd5b83600160a060020a031633600160a060020a03167fce8124fd2ae9fd7904103e5a9ebe88b527b9ca0e32a32fd497845c82706542d3858560405182815260406020820181815290820183818151815260200191508051906020019080838360005b83811015610a4d578082015183820152602001610a35565b50505050905090810190601f168015610a7a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3610a9184610baf565b15610aa857610aa1848484610bb7565b90506104b6565b5060019392505050565b6000600160a060020a0383161515610ac957600080fd5b600160a060020a033316600090815260036020526040902054610af2908363ffffffff610b8816565b600160a060020a033381166000908152600360205260408082209390935590851681522054610b27908363ffffffff610b9d16565b600160a060020a0380851660008181526003602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b600082821115610b9757600080fd5b50900390565b6000828201838110156104b657600080fd5b6000903b1190565b600083600160a060020a03811663c0ee0b8a33868686604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c41578082015183820152602001610c29565b50505050905090810190601f168015610c6e5780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b1515610c8e57600080fd5b6102c65a03f11515610c9f57600080fd5b505050604051805190501515610cb457600080fd5b5060019493505050505600a165627a7a723058205ad7a6a2d562512bf45fa613c725473ae4db5a17be681123885fd9935ff3546f00296060604052341561000f57600080fd5b6040516020806115e38339810160405280805160038054600160a060020a033381166101000261010060a860020a03199092169190911790915590925082161515905061005b57600080fd5b60058054600160a060020a031916600160a060020a03929092169190911790556115598061008a6000396000f3006060604052600436106100d75763ffffffff60e060020a600035041663061f765081146100dc5780630952c5041461010f5780631a64adae146101305780631e075aba146101645780635ee7e96d146101825780636bfa379e146101b257806374a8f103146101d157806379ba5097146101f05780637c17357d1461020357806383fcf973146102165780638da5cb5b146102295780639060400514610258578063957924301461026b578063a1db97821461029e578063b869cea3146102c0578063c0ee0b8a1461031d578063d091b5501461034c575b600080fd5b34156100e757600080fd5b6100fb600160a060020a036004351661035f565b604051901515815260200160405180910390f35b341561011a57600080fd5b61012e600160a060020a0360043516610373565b005b341561013b57600080fd5b610152600160a060020a036004351660243561040b565b60405190815260200160405180910390f35b341561016f57600080fd5b6100fb60048035602481019101356104a8565b341561018d57600080fd5b61012e600160a060020a036004351660243560443560643560843560a4351515610510565b34156101bd57600080fd5b610152600160a060020a0360043516610782565b34156101dc57600080fd5b61012e600160a060020a0360043516610845565b34156101fb57600080fd5b61012e610b52565b341561020e57600080fd5b610152610c00565b341561022157600080fd5b610152610c06565b341561023457600080fd5b61023c610c16565b604051600160a060020a03909116815260200160405180910390f35b341561026357600080fd5b61023c610c2a565b341561027657600080fd5b61012e600160a060020a036004351660243560443560643560843560a43560c4351515610c39565b34156102a957600080fd5b6100fb600160a060020a0360043516602435610e91565b34156102cb57600080fd5b6102df600160a060020a0360043516610fee565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015290151560c083015260e0909101905180910390f35b341561032857600080fd5b6100fb60048035600160a060020a031690602480359160443591820191013561102f565b341561035757600080fd5b61023c611147565b600554600160a060020a0391821691161490565b60035433600160a060020a03908116610100909204161461039357600080fd5b600160a060020a03811615156103a857600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383811691909117918290559081169033167f13a4b3bc0d5234dd3d87c9f1557d8faefa37986da62c36ba49309e2fb2c9aec460405160405180910390a350565b60006104156114ed565b600160a060020a038416600090815260066020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015290508051151561049457600091506104a1565b61049e8184611156565b91505b5092915050565b600354600090819033600160a060020a0390811661010090920416146104cd57600080fd5b5060005b82811015610506576104fd8484838181106104e857fe5b90506020020135600160a060020a03166111ff565b506001016104d1565b5060019392505050565b6003546001546000916101009004600160a060020a0390811691161461053557600080fd5b60035460ff16151561054657600080fd5b600160a060020a038716151561055b57600080fd5b30600160a060020a031687600160a060020a03161415151561057c57600080fd5b506002546000811161058d57600080fd5b600160a060020a038716600090815260066020526040902054156105b057600080fd5b8486111580156105c05750838511155b15156105cb57600080fd5b6000831180156105ea57506105e6848763ffffffff61148116565b8311155b15156105f557600080fd5b600554600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561064e57600080fd5b6102c65a03f1151561065f57600080fd5b505050604051805160075490915061067d908363ffffffff61149616565b111561068857600080fd5b60e0604051908101604090815282825260208083018990528183018890526060830187905260808301869052600060a0840181905285151560c0850152600160a060020a038b168152600690915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff1916911515919091179055506007546107359082611496565b600755600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458360405190815260200160405180910390a350505050505050565b600061078c6114ed565b600160a060020a0383166000908152600660205260408082209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015291508151151561080a576000925061083e565b6108148242611156565b9050801515610826576000925061083e565b61083b8260a00151829063ffffffff61148116565b92505b5050919050565b61084d6114ed565b6003546000908190819033600160a060020a03908116610100909204161461087457600080fd5b600160a060020a038516600090815260066020526040908190209060e09051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082019081529094505115156108f157600080fd5b6108fb8442611156565b92506109128460a00151849063ffffffff61148116565b91506000821115610a1057610932828560a001519063ffffffff61149616565b60a085015260075461094a908363ffffffff61148116565b600755600554600160a060020a031663a9059cbb868460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156109ac57600080fd5b6102c65a03f115156109bd57600080fd5b5050506040518051905015156109d257600080fd5b84600160a060020a03167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888360405190815260200160405180910390a25b610a268460a0015185519063ffffffff61148116565b600160a060020a0386166000908152600660208190526040822082815560018101839055600281018390556003810183905560048101839055600581019290925501805460ff19169055600754909150610a86908263ffffffff61148116565b600755600554600160a060020a031663a9059cbb338360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610ae857600080fd5b6102c65a03f11515610af957600080fd5b505050604051805190501515610b0e57600080fd5b84600160a060020a03167f740528a7c317c81f0923adc30df75db3f448298c78cdaf548adfcfdb3c84ff6f8260405190815260200160405180910390a25050505050565b60045460009033600160a060020a03908116911614610b7057600080fd5b506003805460048054600160a060020a0381811661010090810274ffffffffffffffffffffffffffffffffffffffff00198616179586905573ffffffffffffffffffffffffffffffffffffffff19909216909255918290048116929190910416817f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b60075481565b6000610c11336111ff565b905090565b6003546101009004600160a060020a031681565b600554600160a060020a031681565b60035433600160a060020a039081166101009092041614610c5957600080fd5b600160a060020a0387161515610c6e57600080fd5b30600160a060020a031687600160a060020a031614151515610c8f57600080fd5b60008611610c9c57600080fd5b600160a060020a03871660009081526006602052604090205415610cbf57600080fd5b838511158015610ccf5750828411155b1515610cda57600080fd5b600082118015610cf95750610cf5838663ffffffff61148116565b8211155b1515610d0457600080fd5b600554600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610d5d57600080fd5b6102c65a03f11515610d6e57600080fd5b5050506040518051600754909150610d8c908863ffffffff61149616565b1115610d9757600080fd5b60e0604051908101604090815287825260208083018890528183018790526060830186905260808301859052600060a0840181905284151560c0850152600160a060020a038b168152600690915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151600691909101805460ff191691151591909117905550600754610e449087611496565b600755600160a060020a038088169033167ffabf00c3717e5e33d6fcc433d4d70ef919a4101fb7d5c444fe349927034eaa458860405190815260200160405180910390a350505050505050565b600354600090819033600160a060020a039081166101009092041614610eb657600080fd5b600554600160a060020a0385811691161415610f6357600754600554610f549190600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f2d57600080fd5b6102c65a03f11515610f3e57600080fd5b505050604051805191905063ffffffff61148116565b905080831115610f6357600080fd5b600354600160a060020a038086169163a9059cbb91610100909104168560006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610fcc57600080fd5b6102c65a03f11515610fdd57600080fd5b505050604051805195945050505050565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015495909601549395929491939092919060ff1687565b600061103a3361035f565b15156110485750600061113f565b60606040519081016040908152600160a060020a03338116835287166020830152810185905260008151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151600290910155506003805460ff19166001179055600160a060020a0330168383604051808383808284378201915050925050506000604051808303818561646e5a03f4915050151561113157506003805460ff19169055600061113f565b506003805460ff1916905560015b949350505050565b600454600160a060020a031681565b6000806000846040015184101561117057600092506111f7565b8460600151841061118457845192506111f7565b6111ad85608001516111a18760200151879063ffffffff61148116565b9063ffffffff6114af16565b91506111c8856020015186606001519063ffffffff61148116565b90506111f4816111a16111e68860800151869063ffffffff6114c616565b88519063ffffffff6114c616565b92505b505092915050565b600160a060020a0381166000908152600660205260408120805482908190151561126c5784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271160405190815260200160405180910390a26127119350611479565b6112c88360e0604051908101604090815282548252600183015460208301526002830154908201526003820154606082015260048201546080820152600582015460a082015260069091015460ff16151560c082015242611156565b915081151561131a5784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271260405190815260200160405180910390a26127129350611479565b600583015461133090839063ffffffff61148116565b90508015156113825784600160a060020a03167f9cf38cf2dbf9139f5c32639950507b10775fbbe0421f3e168bc2d1bb1ae3208c61271360405190815260200160405180910390a26127139350611479565b6005830154611397908263ffffffff61149616565b60058401556007546113af908263ffffffff61148116565b600755600554600160a060020a031663a9059cbb868360006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561141157600080fd5b6102c65a03f1151561142257600080fd5b50505060405180519050151561143757600080fd5b84600160a060020a03167fe7b379c6c1fa169e9079c25e9143b127637eef8ec8c9d5c06ddb4ab3e11958888260405190815260200160405180910390a2600193505b505050919050565b60008282111561149057600080fd5b50900390565b6000828201838110156114a857600080fd5b9392505050565b60008082848115156114bd57fe5b04949350505050565b60008282028315806114e257508284828115156114df57fe5b04145b15156114a857600080fd5b60e06040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815250905600a165627a7a7230582023e279ba6dd17c7f0a8770f361cf7543be16a96d1d1db31ee899c3caf7ddfa8d0029a165627a7a72305820f0b0180cdeeba8e04242bf01de41a0a5ec21d89f2549775ddf4e6ca8672e806e0029

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

000000000000000000000000a76e676c9cdc7aa2ab12b3ec4dd4c2be9a6774aa00000000000000000000000034df02e145f0a6b5df675e9dfab54ae745e6c4ff000000000000000000000000254158138007803eebc95d082c02d0db4381ebac0000000000000000000000006b83c6a03d99ffadf2416767d64cc959f1b2e2f5000000000000000000000000b0f37b1878fd6a3006467d9cacc8cdef082e11f8000000000000000000000000000000000000000000000000000000005a846b10

-----Decoded View---------------
Arg [0] : _owner (address): 0xA76e676C9CdC7AA2ab12B3eC4Dd4c2BE9a6774AA
Arg [1] : _fundingRecipient (address): 0x34Df02E145F0A6B5dF675e9dFaB54aE745E6c4FF
Arg [2] : _communityPoolAddress (address): 0x254158138007803EEbc95d082c02D0dB4381EBac
Arg [3] : _futureDevelopmentPoolAddress (address): 0x6b83C6a03d99FfAdf2416767D64CC959F1B2E2F5
Arg [4] : _stakeholdersPoolAddress (address): 0xB0f37b1878FD6A3006467D9cACC8CdEF082e11F8
Arg [5] : _startTime (uint256): 1518627600

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000a76e676c9cdc7aa2ab12b3ec4dd4c2be9a6774aa
Arg [1] : 00000000000000000000000034df02e145f0a6b5df675e9dfab54ae745e6c4ff
Arg [2] : 000000000000000000000000254158138007803eebc95d082c02d0db4381ebac
Arg [3] : 0000000000000000000000006b83c6a03d99ffadf2416767d64cc959f1b2e2f5
Arg [4] : 000000000000000000000000b0f37b1878fd6a3006467d9cacc8cdef082e11f8
Arg [5] : 000000000000000000000000000000000000000000000000000000005a846b10


Swarm Source

bzzr://f0b0180cdeeba8e04242bf01de41a0a5ec21d89f2549775ddf4e6ca8672e806e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The deployer address for Cln.network's contract.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.