contract ERC721 {
    // ERC20 compatible functions.
    function name() public constant returns (string);
    function symbol() public constant returns (string);
    function totalSupply() public constant returns (uint256);
    function balanceOf(address _owner) public constant returns (uint);
    // Functions that define ownership.
    function ownerOf(uint256 _tokenId) public constant returns (address);
    function approve(address _to, uint256 _tokenId) public;
    function takeOwnership(uint256 _tokenId) public;
    function transfer(address _to, uint256 _tokenId) public;
    function tokenOfOwnerByIndex(address _owner, uint256 _index) public constant returns (uint);
    // Token metadata.
    function tokenMetadata(uint256 _tokenId) public constant returns (string);
    // Events.
    event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
}
/**
 * @title ERC-721 contract interface.
 */
function name() public constant returns (string);

// ERC20 compatible functions.