ETH Price: $3,407.04 (-0.90%)
Gas: 6 Gwei

Contract

0xb84E224216FeC19d8631a0Ad187326Bc48F91B6b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer60231472018-07-24 18:43:122185 days ago1532457792IN
TheAbyss: Token Sale
0.04997968 ETH0.000099884
Withdraw BNB58119532018-06-18 17:02:132221 days ago1529341333IN
TheAbyss: Token Sale
0 ETH0.000393669
Transfer58076012018-06-17 23:26:342221 days ago1529277994IN
TheAbyss: Token Sale
0.021 ETH0.000024971
Transfer58065252018-06-17 19:07:552222 days ago1529262475IN
TheAbyss: Token Sale
0.025 ETH0.000024971
Transfer56638102018-05-23 15:43:332247 days ago1527090213IN
TheAbyss: Token Sale
0.06 ETH0.000249710
Transfer56243392018-05-16 15:53:482254 days ago1526486028IN
TheAbyss: Token Sale
0.3 ETH0.0004744319
Transfer56240772018-05-16 14:47:122254 days ago1526482032IN
TheAbyss: Token Sale
2.65 ETH0.0021629599
Add To Lists56240212018-05-16 14:30:322254 days ago1526481032IN
TheAbyss: Token Sale
0 ETH0.0005732612
Process BNB Cont...56239842018-05-16 14:20:372254 days ago1526480437IN
TheAbyss: Token Sale
0 ETH0.001115950
Transfer56239832018-05-16 14:19:322254 days ago1526480372IN
TheAbyss: Token Sale
0.51 ETH0.0021629599
Transfer56239692018-05-16 14:15:552254 days ago1526480155IN
TheAbyss: Token Sale
0.51 ETH0.0007646835
Finalize Crowdsa...56239292018-05-16 14:03:482254 days ago1526479428IN
TheAbyss: Token Sale
0 ETH0.0065476912
Finalize Crowdsa...56239272018-05-16 14:03:232254 days ago1526479403IN
TheAbyss: Token Sale
0 ETH0.0003225912
Add To Lists56239252018-05-16 14:02:242254 days ago1526479344IN
TheAbyss: Token Sale
0 ETH0.0018972212
Add To Lists56239222018-05-16 14:01:072254 days ago1526479267IN
TheAbyss: Token Sale
0 ETH0.0018972212
Add To Lists56239202018-05-16 14:00:492254 days ago1526479249IN
TheAbyss: Token Sale
0 ETH0.0018972212
Add To Lists56239122018-05-16 13:58:552254 days ago1526479135IN
TheAbyss: Token Sale
0 ETH0.0006180712
Add To Lists56239122018-05-16 13:58:552254 days ago1526479135IN
TheAbyss: Token Sale
0 ETH0.0020772212
Add To Lists56239122018-05-16 13:58:552254 days ago1526479135IN
TheAbyss: Token Sale
0 ETH0.0020772212
Transfer56239122018-05-16 13:58:552254 days ago1526479135IN
TheAbyss: Token Sale
0.35384615 ETH0.0061055550
Transfer56239102018-05-16 13:58:282254 days ago1526479108IN
TheAbyss: Token Sale
1.7 ETH0.0034758941
Transfer56239102018-05-16 13:58:282254 days ago1526479108IN
TheAbyss: Token Sale
0.65 ETH0.0076339899
Transfer56239092018-05-16 13:58:212254 days ago1526479101IN
TheAbyss: Token Sale
0.5 ETH0.0016955620
Add To Lists56239082018-05-16 13:57:562254 days ago1526479076IN
TheAbyss: Token Sale
0 ETH0.0020772212
Add To Lists56239072018-05-16 13:57:462254 days ago1526479066IN
TheAbyss: Token Sale
0 ETH0.0018972212
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
56239252018-05-16 14:02:242254 days ago1526479344
TheAbyss: Token Sale
2 ETH
56239252018-05-16 14:02:242254 days ago1526479344
TheAbyss: Token Sale
2 ETH
56239222018-05-16 14:01:072254 days ago1526479267
TheAbyss: Token Sale
2.8983354 ETH
56239222018-05-16 14:01:072254 days ago1526479267
TheAbyss: Token Sale
2.8983354 ETH
56239202018-05-16 14:00:492254 days ago1526479249
TheAbyss: Token Sale
5 ETH
56239202018-05-16 14:00:492254 days ago1526479249
TheAbyss: Token Sale
5 ETH
56239122018-05-16 13:58:552254 days ago1526479135
TheAbyss: Token Sale
17 ETH
56239122018-05-16 13:58:552254 days ago1526479135
TheAbyss: Token Sale
17 ETH
56239122018-05-16 13:58:552254 days ago1526479135
TheAbyss: Token Sale
10 ETH
56239122018-05-16 13:58:552254 days ago1526479135
TheAbyss: Token Sale
10 ETH
56239122018-05-16 13:58:552254 days ago1526479135
TheAbyss: Token Sale
0.35384615 ETH
56239102018-05-16 13:58:282254 days ago1526479108
TheAbyss: Token Sale
1.7 ETH
56239102018-05-16 13:58:282254 days ago1526479108
TheAbyss: Token Sale
0.65 ETH
56239092018-05-16 13:58:212254 days ago1526479101
TheAbyss: Token Sale
0.5 ETH
56239082018-05-16 13:57:562254 days ago1526479076
TheAbyss: Token Sale
1 ETH
56239082018-05-16 13:57:562254 days ago1526479076
TheAbyss: Token Sale
1 ETH
56239072018-05-16 13:57:462254 days ago1526479066
TheAbyss: Token Sale
1.5 ETH
56239072018-05-16 13:57:462254 days ago1526479066
TheAbyss: Token Sale
1.5 ETH
56239062018-05-16 13:57:372254 days ago1526479057
TheAbyss: Token Sale
0.2 ETH
56239062018-05-16 13:57:372254 days ago1526479057
TheAbyss: Token Sale
0.2 ETH
56239042018-05-16 13:57:032254 days ago1526479023
TheAbyss: Token Sale
0.32 ETH
56239022018-05-16 13:56:412254 days ago1526479001
TheAbyss: Token Sale
0.3 ETH
56239012018-05-16 13:56:262254 days ago1526478986
TheAbyss: Token Sale
0.2 ETH
56239012018-05-16 13:56:262254 days ago1526478986
TheAbyss: Token Sale
0.38 ETH
56238972018-05-16 13:55:282254 days ago1526478928
TheAbyss: Token Sale
6.4 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TheAbyssDAICO

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-04-18
*/

pragma solidity ^0.4.21;

// File: contracts/ISimpleCrowdsale.sol

interface ISimpleCrowdsale {
    function getSoftCap() external view returns(uint256);
    function isContributorInLists(address contributorAddress) external view returns(bool);
    function processReservationFundContribution(
        address contributor,
        uint256 tokenAmount,
        uint256 tokenBonusAmount
    ) external payable;
}

// File: contracts/ownership/Ownable.sol

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

    event OwnershipTransferred(address previousOwner, address newOwner);

    /**
    * @dev The Ownable constructor sets the original `owner` of the contract.
    */
    function Ownable(address _owner) public {
        owner = _owner == address(0) ? msg.sender : _owner;
    }

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

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

    /**
    * @dev confirm ownership by a new owner
    */
    function confirmOwnership() public {
        require(msg.sender == newOwner);
        OwnershipTransferred(owner, newOwner);
        owner = newOwner;
        newOwner = 0x0;
    }
}

// File: contracts/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;


    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() onlyOwner whenNotPaused public {
        paused = true;
        Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() onlyOwner whenPaused public {
        paused = false;
        Unpause();
    }
}

// File: contracts/fund/ICrowdsaleFund.sol

/**
 * @title ICrowdsaleFund
 * @dev Fund methods used by crowdsale contract
 */
interface ICrowdsaleFund {
    /**
    * @dev Function accepts user`s contributed ether and logs contribution
    * @param contributor Contributor wallet address.
    */
    function processContribution(address contributor) external payable;
    /**
    * @dev Function is called on the end of successful crowdsale
    */
    function onCrowdsaleEnd() external;
    /**
    * @dev Function is called if crowdsale failed to reach soft cap
    */
    function enableCrowdsaleRefund() external;
}

// File: contracts/fund/ICrowdsaleReservationFund.sol

/**
 * @title ICrowdsaleReservationFund
 * @dev ReservationFund methods used by crowdsale contract
 */
interface ICrowdsaleReservationFund {
    /**
     * @dev Check if contributor has transactions
     */
    function canCompleteContribution(address contributor) external returns(bool);
    /**
     * @dev Complete contribution
     * @param contributor Contributor`s address
     */
    function completeContribution(address contributor) external;
    /**
     * @dev Function accepts user`s contributed ether and amount of tokens to issue
     * @param contributor Contributor wallet address.
     * @param _tokensToIssue Token amount to issue
     * @param _bonusTokensToIssue Bonus token amount to issue
     */
    function processContribution(address contributor, uint256 _tokensToIssue, uint256 _bonusTokensToIssue) external payable;

    /**
     * @dev Function returns current user`s contributed ether amount
     */
    function contributionsOf(address contributor) external returns(uint256);

    /**
     * @dev Function is called on the end of successful crowdsale
     */
    function onCrowdsaleEnd() external;
}

// File: contracts/token/IERC20Token.sol

/**
 * @title IERC20Token - ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract IERC20Token {
    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value)  public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value)  public returns (bool success);
    function approve(address _spender, uint256 _value)  public returns (bool success);
    function allowance(address _owner, address _spender)  public constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// File: contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
contract SafeMath {
    /**
    * @dev constructor
    */
    function SafeMath() public {
    }

    function safeMul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a / b;
        return c;
    }

    function safeSub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(a >= b);
        return a - b;
    }

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

// File: contracts/token/LockedTokens.sol

/**
 * @title LockedTokens
 * @dev Lock tokens for certain period of time
 */
