Contract 0x6808ed0a76aae9cfb0378296836cad53ec569b1f

Contract Overview

Balance:
0 Ether
TxHash Block Age From To Value [TxFee]
0x6ea9504d3420abec50ccbf0598c660795f222f5100d39974caa78048ed952c108602303200 days 7 hrs ago0x14a4e7f6e49c1d8e5c9c2295eda997761a3f370c IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.000024153
0x521636d8e7a201d89285f9926ded7c878776f72d80adbc1c25033fb6b60d42ef8590183201 days 8 hrs ago0x14a4e7f6e49c1d8e5c9c2295eda997761a3f370c IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.00014519
0x20dc2eae4daf2b2b6440c16f8e1466363918d82599c15d1f5c3a0f53191858028590172201 days 8 hrs ago0x9ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.0001451
0x50f266160de75bd8bf5eb7fb3ba6a35c15b20d8c99d5a31c38eb4cdfcae9d1018590098201 days 8 hrs ago0x9ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.00015518
0xd327fd0b9c065e76eecd3c938f4e427d0f82b9450e4bb50ac1969214bce0c6318590040201 days 8 hrs ago0x9ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.000031036
0x5ede07997a9a4d53fda79ac6c4042ee5676ab6a25fb32a4afef312c441e906df8587774201 days 13 hrs ago0x14a4e7f6e49c1d8e5c9c2295eda997761a3f370c IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.00008954
0x9b3af09ccb67878aacf86f5b2eb3cc248ed221f5bc0fb3c370d90b39e8ded9838587768201 days 13 hrs ago0x14a4e7f6e49c1d8e5c9c2295eda997761a3f370c IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.00011962
0x852459f410cc4c84eb599068f0dfd7abe4318c1a8a79ef212cc606afdf9c25638556607204 days 7 hrs ago0x9ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.000222645
0xeb9f49f7b2ffff804a6c6075d080133be1d1fa07673fe2b6ee3429c5b23fcf9f8556603204 days 7 hrs ago0x9ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d IN  0x6808ed0a76aae9cfb0378296836cad53ec569b1f0 Ether0.000220225
0x64340f822510edff173ed4791e2db8f774847ff4cb0c524b73ed45a6040e5e618556337204 days 7 hrs ago0x9ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d IN  Contract Creation0 Ether0.02622329
[ Download CSV Export 

Latest 5 internal transactions Internal Transactions as a result of Contract Execution

[ Download CSV Export 
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Verified Source Code for Contract 0x9930366c51bb6382f17a79e61eedec69e53d2850

Contract Name:
PollManagedFund

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.24;

// File: contracts/DateTime.sol

contract DateTime {
        /*
         *  Date and Time utilities for ethereum contracts
         *
         */
        struct _DateTime {
                uint16 year;
                uint8 month;
                uint8 day;
                uint8 hour;
                uint8 minute;
                uint8 second;
                uint8 weekday;
        }

        uint constant DAY_IN_SECONDS = 86400;
        uint constant YEAR_IN_SECONDS = 31536000;
        uint constant LEAP_YEAR_IN_SECONDS = 31622400;

        uint constant HOUR_IN_SECONDS = 3600;
        uint constant MINUTE_IN_SECONDS = 60;

        uint16 constant ORIGIN_YEAR = 1970;

        function isLeapYear(uint16 year) public pure returns (bool) {
                if (year % 4 != 0) {
                        return false;
                }
                if (year % 100 != 0) {
                        return true;
                }
                if (year % 400 != 0) {
                        return false;
                }
                return true;
        }

        function leapYearsBefore(uint year) public pure returns (uint) {
                year -= 1;
                return year / 4 - year / 100 + year / 400;
        }

        function getDaysInMonth(uint8 month, uint16 year) public pure returns (uint8) {
                if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                        return 31;
                }
                else if (month == 4 || month == 6 || month == 9 || month == 11) {
                        return 30;
                }
                else if (isLeapYear(year)) {
                        return 29;
                }
                else {
                        return 28;
                }
        }

        function parseTimestamp(uint timestamp) internal pure returns (_DateTime dt) {
                uint secondsAccountedFor = 0;
                uint buf;
                uint8 i;

                // Year
                dt.year = getYear(timestamp);
                buf = leapYearsBefore(dt.year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * buf;
                secondsAccountedFor += YEAR_IN_SECONDS * (dt.year - ORIGIN_YEAR - buf);

                // Month
                uint secondsInMonth;
                for (i = 1; i <= 12; i++) {
                        secondsInMonth = DAY_IN_SECONDS * getDaysInMonth(i, dt.year);
                        if (secondsInMonth + secondsAccountedFor > timestamp) {
                                dt.month = i;
                                break;
                        }
                        secondsAccountedFor += secondsInMonth;
                }

                // Day
                for (i = 1; i <= getDaysInMonth(dt.month, dt.year); i++) {
                        if (DAY_IN_SECONDS + secondsAccountedFor > timestamp) {
                                dt.day = i;
                                break;
                        }
                        secondsAccountedFor += DAY_IN_SECONDS;
                }

                // Hour
                dt.hour = getHour(timestamp);

                // Minute
                dt.minute = getMinute(timestamp);

                // Second
                dt.second = getSecond(timestamp);

                // Day of week.
                dt.weekday = getWeekday(timestamp);
        }

        function getYear(uint timestamp) public pure returns (uint16) {
                uint secondsAccountedFor = 0;
                uint16 year;
                uint numLeapYears;

                // Year
                year = uint16(ORIGIN_YEAR + timestamp / YEAR_IN_SECONDS);
                numLeapYears = leapYearsBefore(year) - leapYearsBefore(ORIGIN_YEAR);

                secondsAccountedFor += LEAP_YEAR_IN_SECONDS * numLeapYears;
                secondsAccountedFor += YEAR_IN_SECONDS * (year - ORIGIN_YEAR - numLeapYears);

                while (secondsAccountedFor > timestamp) {
                        if (isLeapYear(uint16(year - 1))) {
                                secondsAccountedFor -= LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                secondsAccountedFor -= YEAR_IN_SECONDS;
                        }
                        year -= 1;
                }
                return year;
        }

        function getMonth(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).month;
        }

        function getDay(uint timestamp) public pure returns (uint8) {
                return parseTimestamp(timestamp).day;
        }

        function getHour(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60 / 60) % 24);
        }

        function getMinute(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / 60) % 60);
        }

        function getSecond(uint timestamp) public pure returns (uint8) {
                return uint8(timestamp % 60);
        }

        function getWeekday(uint timestamp) public pure returns (uint8) {
                return uint8((timestamp / DAY_IN_SECONDS + 4) % 7);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, 0, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, 0, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute) public pure returns (uint timestamp) {
                return toTimestamp(year, month, day, hour, minute, 0);
        }

        function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) {
                uint16 i;

                // Year
                for (i = ORIGIN_YEAR; i < year; i++) {
                        if (isLeapYear(i)) {
                                timestamp += LEAP_YEAR_IN_SECONDS;
                        }
                        else {
                                timestamp += YEAR_IN_SECONDS;
                        }
                }

                // Month
                uint8[12] memory monthDayCounts;
                monthDayCounts[0] = 31;
                if (isLeapYear(year)) {
                        monthDayCounts[1] = 29;
                }
                else {
                        monthDayCounts[1] = 28;
                }
                monthDayCounts[2] = 31;
                monthDayCounts[3] = 30;
                monthDayCounts[4] = 31;
                monthDayCounts[5] = 30;
                monthDayCounts[6] = 31;
                monthDayCounts[7] = 31;
                monthDayCounts[8] = 30;
                monthDayCounts[9] = 31;
                monthDayCounts[10] = 30;
                monthDayCounts[11] = 31;

                for (i = 1; i < month; i++) {
                        timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1];
                }

                // Day
                timestamp += DAY_IN_SECONDS * (day - 1);

                // Hour
                timestamp += HOUR_IN_SECONDS * (hour);

                // Minute
                timestamp += MINUTE_IN_SECONDS * (minute);

                // Second
                timestamp += second;

                return timestamp;
        }
}

// File: contracts/ISimpleCrowdsale.sol

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

// 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 succesful crowdsale
	*/	
	function onCrowdsaleEnd() external;
	/**
	* @dev function is called if crowdsale failed to reach soft cap
	*/
	function enableCrowdsaleRefund() external;
}

// File: contracts/math/SafeMath.sol

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

contract SafeMath {

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

    c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) {
    return a / b;
  }

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

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


// 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
     */
    constructor() 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;
        emit SetOwners(_owners);
    }

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

// 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); //Get the account balance of another account with address _owner
	function transfer(address _to, uint256 _value) public returns (bool success); //Send _value amount of tokens to address _to
	function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); //Send _value amount of tokens from address _from to address _to
	function approve(address _spender, uint256 _value) public returns (bool success); //Allow _spender to withdraw from your account, multiple times, up to the _value amount. If this function is called again it overwrites the current allowance with _value.
	function allowance(address _owner, address _spender) public constant returns (uint256 remaining); //Returns the amount which _spender is still allowed to withdraw from _owner

	event Transfer(address indexed _from, address indexed _to, uint256 _value); // Triggered when tokens are transferred.
	event Approval(address indexed _owner, address indexed _spender, uint256 _value); //Triggered whenever approve(address _spender, uint256 _value) is called.
}

