contract SupportsInterface is ERC165 {
    /**
     * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true.
     */
    mapping(bytes4 => bool) internal supportedInterfaces;

    /**
     * @dev Contract constructor.
     */
    constructor() {
        supportedInterfaces[0x01ffc9a7] = true; // ERC165
    }

    /**
     * @dev Function to check which interfaces are suported by this contract.
     * @param _interfaceID Id of the interface.
     * @return True if _interfaceID is supported, false otherwise.
     */
    function supportsInterface(bytes4 _interfaceID)
        external
        view
        override
        returns (bool)
    {
        return supportedInterfaces[_interfaceID];
    }
}
/**
 * @dev Implementation of standard for detect smart contract interfaces.
 */
function supportsInterface(bytes4 _interfaceID)
    external
    view
    override
    returns (bool)
{
    return supportedInterfaces[_interfaceID];
}

/**
 * @dev Function to check which interfaces are suported by this contract.
 * @param _interfaceID Id of the interface.
 * @return True if _interfaceID is supported, false otherwise.
 */