contract LockedTokens is SafeMath {
    struct Tokens {
        uint256 amount;
        uint256 lockEndTime;
        bool released;
    }

    event TokensUnlocked(address _to, uint256 _value);

    IERC20Token public token;
    address public crowdsaleAddress;
    mapping(address => Tokens[]) public walletTokens;

    /**
     * @dev LockedTokens constructor
     * @param _token ERC20 compatible token contract
     * @param _crowdsaleAddress Crowdsale contract address
     */
    function LockedTokens(IERC20Token _token, address _crowdsaleAddress) public {
        token = _token;
        crowdsaleAddress = _crowdsaleAddress;
    }

    /**
     * @dev Functions locks tokens
     * @param _to Wallet address to transfer tokens after _lockEndTime
     * @param _amount Amount of tokens to lock
     * @param _lockEndTime End of lock period
     */
    function addTokens(address _to, uint256 _amount, uint256 _lockEndTime) external {
        require(msg.sender == crowdsaleAddress);
        walletTokens[_to].push(Tokens({amount: _amount, lockEndTime: _lockEndTime, released: false}));
    }

    /**
     * @dev Called by owner of locked tokens to release them
     */
    function releaseTokens() public {
        require(walletTokens[msg.sender].length > 0);

        for(uint256 i = 0; i < walletTokens[msg.sender].length; i++) {
            if(!walletTokens[msg.sender][i].released && now >= walletTokens[msg.sender][i].lockEndTime) {
                walletTokens[msg.sender][i].released = true;
                token.transfer(msg.sender, walletTokens[msg.sender][i].amount);
                TokensUnlocked(msg.sender, walletTokens[msg.sender][i].amount);
            }
        }
    }
}

// File: contracts/ownership/MultiOwnable.sol

/**
 * @title MultiOwnable
 * @dev The MultiOwnable contract has owners addresses and provides basic authorization control
 * functions, this simplifies the implementation of "users permissions".
 */
contract MultiOwnable {
    address public manager; // address used to set owners
    address[] public owners;
    mapping(address => bool) public ownerByAddress;

    event SetOwners(address[] owners);

    modifier onlyOwner() {
        require(ownerByAddress[msg.sender] == true);
        _;
    }

    /**
     * @dev MultiOwnable constructor sets the manager
     */
    function MultiOwnable() public {
        manager = msg.sender;
    }

    /**
     * @dev Function to set owners addresses
     */
    function setOwners(address[] _owners) public {
        require(msg.sender == manager);
        _setOwners(_owners);

    }

    function _setOwners(address[] _owners) internal {
        for(uint256 i = 0; i < owners.length; i++) {
            ownerByAddress[owners[i]] = false;
        }


        for(uint256 j = 0; j < _owners.length; j++) {
            ownerByAddress[_owners[j]] = true;
        }
        owners = _owners;
        SetOwners(_owners);
    }

    function getOwners() public constant returns (address[]) {
        return owners;
    }
}

// File: contracts/token/ERC20Token.sol

/**
 * @title ERC20Token - ERC20 base implementation
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20Token is IERC20Token, SafeMath {
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;

    function transfer(address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[msg.sender] >= _value);

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

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
        require(_to != address(0));
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);

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

    function balanceOf(address _owner) public constant returns (uint256) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256) {
      return allowed[_owner][_spender];
    }
}

// File: contracts/token/ITokenEventListener.sol

/**
 * @title ITokenEventListener
 * @dev Interface which should be implemented by token listener
 */
interface ITokenEventListener {
    /**
     * @dev Function is called after token transfer/transferFrom
     * @param _from Sender address
     * @param _to Receiver address
     * @param _value Amount of tokens
     */
    function onTokenTransfer(address _from, address _to, uint256 _value) external;
}

// File: contracts/token/ManagedToken.sol

/**
 * @title ManagedToken
 * @dev ERC20 compatible token with issue and destroy facilities
 * @dev All transfers can be monitored by token event listener
 */
contract ManagedToken is ERC20Token, MultiOwnable {
    bool public allowTransfers = false;
    bool public issuanceFinished = false;

    ITokenEventListener public eventListener;

    event AllowTransfersChanged(bool _newState);
    event Issue(address indexed _to, uint256 _value);
    event Destroy(address indexed _from, uint256 _value);
    event IssuanceFinished();

    modifier transfersAllowed() {
        require(allowTransfers);
        _;
    }

    modifier canIssue() {
        require(!issuanceFinished);
        _;
    }

    /**
     * @dev ManagedToken constructor
     * @param _listener Token listener(address can be 0x0)
     * @param _owners Owners list
     */
    function ManagedToken(address _listener, address[] _owners) public {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        }
        _setOwners(_owners);
    }

    /**
     * @dev Enable/disable token transfers. Can be called only by owners
     * @param _allowTransfers True - allow False - disable
     */
    function setAllowTransfers(bool _allowTransfers) external onlyOwner {
        allowTransfers = _allowTransfers;
        AllowTransfersChanged(_allowTransfers);
    }

    /**
     * @dev Set/remove token event listener
     * @param _listener Listener address (Contract must implement ITokenEventListener interface)
     */
    function setListener(address _listener) public onlyOwner {
        if(_listener != address(0)) {
            eventListener = ITokenEventListener(_listener);
        } else {
            delete eventListener;
        }
    }

    function transfer(address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transfer(_to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(msg.sender, _to, _value);
        }
        return success;
    }

    function transferFrom(address _from, address _to, uint256 _value) public transfersAllowed returns (bool) {
        bool success = super.transferFrom(_from, _to, _value);
        if(hasListener() && success) {
            eventListener.onTokenTransfer(_from, _to, _value);
        }
        return success;
    }

    function hasListener() internal view returns(bool) {
        if(eventListener == address(0)) {
            return false;
        }
        return true;
    }

    /**
     * @dev Issue tokens to specified wallet
     * @param _to Wallet address
     * @param _value Amount of tokens
     */
    function issue(address _to, uint256 _value) external onlyOwner canIssue {
        totalSupply = safeAdd(totalSupply, _value);
        balances[_to] = safeAdd(balances[_to], _value);
        Issue(_to, _value);
        Transfer(address(0), _to, _value);
    }

    /**
     * @dev Destroy tokens on specified address (Called by owner or token holder)
     * @dev Fund contract address must be in the list of owners to burn token during refund
     * @param _from Wallet address
     * @param _value Amount of tokens to destroy
     */
    function destroy(address _from, uint256 _value) external {
        require(ownerByAddress[msg.sender] || msg.sender == _from);
        require(balances[_from] >= _value);
        totalSupply = safeSub(totalSupply, _value);
        balances[_from] = safeSub(balances[_from], _value);
        Transfer(_from, address(0), _value);
        Destroy(_from, _value);
    }

    /**
     * @dev Increase the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To increment
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the allowance by.
     */
    function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
        allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender], _addedValue);
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Decrease the amount of tokens that an owner allowed to a spender.
     *
     * approve should be called when allowed[_spender] == 0. To decrement
     * allowed value is better to use this function to avoid 2 calls (and wait until
     * the first transaction is mined)
     * From OpenZeppelin StandardToken.sol
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the allowance by.
     */
    function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue);
        }
        Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    /**
     * @dev Finish token issuance
     * @return True if success
     */
    function finishIssuance() public onlyOwner returns (bool) {
        issuanceFinished = true;
        IssuanceFinished();
        return true;
    }
}

// File: contracts/token/TransferLimitedToken.sol

/**
 * @title TransferLimitedToken
 * @dev Token with ability to limit transfers within wallets included in limitedWallets list for certain period of time
 */
contract TransferLimitedToken is ManagedToken {
    uint256 public constant LIMIT_TRANSFERS_PERIOD = 365 days;

    mapping(address => bool) public limitedWallets;
    uint256 public limitEndDate;
    address public limitedWalletsManager;
    bool public isLimitEnabled;

    event TransfersEnabled();

    modifier onlyManager() {
        require(msg.sender == limitedWalletsManager);
        _;
    }

    /**
     * @dev Check if transfer between addresses is available
     * @param _from From address
     * @param _to To address
     */
    modifier canTransfer(address _from, address _to)  {
        require(now >= limitEndDate || !isLimitEnabled || (!limitedWallets[_from] && !limitedWallets[_to]));
        _;
    }

    /**
     * @dev TransferLimitedToken constructor
     * @param _limitStartDate Limit start date
     * @param _listener Token listener(address can be 0x0)
     * @param _owners Owners list
     * @param _limitedWalletsManager Address used to add/del wallets from limitedWallets
     */
    function TransferLimitedToken(
        uint256 _limitStartDate,
        address _listener,
        address[] _owners,
        address _limitedWalletsManager
    ) public ManagedToken(_listener, _owners)
    {
        limitEndDate = _limitStartDate + LIMIT_TRANSFERS_PERIOD;
        isLimitEnabled = true;
        limitedWalletsManager = _limitedWalletsManager;
    }

    /**
     * @dev Enable token transfers
     */
    function enableTransfers() public {
        require(msg.sender == limitedWalletsManager);
        allowTransfers = true;
        TransfersEnabled();
    }

    /**
     * @dev Add address to limitedWallets
     * @dev Can be called only by manager
     */
    function addLimitedWalletAddress(address _wallet) public {
        require(msg.sender == limitedWalletsManager || ownerByAddress[msg.sender]);
        limitedWallets[_wallet] = true;
    }

    /**
     * @dev Del address from limitedWallets
     * @dev Can be called only by manager
     */
    function delLimitedWalletAddress(address _wallet) public onlyManager {
        limitedWallets[_wallet] = false;
    }

    /**
     * @dev Disable transfer limit manually. Can be called only by manager
     */
    function disableLimit() public onlyManager {
        isLimitEnabled = false;
    }

    function transfer(address _to, uint256 _value) public canTransfer(msg.sender, _to) returns (bool) {
        return super.transfer(_to, _value);
    }

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

    function approve(address _spender, uint256 _value) public canTransfer(msg.sender, _spender) returns (bool) {
        return super.approve(_spender,_value);
    }
}

// File: contracts/Crowdsale.sol