// File: contracts/token/ERC20Token.sol

/**
 * @title ERC20Token - erc20 base implementation
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */

contract ERC20Token is IERC20Token, SafeMath{
	string public name;
	string public symbol;
	uint8 public decimals;
	uint256 public totalSupply;
	
	mapping (address => uint256) public balances;
	mapping (address => mapping (address => uint256)) public allowed;

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

		balances[msg.sender] = safeSub(balances[msg.sender], _value);
		balances[_to] = safeAdd(balances[_to], _value);
		emit 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);
	}

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

  	function approve(address _spender, uint256 _value) public returns (bool) {
  		allowed[msg.sender][_spender] = _value;
  		emit 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
     */
    constructor(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;
        emit 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);
        emit Issue(_to, _value);
        emit 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);
        emit Transfer(_from, address(0), _value);
        emit 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);
        emit 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);
        }
        emit 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;
        emit IssuanceFinished();
        return true;
    }
}

// File: contracts/Fund.sol

contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable {
	enum FundState {
		Crowdsale,
		CrowdsaleRefund,
		TeamWithdraw,
		Refund
	}

	FundState public state = FundState.Crowdsale;
	ManagedToken public token;

	uint256 public INITIAL_TAP = 0;

	address public teamWallet;
	uint256 public crowdsaleEndDate;

	address public companyTokenWallet;
	address public advisorTokenWallet;
    address public platformTokenWallet;
	address public lockedTokenAddress;
	address public refundManager;

	uint256 public tap;
	uint256 public lastWithdrawTime = 0;
	uint256 public firstWithdrawAmount = 0;
	
	address public crowdsaleAddress;
	mapping(address => uint256) public contributions;

	event RefundContributor(address tokenHolder, uint256 amountWei, uint256 timestamp);
	event RefundHolder(address tokenHolder, uint256 amountWei, uint256 tokenAmount, uint256 timestamp);
	event Withdraw(uint256 amountWei, uint256 timestamp);
	event RefundEnabled(address initiatorAddress);

	/**
     * @dev Fund constructor
     * @param _teamWallet Withdraw functions transfers ether to this address
     * @param _companyTokenWallet Company wallet address
     * @param _advisorTokenWallet Advisor wallet address
     * @param _platformTokenWallet platform wallet address
     * @param _owners Contract owners
     */
    constructor(
    	address _teamWallet,
        address _companyTokenWallet,
        address _advisorTokenWallet,
        address _platformTokenWallet,
        address _refundManager,
        address[] _owners
    ) public {
    	teamWallet = _teamWallet;
    	companyTokenWallet = _companyTokenWallet;
    	advisorTokenWallet = _advisorTokenWallet;
        platformTokenWallet = _platformTokenWallet;
    	refundManager = _refundManager;
    	_setOwners(_owners);
    }

    /**
     * @dev set initial tap
     */
    

    modifier withdrawEnabled() {
    	require(canWithdraw());
    	_;
    }

    modifier onlyCrowdsale() {
    	require(msg.sender == crowdsaleAddress);
    	_;
    }

    function canWithdraw() public returns(bool);

    function setCrowdsaleAddress(address _crowdsaleAddress) public onlyOwner{
    	require(crowdsaleAddress == address(0));
    	crowdsaleAddress = _crowdsaleAddress;
    }

    function setTokenAddress(address _tokenAddress) public onlyOwner {
    require(address(token) == address(0));
    token = ManagedToken(_tokenAddress);
    }

    function setLockedTokenAddress(address _lockedTokenAddress) public onlyOwner {
    	require(address(lockedTokenAddress) == address(0));
    	lockedTokenAddress = _lockedTokenAddress;
    }


    /**
     * @dev Process crowdsale contribution
     */
    function processContribution(address contributor) external payable onlyCrowdsale {
    	require(state == FundState.Crowdsale);
    	uint256 totalContribution = safeAdd(contributions[contributor], msg.value);
    	contributions[contributor] = totalContribution;
    }

    /**
     * @dev callback is called after crowdsale finalization if soft cap is reached
     */
    function onCrowdsaleEnd() external onlyCrowdsale {
    	state = FundState.TeamWithdraw;
    	ISimpleCrowdsale crowdsale = ISimpleCrowdsale(crowdsaleAddress);
    	firstWithdrawAmount = safeDiv(crowdsale.getSoftCap(), 2); // withdraw softcap by 1/2
    	lastWithdrawTime = now;
    	tap = INITIAL_TAP;
    	crowdsaleEndDate = now;
    }

    /**
     * @dev Callback is called after crowdsale finalization if soft cap is not reached
     */
    function enableCrowdsaleRefund() external onlyCrowdsale {
    	require(state == FundState.Crowdsale);
    	state = FundState.CrowdsaleRefund;
    }

    /**
     * @dev function is called by contributor to refund payments if crowdsale failed to reach soft cap
     */
    function refundCrowdsaleContributor() external {
    	require(state == FundState.CrowdsaleRefund);
    	require(contributions[msg.sender] > 0);
    	
    	uint256 refundAmount = contributions[msg.sender];
    	contributions[msg.sender] = 0;
    	token.destroy(msg.sender, token.balanceOf(msg.sender));
    	msg.sender.transfer(refundAmount);
    	emit RefundContributor(msg.sender, refundAmount, now);
    }

    /**
     * @dev function is called by owner to refund payments if crowdsale failed to reach soft cap
     */
    function autoRefundCrowdsaleContrigutor(address contributorAddress) external{
    	require(ownerByAddress[msg.sender] == true || msg.sender == refundManager);
    	require(state == FundState.CrowdsaleRefund);
    	require(contributions[contributorAddress] > 0);

    	uint256 refundAmount = contributions[contributorAddress];
    	contributions[contributorAddress] = 0;
    	token.destroy(contributorAddress, token.balanceOf(contributorAddress));
    	contributorAddress.transfer(refundAmount);
    	emit RefundContributor(contributorAddress, refundAmount, now);
    }

    /**
     * @dev Decrease tap amount
     * @param _tap New tap value
     */
    function decTap(uint256 _tap) external onlyOwner {
    	require(state == FundState.TeamWithdraw);
    	require(_tap < tap);
    	tap = _tap;
    }

    function getCurrentTapAmount() public constant returns(uint256) {
    	if(state !=FundState.TeamWithdraw){
    		return 0;
    	}
    	return calcTapAmount();
    }

    function calcTapAmount() internal view returns(uint256) {
    	uint256 amount = safeMul(safeSub(now, lastWithdrawTime), tap);
    	if (address(this).balance < amount) {
    		amount = address(this).balance;
    	}
    	return amount;
    }

    function firstWithdraw() public onlyOwner withdrawEnabled{
    	require(firstWithdrawAmount > 0);
    	uint256 amount = firstWithdrawAmount;
    	firstWithdrawAmount = 0; //초기화
    	teamWallet.transfer(amount);
    	emit Withdraw(amount, now);
    }

    /**
     * @dev Withdraw tap amount
     */
    function withdraw() public onlyOwner withdrawEnabled {
    	require(state == FundState.TeamWithdraw);
    	uint256 amount = calcTapAmount();
    	lastWithdrawTime = now;
    	teamWallet.transfer(amount);
    	emit Withdraw(amount, now);
    } 

    //Refund
    /**
     * @dev Called to start refunding
     */
    function enableRefund() internal {
    	require(state == FundState. TeamWithdraw);
    	state = FundState.Refund;
    	token.destroy(lockedTokenAddress, token.balanceOf(lockedTokenAddress));
    	token.destroy(companyTokenWallet, token.balanceOf(companyTokenWallet));
    	token.destroy(advisorTokenWallet, token.balanceOf(advisorTokenWallet));
    	token.destroy(platformTokenWallet, token.balanceOf(platformTokenWallet));
        emit RefundEnabled(msg.sender);
    }

    /**
     * @dev function is called by contributor to refund
     * buy user tokens for refundTokenPrice and destroy them
     */
     function refundTokenholder() public {
     	require(state == FundState.Refund);

     	uint256 tokenBalance = token.balanceOf(msg.sender);
     	require(tokenBalance > 0);
     	uint256 refundAmount = safeDiv(safeMul(tokenBalance, address(this).balance), token.totalSupply());
     	require(refundAmount > 0);

     	token.destroy(msg.sender, tokenBalance);
     	msg.sender.transfer(refundAmount);

     	emit RefundHolder(msg.sender, refundAmount, tokenBalance, now);
     }
}

// File: contracts/fund/IPollManagedFund.sol

/**
 * @title IPollManagedFund
 * @dev Fund callbacks used by polling contracts
 */
