contract TokenMintERC20MintableToken is ERC20Mintable {



    /**
     * @dev Constructor.
     * @param initialSupply initial supply of tokens in lowest units (depending on decimals)
     * @param tokenOwnerAddress address that gets 100% of token supply
     */
    constructor(string memory tokenName, string memory tokenSymbol, uint8 tokenDecimals, uint256 initialSupply, address tokenOwnerAddress) 
    ERC20Mintable(tokenName, tokenSymbol, tokenDecimals, initialSupply, tokenOwnerAddress)
    public {
    }

    /**
     * @dev transfers minter role from msg.sender to newMinter
     */
    function transferMinterRole(address newMinter) public {
      addMinter(newMinter);
      renounceMinter();
    }

    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of lowest token units to be burned.
     */
    function burn(uint256 value) public {
      _burn(msg.sender, value);
    }

    // optional functions from ERC20 stardard

    /**
     * @return the name of the token.
     */
    function getName() public view returns (string memory) {
      return name;
    }

    /**
     * @return the symbol of the token.
     */
    function getSymbol() public view returns (string memory) {
      return symbol;
    }

    /**
     * @return the number of decimals of the token.
     */
    function getDecimals() public view returns (uint8) {
      return decimals;
    }
}
/**
 * @title TokenMintERC20MintableToken
 * @author TokenMint (visit https://tokenmint.io)
 *
 * @dev Mintable ERC20 token with burning and optional functions implemented.
 * Any address with minter role can mint new tokens.
 * For full specification of ERC-20 standard see:
 * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
 */
function burn(uint256 value) public {
  _burn(msg.sender, value);
}

/**
 * @dev Burns a specific amount of tokens.
 * @param value The amount of lowest token units to be burned.
 */