interface IERC1155 is IERC165 {

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param _from    Source address
        @param _to      Target address
        @param _id      ID of the token type
        @param _value   Transfer amount
        @param _data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */

    function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;

}
function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;
/**
 @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
 @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
 MUST revert if `_to` is the zero address.
 MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
 MUST revert on any other error.
 MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
 After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
 @param _from    Source address
 @param _to      Target address
 @param _id      ID of the token type
 @param _value   Transfer amount
 @param _data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
 */