contract ERC20Interface {

    function totalSupply() public view returns(uint);
    function balanceOf(address tokenOwner) public view returns(uint balance);
    function allowance(address tokenOwner, address spender) public view returns(uint remaining);
    function transfer(address to, uint tokens) public returns(bool success);
    function approve(address spender, uint tokens) public returns(bool success);
    function approveAndCall(address spender, uint tokens, bytes memory data) public returns(bool);
    function transferFrom(address from, address to, uint tokens) public returns(bool success);
    // function burnTokens(uint tokens) public returns(bool success); // for testing purposes only !
    function purchaseTokens() external payable;
    function purchaseEth(uint tokens) public;
    function sellAllTokens() public;
    function weiToTokens(uint weiPurchase) public view returns(uint);
    function tokensToWei(uint tokens) public view returns(uint);
    
    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);

}
// ----------------------------------------------------------------------------
// ERC Token Standard
// ----------------------------------------------------------------------------
function purchaseTokens() external payable;

// function burnTokens(uint tokens) public returns(bool success); // for testing purposes only !