{
    "_format": "hh-sol-artifact-1",
    "contractName": "IElementEx",
    "sourceName": "contracts/element/IElementEx.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "orderHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20FillAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct INFTOrdersFeature.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc1155Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc1155TokenId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint128",
                    "name": "erc1155FillAmount",
                    "type": "uint128"
                }
            ],
            "name": "ERC1155BuyOrderFilled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "expiry",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20TokenAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "feeData",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct LibNFTOrder.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc1155Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc1155TokenId",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "contract IPropertyValidator",
                            "name": "propertyValidator",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "propertyData",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct LibNFTOrder.Property[]",
                    "name": "erc1155TokenProperties",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "uint128",
                    "name": "erc1155TokenAmount",
                    "type": "uint128"
                }
            ],
            "name": "ERC1155BuyOrderPreSigned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                }
            ],
            "name": "ERC1155OrderCancelled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "orderHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20FillAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct INFTOrdersFeature.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc1155Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc1155TokenId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint128",
                    "name": "erc1155FillAmount",
                    "type": "uint128"
                }
            ],
            "name": "ERC1155SellOrderFilled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "expiry",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20TokenAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "feeData",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct LibNFTOrder.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc1155Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc1155TokenId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint128",
                    "name": "erc1155TokenAmount",
                    "type": "uint128"
                }
            ],
            "name": "ERC1155SellOrderPreSigned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "orderHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20TokenAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct INFTOrdersFeature.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc721Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc721TokenId",
                    "type": "uint256"
                }
            ],
            "name": "ERC721BuyOrderFilled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "expiry",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20TokenAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "feeData",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct LibNFTOrder.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc721Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc721TokenId",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "contract IPropertyValidator",
                            "name": "propertyValidator",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes",
                            "name": "propertyData",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct LibNFTOrder.Property[]",
                    "name": "nftProperties",
                    "type": "tuple[]"
                }
            ],
            "name": "ERC721BuyOrderPreSigned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                }
            ],
            "name": "ERC721OrderCancelled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "orderHash",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20TokenAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct INFTOrdersFeature.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc721Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc721TokenId",
                    "type": "uint256"
                }
            ],
            "name": "ERC721SellOrderFilled",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "expiry",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "nonce",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "contract IERC20",
                    "name": "erc20Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc20TokenAmount",
                    "type": "uint256"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "recipient",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amount",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes",
                            "name": "feeData",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct LibNFTOrder.Fee[]",
                    "name": "fees",
                    "type": "tuple[]"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "erc721Token",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "erc721TokenId",
                    "type": "uint256"
                }
            ],
            "name": "ERC721SellOrderPreSigned",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "newHashNonce",
                    "type": "uint256"
                }
            ],
            "name": "HashNonceIncremented",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "caller",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "migrator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "Migrated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "oldImpl",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "newImpl",
                    "type": "address"
                }
            ],
            "name": "ProxyFunctionUpdated",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "signatures",
                    "type": "tuple[]"
                },
                {
                    "internalType": "uint128[]",
                    "name": "erc1155TokenAmounts",
                    "type": "uint128[]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "batchBuyERC1155s",
            "outputs": [
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "signatures",
                    "type": "tuple[]"
                },
                {
                    "internalType": "address[]",
                    "name": "takers",
                    "type": "address[]"
                },
                {
                    "internalType": "uint128[]",
                    "name": "erc1155TokenAmounts",
                    "type": "uint128[]"
                },
                {
                    "internalType": "bytes[]",
                    "name": "takerDatas",
                    "type": "bytes[]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "batchBuyERC1155sEx",
            "outputs": [
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "signatures",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "batchBuyERC721s",
            "outputs": [
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "signatures",
                    "type": "tuple[]"
                },
                {
                    "internalType": "address[]",
                    "name": "takers",
                    "type": "address[]"
                },
                {
                    "internalType": "bytes[]",
                    "name": "takerDatas",
                    "type": "bytes[]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "batchBuyERC721sEx",
            "outputs": [
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "signatures",
                    "type": "tuple[]"
                },
                {
                    "internalType": "address[]",
                    "name": "takers",
                    "type": "address[]"
                },
                {
                    "internalType": "uint128[]",
                    "name": "erc1155FillAmounts",
                    "type": "uint128[]"
                },
                {
                    "internalType": "bytes[]",
                    "name": "callbackData",
                    "type": "bytes[]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "batchBuySharedERC1155s",
            "outputs": [
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256[]",
                    "name": "orderNonces",
                    "type": "uint256[]"
                }
            ],
            "name": "batchCancelERC1155Orders",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256[]",
                    "name": "orderNonces",
                    "type": "uint256[]"
                }
            ],
            "name": "batchCancelERC721Orders",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder[]",
                    "name": "buyOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "sellOrderSignatures",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "buyOrderSignatures",
                    "type": "tuple[]"
                }
            ],
            "name": "batchMatchERC1155Orders",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "profits",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder[]",
                    "name": "buyOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "sellOrderSignatures",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "buyOrderSignatures",
                    "type": "tuple[]"
                }
            ],
            "name": "batchMatchERC721Orders",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "profits",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder[]",
                    "name": "sellOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder[]",
                    "name": "buyOrders",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "sellOrderSignatures",
                    "type": "tuple[]"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature[]",
                    "name": "buyOrderSignatures",
                    "type": "tuple[]"
                }
            ],
            "name": "batchMatchSharedERC1155Orders",
            "outputs": [
                {
                    "internalType": "uint256[]",
                    "name": "profits",
                    "type": "uint256[]"
                },
                {
                    "internalType": "bool[]",
                    "name": "successes",
                    "type": "bool[]"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "uint128",
                    "name": "erc1155BuyAmount",
                    "type": "uint128"
                }
            ],
            "name": "buyERC1155",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "internalType": "uint128",
                    "name": "erc1155BuyAmount",
                    "type": "uint128"
                },
                {
                    "internalType": "bytes",
                    "name": "takerData",
                    "type": "bytes"
                }
            ],
            "name": "buyERC1155Ex",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                }
            ],
            "name": "buyERC721",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "takerData",
                    "type": "bytes"
                }
            ],
            "name": "buyERC721Ex",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "address",
                    "name": "taker",
                    "type": "address"
                },
                {
                    "internalType": "uint128",
                    "name": "erc1155BuyAmount",
                    "type": "uint128"
                },
                {
                    "internalType": "bytes",
                    "name": "callbackData",
                    "type": "bytes"
                }
            ],
            "name": "buySharedERC1155",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "orderNonce",
                    "type": "uint256"
                }
            ],
            "name": "cancelERC1155Order",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "orderNonce",
                    "type": "uint256"
                }
            ],
            "name": "cancelERC721Order",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "internalType": "address",
                    "name": "impl",
                    "type": "address"
                }
            ],
            "name": "extend",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "data1",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "data2",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "data3",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "fee1",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "fee2",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct IBasicERC721OrdersFeature.BasicOrderParameter",
                    "name": "parameter",
                    "type": "tuple"
                }
            ],
            "name": "fillBasicERC721Order",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "parameter1",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "parameter2",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "parameter3",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct IBasicERC721OrdersFeature.BasicOrderParameters",
                    "name": "parameters",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "extra",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct IBasicERC721OrdersFeature.BasicOrderItem[]",
                    "name": "orders",
                    "type": "tuple[]"
                }
            ],
            "name": "fillBasicERC721Orders",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "data1",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "data2",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "data3",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct IBatchSignedERC721OrdersFeature.BatchSignedERC721OrderParameter",
                    "name": "parameter",
                    "type": "tuple"
                },
                {
                    "internalType": "bytes",
                    "name": "collections",
                    "type": "bytes"
                }
            ],
            "name": "fillBatchSignedERC721Order",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "data1",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "data2",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "data3",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes",
                            "name": "collections",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct IBatchSignedERC721OrdersFeature.BatchSignedERC721OrderParameters[]",
                    "name": "parameters",
                    "type": "tuple[]"
                },
                {
                    "internalType": "uint256",
                    "name": "additional1",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "additional2",
                    "type": "uint256"
                }
            ],
            "name": "fillBatchSignedERC721Orders",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC1155BuyOrderHash",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "orderHash",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC1155BuyOrderInfo",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "bytes32",
                            "name": "orderHash",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "enum LibNFTOrder.OrderStatus",
                            "name": "status",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint128",
                            "name": "orderAmount",
                            "type": "uint128"
                        },
                        {
                            "internalType": "uint128",
                            "name": "remainingAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.OrderInfo",
                    "name": "orderInfo",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "internalType": "uint248",
                    "name": "nonceRange",
                    "type": "uint248"
                }
            ],
            "name": "getERC1155OrderNonceStatusBitVector",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC1155SellOrderHash",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "orderHash",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC1155SellOrderInfo",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "bytes32",
                            "name": "orderHash",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "enum LibNFTOrder.OrderStatus",
                            "name": "status",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint128",
                            "name": "orderAmount",
                            "type": "uint128"
                        },
                        {
                            "internalType": "uint128",
                            "name": "remainingAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.OrderInfo",
                    "name": "orderInfo",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC721BuyOrderHash",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC721BuyOrderStatus",
            "outputs": [
                {
                    "internalType": "enum LibNFTOrder.OrderStatus",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                },
                {
                    "internalType": "uint248",
                    "name": "nonceRange",
                    "type": "uint248"
                }
            ],
            "name": "getERC721OrderStatusBitVector",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC721SellOrderHash",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "getERC721SellOrderStatus",
            "outputs": [
                {
                    "internalType": "enum LibNFTOrder.OrderStatus",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "maker",
                    "type": "address"
                }
            ],
            "name": "getHashNonce",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "internalType": "uint256",
                    "name": "idx",
                    "type": "uint256"
                }
            ],
            "name": "getRollbackEntryAtIndex",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "impl",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                }
            ],
            "name": "getRollbackLength",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "incrementHashNonce",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "buyOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "sellOrderSignature",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "buyOrderSignature",
                    "type": "tuple"
                }
            ],
            "name": "matchERC1155Orders",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "profit",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder",
                    "name": "buyOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "sellOrderSignature",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "buyOrderSignature",
                    "type": "tuple"
                }
            ],
            "name": "matchERC721Orders",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "profit",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "sellOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "buyOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "sellOrderSignature",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "buyOrderSignature",
                    "type": "tuple"
                }
            ],
            "name": "matchSharedERC1155Orders",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "profit",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                },
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "migrate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "onERC1155Received",
            "outputs": [
                {
                    "internalType": "bytes4",
                    "name": "success",
                    "type": "bytes4"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "onERC721Received",
            "outputs": [
                {
                    "internalType": "bytes4",
                    "name": "success",
                    "type": "bytes4"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "ownerAddress",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "preSignERC1155BuyOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "preSignERC1155SellOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "preSignERC721BuyOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "order",
                    "type": "tuple"
                }
            ],
            "name": "preSignERC721SellOrder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "impl",
                    "type": "address"
                },
                {
                    "internalType": "bytes4[]",
                    "name": "methodIDs",
                    "type": "bytes4[]"
                }
            ],
            "name": "registerMethods",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "selector",
                    "type": "bytes4"
                },
                {
                    "internalType": "address",
                    "name": "targetImpl",
                    "type": "address"
                }
            ],
            "name": "rollback",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "buyOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "erc1155TokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint128",
                    "name": "erc1155SellAmount",
                    "type": "uint128"
                },
                {
                    "internalType": "bool",
                    "name": "unwrapNativeToken",
                    "type": "bool"
                },
                {
                    "internalType": "bytes",
                    "name": "takerData",
                    "type": "bytes"
                }
            ],
            "name": "sellERC1155",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder",
                    "name": "buyOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "erc721TokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "unwrapNativeToken",
                    "type": "bool"
                },
                {
                    "internalType": "bytes",
                    "name": "takerData",
                    "type": "bytes"
                }
            ],
            "name": "sellERC721",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "buyOrder",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                },
                {
                    "internalType": "uint256",
                    "name": "erc1155TokenId",
                    "type": "uint256"
                },
                {
                    "internalType": "uint128",
                    "name": "erc1155SellAmount",
                    "type": "uint128"
                },
                {
                    "internalType": "bool",
                    "name": "unwrapNativeToken",
                    "type": "bool"
                },
                {
                    "internalType": "bytes",
                    "name": "callbackData",
                    "type": "bytes"
                }
            ],
            "name": "sellSharedERC1155",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "address[]",
                    "name": "tokens",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[][]",
                    "name": "tokenIds",
                    "type": "uint256[][]"
                }
            ],
            "name": "transferERC721s",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "address[]",
                    "name": "tokens",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[][]",
                    "name": "tokenIds",
                    "type": "uint256[][]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "transferERC721sEx",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "enum INFTransfersFeature.ItemType",
                            "name": "itemType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "ids",
                            "type": "uint256[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "amounts",
                            "type": "uint256[]"
                        }
                    ],
                    "internalType": "struct INFTransfersFeature.TransferItem[]",
                    "name": "items",
                    "type": "tuple[]"
                }
            ],
            "name": "transferItems",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "components": [
                        {
                            "internalType": "enum INFTransfersFeature.ItemType",
                            "name": "itemType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "address",
                            "name": "token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "ids",
                            "type": "uint256[]"
                        },
                        {
                            "internalType": "uint256[]",
                            "name": "amounts",
                            "type": "uint256[]"
                        }
                    ],
                    "internalType": "struct INFTransfersFeature.TransferItem[]",
                    "name": "items",
                    "type": "tuple[]"
                },
                {
                    "internalType": "bool",
                    "name": "revertIfIncomplete",
                    "type": "bool"
                }
            ],
            "name": "transferItemsEx",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "erc1155TokenProperties",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155BuyOrder",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                }
            ],
            "name": "validateERC1155BuyOrderSignature",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "erc1155Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc1155TokenId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint128",
                            "name": "erc1155TokenAmount",
                            "type": "uint128"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.ERC1155SellOrder",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                }
            ],
            "name": "validateERC1155SellOrderSignature",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "contract IPropertyValidator",
                                    "name": "propertyValidator",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "propertyData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Property[]",
                            "name": "nftProperties",
                            "type": "tuple[]"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTBuyOrder",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                }
            ],
            "name": "validateERC721BuyOrderSignature",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "maker",
                            "type": "address"
                        },
                        {
                            "internalType": "address",
                            "name": "taker",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "expiry",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nonce",
                            "type": "uint256"
                        },
                        {
                            "internalType": "contract IERC20",
                            "name": "erc20Token",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "erc20TokenAmount",
                            "type": "uint256"
                        },
                        {
                            "components": [
                                {
                                    "internalType": "address",
                                    "name": "recipient",
                                    "type": "address"
                                },
                                {
                                    "internalType": "uint256",
                                    "name": "amount",
                                    "type": "uint256"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "feeData",
                                    "type": "bytes"
                                }
                            ],
                            "internalType": "struct LibNFTOrder.Fee[]",
                            "name": "fees",
                            "type": "tuple[]"
                        },
                        {
                            "internalType": "address",
                            "name": "nft",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "nftId",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct LibNFTOrder.NFTSellOrder",
                    "name": "order",
                    "type": "tuple"
                },
                {
                    "components": [
                        {
                            "internalType": "enum LibSignature.SignatureType",
                            "name": "signatureType",
                            "type": "uint8"
                        },
                        {
                            "internalType": "uint8",
                            "name": "v",
                            "type": "uint8"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "r",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "s",
                            "type": "bytes32"
                        }
                    ],
                    "internalType": "struct LibSignature.Signature",
                    "name": "signature",
                    "type": "tuple"
                }
            ],
            "name": "validateERC721SellOrderSignature",
            "outputs": [],
            "stateMutability": "view",
            "type": "function"
        }
    ],
    "bytecode": "0x",
    "deployedBytecode": "0x",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
