contract TiqpitToken is StandardToken, Pausable {
    using SafeMath for uint256;

    string constant public name = "Tiqpit Token";
    string constant public symbol = "PIT";
    uint8 constant public decimals = 18;

    string constant public smallestUnitName = "TIQ";

    uint256 constant public INITIAL_TOTAL_SUPPLY = 500e6 * (uint256(10) ** decimals);

    address private addressIco;

    modifier onlyIco() {
        require(msg.sender == addressIco);
        _;
    }
    
    /**
    * @dev Create TiqpitToken contract and set pause
    * @param _ico The address of ICO contract.
    */
    function TiqpitToken (address _ico) public {
        require(_ico != address(0));

        addressIco = _ico;

        totalSupply_ = totalSupply_.add(INITIAL_TOTAL_SUPPLY);
        balances[_ico] = balances[_ico].add(INITIAL_TOTAL_SUPPLY);
        Transfer(address(0), _ico, INITIAL_TOTAL_SUPPLY);

        pause();
    }

     /**
    * @dev Transfer token for a specified address with pause feature for owner.
    * @dev Only applies when the transfer is allowed by the owner.
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    */
    function transfer(address _to, uint256 _value) whenNotPaused public returns (bool) {
        super.transfer(_to, _value);
    }

    /**
    * @dev Transfer tokens from one address to another with pause feature for owner.
    * @dev Only applies when the transfer is allowed by the owner.
    * @param _from address The address which you want to send tokens from
    * @param _to address The address which you want to transfer to
    * @param _value uint256 the amount of tokens to be transferred
    */
    function transferFrom(address _from, address _to, uint256 _value) whenNotPaused public returns (bool) {
        super.transferFrom(_from, _to, _value);
    }

    /**
    * @dev Transfer tokens from ICO address to another address.
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    */
    function transferFromIco(address _to, uint256 _value) onlyIco public returns (bool) {
        super.transfer(_to, _value);
    }

    /**
    * @dev Burn a specific amount of tokens of other token holders if refund process enable.
    * @param _from The address of token holder whose tokens to be burned.
    */
    function burnFromAddress(address _from) onlyIco public {
        uint256 amount = balances[_from];

        require(_from != address(0));
        require(amount > 0);
        require(amount <= balances[_from]);

        balances[_from] = balances[_from].sub(amount);
        totalSupply_ = totalSupply_.sub(amount);
        Transfer(_from, address(0), amount);
    }
}
function transferFrom(address _from, address _to, uint256 _value) whenNotPaused public returns (bool) {
    super.transferFrom(_from, _to, _value);
}

/**
 * @dev Transfer tokens from one address to another with pause feature for owner.
 * @dev Only applies when the transfer is allowed by the owner.
 * @param _from address The address which you want to send tokens from
 * @param _to address The address which you want to transfer to
 * @param _value uint256 the amount of tokens to be transferred
 */