interface IPollManagedFund{
	/**
	 * @dev TapPoll callback
	 * @param agree True if new tap value is accepted by majority of contributors
	 * @param _tap New tap value
	 */
	function onTapPollFinish(bool agree, uint256 _tap) external;

	/**
	 * @dev RefundPoll callback
	 * @param agree True if contributors decided to allow refunding
	 */
	function onRefundPollFinish(bool agree) external;
}

// File: contracts/poll/BasePoll.sol


/**
 * @title BasePoll
 * @dev Abstract base class for polling contracts
 */
 contract BasePoll is SafeMath {
 	struct Vote {
 		uint256 time;
 		uint256 weight;
 		bool agree;
 	}

 	uint256 public constant MAX_TOKEN_WEIGHT_DENOM = 1000; // customizing 0.1 rule

 	IERC20Token public token;
 	address public fundAddress;

 	uint256 public startTime;
 	uint256 public endTime;
 	bool checkTransferAfterEnd;

 	uint256 public yesCounter = 0;
 	uint256 public noCounter = 0;
 	uint256 public totlaVoted = 0;

 	bool public finalized;
 	mapping(address => Vote) public votesByAddress;

 	modifier checkTime() {
 		require(now >= startTime && now <= endTime);
 		_;
 	}
 	
 	modifier notFinalized() {
 	    require(!finalized);
 	    _;
 	}

 	/**
 	 * @dev BasePoll ooncstructor
 	 * param _tokenAddress ERC20 compatible token contract address
 	 * param _fundAddress Fund contract address
 	 * param _startTime Poll start time
 	 * param _endTime Poll end time
 	 */
 	constructor (address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime, bool _checkTransferAfterEnd) public {
 		require(_tokenAddress !=address(0));
 		require(_startTime >= now && _endTime >startTime);

 		token = IERC20Token(_tokenAddress);
 		fundAddress = _fundAddress;
 		startTime = _startTime;
 		endTime = _endTime;
 		finalized = false;
 		checkTransferAfterEnd = _checkTransferAfterEnd;
    }

 	/**
 	 * @dev Process user's vote
 	 * param agree True if user endorses the proposal else False
 	 */
 	function vote(bool agree) public checkTime{
 		require(votesByAddress[msg.sender].time == 0);

 		uint256 voiceWeight = token.balanceOf(msg.sender);
 		uint256 maxVoiceWeight; //customizing 0.1 rule
 		voiceWeight = voiceWeight <= maxVoiceWeight ? voiceWeight : maxVoiceWeight;

 		if(agree){
 			yesCounter = safeAdd(yesCounter, voiceWeight);
 		} else {
 			noCounter = safeAdd(noCounter, voiceWeight);
 		}

 		votesByAddress[msg.sender].time = now;
 		votesByAddress[msg.sender].weight = voiceWeight;
 		votesByAddress[msg.sender].agree = agree;

 		totlaVoted = safeAdd(totlaVoted,1);
 	}

 	/** 
 	 * @dev Revoke user's vote
	 */
	function revokeVote() public checkTime{
		require(votesByAddress[msg.sender].time > 0);

		uint256 voiceWeight = votesByAddress[msg.sender].weight;
		bool agree = votesByAddress[msg.sender].agree;

		votesByAddress[msg.sender].time = 0;
		votesByAddress[msg.sender].weight = 0;
		votesByAddress[msg.sender].agree = false;

		totlaVoted = safeSub(totlaVoted, 1);
		if(agree) {
			yesCounter = safeSub(yesCounter, voiceWeight);
		} else {
			noCounter = safeSub(noCounter, voiceWeight);
		}
	}

	/**
	 * @dev function is called after token transfer from user's wallet to check and correct user's vote
	 */
	function onTokenTransfer(address tokenHolder, uint256 amount) public {
		require(msg.sender == fundAddress);
		if(votesByAddress[tokenHolder].time == 0) {
			return;
		}
		if(!checkTransferAfterEnd) {
			if(finalized || (now < startTime || now > endTime)){
				return;
			}
		}

		// need customizing 0.1rule
		if(token.balanceOf(tokenHolder) >= votesByAddress[tokenHolder].weight) {
			return;
		}
		uint256 voiceWeight = amount;
		if(amount > votesByAddress[tokenHolder].weight) {
			voiceWeight = votesByAddress[tokenHolder].weight;
		}


		if(votesByAddress[tokenHolder].agree) {
			yesCounter = safeSub(yesCounter, voiceWeight);
		} else {
			noCounter = safeSub(noCounter, voiceWeight);
		}
		votesByAddress[tokenHolder].weight = safeSub(votesByAddress[tokenHolder].weight, voiceWeight);
	}

	/**
	 * Finalize poll and call onPollFinish callback with result
	 */
	function tryToFinalize() public notFinalized returns(bool) {
		if(now < endTime) {
			return false;
		}
		finalized = true;
		onPollFinish(isSubjectApproved());
		return true;
	}

	function isNowApproved() public view returns(bool) {
		return isSubjectApproved();
	}

	function isSubjectApproved() internal view returns(bool) {
		return yesCounter > noCounter;
	}

	/**
	 * @dev callback called after poll finalization
	 */
	function onPollFinish(bool agree) internal;
 }

// File: contracts/RefundPoll.sol

/**
 * @title RefundPoll
 * @dev Enables fund refund mode
 */
contract RefundPoll is BasePoll{
	uint256 public holdEndTime = 0;

	/**
	 * RefundPoll constructor
	 * @param _tokenAddress ERC20 compatible token contract address
	 * @param _fundAddress Fund contract address
	 * @param _startTime Poll start time
	 * @param _endTime Poll end time
	 */
	constructor (
		address _tokenAddress,
		address _fundAddress,
		uint256 _startTime,
		uint256 _endTime,
		uint256 _holdEndTime,
		bool _checkTransferAfterEnd
	) public BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, _checkTransferAfterEnd)
	{
		holdEndTime = _holdEndTime;
	}

	function tryToFinalize() public returns(bool) {
		if(holdEndTime > 0 && holdEndTime > endTime) {
			require(now >= holdEndTime);
		} else {
			require(now >= endTime);
		}

		finalized = true;
		onPollFinish(isSubjectApproved());
		return true;
	}

	function isSubjectApproved() internal view returns(bool){
		return yesCounter > noCounter && yesCounter >= safeDiv(token.totalSupply(), 3); //policy issue
	}

	function onPollFinish(bool agree) internal {
		IPollManagedFund fund = IPollManagedFund(fundAddress);
		fund.onRefundPollFinish(agree);
	}
}


// File: contracts/TapPoll.sol

/**
 * @title TapPoll
 * @dev Poll to increase tap amount
 */

contract TapPoll is BasePoll {
	uint256 public tap;
	uint256 public minTokensPerc = 0;

	/**
	 * TapPoll constructor
	 * @param _tap new tap value
	 * @param _tokenAddress ERC20 compatible token contract address
	 * @param _fundAddress Fund contract address
	 * @param _startTime Poll start time
	 * @param _endTime Poll end time
	 * @param _minTokensPerc Min percent of tokens from totalsupply where poll is considered to be fulfilled
	 */
	constructor(
		uint256 _tap,
		address _tokenAddress,
		address _fundAddress,
		uint256 _startTime,
		uint256 _endTime,
		uint256 _minTokensPerc
	) public BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false)
	{
		tap = _tap;
		minTokensPerc = _minTokensPerc;
	}

	function onPollFinish(bool agree) internal {
		IPollManagedFund fund = IPollManagedFund(fundAddress);
		fund.onTapPollFinish(agree, tap);
	}

	function getVotedTokensPerc() public view returns(uint256) {
		return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply());
	}

	function isSubjectApproved() internal view returns(bool) {
		return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc;
	}
}

// File: contracts/PollManagedFund.sol

/**
 * @title PollManagedFund
 * @dev fund controlled by contract owner
 */