contract TheAbyssDAICO is Ownable, SafeMath, Pausable, ISimpleCrowdsale {
    enum AdditionalBonusState {
        Unavailable,
        Active,
        Applied
    }

    uint256 public constant ADDITIONAL_BONUS_NUM = 3;
    uint256 public constant ADDITIONAL_BONUS_DENOM = 100;

    uint256 public constant ETHER_MIN_CONTRIB = 0.2 ether;
    uint256 public constant ETHER_MAX_CONTRIB = 20 ether;

    uint256 public constant ETHER_MIN_CONTRIB_PRIVATE = 100 ether;
    uint256 public constant ETHER_MAX_CONTRIB_PRIVATE = 3000 ether;

    uint256 public constant ETHER_MIN_CONTRIB_USA = 0.2 ether;
    uint256 public constant ETHER_MAX_CONTRIB_USA = 20 ether;

    uint256 public constant SALE_START_TIME = 1524060000; // 18.04.2018 14:00:00 UTC
    uint256 public constant SALE_END_TIME = 1526479200; // 16.05.2018 14:00:00 UTC

    uint256 public constant BONUS_WINDOW_1_END_TIME = SALE_START_TIME + 2 days;
    uint256 public constant BONUS_WINDOW_2_END_TIME = SALE_START_TIME + 7 days;
    uint256 public constant BONUS_WINDOW_3_END_TIME = SALE_START_TIME + 14 days;
    uint256 public constant BONUS_WINDOW_4_END_TIME = SALE_START_TIME + 21 days;

    uint256 public constant MAX_CONTRIB_CHECK_END_TIME = SALE_START_TIME + 1 days;

    uint256 public constant BNB_TOKEN_PRICE_NUM = 169;
    uint256 public constant BNB_TOKEN_PRICE_DENOM = 1;

    uint256 public tokenPriceNum = 0;
    uint256 public tokenPriceDenom = 0;
    
    TransferLimitedToken public token;
    ICrowdsaleFund public fund;
    ICrowdsaleReservationFund public reservationFund;
    LockedTokens public lockedTokens;

    mapping(address => bool) public whiteList;
    mapping(address => bool) public privilegedList;
    mapping(address => AdditionalBonusState) public additionalBonusOwnerState;
    mapping(address => uint256) public userTotalContributed;

    address public bnbTokenWallet;
    address public referralTokenWallet;
    address public foundationTokenWallet;
    address public advisorsTokenWallet;
    address public companyTokenWallet;
    address public reserveTokenWallet;
    address public bountyTokenWallet;

    uint256 public totalEtherContributed = 0;
    uint256 public rawTokenSupply = 0;

    // BNB
    IERC20Token public bnbToken;
    uint256 public BNB_HARD_CAP = 300000 ether; // 300K BNB
    uint256 public BNB_MIN_CONTRIB = 1000 ether; // 1K BNB
    mapping(address => uint256) public bnbContributions;
    uint256 public totalBNBContributed = 0;
    bool public bnbWithdrawEnabled = false;

    uint256 public hardCap = 0; // World hard cap will be set right before Token Sale
    uint256 public softCap = 0; // World soft cap will be set right before Token Sale

    bool public bnbRefundEnabled = false;

    event LogContribution(address contributor, uint256 amountWei, uint256 tokenAmount, uint256 tokenBonus, bool additionalBonusApplied, uint256 timestamp);
    event ReservationFundContribution(address contributor, uint256 amountWei, uint256 tokensToIssue, uint256 bonusTokensToIssue, uint256 timestamp);
    event LogBNBContribution(address contributor, uint256 amountBNB, uint256 tokenAmount, uint256 tokenBonus, bool additionalBonusApplied, uint256 timestamp);

    modifier checkContribution() {
        require(isValidContribution());
        _;
    }

    modifier checkBNBContribution() {
        require(isValidBNBContribution());
        _;
    }

    modifier checkCap() {
        require(validateCap());
        _;
    }

    modifier checkTime() {
        require(now >= SALE_START_TIME && now <= SALE_END_TIME);
        _;
    }

    function TheAbyssDAICO(
        address bnbTokenAddress,
        address tokenAddress,
        address fundAddress,
        address reservationFundAddress,
        address _bnbTokenWallet,
        address _referralTokenWallet,
        address _foundationTokenWallet,
        address _advisorsTokenWallet,
        address _companyTokenWallet,
        address _reserveTokenWallet,
        address _bountyTokenWallet,
        address _owner
    ) public
        Ownable(_owner)
    {
        require(tokenAddress != address(0));

        bnbToken = IERC20Token(bnbTokenAddress);
        token = TransferLimitedToken(tokenAddress);
        fund = ICrowdsaleFund(fundAddress);
        reservationFund = ICrowdsaleReservationFund(reservationFundAddress);

        bnbTokenWallet = _bnbTokenWallet;
        referralTokenWallet = _referralTokenWallet;
        foundationTokenWallet = _foundationTokenWallet;
        advisorsTokenWallet = _advisorsTokenWallet;
        companyTokenWallet = _companyTokenWallet;
        reserveTokenWallet = _reserveTokenWallet;
        bountyTokenWallet = _bountyTokenWallet;
    }

    /**
     * @dev check if address can contribute
     */
    function isContributorInLists(address contributor) external view returns(bool) {
        return whiteList[contributor] || privilegedList[contributor] || token.limitedWallets(contributor);
    }

    /**
     * @dev check contribution amount and time
     */
    function isValidContribution() internal view returns(bool) {
        uint256 currentUserContribution = safeAdd(msg.value, userTotalContributed[msg.sender]);
        if(whiteList[msg.sender] && msg.value >= ETHER_MIN_CONTRIB) {
            if(now <= MAX_CONTRIB_CHECK_END_TIME && currentUserContribution > ETHER_MAX_CONTRIB ) {
                    return false;
            }
            return true;

        }
        if(privilegedList[msg.sender] && msg.value >= ETHER_MIN_CONTRIB_PRIVATE) {
            if(now <= MAX_CONTRIB_CHECK_END_TIME && currentUserContribution > ETHER_MAX_CONTRIB_PRIVATE ) {
                    return false;
            }
            return true;
        }

        if(token.limitedWallets(msg.sender) && msg.value >= ETHER_MIN_CONTRIB_USA) {
            if(now <= MAX_CONTRIB_CHECK_END_TIME && currentUserContribution > ETHER_MAX_CONTRIB_USA) {
                    return false;
            }
            return true;
        }

        return false;
    }

    /**
     * @dev Check hard cap overflow
     */
    function validateCap() internal view returns(bool){
        if(msg.value <= safeSub(hardCap, totalEtherContributed)) {
            return true;
        }
        return false;
    }

    /**
     * @dev Set token price once before start of crowdsale
     */
    function setTokenPrice(uint256 _tokenPriceNum, uint256 _tokenPriceDenom) public onlyOwner {
        require(tokenPriceNum == 0 && tokenPriceDenom == 0);
        require(_tokenPriceNum > 0 && _tokenPriceDenom > 0);
        tokenPriceNum = _tokenPriceNum;
        tokenPriceDenom = _tokenPriceDenom;
    }

    /**
     * @dev Set hard cap.
     * @param _hardCap - Hard cap value
     */
    function setHardCap(uint256 _hardCap) public onlyOwner {
        require(hardCap == 0);
        hardCap = _hardCap;
    }

    /**
     * @dev Set soft cap.
     * @param _softCap - Soft cap value
     */
    function setSoftCap(uint256 _softCap) public onlyOwner {
        require(softCap == 0);
        softCap = _softCap;
    }

    /**
     * @dev Get soft cap amount
     **/
    function getSoftCap() external view returns(uint256) {
        return softCap;
    }

    /**
     * @dev Check bnb contribution time, amount and hard cap overflow
     */
    function isValidBNBContribution() internal view returns(bool) {
        if(token.limitedWallets(msg.sender)) {
            return false;
        }
        if(!whiteList[msg.sender] && !privilegedList[msg.sender]) {
            return false;
        }
        uint256 amount = bnbToken.allowance(msg.sender, address(this));
        if(amount < BNB_MIN_CONTRIB || safeAdd(totalBNBContributed, amount) > BNB_HARD_CAP) {
            return false;
        }
        return true;

    }

    /**
     * @dev Calc bonus amount by contribution time
     */
    function getBonus() internal constant returns (uint256, uint256) {
        uint256 numerator = 0;
        uint256 denominator = 100;

        if(now < BONUS_WINDOW_1_END_TIME) {
            numerator = 25;
        } else if(now < BONUS_WINDOW_2_END_TIME) {
            numerator = 15;
        } else if(now < BONUS_WINDOW_3_END_TIME) {
            numerator = 10;
        } else if(now < BONUS_WINDOW_4_END_TIME) {
            numerator = 5;
        } else {
            numerator = 0;
        }

        return (numerator, denominator);
    }

    function addToLists(
        address _wallet,
        bool isInWhiteList,
        bool isInPrivilegedList,
        bool isInLimitedList,
        bool hasAdditionalBonus
    ) public onlyOwner {
        if(isInWhiteList) {
            whiteList[_wallet] = true;
        }
        if(isInPrivilegedList) {
            privilegedList[_wallet] = true;
        }
        if(isInLimitedList) {
            token.addLimitedWalletAddress(_wallet);
        }
        if(hasAdditionalBonus) {
            additionalBonusOwnerState[_wallet] = AdditionalBonusState.Active;
        }
        if(reservationFund.canCompleteContribution(_wallet)) {
            reservationFund.completeContribution(_wallet);
        }
    }

    /**
     * @dev Add wallet to whitelist. For contract owner only.
     */
    function addToWhiteList(address _wallet) public onlyOwner {
        whiteList[_wallet] = true;
    }

    /**
     * @dev Add wallet to additional bonus members. For contract owner only.
     */
    function addAdditionalBonusMember(address _wallet) public onlyOwner {
        additionalBonusOwnerState[_wallet] = AdditionalBonusState.Active;
    }

    /**
     * @dev Add wallet to privileged list. For contract owner only.
     */
    function addToPrivilegedList(address _wallet) public onlyOwner {
        privilegedList[_wallet] = true;
    }

    /**
     * @dev Set LockedTokens contract address
     */
    function setLockedTokens(address lockedTokensAddress) public onlyOwner {
        lockedTokens = LockedTokens(lockedTokensAddress);
    }

    /**
     * @dev Fallback function to receive ether contributions
     */
    function () payable public whenNotPaused {
        if(whiteList[msg.sender] || privilegedList[msg.sender] || token.limitedWallets(msg.sender)) {
            processContribution(msg.sender, msg.value);
        } else {
            processReservationContribution(msg.sender, msg.value);
        }
    }

    function processReservationContribution(address contributor, uint256 amount) private checkTime checkCap {
        require(amount >= ETHER_MIN_CONTRIB);

        if(now <= MAX_CONTRIB_CHECK_END_TIME) {
            uint256 currentUserContribution = safeAdd(amount, reservationFund.contributionsOf(contributor));
            require(currentUserContribution <= ETHER_MAX_CONTRIB);
        }
        uint256 bonusNum = 0;
        uint256 bonusDenom = 100;
        (bonusNum, bonusDenom) = getBonus();
        uint256 tokenBonusAmount = 0;
        uint256 tokenAmount = safeDiv(safeMul(amount, tokenPriceNum), tokenPriceDenom);

        if(bonusNum > 0) {
            tokenBonusAmount = safeDiv(safeMul(tokenAmount, bonusNum), bonusDenom);
        }

        reservationFund.processContribution.value(amount)(
            contributor,
            tokenAmount,
            tokenBonusAmount
        );
        ReservationFundContribution(contributor, amount, tokenAmount, tokenBonusAmount, now);
    }

    /**
     * @dev Process BNB token contribution
     * Transfer all amount of tokens approved by sender. Calc bonuses and issue tokens to contributor.
     */
    function processBNBContribution() public whenNotPaused checkTime checkBNBContribution {
        bool additionalBonusApplied = false;
        uint256 bonusNum = 0;
        uint256 bonusDenom = 100;
        (bonusNum, bonusDenom) = getBonus();
        uint256 amountBNB = bnbToken.allowance(msg.sender, address(this));
        bnbToken.transferFrom(msg.sender, address(this), amountBNB);
        bnbContributions[msg.sender] = safeAdd(bnbContributions[msg.sender], amountBNB);

        uint256 tokenBonusAmount = 0;
        uint256 tokenAmount = safeDiv(safeMul(amountBNB, BNB_TOKEN_PRICE_NUM), BNB_TOKEN_PRICE_DENOM);
        rawTokenSupply = safeAdd(rawTokenSupply, tokenAmount);
        if(bonusNum > 0) {
            tokenBonusAmount = safeDiv(safeMul(tokenAmount, bonusNum), bonusDenom);
        }

        if(additionalBonusOwnerState[msg.sender] ==  AdditionalBonusState.Active) {
            additionalBonusOwnerState[msg.sender] = AdditionalBonusState.Applied;
            uint256 additionalBonus = safeDiv(safeMul(tokenAmount, ADDITIONAL_BONUS_NUM), ADDITIONAL_BONUS_DENOM);
            tokenBonusAmount = safeAdd(tokenBonusAmount, additionalBonus);
            additionalBonusApplied = true;
        }

        uint256 tokenTotalAmount = safeAdd(tokenAmount, tokenBonusAmount);
        token.issue(msg.sender, tokenTotalAmount);
        totalBNBContributed = safeAdd(totalBNBContributed, amountBNB);

        LogBNBContribution(msg.sender, amountBNB, tokenAmount, tokenBonusAmount, additionalBonusApplied, now);
    }

    /**
     * @dev Process ether contribution. Calc bonuses and issue tokens to contributor.
     */
    function processContribution(address contributor, uint256 amount) private checkTime checkContribution checkCap {
        bool additionalBonusApplied = false;
        uint256 bonusNum = 0;
        uint256 bonusDenom = 100;
        (bonusNum, bonusDenom) = getBonus();
        uint256 tokenBonusAmount = 0;

        uint256 tokenAmount = safeDiv(safeMul(amount, tokenPriceNum), tokenPriceDenom);
        rawTokenSupply = safeAdd(rawTokenSupply, tokenAmount);

        if(bonusNum > 0) {
            tokenBonusAmount = safeDiv(safeMul(tokenAmount, bonusNum), bonusDenom);
        }

        if(additionalBonusOwnerState[contributor] ==  AdditionalBonusState.Active) {
            additionalBonusOwnerState[contributor] = AdditionalBonusState.Applied;
            uint256 additionalBonus = safeDiv(safeMul(tokenAmount, ADDITIONAL_BONUS_NUM), ADDITIONAL_BONUS_DENOM);
            tokenBonusAmount = safeAdd(tokenBonusAmount, additionalBonus);
            additionalBonusApplied = true;
        }

        processPayment(contributor, amount, tokenAmount, tokenBonusAmount, additionalBonusApplied);
    }

    /**
     * @dev Process ether contribution before KYC. Calc bonuses and tokens to issue after KYC.
     */
    function processReservationFundContribution(
        address contributor,
        uint256 tokenAmount,
        uint256 tokenBonusAmount
    ) external payable checkCap {
        require(msg.sender == address(reservationFund));
        require(msg.value > 0);
        rawTokenSupply = safeAdd(rawTokenSupply, tokenAmount);
        processPayment(contributor, msg.value, tokenAmount, tokenBonusAmount, false);
    }

    function processPayment(address contributor, uint256 etherAmount, uint256 tokenAmount, uint256 tokenBonusAmount, bool additionalBonusApplied) internal {
        uint256 tokenTotalAmount = safeAdd(tokenAmount, tokenBonusAmount);

        token.issue(contributor, tokenTotalAmount);
        fund.processContribution.value(etherAmount)(contributor);
        totalEtherContributed = safeAdd(totalEtherContributed, etherAmount);
        userTotalContributed[contributor] = safeAdd(userTotalContributed[contributor], etherAmount);
        LogContribution(contributor, etherAmount, tokenAmount, tokenBonusAmount, additionalBonusApplied, now);
    }

    /**
     * @dev Force crowdsale refund
     */
    function forceCrowdsaleRefund() public onlyOwner {
        pause();
        fund.enableCrowdsaleRefund();
        reservationFund.onCrowdsaleEnd();
        token.finishIssuance();
        bnbRefundEnabled = true;
    }

    /**
     * @dev Finalize crowdsale if we reached hard cap or current time > SALE_END_TIME
     */
    function finalizeCrowdsale() public onlyOwner {
        if(
            totalEtherContributed >= safeSub(hardCap, 1000 ether) ||
            (now >= SALE_END_TIME && totalEtherContributed >= softCap)
        ) {
            fund.onCrowdsaleEnd();
            reservationFund.onCrowdsaleEnd();
            bnbWithdrawEnabled = true;

            // Referral
            uint256 referralTokenAmount = safeDiv(rawTokenSupply, 10);
            token.issue(referralTokenWallet, referralTokenAmount);

            // Foundation
            uint256 foundationTokenAmount = safeDiv(token.totalSupply(), 2); // 20%
            token.issue(address(lockedTokens), foundationTokenAmount);
            lockedTokens.addTokens(foundationTokenWallet, foundationTokenAmount, now + 365 days);
            uint256 suppliedTokenAmount = token.totalSupply();

            // Reserve
            uint256 reservedTokenAmount = safeDiv(safeMul(suppliedTokenAmount, 3), 10); // 18%
            token.issue(address(lockedTokens), reservedTokenAmount);
            lockedTokens.addTokens(reserveTokenWallet, reservedTokenAmount, now + 183 days);

            // Advisors
            uint256 advisorsTokenAmount = safeDiv(suppliedTokenAmount, 10); // 6%
            token.issue(advisorsTokenWallet, advisorsTokenAmount);

            // Company
            uint256 companyTokenAmount = safeDiv(suppliedTokenAmount, 4); // 15%
            token.issue(address(lockedTokens), companyTokenAmount);
            lockedTokens.addTokens(companyTokenWallet, companyTokenAmount, now + 730 days);

            // Bounty
            uint256 bountyTokenAmount = safeDiv(suppliedTokenAmount, 60); // 1%
            token.issue(bountyTokenWallet, bountyTokenAmount);
            token.finishIssuance();
        } else if(now >= SALE_END_TIME) {
            // Enable fund`s crowdsale refund if soft cap is not reached
            fund.enableCrowdsaleRefund();
            reservationFund.onCrowdsaleEnd();
            token.finishIssuance();
            bnbRefundEnabled = true;
        }
    }

    /**
     * @dev Withdraw bnb after crowdsale if crowdsale is not in refund mode
     */
    function withdrawBNB() public onlyOwner {
        require(bnbWithdrawEnabled);
        // BNB transfer
        if(bnbToken.balanceOf(address(this)) > 0) {
            bnbToken.transfer(bnbTokenWallet, bnbToken.balanceOf(address(this)));
        }
    }

    /**
     * @dev Function is called by contributor to refund BNB token payments if crowdsale failed to reach soft cap
     */
    function refundBNBContributor() public {
        require(bnbRefundEnabled);
        require(bnbContributions[msg.sender] > 0);
        uint256 amount = bnbContributions[msg.sender];
        bnbContributions[msg.sender] = 0;
        bnbToken.transfer(msg.sender, amount);
        token.destroy(msg.sender, token.balanceOf(msg.sender));
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"BNB_HARD_CAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalizeCrowdsale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bnbTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"privilegedList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bnbWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHER_MIN_CONTRIB","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHER_MAX_CONTRIB_PRIVATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBNB","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SALE_END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bnbToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rawTokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BNB_TOKEN_PRICE_DENOM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"},{"name":"tokenAmount","type":"uint256"},{"name":"tokenBonusAmount","type":"uint256"}],"name":"processReservationFundContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whiteList","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bnbContributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SALE_START_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addToWhiteList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSoftCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addToPrivilegedList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"processBNBContribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ADDITIONAL_BONUS_DENOM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addAdditionalBonusMember","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"},{"name":"isInWhiteList","type":"bool"},{"name":"isInPrivilegedList","type":"bool"},{"name":"isInLimitedList","type":"bool"},{"name":"hasAdditionalBonus","type":"bool"}],"name":"addToLists","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"forceCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BNB_TOKEN_PRICE_NUM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundBNBContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_WINDOW_4_END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"contributor","type":"address"}],"name":"isContributorInLists","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_CONTRIB_CHECK_END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"foundationTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserveTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalBNBContributed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHER_MIN_CONTRIB_USA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"additionalBonusOwnerState","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHER_MIN_CONTRIB_PRIVATE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"lockedTokensAddress","type":"address"}],"name":"setLockedTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ADDITIONAL_BONUS_NUM","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEtherContributed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fund","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reservationFund","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPriceNum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_hardCap","type":"uint256"}],"name":"setHardCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_softCap","type":"uint256"}],"name":"setSoftCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"confirmOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_WINDOW_2_END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_WINDOW_1_END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BNB_MIN_CONTRIB","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorsTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETHER_MAX_CONTRIB_USA","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userTotalContributed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenPriceNum","type":"uint256"},{"name":"_tokenPriceDenom","type":"uint256"}],"name":"setTokenPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bnbRefundEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"companyTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ETHER_MAX_CONTRIB","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenPriceDenom","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BONUS_WINDOW_3_END_TIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hardCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"bnbTokenAddress","type":"address"},{"name":"tokenAddress","type":"address"},{"name":"fundAddress","type":"address"},{"name":"reservationFundAddress","type":"address"},{"name":"_bnbTokenWallet","type":"address"},{"name":"_referralTokenWallet","type":"address"},{"name":"_foundationTokenWallet","type":"address"},{"name":"_advisorsTokenWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_reserveTokenWallet","type":"address"},{"name":"_bountyTokenWallet","type":"address"},{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"tokenBonus","type":"uint256"},{"indexed":false,"name":"additionalBonusApplied","type":"bool"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"LogContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokensToIssue","type":"uint256"},{"indexed":false,"name":"bonusTokensToIssue","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"ReservationFundContribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contributor","type":"address"},{"indexed":false,"name":"amountBNB","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"tokenBonus","type":"uint256"},{"indexed":false,"name":"additionalBonusApplied","type":"bool"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"LogBNBContribution","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60606040526001805460a060020a60ff021916905560006002819055600381905560138190556014819055693f870857a3e0e3800000601655683635c9adc5dea000006017556019819055601a805460ff19908116909155601b829055601c91909155601d80549091169055341561007657600080fd5b6040516101808062002cc38339810160405280805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519190602001805191906020018051919060200180519150819050600160a060020a038116156100f257806100f4565b335b60008054600160a060020a031916600160a060020a039283161790558c161515905061011f57600080fd5b5060158054600160a060020a0319908116600160a060020a039d8e16179091556004805482169b8d169b909b17909a55600580548b16998c1699909917909855600680548a16978b1697909717909655600c80548916958a1695909517909455600d8054881693891693909317909255600e80548716918816919091179055600f80548616918716919091179055601080548516918616919091179055601180548416918516919091179055601280549092169216919091179055612ad980620001ea6000396000f3006060604052600436106103075763ffffffff60e060020a60003504166212d90a81146103eb5780630bf318a3146104105780630ce4e104146104235780630eb34740146104525780631167b01214610465578063117387351461049857806316cb9100146104ab57806316cff09c146104be5780631d111d13146104d157806320a0045a146104e45780632b17b6a9146104f75780632cae9add1461050a5780632d7ed15c1461051d57806337033be614610530578063372c12b11461054a5780633f4ba83a146105695780633fc9b4231461057c57806344dbb5711461059b57806347ee0394146105ae5780634d52a512146105cd5780634f0b8374146105e0578063511d2299146105ff57806352860ea21461061257806352f18042146106255780635707812e146106445780635c975abb1461067757806362024dce1461068a5780636217903f1461069d578063668c1a46146106b057806372e2cac8146106c3578063772fdcb1146106d65780638456cb59146106f5578063857ba7fb146107085780638da5cb5b1461071b578063903171ae1461072e578063906a26e01461074157806392a0fd641461075457806393632ddd14610767578063a3223d50146104ab578063a336ffa51461077a578063aa1f609f146107bd578063acb9656c146107d0578063b0d3a396146107ef578063b591fc6914610802578063b60d428814610815578063b78c151714610828578063cc96019f1461083b578063cea024d91461084e578063d0e6cfec14610861578063d18d944b14610874578063d4ee1d901461088a578063d5cf5c721461089d578063d5d1e770146108b3578063d81f9830146108c6578063df0da20e146108d9578063dfb3557b146108ec578063e6ff0853146108ff578063e8faf89c14610912578063eb6389a514610925578063eb685c4714610944578063f1762e5d1461095d578063f190a79314610970578063f2fde38b14610983578063f3b5678f14610912578063f79ebd7f146109a2578063fb23bbb1146109b5578063fb86a404146109c8578063fc0c546a146109db575b60015460a060020a900460ff161561031e57600080fd5b600160a060020a03331660009081526008602052604090205460ff168061035d5750600160a060020a03331660009081526009602052604090205460ff165b806103cb5750600454600160a060020a0316632e2174053360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103b357600080fd5b5af115156103c057600080fd5b505050604051805190505b156103df576103da33346109ee565b6103e9565b6103e93334610b38565b005b34156103f657600080fd5b6103fe610d45565b60405190815260200160405180910390f35b341561041b57600080fd5b6103e9610d4b565b341561042e57600080fd5b6104366114e2565b604051600160a060020a03909116815260200160405180910390f35b341561045d57600080fd5b6104366114f1565b341561047057600080fd5b610484600160a060020a0360043516611500565b604051901515815260200160405180910390f35b34156104a357600080fd5b610484611515565b34156104b657600080fd5b6103fe61151e565b34156104c957600080fd5b6103fe61152a565b34156104dc57600080fd5b6103e9611537565b34156104ef57600080fd5b6103fe6116a5565b341561050257600080fd5b6104366116ad565b341561051557600080fd5b6103fe6116bc565b341561052857600080fd5b6103fe6116c2565b6103e9600160a060020a03600435166024356044356116c7565b341561055557600080fd5b610484600160a060020a0360043516611724565b341561057457600080fd5b6103e9611739565b341561058757600080fd5b6103fe600160a060020a03600435166117b8565b34156105a657600080fd5b6103fe6117ca565b34156105b957600080fd5b6103e9600160a060020a03600435166117d2565b34156105d857600080fd5b6103fe611811565b34156105eb57600080fd5b6103e9600160a060020a0360043516611818565b341561060a57600080fd5b6103e9611857565b341561061d57600080fd5b6103fe611baa565b341561063057600080fd5b6103e9600160a060020a0360043516611baf565b341561064f57600080fd5b6103e9600160a060020a03600435166024351515604435151560643515156084351515611bee565b341561068257600080fd5b610484611dbe565b341561069557600080fd5b6103e9611dce565b34156106a857600080fd5b6103fe611ef6565b34156106bb57600080fd5b6103e9611efb565b34156106ce57600080fd5b6103fe612081565b34156106e157600080fd5b610484600160a060020a0360043516612089565b341561070057600080fd5b6103e961213c565b341561071357600080fd5b6103fe6121c0565b341561072657600080fd5b6104366121c8565b341561073957600080fd5b6104366121d7565b341561074c57600080fd5b6103fe6121e6565b341561075f57600080fd5b6104366121ec565b341561077257600080fd5b6103fe6121fb565b341561078557600080fd5b610799600160a060020a0360043516612201565b604051808260028111156107a957fe5b60ff16815260200191505060405180910390f35b34156107c857600080fd5b6103fe612216565b34156107db57600080fd5b6103e9600160a060020a0360043516612223565b34156107fa57600080fd5b6103fe61226d565b341561080d57600080fd5b6103fe612272565b341561082057600080fd5b610436612278565b341561083357600080fd5b610436612287565b341561084657600080fd5b610436612296565b341561085957600080fd5b6103fe6122a5565b341561086c57600080fd5b6104366122ab565b341561087f57600080fd5b6103e96004356122ba565b341561089557600080fd5b6104366122e7565b34156108a857600080fd5b6103e96004356122f6565b34156108be57600080fd5b6103e9612323565b34156108d157600080fd5b6103fe6123ca565b34156108e457600080fd5b6103fe6123d2565b34156108f757600080fd5b6103fe6123da565b341561090a57600080fd5b6104366123e0565b341561091d57600080fd5b6103fe6123ef565b341561093057600080fd5b6103fe600160a060020a03600435166123fc565b341561094f57600080fd5b6103e960043560243561240e565b341561096857600080fd5b61048461246a565b341561097b57600080fd5b610436612473565b341561098e57600080fd5b6103e9600160a060020a0360043516612482565b34156109ad57600080fd5b6103fe6124e7565b34156109c057600080fd5b6103fe6124ed565b34156109d357600080fd5b6103fe6124f5565b34156109e657600080fd5b6104366124fb565b600080600080600080635ad74f604210158015610a0f5750635afc39604211155b1515610a1a57600080fd5b610a2261250a565b1515610a2d57600080fd5b610a356126ac565b1515610a4057600080fd5b600095506000945060649350610a546126d0565b809550819650505060009250610a77610a6f88600254612738565b600354612763565b9150610a856014548361277a565b6014556000851115610aa757610aa4610a9e8387612738565b85612763565b92505b6001600160a060020a0389166000908152600a602052604090205460ff166002811115610ad057fe5b1415610b2157600160a060020a0388166000908152600a60205260409020805460ff19166002179055610b0e610b07836003612738565b6064612763565b9050610b1a838261277a565b9250600195505b610b2e888884868a612789565b5050505050505050565b6000806000806000635ad74f604210158015610b585750635afc39604211155b1515610b6357600080fd5b610b6b6126ac565b1515610b7657600080fd5b6702c68af0bb140000861015610b8b57600080fd5b635ad8a0e04211610c2057600654610c08908790600160a060020a0316633af0dbc18a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610bec57600080fd5b5af11515610bf957600080fd5b5050506040518051905061277a565b94506801158e460913d00000851115610c2057600080fd5b6000935060649250610c306126d0565b809450819550505060009150610c4b610a6f87600254612738565b90506000841115610c6c57610c69610c638286612738565b84612763565b91505b600654600160a060020a031663ef8b0e158789848660405160e060020a63ffffffff8716028152600160a060020a039093166004840152602483019190915260448201526064016000604051808303818588803b1515610ccb57600080fd5b5af11515610cd857600080fd5b505050507ffc42b1040c2ac21c825c42ccdad60925abb0462e7bd3a47cf21ad859ee8665468787838542604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390a150505050505050565b60165481565b6000805481908190819081908190819033600160a060020a03908116911614610d7357600080fd5b610d88601b54683635c9adc5dea0000061292e565b601354101580610dab5750635afc39604210158015610dab5750601c5460135410155b156113ca57600554600160a060020a0316636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610def57600080fd5b5af11515610dfc57600080fd5b5050600654600160a060020a03169050636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610e3f57600080fd5b5af11515610e4c57600080fd5b5050601a805460ff1916600117905550601454610e6a90600a612763565b600454600d54919850600160a060020a039081169163867904b491168960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610eca57600080fd5b5af11515610ed757600080fd5b5050600454610f3b9150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f1d57600080fd5b5af11515610f2a57600080fd5b505050604051805190506002612763565b600454600754919750600160a060020a039081169163867904b491168860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610f9b57600080fd5b5af11515610fa857600080fd5b5050600754600e54600160a060020a03918216925063ca056aed9116886301e13380420160405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b151561101757600080fd5b5af1151561102457600080fd5b5050600454600160a060020a031690506318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561106757600080fd5b5af1151561107457600080fd5b50505060405180519050945061109561108e866003612738565b600a612763565b600454600754919550600160a060020a039081169163867904b491168660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156110f557600080fd5b5af1151561110257600080fd5b5050600754601154600160a060020a03918216925063ca056aed91168662f14280420160405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b151561117057600080fd5b5af1151561117d57600080fd5b50505061118b85600a612763565b600454600f54919450600160a060020a039081169163867904b491168560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156111eb57600080fd5b5af115156111f857600080fd5b505050611206856004612763565b600454600754919350600160a060020a039081169163867904b491168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561126657600080fd5b5af1151561127357600080fd5b5050600754601054600160a060020a03918216925063ca056aed9116846303c26700420160405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b15156112e257600080fd5b5af115156112ef57600080fd5b5050506112fd85603c612763565b600454601254919250600160a060020a039081169163867904b491168360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561135d57600080fd5b5af1151561136a57600080fd5b5050600454600160a060020a0316905063c422293b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ad57600080fd5b5af115156113ba57600080fd5b50505060405180519050506114d9565b635afc396042106114d957600554600160a060020a0316633b64e77e6040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561141457600080fd5b5af1151561142157600080fd5b5050600654600160a060020a03169050636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561146457600080fd5b5af1151561147157600080fd5b5050600454600160a060020a0316905063c422293b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114b457600080fd5b5af115156114c157600080fd5b50505060405180515050601d805460ff191660011790555b50505050505050565b600c54600160a060020a031681565b600754600160a060020a031681565b60096020526000908152604090205460ff1681565b601a5460ff1681565b6702c68af0bb14000081565b68a2a15d09519be0000081565b60005433600160a060020a0390811691161461155257600080fd5b601a5460ff16151561156357600080fd5b601554600090600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156115b657600080fd5b5af115156115c357600080fd5b5050506040518051905011156116a357601554600c54600160a060020a039182169163a9059cbb9116826370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561163157600080fd5b5af1151561163e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561168b57600080fd5b5af1151561169857600080fd5b505050604051805150505b565b635afc396081565b601554600160a060020a031681565b60145481565b600181565b6116cf6126ac565b15156116da57600080fd5b60065433600160a060020a039081169116146116f557600080fd5b6000341161170257600080fd5b61170e6014548361277a565b60145561171f833484846000612789565b505050565b60086020526000908152604090205460ff1681565b60005433600160a060020a0390811691161461175457600080fd5b60015460a060020a900460ff16151561176c57600080fd5b6001805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60186020526000908152604090205481565b635ad74f6081565b60005433600160a060020a039081169116146117ed57600080fd5b600160a060020a03166000908152600860205260409020805460ff19166001179055565b601c545b90565b60005433600160a060020a0390811691161461183357600080fd5b600160a060020a03166000908152600960205260409020805460ff19166001179055565b600080600080600080600080600160149054906101000a900460ff1615151561187f57600080fd5b635ad74f6042101580156118975750635afc39604211155b15156118a257600080fd5b6118aa612940565b15156118b557600080fd5b6000975060009650606495506118c96126d0565b6015549198509650600160a060020a031663dd62ed3e333060405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561192657600080fd5b5af1151561193357600080fd5b5050506040518051601554909650600160a060020a031690506323b872dd33308860405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156119a357600080fd5b5af115156119b057600080fd5b50505060405180515050600160a060020a0333166000908152601860205260409020546119dd908661277a565b600160a060020a0333166000908152601860205260408120919091559350611a10611a098660a9612738565b6001612763565b9250611a1e6014548461277a565b6014556000871115611a4057611a3d611a378489612738565b87612763565b93505b6001600160a060020a0333166000908152600a602052604090205460ff166002811115611a6957fe5b1415611ab35733600160a060020a03166000908152600a60205260409020805460ff19166002179055611aa0610b07846003612738565b9150611aac848361277a565b9350600197505b611abd838561277a565b600454909150600160a060020a031663867904b4338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611b1657600080fd5b5af11515611b2357600080fd5b505050611b326019548661277a565b6019557f934a07288cb83800d6bb14a38c6c12f397a925ad87ce3b745c6804db1ecee24f338685878c42604051600160a060020a039096168652602086019490945260408086019390935260608501919091521515608084015260a083019190915260c0909101905180910390a15050505050505050565b606481565b60005433600160a060020a03908116911614611bca57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b60005433600160a060020a03908116911614611c0957600080fd5b8315611c3357600160a060020a0385166000908152600860205260409020805460ff191660011790555b8215611c5d57600160a060020a0385166000908152600960205260409020805460ff191660011790555b8115611cc457600454600160a060020a031663ee8cbc9d8660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611cb357600080fd5b5af11515611cc057600080fd5b5050505b8015611cee57600160a060020a0385166000908152600a60205260409020805460ff191660011790555b600654600160a060020a031663f50a26448660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d3e57600080fd5b5af11515611d4b57600080fd5b5050506040518051905015611db757600654600160a060020a03166331aa91fc8660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611daa57600080fd5b5af11515610b2e57600080fd5b5050505050565b60015460a060020a900460ff1681565b60005433600160a060020a03908116911614611de957600080fd5b611df161213c565b600554600160a060020a0316633b64e77e6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515611e3057600080fd5b5af11515611e3d57600080fd5b5050600654600160a060020a03169050636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515611e8057600080fd5b5af11515611e8d57600080fd5b5050600454600160a060020a0316905063c422293b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611ed057600080fd5b5af11515611edd57600080fd5b50505060405180515050601d805460ff19166001179055565b60a981565b601d5460009060ff161515611f0f57600080fd5b600160a060020a03331660009081526018602052604081205411611f3257600080fd5b50600160a060020a033381811660009081526018602052604080822080549290556015549193919091169163a9059cbb9184905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611fa657600080fd5b5af11515611fb357600080fd5b50505060405180515050600454600160a060020a031663a24835d133826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561201457600080fd5b5af1151561202157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561206e57600080fd5b5af1151561207b57600080fd5b50505050565b635af2fee081565b600160a060020a03811660009081526008602052604081205460ff16806120c85750600160a060020a03821660009081526009602052604090205460ff165b806121365750600454600160a060020a0316632e2174058360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561211e57600080fd5b5af1151561212b57600080fd5b505050604051805190505b92915050565b60005433600160a060020a0390811691161461215757600080fd5b60015460a060020a900460ff161561216e57600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b635ad8a0e081565b600054600160a060020a031681565b600e54600160a060020a031681565b601c5481565b601154600160a060020a031681565b60195481565b600a6020526000908152604090205460ff1681565b68056bc75e2d6310000081565b60005433600160a060020a0390811691161461223e57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600381565b60135481565b600554600160a060020a031681565b600654600160a060020a031681565b600d54600160a060020a031681565b60025481565b601254600160a060020a031681565b60005433600160a060020a039081169116146122d557600080fd5b601b54156122e257600080fd5b601b55565b600154600160a060020a031681565b60005433600160a060020a0390811691161461231157600080fd5b601c541561231e57600080fd5b601c55565b60015433600160a060020a0390811691161461233e57600080fd5b6000546001547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b635ae089e081565b635ad9f26081565b60175481565b600f54600160a060020a031681565b6801158e460913d0000081565b600b6020526000908152604090205481565b60005433600160a060020a0390811691161461242957600080fd5b6002541580156124395750600354155b151561244457600080fd5b6000821180156124545750600081115b151561245f57600080fd5b600291909155600355565b601d5460ff1681565b601054600160a060020a031681565b60005433600160a060020a0390811691161461249d57600080fd5b600054600160a060020a03828116911614156124b857600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035481565b635ae9c46081565b601b5481565b600454600160a060020a031681565b600160a060020a0333166000908152600b6020526040812054819061253090349061277a565b600160a060020a03331660009081526008602052604090205490915060ff16801561256357506702c68af0bb1400003410155b1561259b57635ad8a0e0421180159061258457506801158e460913d0000081115b1561259257600091506126a8565b600191506126a8565b600160a060020a03331660009081526009602052604090205460ff1680156125cc575068056bc75e2d631000003410155b156125fa57635ad8a0e04211801590612584575068a2a15d09519be0000081111561259257600091506126a8565b600454600160a060020a0316632e2174053360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561264a57600080fd5b5af1151561265757600080fd5b50505060405180519050801561267557506702c68af0bb1400003410155b156126a357635ad8a0e0421180159061258457506801158e460913d0000081111561259257600091506126a8565b600091505b5090565b60006126bc601b5460135461292e565b34116126ca57506001611815565b50600090565b600080806064635ad9f2604210156126eb576019915061272f565b635ae089e042101561270057600f915061272f565b635ae9c46042101561271557600a915061272f565b635af2fee042101561272a576005915061272f565b600091505b90939092509050565b6000828202831580612754575082848281151561275157fe5b04145b151561275c57fe5b9392505050565b600080828481151561277157fe5b04949350505050565b60008282018381101561275c57fe5b6000612795848461277a565b600454909150600160a060020a031663867904b4878360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156127ee57600080fd5b5af115156127fb57600080fd5b5050600554600160a060020a0316905063a78a651a868860405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b151561284f57600080fd5b5af1151561285c57600080fd5b5050505061286c6013548661277a565b601355600160a060020a0386166000908152600b6020526040902054612892908661277a565b600b600088600160a060020a0316600160a060020a03168152602001908152602001600020819055507f77cbff9b281bbc6839ce326b536ee9d11c49c42e936fe518d7c47d7296f73424868686868642604051600160a060020a039096168652602086019490945260408086019390935260608501919091521515608084015260a083019190915260c0909101905180910390a1505050505050565b60008183101561293a57fe5b50900390565b6004546000908190600160a060020a0316632e2174053360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561299557600080fd5b5af115156129a257600080fd5b50505060405180519050156129ba57600091506126a8565b600160a060020a03331660009081526008602052604090205460ff161580156129fc5750600160a060020a03331660009081526009602052604090205460ff16155b15612a0a57600091506126a8565b601554600160a060020a031663dd62ed3e333060405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515612a6257600080fd5b5af11515612a6f57600080fd5b505050604051805190509050601754811080612a975750601654612a956019548361277a565b115b15612aa557600091506126a8565b6001915050905600a165627a7a7230582000085a7c69db841a94328afc45904e3c776ec53cb5bb04a9f82263fff734cdc10029000000000000000000000000b8c77482e45f1f44de1745f52c74426c631bdd520000000000000000000000000e8d6b471e332f140e7d9dbb99e5e3822f728da600000000000000000000000049db6ee4507132d1fdac92318e0e6150bf786728000000000000000000000000035611f47a13f3603109152952f0034c674959ba000000000000000000000000ba121eba02961b7fa53fafcbb53826e1acd5a472000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f300000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b876040000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f

Deployed Bytecode

0x6060604052600436106103075763ffffffff60e060020a60003504166212d90a81146103eb5780630bf318a3146104105780630ce4e104146104235780630eb34740146104525780631167b01214610465578063117387351461049857806316cb9100146104ab57806316cff09c146104be5780631d111d13146104d157806320a0045a146104e45780632b17b6a9146104f75780632cae9add1461050a5780632d7ed15c1461051d57806337033be614610530578063372c12b11461054a5780633f4ba83a146105695780633fc9b4231461057c57806344dbb5711461059b57806347ee0394146105ae5780634d52a512146105cd5780634f0b8374146105e0578063511d2299146105ff57806352860ea21461061257806352f18042146106255780635707812e146106445780635c975abb1461067757806362024dce1461068a5780636217903f1461069d578063668c1a46146106b057806372e2cac8146106c3578063772fdcb1146106d65780638456cb59146106f5578063857ba7fb146107085780638da5cb5b1461071b578063903171ae1461072e578063906a26e01461074157806392a0fd641461075457806393632ddd14610767578063a3223d50146104ab578063a336ffa51461077a578063aa1f609f146107bd578063acb9656c146107d0578063b0d3a396146107ef578063b591fc6914610802578063b60d428814610815578063b78c151714610828578063cc96019f1461083b578063cea024d91461084e578063d0e6cfec14610861578063d18d944b14610874578063d4ee1d901461088a578063d5cf5c721461089d578063d5d1e770146108b3578063d81f9830146108c6578063df0da20e146108d9578063dfb3557b146108ec578063e6ff0853146108ff578063e8faf89c14610912578063eb6389a514610925578063eb685c4714610944578063f1762e5d1461095d578063f190a79314610970578063f2fde38b14610983578063f3b5678f14610912578063f79ebd7f146109a2578063fb23bbb1146109b5578063fb86a404146109c8578063fc0c546a146109db575b60015460a060020a900460ff161561031e57600080fd5b600160a060020a03331660009081526008602052604090205460ff168061035d5750600160a060020a03331660009081526009602052604090205460ff165b806103cb5750600454600160a060020a0316632e2174053360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156103b357600080fd5b5af115156103c057600080fd5b505050604051805190505b156103df576103da33346109ee565b6103e9565b6103e93334610b38565b005b34156103f657600080fd5b6103fe610d45565b60405190815260200160405180910390f35b341561041b57600080fd5b6103e9610d4b565b341561042e57600080fd5b6104366114e2565b604051600160a060020a03909116815260200160405180910390f35b341561045d57600080fd5b6104366114f1565b341561047057600080fd5b610484600160a060020a0360043516611500565b604051901515815260200160405180910390f35b34156104a357600080fd5b610484611515565b34156104b657600080fd5b6103fe61151e565b34156104c957600080fd5b6103fe61152a565b34156104dc57600080fd5b6103e9611537565b34156104ef57600080fd5b6103fe6116a5565b341561050257600080fd5b6104366116ad565b341561051557600080fd5b6103fe6116bc565b341561052857600080fd5b6103fe6116c2565b6103e9600160a060020a03600435166024356044356116c7565b341561055557600080fd5b610484600160a060020a0360043516611724565b341561057457600080fd5b6103e9611739565b341561058757600080fd5b6103fe600160a060020a03600435166117b8565b34156105a657600080fd5b6103fe6117ca565b34156105b957600080fd5b6103e9600160a060020a03600435166117d2565b34156105d857600080fd5b6103fe611811565b34156105eb57600080fd5b6103e9600160a060020a0360043516611818565b341561060a57600080fd5b6103e9611857565b341561061d57600080fd5b6103fe611baa565b341561063057600080fd5b6103e9600160a060020a0360043516611baf565b341561064f57600080fd5b6103e9600160a060020a03600435166024351515604435151560643515156084351515611bee565b341561068257600080fd5b610484611dbe565b341561069557600080fd5b6103e9611dce565b34156106a857600080fd5b6103fe611ef6565b34156106bb57600080fd5b6103e9611efb565b34156106ce57600080fd5b6103fe612081565b34156106e157600080fd5b610484600160a060020a0360043516612089565b341561070057600080fd5b6103e961213c565b341561071357600080fd5b6103fe6121c0565b341561072657600080fd5b6104366121c8565b341561073957600080fd5b6104366121d7565b341561074c57600080fd5b6103fe6121e6565b341561075f57600080fd5b6104366121ec565b341561077257600080fd5b6103fe6121fb565b341561078557600080fd5b610799600160a060020a0360043516612201565b604051808260028111156107a957fe5b60ff16815260200191505060405180910390f35b34156107c857600080fd5b6103fe612216565b34156107db57600080fd5b6103e9600160a060020a0360043516612223565b34156107fa57600080fd5b6103fe61226d565b341561080d57600080fd5b6103fe612272565b341561082057600080fd5b610436612278565b341561083357600080fd5b610436612287565b341561084657600080fd5b610436612296565b341561085957600080fd5b6103fe6122a5565b341561086c57600080fd5b6104366122ab565b341561087f57600080fd5b6103e96004356122ba565b341561089557600080fd5b6104366122e7565b34156108a857600080fd5b6103e96004356122f6565b34156108be57600080fd5b6103e9612323565b34156108d157600080fd5b6103fe6123ca565b34156108e457600080fd5b6103fe6123d2565b34156108f757600080fd5b6103fe6123da565b341561090a57600080fd5b6104366123e0565b341561091d57600080fd5b6103fe6123ef565b341561093057600080fd5b6103fe600160a060020a03600435166123fc565b341561094f57600080fd5b6103e960043560243561240e565b341561096857600080fd5b61048461246a565b341561097b57600080fd5b610436612473565b341561098e57600080fd5b6103e9600160a060020a0360043516612482565b34156109ad57600080fd5b6103fe6124e7565b34156109c057600080fd5b6103fe6124ed565b34156109d357600080fd5b6103fe6124f5565b34156109e657600080fd5b6104366124fb565b600080600080600080635ad74f604210158015610a0f5750635afc39604211155b1515610a1a57600080fd5b610a2261250a565b1515610a2d57600080fd5b610a356126ac565b1515610a4057600080fd5b600095506000945060649350610a546126d0565b809550819650505060009250610a77610a6f88600254612738565b600354612763565b9150610a856014548361277a565b6014556000851115610aa757610aa4610a9e8387612738565b85612763565b92505b6001600160a060020a0389166000908152600a602052604090205460ff166002811115610ad057fe5b1415610b2157600160a060020a0388166000908152600a60205260409020805460ff19166002179055610b0e610b07836003612738565b6064612763565b9050610b1a838261277a565b9250600195505b610b2e888884868a612789565b5050505050505050565b6000806000806000635ad74f604210158015610b585750635afc39604211155b1515610b6357600080fd5b610b6b6126ac565b1515610b7657600080fd5b6702c68af0bb140000861015610b8b57600080fd5b635ad8a0e04211610c2057600654610c08908790600160a060020a0316633af0dbc18a60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610bec57600080fd5b5af11515610bf957600080fd5b5050506040518051905061277a565b94506801158e460913d00000851115610c2057600080fd5b6000935060649250610c306126d0565b809450819550505060009150610c4b610a6f87600254612738565b90506000841115610c6c57610c69610c638286612738565b84612763565b91505b600654600160a060020a031663ef8b0e158789848660405160e060020a63ffffffff8716028152600160a060020a039093166004840152602483019190915260448201526064016000604051808303818588803b1515610ccb57600080fd5b5af11515610cd857600080fd5b505050507ffc42b1040c2ac21c825c42ccdad60925abb0462e7bd3a47cf21ad859ee8665468787838542604051600160a060020a03909516855260208501939093526040808501929092526060840152608083019190915260a0909101905180910390a150505050505050565b60165481565b6000805481908190819081908190819033600160a060020a03908116911614610d7357600080fd5b610d88601b54683635c9adc5dea0000061292e565b601354101580610dab5750635afc39604210158015610dab5750601c5460135410155b156113ca57600554600160a060020a0316636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610def57600080fd5b5af11515610dfc57600080fd5b5050600654600160a060020a03169050636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515610e3f57600080fd5b5af11515610e4c57600080fd5b5050601a805460ff1916600117905550601454610e6a90600a612763565b600454600d54919850600160a060020a039081169163867904b491168960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610eca57600080fd5b5af11515610ed757600080fd5b5050600454610f3b9150600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610f1d57600080fd5b5af11515610f2a57600080fd5b505050604051805190506002612763565b600454600754919750600160a060020a039081169163867904b491168860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610f9b57600080fd5b5af11515610fa857600080fd5b5050600754600e54600160a060020a03918216925063ca056aed9116886301e13380420160405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b151561101757600080fd5b5af1151561102457600080fd5b5050600454600160a060020a031690506318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561106757600080fd5b5af1151561107457600080fd5b50505060405180519050945061109561108e866003612738565b600a612763565b600454600754919550600160a060020a039081169163867904b491168660405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156110f557600080fd5b5af1151561110257600080fd5b5050600754601154600160a060020a03918216925063ca056aed91168662f14280420160405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b151561117057600080fd5b5af1151561117d57600080fd5b50505061118b85600a612763565b600454600f54919450600160a060020a039081169163867904b491168560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156111eb57600080fd5b5af115156111f857600080fd5b505050611206856004612763565b600454600754919350600160a060020a039081169163867904b491168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561126657600080fd5b5af1151561127357600080fd5b5050600754601054600160a060020a03918216925063ca056aed9116846303c26700420160405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401600060405180830381600087803b15156112e257600080fd5b5af115156112ef57600080fd5b5050506112fd85603c612763565b600454601254919250600160a060020a039081169163867904b491168360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561135d57600080fd5b5af1151561136a57600080fd5b5050600454600160a060020a0316905063c422293b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113ad57600080fd5b5af115156113ba57600080fd5b50505060405180519050506114d9565b635afc396042106114d957600554600160a060020a0316633b64e77e6040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561141457600080fd5b5af1151561142157600080fd5b5050600654600160a060020a03169050636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b151561146457600080fd5b5af1151561147157600080fd5b5050600454600160a060020a0316905063c422293b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156114b457600080fd5b5af115156114c157600080fd5b50505060405180515050601d805460ff191660011790555b50505050505050565b600c54600160a060020a031681565b600754600160a060020a031681565b60096020526000908152604090205460ff1681565b601a5460ff1681565b6702c68af0bb14000081565b68a2a15d09519be0000081565b60005433600160a060020a0390811691161461155257600080fd5b601a5460ff16151561156357600080fd5b601554600090600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156115b657600080fd5b5af115156115c357600080fd5b5050506040518051905011156116a357601554600c54600160a060020a039182169163a9059cbb9116826370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561163157600080fd5b5af1151561163e57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561168b57600080fd5b5af1151561169857600080fd5b505050604051805150505b565b635afc396081565b601554600160a060020a031681565b60145481565b600181565b6116cf6126ac565b15156116da57600080fd5b60065433600160a060020a039081169116146116f557600080fd5b6000341161170257600080fd5b61170e6014548361277a565b60145561171f833484846000612789565b505050565b60086020526000908152604090205460ff1681565b60005433600160a060020a0390811691161461175457600080fd5b60015460a060020a900460ff16151561176c57600080fd5b6001805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60186020526000908152604090205481565b635ad74f6081565b60005433600160a060020a039081169116146117ed57600080fd5b600160a060020a03166000908152600860205260409020805460ff19166001179055565b601c545b90565b60005433600160a060020a0390811691161461183357600080fd5b600160a060020a03166000908152600960205260409020805460ff19166001179055565b600080600080600080600080600160149054906101000a900460ff1615151561187f57600080fd5b635ad74f6042101580156118975750635afc39604211155b15156118a257600080fd5b6118aa612940565b15156118b557600080fd5b6000975060009650606495506118c96126d0565b6015549198509650600160a060020a031663dd62ed3e333060405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561192657600080fd5b5af1151561193357600080fd5b5050506040518051601554909650600160a060020a031690506323b872dd33308860405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156119a357600080fd5b5af115156119b057600080fd5b50505060405180515050600160a060020a0333166000908152601860205260409020546119dd908661277a565b600160a060020a0333166000908152601860205260408120919091559350611a10611a098660a9612738565b6001612763565b9250611a1e6014548461277a565b6014556000871115611a4057611a3d611a378489612738565b87612763565b93505b6001600160a060020a0333166000908152600a602052604090205460ff166002811115611a6957fe5b1415611ab35733600160a060020a03166000908152600a60205260409020805460ff19166002179055611aa0610b07846003612738565b9150611aac848361277a565b9350600197505b611abd838561277a565b600454909150600160a060020a031663867904b4338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611b1657600080fd5b5af11515611b2357600080fd5b505050611b326019548661277a565b6019557f934a07288cb83800d6bb14a38c6c12f397a925ad87ce3b745c6804db1ecee24f338685878c42604051600160a060020a039096168652602086019490945260408086019390935260608501919091521515608084015260a083019190915260c0909101905180910390a15050505050505050565b606481565b60005433600160a060020a03908116911614611bca57600080fd5b600160a060020a03166000908152600a60205260409020805460ff19166001179055565b60005433600160a060020a03908116911614611c0957600080fd5b8315611c3357600160a060020a0385166000908152600860205260409020805460ff191660011790555b8215611c5d57600160a060020a0385166000908152600960205260409020805460ff191660011790555b8115611cc457600454600160a060020a031663ee8cbc9d8660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611cb357600080fd5b5af11515611cc057600080fd5b5050505b8015611cee57600160a060020a0385166000908152600a60205260409020805460ff191660011790555b600654600160a060020a031663f50a26448660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611d3e57600080fd5b5af11515611d4b57600080fd5b5050506040518051905015611db757600654600160a060020a03166331aa91fc8660405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611daa57600080fd5b5af11515610b2e57600080fd5b5050505050565b60015460a060020a900460ff1681565b60005433600160a060020a03908116911614611de957600080fd5b611df161213c565b600554600160a060020a0316633b64e77e6040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515611e3057600080fd5b5af11515611e3d57600080fd5b5050600654600160a060020a03169050636252c1276040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515611e8057600080fd5b5af11515611e8d57600080fd5b5050600454600160a060020a0316905063c422293b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611ed057600080fd5b5af11515611edd57600080fd5b50505060405180515050601d805460ff19166001179055565b60a981565b601d5460009060ff161515611f0f57600080fd5b600160a060020a03331660009081526018602052604081205411611f3257600080fd5b50600160a060020a033381811660009081526018602052604080822080549290556015549193919091169163a9059cbb9184905160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611fa657600080fd5b5af11515611fb357600080fd5b50505060405180515050600454600160a060020a031663a24835d133826370a082318260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561201457600080fd5b5af1151561202157600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561206e57600080fd5b5af1151561207b57600080fd5b50505050565b635af2fee081565b600160a060020a03811660009081526008602052604081205460ff16806120c85750600160a060020a03821660009081526009602052604090205460ff165b806121365750600454600160a060020a0316632e2174058360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561211e57600080fd5b5af1151561212b57600080fd5b505050604051805190505b92915050565b60005433600160a060020a0390811691161461215757600080fd5b60015460a060020a900460ff161561216e57600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b635ad8a0e081565b600054600160a060020a031681565b600e54600160a060020a031681565b601c5481565b601154600160a060020a031681565b60195481565b600a6020526000908152604090205460ff1681565b68056bc75e2d6310000081565b60005433600160a060020a0390811691161461223e57600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600381565b60135481565b600554600160a060020a031681565b600654600160a060020a031681565b600d54600160a060020a031681565b60025481565b601254600160a060020a031681565b60005433600160a060020a039081169116146122d557600080fd5b601b54156122e257600080fd5b601b55565b600154600160a060020a031681565b60005433600160a060020a0390811691161461231157600080fd5b601c541561231e57600080fd5b601c55565b60015433600160a060020a0390811691161461233e57600080fd5b6000546001547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091600160a060020a039081169116604051600160a060020a039283168152911660208201526040908101905180910390a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b635ae089e081565b635ad9f26081565b60175481565b600f54600160a060020a031681565b6801158e460913d0000081565b600b6020526000908152604090205481565b60005433600160a060020a0390811691161461242957600080fd5b6002541580156124395750600354155b151561244457600080fd5b6000821180156124545750600081115b151561245f57600080fd5b600291909155600355565b601d5460ff1681565b601054600160a060020a031681565b60005433600160a060020a0390811691161461249d57600080fd5b600054600160a060020a03828116911614156124b857600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60035481565b635ae9c46081565b601b5481565b600454600160a060020a031681565b600160a060020a0333166000908152600b6020526040812054819061253090349061277a565b600160a060020a03331660009081526008602052604090205490915060ff16801561256357506702c68af0bb1400003410155b1561259b57635ad8a0e0421180159061258457506801158e460913d0000081115b1561259257600091506126a8565b600191506126a8565b600160a060020a03331660009081526009602052604090205460ff1680156125cc575068056bc75e2d631000003410155b156125fa57635ad8a0e04211801590612584575068a2a15d09519be0000081111561259257600091506126a8565b600454600160a060020a0316632e2174053360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561264a57600080fd5b5af1151561265757600080fd5b50505060405180519050801561267557506702c68af0bb1400003410155b156126a357635ad8a0e0421180159061258457506801158e460913d0000081111561259257600091506126a8565b600091505b5090565b60006126bc601b5460135461292e565b34116126ca57506001611815565b50600090565b600080806064635ad9f2604210156126eb576019915061272f565b635ae089e042101561270057600f915061272f565b635ae9c46042101561271557600a915061272f565b635af2fee042101561272a576005915061272f565b600091505b90939092509050565b6000828202831580612754575082848281151561275157fe5b04145b151561275c57fe5b9392505050565b600080828481151561277157fe5b04949350505050565b60008282018381101561275c57fe5b6000612795848461277a565b600454909150600160a060020a031663867904b4878360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156127ee57600080fd5b5af115156127fb57600080fd5b5050600554600160a060020a0316905063a78a651a868860405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b151561284f57600080fd5b5af1151561285c57600080fd5b5050505061286c6013548661277a565b601355600160a060020a0386166000908152600b6020526040902054612892908661277a565b600b600088600160a060020a0316600160a060020a03168152602001908152602001600020819055507f77cbff9b281bbc6839ce326b536ee9d11c49c42e936fe518d7c47d7296f73424868686868642604051600160a060020a039096168652602086019490945260408086019390935260608501919091521515608084015260a083019190915260c0909101905180910390a1505050505050565b60008183101561293a57fe5b50900390565b6004546000908190600160a060020a0316632e2174053360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561299557600080fd5b5af115156129a257600080fd5b50505060405180519050156129ba57600091506126a8565b600160a060020a03331660009081526008602052604090205460ff161580156129fc5750600160a060020a03331660009081526009602052604090205460ff16155b15612a0a57600091506126a8565b601554600160a060020a031663dd62ed3e333060405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515612a6257600080fd5b5af11515612a6f57600080fd5b505050604051805190509050601754811080612a975750601654612a956019548361277a565b115b15612aa557600091506126a8565b6001915050905600a165627a7a7230582000085a7c69db841a94328afc45904e3c776ec53cb5bb04a9f82263fff734cdc10029

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

000000000000000000000000b8c77482e45f1f44de1745f52c74426c631bdd520000000000000000000000000e8d6b471e332f140e7d9dbb99e5e3822f728da600000000000000000000000049db6ee4507132d1fdac92318e0e6150bf786728000000000000000000000000035611f47a13f3603109152952f0034c674959ba000000000000000000000000ba121eba02961b7fa53fafcbb53826e1acd5a472000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c30000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f300000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b90000000000000000000000005686508abbff20db6a582643280601ef53b58ddf000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b876040000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f

-----Decoded View---------------
Arg [0] : bnbTokenAddress (address): 0xB8c77482e45F1F44dE1745F52C74426C631bDD52
Arg [1] : tokenAddress (address): 0x0E8d6b471e332F140e7d9dbB99E5E3822F728DA6
Arg [2] : fundAddress (address): 0x49dB6EE4507132d1fdac92318e0E6150bf786728
Arg [3] : reservationFundAddress (address): 0x035611F47A13f3603109152952f0034C674959bA
Arg [4] : _bnbTokenWallet (address): 0xBa121ebA02961b7fA53fafcBb53826e1ACD5A472
Arg [5] : _referralTokenWallet (address): 0xF759CaE90459C72bB3668fcd8e674f9E1eb9C2C3
Arg [6] : _foundationTokenWallet (address): 0x9496DbBB9bC9fd78D4735b954569A54Fe2A0D9F3
Arg [7] : _advisorsTokenWallet (address): 0x11F21536f888dEF8c7d2C4785F3F70b3DDBCa1B9
Arg [8] : _companyTokenWallet (address): 0x5686508AbBFF20Db6A582643280601ef53B58DdF
Arg [9] : _reserveTokenWallet (address): 0xa1568c501E650c83337f8119b6276c0de4aABb0f
Arg [10] : _bountyTokenWallet (address): 0x73c2D67e4181aD1926B4B47b56D3d2C198b87604
Arg [11] : _owner (address): 0x5EaF0a37346Ff992199fbc4480c9ccc4137d9c1f

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 000000000000000000000000b8c77482e45f1f44de1745f52c74426c631bdd52
Arg [1] : 0000000000000000000000000e8d6b471e332f140e7d9dbb99e5e3822f728da6
Arg [2] : 00000000000000000000000049db6ee4507132d1fdac92318e0e6150bf786728
Arg [3] : 000000000000000000000000035611f47a13f3603109152952f0034c674959ba
Arg [4] : 000000000000000000000000ba121eba02961b7fa53fafcbb53826e1acd5a472
Arg [5] : 000000000000000000000000f759cae90459c72bb3668fcd8e674f9e1eb9c2c3
Arg [6] : 0000000000000000000000009496dbbb9bc9fd78d4735b954569a54fe2a0d9f3
Arg [7] : 00000000000000000000000011f21536f888def8c7d2c4785f3f70b3ddbca1b9
Arg [8] : 0000000000000000000000005686508abbff20db6a582643280601ef53b58ddf
Arg [9] : 000000000000000000000000a1568c501e650c83337f8119b6276c0de4aabb0f
Arg [10] : 00000000000000000000000073c2d67e4181ad1926b4b47b56d3d2c198b87604
Arg [11] : 0000000000000000000000005eaf0a37346ff992199fbc4480c9ccc4137d9c1f


Swarm Source

bzzr://00085a7c69db841a94328afc45904e3c776ec53cb5bb04a9f82263fff734cdc1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.