abstract contract ERC721Mintable is ERC721Burnable, Ownable {
  constructor(string memory _name, string memory _symbol)
    ERC721(_name, _symbol) {
  }

  function mint(address to, uint256 tokenId) onlyOwner external {
    _mint(to, tokenId);
  }

  // TODO: not all third-party contracts will be compatible with this method
  function transfer(address to, uint256 tokenId) external {
    _transfer(msg.sender, to, tokenId);
  }
}
function transfer(address to, uint256 tokenId) external {
  _transfer(msg.sender, to, tokenId);
}

// TODO: not all third-party contracts will be compatible with this method