contract PollManagedFund is Fund, DateTime, ITokenEventListener {
	uint256 public constant TAP_POLL_DURATION = 3 days;
	uint256 public constant REFUND_POLL_DURATION = 7 days;
	uint256 public constant MAX_VOTED_TOKEN_PERC = 10;

	TapPoll public tapPoll;
	RefundPoll public refundPoll;

	uint256 public minVotedTokensPerc = 0;
	uint256 public secondRefundPollDate = 0;
	bool public isWithdrawEnabled = true;

	uint256[] public refundPollDates = [0];

	modifier onlyTokenHolder() {
		require(token.balanceOf(msg.sender) > 0);
		_;
	}

    event CreatePollManagedFundContract();
	event TapPollCreated();
	event TapPollFinished(bool approved, uint256 _tap);
	event RefundPollCreated();
	event RefundPollFinished(bool approved);

	/**
	 * @dev PollManagedFund constructor
	 * params as Fund constructor
	 */
	constructor(
		address _teamWallet,
        address _companyTokenWallet,
        address _advisorTokenWallet,
        address _platformTokenWallet,
        address _refundManager,
        address[] _owners
	) public
	Fund(_teamWallet, _companyTokenWallet, _advisorTokenWallet, _platformTokenWallet, _refundManager, _owners)
	{
	    emit CreatePollManagedFundContract();
	}

	function setRefundPollDate(uint16 year, uint8 month, uint8 day, uint8 hour) public {
		require(refundPollDates[0] == 0);
		uint firstPollDate = toTimestamp(year, month, day, hour);
		refundPollDates = [
			firstPollDate,
			firstPollDate + 12 weeks,
			firstPollDate + 24 weeks,
			firstPollDate + 36 weeks,
			firstPollDate + 48 weeks,
			firstPollDate + 60 weeks
		];

	}

	function canWithdraw() public returns(bool){
		if(
			address(refundPoll) != address(0) &&
			!refundPoll.finalized() &&
			refundPoll.holdEndTime() > 0 &&
			now >= refundPoll.holdEndTime() &&
			refundPoll.isNowApproved()
		) {
			return false;
		}
		return isWithdrawEnabled;
	}

	/**
	 * @dev ITokenEventListener implementation. Notify active poll contracts about token transfers
	 */
	function onTokenTransfer(address _from, address /*to*/,uint256 _value) external {
		require(msg.sender == address(token));
		if(address(tapPoll) != address(0) && !tapPoll.finalized()) {
			tapPoll.onTokenTransfer(_from, _value);
		}
		if(address(refundPoll) != address(0) && !refundPoll.finalized()) {
			refundPoll.onTokenTransfer(_from, _value);
		}
	}

	/**
	 * @dev Update minVotedTokensPerc value after tap Poll
	 * set new value == 50% from current voted tokens amount
	 */
	function updateMinVotedTokens(uint256 _minVotedTokenPerc) internal {
		uint256 newPerc = safeDiv(_minVotedTokenPerc, 2);
		if(newPerc > MAX_VOTED_TOKEN_PERC){
			minVotedTokensPerc = MAX_VOTED_TOKEN_PERC;
			return;
		}
		minVotedTokensPerc = newPerc;
	}

	//Tap Poll
	function createTapPoll(uint8 tapInPerc) public onlyOwner {
		require(state == FundState.TeamWithdraw);
		require(tapPoll == address(0));
		require(getDay(now) == 10);
		require(tapInPerc <= 50);
		uint256 _tap = safeAdd(tap, safeMul(safeDiv(tap,tapInPerc), 100));
		uint256 startTime = now;
		uint256 endTime = startTime + TAP_POLL_DURATION;
		tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc);
		emit TapPollCreated();
	}

	function onTapPollFinish(bool agree, uint256 _tap) external {
		require(msg.sender == address(tapPoll) && tapPoll.finalized());
		if(agree) {
			withdraw();
			tap = _tap;
		}
		updateMinVotedTokens(tapPoll.getVotedTokensPerc());
		emit TapPollFinished(agree, _tap);
		delete tapPoll;
	}

	//Refund poll
	function checkRefundPollDate() internal view returns(bool) {
		if(secondRefundPollDate > 0 && now >= secondRefundPollDate && now <= safeAdd(secondRefundPollDate, 1 days)) {
			return true;
		}

		for(uint i; i < refundPollDates.length; i++){
			if(now >= refundPollDates[i] && now <= safeAdd(refundPollDates[i], 1 days)){
				return true;
			}
		}

		return false;
	}

	function createReFundPoll() public onlyTokenHolder {
		require(state == FundState.TeamWithdraw);
		require(address(refundPoll) == address(0));
		require(checkRefundPollDate());

		if(secondRefundPollDate > 0 && now > safeAdd(secondRefundPollDate, 1 days)){
			secondRefundPollDate = 0;
		}
		
		uint256 startTime = now;
		uint256 endTime = startTime + REFUND_POLL_DURATION;
		bool isFirstRefund = (secondRefundPollDate == 0);
		uint256 holdEndTime = 0;

		if(isFirstRefund) {
			holdEndTime = toTimestamp(
				getYear(startTime),
				getMonth(startTime) +1,
				1
			);
		}
		refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund);
		emit RefundPollCreated();
	}

	function onRefundPollFinish(bool agree) external {
		require(msg.sender == address(refundPoll) && refundPoll.finalized());
		if(agree) {
			if(secondRefundPollDate > 0) {
				enableRefund();
			} else {
				uint256 startTime = refundPoll.startTime();
				secondRefundPollDate = toTimestamp(
					getYear(startTime),
					getMonth(startTime) +2,
					1
				);
				isWithdrawEnabled =false;
			}
		} else {
			secondRefundPollDate = 0;
			isWithdrawEnabled = true;
		}
		emit RefundPollFinished(agree);

		delete refundPoll;
	}

	function forceRefund() public{
		require(msg.sender == refundManager);
		enableRefund();
	}
}

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"owners","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tapInPerc","type":"uint8"}],"name":"createTapPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TAP_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"REFUND_POLL_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_crowdsaleAddress","type":"address"}],"name":"setCrowdsaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddress","type":"address"}],"name":"setTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"firstWithdrawAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"},{"name":"_tap","type":"uint256"}],"name":"onTapPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"setRefundPollDate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"crowdsaleAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createReFundPoll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tap","type":"uint256"}],"name":"decTap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableCrowdsaleRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getHour","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getWeekday","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"teamWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"refundPollDates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"onCrowdsaleEnd","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getDay","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"","type":"address"},{"name":"_value","type":"uint256"}],"name":"onTokenTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"platformTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentTapAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lockedTokenAddress","type":"address"}],"name":"setLockedTokenAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"contributorAddress","type":"address"}],"name":"autoRefundCrowdsaleContrigutor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"refundTokenholder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minVotedTokensPerc","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundManager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isWithdrawEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"agree","type":"bool"}],"name":"onRefundPollFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getSecond","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TAP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"},{"name":"month","type":"uint8"},{"name":"day","type":"uint8"},{"name":"hour","type":"uint8"},{"name":"minute","type":"uint8"},{"name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getYear","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTED_TOKEN_PERC","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"lockedTokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"contributor","type":"address"}],"name":"processContribution","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lastWithdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"year","type":"uint256"}],"name":"leapYearsBefore","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"month","type":"uint8"},{"name":"year","type":"uint16"}],"name":"getDaysInMonth","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondRefundPollDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"canWithdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"forceRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advisorTokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tapPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refundPoll","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"firstWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"ownerByAddress","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":"_owners","type":"address[]"}],"name":"setOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"timestamp","type":"uint256"}],"name":"getMinute","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refundCrowdsaleContributor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_teamWallet","type":"address"},{"name":"_companyTokenWallet","type":"address"},{"name":"_advisorTokenWallet","type":"address"},{"name":"_platformTokenWallet","type":"address"},{"name":"_refundManager","type":"address"},{"name":"_owners","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"CreatePollManagedFundContract","type":"event"},{"anonymous":false,"inputs":[],"name":"TapPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"},{"indexed":false,"name":"_tap","type":"uint256"}],"name":"TapPollFinished","type":"event"},{"anonymous":false,"inputs":[],"name":"RefundPollCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"approved","type":"bool"}],"name":"RefundPollFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundContributor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenHolder","type":"address"},{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"tokenAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"RefundHolder","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amountWei","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"initiatorAddress","type":"address"}],"name":"RefundEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owners","type":"address[]"}],"name":"SetOwners","type":"event"}]

Contract Creation Code

6003805460ff1990811690915560006004819055600d819055600e8190556013819055601481905560158054909216600190811790925560a060405260809081526200004f9160169190620002a2565b503480156200005d57600080fd5b5060405162004c0e38038062004c0e83398101604090815281516020830151918301516060840151608085015160a08601516000805433600160a060020a031991821617909155600580548216600160a060020a0380891691909117909155600780548316828a16179055600880548316828816179055600980548316828716179055600b805490921690841617905593959293919290910185858585858562000110816401000000006200014c810204565b50506040517f95da10c18b6b699c0bbc87da5a19c8bf3b463130b63c3caeca69e7834fdd9135945060009350915050a1505050505050620003a4565b6000805b600154821015620001b2576000600260006001858154811015156200017157fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062000150565b5060005b825181101562000210576001600260008584815181101515620001d557fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101620001b6565b825162000225906001906020860190620002f7565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb836040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156200028a57818101518382015260200162000270565b505050509050019250505060405180910390a1505050565b828054828255906000526020600020908101928215620002e5579160200282015b82811115620002e5578251829060ff16905591602001919060010190620002c3565b50620002f39291506200035d565b5090565b8280548282559060005260206000209081019282156200034f579160200282015b828111156200034f5782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019062000318565b50620002f39291506200037d565b6200037a91905b80821115620002f3576000815560010162000364565b90565b6200037a91905b80821115620002f3578054600160a060020a031916815560010162000384565b61485a80620003b46000396000f3006080604052600436106200031d5763ffffffff60e060020a600035041663025e7c27811462000322578063026eca12146200035957806302fc28c4146200037957806308867fc214620003a3578063192f107614620003bb5780631f35bc4014620003d357806326a4e8d214620003f757806326b52faf146200041b57806329c90b6314620004335780632d5aad17146200045357806331d2f891146200048457806332601a14146200049c57806336e61cf714620004b45780633b64e77e14620004cf5780633ccfd60b14620004e75780633e239e1a14620004ff57806342e94c901462000530578063481c6a7514620005545780634ac1ad78146200056c5780635992704414620005875780635f583846146200059f5780636252c12714620005ba57806362ba968714620005d257806365c728401462000609578063677ba3d31462000624578063688ce4571462000651578063774a97cf14620006695780637ddbf0ed14620006815780637f17833c14620006a55780637f79183314620006c957806382aebbab14620006fa57806384219204146200071257806387174c3e146200072a578063880dc4e6146200074257806389ea2cb7146200076e5780638aa001fc146200078b5780638c8d98a014620007a65780639054bbb614620007d15780639054bdec14620007e957806392d663131462000826578063962c9c8d1462000858578063a0e67e2b1462000870578063a324ad2414620008da578063a666ff3c14620008f5578063a6f0e577146200090d578063a78a651a146200092c578063ab2315111462000942578063b1999937146200095a578063b238ad0e1462000975578063b465e52f146200099a578063b51459fe14620009b2578063bd7427f814620009ca578063c19d93fb14620009e2578063c5f5ce211462000a1f578063cae6b9c51462000a37578063d66f146d1462000a4f578063e9b5a2f71462000a67578063eb6b192f1462000a7f578063f190a7931462000aa3578063fa4d36981462000abb578063fa93f8831462000b13578063fc0c546a1462000b2e578063fd2210311462000b46578063ff01ffa81462000b5e575b600080fd5b3480156200032f57600080fd5b506200033d60043562000b76565b60408051600160a060020a039092168252519081900360200190f35b3480156200036657600080fd5b506200037760ff6004351662000b9f565b005b3480156200038657600080fd5b506200039162000d2c565b60408051918252519081900360200190f35b348015620003b057600080fd5b506200039162000d33565b348015620003c857600080fd5b506200039162000d3a565b348015620003e057600080fd5b5062000377600160a060020a036004351662000d40565b3480156200040457600080fd5b5062000377600160a060020a036004351662000d9b565b3480156200042857600080fd5b506200039162000e0e565b3480156200044057600080fd5b5062000377600435151560243562000e14565b3480156200046057600080fd5b506200037761ffff6004351660ff6024358116906044358116906064351662000fb8565b3480156200049157600080fd5b506200033d62001056565b348015620004a957600080fd5b506200037762001065565b348015620004c157600080fd5b506200037760043562001297565b348015620004dc57600080fd5b5062000377620012ec565b348015620004f457600080fd5b506200037762001332565b3480156200050c57600080fd5b506200051a60043562001411565b6040805160ff9092168252519081900360200190f35b3480156200053d57600080fd5b5062000391600160a060020a03600435166200142f565b3480156200056157600080fd5b506200033d62001441565b3480156200057957600080fd5b506200051a60043562001450565b3480156200059457600080fd5b506200033d62001463565b348015620005ac57600080fd5b506200039160043562001472565b348015620005c757600080fd5b506200037762001492565b348015620005df57600080fd5b506200039161ffff6004351660ff602435811690604435811690606435811690608435166200156e565b3480156200061657600080fd5b506200051a6004356200158b565b3480156200063157600080fd5b5062000377600160a060020a0360043581169060243516604435620015a2565b3480156200065e57600080fd5b506200033d62001816565b3480156200067657600080fd5b506200039162001825565b3480156200068e57600080fd5b5062000377600160a060020a03600435166200185a565b348015620006b257600080fd5b5062000377600160a060020a0360043516620018b5565b348015620006d657600080fd5b506200039161ffff6004351660ff6024358116906044358116906064351662001ac3565b3480156200070757600080fd5b506200037762001adf565b3480156200071f57600080fd5b506200039162001d3f565b3480156200073757600080fd5b506200033d62001d45565b3480156200074f57600080fd5b506200075a62001d54565b604080519115158252519081900360200190f35b3480156200077b57600080fd5b5062000377600435151562001d5d565b3480156200079857600080fd5b506200051a60043562001f41565b348015620007b357600080fd5b506200039161ffff6004351660ff6024358116906044351662001f4c565b348015620007de57600080fd5b506200039162001f68565b348015620007f657600080fd5b506200039161ffff6004351660ff60243581169060443581169060643581169060843581169060a4351662001f6e565b3480156200083357600080fd5b5062000841600435620020c3565b6040805161ffff9092168252519081900360200190f35b3480156200086557600080fd5b50620003916200215d565b3480156200087d57600080fd5b506200088862002162565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015620008c6578181015183820152602001620008ac565b505050509050019250505060405180910390f35b348015620008e757600080fd5b506200051a600435620021c6565b3480156200090257600080fd5b506200033d620021dd565b3480156200091a57600080fd5b506200075a61ffff60043516620021ec565b62000377600160a060020a036004351662002240565b3480156200094f57600080fd5b5062000391620022bf565b3480156200096757600080fd5b5062000391600435620022c5565b3480156200098257600080fd5b506200051a60ff6004351661ffff60243516620022e0565b348015620009a757600080fd5b5062000391620023b9565b348015620009bf57600080fd5b506200075a620023bf565b348015620009d757600080fd5b506200037762002626565b348015620009ef57600080fd5b50620009fa6200264a565b6040518082600381111562000a0b57fe5b60ff16815260200191505060405180910390f35b34801562000a2c57600080fd5b506200033d62002653565b34801562000a4457600080fd5b506200033d62002662565b34801562000a5c57600080fd5b506200033d62002671565b34801562000a7457600080fd5b506200037762002680565b34801562000a8c57600080fd5b506200075a600160a060020a03600435166200270f565b34801562000ab057600080fd5b506200033d62002724565b34801562000ac857600080fd5b50604080516020600480358082013583810280860185019096528085526200037795369593946024949385019291829185019084908082843750949750620027339650505050505050565b34801562000b2057600080fd5b506200051a60043562002759565b34801562000b3b57600080fd5b506200033d62002765565b34801562000b5357600080fd5b506200039162002779565b34801562000b6b57600080fd5b50620003776200277f565b600180548290811062000b8557fe5b600091825260209091200154600160a060020a0316905081565b336000908152600260205260408120548190819060ff16151560011462000bc557600080fd5b60026003805460ff169081111562000bd957fe5b1462000be457600080fd5b601154600160a060020a03161562000bfb57600080fd5b62000c06426200158b565b60ff16600a14151562000c1857600080fd5b603260ff8516111562000c2a57600080fd5b62000c54600c5462000c4e62000c46600c548860ff1662002935565b60646200294b565b62002978565b92504291506203f4808201905082600360019054906101000a9004600160a060020a031630848460135462000c88620031c6565b958652600160a060020a039485166020870152929093166040808601919091526060850191909152608084019290925260a0830152519081900360c001906000f08015801562000cdc573d6000803e3d6000fd5b5060118054600160a060020a031916600160a060020a03929092169190911790556040517f330d2f37998c8839fca77205925adc69e2c4aa616175f8b357f42f84d06c454990600090a150505050565b6203f48081565b62093a8081565b60065481565b3360009081526002602052604090205460ff16151560011462000d6257600080fd5b600f54600160a060020a03161562000d7957600080fd5b600f8054600160a060020a031916600160a060020a0392909216919091179055565b3360009081526002602052604090205460ff16151560011462000dbd57600080fd5b6003546101009004600160a060020a03161562000dd957600080fd5b60038054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600e5481565b601154600160a060020a03163314801562000ead5750601160009054906101000a9004600160a060020a0316600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562000e7e57600080fd5b505af115801562000e93573d6000803e3d6000fd5b505050506040513d602081101562000eaa57600080fd5b50515b151562000eb957600080fd5b811562000ed05762000eca62001332565b600c8190555b601154604080517f2c24909c000000000000000000000000000000000000000000000000000000008152905162000f6792600160a060020a031691632c24909c9160048083019260209291908290030181600087803b15801562000f3357600080fd5b505af115801562000f48573d6000803e3d6000fd5b505050506040513d602081101562000f5f57600080fd5b505162002986565b6040805183151581526020810183905281517fecb94f7dd81b39de2b8d95fa8a4d9f0a8723d7a974187fef4fa5305ca5d16248929181900390910190a1505060118054600160a060020a0319169055565b60006016600081548110151562000fcb57fe5b6000918252602090912001541562000fe257600080fd5b62000ff08585858562001ac3565b905060c06040519081016040528082815260200182626ebe000181526020018262dd7c000181526020018263014c3a00018152602001826301baf80001815260200182630229b6000181525060169060066200104e929190620031d7565b505050505050565b600f54600160a060020a031681565b6000806000806000600360019054906101000a9004600160a060020a0316600160a060020a03166370a08231336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015620010de57600080fd5b505af1158015620010f3573d6000803e3d6000fd5b505050506040513d60208110156200110a57600080fd5b5051116200111757600080fd5b60026003805460ff16908111156200112b57fe5b146200113657600080fd5b601254600160a060020a0316156200114d57600080fd5b62001157620029b6565b15156200116357600080fd5b6000601454118015620011855750620011826014546201518062002978565b42115b15620011915760006014555b505060145442925062093a80830191501560008115620011d357620011d0620011ba85620020c3565b620011c586620021c6565b600101600162001f4c565b90505b6003546101009004600160a060020a03163085858486620011f362003223565b600160a060020a0396871681529490951660208501526040808501939093526060840191909152608083015291151560a082015290519081900360c001906000f08015801562001247573d6000803e3d6000fd5b5060128054600160a060020a031916600160a060020a03929092169190911790556040517fd1a79c97f023d07d5c5533b0887300f81e113759deeb9531a541b93341ceab7f90600090a150505050565b3360009081526002602052604090205460ff161515600114620012b957600080fd5b60026003805460ff1690811115620012cd57fe5b14620012d857600080fd5b600c548110620012e757600080fd5b600c55565b600f54600160a060020a031633146200130457600080fd5b60006003805460ff16908111156200131857fe5b146200132357600080fd5b6003805460ff19166001179055565b3360009081526002602052604081205460ff1615156001146200135457600080fd5b6200135e620023bf565b15156200136a57600080fd5b60026003805460ff16908111156200137e57fe5b146200138957600080fd5b6200139362002a7a565b42600d55600554604051919250600160a060020a03169082156108fc029083906000818181858888f19350505050158015620013d3573d6000803e3d6000fd5b506040805182815242602082015281517f56ca301a9219608c91e7bcee90e083c19671d2cdcc96752c7af291cee5f9c8c8929181900390910190a150565b60006018603c8084045b048115156200142657fe5b0690505b919050565b60106020526000908152604090205481565b600054600160a060020a031681565b6000600760046201518084040162001426565b600554600160a060020a031681565b60168054829081106200148157fe5b600091825260209091200154905081565b600f54600090600160a060020a03163314620014ad57600080fd5b506003805460ff19166002179055600f54604080517f4d52a5120000000000000000000000000000000000000000000000000000000081529051600160a060020a039092169162001559918391634d52a512916004808201926020929091908290030181600087803b1580156200152357600080fd5b505af115801562001538573d6000803e3d6000fd5b505050506040513d60208110156200154f57600080fd5b5051600262002935565b600e555042600d819055600454600c55600655565b6000620015818686868686600062001f6e565b9695505050505050565b6000620015988262002aab565b6040015192915050565b6003546101009004600160a060020a03163314620015bf57600080fd5b601154600160a060020a031615801590620016595750601160009054906101000a9004600160a060020a0316600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200162957600080fd5b505af11580156200163e573d6000803e3d6000fd5b505050506040513d60208110156200165557600080fd5b5051155b15620016e857601154604080517fc734f917000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152602482018590529151919092169163c734f91791604480830192600092919082900301818387803b158015620016ce57600080fd5b505af1158015620016e3573d6000803e3d6000fd5b505050505b601254600160a060020a031615801590620017825750601260009054906101000a9004600160a060020a0316600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200175257600080fd5b505af115801562001767573d6000803e3d6000fd5b505050506040513d60208110156200177e57600080fd5b5051155b156200181157601254604080517fc734f917000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152602482018590529151919092169163c734f91791604480830192600092919082900301818387803b158015620017f757600080fd5b505af11580156200180c573d6000803e3d6000fd5b505050505b505050565b600954600160a060020a031681565b600060026003805460ff16908111156200183b57fe5b146200184a5750600062001857565b6200185462002a7a565b90505b90565b3360009081526002602052604090205460ff1615156001146200187c57600080fd5b600a54600160a060020a0316156200189357600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b3360009081526002602052604081205460ff16151560011480620018e35750600b54600160a060020a031633145b1515620018ef57600080fd5b60016003805460ff16908111156200190357fe5b146200190e57600080fd5b600160a060020a038216600090815260106020526040812054116200193257600080fd5b50600160a060020a038082166000818152601060209081526040808320805490849055600354825160e060020a6370a082310281526004810196909652915190956101009092049091169363a24835d193879386936370a0823193602480820194918390030190829087803b158015620019ab57600080fd5b505af1158015620019c0573d6000803e3d6000fd5b505050506040513d6020811015620019d757600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915251604480830192600092919082900301818387803b15801562001a2657600080fd5b505af115801562001a3b573d6000803e3d6000fd5b5050604051600160a060020a038516925083156108fc02915083906000818181858888f1935050505015801562001a76573d6000803e3d6000fd5b5060408051600160a060020a038416815260208101839052428183015290517fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c9181900360600190a15050565b600062001ad68585858560008062001f6e565b95945050505050565b600080600380805460ff169081111562001af557fe5b1462001b0057600080fd5b6003546040805160e060020a6370a082310281523360048201529051610100909204600160a060020a0316916370a08231916024808201926020929091908290030181600087803b15801562001b5557600080fd5b505af115801562001b6a573d6000803e3d6000fd5b505050506040513d602081101562001b8157600080fd5b505191506000821162001b9357600080fd5b62001c2c62001ba48330316200294b565b600360019054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562001bf857600080fd5b505af115801562001c0d573d6000803e3d6000fd5b505050506040513d602081101562001c2457600080fd5b505162002935565b90506000811162001c3c57600080fd5b600354604080517fa24835d1000000000000000000000000000000000000000000000000000000008152336004820152602481018590529051610100909204600160a060020a03169163a24835d19160448082019260009290919082900301818387803b15801562001cad57600080fd5b505af115801562001cc2573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f1935050505015801562001cf4573d6000803e3d6000fd5b50604080513381526020810183905280820184905242606082015290517f2fe53133356d775fd6784d23de274186e0721e0d93074ae2392acb8968bb2e519181900360800190a15050565b60135481565b600b54600160a060020a031681565b60155460ff1681565b601254600090600160a060020a03163314801562001df95750601260009054906101000a9004600160a060020a0316600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562001dca57600080fd5b505af115801562001ddf573d6000803e3d6000fd5b505050506040513d602081101562001df657600080fd5b50515b151562001e0557600080fd5b811562001ee5576000601454111562001e285762001e2262002c15565b62001edf565b601260009054906101000a9004600160a060020a0316600160a060020a03166378e979256040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801562001e7c57600080fd5b505af115801562001e91573d6000803e3d6000fd5b505050506040513d602081101562001ea857600080fd5b5051905062001ed162001ebb82620020c3565b62001ec683620021c6565b600201600162001f4c565b6014556015805460ff191690555b62001ef8565b60006014556015805460ff191660011790555b60408051831515815290517f9ab7d9b3f53fbde0442a57f23d2eca52d14cd437e392cf8896a96f3647dff6db9181900360200190a1505060128054600160a060020a0319169055565b6000603c8262001426565b600062001f60848484600080600062001f6e565b949350505050565b60045481565b60008062001f7b62003234565b6107b291505b8861ffff168261ffff16101562001fc85762001f9d82620021ec565b1562001fb2576301e285008301925062001fbc565b6301e13380830192505b60019091019062001f81565b601f815262001fd789620021ec565b1562001fea57601d602082015262001ff2565b601c60208201525b601f60408201819052601e606083018190526080830182905260a0830181905260c0830182905260e0830182905261010083018190526101208301829052610140830152610160820152600191505b8760ff168261ffff16101562002085578061ffff600019840116600c81106200206657fe5b602002015160ff16620151800283019250818060010192505062002041565b6001870360ff166201518002830192508560ff16610e1002830192508460ff16603c02830192508360ff168301925082925050509695505050505050565b6000806107b26301e1338084048101908290620020e090620022c5565b620020ef8361ffff16620022c5565b039050806301e285000283019250806107b2830361ffff16036301e1338002830192505b8483111562002155576200212a60018303620021ec565b156200213f576301e285008303925062002149565b6301e13380830392505b60018203915062002113565b509392505050565b600a81565b60606001805480602002602001604051908101604052809291908181526020018280548015620021bc57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116200219d575b5050505050905090565b6000620021d38262002aab565b6020015192915050565b600a54600160a060020a031681565b6000600382161562002201575060006200142a565b606461ffff83160661ffff16156200221c575060016200142a565b61019061ffff83160661ffff161562002238575060006200142a565b506001919050565b600f54600090600160a060020a031633146200225b57600080fd5b60006003805460ff16908111156200226f57fe5b146200227a57600080fd5b600160a060020a0382166000908152601060205260409020546200229f903462002978565b600160a060020a0390921660009081526010602052604090209190915550565b600d5481565b60001901600061019082046064830460048404030192915050565b60008260ff1660011480620022f857508260ff166003145b806200230757508260ff166005145b806200231657508260ff166007145b806200232557508260ff166008145b806200233457508260ff16600a145b806200234357508260ff16600c145b15620023525750601f620023b3565b8260ff16600414806200236857508260ff166006145b806200237757508260ff166009145b806200238657508260ff16600b145b15620023955750601e620023b3565b620023a082620021ec565b15620023af5750601d620023b3565b50601c5b92915050565b60145481565b601254600090600160a060020a0316158015906200245c5750601260009054906101000a9004600160a060020a0316600160a060020a031663b3f05b976040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200242c57600080fd5b505af115801562002441573d6000803e3d6000fd5b505050506040513d60208110156200245857600080fd5b5051155b8015620024f45750601254604080517f728b482b0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163728b482b91600480830192602092919082900301818787803b158015620024c457600080fd5b505af1158015620024d9573d6000803e3d6000fd5b505050506040513d6020811015620024f057600080fd5b5051115b8015620025825750601260009054906101000a9004600160a060020a0316600160a060020a031663728b482b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156200255057600080fd5b505af115801562002565573d6000803e3d6000fd5b505050506040513d60208110156200257c57600080fd5b50514210155b80156200260d5750601260009054906101000a9004600160a060020a0316600160a060020a03166380322cbd6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015620025de57600080fd5b505af1158015620025f3573d6000803e3d6000fd5b505050506040513d60208110156200260a57600080fd5b50515b156200261c5750600062001857565b5060155460ff1690565b600b54600160a060020a031633146200263e57600080fd5b6200264862002c15565b565b60035460ff1681565b600854600160a060020a031681565b601154600160a060020a031681565b601254600160a060020a031681565b3360009081526002602052604081205460ff161515600114620026a257600080fd5b620026ac620023bf565b1515620026b857600080fd5b600e54600010620026c857600080fd5b50600e80546000918290556005546040519192600160a060020a039091169183156108fc0291849190818181858888f19350505050158015620013d3573d6000803e3d6000fd5b60026020526000908152604090205460ff1681565b600754600160a060020a031681565b600054600160a060020a031633146200274b57600080fd5b62002756816200305d565b50565b6000603c80836200141b565b6003546101009004600160a060020a031681565b600c5481565b600060016003805460ff16908111156200279557fe5b14620027a057600080fd5b3360009081526010602052604081205411620027bb57600080fd5b50336000818152601060209081526040808320805490849055600354825160e060020a6370a082310281526004810187905292519195610100909104600160a060020a03169463a24835d194919386936370a082319360248084019491938390030190829087803b1580156200283057600080fd5b505af115801562002845573d6000803e3d6000fd5b505050506040513d60208110156200285c57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915251604480830192600092919082900301818387803b158015620028ab57600080fd5b505af1158015620028c0573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f19350505050158015620028f2573d6000803e3d6000fd5b506040805133815260208101839052428183015290517fec44c8b7c9108bd9d48e9a929c78d5a448562d61b1113d016ba7fd99d7dc3c7c9181900360600190a150565b600081838115156200294357fe5b049392505050565b60008215156200295e57506000620023b3565b508181028183828115156200296f57fe5b0414620023b357fe5b81810182811015620023b357fe5b60006200299582600262002935565b9050600a811115620029ac57600a601355620029b2565b60138190555b5050565b6000806000601454118015620029ce57506014544210155b8015620029eb5750620029e76014546201518062002978565b4211155b15620029fb576001915062002a76565b60165481101562002a7157601680548290811062002a1557fe5b9060005260206000200154421015801562002a58575062002a5460168281548110151562002a3f57fe5b90600052602060002001546201518062002978565b4211155b1562002a68576001915062002a76565b600101620029fb565b600091505b5090565b60008062002a9862002a8f42600d54620031b3565b600c546200294b565b905030318111156200142a575050303190565b62002ab562003254565b600080808062002ac586620020c3565b61ffff16855262002ad86107b2620022c5565b855162002ae99061ffff16620022c5565b039250826301e285000284019350826107b286600001510361ffff16036301e133800284019350600191505b600c60ff83161162002b655762002b31828660000151620022e0565b60ff166201518002905085848201111562002b555760ff8216602086015262002b65565b9283019260019091019062002b15565b600191505b62002b7e85602001518660000151620022e0565b60ff168260ff1611151562002bbf5785846201518001111562002baa5760ff8216604086015262002bbf565b62015180939093019260019091019062002b6a565b62002bca8662001411565b60ff16606086015262002bdd8662002759565b60ff16608086015262002bf08662001f41565b60ff1660a086015262002c038662001450565b60ff1660c08601525092949350505050565b60026003805460ff169081111562002c2957fe5b1462002c3457600080fd5b6003805460ff1916811790819055600a546040805160e060020a6370a08231028152600160a060020a039283166004820181905291516101009094049092169263a24835d19284916370a08231916024808201926020929091908290030181600087803b15801562002ca557600080fd5b505af115801562002cba573d6000803e3d6000fd5b505050506040513d602081101562002cd157600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915251604480830192600092919082900301818387803b15801562002d2057600080fd5b505af115801562002d35573d6000803e3d6000fd5b50506003546007546040805160e060020a6370a08231028152600160a060020a03928316600482018190529151610100909404909216945063a24835d193509184916370a082319160248083019260209291908290030181600087803b15801562002d9f57600080fd5b505af115801562002db4573d6000803e3d6000fd5b505050506040513d602081101562002dcb57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915251604480830192600092919082900301818387803b15801562002e1a57600080fd5b505af115801562002e2f573d6000803e3d6000fd5b50506003546008546040805160e060020a6370a08231028152600160a060020a03928316600482018190529151610100909404909216945063a24835d193509184916370a082319160248083019260209291908290030181600087803b15801562002e9957600080fd5b505af115801562002eae573d6000803e3d6000fd5b505050506040513d602081101562002ec557600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915251604480830192600092919082900301818387803b15801562002f1457600080fd5b505af115801562002f29573d6000803e3d6000fd5b50506003546009546040805160e060020a6370a08231028152600160a060020a03928316600482018190529151610100909404909216945063a24835d193509184916370a082319160248083019260209291908290030181600087803b15801562002f9357600080fd5b505af115801562002fa8573d6000803e3d6000fd5b505050506040513d602081101562002fbf57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915251604480830192600092919082900301818387803b1580156200300e57600080fd5b505af115801562003023573d6000803e3d6000fd5b50506040805133815290517f32a9af620b9010e46c598870c64620a9c1b65816b3140fbd73ea13f2e50cdb239350908190036020019150a1565b6000805b600154821015620030c3576000600260006001858154811015156200308257fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff19169115159190911790556001919091019062003061565b5060005b825181101562003121576001600260008584815181101515620030e657fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101620030c7565b82516200313690600190602086019062003290565b507f9465cd279c2de393c5568ae444599e3644e3d1864ca2c05ced8a654df2aea3cb836040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156200319b57818101518382015260200162003181565b505050509050019250505060405180910390a1505050565b600082821115620031c057fe5b50900390565b604051610abf806200333b83390190565b82805482825590600052602060002090810192821562003215579160200282015b8281111562003215578251825591602001919060010190620031f8565b5062002a76929150620032f6565b604051610a358062003dfa83390190565b61018060405190810160405280600c906020820280388339509192915050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b828054828255906000526020600020908101928215620032e8579160200282015b82811115620032e85782518254600160a060020a031916600160a060020a03909116178255602090920191600190910190620032b1565b5062002a7692915062003313565b6200185791905b8082111562002a765760008155600101620032fd565b6200185791905b8082111562002a76578054600160a060020a03191681556001016200331a560060806040526000600555600060065560006007556000600b5534801561002457600080fd5b5060405160c080610abf83398101604090815281516020830151918301516060840151608085015160a09095015192949192909190848484846000600160a060020a038516151561007457600080fd5b428310158015610085575060025482115b151561009057600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff199081169091556004805492151592909116919091179055600a95909555505050600b91909155506109b9806101066000396000f3006080604052600436106100fb5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632c24909c81146101005780633197cbb614610127578063361810261461013c57806343c14b22146101655780634b9f5c981461017c578063593c54761461019657806364a90292146101ab5780636f6a9762146101c057806378e97925146101d557806380322cbd146101ea578063a7491b48146101ff578063b3f05b9714610240578063b4e545bc14610255578063c734f9171461026a578063d74689e41461028e578063e82bef29146102a3578063fc0c546a146102d4578063fd221031146102e9575b600080fd5b34801561010c57600080fd5b506101156102fe565b60408051918252519081900360200190f35b34801561013357600080fd5b506101156103bd565b34801561014857600080fd5b506101516103c3565b604080519115158252519081900360200190f35b34801561017157600080fd5b5061017a61040b565b005b34801561018857600080fd5b5061017a60043515156104b8565b3480156101a257600080fd5b50610115610604565b3480156101b757600080fd5b5061011561060a565b3480156101cc57600080fd5b50610115610610565b3480156101e157600080fd5b50610115610616565b3480156101f657600080fd5b5061015161061c565b34801561020b57600080fd5b50610220600160a060020a0360043516610626565b604080519384526020840192909252151582820152519081900360600190f35b34801561024c57600080fd5b5061015161064a565b34801561026157600080fd5b50610115610653565b34801561027657600080fd5b5061017a600160a060020a0360043516602435610659565b34801561029a57600080fd5b50610115610850565b3480156102af57600080fd5b506102b8610856565b60408051600160a060020a039092168252519081900360200190f35b3480156102e057600080fd5b506102b8610865565b3480156102f557600080fd5b50610115610874565b60006103b761031b61031460055460065461087a565b606461088d565b6000809054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561038657600080fd5b505af115801561039a573d6000803e3d6000fd5b505050506040513d60208110156103b057600080fd5b50516108b6565b90505b90565b60035481565b60085460009060ff16156103d657600080fd5b6003544210156103e8575060006103ba565b6008805460ff191660011790556104056104006108cb565b6108ed565b50600190565b600080600254421015801561042257506003544211155b151561042d57600080fd5b336000908152600960205260408120541161044757600080fd5b505033600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916104879161097b565b60075580156104a45761049c6005548361097b565b6005556104b4565b6104b06006548361097b565b6006555b5050565b60008060025442101580156104cf57506003544211155b15156104da57600080fd5b33600090815260096020526040902054156104f457600080fd5b60008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03909216926370a08231926024808401936020939083900390910190829087803b15801561055b57600080fd5b505af115801561056f573d6000803e3d6000fd5b505050506040513d602081101561058557600080fd5b50519150808211156105975780610599565b815b915082156105b5576105ad6005548361087a565b6005556105c5565b6105c16006548361087a565b6006555b33600090815260096020526040902042815560018082018490556002909101805460ff19168515151790556007546105fc9161087a565b600755505050565b6103e881565b60065481565b600b5481565b60025481565b60006103b76108cb565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60085460ff1681565b60075481565b600154600090600160a060020a0316331461067357600080fd5b600160a060020a03831660009081526009602052604090205415156106975761084b565b60045460ff1615156106ca5760085460ff16806106c057506002544210806106c0575060035442115b156106ca5761084b565b600160a060020a03808416600081815260096020908152604080832060010154835482517f70a0823100000000000000000000000000000000000000000000000000000000815260048101969096529151909591909116936370a082319360248083019493928390030190829087803b15801561074657600080fd5b505af115801561075a573d6000803e3d6000fd5b505050506040513d602081101561077057600080fd5b50511061077c5761084b565b50600160a060020a03821660009081526009602052604090206001015481908111156107c05750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107f8576107f06005548261097b565b600555610808565b6108046006548261097b565b6006555b600160a060020a03831660009081526009602052604090206001015461082e908261097b565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600a5481565b8181018281101561088757fe5b92915050565b600082151561089e57506000610887565b508181028183828115156108ae57fe5b041461088757fe5b600081838115156108c357fe5b049392505050565b60006006546005541180156103b75750600b546108e66102fe565b1015905090565b600154600a54604080517f29c90b630000000000000000000000000000000000000000000000000000000081528415156004820152602481019290925251600160a060020a039092169182916329c90b6391604480830192600092919082900301818387803b15801561095f57600080fd5b505af1158015610973573d6000803e3d6000fd5b505050505050565b60008282111561098757fe5b509003905600a165627a7a72305820807be4cb8ed5b5d228d6e37d0230a4d217bee8745c51200424e17fff7d533f20002960806040526000600555600060065560006007556000600a5534801561002457600080fd5b5060405160c080610a3583398101604090815281516020830151918301516060840151608085015160a090950151929491929091908585858584600160a060020a038516151561007357600080fd5b428310158015610084575060025482115b151561008f57600080fd5b60008054600160a060020a03968716600160a060020a03199182161790915560018054959096169416939093179093556002556003919091556008805460ff19908116909155600480549215159290911691909117905550600a5550505050610938806100fd6000396000f3006080604052600436106100e55763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633197cbb681146100ea578063361810261461011157806343c14b221461013a5780634b9f5c9814610151578063593c54761461016b57806364a9029214610180578063728b482b1461019557806378e97925146101aa57806380322cbd146101bf578063a7491b48146101d4578063b3f05b9714610215578063b4e545bc1461022a578063c734f9171461023f578063d74689e414610263578063e82bef2914610278578063fc0c546a146102a9575b600080fd5b3480156100f657600080fd5b506100ff6102be565b60408051918252519081900360200190f35b34801561011d57600080fd5b506101266102c4565b604080519115158252519081900360200190f35b34801561014657600080fd5b5061014f610325565b005b34801561015d57600080fd5b5061014f60043515156103d2565b34801561017757600080fd5b506100ff61051e565b34801561018c57600080fd5b506100ff610524565b3480156101a157600080fd5b506100ff61052a565b3480156101b657600080fd5b506100ff610530565b3480156101cb57600080fd5b50610126610536565b3480156101e057600080fd5b506101f5600160a060020a0360043516610545565b604080519384526020840192909252151582820152519081900360600190f35b34801561022157600080fd5b50610126610569565b34801561023657600080fd5b506100ff610572565b34801561024b57600080fd5b5061014f600160a060020a0360043516602435610578565b34801561026f57600080fd5b506100ff61076f565b34801561028457600080fd5b5061028d610775565b60408051600160a060020a039092168252519081900360200190f35b3480156102b557600080fd5b5061028d610784565b60035481565b600080600a541180156102da5750600354600a54115b156102f357600a544210156102ee57600080fd5b610302565b60035442101561030257600080fd5b6008805460ff1916600117905561031f61031a610793565b61084e565b50600190565b600080600254421015801561033c57506003544211155b151561034757600080fd5b336000908152600960205260408120541161036157600080fd5b505033600090815260096020526040812060018082018054600284018054948690559490915560ff19831690935560075460ff909216916103a1916108d2565b60075580156103be576103b6600554836108d2565b6005556103ce565b6103ca600654836108d2565b6006555b5050565b60008060025442101580156103e957506003544211155b15156103f457600080fd5b336000908152600960205260409020541561040e57600080fd5b60008054604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03909216926370a08231926024808401936020939083900390910190829087803b15801561047557600080fd5b505af1158015610489573d6000803e3d6000fd5b505050506040513d602081101561049f57600080fd5b50519150808211156104b157806104b3565b815b915082156104cf576104c7600554836108e4565b6005556104df565b6104db600654836108e4565b6006555b33600090815260096020526040902042815560018082018490556002909101805460ff1916851515179055600754610516916108e4565b600755505050565b6103e881565b60065481565b600a5481565b60025481565b6000610540610793565b905090565b60096020526000908152604090208054600182015460029092015490919060ff1683565b60085460ff1681565b60075481565b600154600090600160a060020a0316331461059257600080fd5b600160a060020a03831660009081526009602052604090205415156105b65761076a565b60045460ff1615156105e95760085460ff16806105df57506002544210806105df575060035442115b156105e95761076a565b600160a060020a03808416600081815260096020908152604080832060010154835482517f70a0823100000000000000000000000000000000000000000000000000000000815260048101969096529151909591909116936370a082319360248083019493928390030190829087803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050506040513d602081101561068f57600080fd5b50511061069b5761076a565b50600160a060020a03821660009081526009602052604090206001015481908111156106df5750600160a060020a0382166000908152600960205260409020600101545b600160a060020a03831660009081526009602052604090206002015460ff16156107175761070f600554826108d2565b600555610727565b610723600654826108d2565b6006555b600160a060020a03831660009081526009602052604090206001015461074d90826108d2565b600160a060020a0384166000908152600960205260409020600101555b505050565b60055481565b600154600160a060020a031681565b600054600160a060020a031681565b600060065460055411801561054057506108446000809054906101000a9004600160a060020a0316600160a060020a03166318160ddd6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561081157600080fd5b505af1158015610825573d6000803e3d6000fd5b505050506040513d602081101561083b57600080fd5b505160036108f7565b6005541015905090565b600154604080517f89ea2cb700000000000000000000000000000000000000000000000000000000815283151560048201529051600160a060020a039092169182916389ea2cb791602480830192600092919082900301818387803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050505050565b6000828211156108de57fe5b50900390565b818101828110156108f157fe5b92915050565b6000818381151561090457fe5b0493925050505600a165627a7a723058209e3b81469b37e70308a3eb1c0ab41c3bd534b66cb74ac96a05bae545165b33790029a165627a7a7230582005456056205bd07873b1ffe3bb90cfdc18b53e355156b6cf86fe6e5124274d5d0029000000000000000000000000dbfbaafb9532c51ac72fc8ce5b7a436fa0bbe5a5000000000000000000000000ff96edb5cc3f802cbf4a00b5ab78e1e1d1d6b9830000000000000000000000004f267cd1c746233331ccf1b4faf3e8faf40e2c0100000000000000000000000064a2aaa223d45654821feebbdb2edf81742c96870000000000000000000000009ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ff8927bc96efdb2c8e3cb792e0c3b7f37f5ed7d

Swarm Source

bzzr://05456056205bd07873b1ffe3bb90cfdc18b53e355156b6cf86fe6e5124274d5d
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward