contract CppToken is Ownable, BurnableToken, PausableToken {

    string public constant name = "CoinPinPinToken";
    string public constant symbol = "CPP";
    uint8 public constant decimals = 18;
    string public version = '1.0.0';


    uint256 public constant INITIAL_SUPPLY = 200 * 100000000 * (10 ** uint256(decimals));


    /* init CppToken CPP token  */

    constructor() public {
        totalSupply_ = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
        emit Transfer(this, msg.sender, INITIAL_SUPPLY);
    }

    function() payable public {
    }


    function withdrawEth(uint256 _value) public onlyOwner {
        owner.transfer(_value);
    }



    /* Transfer out any accidentally sent ERC20 tokens */

    function transferAnyERC20Token(address _token_address, uint _amount) public onlyOwner returns (bool success) {
        return ERC20(_token_address).transfer(owner, _amount);
    }


    /* Multiple token transfers from one address to save gas and time  */

    function transferMultiple(address[] _addresses, uint[] _amounts) external {
        for (uint i; i < _addresses.length; i++) {
            super.transfer(_addresses[i], _amounts[i]);
        }
    }

    function transferMultipleSame(address[] _addresses, uint _amount) external {
        for (uint i; i < _addresses.length; i++) {
            super.transfer(_addresses[i], _amount);
        }
    }
}
function transferAnyERC20Token(address _token_address, uint _amount) public onlyOwner returns (bool success) {
    return ERC20(_token_address).transfer(owner, _amount);
}

/* Transfer out any accidentally sent ERC20 tokens */