github.com/fff-chain/go-fff@v0.0.0-20220726032732-1c84420b8a99/consensus/parlia/nft/nft.go (about)

     1  package nft
     2  
     3  // Code generated - DO NOT EDIT.
     4  // This file is a generated binding and any manual changes will be lost.
     5  
     6  import (
     7  	ethereum "github.com/fff-chain/go-fff"
     8  	"github.com/fff-chain/go-fff/accounts/abi"
     9  	"github.com/fff-chain/go-fff/accounts/abi/bind"
    10  	"github.com/fff-chain/go-fff/common"
    11  	"github.com/fff-chain/go-fff/core/types"
    12  	"github.com/fff-chain/go-fff/event"
    13  	"math/big"
    14  	"strings"
    15  )
    16  
    17  // Reference imports to suppress errors if they are not otherwise used.
    18  var (
    19  	_ = big.NewInt
    20  	_ = strings.NewReader
    21  	_ = ethereum.NotFound
    22  	_ = bind.Bind
    23  	_ = common.Big1
    24  	_ = types.BloomLookup
    25  	_ = event.NewSubscription
    26  )
    27  
    28  // AddressABI is the input ABI used to generate the binding from.
    29  const AddressABI = "[]"
    30  
    31  // AddressBin is the compiled bytecode used for deploying new contracts.
    32  var AddressBin = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd113caa0299b9707d70f3799c8f82d156fd8a97dd26cdad6fa2833dfaa48c6d64736f6c63430008030033"
    33  
    34  // DeployAddress deploys a new Ethereum contract, binding an instance of Address to it.
    35  func DeployAddress(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Address, error) {
    36  	parsed, err := abi.JSON(strings.NewReader(AddressABI))
    37  	if err != nil {
    38  		return common.Address{}, nil, nil, err
    39  	}
    40  
    41  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AddressBin), backend)
    42  	if err != nil {
    43  		return common.Address{}, nil, nil, err
    44  	}
    45  	return address, tx, &Address{AddressCaller: AddressCaller{contract: contract}, AddressTransactor: AddressTransactor{contract: contract}, AddressFilterer: AddressFilterer{contract: contract}}, nil
    46  }
    47  
    48  // Address is an auto generated Go binding around an Ethereum contract.
    49  type Address struct {
    50  	AddressCaller     // Read-only binding to the contract
    51  	AddressTransactor // Write-only binding to the contract
    52  	AddressFilterer   // Log filterer for contract events
    53  }
    54  
    55  // AddressCaller is an auto generated read-only Go binding around an Ethereum contract.
    56  type AddressCaller struct {
    57  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    58  }
    59  
    60  // AddressTransactor is an auto generated write-only Go binding around an Ethereum contract.
    61  type AddressTransactor struct {
    62  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    63  }
    64  
    65  // AddressFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
    66  type AddressFilterer struct {
    67  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    68  }
    69  
    70  // AddressSession is an auto generated Go binding around an Ethereum contract,
    71  // with pre-set call and transact options.
    72  type AddressSession struct {
    73  	Contract     *Address          // Generic contract binding to set the session for
    74  	CallOpts     bind.CallOpts     // Call options to use throughout this session
    75  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
    76  }
    77  
    78  // AddressCallerSession is an auto generated read-only Go binding around an Ethereum contract,
    79  // with pre-set call options.
    80  type AddressCallerSession struct {
    81  	Contract *AddressCaller // Generic contract caller binding to set the session for
    82  	CallOpts bind.CallOpts  // Call options to use throughout this session
    83  }
    84  
    85  // AddressTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
    86  // with pre-set transact options.
    87  type AddressTransactorSession struct {
    88  	Contract     *AddressTransactor // Generic contract transactor binding to set the session for
    89  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
    90  }
    91  
    92  // AddressRaw is an auto generated low-level Go binding around an Ethereum contract.
    93  type AddressRaw struct {
    94  	Contract *Address // Generic contract binding to access the raw methods on
    95  }
    96  
    97  // AddressCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
    98  type AddressCallerRaw struct {
    99  	Contract *AddressCaller // Generic read-only contract binding to access the raw methods on
   100  }
   101  
   102  // AddressTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   103  type AddressTransactorRaw struct {
   104  	Contract *AddressTransactor // Generic write-only contract binding to access the raw methods on
   105  }
   106  
   107  // NewAddress creates a new instance of Address, bound to a specific deployed contract.
   108  func NewAddress(address common.Address, backend bind.ContractBackend) (*Address, error) {
   109  	contract, err := bindAddress(address, backend, backend, backend)
   110  	if err != nil {
   111  		return nil, err
   112  	}
   113  	return &Address{AddressCaller: AddressCaller{contract: contract}, AddressTransactor: AddressTransactor{contract: contract}, AddressFilterer: AddressFilterer{contract: contract}}, nil
   114  }
   115  
   116  // NewAddressCaller creates a new read-only instance of Address, bound to a specific deployed contract.
   117  func NewAddressCaller(address common.Address, caller bind.ContractCaller) (*AddressCaller, error) {
   118  	contract, err := bindAddress(address, caller, nil, nil)
   119  	if err != nil {
   120  		return nil, err
   121  	}
   122  	return &AddressCaller{contract: contract}, nil
   123  }
   124  
   125  // NewAddressTransactor creates a new write-only instance of Address, bound to a specific deployed contract.
   126  func NewAddressTransactor(address common.Address, transactor bind.ContractTransactor) (*AddressTransactor, error) {
   127  	contract, err := bindAddress(address, nil, transactor, nil)
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  	return &AddressTransactor{contract: contract}, nil
   132  }
   133  
   134  // NewAddressFilterer creates a new log filterer instance of Address, bound to a specific deployed contract.
   135  func NewAddressFilterer(address common.Address, filterer bind.ContractFilterer) (*AddressFilterer, error) {
   136  	contract, err := bindAddress(address, nil, nil, filterer)
   137  	if err != nil {
   138  		return nil, err
   139  	}
   140  	return &AddressFilterer{contract: contract}, nil
   141  }
   142  
   143  // bindAddress binds a generic wrapper to an already deployed contract.
   144  func bindAddress(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   145  	parsed, err := abi.JSON(strings.NewReader(AddressABI))
   146  	if err != nil {
   147  		return nil, err
   148  	}
   149  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   150  }
   151  
   152  // Call invokes the (constant) contract method with params as input values and
   153  // sets the output to result. The result type might be a single field for simple
   154  // returns, a slice of interfaces for anonymous returns and a struct for named
   155  // returns.
   156  func (_Address *AddressRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   157  	return _Address.Contract.AddressCaller.contract.Call(opts, result, method, params...)
   158  }
   159  
   160  // Transfer initiates a plain transaction to move funds to the contract, calling
   161  // its default method if one is available.
   162  func (_Address *AddressRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   163  	return _Address.Contract.AddressTransactor.contract.Transfer(opts)
   164  }
   165  
   166  // Transact invokes the (paid) contract method with params as input values.
   167  func (_Address *AddressRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   168  	return _Address.Contract.AddressTransactor.contract.Transact(opts, method, params...)
   169  }
   170  
   171  // Call invokes the (constant) contract method with params as input values and
   172  // sets the output to result. The result type might be a single field for simple
   173  // returns, a slice of interfaces for anonymous returns and a struct for named
   174  // returns.
   175  func (_Address *AddressCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   176  	return _Address.Contract.contract.Call(opts, result, method, params...)
   177  }
   178  
   179  // Transfer initiates a plain transaction to move funds to the contract, calling
   180  // its default method if one is available.
   181  func (_Address *AddressTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   182  	return _Address.Contract.contract.Transfer(opts)
   183  }
   184  
   185  // Transact invokes the (paid) contract method with params as input values.
   186  func (_Address *AddressTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   187  	return _Address.Contract.contract.Transact(opts, method, params...)
   188  }
   189  
   190  // ContextABI is the input ABI used to generate the binding from.
   191  const ContextABI = "[]"
   192  
   193  // Context is an auto generated Go binding around an Ethereum contract.
   194  type Context struct {
   195  	ContextCaller     // Read-only binding to the contract
   196  	ContextTransactor // Write-only binding to the contract
   197  	ContextFilterer   // Log filterer for contract events
   198  }
   199  
   200  // ContextCaller is an auto generated read-only Go binding around an Ethereum contract.
   201  type ContextCaller struct {
   202  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   203  }
   204  
   205  // ContextTransactor is an auto generated write-only Go binding around an Ethereum contract.
   206  type ContextTransactor struct {
   207  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   208  }
   209  
   210  // ContextFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
   211  type ContextFilterer struct {
   212  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   213  }
   214  
   215  // ContextSession is an auto generated Go binding around an Ethereum contract,
   216  // with pre-set call and transact options.
   217  type ContextSession struct {
   218  	Contract     *Context          // Generic contract binding to set the session for
   219  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   220  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   221  }
   222  
   223  // ContextCallerSession is an auto generated read-only Go binding around an Ethereum contract,
   224  // with pre-set call options.
   225  type ContextCallerSession struct {
   226  	Contract *ContextCaller // Generic contract caller binding to set the session for
   227  	CallOpts bind.CallOpts  // Call options to use throughout this session
   228  }
   229  
   230  // ContextTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   231  // with pre-set transact options.
   232  type ContextTransactorSession struct {
   233  	Contract     *ContextTransactor // Generic contract transactor binding to set the session for
   234  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
   235  }
   236  
   237  // ContextRaw is an auto generated low-level Go binding around an Ethereum contract.
   238  type ContextRaw struct {
   239  	Contract *Context // Generic contract binding to access the raw methods on
   240  }
   241  
   242  // ContextCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   243  type ContextCallerRaw struct {
   244  	Contract *ContextCaller // Generic read-only contract binding to access the raw methods on
   245  }
   246  
   247  // ContextTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   248  type ContextTransactorRaw struct {
   249  	Contract *ContextTransactor // Generic write-only contract binding to access the raw methods on
   250  }
   251  
   252  // NewContext creates a new instance of Context, bound to a specific deployed contract.
   253  func NewContext(address common.Address, backend bind.ContractBackend) (*Context, error) {
   254  	contract, err := bindContext(address, backend, backend, backend)
   255  	if err != nil {
   256  		return nil, err
   257  	}
   258  	return &Context{ContextCaller: ContextCaller{contract: contract}, ContextTransactor: ContextTransactor{contract: contract}, ContextFilterer: ContextFilterer{contract: contract}}, nil
   259  }
   260  
   261  // NewContextCaller creates a new read-only instance of Context, bound to a specific deployed contract.
   262  func NewContextCaller(address common.Address, caller bind.ContractCaller) (*ContextCaller, error) {
   263  	contract, err := bindContext(address, caller, nil, nil)
   264  	if err != nil {
   265  		return nil, err
   266  	}
   267  	return &ContextCaller{contract: contract}, nil
   268  }
   269  
   270  // NewContextTransactor creates a new write-only instance of Context, bound to a specific deployed contract.
   271  func NewContextTransactor(address common.Address, transactor bind.ContractTransactor) (*ContextTransactor, error) {
   272  	contract, err := bindContext(address, nil, transactor, nil)
   273  	if err != nil {
   274  		return nil, err
   275  	}
   276  	return &ContextTransactor{contract: contract}, nil
   277  }
   278  
   279  // NewContextFilterer creates a new log filterer instance of Context, bound to a specific deployed contract.
   280  func NewContextFilterer(address common.Address, filterer bind.ContractFilterer) (*ContextFilterer, error) {
   281  	contract, err := bindContext(address, nil, nil, filterer)
   282  	if err != nil {
   283  		return nil, err
   284  	}
   285  	return &ContextFilterer{contract: contract}, nil
   286  }
   287  
   288  // bindContext binds a generic wrapper to an already deployed contract.
   289  func bindContext(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   290  	parsed, err := abi.JSON(strings.NewReader(ContextABI))
   291  	if err != nil {
   292  		return nil, err
   293  	}
   294  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   295  }
   296  
   297  // Call invokes the (constant) contract method with params as input values and
   298  // sets the output to result. The result type might be a single field for simple
   299  // returns, a slice of interfaces for anonymous returns and a struct for named
   300  // returns.
   301  func (_Context *ContextRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   302  	return _Context.Contract.ContextCaller.contract.Call(opts, result, method, params...)
   303  }
   304  
   305  // Transfer initiates a plain transaction to move funds to the contract, calling
   306  // its default method if one is available.
   307  func (_Context *ContextRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   308  	return _Context.Contract.ContextTransactor.contract.Transfer(opts)
   309  }
   310  
   311  // Transact invokes the (paid) contract method with params as input values.
   312  func (_Context *ContextRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   313  	return _Context.Contract.ContextTransactor.contract.Transact(opts, method, params...)
   314  }
   315  
   316  // Call invokes the (constant) contract method with params as input values and
   317  // sets the output to result. The result type might be a single field for simple
   318  // returns, a slice of interfaces for anonymous returns and a struct for named
   319  // returns.
   320  func (_Context *ContextCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   321  	return _Context.Contract.contract.Call(opts, result, method, params...)
   322  }
   323  
   324  // Transfer initiates a plain transaction to move funds to the contract, calling
   325  // its default method if one is available.
   326  func (_Context *ContextTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   327  	return _Context.Contract.contract.Transfer(opts)
   328  }
   329  
   330  // Transact invokes the (paid) contract method with params as input values.
   331  func (_Context *ContextTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   332  	return _Context.Contract.contract.Transact(opts, method, params...)
   333  }
   334  
   335  // ERC165ABI is the input ABI used to generate the binding from.
   336  const ERC165ABI = "[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]"
   337  
   338  // ERC165FuncSigs maps the 4-byte function signature to its string representation.
   339  var ERC165FuncSigs = map[string]string{
   340  	"01ffc9a7": "supportsInterface(bytes4)",
   341  }
   342  
   343  // ERC165 is an auto generated Go binding around an Ethereum contract.
   344  type ERC165 struct {
   345  	ERC165Caller     // Read-only binding to the contract
   346  	ERC165Transactor // Write-only binding to the contract
   347  	ERC165Filterer   // Log filterer for contract events
   348  }
   349  
   350  // ERC165Caller is an auto generated read-only Go binding around an Ethereum contract.
   351  type ERC165Caller struct {
   352  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   353  }
   354  
   355  // ERC165Transactor is an auto generated write-only Go binding around an Ethereum contract.
   356  type ERC165Transactor struct {
   357  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   358  }
   359  
   360  // ERC165Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
   361  type ERC165Filterer struct {
   362  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   363  }
   364  
   365  // ERC165Session is an auto generated Go binding around an Ethereum contract,
   366  // with pre-set call and transact options.
   367  type ERC165Session struct {
   368  	Contract     *ERC165           // Generic contract binding to set the session for
   369  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   370  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   371  }
   372  
   373  // ERC165CallerSession is an auto generated read-only Go binding around an Ethereum contract,
   374  // with pre-set call options.
   375  type ERC165CallerSession struct {
   376  	Contract *ERC165Caller // Generic contract caller binding to set the session for
   377  	CallOpts bind.CallOpts // Call options to use throughout this session
   378  }
   379  
   380  // ERC165TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   381  // with pre-set transact options.
   382  type ERC165TransactorSession struct {
   383  	Contract     *ERC165Transactor // Generic contract transactor binding to set the session for
   384  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   385  }
   386  
   387  // ERC165Raw is an auto generated low-level Go binding around an Ethereum contract.
   388  type ERC165Raw struct {
   389  	Contract *ERC165 // Generic contract binding to access the raw methods on
   390  }
   391  
   392  // ERC165CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   393  type ERC165CallerRaw struct {
   394  	Contract *ERC165Caller // Generic read-only contract binding to access the raw methods on
   395  }
   396  
   397  // ERC165TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   398  type ERC165TransactorRaw struct {
   399  	Contract *ERC165Transactor // Generic write-only contract binding to access the raw methods on
   400  }
   401  
   402  // NewERC165 creates a new instance of ERC165, bound to a specific deployed contract.
   403  func NewERC165(address common.Address, backend bind.ContractBackend) (*ERC165, error) {
   404  	contract, err := bindERC165(address, backend, backend, backend)
   405  	if err != nil {
   406  		return nil, err
   407  	}
   408  	return &ERC165{ERC165Caller: ERC165Caller{contract: contract}, ERC165Transactor: ERC165Transactor{contract: contract}, ERC165Filterer: ERC165Filterer{contract: contract}}, nil
   409  }
   410  
   411  // NewERC165Caller creates a new read-only instance of ERC165, bound to a specific deployed contract.
   412  func NewERC165Caller(address common.Address, caller bind.ContractCaller) (*ERC165Caller, error) {
   413  	contract, err := bindERC165(address, caller, nil, nil)
   414  	if err != nil {
   415  		return nil, err
   416  	}
   417  	return &ERC165Caller{contract: contract}, nil
   418  }
   419  
   420  // NewERC165Transactor creates a new write-only instance of ERC165, bound to a specific deployed contract.
   421  func NewERC165Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC165Transactor, error) {
   422  	contract, err := bindERC165(address, nil, transactor, nil)
   423  	if err != nil {
   424  		return nil, err
   425  	}
   426  	return &ERC165Transactor{contract: contract}, nil
   427  }
   428  
   429  // NewERC165Filterer creates a new log filterer instance of ERC165, bound to a specific deployed contract.
   430  func NewERC165Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC165Filterer, error) {
   431  	contract, err := bindERC165(address, nil, nil, filterer)
   432  	if err != nil {
   433  		return nil, err
   434  	}
   435  	return &ERC165Filterer{contract: contract}, nil
   436  }
   437  
   438  // bindERC165 binds a generic wrapper to an already deployed contract.
   439  func bindERC165(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   440  	parsed, err := abi.JSON(strings.NewReader(ERC165ABI))
   441  	if err != nil {
   442  		return nil, err
   443  	}
   444  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   445  }
   446  
   447  // Call invokes the (constant) contract method with params as input values and
   448  // sets the output to result. The result type might be a single field for simple
   449  // returns, a slice of interfaces for anonymous returns and a struct for named
   450  // returns.
   451  func (_ERC165 *ERC165Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   452  	return _ERC165.Contract.ERC165Caller.contract.Call(opts, result, method, params...)
   453  }
   454  
   455  // Transfer initiates a plain transaction to move funds to the contract, calling
   456  // its default method if one is available.
   457  func (_ERC165 *ERC165Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   458  	return _ERC165.Contract.ERC165Transactor.contract.Transfer(opts)
   459  }
   460  
   461  // Transact invokes the (paid) contract method with params as input values.
   462  func (_ERC165 *ERC165Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   463  	return _ERC165.Contract.ERC165Transactor.contract.Transact(opts, method, params...)
   464  }
   465  
   466  // Call invokes the (constant) contract method with params as input values and
   467  // sets the output to result. The result type might be a single field for simple
   468  // returns, a slice of interfaces for anonymous returns and a struct for named
   469  // returns.
   470  func (_ERC165 *ERC165CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   471  	return _ERC165.Contract.contract.Call(opts, result, method, params...)
   472  }
   473  
   474  // Transfer initiates a plain transaction to move funds to the contract, calling
   475  // its default method if one is available.
   476  func (_ERC165 *ERC165TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   477  	return _ERC165.Contract.contract.Transfer(opts)
   478  }
   479  
   480  // Transact invokes the (paid) contract method with params as input values.
   481  func (_ERC165 *ERC165TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   482  	return _ERC165.Contract.contract.Transact(opts, method, params...)
   483  }
   484  
   485  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   486  //
   487  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   488  func (_ERC165 *ERC165Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
   489  	var out []interface{}
   490  	err := _ERC165.contract.Call(opts, &out, "supportsInterface", interfaceId)
   491  
   492  	if err != nil {
   493  		return *new(bool), err
   494  	}
   495  
   496  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
   497  
   498  	return out0, err
   499  
   500  }
   501  
   502  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   503  //
   504  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   505  func (_ERC165 *ERC165Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
   506  	return _ERC165.Contract.SupportsInterface(&_ERC165.CallOpts, interfaceId)
   507  }
   508  
   509  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   510  //
   511  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   512  func (_ERC165 *ERC165CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
   513  	return _ERC165.Contract.SupportsInterface(&_ERC165.CallOpts, interfaceId)
   514  }
   515  
   516  // ERC721ABI is the input ABI used to generate the binding from.
   517  const ERC721ABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
   518  
   519  // ERC721FuncSigs maps the 4-byte function signature to its string representation.
   520  var ERC721FuncSigs = map[string]string{
   521  	"095ea7b3": "approve(address,uint256)",
   522  	"70a08231": "balanceOf(address)",
   523  	"6c0360eb": "baseURI()",
   524  	"081812fc": "getApproved(uint256)",
   525  	"e985e9c5": "isApprovedForAll(address,address)",
   526  	"06fdde03": "name()",
   527  	"6352211e": "ownerOf(uint256)",
   528  	"42842e0e": "safeTransferFrom(address,address,uint256)",
   529  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
   530  	"a22cb465": "setApprovalForAll(address,bool)",
   531  	"01ffc9a7": "supportsInterface(bytes4)",
   532  	"95d89b41": "symbol()",
   533  	"4f6ccce7": "tokenByIndex(uint256)",
   534  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
   535  	"c87b56dd": "tokenURI(uint256)",
   536  	"18160ddd": "totalSupply()",
   537  	"23b872dd": "transferFrom(address,address,uint256)",
   538  }
   539  
   540  // ERC721Bin is the compiled bytecode used for deploying new contracts.
   541  var ERC721Bin = "0x60806040523480156200001157600080fd5b5060405162001af638038062001af683398101604081905262000034916200028d565b620000466301ffc9a760e01b620000b0565b81516200005b90600690602085019062000134565b5080516200007190600790602084019062000134565b50620000846380ac58cd60e01b620000b0565b62000096635b5e139f60e01b620000b0565b620000a863780e9d6360e01b620000b0565b505062000347565b6001600160e01b031980821614156200010f5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b8280546200014290620002f4565b90600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b600082601f830112620001eb578081fd5b81516001600160401b038082111562000208576200020862000331565b604051601f8301601f19908116603f0116810190828211818310171562000233576200023362000331565b816040528381526020925086838588010111156200024f578485fd5b8491505b8382101562000272578582018301518183018401529082019062000253565b838211156200028357848385830101525b9695505050505050565b60008060408385031215620002a0578182fd5b82516001600160401b0380821115620002b7578384fd5b620002c586838701620001da565b93506020850151915080821115620002db578283fd5b50620002ea85828601620001da565b9150509250929050565b600181811c908216806200030957607f821691505b602082108114156200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61179f80620003576000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80634f6ccce7116100a257806395d89b411161007157806395d89b411461021d578063a22cb46514610225578063b88d4fde14610238578063c87b56dd1461024b578063e985e9c51461025e5761010b565b80634f6ccce7146101dc5780636352211e146101ef5780636c0360eb1461020257806370a082311461020a5761010b565b806318160ddd116100de57806318160ddd1461018d57806323b872dd146101a35780632f745c59146101b657806342842e0e146101c95761010b565b806301ffc9a71461011057806306fdde0314610138578063081812fc1461014d578063095ea7b314610178575b600080fd5b61012361011e36600461146e565b61029a565b60405190151581526020015b60405180910390f35b6101406102bd565b60405161012f9190611556565b61016061015b3660046114a6565b61034f565b6040516001600160a01b03909116815260200161012f565b61018b610186366004611445565b6103dc565b005b6101956104f2565b60405190815260200161012f565b61018b6101b13660046112fb565b610503565b6101956101c4366004611445565b610534565b61018b6101d73660046112fb565b61055f565b6101956101ea3660046114a6565b61057a565b6101606101fd3660046114a6565b610590565b6101406105b8565b6101956102183660046112af565b6105c7565b610140610653565b61018b61023336600461140b565b610662565b61018b610246366004611336565b610734565b6101406102593660046114a6565b61076c565b61012361026c3660046112c9565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b6060600680546102cc9061167b565b80601f01602080910402602001604051908101604052809291908181526020018280546102f89061167b565b80156103455780601f1061031a57610100808354040283529160200191610345565b820191906000526020600020905b81548152906001019060200180831161032857829003601f168201915b5050505050905090565b600061035a826108f7565b6103c05760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006103e782610590565b9050806001600160a01b0316836001600160a01b031614156104555760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016103b7565b336001600160a01b03821614806104715750610471813361026c565b6104e35760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016103b7565b6104ed8383610904565b505050565b60006104fe6002610972565b905090565b61050d338261097c565b6105295760405162461bcd60e51b81526004016103b7906115bb565b6104ed838383610a66565b6001600160a01b03821660009081526001602052604081206105569083610be7565b90505b92915050565b6104ed83838360405180602001604052806000815250610734565b600080610588600284610bf3565b509392505050565b6000610559826040518060600160405280602981526020016117416029913960029190610c0f565b6060600980546102cc9061167b565b60006001600160a01b0382166106325760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016103b7565b6001600160a01b038216600090815260016020526040902061055990610972565b6060600780546102cc9061167b565b6001600160a01b0382163314156106bb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016103b7565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610728911515815260200190565b60405180910390a35050565b61073e338361097c565b61075a5760405162461bcd60e51b81526004016103b7906115bb565b61076684848484610c26565b50505050565b6060610777826108f7565b6107db5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016103b7565b600082815260086020526040812080546107f49061167b565b80601f01602080910402602001604051908101604052809291908181526020018280546108209061167b565b801561086d5780601f106108425761010080835404028352916020019161086d565b820191906000526020600020905b81548152906001019060200180831161085057829003601f168201915b50505050509050600061087e6105b8565b9050805160001415610892575090506102b8565b8151156108c45780826040516020016108ac9291906114ea565b604051602081830303815290604052925050506102b8565b806108ce85610c59565b6040516020016108df9291906114ea565b60405160208183030381529060405292505050919050565b6000610559600283610d74565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061093982610590565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610559825490565b6000610987826108f7565b6109e85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016103b7565b60006109f383610590565b9050806001600160a01b0316846001600160a01b03161480610a2e5750836001600160a01b0316610a238461034f565b6001600160a01b0316145b80610a5e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610a7982610590565b6001600160a01b031614610ae15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016103b7565b6001600160a01b038216610b435760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016103b7565b610b4e600082610904565b6001600160a01b0383166000908152600160205260409020610b709082610d8c565b506001600160a01b0382166000908152600160205260409020610b939082610d98565b50610ba060028284610da4565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006105568383610dba565b6000808080610c028686610e4e565b9097909650945050505050565b6000610c1c848484610ef9565b90505b9392505050565b610c31848484610a66565b610c3d84848484610f70565b6107665760405162461bcd60e51b81526004016103b790611569565b606081610c7e57506040805180820190915260018152600360fc1b60208201526102b8565b8160005b8115610ca85780610c92816116b6565b9150610ca19050600a83611624565b9150610c82565b60008167ffffffffffffffff811115610cd157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610cfb576020820181803683370190505b5090505b8415610a5e57610d10600183611638565b9150610d1d600a866116d1565b610d2890603061160c565b60f81b818381518110610d4b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350610d6d600a86611624565b9450610cff565b60008181526001830160205260408120541515610556565b6000610556838361107d565b6000610556838361119a565b6000610c1c84846001600160a01b0385166111e9565b81546000908210610e185760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016103b7565b826000018281548110610e3b57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b815460009081908310610eae5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016103b7565b6000846000018481548110610ed357634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281610f295760405162461bcd60e51b81526004016103b79190611556565b5084610f36600183611638565b81548110610f5457634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101549150509392505050565b60006001600160a01b0384163b1561107257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610fb4903390899088908890600401611519565b602060405180830381600087803b158015610fce57600080fd5b505af1925050508015610ffe575060408051601f3d908101601f19168201909252610ffb9181019061148a565b60015b611058573d80801561102c576040519150601f19603f3d011682016040523d82523d6000602084013e611031565b606091505b5080516110505760405162461bcd60e51b81526004016103b790611569565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a5e565b506001949350505050565b600081815260018301602052604081205480156111905760006110a1600183611638565b85549091506000906110b590600190611638565b905060008660000182815481106110dc57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061110d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015561112483600161160c565b6000828152600189016020526040902055865487908061115457634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610559565b6000915050610559565b60008181526001830160205260408120546111e157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610559565b506000610559565b60008281526001840160205260408120548061124e575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055610c1f565b828561125b600184611638565b8154811061127957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050610c1f565b80356001600160a01b03811681146102b857600080fd5b6000602082840312156112c0578081fd5b61055682611298565b600080604083850312156112db578081fd5b6112e483611298565b91506112f260208401611298565b90509250929050565b60008060006060848603121561130f578081fd5b61131884611298565b925061132660208501611298565b9150604084013590509250925092565b6000806000806080858703121561134b578081fd5b61135485611298565b935061136260208601611298565b925060408501359150606085013567ffffffffffffffff80821115611385578283fd5b818701915087601f830112611398578283fd5b8135818111156113aa576113aa611711565b604051601f8201601f19908116603f011681019083821181831017156113d2576113d2611711565b816040528281528a60208487010111156113ea578586fd5b82602086016020830137918201602001949094529598949750929550505050565b6000806040838503121561141d578182fd5b61142683611298565b91506020830135801515811461143a578182fd5b809150509250929050565b60008060408385031215611457578182fd5b61146083611298565b946020939093013593505050565b60006020828403121561147f578081fd5b8135610c1f81611727565b60006020828403121561149b578081fd5b8151610c1f81611727565b6000602082840312156114b7578081fd5b5035919050565b600081518084526114d681602086016020860161164f565b601f01601f19169290920160200192915050565b600083516114fc81846020880161164f565b83519083019061151081836020880161164f565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061154c908301846114be565b9695505050505050565b60006020825261055660208301846114be565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000821982111561161f5761161f6116e5565b500190565b600082611633576116336116fb565b500490565b60008282101561164a5761164a6116e5565b500390565b60005b8381101561166a578181015183820152602001611652565b838111156107665750506000910152565b600181811c9082168061168f57607f821691505b602082108114156116b057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156116ca576116ca6116e5565b5060010190565b6000826116e0576116e06116fb565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461173d57600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220d4af7aec6cc2ca1c46995a5f806a5696a1a3b9adb85e72f06a1f25318ddcab5764736f6c63430008030033"
   542  
   543  // DeployERC721 deploys a new Ethereum contract, binding an instance of ERC721 to it.
   544  func DeployERC721(auth *bind.TransactOpts, backend bind.ContractBackend, name_ string, symbol_ string) (common.Address, *types.Transaction, *ERC721, error) {
   545  	parsed, err := abi.JSON(strings.NewReader(ERC721ABI))
   546  	if err != nil {
   547  		return common.Address{}, nil, nil, err
   548  	}
   549  
   550  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(ERC721Bin), backend, name_, symbol_)
   551  	if err != nil {
   552  		return common.Address{}, nil, nil, err
   553  	}
   554  	return address, tx, &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil
   555  }
   556  
   557  // ERC721 is an auto generated Go binding around an Ethereum contract.
   558  type ERC721 struct {
   559  	ERC721Caller     // Read-only binding to the contract
   560  	ERC721Transactor // Write-only binding to the contract
   561  	ERC721Filterer   // Log filterer for contract events
   562  }
   563  
   564  // ERC721Caller is an auto generated read-only Go binding around an Ethereum contract.
   565  type ERC721Caller struct {
   566  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   567  }
   568  
   569  // ERC721Transactor is an auto generated write-only Go binding around an Ethereum contract.
   570  type ERC721Transactor struct {
   571  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   572  }
   573  
   574  // ERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
   575  type ERC721Filterer struct {
   576  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   577  }
   578  
   579  // ERC721Session is an auto generated Go binding around an Ethereum contract,
   580  // with pre-set call and transact options.
   581  type ERC721Session struct {
   582  	Contract     *ERC721           // Generic contract binding to set the session for
   583  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   584  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   585  }
   586  
   587  // ERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract,
   588  // with pre-set call options.
   589  type ERC721CallerSession struct {
   590  	Contract *ERC721Caller // Generic contract caller binding to set the session for
   591  	CallOpts bind.CallOpts // Call options to use throughout this session
   592  }
   593  
   594  // ERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   595  // with pre-set transact options.
   596  type ERC721TransactorSession struct {
   597  	Contract     *ERC721Transactor // Generic contract transactor binding to set the session for
   598  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   599  }
   600  
   601  // ERC721Raw is an auto generated low-level Go binding around an Ethereum contract.
   602  type ERC721Raw struct {
   603  	Contract *ERC721 // Generic contract binding to access the raw methods on
   604  }
   605  
   606  // ERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   607  type ERC721CallerRaw struct {
   608  	Contract *ERC721Caller // Generic read-only contract binding to access the raw methods on
   609  }
   610  
   611  // ERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   612  type ERC721TransactorRaw struct {
   613  	Contract *ERC721Transactor // Generic write-only contract binding to access the raw methods on
   614  }
   615  
   616  // NewERC721 creates a new instance of ERC721, bound to a specific deployed contract.
   617  func NewERC721(address common.Address, backend bind.ContractBackend) (*ERC721, error) {
   618  	contract, err := bindERC721(address, backend, backend, backend)
   619  	if err != nil {
   620  		return nil, err
   621  	}
   622  	return &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil
   623  }
   624  
   625  // NewERC721Caller creates a new read-only instance of ERC721, bound to a specific deployed contract.
   626  func NewERC721Caller(address common.Address, caller bind.ContractCaller) (*ERC721Caller, error) {
   627  	contract, err := bindERC721(address, caller, nil, nil)
   628  	if err != nil {
   629  		return nil, err
   630  	}
   631  	return &ERC721Caller{contract: contract}, nil
   632  }
   633  
   634  // NewERC721Transactor creates a new write-only instance of ERC721, bound to a specific deployed contract.
   635  func NewERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC721Transactor, error) {
   636  	contract, err := bindERC721(address, nil, transactor, nil)
   637  	if err != nil {
   638  		return nil, err
   639  	}
   640  	return &ERC721Transactor{contract: contract}, nil
   641  }
   642  
   643  // NewERC721Filterer creates a new log filterer instance of ERC721, bound to a specific deployed contract.
   644  func NewERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC721Filterer, error) {
   645  	contract, err := bindERC721(address, nil, nil, filterer)
   646  	if err != nil {
   647  		return nil, err
   648  	}
   649  	return &ERC721Filterer{contract: contract}, nil
   650  }
   651  
   652  // bindERC721 binds a generic wrapper to an already deployed contract.
   653  func bindERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   654  	parsed, err := abi.JSON(strings.NewReader(ERC721ABI))
   655  	if err != nil {
   656  		return nil, err
   657  	}
   658  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   659  }
   660  
   661  // Call invokes the (constant) contract method with params as input values and
   662  // sets the output to result. The result type might be a single field for simple
   663  // returns, a slice of interfaces for anonymous returns and a struct for named
   664  // returns.
   665  func (_ERC721 *ERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   666  	return _ERC721.Contract.ERC721Caller.contract.Call(opts, result, method, params...)
   667  }
   668  
   669  // Transfer initiates a plain transaction to move funds to the contract, calling
   670  // its default method if one is available.
   671  func (_ERC721 *ERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   672  	return _ERC721.Contract.ERC721Transactor.contract.Transfer(opts)
   673  }
   674  
   675  // Transact invokes the (paid) contract method with params as input values.
   676  func (_ERC721 *ERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   677  	return _ERC721.Contract.ERC721Transactor.contract.Transact(opts, method, params...)
   678  }
   679  
   680  // Call invokes the (constant) contract method with params as input values and
   681  // sets the output to result. The result type might be a single field for simple
   682  // returns, a slice of interfaces for anonymous returns and a struct for named
   683  // returns.
   684  func (_ERC721 *ERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   685  	return _ERC721.Contract.contract.Call(opts, result, method, params...)
   686  }
   687  
   688  // Transfer initiates a plain transaction to move funds to the contract, calling
   689  // its default method if one is available.
   690  func (_ERC721 *ERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   691  	return _ERC721.Contract.contract.Transfer(opts)
   692  }
   693  
   694  // Transact invokes the (paid) contract method with params as input values.
   695  func (_ERC721 *ERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   696  	return _ERC721.Contract.contract.Transact(opts, method, params...)
   697  }
   698  
   699  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   700  //
   701  // Solidity: function balanceOf(address owner) view returns(uint256)
   702  func (_ERC721 *ERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
   703  	var out []interface{}
   704  	err := _ERC721.contract.Call(opts, &out, "balanceOf", owner)
   705  
   706  	if err != nil {
   707  		return *new(*big.Int), err
   708  	}
   709  
   710  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   711  
   712  	return out0, err
   713  
   714  }
   715  
   716  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   717  //
   718  // Solidity: function balanceOf(address owner) view returns(uint256)
   719  func (_ERC721 *ERC721Session) BalanceOf(owner common.Address) (*big.Int, error) {
   720  	return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner)
   721  }
   722  
   723  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   724  //
   725  // Solidity: function balanceOf(address owner) view returns(uint256)
   726  func (_ERC721 *ERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
   727  	return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner)
   728  }
   729  
   730  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
   731  //
   732  // Solidity: function baseURI() view returns(string)
   733  func (_ERC721 *ERC721Caller) BaseURI(opts *bind.CallOpts) (string, error) {
   734  	var out []interface{}
   735  	err := _ERC721.contract.Call(opts, &out, "baseURI")
   736  
   737  	if err != nil {
   738  		return *new(string), err
   739  	}
   740  
   741  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   742  
   743  	return out0, err
   744  
   745  }
   746  
   747  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
   748  //
   749  // Solidity: function baseURI() view returns(string)
   750  func (_ERC721 *ERC721Session) BaseURI() (string, error) {
   751  	return _ERC721.Contract.BaseURI(&_ERC721.CallOpts)
   752  }
   753  
   754  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
   755  //
   756  // Solidity: function baseURI() view returns(string)
   757  func (_ERC721 *ERC721CallerSession) BaseURI() (string, error) {
   758  	return _ERC721.Contract.BaseURI(&_ERC721.CallOpts)
   759  }
   760  
   761  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
   762  //
   763  // Solidity: function getApproved(uint256 tokenId) view returns(address)
   764  func (_ERC721 *ERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
   765  	var out []interface{}
   766  	err := _ERC721.contract.Call(opts, &out, "getApproved", tokenId)
   767  
   768  	if err != nil {
   769  		return *new(common.Address), err
   770  	}
   771  
   772  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   773  
   774  	return out0, err
   775  
   776  }
   777  
   778  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
   779  //
   780  // Solidity: function getApproved(uint256 tokenId) view returns(address)
   781  func (_ERC721 *ERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) {
   782  	return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId)
   783  }
   784  
   785  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
   786  //
   787  // Solidity: function getApproved(uint256 tokenId) view returns(address)
   788  func (_ERC721 *ERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
   789  	return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId)
   790  }
   791  
   792  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
   793  //
   794  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
   795  func (_ERC721 *ERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
   796  	var out []interface{}
   797  	err := _ERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
   798  
   799  	if err != nil {
   800  		return *new(bool), err
   801  	}
   802  
   803  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
   804  
   805  	return out0, err
   806  
   807  }
   808  
   809  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
   810  //
   811  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
   812  func (_ERC721 *ERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
   813  	return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator)
   814  }
   815  
   816  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
   817  //
   818  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
   819  func (_ERC721 *ERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
   820  	return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator)
   821  }
   822  
   823  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   824  //
   825  // Solidity: function name() view returns(string)
   826  func (_ERC721 *ERC721Caller) Name(opts *bind.CallOpts) (string, error) {
   827  	var out []interface{}
   828  	err := _ERC721.contract.Call(opts, &out, "name")
   829  
   830  	if err != nil {
   831  		return *new(string), err
   832  	}
   833  
   834  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   835  
   836  	return out0, err
   837  
   838  }
   839  
   840  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   841  //
   842  // Solidity: function name() view returns(string)
   843  func (_ERC721 *ERC721Session) Name() (string, error) {
   844  	return _ERC721.Contract.Name(&_ERC721.CallOpts)
   845  }
   846  
   847  // Name is a free data retrieval call binding the contract method 0x06fdde03.
   848  //
   849  // Solidity: function name() view returns(string)
   850  func (_ERC721 *ERC721CallerSession) Name() (string, error) {
   851  	return _ERC721.Contract.Name(&_ERC721.CallOpts)
   852  }
   853  
   854  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
   855  //
   856  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
   857  func (_ERC721 *ERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
   858  	var out []interface{}
   859  	err := _ERC721.contract.Call(opts, &out, "ownerOf", tokenId)
   860  
   861  	if err != nil {
   862  		return *new(common.Address), err
   863  	}
   864  
   865  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   866  
   867  	return out0, err
   868  
   869  }
   870  
   871  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
   872  //
   873  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
   874  func (_ERC721 *ERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) {
   875  	return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId)
   876  }
   877  
   878  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
   879  //
   880  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
   881  func (_ERC721 *ERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
   882  	return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId)
   883  }
   884  
   885  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   886  //
   887  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   888  func (_ERC721 *ERC721Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
   889  	var out []interface{}
   890  	err := _ERC721.contract.Call(opts, &out, "supportsInterface", interfaceId)
   891  
   892  	if err != nil {
   893  		return *new(bool), err
   894  	}
   895  
   896  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
   897  
   898  	return out0, err
   899  
   900  }
   901  
   902  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   903  //
   904  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   905  func (_ERC721 *ERC721Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
   906  	return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId)
   907  }
   908  
   909  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   910  //
   911  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   912  func (_ERC721 *ERC721CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
   913  	return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId)
   914  }
   915  
   916  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   917  //
   918  // Solidity: function symbol() view returns(string)
   919  func (_ERC721 *ERC721Caller) Symbol(opts *bind.CallOpts) (string, error) {
   920  	var out []interface{}
   921  	err := _ERC721.contract.Call(opts, &out, "symbol")
   922  
   923  	if err != nil {
   924  		return *new(string), err
   925  	}
   926  
   927  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
   928  
   929  	return out0, err
   930  
   931  }
   932  
   933  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   934  //
   935  // Solidity: function symbol() view returns(string)
   936  func (_ERC721 *ERC721Session) Symbol() (string, error) {
   937  	return _ERC721.Contract.Symbol(&_ERC721.CallOpts)
   938  }
   939  
   940  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
   941  //
   942  // Solidity: function symbol() view returns(string)
   943  func (_ERC721 *ERC721CallerSession) Symbol() (string, error) {
   944  	return _ERC721.Contract.Symbol(&_ERC721.CallOpts)
   945  }
   946  
   947  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
   948  //
   949  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
   950  func (_ERC721 *ERC721Caller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
   951  	var out []interface{}
   952  	err := _ERC721.contract.Call(opts, &out, "tokenByIndex", index)
   953  
   954  	if err != nil {
   955  		return *new(*big.Int), err
   956  	}
   957  
   958  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   959  
   960  	return out0, err
   961  
   962  }
   963  
   964  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
   965  //
   966  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
   967  func (_ERC721 *ERC721Session) TokenByIndex(index *big.Int) (*big.Int, error) {
   968  	return _ERC721.Contract.TokenByIndex(&_ERC721.CallOpts, index)
   969  }
   970  
   971  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
   972  //
   973  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
   974  func (_ERC721 *ERC721CallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
   975  	return _ERC721.Contract.TokenByIndex(&_ERC721.CallOpts, index)
   976  }
   977  
   978  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
   979  //
   980  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
   981  func (_ERC721 *ERC721Caller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
   982  	var out []interface{}
   983  	err := _ERC721.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
   984  
   985  	if err != nil {
   986  		return *new(*big.Int), err
   987  	}
   988  
   989  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   990  
   991  	return out0, err
   992  
   993  }
   994  
   995  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
   996  //
   997  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
   998  func (_ERC721 *ERC721Session) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
   999  	return _ERC721.Contract.TokenOfOwnerByIndex(&_ERC721.CallOpts, owner, index)
  1000  }
  1001  
  1002  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  1003  //
  1004  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  1005  func (_ERC721 *ERC721CallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  1006  	return _ERC721.Contract.TokenOfOwnerByIndex(&_ERC721.CallOpts, owner, index)
  1007  }
  1008  
  1009  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  1010  //
  1011  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  1012  func (_ERC721 *ERC721Caller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  1013  	var out []interface{}
  1014  	err := _ERC721.contract.Call(opts, &out, "tokenURI", tokenId)
  1015  
  1016  	if err != nil {
  1017  		return *new(string), err
  1018  	}
  1019  
  1020  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1021  
  1022  	return out0, err
  1023  
  1024  }
  1025  
  1026  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  1027  //
  1028  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  1029  func (_ERC721 *ERC721Session) TokenURI(tokenId *big.Int) (string, error) {
  1030  	return _ERC721.Contract.TokenURI(&_ERC721.CallOpts, tokenId)
  1031  }
  1032  
  1033  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  1034  //
  1035  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  1036  func (_ERC721 *ERC721CallerSession) TokenURI(tokenId *big.Int) (string, error) {
  1037  	return _ERC721.Contract.TokenURI(&_ERC721.CallOpts, tokenId)
  1038  }
  1039  
  1040  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1041  //
  1042  // Solidity: function totalSupply() view returns(uint256)
  1043  func (_ERC721 *ERC721Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  1044  	var out []interface{}
  1045  	err := _ERC721.contract.Call(opts, &out, "totalSupply")
  1046  
  1047  	if err != nil {
  1048  		return *new(*big.Int), err
  1049  	}
  1050  
  1051  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1052  
  1053  	return out0, err
  1054  
  1055  }
  1056  
  1057  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1058  //
  1059  // Solidity: function totalSupply() view returns(uint256)
  1060  func (_ERC721 *ERC721Session) TotalSupply() (*big.Int, error) {
  1061  	return _ERC721.Contract.TotalSupply(&_ERC721.CallOpts)
  1062  }
  1063  
  1064  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1065  //
  1066  // Solidity: function totalSupply() view returns(uint256)
  1067  func (_ERC721 *ERC721CallerSession) TotalSupply() (*big.Int, error) {
  1068  	return _ERC721.Contract.TotalSupply(&_ERC721.CallOpts)
  1069  }
  1070  
  1071  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1072  //
  1073  // Solidity: function approve(address to, uint256 tokenId) returns()
  1074  func (_ERC721 *ERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1075  	return _ERC721.contract.Transact(opts, "approve", to, tokenId)
  1076  }
  1077  
  1078  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1079  //
  1080  // Solidity: function approve(address to, uint256 tokenId) returns()
  1081  func (_ERC721 *ERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1082  	return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId)
  1083  }
  1084  
  1085  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1086  //
  1087  // Solidity: function approve(address to, uint256 tokenId) returns()
  1088  func (_ERC721 *ERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1089  	return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId)
  1090  }
  1091  
  1092  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  1093  //
  1094  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  1095  func (_ERC721 *ERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1096  	return _ERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  1097  }
  1098  
  1099  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  1100  //
  1101  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  1102  func (_ERC721 *ERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1103  	return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1104  }
  1105  
  1106  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  1107  //
  1108  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  1109  func (_ERC721 *ERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1110  	return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1111  }
  1112  
  1113  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  1114  //
  1115  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  1116  func (_ERC721 *ERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  1117  	return _ERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  1118  }
  1119  
  1120  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  1121  //
  1122  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  1123  func (_ERC721 *ERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  1124  	return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, _data)
  1125  }
  1126  
  1127  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  1128  //
  1129  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  1130  func (_ERC721 *ERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  1131  	return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, _data)
  1132  }
  1133  
  1134  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  1135  //
  1136  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  1137  func (_ERC721 *ERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) {
  1138  	return _ERC721.contract.Transact(opts, "setApprovalForAll", operator, approved)
  1139  }
  1140  
  1141  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  1142  //
  1143  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  1144  func (_ERC721 *ERC721Session) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
  1145  	return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, operator, approved)
  1146  }
  1147  
  1148  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  1149  //
  1150  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  1151  func (_ERC721 *ERC721TransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
  1152  	return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, operator, approved)
  1153  }
  1154  
  1155  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1156  //
  1157  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  1158  func (_ERC721 *ERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1159  	return _ERC721.contract.Transact(opts, "transferFrom", from, to, tokenId)
  1160  }
  1161  
  1162  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1163  //
  1164  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  1165  func (_ERC721 *ERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1166  	return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1167  }
  1168  
  1169  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1170  //
  1171  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  1172  func (_ERC721 *ERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1173  	return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1174  }
  1175  
  1176  // ERC721ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721 contract.
  1177  type ERC721ApprovalIterator struct {
  1178  	Event *ERC721Approval // Event containing the contract specifics and raw log
  1179  
  1180  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1181  	event    string              // Event name to use for unpacking event data
  1182  
  1183  	logs chan types.Log        // Log channel receiving the found contract events
  1184  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1185  	done bool                  // Whether the subscription completed delivering logs
  1186  	fail error                 // Occurred error to stop iteration
  1187  }
  1188  
  1189  // Next advances the iterator to the subsequent event, returning whether there
  1190  // are any more events found. In case of a retrieval or parsing error, false is
  1191  // returned and Error() can be queried for the exact failure.
  1192  func (it *ERC721ApprovalIterator) Next() bool {
  1193  	// If the iterator failed, stop iterating
  1194  	if it.fail != nil {
  1195  		return false
  1196  	}
  1197  	// If the iterator completed, deliver directly whatever's available
  1198  	if it.done {
  1199  		select {
  1200  		case log := <-it.logs:
  1201  			it.Event = new(ERC721Approval)
  1202  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1203  				it.fail = err
  1204  				return false
  1205  			}
  1206  			it.Event.Raw = log
  1207  			return true
  1208  
  1209  		default:
  1210  			return false
  1211  		}
  1212  	}
  1213  	// Iterator still in progress, wait for either a data or an error event
  1214  	select {
  1215  	case log := <-it.logs:
  1216  		it.Event = new(ERC721Approval)
  1217  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1218  			it.fail = err
  1219  			return false
  1220  		}
  1221  		it.Event.Raw = log
  1222  		return true
  1223  
  1224  	case err := <-it.sub.Err():
  1225  		it.done = true
  1226  		it.fail = err
  1227  		return it.Next()
  1228  	}
  1229  }
  1230  
  1231  // Error returns any retrieval or parsing error occurred during filtering.
  1232  func (it *ERC721ApprovalIterator) Error() error {
  1233  	return it.fail
  1234  }
  1235  
  1236  // Close terminates the iteration process, releasing any pending underlying
  1237  // resources.
  1238  func (it *ERC721ApprovalIterator) Close() error {
  1239  	it.sub.Unsubscribe()
  1240  	return nil
  1241  }
  1242  
  1243  // ERC721Approval represents a Approval event raised by the ERC721 contract.
  1244  type ERC721Approval struct {
  1245  	Owner    common.Address
  1246  	Approved common.Address
  1247  	TokenId  *big.Int
  1248  	Raw      types.Log // Blockchain specific contextual infos
  1249  }
  1250  
  1251  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1252  //
  1253  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  1254  func (_ERC721 *ERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721ApprovalIterator, error) {
  1255  
  1256  	var ownerRule []interface{}
  1257  	for _, ownerItem := range owner {
  1258  		ownerRule = append(ownerRule, ownerItem)
  1259  	}
  1260  	var approvedRule []interface{}
  1261  	for _, approvedItem := range approved {
  1262  		approvedRule = append(approvedRule, approvedItem)
  1263  	}
  1264  	var tokenIdRule []interface{}
  1265  	for _, tokenIdItem := range tokenId {
  1266  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1267  	}
  1268  
  1269  	logs, sub, err := _ERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  1270  	if err != nil {
  1271  		return nil, err
  1272  	}
  1273  	return &ERC721ApprovalIterator{contract: _ERC721.contract, event: "Approval", logs: logs, sub: sub}, nil
  1274  }
  1275  
  1276  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1277  //
  1278  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  1279  func (_ERC721 *ERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  1280  
  1281  	var ownerRule []interface{}
  1282  	for _, ownerItem := range owner {
  1283  		ownerRule = append(ownerRule, ownerItem)
  1284  	}
  1285  	var approvedRule []interface{}
  1286  	for _, approvedItem := range approved {
  1287  		approvedRule = append(approvedRule, approvedItem)
  1288  	}
  1289  	var tokenIdRule []interface{}
  1290  	for _, tokenIdItem := range tokenId {
  1291  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1292  	}
  1293  
  1294  	logs, sub, err := _ERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  1295  	if err != nil {
  1296  		return nil, err
  1297  	}
  1298  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1299  		defer sub.Unsubscribe()
  1300  		for {
  1301  			select {
  1302  			case log := <-logs:
  1303  				// New log arrived, parse the event and forward to the user
  1304  				event := new(ERC721Approval)
  1305  				if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  1306  					return err
  1307  				}
  1308  				event.Raw = log
  1309  
  1310  				select {
  1311  				case sink <- event:
  1312  				case err := <-sub.Err():
  1313  					return err
  1314  				case <-quit:
  1315  					return nil
  1316  				}
  1317  			case err := <-sub.Err():
  1318  				return err
  1319  			case <-quit:
  1320  				return nil
  1321  			}
  1322  		}
  1323  	}), nil
  1324  }
  1325  
  1326  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1327  //
  1328  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  1329  func (_ERC721 *ERC721Filterer) ParseApproval(log types.Log) (*ERC721Approval, error) {
  1330  	event := new(ERC721Approval)
  1331  	if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  1332  		return nil, err
  1333  	}
  1334  	event.Raw = log
  1335  	return event, nil
  1336  }
  1337  
  1338  // ERC721ApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721 contract.
  1339  type ERC721ApprovalForAllIterator struct {
  1340  	Event *ERC721ApprovalForAll // Event containing the contract specifics and raw log
  1341  
  1342  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1343  	event    string              // Event name to use for unpacking event data
  1344  
  1345  	logs chan types.Log        // Log channel receiving the found contract events
  1346  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1347  	done bool                  // Whether the subscription completed delivering logs
  1348  	fail error                 // Occurred error to stop iteration
  1349  }
  1350  
  1351  // Next advances the iterator to the subsequent event, returning whether there
  1352  // are any more events found. In case of a retrieval or parsing error, false is
  1353  // returned and Error() can be queried for the exact failure.
  1354  func (it *ERC721ApprovalForAllIterator) Next() bool {
  1355  	// If the iterator failed, stop iterating
  1356  	if it.fail != nil {
  1357  		return false
  1358  	}
  1359  	// If the iterator completed, deliver directly whatever's available
  1360  	if it.done {
  1361  		select {
  1362  		case log := <-it.logs:
  1363  			it.Event = new(ERC721ApprovalForAll)
  1364  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1365  				it.fail = err
  1366  				return false
  1367  			}
  1368  			it.Event.Raw = log
  1369  			return true
  1370  
  1371  		default:
  1372  			return false
  1373  		}
  1374  	}
  1375  	// Iterator still in progress, wait for either a data or an error event
  1376  	select {
  1377  	case log := <-it.logs:
  1378  		it.Event = new(ERC721ApprovalForAll)
  1379  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1380  			it.fail = err
  1381  			return false
  1382  		}
  1383  		it.Event.Raw = log
  1384  		return true
  1385  
  1386  	case err := <-it.sub.Err():
  1387  		it.done = true
  1388  		it.fail = err
  1389  		return it.Next()
  1390  	}
  1391  }
  1392  
  1393  // Error returns any retrieval or parsing error occurred during filtering.
  1394  func (it *ERC721ApprovalForAllIterator) Error() error {
  1395  	return it.fail
  1396  }
  1397  
  1398  // Close terminates the iteration process, releasing any pending underlying
  1399  // resources.
  1400  func (it *ERC721ApprovalForAllIterator) Close() error {
  1401  	it.sub.Unsubscribe()
  1402  	return nil
  1403  }
  1404  
  1405  // ERC721ApprovalForAll represents a ApprovalForAll event raised by the ERC721 contract.
  1406  type ERC721ApprovalForAll struct {
  1407  	Owner    common.Address
  1408  	Operator common.Address
  1409  	Approved bool
  1410  	Raw      types.Log // Blockchain specific contextual infos
  1411  }
  1412  
  1413  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  1414  //
  1415  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  1416  func (_ERC721 *ERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721ApprovalForAllIterator, error) {
  1417  
  1418  	var ownerRule []interface{}
  1419  	for _, ownerItem := range owner {
  1420  		ownerRule = append(ownerRule, ownerItem)
  1421  	}
  1422  	var operatorRule []interface{}
  1423  	for _, operatorItem := range operator {
  1424  		operatorRule = append(operatorRule, operatorItem)
  1425  	}
  1426  
  1427  	logs, sub, err := _ERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  1428  	if err != nil {
  1429  		return nil, err
  1430  	}
  1431  	return &ERC721ApprovalForAllIterator{contract: _ERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  1432  }
  1433  
  1434  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  1435  //
  1436  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  1437  func (_ERC721 *ERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  1438  
  1439  	var ownerRule []interface{}
  1440  	for _, ownerItem := range owner {
  1441  		ownerRule = append(ownerRule, ownerItem)
  1442  	}
  1443  	var operatorRule []interface{}
  1444  	for _, operatorItem := range operator {
  1445  		operatorRule = append(operatorRule, operatorItem)
  1446  	}
  1447  
  1448  	logs, sub, err := _ERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  1449  	if err != nil {
  1450  		return nil, err
  1451  	}
  1452  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1453  		defer sub.Unsubscribe()
  1454  		for {
  1455  			select {
  1456  			case log := <-logs:
  1457  				// New log arrived, parse the event and forward to the user
  1458  				event := new(ERC721ApprovalForAll)
  1459  				if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  1460  					return err
  1461  				}
  1462  				event.Raw = log
  1463  
  1464  				select {
  1465  				case sink <- event:
  1466  				case err := <-sub.Err():
  1467  					return err
  1468  				case <-quit:
  1469  					return nil
  1470  				}
  1471  			case err := <-sub.Err():
  1472  				return err
  1473  			case <-quit:
  1474  				return nil
  1475  			}
  1476  		}
  1477  	}), nil
  1478  }
  1479  
  1480  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  1481  //
  1482  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  1483  func (_ERC721 *ERC721Filterer) ParseApprovalForAll(log types.Log) (*ERC721ApprovalForAll, error) {
  1484  	event := new(ERC721ApprovalForAll)
  1485  	if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  1486  		return nil, err
  1487  	}
  1488  	event.Raw = log
  1489  	return event, nil
  1490  }
  1491  
  1492  // ERC721TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721 contract.
  1493  type ERC721TransferIterator struct {
  1494  	Event *ERC721Transfer // Event containing the contract specifics and raw log
  1495  
  1496  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1497  	event    string              // Event name to use for unpacking event data
  1498  
  1499  	logs chan types.Log        // Log channel receiving the found contract events
  1500  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1501  	done bool                  // Whether the subscription completed delivering logs
  1502  	fail error                 // Occurred error to stop iteration
  1503  }
  1504  
  1505  // Next advances the iterator to the subsequent event, returning whether there
  1506  // are any more events found. In case of a retrieval or parsing error, false is
  1507  // returned and Error() can be queried for the exact failure.
  1508  func (it *ERC721TransferIterator) Next() bool {
  1509  	// If the iterator failed, stop iterating
  1510  	if it.fail != nil {
  1511  		return false
  1512  	}
  1513  	// If the iterator completed, deliver directly whatever's available
  1514  	if it.done {
  1515  		select {
  1516  		case log := <-it.logs:
  1517  			it.Event = new(ERC721Transfer)
  1518  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1519  				it.fail = err
  1520  				return false
  1521  			}
  1522  			it.Event.Raw = log
  1523  			return true
  1524  
  1525  		default:
  1526  			return false
  1527  		}
  1528  	}
  1529  	// Iterator still in progress, wait for either a data or an error event
  1530  	select {
  1531  	case log := <-it.logs:
  1532  		it.Event = new(ERC721Transfer)
  1533  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1534  			it.fail = err
  1535  			return false
  1536  		}
  1537  		it.Event.Raw = log
  1538  		return true
  1539  
  1540  	case err := <-it.sub.Err():
  1541  		it.done = true
  1542  		it.fail = err
  1543  		return it.Next()
  1544  	}
  1545  }
  1546  
  1547  // Error returns any retrieval or parsing error occurred during filtering.
  1548  func (it *ERC721TransferIterator) Error() error {
  1549  	return it.fail
  1550  }
  1551  
  1552  // Close terminates the iteration process, releasing any pending underlying
  1553  // resources.
  1554  func (it *ERC721TransferIterator) Close() error {
  1555  	it.sub.Unsubscribe()
  1556  	return nil
  1557  }
  1558  
  1559  // ERC721Transfer represents a Transfer event raised by the ERC721 contract.
  1560  type ERC721Transfer struct {
  1561  	From    common.Address
  1562  	To      common.Address
  1563  	TokenId *big.Int
  1564  	Raw     types.Log // Blockchain specific contextual infos
  1565  }
  1566  
  1567  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1568  //
  1569  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  1570  func (_ERC721 *ERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721TransferIterator, error) {
  1571  
  1572  	var fromRule []interface{}
  1573  	for _, fromItem := range from {
  1574  		fromRule = append(fromRule, fromItem)
  1575  	}
  1576  	var toRule []interface{}
  1577  	for _, toItem := range to {
  1578  		toRule = append(toRule, toItem)
  1579  	}
  1580  	var tokenIdRule []interface{}
  1581  	for _, tokenIdItem := range tokenId {
  1582  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1583  	}
  1584  
  1585  	logs, sub, err := _ERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  1586  	if err != nil {
  1587  		return nil, err
  1588  	}
  1589  	return &ERC721TransferIterator{contract: _ERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil
  1590  }
  1591  
  1592  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1593  //
  1594  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  1595  func (_ERC721 *ERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  1596  
  1597  	var fromRule []interface{}
  1598  	for _, fromItem := range from {
  1599  		fromRule = append(fromRule, fromItem)
  1600  	}
  1601  	var toRule []interface{}
  1602  	for _, toItem := range to {
  1603  		toRule = append(toRule, toItem)
  1604  	}
  1605  	var tokenIdRule []interface{}
  1606  	for _, tokenIdItem := range tokenId {
  1607  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1608  	}
  1609  
  1610  	logs, sub, err := _ERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  1611  	if err != nil {
  1612  		return nil, err
  1613  	}
  1614  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1615  		defer sub.Unsubscribe()
  1616  		for {
  1617  			select {
  1618  			case log := <-logs:
  1619  				// New log arrived, parse the event and forward to the user
  1620  				event := new(ERC721Transfer)
  1621  				if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  1622  					return err
  1623  				}
  1624  				event.Raw = log
  1625  
  1626  				select {
  1627  				case sink <- event:
  1628  				case err := <-sub.Err():
  1629  					return err
  1630  				case <-quit:
  1631  					return nil
  1632  				}
  1633  			case err := <-sub.Err():
  1634  				return err
  1635  			case <-quit:
  1636  				return nil
  1637  			}
  1638  		}
  1639  	}), nil
  1640  }
  1641  
  1642  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1643  //
  1644  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  1645  func (_ERC721 *ERC721Filterer) ParseTransfer(log types.Log) (*ERC721Transfer, error) {
  1646  	event := new(ERC721Transfer)
  1647  	if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  1648  		return nil, err
  1649  	}
  1650  	event.Raw = log
  1651  	return event, nil
  1652  }
  1653  
  1654  // ERC721BurnableABI is the input ABI used to generate the binding from.
  1655  const ERC721BurnableABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  1656  
  1657  // ERC721BurnableFuncSigs maps the 4-byte function signature to its string representation.
  1658  var ERC721BurnableFuncSigs = map[string]string{
  1659  	"095ea7b3": "approve(address,uint256)",
  1660  	"70a08231": "balanceOf(address)",
  1661  	"6c0360eb": "baseURI()",
  1662  	"42966c68": "burn(uint256)",
  1663  	"081812fc": "getApproved(uint256)",
  1664  	"e985e9c5": "isApprovedForAll(address,address)",
  1665  	"06fdde03": "name()",
  1666  	"6352211e": "ownerOf(uint256)",
  1667  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  1668  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  1669  	"a22cb465": "setApprovalForAll(address,bool)",
  1670  	"01ffc9a7": "supportsInterface(bytes4)",
  1671  	"95d89b41": "symbol()",
  1672  	"4f6ccce7": "tokenByIndex(uint256)",
  1673  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  1674  	"c87b56dd": "tokenURI(uint256)",
  1675  	"18160ddd": "totalSupply()",
  1676  	"23b872dd": "transferFrom(address,address,uint256)",
  1677  }
  1678  
  1679  // ERC721Burnable is an auto generated Go binding around an Ethereum contract.
  1680  type ERC721Burnable struct {
  1681  	ERC721BurnableCaller     // Read-only binding to the contract
  1682  	ERC721BurnableTransactor // Write-only binding to the contract
  1683  	ERC721BurnableFilterer   // Log filterer for contract events
  1684  }
  1685  
  1686  // ERC721BurnableCaller is an auto generated read-only Go binding around an Ethereum contract.
  1687  type ERC721BurnableCaller struct {
  1688  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1689  }
  1690  
  1691  // ERC721BurnableTransactor is an auto generated write-only Go binding around an Ethereum contract.
  1692  type ERC721BurnableTransactor struct {
  1693  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1694  }
  1695  
  1696  // ERC721BurnableFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  1697  type ERC721BurnableFilterer struct {
  1698  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1699  }
  1700  
  1701  // ERC721BurnableSession is an auto generated Go binding around an Ethereum contract,
  1702  // with pre-set call and transact options.
  1703  type ERC721BurnableSession struct {
  1704  	Contract     *ERC721Burnable   // Generic contract binding to set the session for
  1705  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  1706  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  1707  }
  1708  
  1709  // ERC721BurnableCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  1710  // with pre-set call options.
  1711  type ERC721BurnableCallerSession struct {
  1712  	Contract *ERC721BurnableCaller // Generic contract caller binding to set the session for
  1713  	CallOpts bind.CallOpts         // Call options to use throughout this session
  1714  }
  1715  
  1716  // ERC721BurnableTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  1717  // with pre-set transact options.
  1718  type ERC721BurnableTransactorSession struct {
  1719  	Contract     *ERC721BurnableTransactor // Generic contract transactor binding to set the session for
  1720  	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
  1721  }
  1722  
  1723  // ERC721BurnableRaw is an auto generated low-level Go binding around an Ethereum contract.
  1724  type ERC721BurnableRaw struct {
  1725  	Contract *ERC721Burnable // Generic contract binding to access the raw methods on
  1726  }
  1727  
  1728  // ERC721BurnableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  1729  type ERC721BurnableCallerRaw struct {
  1730  	Contract *ERC721BurnableCaller // Generic read-only contract binding to access the raw methods on
  1731  }
  1732  
  1733  // ERC721BurnableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  1734  type ERC721BurnableTransactorRaw struct {
  1735  	Contract *ERC721BurnableTransactor // Generic write-only contract binding to access the raw methods on
  1736  }
  1737  
  1738  // NewERC721Burnable creates a new instance of ERC721Burnable, bound to a specific deployed contract.
  1739  func NewERC721Burnable(address common.Address, backend bind.ContractBackend) (*ERC721Burnable, error) {
  1740  	contract, err := bindERC721Burnable(address, backend, backend, backend)
  1741  	if err != nil {
  1742  		return nil, err
  1743  	}
  1744  	return &ERC721Burnable{ERC721BurnableCaller: ERC721BurnableCaller{contract: contract}, ERC721BurnableTransactor: ERC721BurnableTransactor{contract: contract}, ERC721BurnableFilterer: ERC721BurnableFilterer{contract: contract}}, nil
  1745  }
  1746  
  1747  // NewERC721BurnableCaller creates a new read-only instance of ERC721Burnable, bound to a specific deployed contract.
  1748  func NewERC721BurnableCaller(address common.Address, caller bind.ContractCaller) (*ERC721BurnableCaller, error) {
  1749  	contract, err := bindERC721Burnable(address, caller, nil, nil)
  1750  	if err != nil {
  1751  		return nil, err
  1752  	}
  1753  	return &ERC721BurnableCaller{contract: contract}, nil
  1754  }
  1755  
  1756  // NewERC721BurnableTransactor creates a new write-only instance of ERC721Burnable, bound to a specific deployed contract.
  1757  func NewERC721BurnableTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC721BurnableTransactor, error) {
  1758  	contract, err := bindERC721Burnable(address, nil, transactor, nil)
  1759  	if err != nil {
  1760  		return nil, err
  1761  	}
  1762  	return &ERC721BurnableTransactor{contract: contract}, nil
  1763  }
  1764  
  1765  // NewERC721BurnableFilterer creates a new log filterer instance of ERC721Burnable, bound to a specific deployed contract.
  1766  func NewERC721BurnableFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC721BurnableFilterer, error) {
  1767  	contract, err := bindERC721Burnable(address, nil, nil, filterer)
  1768  	if err != nil {
  1769  		return nil, err
  1770  	}
  1771  	return &ERC721BurnableFilterer{contract: contract}, nil
  1772  }
  1773  
  1774  // bindERC721Burnable binds a generic wrapper to an already deployed contract.
  1775  func bindERC721Burnable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  1776  	parsed, err := abi.JSON(strings.NewReader(ERC721BurnableABI))
  1777  	if err != nil {
  1778  		return nil, err
  1779  	}
  1780  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  1781  }
  1782  
  1783  // Call invokes the (constant) contract method with params as input values and
  1784  // sets the output to result. The result type might be a single field for simple
  1785  // returns, a slice of interfaces for anonymous returns and a struct for named
  1786  // returns.
  1787  func (_ERC721Burnable *ERC721BurnableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1788  	return _ERC721Burnable.Contract.ERC721BurnableCaller.contract.Call(opts, result, method, params...)
  1789  }
  1790  
  1791  // Transfer initiates a plain transaction to move funds to the contract, calling
  1792  // its default method if one is available.
  1793  func (_ERC721Burnable *ERC721BurnableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1794  	return _ERC721Burnable.Contract.ERC721BurnableTransactor.contract.Transfer(opts)
  1795  }
  1796  
  1797  // Transact invokes the (paid) contract method with params as input values.
  1798  func (_ERC721Burnable *ERC721BurnableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1799  	return _ERC721Burnable.Contract.ERC721BurnableTransactor.contract.Transact(opts, method, params...)
  1800  }
  1801  
  1802  // Call invokes the (constant) contract method with params as input values and
  1803  // sets the output to result. The result type might be a single field for simple
  1804  // returns, a slice of interfaces for anonymous returns and a struct for named
  1805  // returns.
  1806  func (_ERC721Burnable *ERC721BurnableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1807  	return _ERC721Burnable.Contract.contract.Call(opts, result, method, params...)
  1808  }
  1809  
  1810  // Transfer initiates a plain transaction to move funds to the contract, calling
  1811  // its default method if one is available.
  1812  func (_ERC721Burnable *ERC721BurnableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1813  	return _ERC721Burnable.Contract.contract.Transfer(opts)
  1814  }
  1815  
  1816  // Transact invokes the (paid) contract method with params as input values.
  1817  func (_ERC721Burnable *ERC721BurnableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1818  	return _ERC721Burnable.Contract.contract.Transact(opts, method, params...)
  1819  }
  1820  
  1821  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1822  //
  1823  // Solidity: function balanceOf(address owner) view returns(uint256)
  1824  func (_ERC721Burnable *ERC721BurnableCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  1825  	var out []interface{}
  1826  	err := _ERC721Burnable.contract.Call(opts, &out, "balanceOf", owner)
  1827  
  1828  	if err != nil {
  1829  		return *new(*big.Int), err
  1830  	}
  1831  
  1832  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1833  
  1834  	return out0, err
  1835  
  1836  }
  1837  
  1838  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1839  //
  1840  // Solidity: function balanceOf(address owner) view returns(uint256)
  1841  func (_ERC721Burnable *ERC721BurnableSession) BalanceOf(owner common.Address) (*big.Int, error) {
  1842  	return _ERC721Burnable.Contract.BalanceOf(&_ERC721Burnable.CallOpts, owner)
  1843  }
  1844  
  1845  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1846  //
  1847  // Solidity: function balanceOf(address owner) view returns(uint256)
  1848  func (_ERC721Burnable *ERC721BurnableCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  1849  	return _ERC721Burnable.Contract.BalanceOf(&_ERC721Burnable.CallOpts, owner)
  1850  }
  1851  
  1852  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
  1853  //
  1854  // Solidity: function baseURI() view returns(string)
  1855  func (_ERC721Burnable *ERC721BurnableCaller) BaseURI(opts *bind.CallOpts) (string, error) {
  1856  	var out []interface{}
  1857  	err := _ERC721Burnable.contract.Call(opts, &out, "baseURI")
  1858  
  1859  	if err != nil {
  1860  		return *new(string), err
  1861  	}
  1862  
  1863  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1864  
  1865  	return out0, err
  1866  
  1867  }
  1868  
  1869  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
  1870  //
  1871  // Solidity: function baseURI() view returns(string)
  1872  func (_ERC721Burnable *ERC721BurnableSession) BaseURI() (string, error) {
  1873  	return _ERC721Burnable.Contract.BaseURI(&_ERC721Burnable.CallOpts)
  1874  }
  1875  
  1876  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
  1877  //
  1878  // Solidity: function baseURI() view returns(string)
  1879  func (_ERC721Burnable *ERC721BurnableCallerSession) BaseURI() (string, error) {
  1880  	return _ERC721Burnable.Contract.BaseURI(&_ERC721Burnable.CallOpts)
  1881  }
  1882  
  1883  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  1884  //
  1885  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  1886  func (_ERC721Burnable *ERC721BurnableCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  1887  	var out []interface{}
  1888  	err := _ERC721Burnable.contract.Call(opts, &out, "getApproved", tokenId)
  1889  
  1890  	if err != nil {
  1891  		return *new(common.Address), err
  1892  	}
  1893  
  1894  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1895  
  1896  	return out0, err
  1897  
  1898  }
  1899  
  1900  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  1901  //
  1902  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  1903  func (_ERC721Burnable *ERC721BurnableSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  1904  	return _ERC721Burnable.Contract.GetApproved(&_ERC721Burnable.CallOpts, tokenId)
  1905  }
  1906  
  1907  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  1908  //
  1909  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  1910  func (_ERC721Burnable *ERC721BurnableCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  1911  	return _ERC721Burnable.Contract.GetApproved(&_ERC721Burnable.CallOpts, tokenId)
  1912  }
  1913  
  1914  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  1915  //
  1916  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  1917  func (_ERC721Burnable *ERC721BurnableCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  1918  	var out []interface{}
  1919  	err := _ERC721Burnable.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  1920  
  1921  	if err != nil {
  1922  		return *new(bool), err
  1923  	}
  1924  
  1925  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  1926  
  1927  	return out0, err
  1928  
  1929  }
  1930  
  1931  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  1932  //
  1933  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  1934  func (_ERC721Burnable *ERC721BurnableSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  1935  	return _ERC721Burnable.Contract.IsApprovedForAll(&_ERC721Burnable.CallOpts, owner, operator)
  1936  }
  1937  
  1938  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  1939  //
  1940  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  1941  func (_ERC721Burnable *ERC721BurnableCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  1942  	return _ERC721Burnable.Contract.IsApprovedForAll(&_ERC721Burnable.CallOpts, owner, operator)
  1943  }
  1944  
  1945  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1946  //
  1947  // Solidity: function name() view returns(string)
  1948  func (_ERC721Burnable *ERC721BurnableCaller) Name(opts *bind.CallOpts) (string, error) {
  1949  	var out []interface{}
  1950  	err := _ERC721Burnable.contract.Call(opts, &out, "name")
  1951  
  1952  	if err != nil {
  1953  		return *new(string), err
  1954  	}
  1955  
  1956  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  1957  
  1958  	return out0, err
  1959  
  1960  }
  1961  
  1962  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1963  //
  1964  // Solidity: function name() view returns(string)
  1965  func (_ERC721Burnable *ERC721BurnableSession) Name() (string, error) {
  1966  	return _ERC721Burnable.Contract.Name(&_ERC721Burnable.CallOpts)
  1967  }
  1968  
  1969  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  1970  //
  1971  // Solidity: function name() view returns(string)
  1972  func (_ERC721Burnable *ERC721BurnableCallerSession) Name() (string, error) {
  1973  	return _ERC721Burnable.Contract.Name(&_ERC721Burnable.CallOpts)
  1974  }
  1975  
  1976  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  1977  //
  1978  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  1979  func (_ERC721Burnable *ERC721BurnableCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  1980  	var out []interface{}
  1981  	err := _ERC721Burnable.contract.Call(opts, &out, "ownerOf", tokenId)
  1982  
  1983  	if err != nil {
  1984  		return *new(common.Address), err
  1985  	}
  1986  
  1987  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1988  
  1989  	return out0, err
  1990  
  1991  }
  1992  
  1993  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  1994  //
  1995  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  1996  func (_ERC721Burnable *ERC721BurnableSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  1997  	return _ERC721Burnable.Contract.OwnerOf(&_ERC721Burnable.CallOpts, tokenId)
  1998  }
  1999  
  2000  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  2001  //
  2002  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  2003  func (_ERC721Burnable *ERC721BurnableCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  2004  	return _ERC721Burnable.Contract.OwnerOf(&_ERC721Burnable.CallOpts, tokenId)
  2005  }
  2006  
  2007  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  2008  //
  2009  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  2010  func (_ERC721Burnable *ERC721BurnableCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  2011  	var out []interface{}
  2012  	err := _ERC721Burnable.contract.Call(opts, &out, "supportsInterface", interfaceId)
  2013  
  2014  	if err != nil {
  2015  		return *new(bool), err
  2016  	}
  2017  
  2018  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  2019  
  2020  	return out0, err
  2021  
  2022  }
  2023  
  2024  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  2025  //
  2026  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  2027  func (_ERC721Burnable *ERC721BurnableSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  2028  	return _ERC721Burnable.Contract.SupportsInterface(&_ERC721Burnable.CallOpts, interfaceId)
  2029  }
  2030  
  2031  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  2032  //
  2033  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  2034  func (_ERC721Burnable *ERC721BurnableCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  2035  	return _ERC721Burnable.Contract.SupportsInterface(&_ERC721Burnable.CallOpts, interfaceId)
  2036  }
  2037  
  2038  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2039  //
  2040  // Solidity: function symbol() view returns(string)
  2041  func (_ERC721Burnable *ERC721BurnableCaller) Symbol(opts *bind.CallOpts) (string, error) {
  2042  	var out []interface{}
  2043  	err := _ERC721Burnable.contract.Call(opts, &out, "symbol")
  2044  
  2045  	if err != nil {
  2046  		return *new(string), err
  2047  	}
  2048  
  2049  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  2050  
  2051  	return out0, err
  2052  
  2053  }
  2054  
  2055  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2056  //
  2057  // Solidity: function symbol() view returns(string)
  2058  func (_ERC721Burnable *ERC721BurnableSession) Symbol() (string, error) {
  2059  	return _ERC721Burnable.Contract.Symbol(&_ERC721Burnable.CallOpts)
  2060  }
  2061  
  2062  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2063  //
  2064  // Solidity: function symbol() view returns(string)
  2065  func (_ERC721Burnable *ERC721BurnableCallerSession) Symbol() (string, error) {
  2066  	return _ERC721Burnable.Contract.Symbol(&_ERC721Burnable.CallOpts)
  2067  }
  2068  
  2069  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  2070  //
  2071  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  2072  func (_ERC721Burnable *ERC721BurnableCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  2073  	var out []interface{}
  2074  	err := _ERC721Burnable.contract.Call(opts, &out, "tokenByIndex", index)
  2075  
  2076  	if err != nil {
  2077  		return *new(*big.Int), err
  2078  	}
  2079  
  2080  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2081  
  2082  	return out0, err
  2083  
  2084  }
  2085  
  2086  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  2087  //
  2088  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  2089  func (_ERC721Burnable *ERC721BurnableSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  2090  	return _ERC721Burnable.Contract.TokenByIndex(&_ERC721Burnable.CallOpts, index)
  2091  }
  2092  
  2093  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  2094  //
  2095  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  2096  func (_ERC721Burnable *ERC721BurnableCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  2097  	return _ERC721Burnable.Contract.TokenByIndex(&_ERC721Burnable.CallOpts, index)
  2098  }
  2099  
  2100  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  2101  //
  2102  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  2103  func (_ERC721Burnable *ERC721BurnableCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  2104  	var out []interface{}
  2105  	err := _ERC721Burnable.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  2106  
  2107  	if err != nil {
  2108  		return *new(*big.Int), err
  2109  	}
  2110  
  2111  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2112  
  2113  	return out0, err
  2114  
  2115  }
  2116  
  2117  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  2118  //
  2119  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  2120  func (_ERC721Burnable *ERC721BurnableSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  2121  	return _ERC721Burnable.Contract.TokenOfOwnerByIndex(&_ERC721Burnable.CallOpts, owner, index)
  2122  }
  2123  
  2124  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  2125  //
  2126  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  2127  func (_ERC721Burnable *ERC721BurnableCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  2128  	return _ERC721Burnable.Contract.TokenOfOwnerByIndex(&_ERC721Burnable.CallOpts, owner, index)
  2129  }
  2130  
  2131  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  2132  //
  2133  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  2134  func (_ERC721Burnable *ERC721BurnableCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  2135  	var out []interface{}
  2136  	err := _ERC721Burnable.contract.Call(opts, &out, "tokenURI", tokenId)
  2137  
  2138  	if err != nil {
  2139  		return *new(string), err
  2140  	}
  2141  
  2142  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  2143  
  2144  	return out0, err
  2145  
  2146  }
  2147  
  2148  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  2149  //
  2150  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  2151  func (_ERC721Burnable *ERC721BurnableSession) TokenURI(tokenId *big.Int) (string, error) {
  2152  	return _ERC721Burnable.Contract.TokenURI(&_ERC721Burnable.CallOpts, tokenId)
  2153  }
  2154  
  2155  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  2156  //
  2157  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  2158  func (_ERC721Burnable *ERC721BurnableCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  2159  	return _ERC721Burnable.Contract.TokenURI(&_ERC721Burnable.CallOpts, tokenId)
  2160  }
  2161  
  2162  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2163  //
  2164  // Solidity: function totalSupply() view returns(uint256)
  2165  func (_ERC721Burnable *ERC721BurnableCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  2166  	var out []interface{}
  2167  	err := _ERC721Burnable.contract.Call(opts, &out, "totalSupply")
  2168  
  2169  	if err != nil {
  2170  		return *new(*big.Int), err
  2171  	}
  2172  
  2173  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2174  
  2175  	return out0, err
  2176  
  2177  }
  2178  
  2179  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2180  //
  2181  // Solidity: function totalSupply() view returns(uint256)
  2182  func (_ERC721Burnable *ERC721BurnableSession) TotalSupply() (*big.Int, error) {
  2183  	return _ERC721Burnable.Contract.TotalSupply(&_ERC721Burnable.CallOpts)
  2184  }
  2185  
  2186  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2187  //
  2188  // Solidity: function totalSupply() view returns(uint256)
  2189  func (_ERC721Burnable *ERC721BurnableCallerSession) TotalSupply() (*big.Int, error) {
  2190  	return _ERC721Burnable.Contract.TotalSupply(&_ERC721Burnable.CallOpts)
  2191  }
  2192  
  2193  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2194  //
  2195  // Solidity: function approve(address to, uint256 tokenId) returns()
  2196  func (_ERC721Burnable *ERC721BurnableTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2197  	return _ERC721Burnable.contract.Transact(opts, "approve", to, tokenId)
  2198  }
  2199  
  2200  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2201  //
  2202  // Solidity: function approve(address to, uint256 tokenId) returns()
  2203  func (_ERC721Burnable *ERC721BurnableSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2204  	return _ERC721Burnable.Contract.Approve(&_ERC721Burnable.TransactOpts, to, tokenId)
  2205  }
  2206  
  2207  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2208  //
  2209  // Solidity: function approve(address to, uint256 tokenId) returns()
  2210  func (_ERC721Burnable *ERC721BurnableTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2211  	return _ERC721Burnable.Contract.Approve(&_ERC721Burnable.TransactOpts, to, tokenId)
  2212  }
  2213  
  2214  // Burn is a paid mutator transaction binding the contract method 0x42966c68.
  2215  //
  2216  // Solidity: function burn(uint256 tokenId) returns()
  2217  func (_ERC721Burnable *ERC721BurnableTransactor) Burn(opts *bind.TransactOpts, tokenId *big.Int) (*types.Transaction, error) {
  2218  	return _ERC721Burnable.contract.Transact(opts, "burn", tokenId)
  2219  }
  2220  
  2221  // Burn is a paid mutator transaction binding the contract method 0x42966c68.
  2222  //
  2223  // Solidity: function burn(uint256 tokenId) returns()
  2224  func (_ERC721Burnable *ERC721BurnableSession) Burn(tokenId *big.Int) (*types.Transaction, error) {
  2225  	return _ERC721Burnable.Contract.Burn(&_ERC721Burnable.TransactOpts, tokenId)
  2226  }
  2227  
  2228  // Burn is a paid mutator transaction binding the contract method 0x42966c68.
  2229  //
  2230  // Solidity: function burn(uint256 tokenId) returns()
  2231  func (_ERC721Burnable *ERC721BurnableTransactorSession) Burn(tokenId *big.Int) (*types.Transaction, error) {
  2232  	return _ERC721Burnable.Contract.Burn(&_ERC721Burnable.TransactOpts, tokenId)
  2233  }
  2234  
  2235  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  2236  //
  2237  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  2238  func (_ERC721Burnable *ERC721BurnableTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2239  	return _ERC721Burnable.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  2240  }
  2241  
  2242  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  2243  //
  2244  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  2245  func (_ERC721Burnable *ERC721BurnableSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2246  	return _ERC721Burnable.Contract.SafeTransferFrom(&_ERC721Burnable.TransactOpts, from, to, tokenId)
  2247  }
  2248  
  2249  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  2250  //
  2251  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  2252  func (_ERC721Burnable *ERC721BurnableTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2253  	return _ERC721Burnable.Contract.SafeTransferFrom(&_ERC721Burnable.TransactOpts, from, to, tokenId)
  2254  }
  2255  
  2256  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  2257  //
  2258  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  2259  func (_ERC721Burnable *ERC721BurnableTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  2260  	return _ERC721Burnable.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  2261  }
  2262  
  2263  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  2264  //
  2265  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  2266  func (_ERC721Burnable *ERC721BurnableSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  2267  	return _ERC721Burnable.Contract.SafeTransferFrom0(&_ERC721Burnable.TransactOpts, from, to, tokenId, _data)
  2268  }
  2269  
  2270  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  2271  //
  2272  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  2273  func (_ERC721Burnable *ERC721BurnableTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  2274  	return _ERC721Burnable.Contract.SafeTransferFrom0(&_ERC721Burnable.TransactOpts, from, to, tokenId, _data)
  2275  }
  2276  
  2277  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  2278  //
  2279  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  2280  func (_ERC721Burnable *ERC721BurnableTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) {
  2281  	return _ERC721Burnable.contract.Transact(opts, "setApprovalForAll", operator, approved)
  2282  }
  2283  
  2284  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  2285  //
  2286  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  2287  func (_ERC721Burnable *ERC721BurnableSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
  2288  	return _ERC721Burnable.Contract.SetApprovalForAll(&_ERC721Burnable.TransactOpts, operator, approved)
  2289  }
  2290  
  2291  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  2292  //
  2293  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  2294  func (_ERC721Burnable *ERC721BurnableTransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
  2295  	return _ERC721Burnable.Contract.SetApprovalForAll(&_ERC721Burnable.TransactOpts, operator, approved)
  2296  }
  2297  
  2298  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  2299  //
  2300  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  2301  func (_ERC721Burnable *ERC721BurnableTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2302  	return _ERC721Burnable.contract.Transact(opts, "transferFrom", from, to, tokenId)
  2303  }
  2304  
  2305  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  2306  //
  2307  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  2308  func (_ERC721Burnable *ERC721BurnableSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2309  	return _ERC721Burnable.Contract.TransferFrom(&_ERC721Burnable.TransactOpts, from, to, tokenId)
  2310  }
  2311  
  2312  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  2313  //
  2314  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  2315  func (_ERC721Burnable *ERC721BurnableTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2316  	return _ERC721Burnable.Contract.TransferFrom(&_ERC721Burnable.TransactOpts, from, to, tokenId)
  2317  }
  2318  
  2319  // ERC721BurnableApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721Burnable contract.
  2320  type ERC721BurnableApprovalIterator struct {
  2321  	Event *ERC721BurnableApproval // Event containing the contract specifics and raw log
  2322  
  2323  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2324  	event    string              // Event name to use for unpacking event data
  2325  
  2326  	logs chan types.Log        // Log channel receiving the found contract events
  2327  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2328  	done bool                  // Whether the subscription completed delivering logs
  2329  	fail error                 // Occurred error to stop iteration
  2330  }
  2331  
  2332  // Next advances the iterator to the subsequent event, returning whether there
  2333  // are any more events found. In case of a retrieval or parsing error, false is
  2334  // returned and Error() can be queried for the exact failure.
  2335  func (it *ERC721BurnableApprovalIterator) Next() bool {
  2336  	// If the iterator failed, stop iterating
  2337  	if it.fail != nil {
  2338  		return false
  2339  	}
  2340  	// If the iterator completed, deliver directly whatever's available
  2341  	if it.done {
  2342  		select {
  2343  		case log := <-it.logs:
  2344  			it.Event = new(ERC721BurnableApproval)
  2345  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2346  				it.fail = err
  2347  				return false
  2348  			}
  2349  			it.Event.Raw = log
  2350  			return true
  2351  
  2352  		default:
  2353  			return false
  2354  		}
  2355  	}
  2356  	// Iterator still in progress, wait for either a data or an error event
  2357  	select {
  2358  	case log := <-it.logs:
  2359  		it.Event = new(ERC721BurnableApproval)
  2360  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2361  			it.fail = err
  2362  			return false
  2363  		}
  2364  		it.Event.Raw = log
  2365  		return true
  2366  
  2367  	case err := <-it.sub.Err():
  2368  		it.done = true
  2369  		it.fail = err
  2370  		return it.Next()
  2371  	}
  2372  }
  2373  
  2374  // Error returns any retrieval or parsing error occurred during filtering.
  2375  func (it *ERC721BurnableApprovalIterator) Error() error {
  2376  	return it.fail
  2377  }
  2378  
  2379  // Close terminates the iteration process, releasing any pending underlying
  2380  // resources.
  2381  func (it *ERC721BurnableApprovalIterator) Close() error {
  2382  	it.sub.Unsubscribe()
  2383  	return nil
  2384  }
  2385  
  2386  // ERC721BurnableApproval represents a Approval event raised by the ERC721Burnable contract.
  2387  type ERC721BurnableApproval struct {
  2388  	Owner    common.Address
  2389  	Approved common.Address
  2390  	TokenId  *big.Int
  2391  	Raw      types.Log // Blockchain specific contextual infos
  2392  }
  2393  
  2394  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  2395  //
  2396  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  2397  func (_ERC721Burnable *ERC721BurnableFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721BurnableApprovalIterator, error) {
  2398  
  2399  	var ownerRule []interface{}
  2400  	for _, ownerItem := range owner {
  2401  		ownerRule = append(ownerRule, ownerItem)
  2402  	}
  2403  	var approvedRule []interface{}
  2404  	for _, approvedItem := range approved {
  2405  		approvedRule = append(approvedRule, approvedItem)
  2406  	}
  2407  	var tokenIdRule []interface{}
  2408  	for _, tokenIdItem := range tokenId {
  2409  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2410  	}
  2411  
  2412  	logs, sub, err := _ERC721Burnable.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  2413  	if err != nil {
  2414  		return nil, err
  2415  	}
  2416  	return &ERC721BurnableApprovalIterator{contract: _ERC721Burnable.contract, event: "Approval", logs: logs, sub: sub}, nil
  2417  }
  2418  
  2419  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  2420  //
  2421  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  2422  func (_ERC721Burnable *ERC721BurnableFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721BurnableApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  2423  
  2424  	var ownerRule []interface{}
  2425  	for _, ownerItem := range owner {
  2426  		ownerRule = append(ownerRule, ownerItem)
  2427  	}
  2428  	var approvedRule []interface{}
  2429  	for _, approvedItem := range approved {
  2430  		approvedRule = append(approvedRule, approvedItem)
  2431  	}
  2432  	var tokenIdRule []interface{}
  2433  	for _, tokenIdItem := range tokenId {
  2434  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2435  	}
  2436  
  2437  	logs, sub, err := _ERC721Burnable.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  2438  	if err != nil {
  2439  		return nil, err
  2440  	}
  2441  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2442  		defer sub.Unsubscribe()
  2443  		for {
  2444  			select {
  2445  			case log := <-logs:
  2446  				// New log arrived, parse the event and forward to the user
  2447  				event := new(ERC721BurnableApproval)
  2448  				if err := _ERC721Burnable.contract.UnpackLog(event, "Approval", log); err != nil {
  2449  					return err
  2450  				}
  2451  				event.Raw = log
  2452  
  2453  				select {
  2454  				case sink <- event:
  2455  				case err := <-sub.Err():
  2456  					return err
  2457  				case <-quit:
  2458  					return nil
  2459  				}
  2460  			case err := <-sub.Err():
  2461  				return err
  2462  			case <-quit:
  2463  				return nil
  2464  			}
  2465  		}
  2466  	}), nil
  2467  }
  2468  
  2469  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  2470  //
  2471  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  2472  func (_ERC721Burnable *ERC721BurnableFilterer) ParseApproval(log types.Log) (*ERC721BurnableApproval, error) {
  2473  	event := new(ERC721BurnableApproval)
  2474  	if err := _ERC721Burnable.contract.UnpackLog(event, "Approval", log); err != nil {
  2475  		return nil, err
  2476  	}
  2477  	event.Raw = log
  2478  	return event, nil
  2479  }
  2480  
  2481  // ERC721BurnableApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721Burnable contract.
  2482  type ERC721BurnableApprovalForAllIterator struct {
  2483  	Event *ERC721BurnableApprovalForAll // Event containing the contract specifics and raw log
  2484  
  2485  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2486  	event    string              // Event name to use for unpacking event data
  2487  
  2488  	logs chan types.Log        // Log channel receiving the found contract events
  2489  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2490  	done bool                  // Whether the subscription completed delivering logs
  2491  	fail error                 // Occurred error to stop iteration
  2492  }
  2493  
  2494  // Next advances the iterator to the subsequent event, returning whether there
  2495  // are any more events found. In case of a retrieval or parsing error, false is
  2496  // returned and Error() can be queried for the exact failure.
  2497  func (it *ERC721BurnableApprovalForAllIterator) Next() bool {
  2498  	// If the iterator failed, stop iterating
  2499  	if it.fail != nil {
  2500  		return false
  2501  	}
  2502  	// If the iterator completed, deliver directly whatever's available
  2503  	if it.done {
  2504  		select {
  2505  		case log := <-it.logs:
  2506  			it.Event = new(ERC721BurnableApprovalForAll)
  2507  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2508  				it.fail = err
  2509  				return false
  2510  			}
  2511  			it.Event.Raw = log
  2512  			return true
  2513  
  2514  		default:
  2515  			return false
  2516  		}
  2517  	}
  2518  	// Iterator still in progress, wait for either a data or an error event
  2519  	select {
  2520  	case log := <-it.logs:
  2521  		it.Event = new(ERC721BurnableApprovalForAll)
  2522  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2523  			it.fail = err
  2524  			return false
  2525  		}
  2526  		it.Event.Raw = log
  2527  		return true
  2528  
  2529  	case err := <-it.sub.Err():
  2530  		it.done = true
  2531  		it.fail = err
  2532  		return it.Next()
  2533  	}
  2534  }
  2535  
  2536  // Error returns any retrieval or parsing error occurred during filtering.
  2537  func (it *ERC721BurnableApprovalForAllIterator) Error() error {
  2538  	return it.fail
  2539  }
  2540  
  2541  // Close terminates the iteration process, releasing any pending underlying
  2542  // resources.
  2543  func (it *ERC721BurnableApprovalForAllIterator) Close() error {
  2544  	it.sub.Unsubscribe()
  2545  	return nil
  2546  }
  2547  
  2548  // ERC721BurnableApprovalForAll represents a ApprovalForAll event raised by the ERC721Burnable contract.
  2549  type ERC721BurnableApprovalForAll struct {
  2550  	Owner    common.Address
  2551  	Operator common.Address
  2552  	Approved bool
  2553  	Raw      types.Log // Blockchain specific contextual infos
  2554  }
  2555  
  2556  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  2557  //
  2558  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  2559  func (_ERC721Burnable *ERC721BurnableFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721BurnableApprovalForAllIterator, error) {
  2560  
  2561  	var ownerRule []interface{}
  2562  	for _, ownerItem := range owner {
  2563  		ownerRule = append(ownerRule, ownerItem)
  2564  	}
  2565  	var operatorRule []interface{}
  2566  	for _, operatorItem := range operator {
  2567  		operatorRule = append(operatorRule, operatorItem)
  2568  	}
  2569  
  2570  	logs, sub, err := _ERC721Burnable.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  2571  	if err != nil {
  2572  		return nil, err
  2573  	}
  2574  	return &ERC721BurnableApprovalForAllIterator{contract: _ERC721Burnable.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  2575  }
  2576  
  2577  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  2578  //
  2579  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  2580  func (_ERC721Burnable *ERC721BurnableFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721BurnableApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  2581  
  2582  	var ownerRule []interface{}
  2583  	for _, ownerItem := range owner {
  2584  		ownerRule = append(ownerRule, ownerItem)
  2585  	}
  2586  	var operatorRule []interface{}
  2587  	for _, operatorItem := range operator {
  2588  		operatorRule = append(operatorRule, operatorItem)
  2589  	}
  2590  
  2591  	logs, sub, err := _ERC721Burnable.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  2592  	if err != nil {
  2593  		return nil, err
  2594  	}
  2595  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2596  		defer sub.Unsubscribe()
  2597  		for {
  2598  			select {
  2599  			case log := <-logs:
  2600  				// New log arrived, parse the event and forward to the user
  2601  				event := new(ERC721BurnableApprovalForAll)
  2602  				if err := _ERC721Burnable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  2603  					return err
  2604  				}
  2605  				event.Raw = log
  2606  
  2607  				select {
  2608  				case sink <- event:
  2609  				case err := <-sub.Err():
  2610  					return err
  2611  				case <-quit:
  2612  					return nil
  2613  				}
  2614  			case err := <-sub.Err():
  2615  				return err
  2616  			case <-quit:
  2617  				return nil
  2618  			}
  2619  		}
  2620  	}), nil
  2621  }
  2622  
  2623  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  2624  //
  2625  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  2626  func (_ERC721Burnable *ERC721BurnableFilterer) ParseApprovalForAll(log types.Log) (*ERC721BurnableApprovalForAll, error) {
  2627  	event := new(ERC721BurnableApprovalForAll)
  2628  	if err := _ERC721Burnable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  2629  		return nil, err
  2630  	}
  2631  	event.Raw = log
  2632  	return event, nil
  2633  }
  2634  
  2635  // ERC721BurnableTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721Burnable contract.
  2636  type ERC721BurnableTransferIterator struct {
  2637  	Event *ERC721BurnableTransfer // Event containing the contract specifics and raw log
  2638  
  2639  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2640  	event    string              // Event name to use for unpacking event data
  2641  
  2642  	logs chan types.Log        // Log channel receiving the found contract events
  2643  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2644  	done bool                  // Whether the subscription completed delivering logs
  2645  	fail error                 // Occurred error to stop iteration
  2646  }
  2647  
  2648  // Next advances the iterator to the subsequent event, returning whether there
  2649  // are any more events found. In case of a retrieval or parsing error, false is
  2650  // returned and Error() can be queried for the exact failure.
  2651  func (it *ERC721BurnableTransferIterator) Next() bool {
  2652  	// If the iterator failed, stop iterating
  2653  	if it.fail != nil {
  2654  		return false
  2655  	}
  2656  	// If the iterator completed, deliver directly whatever's available
  2657  	if it.done {
  2658  		select {
  2659  		case log := <-it.logs:
  2660  			it.Event = new(ERC721BurnableTransfer)
  2661  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2662  				it.fail = err
  2663  				return false
  2664  			}
  2665  			it.Event.Raw = log
  2666  			return true
  2667  
  2668  		default:
  2669  			return false
  2670  		}
  2671  	}
  2672  	// Iterator still in progress, wait for either a data or an error event
  2673  	select {
  2674  	case log := <-it.logs:
  2675  		it.Event = new(ERC721BurnableTransfer)
  2676  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2677  			it.fail = err
  2678  			return false
  2679  		}
  2680  		it.Event.Raw = log
  2681  		return true
  2682  
  2683  	case err := <-it.sub.Err():
  2684  		it.done = true
  2685  		it.fail = err
  2686  		return it.Next()
  2687  	}
  2688  }
  2689  
  2690  // Error returns any retrieval or parsing error occurred during filtering.
  2691  func (it *ERC721BurnableTransferIterator) Error() error {
  2692  	return it.fail
  2693  }
  2694  
  2695  // Close terminates the iteration process, releasing any pending underlying
  2696  // resources.
  2697  func (it *ERC721BurnableTransferIterator) Close() error {
  2698  	it.sub.Unsubscribe()
  2699  	return nil
  2700  }
  2701  
  2702  // ERC721BurnableTransfer represents a Transfer event raised by the ERC721Burnable contract.
  2703  type ERC721BurnableTransfer struct {
  2704  	From    common.Address
  2705  	To      common.Address
  2706  	TokenId *big.Int
  2707  	Raw     types.Log // Blockchain specific contextual infos
  2708  }
  2709  
  2710  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  2711  //
  2712  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  2713  func (_ERC721Burnable *ERC721BurnableFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721BurnableTransferIterator, error) {
  2714  
  2715  	var fromRule []interface{}
  2716  	for _, fromItem := range from {
  2717  		fromRule = append(fromRule, fromItem)
  2718  	}
  2719  	var toRule []interface{}
  2720  	for _, toItem := range to {
  2721  		toRule = append(toRule, toItem)
  2722  	}
  2723  	var tokenIdRule []interface{}
  2724  	for _, tokenIdItem := range tokenId {
  2725  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2726  	}
  2727  
  2728  	logs, sub, err := _ERC721Burnable.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  2729  	if err != nil {
  2730  		return nil, err
  2731  	}
  2732  	return &ERC721BurnableTransferIterator{contract: _ERC721Burnable.contract, event: "Transfer", logs: logs, sub: sub}, nil
  2733  }
  2734  
  2735  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  2736  //
  2737  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  2738  func (_ERC721Burnable *ERC721BurnableFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721BurnableTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  2739  
  2740  	var fromRule []interface{}
  2741  	for _, fromItem := range from {
  2742  		fromRule = append(fromRule, fromItem)
  2743  	}
  2744  	var toRule []interface{}
  2745  	for _, toItem := range to {
  2746  		toRule = append(toRule, toItem)
  2747  	}
  2748  	var tokenIdRule []interface{}
  2749  	for _, tokenIdItem := range tokenId {
  2750  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2751  	}
  2752  
  2753  	logs, sub, err := _ERC721Burnable.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  2754  	if err != nil {
  2755  		return nil, err
  2756  	}
  2757  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2758  		defer sub.Unsubscribe()
  2759  		for {
  2760  			select {
  2761  			case log := <-logs:
  2762  				// New log arrived, parse the event and forward to the user
  2763  				event := new(ERC721BurnableTransfer)
  2764  				if err := _ERC721Burnable.contract.UnpackLog(event, "Transfer", log); err != nil {
  2765  					return err
  2766  				}
  2767  				event.Raw = log
  2768  
  2769  				select {
  2770  				case sink <- event:
  2771  				case err := <-sub.Err():
  2772  					return err
  2773  				case <-quit:
  2774  					return nil
  2775  				}
  2776  			case err := <-sub.Err():
  2777  				return err
  2778  			case <-quit:
  2779  				return nil
  2780  			}
  2781  		}
  2782  	}), nil
  2783  }
  2784  
  2785  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  2786  //
  2787  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  2788  func (_ERC721Burnable *ERC721BurnableFilterer) ParseTransfer(log types.Log) (*ERC721BurnableTransfer, error) {
  2789  	event := new(ERC721BurnableTransfer)
  2790  	if err := _ERC721Burnable.contract.UnpackLog(event, "Transfer", log); err != nil {
  2791  		return nil, err
  2792  	}
  2793  	event.Raw = log
  2794  	return event, nil
  2795  }
  2796  
  2797  // EnumerableMapABI is the input ABI used to generate the binding from.
  2798  const EnumerableMapABI = "[]"
  2799  
  2800  // EnumerableMapBin is the compiled bytecode used for deploying new contracts.
  2801  var EnumerableMapBin = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207b11f4dc84eac2fe52cf1fe1738f305a1fa97cffe8179c12eb2207c7943ac4c564736f6c63430008030033"
  2802  
  2803  // DeployEnumerableMap deploys a new Ethereum contract, binding an instance of EnumerableMap to it.
  2804  func DeployEnumerableMap(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EnumerableMap, error) {
  2805  	parsed, err := abi.JSON(strings.NewReader(EnumerableMapABI))
  2806  	if err != nil {
  2807  		return common.Address{}, nil, nil, err
  2808  	}
  2809  
  2810  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(EnumerableMapBin), backend)
  2811  	if err != nil {
  2812  		return common.Address{}, nil, nil, err
  2813  	}
  2814  	return address, tx, &EnumerableMap{EnumerableMapCaller: EnumerableMapCaller{contract: contract}, EnumerableMapTransactor: EnumerableMapTransactor{contract: contract}, EnumerableMapFilterer: EnumerableMapFilterer{contract: contract}}, nil
  2815  }
  2816  
  2817  // EnumerableMap is an auto generated Go binding around an Ethereum contract.
  2818  type EnumerableMap struct {
  2819  	EnumerableMapCaller     // Read-only binding to the contract
  2820  	EnumerableMapTransactor // Write-only binding to the contract
  2821  	EnumerableMapFilterer   // Log filterer for contract events
  2822  }
  2823  
  2824  // EnumerableMapCaller is an auto generated read-only Go binding around an Ethereum contract.
  2825  type EnumerableMapCaller struct {
  2826  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2827  }
  2828  
  2829  // EnumerableMapTransactor is an auto generated write-only Go binding around an Ethereum contract.
  2830  type EnumerableMapTransactor struct {
  2831  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2832  }
  2833  
  2834  // EnumerableMapFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  2835  type EnumerableMapFilterer struct {
  2836  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2837  }
  2838  
  2839  // EnumerableMapSession is an auto generated Go binding around an Ethereum contract,
  2840  // with pre-set call and transact options.
  2841  type EnumerableMapSession struct {
  2842  	Contract     *EnumerableMap    // Generic contract binding to set the session for
  2843  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  2844  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  2845  }
  2846  
  2847  // EnumerableMapCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  2848  // with pre-set call options.
  2849  type EnumerableMapCallerSession struct {
  2850  	Contract *EnumerableMapCaller // Generic contract caller binding to set the session for
  2851  	CallOpts bind.CallOpts        // Call options to use throughout this session
  2852  }
  2853  
  2854  // EnumerableMapTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  2855  // with pre-set transact options.
  2856  type EnumerableMapTransactorSession struct {
  2857  	Contract     *EnumerableMapTransactor // Generic contract transactor binding to set the session for
  2858  	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
  2859  }
  2860  
  2861  // EnumerableMapRaw is an auto generated low-level Go binding around an Ethereum contract.
  2862  type EnumerableMapRaw struct {
  2863  	Contract *EnumerableMap // Generic contract binding to access the raw methods on
  2864  }
  2865  
  2866  // EnumerableMapCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  2867  type EnumerableMapCallerRaw struct {
  2868  	Contract *EnumerableMapCaller // Generic read-only contract binding to access the raw methods on
  2869  }
  2870  
  2871  // EnumerableMapTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  2872  type EnumerableMapTransactorRaw struct {
  2873  	Contract *EnumerableMapTransactor // Generic write-only contract binding to access the raw methods on
  2874  }
  2875  
  2876  // NewEnumerableMap creates a new instance of EnumerableMap, bound to a specific deployed contract.
  2877  func NewEnumerableMap(address common.Address, backend bind.ContractBackend) (*EnumerableMap, error) {
  2878  	contract, err := bindEnumerableMap(address, backend, backend, backend)
  2879  	if err != nil {
  2880  		return nil, err
  2881  	}
  2882  	return &EnumerableMap{EnumerableMapCaller: EnumerableMapCaller{contract: contract}, EnumerableMapTransactor: EnumerableMapTransactor{contract: contract}, EnumerableMapFilterer: EnumerableMapFilterer{contract: contract}}, nil
  2883  }
  2884  
  2885  // NewEnumerableMapCaller creates a new read-only instance of EnumerableMap, bound to a specific deployed contract.
  2886  func NewEnumerableMapCaller(address common.Address, caller bind.ContractCaller) (*EnumerableMapCaller, error) {
  2887  	contract, err := bindEnumerableMap(address, caller, nil, nil)
  2888  	if err != nil {
  2889  		return nil, err
  2890  	}
  2891  	return &EnumerableMapCaller{contract: contract}, nil
  2892  }
  2893  
  2894  // NewEnumerableMapTransactor creates a new write-only instance of EnumerableMap, bound to a specific deployed contract.
  2895  func NewEnumerableMapTransactor(address common.Address, transactor bind.ContractTransactor) (*EnumerableMapTransactor, error) {
  2896  	contract, err := bindEnumerableMap(address, nil, transactor, nil)
  2897  	if err != nil {
  2898  		return nil, err
  2899  	}
  2900  	return &EnumerableMapTransactor{contract: contract}, nil
  2901  }
  2902  
  2903  // NewEnumerableMapFilterer creates a new log filterer instance of EnumerableMap, bound to a specific deployed contract.
  2904  func NewEnumerableMapFilterer(address common.Address, filterer bind.ContractFilterer) (*EnumerableMapFilterer, error) {
  2905  	contract, err := bindEnumerableMap(address, nil, nil, filterer)
  2906  	if err != nil {
  2907  		return nil, err
  2908  	}
  2909  	return &EnumerableMapFilterer{contract: contract}, nil
  2910  }
  2911  
  2912  // bindEnumerableMap binds a generic wrapper to an already deployed contract.
  2913  func bindEnumerableMap(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  2914  	parsed, err := abi.JSON(strings.NewReader(EnumerableMapABI))
  2915  	if err != nil {
  2916  		return nil, err
  2917  	}
  2918  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  2919  }
  2920  
  2921  // Call invokes the (constant) contract method with params as input values and
  2922  // sets the output to result. The result type might be a single field for simple
  2923  // returns, a slice of interfaces for anonymous returns and a struct for named
  2924  // returns.
  2925  func (_EnumerableMap *EnumerableMapRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  2926  	return _EnumerableMap.Contract.EnumerableMapCaller.contract.Call(opts, result, method, params...)
  2927  }
  2928  
  2929  // Transfer initiates a plain transaction to move funds to the contract, calling
  2930  // its default method if one is available.
  2931  func (_EnumerableMap *EnumerableMapRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  2932  	return _EnumerableMap.Contract.EnumerableMapTransactor.contract.Transfer(opts)
  2933  }
  2934  
  2935  // Transact invokes the (paid) contract method with params as input values.
  2936  func (_EnumerableMap *EnumerableMapRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  2937  	return _EnumerableMap.Contract.EnumerableMapTransactor.contract.Transact(opts, method, params...)
  2938  }
  2939  
  2940  // Call invokes the (constant) contract method with params as input values and
  2941  // sets the output to result. The result type might be a single field for simple
  2942  // returns, a slice of interfaces for anonymous returns and a struct for named
  2943  // returns.
  2944  func (_EnumerableMap *EnumerableMapCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  2945  	return _EnumerableMap.Contract.contract.Call(opts, result, method, params...)
  2946  }
  2947  
  2948  // Transfer initiates a plain transaction to move funds to the contract, calling
  2949  // its default method if one is available.
  2950  func (_EnumerableMap *EnumerableMapTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  2951  	return _EnumerableMap.Contract.contract.Transfer(opts)
  2952  }
  2953  
  2954  // Transact invokes the (paid) contract method with params as input values.
  2955  func (_EnumerableMap *EnumerableMapTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  2956  	return _EnumerableMap.Contract.contract.Transact(opts, method, params...)
  2957  }
  2958  
  2959  // EnumerableSetABI is the input ABI used to generate the binding from.
  2960  const EnumerableSetABI = "[]"
  2961  
  2962  // EnumerableSetBin is the compiled bytecode used for deploying new contracts.
  2963  var EnumerableSetBin = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f2226a1a8ac0d3ab654f4f8e420b1d4ef8e2de9a349ff88a8854fde0d23f5bca64736f6c63430008030033"
  2964  
  2965  // DeployEnumerableSet deploys a new Ethereum contract, binding an instance of EnumerableSet to it.
  2966  func DeployEnumerableSet(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *EnumerableSet, error) {
  2967  	parsed, err := abi.JSON(strings.NewReader(EnumerableSetABI))
  2968  	if err != nil {
  2969  		return common.Address{}, nil, nil, err
  2970  	}
  2971  
  2972  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(EnumerableSetBin), backend)
  2973  	if err != nil {
  2974  		return common.Address{}, nil, nil, err
  2975  	}
  2976  	return address, tx, &EnumerableSet{EnumerableSetCaller: EnumerableSetCaller{contract: contract}, EnumerableSetTransactor: EnumerableSetTransactor{contract: contract}, EnumerableSetFilterer: EnumerableSetFilterer{contract: contract}}, nil
  2977  }
  2978  
  2979  // EnumerableSet is an auto generated Go binding around an Ethereum contract.
  2980  type EnumerableSet struct {
  2981  	EnumerableSetCaller     // Read-only binding to the contract
  2982  	EnumerableSetTransactor // Write-only binding to the contract
  2983  	EnumerableSetFilterer   // Log filterer for contract events
  2984  }
  2985  
  2986  // EnumerableSetCaller is an auto generated read-only Go binding around an Ethereum contract.
  2987  type EnumerableSetCaller struct {
  2988  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2989  }
  2990  
  2991  // EnumerableSetTransactor is an auto generated write-only Go binding around an Ethereum contract.
  2992  type EnumerableSetTransactor struct {
  2993  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2994  }
  2995  
  2996  // EnumerableSetFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  2997  type EnumerableSetFilterer struct {
  2998  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2999  }
  3000  
  3001  // EnumerableSetSession is an auto generated Go binding around an Ethereum contract,
  3002  // with pre-set call and transact options.
  3003  type EnumerableSetSession struct {
  3004  	Contract     *EnumerableSet    // Generic contract binding to set the session for
  3005  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  3006  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  3007  }
  3008  
  3009  // EnumerableSetCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  3010  // with pre-set call options.
  3011  type EnumerableSetCallerSession struct {
  3012  	Contract *EnumerableSetCaller // Generic contract caller binding to set the session for
  3013  	CallOpts bind.CallOpts        // Call options to use throughout this session
  3014  }
  3015  
  3016  // EnumerableSetTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  3017  // with pre-set transact options.
  3018  type EnumerableSetTransactorSession struct {
  3019  	Contract     *EnumerableSetTransactor // Generic contract transactor binding to set the session for
  3020  	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
  3021  }
  3022  
  3023  // EnumerableSetRaw is an auto generated low-level Go binding around an Ethereum contract.
  3024  type EnumerableSetRaw struct {
  3025  	Contract *EnumerableSet // Generic contract binding to access the raw methods on
  3026  }
  3027  
  3028  // EnumerableSetCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  3029  type EnumerableSetCallerRaw struct {
  3030  	Contract *EnumerableSetCaller // Generic read-only contract binding to access the raw methods on
  3031  }
  3032  
  3033  // EnumerableSetTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  3034  type EnumerableSetTransactorRaw struct {
  3035  	Contract *EnumerableSetTransactor // Generic write-only contract binding to access the raw methods on
  3036  }
  3037  
  3038  // NewEnumerableSet creates a new instance of EnumerableSet, bound to a specific deployed contract.
  3039  func NewEnumerableSet(address common.Address, backend bind.ContractBackend) (*EnumerableSet, error) {
  3040  	contract, err := bindEnumerableSet(address, backend, backend, backend)
  3041  	if err != nil {
  3042  		return nil, err
  3043  	}
  3044  	return &EnumerableSet{EnumerableSetCaller: EnumerableSetCaller{contract: contract}, EnumerableSetTransactor: EnumerableSetTransactor{contract: contract}, EnumerableSetFilterer: EnumerableSetFilterer{contract: contract}}, nil
  3045  }
  3046  
  3047  // NewEnumerableSetCaller creates a new read-only instance of EnumerableSet, bound to a specific deployed contract.
  3048  func NewEnumerableSetCaller(address common.Address, caller bind.ContractCaller) (*EnumerableSetCaller, error) {
  3049  	contract, err := bindEnumerableSet(address, caller, nil, nil)
  3050  	if err != nil {
  3051  		return nil, err
  3052  	}
  3053  	return &EnumerableSetCaller{contract: contract}, nil
  3054  }
  3055  
  3056  // NewEnumerableSetTransactor creates a new write-only instance of EnumerableSet, bound to a specific deployed contract.
  3057  func NewEnumerableSetTransactor(address common.Address, transactor bind.ContractTransactor) (*EnumerableSetTransactor, error) {
  3058  	contract, err := bindEnumerableSet(address, nil, transactor, nil)
  3059  	if err != nil {
  3060  		return nil, err
  3061  	}
  3062  	return &EnumerableSetTransactor{contract: contract}, nil
  3063  }
  3064  
  3065  // NewEnumerableSetFilterer creates a new log filterer instance of EnumerableSet, bound to a specific deployed contract.
  3066  func NewEnumerableSetFilterer(address common.Address, filterer bind.ContractFilterer) (*EnumerableSetFilterer, error) {
  3067  	contract, err := bindEnumerableSet(address, nil, nil, filterer)
  3068  	if err != nil {
  3069  		return nil, err
  3070  	}
  3071  	return &EnumerableSetFilterer{contract: contract}, nil
  3072  }
  3073  
  3074  // bindEnumerableSet binds a generic wrapper to an already deployed contract.
  3075  func bindEnumerableSet(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  3076  	parsed, err := abi.JSON(strings.NewReader(EnumerableSetABI))
  3077  	if err != nil {
  3078  		return nil, err
  3079  	}
  3080  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  3081  }
  3082  
  3083  // Call invokes the (constant) contract method with params as input values and
  3084  // sets the output to result. The result type might be a single field for simple
  3085  // returns, a slice of interfaces for anonymous returns and a struct for named
  3086  // returns.
  3087  func (_EnumerableSet *EnumerableSetRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3088  	return _EnumerableSet.Contract.EnumerableSetCaller.contract.Call(opts, result, method, params...)
  3089  }
  3090  
  3091  // Transfer initiates a plain transaction to move funds to the contract, calling
  3092  // its default method if one is available.
  3093  func (_EnumerableSet *EnumerableSetRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3094  	return _EnumerableSet.Contract.EnumerableSetTransactor.contract.Transfer(opts)
  3095  }
  3096  
  3097  // Transact invokes the (paid) contract method with params as input values.
  3098  func (_EnumerableSet *EnumerableSetRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3099  	return _EnumerableSet.Contract.EnumerableSetTransactor.contract.Transact(opts, method, params...)
  3100  }
  3101  
  3102  // Call invokes the (constant) contract method with params as input values and
  3103  // sets the output to result. The result type might be a single field for simple
  3104  // returns, a slice of interfaces for anonymous returns and a struct for named
  3105  // returns.
  3106  func (_EnumerableSet *EnumerableSetCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3107  	return _EnumerableSet.Contract.contract.Call(opts, result, method, params...)
  3108  }
  3109  
  3110  // Transfer initiates a plain transaction to move funds to the contract, calling
  3111  // its default method if one is available.
  3112  func (_EnumerableSet *EnumerableSetTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3113  	return _EnumerableSet.Contract.contract.Transfer(opts)
  3114  }
  3115  
  3116  // Transact invokes the (paid) contract method with params as input values.
  3117  func (_EnumerableSet *EnumerableSetTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3118  	return _EnumerableSet.Contract.contract.Transact(opts, method, params...)
  3119  }
  3120  
  3121  // FFFNFTABI is the input ABI used to generate the binding from.
  3122  const FFFNFTABI = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"NewRevo\",\"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\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"content\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mediaUrl\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"certUrl\",\"type\":\"string[]\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextFFFId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minterAddress\",\"type\":\"address\"}],\"name\":\"setMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minterAddress\",\"type\":\"address\"}],\"name\":\"setMinterContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"content\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mediaUrl\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  3123  
  3124  // FFFNFTFuncSigs maps the 4-byte function signature to its string representation.
  3125  var FFFNFTFuncSigs = map[string]string{
  3126  	"095ea7b3": "approve(address,uint256)",
  3127  	"70a08231": "balanceOf(address)",
  3128  	"6c0360eb": "baseURI()",
  3129  	"42966c68": "burn(uint256)",
  3130  	"081812fc": "getApproved(uint256)",
  3131  	"e985e9c5": "isApprovedForAll(address,address)",
  3132  	"51f9907f": "mint(address,string,string,string,string[])",
  3133  	"06fdde03": "name()",
  3134  	"302b6392": "nextFFFId()",
  3135  	"8da5cb5b": "owner()",
  3136  	"6352211e": "ownerOf(uint256)",
  3137  	"715018a6": "renounceOwnership()",
  3138  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  3139  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  3140  	"a22cb465": "setApprovalForAll(address,bool)",
  3141  	"fca3b5aa": "setMinter(address)",
  3142  	"38478ae7": "setMinterContract(address)",
  3143  	"01ffc9a7": "supportsInterface(bytes4)",
  3144  	"95d89b41": "symbol()",
  3145  	"4f6ccce7": "tokenByIndex(uint256)",
  3146  	"cc33c875": "tokenInfo(uint256)",
  3147  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  3148  	"c87b56dd": "tokenURI(uint256)",
  3149  	"18160ddd": "totalSupply()",
  3150  	"23b872dd": "transferFrom(address,address,uint256)",
  3151  	"f2fde38b": "transferOwnership(address)",
  3152  }
  3153  
  3154  // FFFNFTBin is the compiled bytecode used for deploying new contracts.
  3155  var FFFNFTBin = "0x60806040523480156200001157600080fd5b506040518060400160405280600681526020016511919193919560d21b8152506040518060400160405280600681526020016511919193919560d21b815250620000686301ffc9a760e01b6200012b60201b60201c565b81516200007d9060069060208501906200028a565b508051620000939060079060208401906200028a565b50620000a66380ac58cd60e01b6200012b565b620000b8635b5e139f60e01b6200012b565b620000ca63780e9d6360e01b6200012b565b5050600a80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200011a30620001b0565b62000125306200021d565b6200036d565b6001600160e01b031980821614156200018b5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b600a546001600160a01b03163314620001fb5760405162461bcd60e51b8152602060048201819052602482015260008051602062002691833981519152604482015260640162000182565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314620002685760405162461bcd60e51b8152602060048201819052602482015260008051602062002691833981519152604482015260640162000182565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b828054620002989062000330565b90600052602060002090601f016020900481019282620002bc576000855562000307565b82601f10620002d757805160ff191683800117855562000307565b8280016001018555821562000307579182015b8281111562000307578251825591602001919060010190620002ea565b506200031592915062000319565b5090565b5b808211156200031557600081556001016200031a565b600181811c908216806200034557607f821691505b602082108114156200036757634e487b7160e01b600052602260045260246000fd5b50919050565b612314806200037d6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636352211e116100de578063a22cb46511610097578063cc33c87511610071578063cc33c8751461033c578063e985e9c514610360578063f2fde38b1461039c578063fca3b5aa146103af5761018e565b8063a22cb46514610303578063b88d4fde14610316578063c87b56dd146103295761018e565b80636352211e146102b45780636c0360eb146102c757806370a08231146102cf578063715018a6146102e25780638da5cb5b146102ea57806395d89b41146102fb5761018e565b80632f745c591161014b57806342842e0e1161012557806342842e0e1461026857806342966c681461027b5780634f6ccce71461028e57806351f9907f146102a15761018e565b80632f745c5914610239578063302b63921461024c57806338478ae7146102555761018e565b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb57806318160ddd1461021057806323b872dd14610226575b600080fd5b6101a66101a1366004611f9f565b6103c2565b60405190151581526020015b60405180910390f35b6101c36103e5565b6040516101b29190612077565b6101e36101de366004611fd7565b610477565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611f76565b610504565b005b61021861061a565b6040519081526020016101b2565b61020e610234366004611d6b565b61062b565b610218610247366004611f76565b61065d565b610218600d5481565b61020e610263366004611d1f565b610688565b61020e610276366004611d6b565b6106d4565b61020e610289366004611fd7565b6106ef565b61021861029c366004611fd7565b610769565b61020e6102af366004611e59565b61077f565b6101e36102c2366004611fd7565b61090c565b6101c3610934565b6102186102dd366004611d1f565b610943565b61020e6109cf565b600a546001600160a01b03166101e3565b6101c3610a43565b61020e610311366004611e1f565b610a52565b61020e610324366004611da6565b610b24565b6101c3610337366004611fd7565b610b5c565b61034f61034a366004611fd7565b610c6c565b6040516101b295949392919061208a565b6101a661036e366004611d39565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61020e6103aa366004611d1f565b610e41565b61020e6103bd366004611d1f565b610f2c565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b6060600680546103f49061221d565b80601f01602080910402602001604051908101604052809291908181526020018280546104209061221d565b801561046d5780601f106104425761010080835404028352916020019161046d565b820191906000526020600020905b81548152906001019060200180831161045057829003601f168201915b5050505050905090565b600061048282610f78565b6104e85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061050f8261090c565b9050806001600160a01b0316836001600160a01b0316141561057d5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016104df565b336001600160a01b03821614806105995750610599813361036e565b61060b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016104df565b6106158383610f85565b505050565b60006106266002610ff3565b905090565b610636335b82610ffd565b6106525760405162461bcd60e51b81526004016104df9061216c565b6106158383836110e7565b6001600160a01b038216600090815260016020526040812061067f9083611124565b90505b92915050565b600a546001600160a01b031633146106b25760405162461bcd60e51b81526004016104df90612137565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61061583838360405180602001604052806000815250610b24565b6106f833610630565b61075d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016104df565b61076681611130565b50565b6000806107776002846111ea565b509392505050565b600a546001600160a01b03163314806107a25750600b546001600160a01b031633145b806107b75750600c546001600160a01b031633145b61081a5760405162461bcd60e51b815260206004820152602e60248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526d1037b9103a34329036b4b73a32b960911b60648201526084016104df565b600d805490600061082a83612258565b9091555050600d80546000818152600e602090815260408083206005810194909455600190930180546001600160a01b0319166001600160a01b038b161790559254815220855161087d92870190611b4a565b50600d546000908152600e6020908152604090912084516108a692600290920191860190611b4a565b50600d546000908152600e6020908152604090912083516108cf92600490920191850190611b4a565b50600d546000908152600e6020908152604090912082516108f892600390920191840190611bce565b5061090585600d54611206565b5050505050565b6000610682826040518060600160405280602981526020016122b6602991396002919061131e565b6060600980546103f49061221d565b60006001600160a01b0382166109ae5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016104df565b6001600160a01b038216600090815260016020526040902061068290610ff3565b600a546001600160a01b031633146109f95760405162461bcd60e51b81526004016104df90612137565b600a546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600a80546001600160a01b0319169055565b6060600780546103f49061221d565b6001600160a01b038216331415610aab5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104df565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b18911515815260200190565b60405180910390a35050565b610b2e3383610ffd565b610b4a5760405162461bcd60e51b81526004016104df9061216c565b610b5684848484611335565b50505050565b6060610b6782610f78565b610bcb5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016104df565b6000828152600e602052604090206004018054610be79061221d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c139061221d565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b50505050509050919050565b600e60205260009081526040902080548190610c879061221d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb39061221d565b8015610d005780601f10610cd557610100808354040283529160200191610d00565b820191906000526020600020905b815481529060010190602001808311610ce357829003601f168201915b505050600184015460028501805494956001600160a01b03909216949193509150610d2a9061221d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d569061221d565b8015610da35780601f10610d7857610100808354040283529160200191610da3565b820191906000526020600020905b815481529060010190602001808311610d8657829003601f168201915b505050505090806004018054610db89061221d565b80601f0160208091040260200160405190810160405280929190818152602001828054610de49061221d565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050505050908060050154905085565b600a546001600160a01b03163314610e6b5760405162461bcd60e51b81526004016104df90612137565b6001600160a01b038116610ed05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104df565b600a546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314610f565760405162461bcd60e51b81526004016104df90612137565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610682600283611368565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fba8261090c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610682825490565b600061100882610f78565b6110695760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016104df565b60006110748361090c565b9050806001600160a01b0316846001600160a01b031614806110af5750836001600160a01b03166110a484610477565b6001600160a01b0316145b806110df57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b6110f2838383611380565b6000908152600e6020526040902060010180546001600160a01b0319166001600160a01b039290921691909117905550565b600061067f8383611501565b600061113b8261090c565b9050611148600083610f85565b600082815260086020526040902080546111619061221d565b15905061117f57600082815260086020526040812061117f91611c27565b6001600160a01b03811660009081526001602052604090206111a19083611595565b506111ad6002836115a1565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008080806111f986866115ad565b9097909650945050505050565b6001600160a01b03821661125c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104df565b61126581610f78565b156112b25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104df565b6001600160a01b03821660009081526001602052604090206112d49082611658565b506112e160028284611664565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061132b84848461167a565b90505b9392505050565b6113408484846110e7565b61134c848484846116f1565b610b565760405162461bcd60e51b81526004016104df906120e5565b6000818152600183016020526040812054151561067f565b826001600160a01b03166113938261090c565b6001600160a01b0316146113fb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016104df565b6001600160a01b03821661145d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104df565b611468600082610f85565b6001600160a01b038316600090815260016020526040902061148a9082611595565b506001600160a01b03821660009081526001602052604090206114ad9082611658565b506114ba60028284611664565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8154600090821061155f5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016104df565b82600001828154811061158257634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b600061067f83836117fe565b600061067f838361191b565b81546000908190831061160d5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016104df565b600084600001848154811061163257634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020190508060000154816001015492509250509250929050565b600061067f8383611a4c565b600061132b84846001600160a01b038516611a9b565b600082815260018401602052604081205482816116aa5760405162461bcd60e51b81526004016104df9190612077565b50846116b7600183612206565b815481106116d557634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101549150509392505050565b60006001600160a01b0384163b156117f357604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061173590339089908890889060040161203a565b602060405180830381600087803b15801561174f57600080fd5b505af192505050801561177f575060408051601f3d908101601f1916820190925261177c91810190611fbb565b60015b6117d9573d8080156117ad576040519150601f19603f3d011682016040523d82523d6000602084013e6117b2565b606091505b5080516117d15760405162461bcd60e51b81526004016104df906120e5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506110df565b506001949350505050565b60008181526001830160205260408120548015611911576000611822600183612206565b855490915060009061183690600190612206565b9050600086600001828154811061185d57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061188e57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001556118a58360016121ee565b600082815260018901602052604090205586548790806118d557634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610682565b6000915050610682565b6000818152600183016020526040812054801561191157600061193f600183612206565b855490915060009061195390600190612206565b9050600086600001828154811061197a57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600202019050808760000184815481106119ae57634e487b7160e01b600052603260045260246000fd5b600091825260209091208254600290920201908155600191820154908201556119d89084906121ee565b815460009081526001890160205260409020558654879080611a0a57634e487b7160e01b600052603160045260246000fd5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506106829350505050565b6000818152600183016020526040812054611a9357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610682565b506000610682565b600082815260018401602052604081205480611b0057505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561132e565b8285611b0d600184612206565b81548110611b2b57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550600091505061132e565b828054611b569061221d565b90600052602060002090601f016020900481019282611b785760008555611bbe565b82601f10611b9157805160ff1916838001178555611bbe565b82800160010185558215611bbe579182015b82811115611bbe578251825591602001919060010190611ba3565b50611bca929150611c5f565b5090565b828054828255906000526020600020908101928215611c1b579160200282015b82811115611c1b5782518051611c0b918491602090910190611b4a565b5091602001919060010190611bee565b50611bca929150611c74565b508054611c339061221d565b6000825580601f10611c455750610766565b601f01602090049060005260206000209081019061076691905b5b80821115611bca5760008155600101611c60565b80821115611bca576000611c888282611c27565b50600101611c74565b600067ffffffffffffffff831115611cab57611cab612289565b611cbe601f8401601f19166020016121bd565b9050828152838383011115611cd257600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146103e057600080fd5b600082601f830112611d10578081fd5b61067f83833560208501611c91565b600060208284031215611d30578081fd5b61067f82611ce9565b60008060408385031215611d4b578081fd5b611d5483611ce9565b9150611d6260208401611ce9565b90509250929050565b600080600060608486031215611d7f578081fd5b611d8884611ce9565b9250611d9660208501611ce9565b9150604084013590509250925092565b60008060008060808587031215611dbb578081fd5b611dc485611ce9565b9350611dd260208601611ce9565b925060408501359150606085013567ffffffffffffffff811115611df4578182fd5b8501601f81018713611e04578182fd5b611e1387823560208401611c91565b91505092959194509250565b60008060408385031215611e31578182fd5b611e3a83611ce9565b915060208301358015158114611e4e578182fd5b809150509250929050565b600080600080600060a08688031215611e70578081fd5b611e7986611ce9565b945060208087013567ffffffffffffffff80821115611e96578384fd5b611ea28a838b01611d00565b96506040890135915080821115611eb7578384fd5b611ec38a838b01611d00565b95506060890135915080821115611ed8578384fd5b611ee48a838b01611d00565b94506080890135915080821115611ef9578384fd5b818901915089601f830112611f0c578384fd5b813581811115611f1e57611f1e612289565b611f2c848260051b016121bd565b8181528481019250838501865b83811015611f6257611f508e888435890101611d00565b85529386019390860190600101611f39565b505080955050505050509295509295909350565b60008060408385031215611f88578182fd5b611f9183611ce9565b946020939093013593505050565b600060208284031215611fb0578081fd5b813561132e8161229f565b600060208284031215611fcc578081fd5b815161132e8161229f565b600060208284031215611fe8578081fd5b5035919050565b60008151808452815b8181101561201457602081850181015186830182015201611ff8565b818111156120255782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061206d90830184611fef565b9695505050505050565b60006020825261067f6020830184611fef565b600060a0825261209d60a0830188611fef565b6001600160a01b038716602084015282810360408401526120be8187611fef565b905082810360608401526120d28186611fef565b9150508260808301529695505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156121e6576121e6612289565b604052919050565b6000821982111561220157612201612273565b500190565b60008282101561221857612218612273565b500390565b600181811c9082168061223157607f821691505b6020821081141561225257634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561226c5761226c612273565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461076657600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220b380a8d2c9d5ec3d6d6e40e97efc3cf8d10473a8f9c29607d5310fb338a7cbb564736f6c634300080300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572"
  3156  
  3157  // DeployFFFNFT deploys a new Ethereum contract, binding an instance of FFFNFT to it.
  3158  func DeployFFFNFT(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *FFFNFT, error) {
  3159  	parsed, err := abi.JSON(strings.NewReader(FFFNFTABI))
  3160  	if err != nil {
  3161  		return common.Address{}, nil, nil, err
  3162  	}
  3163  
  3164  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(FFFNFTBin), backend)
  3165  	if err != nil {
  3166  		return common.Address{}, nil, nil, err
  3167  	}
  3168  	return address, tx, &FFFNFT{FFFNFTCaller: FFFNFTCaller{contract: contract}, FFFNFTTransactor: FFFNFTTransactor{contract: contract}, FFFNFTFilterer: FFFNFTFilterer{contract: contract}}, nil
  3169  }
  3170  
  3171  // FFFNFT is an auto generated Go binding around an Ethereum contract.
  3172  type FFFNFT struct {
  3173  	FFFNFTCaller     // Read-only binding to the contract
  3174  	FFFNFTTransactor // Write-only binding to the contract
  3175  	FFFNFTFilterer   // Log filterer for contract events
  3176  }
  3177  
  3178  // FFFNFTCaller is an auto generated read-only Go binding around an Ethereum contract.
  3179  type FFFNFTCaller struct {
  3180  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3181  }
  3182  
  3183  // FFFNFTTransactor is an auto generated write-only Go binding around an Ethereum contract.
  3184  type FFFNFTTransactor struct {
  3185  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3186  }
  3187  
  3188  // FFFNFTFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  3189  type FFFNFTFilterer struct {
  3190  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3191  }
  3192  
  3193  // FFFNFTSession is an auto generated Go binding around an Ethereum contract,
  3194  // with pre-set call and transact options.
  3195  type FFFNFTSession struct {
  3196  	Contract     *FFFNFT           // Generic contract binding to set the session for
  3197  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  3198  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  3199  }
  3200  
  3201  // FFFNFTCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  3202  // with pre-set call options.
  3203  type FFFNFTCallerSession struct {
  3204  	Contract *FFFNFTCaller // Generic contract caller binding to set the session for
  3205  	CallOpts bind.CallOpts // Call options to use throughout this session
  3206  }
  3207  
  3208  // FFFNFTTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  3209  // with pre-set transact options.
  3210  type FFFNFTTransactorSession struct {
  3211  	Contract     *FFFNFTTransactor // Generic contract transactor binding to set the session for
  3212  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  3213  }
  3214  
  3215  // FFFNFTRaw is an auto generated low-level Go binding around an Ethereum contract.
  3216  type FFFNFTRaw struct {
  3217  	Contract *FFFNFT // Generic contract binding to access the raw methods on
  3218  }
  3219  
  3220  // FFFNFTCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  3221  type FFFNFTCallerRaw struct {
  3222  	Contract *FFFNFTCaller // Generic read-only contract binding to access the raw methods on
  3223  }
  3224  
  3225  // FFFNFTTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  3226  type FFFNFTTransactorRaw struct {
  3227  	Contract *FFFNFTTransactor // Generic write-only contract binding to access the raw methods on
  3228  }
  3229  
  3230  // NewFFFNFT creates a new instance of FFFNFT, bound to a specific deployed contract.
  3231  func NewFFFNFT(address common.Address, backend bind.ContractBackend) (*FFFNFT, error) {
  3232  	contract, err := bindFFFNFT(address, backend, backend, backend)
  3233  	if err != nil {
  3234  		return nil, err
  3235  	}
  3236  	return &FFFNFT{FFFNFTCaller: FFFNFTCaller{contract: contract}, FFFNFTTransactor: FFFNFTTransactor{contract: contract}, FFFNFTFilterer: FFFNFTFilterer{contract: contract}}, nil
  3237  }
  3238  
  3239  // NewFFFNFTCaller creates a new read-only instance of FFFNFT, bound to a specific deployed contract.
  3240  func NewFFFNFTCaller(address common.Address, caller bind.ContractCaller) (*FFFNFTCaller, error) {
  3241  	contract, err := bindFFFNFT(address, caller, nil, nil)
  3242  	if err != nil {
  3243  		return nil, err
  3244  	}
  3245  	return &FFFNFTCaller{contract: contract}, nil
  3246  }
  3247  
  3248  // NewFFFNFTTransactor creates a new write-only instance of FFFNFT, bound to a specific deployed contract.
  3249  func NewFFFNFTTransactor(address common.Address, transactor bind.ContractTransactor) (*FFFNFTTransactor, error) {
  3250  	contract, err := bindFFFNFT(address, nil, transactor, nil)
  3251  	if err != nil {
  3252  		return nil, err
  3253  	}
  3254  	return &FFFNFTTransactor{contract: contract}, nil
  3255  }
  3256  
  3257  // NewFFFNFTFilterer creates a new log filterer instance of FFFNFT, bound to a specific deployed contract.
  3258  func NewFFFNFTFilterer(address common.Address, filterer bind.ContractFilterer) (*FFFNFTFilterer, error) {
  3259  	contract, err := bindFFFNFT(address, nil, nil, filterer)
  3260  	if err != nil {
  3261  		return nil, err
  3262  	}
  3263  	return &FFFNFTFilterer{contract: contract}, nil
  3264  }
  3265  
  3266  // bindFFFNFT binds a generic wrapper to an already deployed contract.
  3267  func bindFFFNFT(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  3268  	parsed, err := abi.JSON(strings.NewReader(FFFNFTABI))
  3269  	if err != nil {
  3270  		return nil, err
  3271  	}
  3272  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  3273  }
  3274  
  3275  // Call invokes the (constant) contract method with params as input values and
  3276  // sets the output to result. The result type might be a single field for simple
  3277  // returns, a slice of interfaces for anonymous returns and a struct for named
  3278  // returns.
  3279  func (_FFFNFT *FFFNFTRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3280  	return _FFFNFT.Contract.FFFNFTCaller.contract.Call(opts, result, method, params...)
  3281  }
  3282  
  3283  // Transfer initiates a plain transaction to move funds to the contract, calling
  3284  // its default method if one is available.
  3285  func (_FFFNFT *FFFNFTRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3286  	return _FFFNFT.Contract.FFFNFTTransactor.contract.Transfer(opts)
  3287  }
  3288  
  3289  // Transact invokes the (paid) contract method with params as input values.
  3290  func (_FFFNFT *FFFNFTRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3291  	return _FFFNFT.Contract.FFFNFTTransactor.contract.Transact(opts, method, params...)
  3292  }
  3293  
  3294  // Call invokes the (constant) contract method with params as input values and
  3295  // sets the output to result. The result type might be a single field for simple
  3296  // returns, a slice of interfaces for anonymous returns and a struct for named
  3297  // returns.
  3298  func (_FFFNFT *FFFNFTCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3299  	return _FFFNFT.Contract.contract.Call(opts, result, method, params...)
  3300  }
  3301  
  3302  // Transfer initiates a plain transaction to move funds to the contract, calling
  3303  // its default method if one is available.
  3304  func (_FFFNFT *FFFNFTTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3305  	return _FFFNFT.Contract.contract.Transfer(opts)
  3306  }
  3307  
  3308  // Transact invokes the (paid) contract method with params as input values.
  3309  func (_FFFNFT *FFFNFTTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3310  	return _FFFNFT.Contract.contract.Transact(opts, method, params...)
  3311  }
  3312  
  3313  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  3314  //
  3315  // Solidity: function balanceOf(address owner) view returns(uint256)
  3316  func (_FFFNFT *FFFNFTCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  3317  	var out []interface{}
  3318  	err := _FFFNFT.contract.Call(opts, &out, "balanceOf", owner)
  3319  
  3320  	if err != nil {
  3321  		return *new(*big.Int), err
  3322  	}
  3323  
  3324  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3325  
  3326  	return out0, err
  3327  
  3328  }
  3329  
  3330  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  3331  //
  3332  // Solidity: function balanceOf(address owner) view returns(uint256)
  3333  func (_FFFNFT *FFFNFTSession) BalanceOf(owner common.Address) (*big.Int, error) {
  3334  	return _FFFNFT.Contract.BalanceOf(&_FFFNFT.CallOpts, owner)
  3335  }
  3336  
  3337  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  3338  //
  3339  // Solidity: function balanceOf(address owner) view returns(uint256)
  3340  func (_FFFNFT *FFFNFTCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  3341  	return _FFFNFT.Contract.BalanceOf(&_FFFNFT.CallOpts, owner)
  3342  }
  3343  
  3344  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
  3345  //
  3346  // Solidity: function baseURI() view returns(string)
  3347  func (_FFFNFT *FFFNFTCaller) BaseURI(opts *bind.CallOpts) (string, error) {
  3348  	var out []interface{}
  3349  	err := _FFFNFT.contract.Call(opts, &out, "baseURI")
  3350  
  3351  	if err != nil {
  3352  		return *new(string), err
  3353  	}
  3354  
  3355  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  3356  
  3357  	return out0, err
  3358  
  3359  }
  3360  
  3361  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
  3362  //
  3363  // Solidity: function baseURI() view returns(string)
  3364  func (_FFFNFT *FFFNFTSession) BaseURI() (string, error) {
  3365  	return _FFFNFT.Contract.BaseURI(&_FFFNFT.CallOpts)
  3366  }
  3367  
  3368  // BaseURI is a free data retrieval call binding the contract method 0x6c0360eb.
  3369  //
  3370  // Solidity: function baseURI() view returns(string)
  3371  func (_FFFNFT *FFFNFTCallerSession) BaseURI() (string, error) {
  3372  	return _FFFNFT.Contract.BaseURI(&_FFFNFT.CallOpts)
  3373  }
  3374  
  3375  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  3376  //
  3377  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  3378  func (_FFFNFT *FFFNFTCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  3379  	var out []interface{}
  3380  	err := _FFFNFT.contract.Call(opts, &out, "getApproved", tokenId)
  3381  
  3382  	if err != nil {
  3383  		return *new(common.Address), err
  3384  	}
  3385  
  3386  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3387  
  3388  	return out0, err
  3389  
  3390  }
  3391  
  3392  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  3393  //
  3394  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  3395  func (_FFFNFT *FFFNFTSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  3396  	return _FFFNFT.Contract.GetApproved(&_FFFNFT.CallOpts, tokenId)
  3397  }
  3398  
  3399  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  3400  //
  3401  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  3402  func (_FFFNFT *FFFNFTCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  3403  	return _FFFNFT.Contract.GetApproved(&_FFFNFT.CallOpts, tokenId)
  3404  }
  3405  
  3406  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  3407  //
  3408  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  3409  func (_FFFNFT *FFFNFTCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  3410  	var out []interface{}
  3411  	err := _FFFNFT.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  3412  
  3413  	if err != nil {
  3414  		return *new(bool), err
  3415  	}
  3416  
  3417  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  3418  
  3419  	return out0, err
  3420  
  3421  }
  3422  
  3423  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  3424  //
  3425  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  3426  func (_FFFNFT *FFFNFTSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  3427  	return _FFFNFT.Contract.IsApprovedForAll(&_FFFNFT.CallOpts, owner, operator)
  3428  }
  3429  
  3430  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  3431  //
  3432  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  3433  func (_FFFNFT *FFFNFTCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  3434  	return _FFFNFT.Contract.IsApprovedForAll(&_FFFNFT.CallOpts, owner, operator)
  3435  }
  3436  
  3437  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  3438  //
  3439  // Solidity: function name() view returns(string)
  3440  func (_FFFNFT *FFFNFTCaller) Name(opts *bind.CallOpts) (string, error) {
  3441  	var out []interface{}
  3442  	err := _FFFNFT.contract.Call(opts, &out, "name")
  3443  
  3444  	if err != nil {
  3445  		return *new(string), err
  3446  	}
  3447  
  3448  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  3449  
  3450  	return out0, err
  3451  
  3452  }
  3453  
  3454  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  3455  //
  3456  // Solidity: function name() view returns(string)
  3457  func (_FFFNFT *FFFNFTSession) Name() (string, error) {
  3458  	return _FFFNFT.Contract.Name(&_FFFNFT.CallOpts)
  3459  }
  3460  
  3461  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  3462  //
  3463  // Solidity: function name() view returns(string)
  3464  func (_FFFNFT *FFFNFTCallerSession) Name() (string, error) {
  3465  	return _FFFNFT.Contract.Name(&_FFFNFT.CallOpts)
  3466  }
  3467  
  3468  // NextFFFId is a free data retrieval call binding the contract method 0x302b6392.
  3469  //
  3470  // Solidity: function nextFFFId() view returns(uint256)
  3471  func (_FFFNFT *FFFNFTCaller) NextFFFId(opts *bind.CallOpts) (*big.Int, error) {
  3472  	var out []interface{}
  3473  	err := _FFFNFT.contract.Call(opts, &out, "nextFFFId")
  3474  
  3475  	if err != nil {
  3476  		return *new(*big.Int), err
  3477  	}
  3478  
  3479  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3480  
  3481  	return out0, err
  3482  
  3483  }
  3484  
  3485  // NextFFFId is a free data retrieval call binding the contract method 0x302b6392.
  3486  //
  3487  // Solidity: function nextFFFId() view returns(uint256)
  3488  func (_FFFNFT *FFFNFTSession) NextFFFId() (*big.Int, error) {
  3489  	return _FFFNFT.Contract.NextFFFId(&_FFFNFT.CallOpts)
  3490  }
  3491  
  3492  // NextFFFId is a free data retrieval call binding the contract method 0x302b6392.
  3493  //
  3494  // Solidity: function nextFFFId() view returns(uint256)
  3495  func (_FFFNFT *FFFNFTCallerSession) NextFFFId() (*big.Int, error) {
  3496  	return _FFFNFT.Contract.NextFFFId(&_FFFNFT.CallOpts)
  3497  }
  3498  
  3499  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
  3500  //
  3501  // Solidity: function owner() view returns(address)
  3502  func (_FFFNFT *FFFNFTCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
  3503  	var out []interface{}
  3504  	err := _FFFNFT.contract.Call(opts, &out, "owner")
  3505  
  3506  	if err != nil {
  3507  		return *new(common.Address), err
  3508  	}
  3509  
  3510  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3511  
  3512  	return out0, err
  3513  
  3514  }
  3515  
  3516  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
  3517  //
  3518  // Solidity: function owner() view returns(address)
  3519  func (_FFFNFT *FFFNFTSession) Owner() (common.Address, error) {
  3520  	return _FFFNFT.Contract.Owner(&_FFFNFT.CallOpts)
  3521  }
  3522  
  3523  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
  3524  //
  3525  // Solidity: function owner() view returns(address)
  3526  func (_FFFNFT *FFFNFTCallerSession) Owner() (common.Address, error) {
  3527  	return _FFFNFT.Contract.Owner(&_FFFNFT.CallOpts)
  3528  }
  3529  
  3530  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  3531  //
  3532  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  3533  func (_FFFNFT *FFFNFTCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  3534  	var out []interface{}
  3535  	err := _FFFNFT.contract.Call(opts, &out, "ownerOf", tokenId)
  3536  
  3537  	if err != nil {
  3538  		return *new(common.Address), err
  3539  	}
  3540  
  3541  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3542  
  3543  	return out0, err
  3544  
  3545  }
  3546  
  3547  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  3548  //
  3549  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  3550  func (_FFFNFT *FFFNFTSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  3551  	return _FFFNFT.Contract.OwnerOf(&_FFFNFT.CallOpts, tokenId)
  3552  }
  3553  
  3554  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  3555  //
  3556  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  3557  func (_FFFNFT *FFFNFTCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  3558  	return _FFFNFT.Contract.OwnerOf(&_FFFNFT.CallOpts, tokenId)
  3559  }
  3560  
  3561  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  3562  //
  3563  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  3564  func (_FFFNFT *FFFNFTCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  3565  	var out []interface{}
  3566  	err := _FFFNFT.contract.Call(opts, &out, "supportsInterface", interfaceId)
  3567  
  3568  	if err != nil {
  3569  		return *new(bool), err
  3570  	}
  3571  
  3572  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  3573  
  3574  	return out0, err
  3575  
  3576  }
  3577  
  3578  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  3579  //
  3580  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  3581  func (_FFFNFT *FFFNFTSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  3582  	return _FFFNFT.Contract.SupportsInterface(&_FFFNFT.CallOpts, interfaceId)
  3583  }
  3584  
  3585  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  3586  //
  3587  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  3588  func (_FFFNFT *FFFNFTCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  3589  	return _FFFNFT.Contract.SupportsInterface(&_FFFNFT.CallOpts, interfaceId)
  3590  }
  3591  
  3592  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  3593  //
  3594  // Solidity: function symbol() view returns(string)
  3595  func (_FFFNFT *FFFNFTCaller) Symbol(opts *bind.CallOpts) (string, error) {
  3596  	var out []interface{}
  3597  	err := _FFFNFT.contract.Call(opts, &out, "symbol")
  3598  
  3599  	if err != nil {
  3600  		return *new(string), err
  3601  	}
  3602  
  3603  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  3604  
  3605  	return out0, err
  3606  
  3607  }
  3608  
  3609  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  3610  //
  3611  // Solidity: function symbol() view returns(string)
  3612  func (_FFFNFT *FFFNFTSession) Symbol() (string, error) {
  3613  	return _FFFNFT.Contract.Symbol(&_FFFNFT.CallOpts)
  3614  }
  3615  
  3616  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  3617  //
  3618  // Solidity: function symbol() view returns(string)
  3619  func (_FFFNFT *FFFNFTCallerSession) Symbol() (string, error) {
  3620  	return _FFFNFT.Contract.Symbol(&_FFFNFT.CallOpts)
  3621  }
  3622  
  3623  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  3624  //
  3625  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  3626  func (_FFFNFT *FFFNFTCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  3627  	var out []interface{}
  3628  	err := _FFFNFT.contract.Call(opts, &out, "tokenByIndex", index)
  3629  
  3630  	if err != nil {
  3631  		return *new(*big.Int), err
  3632  	}
  3633  
  3634  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3635  
  3636  	return out0, err
  3637  
  3638  }
  3639  
  3640  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  3641  //
  3642  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  3643  func (_FFFNFT *FFFNFTSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  3644  	return _FFFNFT.Contract.TokenByIndex(&_FFFNFT.CallOpts, index)
  3645  }
  3646  
  3647  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  3648  //
  3649  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  3650  func (_FFFNFT *FFFNFTCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  3651  	return _FFFNFT.Contract.TokenByIndex(&_FFFNFT.CallOpts, index)
  3652  }
  3653  
  3654  // TokenInfo is a free data retrieval call binding the contract method 0xcc33c875.
  3655  //
  3656  // Solidity: function tokenInfo(uint256 ) view returns(string name, address owner, string content, string mediaUrl, uint256 tokenId)
  3657  func (_FFFNFT *FFFNFTCaller) TokenInfo(opts *bind.CallOpts, arg0 *big.Int) (struct {
  3658  	Name     string
  3659  	Owner    common.Address
  3660  	Content  string
  3661  	MediaUrl string
  3662  	TokenId  *big.Int
  3663  }, error) {
  3664  	var out []interface{}
  3665  	err := _FFFNFT.contract.Call(opts, &out, "tokenInfo", arg0)
  3666  
  3667  	outstruct := new(struct {
  3668  		Name     string
  3669  		Owner    common.Address
  3670  		Content  string
  3671  		MediaUrl string
  3672  		TokenId  *big.Int
  3673  	})
  3674  	if err != nil {
  3675  		return *outstruct, err
  3676  	}
  3677  
  3678  	outstruct.Name = *abi.ConvertType(out[0], new(string)).(*string)
  3679  	outstruct.Owner = *abi.ConvertType(out[1], new(common.Address)).(*common.Address)
  3680  	outstruct.Content = *abi.ConvertType(out[2], new(string)).(*string)
  3681  	outstruct.MediaUrl = *abi.ConvertType(out[3], new(string)).(*string)
  3682  	outstruct.TokenId = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int)
  3683  
  3684  	return *outstruct, err
  3685  
  3686  }
  3687  
  3688  // TokenInfo is a free data retrieval call binding the contract method 0xcc33c875.
  3689  //
  3690  // Solidity: function tokenInfo(uint256 ) view returns(string name, address owner, string content, string mediaUrl, uint256 tokenId)
  3691  func (_FFFNFT *FFFNFTSession) TokenInfo(arg0 *big.Int) (struct {
  3692  	Name     string
  3693  	Owner    common.Address
  3694  	Content  string
  3695  	MediaUrl string
  3696  	TokenId  *big.Int
  3697  }, error) {
  3698  	return _FFFNFT.Contract.TokenInfo(&_FFFNFT.CallOpts, arg0)
  3699  }
  3700  
  3701  // TokenInfo is a free data retrieval call binding the contract method 0xcc33c875.
  3702  //
  3703  // Solidity: function tokenInfo(uint256 ) view returns(string name, address owner, string content, string mediaUrl, uint256 tokenId)
  3704  func (_FFFNFT *FFFNFTCallerSession) TokenInfo(arg0 *big.Int) (struct {
  3705  	Name     string
  3706  	Owner    common.Address
  3707  	Content  string
  3708  	MediaUrl string
  3709  	TokenId  *big.Int
  3710  }, error) {
  3711  	return _FFFNFT.Contract.TokenInfo(&_FFFNFT.CallOpts, arg0)
  3712  }
  3713  
  3714  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  3715  //
  3716  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  3717  func (_FFFNFT *FFFNFTCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  3718  	var out []interface{}
  3719  	err := _FFFNFT.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  3720  
  3721  	if err != nil {
  3722  		return *new(*big.Int), err
  3723  	}
  3724  
  3725  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3726  
  3727  	return out0, err
  3728  
  3729  }
  3730  
  3731  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  3732  //
  3733  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  3734  func (_FFFNFT *FFFNFTSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  3735  	return _FFFNFT.Contract.TokenOfOwnerByIndex(&_FFFNFT.CallOpts, owner, index)
  3736  }
  3737  
  3738  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  3739  //
  3740  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  3741  func (_FFFNFT *FFFNFTCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  3742  	return _FFFNFT.Contract.TokenOfOwnerByIndex(&_FFFNFT.CallOpts, owner, index)
  3743  }
  3744  
  3745  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  3746  //
  3747  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  3748  func (_FFFNFT *FFFNFTCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  3749  	var out []interface{}
  3750  	err := _FFFNFT.contract.Call(opts, &out, "tokenURI", tokenId)
  3751  
  3752  	if err != nil {
  3753  		return *new(string), err
  3754  	}
  3755  
  3756  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  3757  
  3758  	return out0, err
  3759  
  3760  }
  3761  
  3762  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  3763  //
  3764  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  3765  func (_FFFNFT *FFFNFTSession) TokenURI(tokenId *big.Int) (string, error) {
  3766  	return _FFFNFT.Contract.TokenURI(&_FFFNFT.CallOpts, tokenId)
  3767  }
  3768  
  3769  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  3770  //
  3771  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  3772  func (_FFFNFT *FFFNFTCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  3773  	return _FFFNFT.Contract.TokenURI(&_FFFNFT.CallOpts, tokenId)
  3774  }
  3775  
  3776  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  3777  //
  3778  // Solidity: function totalSupply() view returns(uint256)
  3779  func (_FFFNFT *FFFNFTCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  3780  	var out []interface{}
  3781  	err := _FFFNFT.contract.Call(opts, &out, "totalSupply")
  3782  
  3783  	if err != nil {
  3784  		return *new(*big.Int), err
  3785  	}
  3786  
  3787  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3788  
  3789  	return out0, err
  3790  
  3791  }
  3792  
  3793  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  3794  //
  3795  // Solidity: function totalSupply() view returns(uint256)
  3796  func (_FFFNFT *FFFNFTSession) TotalSupply() (*big.Int, error) {
  3797  	return _FFFNFT.Contract.TotalSupply(&_FFFNFT.CallOpts)
  3798  }
  3799  
  3800  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  3801  //
  3802  // Solidity: function totalSupply() view returns(uint256)
  3803  func (_FFFNFT *FFFNFTCallerSession) TotalSupply() (*big.Int, error) {
  3804  	return _FFFNFT.Contract.TotalSupply(&_FFFNFT.CallOpts)
  3805  }
  3806  
  3807  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3808  //
  3809  // Solidity: function approve(address to, uint256 tokenId) returns()
  3810  func (_FFFNFT *FFFNFTTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3811  	return _FFFNFT.contract.Transact(opts, "approve", to, tokenId)
  3812  }
  3813  
  3814  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3815  //
  3816  // Solidity: function approve(address to, uint256 tokenId) returns()
  3817  func (_FFFNFT *FFFNFTSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3818  	return _FFFNFT.Contract.Approve(&_FFFNFT.TransactOpts, to, tokenId)
  3819  }
  3820  
  3821  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3822  //
  3823  // Solidity: function approve(address to, uint256 tokenId) returns()
  3824  func (_FFFNFT *FFFNFTTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3825  	return _FFFNFT.Contract.Approve(&_FFFNFT.TransactOpts, to, tokenId)
  3826  }
  3827  
  3828  // Burn is a paid mutator transaction binding the contract method 0x42966c68.
  3829  //
  3830  // Solidity: function burn(uint256 tokenId) returns()
  3831  func (_FFFNFT *FFFNFTTransactor) Burn(opts *bind.TransactOpts, tokenId *big.Int) (*types.Transaction, error) {
  3832  	return _FFFNFT.contract.Transact(opts, "burn", tokenId)
  3833  }
  3834  
  3835  // Burn is a paid mutator transaction binding the contract method 0x42966c68.
  3836  //
  3837  // Solidity: function burn(uint256 tokenId) returns()
  3838  func (_FFFNFT *FFFNFTSession) Burn(tokenId *big.Int) (*types.Transaction, error) {
  3839  	return _FFFNFT.Contract.Burn(&_FFFNFT.TransactOpts, tokenId)
  3840  }
  3841  
  3842  // Burn is a paid mutator transaction binding the contract method 0x42966c68.
  3843  //
  3844  // Solidity: function burn(uint256 tokenId) returns()
  3845  func (_FFFNFT *FFFNFTTransactorSession) Burn(tokenId *big.Int) (*types.Transaction, error) {
  3846  	return _FFFNFT.Contract.Burn(&_FFFNFT.TransactOpts, tokenId)
  3847  }
  3848  
  3849  // Mint is a paid mutator transaction binding the contract method 0x51f9907f.
  3850  //
  3851  // Solidity: function mint(address _to, string name, string content, string mediaUrl, string[] certUrl) returns()
  3852  func (_FFFNFT *FFFNFTTransactor) Mint(opts *bind.TransactOpts, _to common.Address, name string, content string, mediaUrl string, certUrl []string) (*types.Transaction, error) {
  3853  	return _FFFNFT.contract.Transact(opts, "mint", _to, name, content, mediaUrl, certUrl)
  3854  }
  3855  
  3856  // Mint is a paid mutator transaction binding the contract method 0x51f9907f.
  3857  //
  3858  // Solidity: function mint(address _to, string name, string content, string mediaUrl, string[] certUrl) returns()
  3859  func (_FFFNFT *FFFNFTSession) Mint(_to common.Address, name string, content string, mediaUrl string, certUrl []string) (*types.Transaction, error) {
  3860  	return _FFFNFT.Contract.Mint(&_FFFNFT.TransactOpts, _to, name, content, mediaUrl, certUrl)
  3861  }
  3862  
  3863  // Mint is a paid mutator transaction binding the contract method 0x51f9907f.
  3864  //
  3865  // Solidity: function mint(address _to, string name, string content, string mediaUrl, string[] certUrl) returns()
  3866  func (_FFFNFT *FFFNFTTransactorSession) Mint(_to common.Address, name string, content string, mediaUrl string, certUrl []string) (*types.Transaction, error) {
  3867  	return _FFFNFT.Contract.Mint(&_FFFNFT.TransactOpts, _to, name, content, mediaUrl, certUrl)
  3868  }
  3869  
  3870  // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
  3871  //
  3872  // Solidity: function renounceOwnership() returns()
  3873  func (_FFFNFT *FFFNFTTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
  3874  	return _FFFNFT.contract.Transact(opts, "renounceOwnership")
  3875  }
  3876  
  3877  // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
  3878  //
  3879  // Solidity: function renounceOwnership() returns()
  3880  func (_FFFNFT *FFFNFTSession) RenounceOwnership() (*types.Transaction, error) {
  3881  	return _FFFNFT.Contract.RenounceOwnership(&_FFFNFT.TransactOpts)
  3882  }
  3883  
  3884  // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
  3885  //
  3886  // Solidity: function renounceOwnership() returns()
  3887  func (_FFFNFT *FFFNFTTransactorSession) RenounceOwnership() (*types.Transaction, error) {
  3888  	return _FFFNFT.Contract.RenounceOwnership(&_FFFNFT.TransactOpts)
  3889  }
  3890  
  3891  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  3892  //
  3893  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  3894  func (_FFFNFT *FFFNFTTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3895  	return _FFFNFT.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  3896  }
  3897  
  3898  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  3899  //
  3900  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  3901  func (_FFFNFT *FFFNFTSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3902  	return _FFFNFT.Contract.SafeTransferFrom(&_FFFNFT.TransactOpts, from, to, tokenId)
  3903  }
  3904  
  3905  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  3906  //
  3907  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  3908  func (_FFFNFT *FFFNFTTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3909  	return _FFFNFT.Contract.SafeTransferFrom(&_FFFNFT.TransactOpts, from, to, tokenId)
  3910  }
  3911  
  3912  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  3913  //
  3914  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  3915  func (_FFFNFT *FFFNFTTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  3916  	return _FFFNFT.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  3917  }
  3918  
  3919  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  3920  //
  3921  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  3922  func (_FFFNFT *FFFNFTSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  3923  	return _FFFNFT.Contract.SafeTransferFrom0(&_FFFNFT.TransactOpts, from, to, tokenId, _data)
  3924  }
  3925  
  3926  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  3927  //
  3928  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  3929  func (_FFFNFT *FFFNFTTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  3930  	return _FFFNFT.Contract.SafeTransferFrom0(&_FFFNFT.TransactOpts, from, to, tokenId, _data)
  3931  }
  3932  
  3933  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  3934  //
  3935  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  3936  func (_FFFNFT *FFFNFTTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) {
  3937  	return _FFFNFT.contract.Transact(opts, "setApprovalForAll", operator, approved)
  3938  }
  3939  
  3940  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  3941  //
  3942  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  3943  func (_FFFNFT *FFFNFTSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
  3944  	return _FFFNFT.Contract.SetApprovalForAll(&_FFFNFT.TransactOpts, operator, approved)
  3945  }
  3946  
  3947  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  3948  //
  3949  // Solidity: function setApprovalForAll(address operator, bool approved) returns()
  3950  func (_FFFNFT *FFFNFTTransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
  3951  	return _FFFNFT.Contract.SetApprovalForAll(&_FFFNFT.TransactOpts, operator, approved)
  3952  }
  3953  
  3954  // SetMinter is a paid mutator transaction binding the contract method 0xfca3b5aa.
  3955  //
  3956  // Solidity: function setMinter(address _minterAddress) returns()
  3957  func (_FFFNFT *FFFNFTTransactor) SetMinter(opts *bind.TransactOpts, _minterAddress common.Address) (*types.Transaction, error) {
  3958  	return _FFFNFT.contract.Transact(opts, "setMinter", _minterAddress)
  3959  }
  3960  
  3961  // SetMinter is a paid mutator transaction binding the contract method 0xfca3b5aa.
  3962  //
  3963  // Solidity: function setMinter(address _minterAddress) returns()
  3964  func (_FFFNFT *FFFNFTSession) SetMinter(_minterAddress common.Address) (*types.Transaction, error) {
  3965  	return _FFFNFT.Contract.SetMinter(&_FFFNFT.TransactOpts, _minterAddress)
  3966  }
  3967  
  3968  // SetMinter is a paid mutator transaction binding the contract method 0xfca3b5aa.
  3969  //
  3970  // Solidity: function setMinter(address _minterAddress) returns()
  3971  func (_FFFNFT *FFFNFTTransactorSession) SetMinter(_minterAddress common.Address) (*types.Transaction, error) {
  3972  	return _FFFNFT.Contract.SetMinter(&_FFFNFT.TransactOpts, _minterAddress)
  3973  }
  3974  
  3975  // SetMinterContract is a paid mutator transaction binding the contract method 0x38478ae7.
  3976  //
  3977  // Solidity: function setMinterContract(address _minterAddress) returns()
  3978  func (_FFFNFT *FFFNFTTransactor) SetMinterContract(opts *bind.TransactOpts, _minterAddress common.Address) (*types.Transaction, error) {
  3979  	return _FFFNFT.contract.Transact(opts, "setMinterContract", _minterAddress)
  3980  }
  3981  
  3982  // SetMinterContract is a paid mutator transaction binding the contract method 0x38478ae7.
  3983  //
  3984  // Solidity: function setMinterContract(address _minterAddress) returns()
  3985  func (_FFFNFT *FFFNFTSession) SetMinterContract(_minterAddress common.Address) (*types.Transaction, error) {
  3986  	return _FFFNFT.Contract.SetMinterContract(&_FFFNFT.TransactOpts, _minterAddress)
  3987  }
  3988  
  3989  // SetMinterContract is a paid mutator transaction binding the contract method 0x38478ae7.
  3990  //
  3991  // Solidity: function setMinterContract(address _minterAddress) returns()
  3992  func (_FFFNFT *FFFNFTTransactorSession) SetMinterContract(_minterAddress common.Address) (*types.Transaction, error) {
  3993  	return _FFFNFT.Contract.SetMinterContract(&_FFFNFT.TransactOpts, _minterAddress)
  3994  }
  3995  
  3996  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3997  //
  3998  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  3999  func (_FFFNFT *FFFNFTTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4000  	return _FFFNFT.contract.Transact(opts, "transferFrom", from, to, tokenId)
  4001  }
  4002  
  4003  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  4004  //
  4005  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  4006  func (_FFFNFT *FFFNFTSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4007  	return _FFFNFT.Contract.TransferFrom(&_FFFNFT.TransactOpts, from, to, tokenId)
  4008  }
  4009  
  4010  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  4011  //
  4012  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  4013  func (_FFFNFT *FFFNFTTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4014  	return _FFFNFT.Contract.TransferFrom(&_FFFNFT.TransactOpts, from, to, tokenId)
  4015  }
  4016  
  4017  // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
  4018  //
  4019  // Solidity: function transferOwnership(address newOwner) returns()
  4020  func (_FFFNFT *FFFNFTTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
  4021  	return _FFFNFT.contract.Transact(opts, "transferOwnership", newOwner)
  4022  }
  4023  
  4024  // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
  4025  //
  4026  // Solidity: function transferOwnership(address newOwner) returns()
  4027  func (_FFFNFT *FFFNFTSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
  4028  	return _FFFNFT.Contract.TransferOwnership(&_FFFNFT.TransactOpts, newOwner)
  4029  }
  4030  
  4031  // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
  4032  //
  4033  // Solidity: function transferOwnership(address newOwner) returns()
  4034  func (_FFFNFT *FFFNFTTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
  4035  	return _FFFNFT.Contract.TransferOwnership(&_FFFNFT.TransactOpts, newOwner)
  4036  }
  4037  
  4038  // FFFNFTApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the FFFNFT contract.
  4039  type FFFNFTApprovalIterator struct {
  4040  	Event *FFFNFTApproval // Event containing the contract specifics and raw log
  4041  
  4042  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4043  	event    string              // Event name to use for unpacking event data
  4044  
  4045  	logs chan types.Log        // Log channel receiving the found contract events
  4046  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4047  	done bool                  // Whether the subscription completed delivering logs
  4048  	fail error                 // Occurred error to stop iteration
  4049  }
  4050  
  4051  // Next advances the iterator to the subsequent event, returning whether there
  4052  // are any more events found. In case of a retrieval or parsing error, false is
  4053  // returned and Error() can be queried for the exact failure.
  4054  func (it *FFFNFTApprovalIterator) Next() bool {
  4055  	// If the iterator failed, stop iterating
  4056  	if it.fail != nil {
  4057  		return false
  4058  	}
  4059  	// If the iterator completed, deliver directly whatever's available
  4060  	if it.done {
  4061  		select {
  4062  		case log := <-it.logs:
  4063  			it.Event = new(FFFNFTApproval)
  4064  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4065  				it.fail = err
  4066  				return false
  4067  			}
  4068  			it.Event.Raw = log
  4069  			return true
  4070  
  4071  		default:
  4072  			return false
  4073  		}
  4074  	}
  4075  	// Iterator still in progress, wait for either a data or an error event
  4076  	select {
  4077  	case log := <-it.logs:
  4078  		it.Event = new(FFFNFTApproval)
  4079  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4080  			it.fail = err
  4081  			return false
  4082  		}
  4083  		it.Event.Raw = log
  4084  		return true
  4085  
  4086  	case err := <-it.sub.Err():
  4087  		it.done = true
  4088  		it.fail = err
  4089  		return it.Next()
  4090  	}
  4091  }
  4092  
  4093  // Error returns any retrieval or parsing error occurred during filtering.
  4094  func (it *FFFNFTApprovalIterator) Error() error {
  4095  	return it.fail
  4096  }
  4097  
  4098  // Close terminates the iteration process, releasing any pending underlying
  4099  // resources.
  4100  func (it *FFFNFTApprovalIterator) Close() error {
  4101  	it.sub.Unsubscribe()
  4102  	return nil
  4103  }
  4104  
  4105  // FFFNFTApproval represents a Approval event raised by the FFFNFT contract.
  4106  type FFFNFTApproval struct {
  4107  	Owner    common.Address
  4108  	Approved common.Address
  4109  	TokenId  *big.Int
  4110  	Raw      types.Log // Blockchain specific contextual infos
  4111  }
  4112  
  4113  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  4114  //
  4115  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  4116  func (_FFFNFT *FFFNFTFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*FFFNFTApprovalIterator, error) {
  4117  
  4118  	var ownerRule []interface{}
  4119  	for _, ownerItem := range owner {
  4120  		ownerRule = append(ownerRule, ownerItem)
  4121  	}
  4122  	var approvedRule []interface{}
  4123  	for _, approvedItem := range approved {
  4124  		approvedRule = append(approvedRule, approvedItem)
  4125  	}
  4126  	var tokenIdRule []interface{}
  4127  	for _, tokenIdItem := range tokenId {
  4128  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4129  	}
  4130  
  4131  	logs, sub, err := _FFFNFT.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  4132  	if err != nil {
  4133  		return nil, err
  4134  	}
  4135  	return &FFFNFTApprovalIterator{contract: _FFFNFT.contract, event: "Approval", logs: logs, sub: sub}, nil
  4136  }
  4137  
  4138  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  4139  //
  4140  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  4141  func (_FFFNFT *FFFNFTFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *FFFNFTApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  4142  
  4143  	var ownerRule []interface{}
  4144  	for _, ownerItem := range owner {
  4145  		ownerRule = append(ownerRule, ownerItem)
  4146  	}
  4147  	var approvedRule []interface{}
  4148  	for _, approvedItem := range approved {
  4149  		approvedRule = append(approvedRule, approvedItem)
  4150  	}
  4151  	var tokenIdRule []interface{}
  4152  	for _, tokenIdItem := range tokenId {
  4153  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4154  	}
  4155  
  4156  	logs, sub, err := _FFFNFT.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  4157  	if err != nil {
  4158  		return nil, err
  4159  	}
  4160  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4161  		defer sub.Unsubscribe()
  4162  		for {
  4163  			select {
  4164  			case log := <-logs:
  4165  				// New log arrived, parse the event and forward to the user
  4166  				event := new(FFFNFTApproval)
  4167  				if err := _FFFNFT.contract.UnpackLog(event, "Approval", log); err != nil {
  4168  					return err
  4169  				}
  4170  				event.Raw = log
  4171  
  4172  				select {
  4173  				case sink <- event:
  4174  				case err := <-sub.Err():
  4175  					return err
  4176  				case <-quit:
  4177  					return nil
  4178  				}
  4179  			case err := <-sub.Err():
  4180  				return err
  4181  			case <-quit:
  4182  				return nil
  4183  			}
  4184  		}
  4185  	}), nil
  4186  }
  4187  
  4188  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  4189  //
  4190  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  4191  func (_FFFNFT *FFFNFTFilterer) ParseApproval(log types.Log) (*FFFNFTApproval, error) {
  4192  	event := new(FFFNFTApproval)
  4193  	if err := _FFFNFT.contract.UnpackLog(event, "Approval", log); err != nil {
  4194  		return nil, err
  4195  	}
  4196  	event.Raw = log
  4197  	return event, nil
  4198  }
  4199  
  4200  // FFFNFTApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the FFFNFT contract.
  4201  type FFFNFTApprovalForAllIterator struct {
  4202  	Event *FFFNFTApprovalForAll // Event containing the contract specifics and raw log
  4203  
  4204  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4205  	event    string              // Event name to use for unpacking event data
  4206  
  4207  	logs chan types.Log        // Log channel receiving the found contract events
  4208  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4209  	done bool                  // Whether the subscription completed delivering logs
  4210  	fail error                 // Occurred error to stop iteration
  4211  }
  4212  
  4213  // Next advances the iterator to the subsequent event, returning whether there
  4214  // are any more events found. In case of a retrieval or parsing error, false is
  4215  // returned and Error() can be queried for the exact failure.
  4216  func (it *FFFNFTApprovalForAllIterator) Next() bool {
  4217  	// If the iterator failed, stop iterating
  4218  	if it.fail != nil {
  4219  		return false
  4220  	}
  4221  	// If the iterator completed, deliver directly whatever's available
  4222  	if it.done {
  4223  		select {
  4224  		case log := <-it.logs:
  4225  			it.Event = new(FFFNFTApprovalForAll)
  4226  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4227  				it.fail = err
  4228  				return false
  4229  			}
  4230  			it.Event.Raw = log
  4231  			return true
  4232  
  4233  		default:
  4234  			return false
  4235  		}
  4236  	}
  4237  	// Iterator still in progress, wait for either a data or an error event
  4238  	select {
  4239  	case log := <-it.logs:
  4240  		it.Event = new(FFFNFTApprovalForAll)
  4241  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4242  			it.fail = err
  4243  			return false
  4244  		}
  4245  		it.Event.Raw = log
  4246  		return true
  4247  
  4248  	case err := <-it.sub.Err():
  4249  		it.done = true
  4250  		it.fail = err
  4251  		return it.Next()
  4252  	}
  4253  }
  4254  
  4255  // Error returns any retrieval or parsing error occurred during filtering.
  4256  func (it *FFFNFTApprovalForAllIterator) Error() error {
  4257  	return it.fail
  4258  }
  4259  
  4260  // Close terminates the iteration process, releasing any pending underlying
  4261  // resources.
  4262  func (it *FFFNFTApprovalForAllIterator) Close() error {
  4263  	it.sub.Unsubscribe()
  4264  	return nil
  4265  }
  4266  
  4267  // FFFNFTApprovalForAll represents a ApprovalForAll event raised by the FFFNFT contract.
  4268  type FFFNFTApprovalForAll struct {
  4269  	Owner    common.Address
  4270  	Operator common.Address
  4271  	Approved bool
  4272  	Raw      types.Log // Blockchain specific contextual infos
  4273  }
  4274  
  4275  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  4276  //
  4277  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  4278  func (_FFFNFT *FFFNFTFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*FFFNFTApprovalForAllIterator, error) {
  4279  
  4280  	var ownerRule []interface{}
  4281  	for _, ownerItem := range owner {
  4282  		ownerRule = append(ownerRule, ownerItem)
  4283  	}
  4284  	var operatorRule []interface{}
  4285  	for _, operatorItem := range operator {
  4286  		operatorRule = append(operatorRule, operatorItem)
  4287  	}
  4288  
  4289  	logs, sub, err := _FFFNFT.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  4290  	if err != nil {
  4291  		return nil, err
  4292  	}
  4293  	return &FFFNFTApprovalForAllIterator{contract: _FFFNFT.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  4294  }
  4295  
  4296  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  4297  //
  4298  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  4299  func (_FFFNFT *FFFNFTFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *FFFNFTApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  4300  
  4301  	var ownerRule []interface{}
  4302  	for _, ownerItem := range owner {
  4303  		ownerRule = append(ownerRule, ownerItem)
  4304  	}
  4305  	var operatorRule []interface{}
  4306  	for _, operatorItem := range operator {
  4307  		operatorRule = append(operatorRule, operatorItem)
  4308  	}
  4309  
  4310  	logs, sub, err := _FFFNFT.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  4311  	if err != nil {
  4312  		return nil, err
  4313  	}
  4314  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4315  		defer sub.Unsubscribe()
  4316  		for {
  4317  			select {
  4318  			case log := <-logs:
  4319  				// New log arrived, parse the event and forward to the user
  4320  				event := new(FFFNFTApprovalForAll)
  4321  				if err := _FFFNFT.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  4322  					return err
  4323  				}
  4324  				event.Raw = log
  4325  
  4326  				select {
  4327  				case sink <- event:
  4328  				case err := <-sub.Err():
  4329  					return err
  4330  				case <-quit:
  4331  					return nil
  4332  				}
  4333  			case err := <-sub.Err():
  4334  				return err
  4335  			case <-quit:
  4336  				return nil
  4337  			}
  4338  		}
  4339  	}), nil
  4340  }
  4341  
  4342  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  4343  //
  4344  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  4345  func (_FFFNFT *FFFNFTFilterer) ParseApprovalForAll(log types.Log) (*FFFNFTApprovalForAll, error) {
  4346  	event := new(FFFNFTApprovalForAll)
  4347  	if err := _FFFNFT.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  4348  		return nil, err
  4349  	}
  4350  	event.Raw = log
  4351  	return event, nil
  4352  }
  4353  
  4354  // FFFNFTNewRevoIterator is returned from FilterNewRevo and is used to iterate over the raw logs and unpacked data for NewRevo events raised by the FFFNFT contract.
  4355  type FFFNFTNewRevoIterator struct {
  4356  	Event *FFFNFTNewRevo // Event containing the contract specifics and raw log
  4357  
  4358  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4359  	event    string              // Event name to use for unpacking event data
  4360  
  4361  	logs chan types.Log        // Log channel receiving the found contract events
  4362  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4363  	done bool                  // Whether the subscription completed delivering logs
  4364  	fail error                 // Occurred error to stop iteration
  4365  }
  4366  
  4367  // Next advances the iterator to the subsequent event, returning whether there
  4368  // are any more events found. In case of a retrieval or parsing error, false is
  4369  // returned and Error() can be queried for the exact failure.
  4370  func (it *FFFNFTNewRevoIterator) Next() bool {
  4371  	// If the iterator failed, stop iterating
  4372  	if it.fail != nil {
  4373  		return false
  4374  	}
  4375  	// If the iterator completed, deliver directly whatever's available
  4376  	if it.done {
  4377  		select {
  4378  		case log := <-it.logs:
  4379  			it.Event = new(FFFNFTNewRevo)
  4380  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4381  				it.fail = err
  4382  				return false
  4383  			}
  4384  			it.Event.Raw = log
  4385  			return true
  4386  
  4387  		default:
  4388  			return false
  4389  		}
  4390  	}
  4391  	// Iterator still in progress, wait for either a data or an error event
  4392  	select {
  4393  	case log := <-it.logs:
  4394  		it.Event = new(FFFNFTNewRevo)
  4395  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4396  			it.fail = err
  4397  			return false
  4398  		}
  4399  		it.Event.Raw = log
  4400  		return true
  4401  
  4402  	case err := <-it.sub.Err():
  4403  		it.done = true
  4404  		it.fail = err
  4405  		return it.Next()
  4406  	}
  4407  }
  4408  
  4409  // Error returns any retrieval or parsing error occurred during filtering.
  4410  func (it *FFFNFTNewRevoIterator) Error() error {
  4411  	return it.fail
  4412  }
  4413  
  4414  // Close terminates the iteration process, releasing any pending underlying
  4415  // resources.
  4416  func (it *FFFNFTNewRevoIterator) Close() error {
  4417  	it.sub.Unsubscribe()
  4418  	return nil
  4419  }
  4420  
  4421  // FFFNFTNewRevo represents a NewRevo event raised by the FFFNFT contract.
  4422  type FFFNFTNewRevo struct {
  4423  	Id  *big.Int
  4424  	Raw types.Log // Blockchain specific contextual infos
  4425  }
  4426  
  4427  // FilterNewRevo is a free log retrieval operation binding the contract event 0x06054a5f6b82c58e700d99c1039e272a1df8bd403b999a15923a43809573e093.
  4428  //
  4429  // Solidity: event NewRevo(uint256 id)
  4430  func (_FFFNFT *FFFNFTFilterer) FilterNewRevo(opts *bind.FilterOpts) (*FFFNFTNewRevoIterator, error) {
  4431  
  4432  	logs, sub, err := _FFFNFT.contract.FilterLogs(opts, "NewRevo")
  4433  	if err != nil {
  4434  		return nil, err
  4435  	}
  4436  	return &FFFNFTNewRevoIterator{contract: _FFFNFT.contract, event: "NewRevo", logs: logs, sub: sub}, nil
  4437  }
  4438  
  4439  // WatchNewRevo is a free log subscription operation binding the contract event 0x06054a5f6b82c58e700d99c1039e272a1df8bd403b999a15923a43809573e093.
  4440  //
  4441  // Solidity: event NewRevo(uint256 id)
  4442  func (_FFFNFT *FFFNFTFilterer) WatchNewRevo(opts *bind.WatchOpts, sink chan<- *FFFNFTNewRevo) (event.Subscription, error) {
  4443  
  4444  	logs, sub, err := _FFFNFT.contract.WatchLogs(opts, "NewRevo")
  4445  	if err != nil {
  4446  		return nil, err
  4447  	}
  4448  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4449  		defer sub.Unsubscribe()
  4450  		for {
  4451  			select {
  4452  			case log := <-logs:
  4453  				// New log arrived, parse the event and forward to the user
  4454  				event := new(FFFNFTNewRevo)
  4455  				if err := _FFFNFT.contract.UnpackLog(event, "NewRevo", log); err != nil {
  4456  					return err
  4457  				}
  4458  				event.Raw = log
  4459  
  4460  				select {
  4461  				case sink <- event:
  4462  				case err := <-sub.Err():
  4463  					return err
  4464  				case <-quit:
  4465  					return nil
  4466  				}
  4467  			case err := <-sub.Err():
  4468  				return err
  4469  			case <-quit:
  4470  				return nil
  4471  			}
  4472  		}
  4473  	}), nil
  4474  }
  4475  
  4476  // ParseNewRevo is a log parse operation binding the contract event 0x06054a5f6b82c58e700d99c1039e272a1df8bd403b999a15923a43809573e093.
  4477  //
  4478  // Solidity: event NewRevo(uint256 id)
  4479  func (_FFFNFT *FFFNFTFilterer) ParseNewRevo(log types.Log) (*FFFNFTNewRevo, error) {
  4480  	event := new(FFFNFTNewRevo)
  4481  	if err := _FFFNFT.contract.UnpackLog(event, "NewRevo", log); err != nil {
  4482  		return nil, err
  4483  	}
  4484  	event.Raw = log
  4485  	return event, nil
  4486  }
  4487  
  4488  // FFFNFTOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the FFFNFT contract.
  4489  type FFFNFTOwnershipTransferredIterator struct {
  4490  	Event *FFFNFTOwnershipTransferred // Event containing the contract specifics and raw log
  4491  
  4492  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4493  	event    string              // Event name to use for unpacking event data
  4494  
  4495  	logs chan types.Log        // Log channel receiving the found contract events
  4496  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4497  	done bool                  // Whether the subscription completed delivering logs
  4498  	fail error                 // Occurred error to stop iteration
  4499  }
  4500  
  4501  // Next advances the iterator to the subsequent event, returning whether there
  4502  // are any more events found. In case of a retrieval or parsing error, false is
  4503  // returned and Error() can be queried for the exact failure.
  4504  func (it *FFFNFTOwnershipTransferredIterator) Next() bool {
  4505  	// If the iterator failed, stop iterating
  4506  	if it.fail != nil {
  4507  		return false
  4508  	}
  4509  	// If the iterator completed, deliver directly whatever's available
  4510  	if it.done {
  4511  		select {
  4512  		case log := <-it.logs:
  4513  			it.Event = new(FFFNFTOwnershipTransferred)
  4514  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4515  				it.fail = err
  4516  				return false
  4517  			}
  4518  			it.Event.Raw = log
  4519  			return true
  4520  
  4521  		default:
  4522  			return false
  4523  		}
  4524  	}
  4525  	// Iterator still in progress, wait for either a data or an error event
  4526  	select {
  4527  	case log := <-it.logs:
  4528  		it.Event = new(FFFNFTOwnershipTransferred)
  4529  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4530  			it.fail = err
  4531  			return false
  4532  		}
  4533  		it.Event.Raw = log
  4534  		return true
  4535  
  4536  	case err := <-it.sub.Err():
  4537  		it.done = true
  4538  		it.fail = err
  4539  		return it.Next()
  4540  	}
  4541  }
  4542  
  4543  // Error returns any retrieval or parsing error occurred during filtering.
  4544  func (it *FFFNFTOwnershipTransferredIterator) Error() error {
  4545  	return it.fail
  4546  }
  4547  
  4548  // Close terminates the iteration process, releasing any pending underlying
  4549  // resources.
  4550  func (it *FFFNFTOwnershipTransferredIterator) Close() error {
  4551  	it.sub.Unsubscribe()
  4552  	return nil
  4553  }
  4554  
  4555  // FFFNFTOwnershipTransferred represents a OwnershipTransferred event raised by the FFFNFT contract.
  4556  type FFFNFTOwnershipTransferred struct {
  4557  	PreviousOwner common.Address
  4558  	NewOwner      common.Address
  4559  	Raw           types.Log // Blockchain specific contextual infos
  4560  }
  4561  
  4562  // FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
  4563  //
  4564  // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
  4565  func (_FFFNFT *FFFNFTFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*FFFNFTOwnershipTransferredIterator, error) {
  4566  
  4567  	var previousOwnerRule []interface{}
  4568  	for _, previousOwnerItem := range previousOwner {
  4569  		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
  4570  	}
  4571  	var newOwnerRule []interface{}
  4572  	for _, newOwnerItem := range newOwner {
  4573  		newOwnerRule = append(newOwnerRule, newOwnerItem)
  4574  	}
  4575  
  4576  	logs, sub, err := _FFFNFT.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
  4577  	if err != nil {
  4578  		return nil, err
  4579  	}
  4580  	return &FFFNFTOwnershipTransferredIterator{contract: _FFFNFT.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
  4581  }
  4582  
  4583  // WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
  4584  //
  4585  // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
  4586  func (_FFFNFT *FFFNFTFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *FFFNFTOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
  4587  
  4588  	var previousOwnerRule []interface{}
  4589  	for _, previousOwnerItem := range previousOwner {
  4590  		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
  4591  	}
  4592  	var newOwnerRule []interface{}
  4593  	for _, newOwnerItem := range newOwner {
  4594  		newOwnerRule = append(newOwnerRule, newOwnerItem)
  4595  	}
  4596  
  4597  	logs, sub, err := _FFFNFT.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
  4598  	if err != nil {
  4599  		return nil, err
  4600  	}
  4601  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4602  		defer sub.Unsubscribe()
  4603  		for {
  4604  			select {
  4605  			case log := <-logs:
  4606  				// New log arrived, parse the event and forward to the user
  4607  				event := new(FFFNFTOwnershipTransferred)
  4608  				if err := _FFFNFT.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
  4609  					return err
  4610  				}
  4611  				event.Raw = log
  4612  
  4613  				select {
  4614  				case sink <- event:
  4615  				case err := <-sub.Err():
  4616  					return err
  4617  				case <-quit:
  4618  					return nil
  4619  				}
  4620  			case err := <-sub.Err():
  4621  				return err
  4622  			case <-quit:
  4623  				return nil
  4624  			}
  4625  		}
  4626  	}), nil
  4627  }
  4628  
  4629  // ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
  4630  //
  4631  // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
  4632  func (_FFFNFT *FFFNFTFilterer) ParseOwnershipTransferred(log types.Log) (*FFFNFTOwnershipTransferred, error) {
  4633  	event := new(FFFNFTOwnershipTransferred)
  4634  	if err := _FFFNFT.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
  4635  		return nil, err
  4636  	}
  4637  	event.Raw = log
  4638  	return event, nil
  4639  }
  4640  
  4641  // FFFNFTTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the FFFNFT contract.
  4642  type FFFNFTTransferIterator struct {
  4643  	Event *FFFNFTTransfer // Event containing the contract specifics and raw log
  4644  
  4645  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4646  	event    string              // Event name to use for unpacking event data
  4647  
  4648  	logs chan types.Log        // Log channel receiving the found contract events
  4649  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4650  	done bool                  // Whether the subscription completed delivering logs
  4651  	fail error                 // Occurred error to stop iteration
  4652  }
  4653  
  4654  // Next advances the iterator to the subsequent event, returning whether there
  4655  // are any more events found. In case of a retrieval or parsing error, false is
  4656  // returned and Error() can be queried for the exact failure.
  4657  func (it *FFFNFTTransferIterator) Next() bool {
  4658  	// If the iterator failed, stop iterating
  4659  	if it.fail != nil {
  4660  		return false
  4661  	}
  4662  	// If the iterator completed, deliver directly whatever's available
  4663  	if it.done {
  4664  		select {
  4665  		case log := <-it.logs:
  4666  			it.Event = new(FFFNFTTransfer)
  4667  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4668  				it.fail = err
  4669  				return false
  4670  			}
  4671  			it.Event.Raw = log
  4672  			return true
  4673  
  4674  		default:
  4675  			return false
  4676  		}
  4677  	}
  4678  	// Iterator still in progress, wait for either a data or an error event
  4679  	select {
  4680  	case log := <-it.logs:
  4681  		it.Event = new(FFFNFTTransfer)
  4682  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4683  			it.fail = err
  4684  			return false
  4685  		}
  4686  		it.Event.Raw = log
  4687  		return true
  4688  
  4689  	case err := <-it.sub.Err():
  4690  		it.done = true
  4691  		it.fail = err
  4692  		return it.Next()
  4693  	}
  4694  }
  4695  
  4696  // Error returns any retrieval or parsing error occurred during filtering.
  4697  func (it *FFFNFTTransferIterator) Error() error {
  4698  	return it.fail
  4699  }
  4700  
  4701  // Close terminates the iteration process, releasing any pending underlying
  4702  // resources.
  4703  func (it *FFFNFTTransferIterator) Close() error {
  4704  	it.sub.Unsubscribe()
  4705  	return nil
  4706  }
  4707  
  4708  // FFFNFTTransfer represents a Transfer event raised by the FFFNFT contract.
  4709  type FFFNFTTransfer struct {
  4710  	From    common.Address
  4711  	To      common.Address
  4712  	TokenId *big.Int
  4713  	Raw     types.Log // Blockchain specific contextual infos
  4714  }
  4715  
  4716  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4717  //
  4718  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  4719  func (_FFFNFT *FFFNFTFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*FFFNFTTransferIterator, error) {
  4720  
  4721  	var fromRule []interface{}
  4722  	for _, fromItem := range from {
  4723  		fromRule = append(fromRule, fromItem)
  4724  	}
  4725  	var toRule []interface{}
  4726  	for _, toItem := range to {
  4727  		toRule = append(toRule, toItem)
  4728  	}
  4729  	var tokenIdRule []interface{}
  4730  	for _, tokenIdItem := range tokenId {
  4731  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4732  	}
  4733  
  4734  	logs, sub, err := _FFFNFT.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  4735  	if err != nil {
  4736  		return nil, err
  4737  	}
  4738  	return &FFFNFTTransferIterator{contract: _FFFNFT.contract, event: "Transfer", logs: logs, sub: sub}, nil
  4739  }
  4740  
  4741  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4742  //
  4743  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  4744  func (_FFFNFT *FFFNFTFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *FFFNFTTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  4745  
  4746  	var fromRule []interface{}
  4747  	for _, fromItem := range from {
  4748  		fromRule = append(fromRule, fromItem)
  4749  	}
  4750  	var toRule []interface{}
  4751  	for _, toItem := range to {
  4752  		toRule = append(toRule, toItem)
  4753  	}
  4754  	var tokenIdRule []interface{}
  4755  	for _, tokenIdItem := range tokenId {
  4756  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4757  	}
  4758  
  4759  	logs, sub, err := _FFFNFT.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  4760  	if err != nil {
  4761  		return nil, err
  4762  	}
  4763  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4764  		defer sub.Unsubscribe()
  4765  		for {
  4766  			select {
  4767  			case log := <-logs:
  4768  				// New log arrived, parse the event and forward to the user
  4769  				event := new(FFFNFTTransfer)
  4770  				if err := _FFFNFT.contract.UnpackLog(event, "Transfer", log); err != nil {
  4771  					return err
  4772  				}
  4773  				event.Raw = log
  4774  
  4775  				select {
  4776  				case sink <- event:
  4777  				case err := <-sub.Err():
  4778  					return err
  4779  				case <-quit:
  4780  					return nil
  4781  				}
  4782  			case err := <-sub.Err():
  4783  				return err
  4784  			case <-quit:
  4785  				return nil
  4786  			}
  4787  		}
  4788  	}), nil
  4789  }
  4790  
  4791  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4792  //
  4793  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  4794  func (_FFFNFT *FFFNFTFilterer) ParseTransfer(log types.Log) (*FFFNFTTransfer, error) {
  4795  	event := new(FFFNFTTransfer)
  4796  	if err := _FFFNFT.contract.UnpackLog(event, "Transfer", log); err != nil {
  4797  		return nil, err
  4798  	}
  4799  	event.Raw = log
  4800  	return event, nil
  4801  }
  4802  
  4803  // IERC165ABI is the input ABI used to generate the binding from.
  4804  const IERC165ABI = "[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]"
  4805  
  4806  // IERC165FuncSigs maps the 4-byte function signature to its string representation.
  4807  var IERC165FuncSigs = map[string]string{
  4808  	"01ffc9a7": "supportsInterface(bytes4)",
  4809  }
  4810  
  4811  // IERC165 is an auto generated Go binding around an Ethereum contract.
  4812  type IERC165 struct {
  4813  	IERC165Caller     // Read-only binding to the contract
  4814  	IERC165Transactor // Write-only binding to the contract
  4815  	IERC165Filterer   // Log filterer for contract events
  4816  }
  4817  
  4818  // IERC165Caller is an auto generated read-only Go binding around an Ethereum contract.
  4819  type IERC165Caller struct {
  4820  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4821  }
  4822  
  4823  // IERC165Transactor is an auto generated write-only Go binding around an Ethereum contract.
  4824  type IERC165Transactor struct {
  4825  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4826  }
  4827  
  4828  // IERC165Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4829  type IERC165Filterer struct {
  4830  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4831  }
  4832  
  4833  // IERC165Session is an auto generated Go binding around an Ethereum contract,
  4834  // with pre-set call and transact options.
  4835  type IERC165Session struct {
  4836  	Contract     *IERC165          // Generic contract binding to set the session for
  4837  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4838  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4839  }
  4840  
  4841  // IERC165CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4842  // with pre-set call options.
  4843  type IERC165CallerSession struct {
  4844  	Contract *IERC165Caller // Generic contract caller binding to set the session for
  4845  	CallOpts bind.CallOpts  // Call options to use throughout this session
  4846  }
  4847  
  4848  // IERC165TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4849  // with pre-set transact options.
  4850  type IERC165TransactorSession struct {
  4851  	Contract     *IERC165Transactor // Generic contract transactor binding to set the session for
  4852  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  4853  }
  4854  
  4855  // IERC165Raw is an auto generated low-level Go binding around an Ethereum contract.
  4856  type IERC165Raw struct {
  4857  	Contract *IERC165 // Generic contract binding to access the raw methods on
  4858  }
  4859  
  4860  // IERC165CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4861  type IERC165CallerRaw struct {
  4862  	Contract *IERC165Caller // Generic read-only contract binding to access the raw methods on
  4863  }
  4864  
  4865  // IERC165TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4866  type IERC165TransactorRaw struct {
  4867  	Contract *IERC165Transactor // Generic write-only contract binding to access the raw methods on
  4868  }
  4869  
  4870  // NewIERC165 creates a new instance of IERC165, bound to a specific deployed contract.
  4871  func NewIERC165(address common.Address, backend bind.ContractBackend) (*IERC165, error) {
  4872  	contract, err := bindIERC165(address, backend, backend, backend)
  4873  	if err != nil {
  4874  		return nil, err
  4875  	}
  4876  	return &IERC165{IERC165Caller: IERC165Caller{contract: contract}, IERC165Transactor: IERC165Transactor{contract: contract}, IERC165Filterer: IERC165Filterer{contract: contract}}, nil
  4877  }
  4878  
  4879  // NewIERC165Caller creates a new read-only instance of IERC165, bound to a specific deployed contract.
  4880  func NewIERC165Caller(address common.Address, caller bind.ContractCaller) (*IERC165Caller, error) {
  4881  	contract, err := bindIERC165(address, caller, nil, nil)
  4882  	if err != nil {
  4883  		return nil, err
  4884  	}
  4885  	return &IERC165Caller{contract: contract}, nil
  4886  }
  4887  
  4888  // NewIERC165Transactor creates a new write-only instance of IERC165, bound to a specific deployed contract.
  4889  func NewIERC165Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC165Transactor, error) {
  4890  	contract, err := bindIERC165(address, nil, transactor, nil)
  4891  	if err != nil {
  4892  		return nil, err
  4893  	}
  4894  	return &IERC165Transactor{contract: contract}, nil
  4895  }
  4896  
  4897  // NewIERC165Filterer creates a new log filterer instance of IERC165, bound to a specific deployed contract.
  4898  func NewIERC165Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC165Filterer, error) {
  4899  	contract, err := bindIERC165(address, nil, nil, filterer)
  4900  	if err != nil {
  4901  		return nil, err
  4902  	}
  4903  	return &IERC165Filterer{contract: contract}, nil
  4904  }
  4905  
  4906  // bindIERC165 binds a generic wrapper to an already deployed contract.
  4907  func bindIERC165(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4908  	parsed, err := abi.JSON(strings.NewReader(IERC165ABI))
  4909  	if err != nil {
  4910  		return nil, err
  4911  	}
  4912  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4913  }
  4914  
  4915  // Call invokes the (constant) contract method with params as input values and
  4916  // sets the output to result. The result type might be a single field for simple
  4917  // returns, a slice of interfaces for anonymous returns and a struct for named
  4918  // returns.
  4919  func (_IERC165 *IERC165Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4920  	return _IERC165.Contract.IERC165Caller.contract.Call(opts, result, method, params...)
  4921  }
  4922  
  4923  // Transfer initiates a plain transaction to move funds to the contract, calling
  4924  // its default method if one is available.
  4925  func (_IERC165 *IERC165Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4926  	return _IERC165.Contract.IERC165Transactor.contract.Transfer(opts)
  4927  }
  4928  
  4929  // Transact invokes the (paid) contract method with params as input values.
  4930  func (_IERC165 *IERC165Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4931  	return _IERC165.Contract.IERC165Transactor.contract.Transact(opts, method, params...)
  4932  }
  4933  
  4934  // Call invokes the (constant) contract method with params as input values and
  4935  // sets the output to result. The result type might be a single field for simple
  4936  // returns, a slice of interfaces for anonymous returns and a struct for named
  4937  // returns.
  4938  func (_IERC165 *IERC165CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4939  	return _IERC165.Contract.contract.Call(opts, result, method, params...)
  4940  }
  4941  
  4942  // Transfer initiates a plain transaction to move funds to the contract, calling
  4943  // its default method if one is available.
  4944  func (_IERC165 *IERC165TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4945  	return _IERC165.Contract.contract.Transfer(opts)
  4946  }
  4947  
  4948  // Transact invokes the (paid) contract method with params as input values.
  4949  func (_IERC165 *IERC165TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4950  	return _IERC165.Contract.contract.Transact(opts, method, params...)
  4951  }
  4952  
  4953  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4954  //
  4955  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4956  func (_IERC165 *IERC165Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  4957  	var out []interface{}
  4958  	err := _IERC165.contract.Call(opts, &out, "supportsInterface", interfaceId)
  4959  
  4960  	if err != nil {
  4961  		return *new(bool), err
  4962  	}
  4963  
  4964  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  4965  
  4966  	return out0, err
  4967  
  4968  }
  4969  
  4970  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4971  //
  4972  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4973  func (_IERC165 *IERC165Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
  4974  	return _IERC165.Contract.SupportsInterface(&_IERC165.CallOpts, interfaceId)
  4975  }
  4976  
  4977  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4978  //
  4979  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4980  func (_IERC165 *IERC165CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  4981  	return _IERC165.Contract.SupportsInterface(&_IERC165.CallOpts, interfaceId)
  4982  }
  4983  
  4984  // IERC721ABI is the input ABI used to generate the binding from.
  4985  const IERC721ABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  4986  
  4987  // IERC721FuncSigs maps the 4-byte function signature to its string representation.
  4988  var IERC721FuncSigs = map[string]string{
  4989  	"095ea7b3": "approve(address,uint256)",
  4990  	"70a08231": "balanceOf(address)",
  4991  	"081812fc": "getApproved(uint256)",
  4992  	"e985e9c5": "isApprovedForAll(address,address)",
  4993  	"6352211e": "ownerOf(uint256)",
  4994  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  4995  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  4996  	"a22cb465": "setApprovalForAll(address,bool)",
  4997  	"01ffc9a7": "supportsInterface(bytes4)",
  4998  	"23b872dd": "transferFrom(address,address,uint256)",
  4999  }
  5000  
  5001  // IERC721 is an auto generated Go binding around an Ethereum contract.
  5002  type IERC721 struct {
  5003  	IERC721Caller     // Read-only binding to the contract
  5004  	IERC721Transactor // Write-only binding to the contract
  5005  	IERC721Filterer   // Log filterer for contract events
  5006  }
  5007  
  5008  // IERC721Caller is an auto generated read-only Go binding around an Ethereum contract.
  5009  type IERC721Caller struct {
  5010  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5011  }
  5012  
  5013  // IERC721Transactor is an auto generated write-only Go binding around an Ethereum contract.
  5014  type IERC721Transactor struct {
  5015  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5016  }
  5017  
  5018  // IERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  5019  type IERC721Filterer struct {
  5020  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5021  }
  5022  
  5023  // IERC721Session is an auto generated Go binding around an Ethereum contract,
  5024  // with pre-set call and transact options.
  5025  type IERC721Session struct {
  5026  	Contract     *IERC721          // Generic contract binding to set the session for
  5027  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  5028  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  5029  }
  5030  
  5031  // IERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  5032  // with pre-set call options.
  5033  type IERC721CallerSession struct {
  5034  	Contract *IERC721Caller // Generic contract caller binding to set the session for
  5035  	CallOpts bind.CallOpts  // Call options to use throughout this session
  5036  }
  5037  
  5038  // IERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  5039  // with pre-set transact options.
  5040  type IERC721TransactorSession struct {
  5041  	Contract     *IERC721Transactor // Generic contract transactor binding to set the session for
  5042  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  5043  }
  5044  
  5045  // IERC721Raw is an auto generated low-level Go binding around an Ethereum contract.
  5046  type IERC721Raw struct {
  5047  	Contract *IERC721 // Generic contract binding to access the raw methods on
  5048  }
  5049  
  5050  // IERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  5051  type IERC721CallerRaw struct {
  5052  	Contract *IERC721Caller // Generic read-only contract binding to access the raw methods on
  5053  }
  5054  
  5055  // IERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  5056  type IERC721TransactorRaw struct {
  5057  	Contract *IERC721Transactor // Generic write-only contract binding to access the raw methods on
  5058  }
  5059  
  5060  // NewIERC721 creates a new instance of IERC721, bound to a specific deployed contract.
  5061  func NewIERC721(address common.Address, backend bind.ContractBackend) (*IERC721, error) {
  5062  	contract, err := bindIERC721(address, backend, backend, backend)
  5063  	if err != nil {
  5064  		return nil, err
  5065  	}
  5066  	return &IERC721{IERC721Caller: IERC721Caller{contract: contract}, IERC721Transactor: IERC721Transactor{contract: contract}, IERC721Filterer: IERC721Filterer{contract: contract}}, nil
  5067  }
  5068  
  5069  // NewIERC721Caller creates a new read-only instance of IERC721, bound to a specific deployed contract.
  5070  func NewIERC721Caller(address common.Address, caller bind.ContractCaller) (*IERC721Caller, error) {
  5071  	contract, err := bindIERC721(address, caller, nil, nil)
  5072  	if err != nil {
  5073  		return nil, err
  5074  	}
  5075  	return &IERC721Caller{contract: contract}, nil
  5076  }
  5077  
  5078  // NewIERC721Transactor creates a new write-only instance of IERC721, bound to a specific deployed contract.
  5079  func NewIERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC721Transactor, error) {
  5080  	contract, err := bindIERC721(address, nil, transactor, nil)
  5081  	if err != nil {
  5082  		return nil, err
  5083  	}
  5084  	return &IERC721Transactor{contract: contract}, nil
  5085  }
  5086  
  5087  // NewIERC721Filterer creates a new log filterer instance of IERC721, bound to a specific deployed contract.
  5088  func NewIERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC721Filterer, error) {
  5089  	contract, err := bindIERC721(address, nil, nil, filterer)
  5090  	if err != nil {
  5091  		return nil, err
  5092  	}
  5093  	return &IERC721Filterer{contract: contract}, nil
  5094  }
  5095  
  5096  // bindIERC721 binds a generic wrapper to an already deployed contract.
  5097  func bindIERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  5098  	parsed, err := abi.JSON(strings.NewReader(IERC721ABI))
  5099  	if err != nil {
  5100  		return nil, err
  5101  	}
  5102  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  5103  }
  5104  
  5105  // Call invokes the (constant) contract method with params as input values and
  5106  // sets the output to result. The result type might be a single field for simple
  5107  // returns, a slice of interfaces for anonymous returns and a struct for named
  5108  // returns.
  5109  func (_IERC721 *IERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5110  	return _IERC721.Contract.IERC721Caller.contract.Call(opts, result, method, params...)
  5111  }
  5112  
  5113  // Transfer initiates a plain transaction to move funds to the contract, calling
  5114  // its default method if one is available.
  5115  func (_IERC721 *IERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5116  	return _IERC721.Contract.IERC721Transactor.contract.Transfer(opts)
  5117  }
  5118  
  5119  // Transact invokes the (paid) contract method with params as input values.
  5120  func (_IERC721 *IERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5121  	return _IERC721.Contract.IERC721Transactor.contract.Transact(opts, method, params...)
  5122  }
  5123  
  5124  // Call invokes the (constant) contract method with params as input values and
  5125  // sets the output to result. The result type might be a single field for simple
  5126  // returns, a slice of interfaces for anonymous returns and a struct for named
  5127  // returns.
  5128  func (_IERC721 *IERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5129  	return _IERC721.Contract.contract.Call(opts, result, method, params...)
  5130  }
  5131  
  5132  // Transfer initiates a plain transaction to move funds to the contract, calling
  5133  // its default method if one is available.
  5134  func (_IERC721 *IERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5135  	return _IERC721.Contract.contract.Transfer(opts)
  5136  }
  5137  
  5138  // Transact invokes the (paid) contract method with params as input values.
  5139  func (_IERC721 *IERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5140  	return _IERC721.Contract.contract.Transact(opts, method, params...)
  5141  }
  5142  
  5143  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5144  //
  5145  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5146  func (_IERC721 *IERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  5147  	var out []interface{}
  5148  	err := _IERC721.contract.Call(opts, &out, "balanceOf", owner)
  5149  
  5150  	if err != nil {
  5151  		return *new(*big.Int), err
  5152  	}
  5153  
  5154  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5155  
  5156  	return out0, err
  5157  
  5158  }
  5159  
  5160  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5161  //
  5162  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5163  func (_IERC721 *IERC721Session) BalanceOf(owner common.Address) (*big.Int, error) {
  5164  	return _IERC721.Contract.BalanceOf(&_IERC721.CallOpts, owner)
  5165  }
  5166  
  5167  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5168  //
  5169  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5170  func (_IERC721 *IERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  5171  	return _IERC721.Contract.BalanceOf(&_IERC721.CallOpts, owner)
  5172  }
  5173  
  5174  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5175  //
  5176  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5177  func (_IERC721 *IERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  5178  	var out []interface{}
  5179  	err := _IERC721.contract.Call(opts, &out, "getApproved", tokenId)
  5180  
  5181  	if err != nil {
  5182  		return *new(common.Address), err
  5183  	}
  5184  
  5185  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5186  
  5187  	return out0, err
  5188  
  5189  }
  5190  
  5191  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5192  //
  5193  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5194  func (_IERC721 *IERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) {
  5195  	return _IERC721.Contract.GetApproved(&_IERC721.CallOpts, tokenId)
  5196  }
  5197  
  5198  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5199  //
  5200  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5201  func (_IERC721 *IERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  5202  	return _IERC721.Contract.GetApproved(&_IERC721.CallOpts, tokenId)
  5203  }
  5204  
  5205  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5206  //
  5207  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5208  func (_IERC721 *IERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  5209  	var out []interface{}
  5210  	err := _IERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  5211  
  5212  	if err != nil {
  5213  		return *new(bool), err
  5214  	}
  5215  
  5216  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5217  
  5218  	return out0, err
  5219  
  5220  }
  5221  
  5222  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5223  //
  5224  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5225  func (_IERC721 *IERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  5226  	return _IERC721.Contract.IsApprovedForAll(&_IERC721.CallOpts, owner, operator)
  5227  }
  5228  
  5229  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5230  //
  5231  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5232  func (_IERC721 *IERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  5233  	return _IERC721.Contract.IsApprovedForAll(&_IERC721.CallOpts, owner, operator)
  5234  }
  5235  
  5236  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  5237  //
  5238  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  5239  func (_IERC721 *IERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  5240  	var out []interface{}
  5241  	err := _IERC721.contract.Call(opts, &out, "ownerOf", tokenId)
  5242  
  5243  	if err != nil {
  5244  		return *new(common.Address), err
  5245  	}
  5246  
  5247  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5248  
  5249  	return out0, err
  5250  
  5251  }
  5252  
  5253  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  5254  //
  5255  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  5256  func (_IERC721 *IERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) {
  5257  	return _IERC721.Contract.OwnerOf(&_IERC721.CallOpts, tokenId)
  5258  }
  5259  
  5260  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  5261  //
  5262  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  5263  func (_IERC721 *IERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  5264  	return _IERC721.Contract.OwnerOf(&_IERC721.CallOpts, tokenId)
  5265  }
  5266  
  5267  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  5268  //
  5269  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  5270  func (_IERC721 *IERC721Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  5271  	var out []interface{}
  5272  	err := _IERC721.contract.Call(opts, &out, "supportsInterface", interfaceId)
  5273  
  5274  	if err != nil {
  5275  		return *new(bool), err
  5276  	}
  5277  
  5278  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5279  
  5280  	return out0, err
  5281  
  5282  }
  5283  
  5284  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  5285  //
  5286  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  5287  func (_IERC721 *IERC721Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
  5288  	return _IERC721.Contract.SupportsInterface(&_IERC721.CallOpts, interfaceId)
  5289  }
  5290  
  5291  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  5292  //
  5293  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  5294  func (_IERC721 *IERC721CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  5295  	return _IERC721.Contract.SupportsInterface(&_IERC721.CallOpts, interfaceId)
  5296  }
  5297  
  5298  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5299  //
  5300  // Solidity: function approve(address to, uint256 tokenId) returns()
  5301  func (_IERC721 *IERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5302  	return _IERC721.contract.Transact(opts, "approve", to, tokenId)
  5303  }
  5304  
  5305  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5306  //
  5307  // Solidity: function approve(address to, uint256 tokenId) returns()
  5308  func (_IERC721 *IERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5309  	return _IERC721.Contract.Approve(&_IERC721.TransactOpts, to, tokenId)
  5310  }
  5311  
  5312  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5313  //
  5314  // Solidity: function approve(address to, uint256 tokenId) returns()
  5315  func (_IERC721 *IERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5316  	return _IERC721.Contract.Approve(&_IERC721.TransactOpts, to, tokenId)
  5317  }
  5318  
  5319  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  5320  //
  5321  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  5322  func (_IERC721 *IERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5323  	return _IERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  5324  }
  5325  
  5326  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  5327  //
  5328  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  5329  func (_IERC721 *IERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5330  	return _IERC721.Contract.SafeTransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5331  }
  5332  
  5333  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  5334  //
  5335  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  5336  func (_IERC721 *IERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5337  	return _IERC721.Contract.SafeTransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5338  }
  5339  
  5340  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  5341  //
  5342  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  5343  func (_IERC721 *IERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  5344  	return _IERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  5345  }
  5346  
  5347  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  5348  //
  5349  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  5350  func (_IERC721 *IERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  5351  	return _IERC721.Contract.SafeTransferFrom0(&_IERC721.TransactOpts, from, to, tokenId, data)
  5352  }
  5353  
  5354  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  5355  //
  5356  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  5357  func (_IERC721 *IERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  5358  	return _IERC721.Contract.SafeTransferFrom0(&_IERC721.TransactOpts, from, to, tokenId, data)
  5359  }
  5360  
  5361  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  5362  //
  5363  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  5364  func (_IERC721 *IERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  5365  	return _IERC721.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  5366  }
  5367  
  5368  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  5369  //
  5370  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  5371  func (_IERC721 *IERC721Session) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  5372  	return _IERC721.Contract.SetApprovalForAll(&_IERC721.TransactOpts, operator, _approved)
  5373  }
  5374  
  5375  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  5376  //
  5377  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  5378  func (_IERC721 *IERC721TransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  5379  	return _IERC721.Contract.SetApprovalForAll(&_IERC721.TransactOpts, operator, _approved)
  5380  }
  5381  
  5382  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5383  //
  5384  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  5385  func (_IERC721 *IERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5386  	return _IERC721.contract.Transact(opts, "transferFrom", from, to, tokenId)
  5387  }
  5388  
  5389  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5390  //
  5391  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  5392  func (_IERC721 *IERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5393  	return _IERC721.Contract.TransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5394  }
  5395  
  5396  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5397  //
  5398  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  5399  func (_IERC721 *IERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5400  	return _IERC721.Contract.TransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5401  }
  5402  
  5403  // IERC721ApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC721 contract.
  5404  type IERC721ApprovalIterator struct {
  5405  	Event *IERC721Approval // Event containing the contract specifics and raw log
  5406  
  5407  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5408  	event    string              // Event name to use for unpacking event data
  5409  
  5410  	logs chan types.Log        // Log channel receiving the found contract events
  5411  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5412  	done bool                  // Whether the subscription completed delivering logs
  5413  	fail error                 // Occurred error to stop iteration
  5414  }
  5415  
  5416  // Next advances the iterator to the subsequent event, returning whether there
  5417  // are any more events found. In case of a retrieval or parsing error, false is
  5418  // returned and Error() can be queried for the exact failure.
  5419  func (it *IERC721ApprovalIterator) Next() bool {
  5420  	// If the iterator failed, stop iterating
  5421  	if it.fail != nil {
  5422  		return false
  5423  	}
  5424  	// If the iterator completed, deliver directly whatever's available
  5425  	if it.done {
  5426  		select {
  5427  		case log := <-it.logs:
  5428  			it.Event = new(IERC721Approval)
  5429  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5430  				it.fail = err
  5431  				return false
  5432  			}
  5433  			it.Event.Raw = log
  5434  			return true
  5435  
  5436  		default:
  5437  			return false
  5438  		}
  5439  	}
  5440  	// Iterator still in progress, wait for either a data or an error event
  5441  	select {
  5442  	case log := <-it.logs:
  5443  		it.Event = new(IERC721Approval)
  5444  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5445  			it.fail = err
  5446  			return false
  5447  		}
  5448  		it.Event.Raw = log
  5449  		return true
  5450  
  5451  	case err := <-it.sub.Err():
  5452  		it.done = true
  5453  		it.fail = err
  5454  		return it.Next()
  5455  	}
  5456  }
  5457  
  5458  // Error returns any retrieval or parsing error occurred during filtering.
  5459  func (it *IERC721ApprovalIterator) Error() error {
  5460  	return it.fail
  5461  }
  5462  
  5463  // Close terminates the iteration process, releasing any pending underlying
  5464  // resources.
  5465  func (it *IERC721ApprovalIterator) Close() error {
  5466  	it.sub.Unsubscribe()
  5467  	return nil
  5468  }
  5469  
  5470  // IERC721Approval represents a Approval event raised by the IERC721 contract.
  5471  type IERC721Approval struct {
  5472  	Owner    common.Address
  5473  	Approved common.Address
  5474  	TokenId  *big.Int
  5475  	Raw      types.Log // Blockchain specific contextual infos
  5476  }
  5477  
  5478  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5479  //
  5480  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  5481  func (_IERC721 *IERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721ApprovalIterator, error) {
  5482  
  5483  	var ownerRule []interface{}
  5484  	for _, ownerItem := range owner {
  5485  		ownerRule = append(ownerRule, ownerItem)
  5486  	}
  5487  	var approvedRule []interface{}
  5488  	for _, approvedItem := range approved {
  5489  		approvedRule = append(approvedRule, approvedItem)
  5490  	}
  5491  	var tokenIdRule []interface{}
  5492  	for _, tokenIdItem := range tokenId {
  5493  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5494  	}
  5495  
  5496  	logs, sub, err := _IERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  5497  	if err != nil {
  5498  		return nil, err
  5499  	}
  5500  	return &IERC721ApprovalIterator{contract: _IERC721.contract, event: "Approval", logs: logs, sub: sub}, nil
  5501  }
  5502  
  5503  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5504  //
  5505  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  5506  func (_IERC721 *IERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  5507  
  5508  	var ownerRule []interface{}
  5509  	for _, ownerItem := range owner {
  5510  		ownerRule = append(ownerRule, ownerItem)
  5511  	}
  5512  	var approvedRule []interface{}
  5513  	for _, approvedItem := range approved {
  5514  		approvedRule = append(approvedRule, approvedItem)
  5515  	}
  5516  	var tokenIdRule []interface{}
  5517  	for _, tokenIdItem := range tokenId {
  5518  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5519  	}
  5520  
  5521  	logs, sub, err := _IERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  5522  	if err != nil {
  5523  		return nil, err
  5524  	}
  5525  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5526  		defer sub.Unsubscribe()
  5527  		for {
  5528  			select {
  5529  			case log := <-logs:
  5530  				// New log arrived, parse the event and forward to the user
  5531  				event := new(IERC721Approval)
  5532  				if err := _IERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  5533  					return err
  5534  				}
  5535  				event.Raw = log
  5536  
  5537  				select {
  5538  				case sink <- event:
  5539  				case err := <-sub.Err():
  5540  					return err
  5541  				case <-quit:
  5542  					return nil
  5543  				}
  5544  			case err := <-sub.Err():
  5545  				return err
  5546  			case <-quit:
  5547  				return nil
  5548  			}
  5549  		}
  5550  	}), nil
  5551  }
  5552  
  5553  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5554  //
  5555  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  5556  func (_IERC721 *IERC721Filterer) ParseApproval(log types.Log) (*IERC721Approval, error) {
  5557  	event := new(IERC721Approval)
  5558  	if err := _IERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  5559  		return nil, err
  5560  	}
  5561  	event.Raw = log
  5562  	return event, nil
  5563  }
  5564  
  5565  // IERC721ApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the IERC721 contract.
  5566  type IERC721ApprovalForAllIterator struct {
  5567  	Event *IERC721ApprovalForAll // Event containing the contract specifics and raw log
  5568  
  5569  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5570  	event    string              // Event name to use for unpacking event data
  5571  
  5572  	logs chan types.Log        // Log channel receiving the found contract events
  5573  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5574  	done bool                  // Whether the subscription completed delivering logs
  5575  	fail error                 // Occurred error to stop iteration
  5576  }
  5577  
  5578  // Next advances the iterator to the subsequent event, returning whether there
  5579  // are any more events found. In case of a retrieval or parsing error, false is
  5580  // returned and Error() can be queried for the exact failure.
  5581  func (it *IERC721ApprovalForAllIterator) Next() bool {
  5582  	// If the iterator failed, stop iterating
  5583  	if it.fail != nil {
  5584  		return false
  5585  	}
  5586  	// If the iterator completed, deliver directly whatever's available
  5587  	if it.done {
  5588  		select {
  5589  		case log := <-it.logs:
  5590  			it.Event = new(IERC721ApprovalForAll)
  5591  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5592  				it.fail = err
  5593  				return false
  5594  			}
  5595  			it.Event.Raw = log
  5596  			return true
  5597  
  5598  		default:
  5599  			return false
  5600  		}
  5601  	}
  5602  	// Iterator still in progress, wait for either a data or an error event
  5603  	select {
  5604  	case log := <-it.logs:
  5605  		it.Event = new(IERC721ApprovalForAll)
  5606  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5607  			it.fail = err
  5608  			return false
  5609  		}
  5610  		it.Event.Raw = log
  5611  		return true
  5612  
  5613  	case err := <-it.sub.Err():
  5614  		it.done = true
  5615  		it.fail = err
  5616  		return it.Next()
  5617  	}
  5618  }
  5619  
  5620  // Error returns any retrieval or parsing error occurred during filtering.
  5621  func (it *IERC721ApprovalForAllIterator) Error() error {
  5622  	return it.fail
  5623  }
  5624  
  5625  // Close terminates the iteration process, releasing any pending underlying
  5626  // resources.
  5627  func (it *IERC721ApprovalForAllIterator) Close() error {
  5628  	it.sub.Unsubscribe()
  5629  	return nil
  5630  }
  5631  
  5632  // IERC721ApprovalForAll represents a ApprovalForAll event raised by the IERC721 contract.
  5633  type IERC721ApprovalForAll struct {
  5634  	Owner    common.Address
  5635  	Operator common.Address
  5636  	Approved bool
  5637  	Raw      types.Log // Blockchain specific contextual infos
  5638  }
  5639  
  5640  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  5641  //
  5642  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  5643  func (_IERC721 *IERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721ApprovalForAllIterator, error) {
  5644  
  5645  	var ownerRule []interface{}
  5646  	for _, ownerItem := range owner {
  5647  		ownerRule = append(ownerRule, ownerItem)
  5648  	}
  5649  	var operatorRule []interface{}
  5650  	for _, operatorItem := range operator {
  5651  		operatorRule = append(operatorRule, operatorItem)
  5652  	}
  5653  
  5654  	logs, sub, err := _IERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  5655  	if err != nil {
  5656  		return nil, err
  5657  	}
  5658  	return &IERC721ApprovalForAllIterator{contract: _IERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  5659  }
  5660  
  5661  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  5662  //
  5663  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  5664  func (_IERC721 *IERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  5665  
  5666  	var ownerRule []interface{}
  5667  	for _, ownerItem := range owner {
  5668  		ownerRule = append(ownerRule, ownerItem)
  5669  	}
  5670  	var operatorRule []interface{}
  5671  	for _, operatorItem := range operator {
  5672  		operatorRule = append(operatorRule, operatorItem)
  5673  	}
  5674  
  5675  	logs, sub, err := _IERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  5676  	if err != nil {
  5677  		return nil, err
  5678  	}
  5679  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5680  		defer sub.Unsubscribe()
  5681  		for {
  5682  			select {
  5683  			case log := <-logs:
  5684  				// New log arrived, parse the event and forward to the user
  5685  				event := new(IERC721ApprovalForAll)
  5686  				if err := _IERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  5687  					return err
  5688  				}
  5689  				event.Raw = log
  5690  
  5691  				select {
  5692  				case sink <- event:
  5693  				case err := <-sub.Err():
  5694  					return err
  5695  				case <-quit:
  5696  					return nil
  5697  				}
  5698  			case err := <-sub.Err():
  5699  				return err
  5700  			case <-quit:
  5701  				return nil
  5702  			}
  5703  		}
  5704  	}), nil
  5705  }
  5706  
  5707  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  5708  //
  5709  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  5710  func (_IERC721 *IERC721Filterer) ParseApprovalForAll(log types.Log) (*IERC721ApprovalForAll, error) {
  5711  	event := new(IERC721ApprovalForAll)
  5712  	if err := _IERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  5713  		return nil, err
  5714  	}
  5715  	event.Raw = log
  5716  	return event, nil
  5717  }
  5718  
  5719  // IERC721TransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC721 contract.
  5720  type IERC721TransferIterator struct {
  5721  	Event *IERC721Transfer // Event containing the contract specifics and raw log
  5722  
  5723  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5724  	event    string              // Event name to use for unpacking event data
  5725  
  5726  	logs chan types.Log        // Log channel receiving the found contract events
  5727  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5728  	done bool                  // Whether the subscription completed delivering logs
  5729  	fail error                 // Occurred error to stop iteration
  5730  }
  5731  
  5732  // Next advances the iterator to the subsequent event, returning whether there
  5733  // are any more events found. In case of a retrieval or parsing error, false is
  5734  // returned and Error() can be queried for the exact failure.
  5735  func (it *IERC721TransferIterator) Next() bool {
  5736  	// If the iterator failed, stop iterating
  5737  	if it.fail != nil {
  5738  		return false
  5739  	}
  5740  	// If the iterator completed, deliver directly whatever's available
  5741  	if it.done {
  5742  		select {
  5743  		case log := <-it.logs:
  5744  			it.Event = new(IERC721Transfer)
  5745  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5746  				it.fail = err
  5747  				return false
  5748  			}
  5749  			it.Event.Raw = log
  5750  			return true
  5751  
  5752  		default:
  5753  			return false
  5754  		}
  5755  	}
  5756  	// Iterator still in progress, wait for either a data or an error event
  5757  	select {
  5758  	case log := <-it.logs:
  5759  		it.Event = new(IERC721Transfer)
  5760  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5761  			it.fail = err
  5762  			return false
  5763  		}
  5764  		it.Event.Raw = log
  5765  		return true
  5766  
  5767  	case err := <-it.sub.Err():
  5768  		it.done = true
  5769  		it.fail = err
  5770  		return it.Next()
  5771  	}
  5772  }
  5773  
  5774  // Error returns any retrieval or parsing error occurred during filtering.
  5775  func (it *IERC721TransferIterator) Error() error {
  5776  	return it.fail
  5777  }
  5778  
  5779  // Close terminates the iteration process, releasing any pending underlying
  5780  // resources.
  5781  func (it *IERC721TransferIterator) Close() error {
  5782  	it.sub.Unsubscribe()
  5783  	return nil
  5784  }
  5785  
  5786  // IERC721Transfer represents a Transfer event raised by the IERC721 contract.
  5787  type IERC721Transfer struct {
  5788  	From    common.Address
  5789  	To      common.Address
  5790  	TokenId *big.Int
  5791  	Raw     types.Log // Blockchain specific contextual infos
  5792  }
  5793  
  5794  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5795  //
  5796  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  5797  func (_IERC721 *IERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721TransferIterator, error) {
  5798  
  5799  	var fromRule []interface{}
  5800  	for _, fromItem := range from {
  5801  		fromRule = append(fromRule, fromItem)
  5802  	}
  5803  	var toRule []interface{}
  5804  	for _, toItem := range to {
  5805  		toRule = append(toRule, toItem)
  5806  	}
  5807  	var tokenIdRule []interface{}
  5808  	for _, tokenIdItem := range tokenId {
  5809  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5810  	}
  5811  
  5812  	logs, sub, err := _IERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  5813  	if err != nil {
  5814  		return nil, err
  5815  	}
  5816  	return &IERC721TransferIterator{contract: _IERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil
  5817  }
  5818  
  5819  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5820  //
  5821  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  5822  func (_IERC721 *IERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  5823  
  5824  	var fromRule []interface{}
  5825  	for _, fromItem := range from {
  5826  		fromRule = append(fromRule, fromItem)
  5827  	}
  5828  	var toRule []interface{}
  5829  	for _, toItem := range to {
  5830  		toRule = append(toRule, toItem)
  5831  	}
  5832  	var tokenIdRule []interface{}
  5833  	for _, tokenIdItem := range tokenId {
  5834  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5835  	}
  5836  
  5837  	logs, sub, err := _IERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  5838  	if err != nil {
  5839  		return nil, err
  5840  	}
  5841  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5842  		defer sub.Unsubscribe()
  5843  		for {
  5844  			select {
  5845  			case log := <-logs:
  5846  				// New log arrived, parse the event and forward to the user
  5847  				event := new(IERC721Transfer)
  5848  				if err := _IERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  5849  					return err
  5850  				}
  5851  				event.Raw = log
  5852  
  5853  				select {
  5854  				case sink <- event:
  5855  				case err := <-sub.Err():
  5856  					return err
  5857  				case <-quit:
  5858  					return nil
  5859  				}
  5860  			case err := <-sub.Err():
  5861  				return err
  5862  			case <-quit:
  5863  				return nil
  5864  			}
  5865  		}
  5866  	}), nil
  5867  }
  5868  
  5869  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5870  //
  5871  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  5872  func (_IERC721 *IERC721Filterer) ParseTransfer(log types.Log) (*IERC721Transfer, error) {
  5873  	event := new(IERC721Transfer)
  5874  	if err := _IERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  5875  		return nil, err
  5876  	}
  5877  	event.Raw = log
  5878  	return event, nil
  5879  }
  5880  
  5881  // IERC721EnumerableABI is the input ABI used to generate the binding from.
  5882  const IERC721EnumerableABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  5883  
  5884  // IERC721EnumerableFuncSigs maps the 4-byte function signature to its string representation.
  5885  var IERC721EnumerableFuncSigs = map[string]string{
  5886  	"095ea7b3": "approve(address,uint256)",
  5887  	"70a08231": "balanceOf(address)",
  5888  	"081812fc": "getApproved(uint256)",
  5889  	"e985e9c5": "isApprovedForAll(address,address)",
  5890  	"6352211e": "ownerOf(uint256)",
  5891  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  5892  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  5893  	"a22cb465": "setApprovalForAll(address,bool)",
  5894  	"01ffc9a7": "supportsInterface(bytes4)",
  5895  	"4f6ccce7": "tokenByIndex(uint256)",
  5896  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  5897  	"18160ddd": "totalSupply()",
  5898  	"23b872dd": "transferFrom(address,address,uint256)",
  5899  }
  5900  
  5901  // IERC721Enumerable is an auto generated Go binding around an Ethereum contract.
  5902  type IERC721Enumerable struct {
  5903  	IERC721EnumerableCaller     // Read-only binding to the contract
  5904  	IERC721EnumerableTransactor // Write-only binding to the contract
  5905  	IERC721EnumerableFilterer   // Log filterer for contract events
  5906  }
  5907  
  5908  // IERC721EnumerableCaller is an auto generated read-only Go binding around an Ethereum contract.
  5909  type IERC721EnumerableCaller struct {
  5910  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5911  }
  5912  
  5913  // IERC721EnumerableTransactor is an auto generated write-only Go binding around an Ethereum contract.
  5914  type IERC721EnumerableTransactor struct {
  5915  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5916  }
  5917  
  5918  // IERC721EnumerableFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  5919  type IERC721EnumerableFilterer struct {
  5920  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5921  }
  5922  
  5923  // IERC721EnumerableSession is an auto generated Go binding around an Ethereum contract,
  5924  // with pre-set call and transact options.
  5925  type IERC721EnumerableSession struct {
  5926  	Contract     *IERC721Enumerable // Generic contract binding to set the session for
  5927  	CallOpts     bind.CallOpts      // Call options to use throughout this session
  5928  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  5929  }
  5930  
  5931  // IERC721EnumerableCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  5932  // with pre-set call options.
  5933  type IERC721EnumerableCallerSession struct {
  5934  	Contract *IERC721EnumerableCaller // Generic contract caller binding to set the session for
  5935  	CallOpts bind.CallOpts            // Call options to use throughout this session
  5936  }
  5937  
  5938  // IERC721EnumerableTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  5939  // with pre-set transact options.
  5940  type IERC721EnumerableTransactorSession struct {
  5941  	Contract     *IERC721EnumerableTransactor // Generic contract transactor binding to set the session for
  5942  	TransactOpts bind.TransactOpts            // Transaction auth options to use throughout this session
  5943  }
  5944  
  5945  // IERC721EnumerableRaw is an auto generated low-level Go binding around an Ethereum contract.
  5946  type IERC721EnumerableRaw struct {
  5947  	Contract *IERC721Enumerable // Generic contract binding to access the raw methods on
  5948  }
  5949  
  5950  // IERC721EnumerableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  5951  type IERC721EnumerableCallerRaw struct {
  5952  	Contract *IERC721EnumerableCaller // Generic read-only contract binding to access the raw methods on
  5953  }
  5954  
  5955  // IERC721EnumerableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  5956  type IERC721EnumerableTransactorRaw struct {
  5957  	Contract *IERC721EnumerableTransactor // Generic write-only contract binding to access the raw methods on
  5958  }
  5959  
  5960  // NewIERC721Enumerable creates a new instance of IERC721Enumerable, bound to a specific deployed contract.
  5961  func NewIERC721Enumerable(address common.Address, backend bind.ContractBackend) (*IERC721Enumerable, error) {
  5962  	contract, err := bindIERC721Enumerable(address, backend, backend, backend)
  5963  	if err != nil {
  5964  		return nil, err
  5965  	}
  5966  	return &IERC721Enumerable{IERC721EnumerableCaller: IERC721EnumerableCaller{contract: contract}, IERC721EnumerableTransactor: IERC721EnumerableTransactor{contract: contract}, IERC721EnumerableFilterer: IERC721EnumerableFilterer{contract: contract}}, nil
  5967  }
  5968  
  5969  // NewIERC721EnumerableCaller creates a new read-only instance of IERC721Enumerable, bound to a specific deployed contract.
  5970  func NewIERC721EnumerableCaller(address common.Address, caller bind.ContractCaller) (*IERC721EnumerableCaller, error) {
  5971  	contract, err := bindIERC721Enumerable(address, caller, nil, nil)
  5972  	if err != nil {
  5973  		return nil, err
  5974  	}
  5975  	return &IERC721EnumerableCaller{contract: contract}, nil
  5976  }
  5977  
  5978  // NewIERC721EnumerableTransactor creates a new write-only instance of IERC721Enumerable, bound to a specific deployed contract.
  5979  func NewIERC721EnumerableTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721EnumerableTransactor, error) {
  5980  	contract, err := bindIERC721Enumerable(address, nil, transactor, nil)
  5981  	if err != nil {
  5982  		return nil, err
  5983  	}
  5984  	return &IERC721EnumerableTransactor{contract: contract}, nil
  5985  }
  5986  
  5987  // NewIERC721EnumerableFilterer creates a new log filterer instance of IERC721Enumerable, bound to a specific deployed contract.
  5988  func NewIERC721EnumerableFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721EnumerableFilterer, error) {
  5989  	contract, err := bindIERC721Enumerable(address, nil, nil, filterer)
  5990  	if err != nil {
  5991  		return nil, err
  5992  	}
  5993  	return &IERC721EnumerableFilterer{contract: contract}, nil
  5994  }
  5995  
  5996  // bindIERC721Enumerable binds a generic wrapper to an already deployed contract.
  5997  func bindIERC721Enumerable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  5998  	parsed, err := abi.JSON(strings.NewReader(IERC721EnumerableABI))
  5999  	if err != nil {
  6000  		return nil, err
  6001  	}
  6002  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  6003  }
  6004  
  6005  // Call invokes the (constant) contract method with params as input values and
  6006  // sets the output to result. The result type might be a single field for simple
  6007  // returns, a slice of interfaces for anonymous returns and a struct for named
  6008  // returns.
  6009  func (_IERC721Enumerable *IERC721EnumerableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  6010  	return _IERC721Enumerable.Contract.IERC721EnumerableCaller.contract.Call(opts, result, method, params...)
  6011  }
  6012  
  6013  // Transfer initiates a plain transaction to move funds to the contract, calling
  6014  // its default method if one is available.
  6015  func (_IERC721Enumerable *IERC721EnumerableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  6016  	return _IERC721Enumerable.Contract.IERC721EnumerableTransactor.contract.Transfer(opts)
  6017  }
  6018  
  6019  // Transact invokes the (paid) contract method with params as input values.
  6020  func (_IERC721Enumerable *IERC721EnumerableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  6021  	return _IERC721Enumerable.Contract.IERC721EnumerableTransactor.contract.Transact(opts, method, params...)
  6022  }
  6023  
  6024  // Call invokes the (constant) contract method with params as input values and
  6025  // sets the output to result. The result type might be a single field for simple
  6026  // returns, a slice of interfaces for anonymous returns and a struct for named
  6027  // returns.
  6028  func (_IERC721Enumerable *IERC721EnumerableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  6029  	return _IERC721Enumerable.Contract.contract.Call(opts, result, method, params...)
  6030  }
  6031  
  6032  // Transfer initiates a plain transaction to move funds to the contract, calling
  6033  // its default method if one is available.
  6034  func (_IERC721Enumerable *IERC721EnumerableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  6035  	return _IERC721Enumerable.Contract.contract.Transfer(opts)
  6036  }
  6037  
  6038  // Transact invokes the (paid) contract method with params as input values.
  6039  func (_IERC721Enumerable *IERC721EnumerableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  6040  	return _IERC721Enumerable.Contract.contract.Transact(opts, method, params...)
  6041  }
  6042  
  6043  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  6044  //
  6045  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  6046  func (_IERC721Enumerable *IERC721EnumerableCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  6047  	var out []interface{}
  6048  	err := _IERC721Enumerable.contract.Call(opts, &out, "balanceOf", owner)
  6049  
  6050  	if err != nil {
  6051  		return *new(*big.Int), err
  6052  	}
  6053  
  6054  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6055  
  6056  	return out0, err
  6057  
  6058  }
  6059  
  6060  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  6061  //
  6062  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  6063  func (_IERC721Enumerable *IERC721EnumerableSession) BalanceOf(owner common.Address) (*big.Int, error) {
  6064  	return _IERC721Enumerable.Contract.BalanceOf(&_IERC721Enumerable.CallOpts, owner)
  6065  }
  6066  
  6067  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  6068  //
  6069  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  6070  func (_IERC721Enumerable *IERC721EnumerableCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  6071  	return _IERC721Enumerable.Contract.BalanceOf(&_IERC721Enumerable.CallOpts, owner)
  6072  }
  6073  
  6074  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  6075  //
  6076  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  6077  func (_IERC721Enumerable *IERC721EnumerableCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  6078  	var out []interface{}
  6079  	err := _IERC721Enumerable.contract.Call(opts, &out, "getApproved", tokenId)
  6080  
  6081  	if err != nil {
  6082  		return *new(common.Address), err
  6083  	}
  6084  
  6085  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  6086  
  6087  	return out0, err
  6088  
  6089  }
  6090  
  6091  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  6092  //
  6093  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  6094  func (_IERC721Enumerable *IERC721EnumerableSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  6095  	return _IERC721Enumerable.Contract.GetApproved(&_IERC721Enumerable.CallOpts, tokenId)
  6096  }
  6097  
  6098  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  6099  //
  6100  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  6101  func (_IERC721Enumerable *IERC721EnumerableCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  6102  	return _IERC721Enumerable.Contract.GetApproved(&_IERC721Enumerable.CallOpts, tokenId)
  6103  }
  6104  
  6105  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  6106  //
  6107  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  6108  func (_IERC721Enumerable *IERC721EnumerableCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  6109  	var out []interface{}
  6110  	err := _IERC721Enumerable.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  6111  
  6112  	if err != nil {
  6113  		return *new(bool), err
  6114  	}
  6115  
  6116  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  6117  
  6118  	return out0, err
  6119  
  6120  }
  6121  
  6122  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  6123  //
  6124  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  6125  func (_IERC721Enumerable *IERC721EnumerableSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  6126  	return _IERC721Enumerable.Contract.IsApprovedForAll(&_IERC721Enumerable.CallOpts, owner, operator)
  6127  }
  6128  
  6129  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  6130  //
  6131  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  6132  func (_IERC721Enumerable *IERC721EnumerableCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  6133  	return _IERC721Enumerable.Contract.IsApprovedForAll(&_IERC721Enumerable.CallOpts, owner, operator)
  6134  }
  6135  
  6136  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  6137  //
  6138  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  6139  func (_IERC721Enumerable *IERC721EnumerableCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  6140  	var out []interface{}
  6141  	err := _IERC721Enumerable.contract.Call(opts, &out, "ownerOf", tokenId)
  6142  
  6143  	if err != nil {
  6144  		return *new(common.Address), err
  6145  	}
  6146  
  6147  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  6148  
  6149  	return out0, err
  6150  
  6151  }
  6152  
  6153  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  6154  //
  6155  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  6156  func (_IERC721Enumerable *IERC721EnumerableSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  6157  	return _IERC721Enumerable.Contract.OwnerOf(&_IERC721Enumerable.CallOpts, tokenId)
  6158  }
  6159  
  6160  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  6161  //
  6162  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  6163  func (_IERC721Enumerable *IERC721EnumerableCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  6164  	return _IERC721Enumerable.Contract.OwnerOf(&_IERC721Enumerable.CallOpts, tokenId)
  6165  }
  6166  
  6167  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  6168  //
  6169  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  6170  func (_IERC721Enumerable *IERC721EnumerableCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  6171  	var out []interface{}
  6172  	err := _IERC721Enumerable.contract.Call(opts, &out, "supportsInterface", interfaceId)
  6173  
  6174  	if err != nil {
  6175  		return *new(bool), err
  6176  	}
  6177  
  6178  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  6179  
  6180  	return out0, err
  6181  
  6182  }
  6183  
  6184  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  6185  //
  6186  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  6187  func (_IERC721Enumerable *IERC721EnumerableSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  6188  	return _IERC721Enumerable.Contract.SupportsInterface(&_IERC721Enumerable.CallOpts, interfaceId)
  6189  }
  6190  
  6191  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  6192  //
  6193  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  6194  func (_IERC721Enumerable *IERC721EnumerableCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  6195  	return _IERC721Enumerable.Contract.SupportsInterface(&_IERC721Enumerable.CallOpts, interfaceId)
  6196  }
  6197  
  6198  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  6199  //
  6200  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  6201  func (_IERC721Enumerable *IERC721EnumerableCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  6202  	var out []interface{}
  6203  	err := _IERC721Enumerable.contract.Call(opts, &out, "tokenByIndex", index)
  6204  
  6205  	if err != nil {
  6206  		return *new(*big.Int), err
  6207  	}
  6208  
  6209  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6210  
  6211  	return out0, err
  6212  
  6213  }
  6214  
  6215  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  6216  //
  6217  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  6218  func (_IERC721Enumerable *IERC721EnumerableSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  6219  	return _IERC721Enumerable.Contract.TokenByIndex(&_IERC721Enumerable.CallOpts, index)
  6220  }
  6221  
  6222  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  6223  //
  6224  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  6225  func (_IERC721Enumerable *IERC721EnumerableCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  6226  	return _IERC721Enumerable.Contract.TokenByIndex(&_IERC721Enumerable.CallOpts, index)
  6227  }
  6228  
  6229  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  6230  //
  6231  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  6232  func (_IERC721Enumerable *IERC721EnumerableCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  6233  	var out []interface{}
  6234  	err := _IERC721Enumerable.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  6235  
  6236  	if err != nil {
  6237  		return *new(*big.Int), err
  6238  	}
  6239  
  6240  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6241  
  6242  	return out0, err
  6243  
  6244  }
  6245  
  6246  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  6247  //
  6248  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  6249  func (_IERC721Enumerable *IERC721EnumerableSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  6250  	return _IERC721Enumerable.Contract.TokenOfOwnerByIndex(&_IERC721Enumerable.CallOpts, owner, index)
  6251  }
  6252  
  6253  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  6254  //
  6255  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  6256  func (_IERC721Enumerable *IERC721EnumerableCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  6257  	return _IERC721Enumerable.Contract.TokenOfOwnerByIndex(&_IERC721Enumerable.CallOpts, owner, index)
  6258  }
  6259  
  6260  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6261  //
  6262  // Solidity: function totalSupply() view returns(uint256)
  6263  func (_IERC721Enumerable *IERC721EnumerableCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  6264  	var out []interface{}
  6265  	err := _IERC721Enumerable.contract.Call(opts, &out, "totalSupply")
  6266  
  6267  	if err != nil {
  6268  		return *new(*big.Int), err
  6269  	}
  6270  
  6271  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6272  
  6273  	return out0, err
  6274  
  6275  }
  6276  
  6277  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6278  //
  6279  // Solidity: function totalSupply() view returns(uint256)
  6280  func (_IERC721Enumerable *IERC721EnumerableSession) TotalSupply() (*big.Int, error) {
  6281  	return _IERC721Enumerable.Contract.TotalSupply(&_IERC721Enumerable.CallOpts)
  6282  }
  6283  
  6284  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6285  //
  6286  // Solidity: function totalSupply() view returns(uint256)
  6287  func (_IERC721Enumerable *IERC721EnumerableCallerSession) TotalSupply() (*big.Int, error) {
  6288  	return _IERC721Enumerable.Contract.TotalSupply(&_IERC721Enumerable.CallOpts)
  6289  }
  6290  
  6291  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6292  //
  6293  // Solidity: function approve(address to, uint256 tokenId) returns()
  6294  func (_IERC721Enumerable *IERC721EnumerableTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6295  	return _IERC721Enumerable.contract.Transact(opts, "approve", to, tokenId)
  6296  }
  6297  
  6298  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6299  //
  6300  // Solidity: function approve(address to, uint256 tokenId) returns()
  6301  func (_IERC721Enumerable *IERC721EnumerableSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6302  	return _IERC721Enumerable.Contract.Approve(&_IERC721Enumerable.TransactOpts, to, tokenId)
  6303  }
  6304  
  6305  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6306  //
  6307  // Solidity: function approve(address to, uint256 tokenId) returns()
  6308  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6309  	return _IERC721Enumerable.Contract.Approve(&_IERC721Enumerable.TransactOpts, to, tokenId)
  6310  }
  6311  
  6312  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  6313  //
  6314  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  6315  func (_IERC721Enumerable *IERC721EnumerableTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6316  	return _IERC721Enumerable.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  6317  }
  6318  
  6319  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  6320  //
  6321  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  6322  func (_IERC721Enumerable *IERC721EnumerableSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6323  	return _IERC721Enumerable.Contract.SafeTransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6324  }
  6325  
  6326  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  6327  //
  6328  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  6329  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6330  	return _IERC721Enumerable.Contract.SafeTransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6331  }
  6332  
  6333  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  6334  //
  6335  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  6336  func (_IERC721Enumerable *IERC721EnumerableTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  6337  	return _IERC721Enumerable.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  6338  }
  6339  
  6340  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  6341  //
  6342  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  6343  func (_IERC721Enumerable *IERC721EnumerableSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  6344  	return _IERC721Enumerable.Contract.SafeTransferFrom0(&_IERC721Enumerable.TransactOpts, from, to, tokenId, data)
  6345  }
  6346  
  6347  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  6348  //
  6349  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  6350  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  6351  	return _IERC721Enumerable.Contract.SafeTransferFrom0(&_IERC721Enumerable.TransactOpts, from, to, tokenId, data)
  6352  }
  6353  
  6354  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  6355  //
  6356  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  6357  func (_IERC721Enumerable *IERC721EnumerableTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  6358  	return _IERC721Enumerable.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  6359  }
  6360  
  6361  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  6362  //
  6363  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  6364  func (_IERC721Enumerable *IERC721EnumerableSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  6365  	return _IERC721Enumerable.Contract.SetApprovalForAll(&_IERC721Enumerable.TransactOpts, operator, _approved)
  6366  }
  6367  
  6368  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  6369  //
  6370  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  6371  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  6372  	return _IERC721Enumerable.Contract.SetApprovalForAll(&_IERC721Enumerable.TransactOpts, operator, _approved)
  6373  }
  6374  
  6375  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6376  //
  6377  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  6378  func (_IERC721Enumerable *IERC721EnumerableTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6379  	return _IERC721Enumerable.contract.Transact(opts, "transferFrom", from, to, tokenId)
  6380  }
  6381  
  6382  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6383  //
  6384  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  6385  func (_IERC721Enumerable *IERC721EnumerableSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6386  	return _IERC721Enumerable.Contract.TransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6387  }
  6388  
  6389  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6390  //
  6391  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  6392  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6393  	return _IERC721Enumerable.Contract.TransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6394  }
  6395  
  6396  // IERC721EnumerableApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC721Enumerable contract.
  6397  type IERC721EnumerableApprovalIterator struct {
  6398  	Event *IERC721EnumerableApproval // Event containing the contract specifics and raw log
  6399  
  6400  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6401  	event    string              // Event name to use for unpacking event data
  6402  
  6403  	logs chan types.Log        // Log channel receiving the found contract events
  6404  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6405  	done bool                  // Whether the subscription completed delivering logs
  6406  	fail error                 // Occurred error to stop iteration
  6407  }
  6408  
  6409  // Next advances the iterator to the subsequent event, returning whether there
  6410  // are any more events found. In case of a retrieval or parsing error, false is
  6411  // returned and Error() can be queried for the exact failure.
  6412  func (it *IERC721EnumerableApprovalIterator) Next() bool {
  6413  	// If the iterator failed, stop iterating
  6414  	if it.fail != nil {
  6415  		return false
  6416  	}
  6417  	// If the iterator completed, deliver directly whatever's available
  6418  	if it.done {
  6419  		select {
  6420  		case log := <-it.logs:
  6421  			it.Event = new(IERC721EnumerableApproval)
  6422  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6423  				it.fail = err
  6424  				return false
  6425  			}
  6426  			it.Event.Raw = log
  6427  			return true
  6428  
  6429  		default:
  6430  			return false
  6431  		}
  6432  	}
  6433  	// Iterator still in progress, wait for either a data or an error event
  6434  	select {
  6435  	case log := <-it.logs:
  6436  		it.Event = new(IERC721EnumerableApproval)
  6437  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6438  			it.fail = err
  6439  			return false
  6440  		}
  6441  		it.Event.Raw = log
  6442  		return true
  6443  
  6444  	case err := <-it.sub.Err():
  6445  		it.done = true
  6446  		it.fail = err
  6447  		return it.Next()
  6448  	}
  6449  }
  6450  
  6451  // Error returns any retrieval or parsing error occurred during filtering.
  6452  func (it *IERC721EnumerableApprovalIterator) Error() error {
  6453  	return it.fail
  6454  }
  6455  
  6456  // Close terminates the iteration process, releasing any pending underlying
  6457  // resources.
  6458  func (it *IERC721EnumerableApprovalIterator) Close() error {
  6459  	it.sub.Unsubscribe()
  6460  	return nil
  6461  }
  6462  
  6463  // IERC721EnumerableApproval represents a Approval event raised by the IERC721Enumerable contract.
  6464  type IERC721EnumerableApproval struct {
  6465  	Owner    common.Address
  6466  	Approved common.Address
  6467  	TokenId  *big.Int
  6468  	Raw      types.Log // Blockchain specific contextual infos
  6469  }
  6470  
  6471  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6472  //
  6473  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  6474  func (_IERC721Enumerable *IERC721EnumerableFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721EnumerableApprovalIterator, error) {
  6475  
  6476  	var ownerRule []interface{}
  6477  	for _, ownerItem := range owner {
  6478  		ownerRule = append(ownerRule, ownerItem)
  6479  	}
  6480  	var approvedRule []interface{}
  6481  	for _, approvedItem := range approved {
  6482  		approvedRule = append(approvedRule, approvedItem)
  6483  	}
  6484  	var tokenIdRule []interface{}
  6485  	for _, tokenIdItem := range tokenId {
  6486  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6487  	}
  6488  
  6489  	logs, sub, err := _IERC721Enumerable.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  6490  	if err != nil {
  6491  		return nil, err
  6492  	}
  6493  	return &IERC721EnumerableApprovalIterator{contract: _IERC721Enumerable.contract, event: "Approval", logs: logs, sub: sub}, nil
  6494  }
  6495  
  6496  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6497  //
  6498  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  6499  func (_IERC721Enumerable *IERC721EnumerableFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721EnumerableApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  6500  
  6501  	var ownerRule []interface{}
  6502  	for _, ownerItem := range owner {
  6503  		ownerRule = append(ownerRule, ownerItem)
  6504  	}
  6505  	var approvedRule []interface{}
  6506  	for _, approvedItem := range approved {
  6507  		approvedRule = append(approvedRule, approvedItem)
  6508  	}
  6509  	var tokenIdRule []interface{}
  6510  	for _, tokenIdItem := range tokenId {
  6511  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6512  	}
  6513  
  6514  	logs, sub, err := _IERC721Enumerable.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  6515  	if err != nil {
  6516  		return nil, err
  6517  	}
  6518  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6519  		defer sub.Unsubscribe()
  6520  		for {
  6521  			select {
  6522  			case log := <-logs:
  6523  				// New log arrived, parse the event and forward to the user
  6524  				event := new(IERC721EnumerableApproval)
  6525  				if err := _IERC721Enumerable.contract.UnpackLog(event, "Approval", log); err != nil {
  6526  					return err
  6527  				}
  6528  				event.Raw = log
  6529  
  6530  				select {
  6531  				case sink <- event:
  6532  				case err := <-sub.Err():
  6533  					return err
  6534  				case <-quit:
  6535  					return nil
  6536  				}
  6537  			case err := <-sub.Err():
  6538  				return err
  6539  			case <-quit:
  6540  				return nil
  6541  			}
  6542  		}
  6543  	}), nil
  6544  }
  6545  
  6546  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6547  //
  6548  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  6549  func (_IERC721Enumerable *IERC721EnumerableFilterer) ParseApproval(log types.Log) (*IERC721EnumerableApproval, error) {
  6550  	event := new(IERC721EnumerableApproval)
  6551  	if err := _IERC721Enumerable.contract.UnpackLog(event, "Approval", log); err != nil {
  6552  		return nil, err
  6553  	}
  6554  	event.Raw = log
  6555  	return event, nil
  6556  }
  6557  
  6558  // IERC721EnumerableApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the IERC721Enumerable contract.
  6559  type IERC721EnumerableApprovalForAllIterator struct {
  6560  	Event *IERC721EnumerableApprovalForAll // Event containing the contract specifics and raw log
  6561  
  6562  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6563  	event    string              // Event name to use for unpacking event data
  6564  
  6565  	logs chan types.Log        // Log channel receiving the found contract events
  6566  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6567  	done bool                  // Whether the subscription completed delivering logs
  6568  	fail error                 // Occurred error to stop iteration
  6569  }
  6570  
  6571  // Next advances the iterator to the subsequent event, returning whether there
  6572  // are any more events found. In case of a retrieval or parsing error, false is
  6573  // returned and Error() can be queried for the exact failure.
  6574  func (it *IERC721EnumerableApprovalForAllIterator) Next() bool {
  6575  	// If the iterator failed, stop iterating
  6576  	if it.fail != nil {
  6577  		return false
  6578  	}
  6579  	// If the iterator completed, deliver directly whatever's available
  6580  	if it.done {
  6581  		select {
  6582  		case log := <-it.logs:
  6583  			it.Event = new(IERC721EnumerableApprovalForAll)
  6584  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6585  				it.fail = err
  6586  				return false
  6587  			}
  6588  			it.Event.Raw = log
  6589  			return true
  6590  
  6591  		default:
  6592  			return false
  6593  		}
  6594  	}
  6595  	// Iterator still in progress, wait for either a data or an error event
  6596  	select {
  6597  	case log := <-it.logs:
  6598  		it.Event = new(IERC721EnumerableApprovalForAll)
  6599  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6600  			it.fail = err
  6601  			return false
  6602  		}
  6603  		it.Event.Raw = log
  6604  		return true
  6605  
  6606  	case err := <-it.sub.Err():
  6607  		it.done = true
  6608  		it.fail = err
  6609  		return it.Next()
  6610  	}
  6611  }
  6612  
  6613  // Error returns any retrieval or parsing error occurred during filtering.
  6614  func (it *IERC721EnumerableApprovalForAllIterator) Error() error {
  6615  	return it.fail
  6616  }
  6617  
  6618  // Close terminates the iteration process, releasing any pending underlying
  6619  // resources.
  6620  func (it *IERC721EnumerableApprovalForAllIterator) Close() error {
  6621  	it.sub.Unsubscribe()
  6622  	return nil
  6623  }
  6624  
  6625  // IERC721EnumerableApprovalForAll represents a ApprovalForAll event raised by the IERC721Enumerable contract.
  6626  type IERC721EnumerableApprovalForAll struct {
  6627  	Owner    common.Address
  6628  	Operator common.Address
  6629  	Approved bool
  6630  	Raw      types.Log // Blockchain specific contextual infos
  6631  }
  6632  
  6633  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  6634  //
  6635  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  6636  func (_IERC721Enumerable *IERC721EnumerableFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721EnumerableApprovalForAllIterator, error) {
  6637  
  6638  	var ownerRule []interface{}
  6639  	for _, ownerItem := range owner {
  6640  		ownerRule = append(ownerRule, ownerItem)
  6641  	}
  6642  	var operatorRule []interface{}
  6643  	for _, operatorItem := range operator {
  6644  		operatorRule = append(operatorRule, operatorItem)
  6645  	}
  6646  
  6647  	logs, sub, err := _IERC721Enumerable.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  6648  	if err != nil {
  6649  		return nil, err
  6650  	}
  6651  	return &IERC721EnumerableApprovalForAllIterator{contract: _IERC721Enumerable.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  6652  }
  6653  
  6654  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  6655  //
  6656  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  6657  func (_IERC721Enumerable *IERC721EnumerableFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721EnumerableApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  6658  
  6659  	var ownerRule []interface{}
  6660  	for _, ownerItem := range owner {
  6661  		ownerRule = append(ownerRule, ownerItem)
  6662  	}
  6663  	var operatorRule []interface{}
  6664  	for _, operatorItem := range operator {
  6665  		operatorRule = append(operatorRule, operatorItem)
  6666  	}
  6667  
  6668  	logs, sub, err := _IERC721Enumerable.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  6669  	if err != nil {
  6670  		return nil, err
  6671  	}
  6672  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6673  		defer sub.Unsubscribe()
  6674  		for {
  6675  			select {
  6676  			case log := <-logs:
  6677  				// New log arrived, parse the event and forward to the user
  6678  				event := new(IERC721EnumerableApprovalForAll)
  6679  				if err := _IERC721Enumerable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  6680  					return err
  6681  				}
  6682  				event.Raw = log
  6683  
  6684  				select {
  6685  				case sink <- event:
  6686  				case err := <-sub.Err():
  6687  					return err
  6688  				case <-quit:
  6689  					return nil
  6690  				}
  6691  			case err := <-sub.Err():
  6692  				return err
  6693  			case <-quit:
  6694  				return nil
  6695  			}
  6696  		}
  6697  	}), nil
  6698  }
  6699  
  6700  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  6701  //
  6702  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  6703  func (_IERC721Enumerable *IERC721EnumerableFilterer) ParseApprovalForAll(log types.Log) (*IERC721EnumerableApprovalForAll, error) {
  6704  	event := new(IERC721EnumerableApprovalForAll)
  6705  	if err := _IERC721Enumerable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  6706  		return nil, err
  6707  	}
  6708  	event.Raw = log
  6709  	return event, nil
  6710  }
  6711  
  6712  // IERC721EnumerableTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC721Enumerable contract.
  6713  type IERC721EnumerableTransferIterator struct {
  6714  	Event *IERC721EnumerableTransfer // Event containing the contract specifics and raw log
  6715  
  6716  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6717  	event    string              // Event name to use for unpacking event data
  6718  
  6719  	logs chan types.Log        // Log channel receiving the found contract events
  6720  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6721  	done bool                  // Whether the subscription completed delivering logs
  6722  	fail error                 // Occurred error to stop iteration
  6723  }
  6724  
  6725  // Next advances the iterator to the subsequent event, returning whether there
  6726  // are any more events found. In case of a retrieval or parsing error, false is
  6727  // returned and Error() can be queried for the exact failure.
  6728  func (it *IERC721EnumerableTransferIterator) Next() bool {
  6729  	// If the iterator failed, stop iterating
  6730  	if it.fail != nil {
  6731  		return false
  6732  	}
  6733  	// If the iterator completed, deliver directly whatever's available
  6734  	if it.done {
  6735  		select {
  6736  		case log := <-it.logs:
  6737  			it.Event = new(IERC721EnumerableTransfer)
  6738  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6739  				it.fail = err
  6740  				return false
  6741  			}
  6742  			it.Event.Raw = log
  6743  			return true
  6744  
  6745  		default:
  6746  			return false
  6747  		}
  6748  	}
  6749  	// Iterator still in progress, wait for either a data or an error event
  6750  	select {
  6751  	case log := <-it.logs:
  6752  		it.Event = new(IERC721EnumerableTransfer)
  6753  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6754  			it.fail = err
  6755  			return false
  6756  		}
  6757  		it.Event.Raw = log
  6758  		return true
  6759  
  6760  	case err := <-it.sub.Err():
  6761  		it.done = true
  6762  		it.fail = err
  6763  		return it.Next()
  6764  	}
  6765  }
  6766  
  6767  // Error returns any retrieval or parsing error occurred during filtering.
  6768  func (it *IERC721EnumerableTransferIterator) Error() error {
  6769  	return it.fail
  6770  }
  6771  
  6772  // Close terminates the iteration process, releasing any pending underlying
  6773  // resources.
  6774  func (it *IERC721EnumerableTransferIterator) Close() error {
  6775  	it.sub.Unsubscribe()
  6776  	return nil
  6777  }
  6778  
  6779  // IERC721EnumerableTransfer represents a Transfer event raised by the IERC721Enumerable contract.
  6780  type IERC721EnumerableTransfer struct {
  6781  	From    common.Address
  6782  	To      common.Address
  6783  	TokenId *big.Int
  6784  	Raw     types.Log // Blockchain specific contextual infos
  6785  }
  6786  
  6787  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  6788  //
  6789  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  6790  func (_IERC721Enumerable *IERC721EnumerableFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721EnumerableTransferIterator, error) {
  6791  
  6792  	var fromRule []interface{}
  6793  	for _, fromItem := range from {
  6794  		fromRule = append(fromRule, fromItem)
  6795  	}
  6796  	var toRule []interface{}
  6797  	for _, toItem := range to {
  6798  		toRule = append(toRule, toItem)
  6799  	}
  6800  	var tokenIdRule []interface{}
  6801  	for _, tokenIdItem := range tokenId {
  6802  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6803  	}
  6804  
  6805  	logs, sub, err := _IERC721Enumerable.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  6806  	if err != nil {
  6807  		return nil, err
  6808  	}
  6809  	return &IERC721EnumerableTransferIterator{contract: _IERC721Enumerable.contract, event: "Transfer", logs: logs, sub: sub}, nil
  6810  }
  6811  
  6812  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  6813  //
  6814  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  6815  func (_IERC721Enumerable *IERC721EnumerableFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721EnumerableTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  6816  
  6817  	var fromRule []interface{}
  6818  	for _, fromItem := range from {
  6819  		fromRule = append(fromRule, fromItem)
  6820  	}
  6821  	var toRule []interface{}
  6822  	for _, toItem := range to {
  6823  		toRule = append(toRule, toItem)
  6824  	}
  6825  	var tokenIdRule []interface{}
  6826  	for _, tokenIdItem := range tokenId {
  6827  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6828  	}
  6829  
  6830  	logs, sub, err := _IERC721Enumerable.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  6831  	if err != nil {
  6832  		return nil, err
  6833  	}
  6834  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6835  		defer sub.Unsubscribe()
  6836  		for {
  6837  			select {
  6838  			case log := <-logs:
  6839  				// New log arrived, parse the event and forward to the user
  6840  				event := new(IERC721EnumerableTransfer)
  6841  				if err := _IERC721Enumerable.contract.UnpackLog(event, "Transfer", log); err != nil {
  6842  					return err
  6843  				}
  6844  				event.Raw = log
  6845  
  6846  				select {
  6847  				case sink <- event:
  6848  				case err := <-sub.Err():
  6849  					return err
  6850  				case <-quit:
  6851  					return nil
  6852  				}
  6853  			case err := <-sub.Err():
  6854  				return err
  6855  			case <-quit:
  6856  				return nil
  6857  			}
  6858  		}
  6859  	}), nil
  6860  }
  6861  
  6862  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  6863  //
  6864  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  6865  func (_IERC721Enumerable *IERC721EnumerableFilterer) ParseTransfer(log types.Log) (*IERC721EnumerableTransfer, error) {
  6866  	event := new(IERC721EnumerableTransfer)
  6867  	if err := _IERC721Enumerable.contract.UnpackLog(event, "Transfer", log); err != nil {
  6868  		return nil, err
  6869  	}
  6870  	event.Raw = log
  6871  	return event, nil
  6872  }
  6873  
  6874  // IERC721MetadataABI is the input ABI used to generate the binding from.
  6875  const IERC721MetadataABI = "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  6876  
  6877  // IERC721MetadataFuncSigs maps the 4-byte function signature to its string representation.
  6878  var IERC721MetadataFuncSigs = map[string]string{
  6879  	"095ea7b3": "approve(address,uint256)",
  6880  	"70a08231": "balanceOf(address)",
  6881  	"081812fc": "getApproved(uint256)",
  6882  	"e985e9c5": "isApprovedForAll(address,address)",
  6883  	"06fdde03": "name()",
  6884  	"6352211e": "ownerOf(uint256)",
  6885  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  6886  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  6887  	"a22cb465": "setApprovalForAll(address,bool)",
  6888  	"01ffc9a7": "supportsInterface(bytes4)",
  6889  	"95d89b41": "symbol()",
  6890  	"c87b56dd": "tokenURI(uint256)",
  6891  	"23b872dd": "transferFrom(address,address,uint256)",
  6892  }
  6893  
  6894  // IERC721Metadata is an auto generated Go binding around an Ethereum contract.
  6895  type IERC721Metadata struct {
  6896  	IERC721MetadataCaller     // Read-only binding to the contract
  6897  	IERC721MetadataTransactor // Write-only binding to the contract
  6898  	IERC721MetadataFilterer   // Log filterer for contract events
  6899  }
  6900  
  6901  // IERC721MetadataCaller is an auto generated read-only Go binding around an Ethereum contract.
  6902  type IERC721MetadataCaller struct {
  6903  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  6904  }
  6905  
  6906  // IERC721MetadataTransactor is an auto generated write-only Go binding around an Ethereum contract.
  6907  type IERC721MetadataTransactor struct {
  6908  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  6909  }
  6910  
  6911  // IERC721MetadataFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  6912  type IERC721MetadataFilterer struct {
  6913  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  6914  }
  6915  
  6916  // IERC721MetadataSession is an auto generated Go binding around an Ethereum contract,
  6917  // with pre-set call and transact options.
  6918  type IERC721MetadataSession struct {
  6919  	Contract     *IERC721Metadata  // Generic contract binding to set the session for
  6920  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  6921  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  6922  }
  6923  
  6924  // IERC721MetadataCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  6925  // with pre-set call options.
  6926  type IERC721MetadataCallerSession struct {
  6927  	Contract *IERC721MetadataCaller // Generic contract caller binding to set the session for
  6928  	CallOpts bind.CallOpts          // Call options to use throughout this session
  6929  }
  6930  
  6931  // IERC721MetadataTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  6932  // with pre-set transact options.
  6933  type IERC721MetadataTransactorSession struct {
  6934  	Contract     *IERC721MetadataTransactor // Generic contract transactor binding to set the session for
  6935  	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
  6936  }
  6937  
  6938  // IERC721MetadataRaw is an auto generated low-level Go binding around an Ethereum contract.
  6939  type IERC721MetadataRaw struct {
  6940  	Contract *IERC721Metadata // Generic contract binding to access the raw methods on
  6941  }
  6942  
  6943  // IERC721MetadataCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  6944  type IERC721MetadataCallerRaw struct {
  6945  	Contract *IERC721MetadataCaller // Generic read-only contract binding to access the raw methods on
  6946  }
  6947  
  6948  // IERC721MetadataTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  6949  type IERC721MetadataTransactorRaw struct {
  6950  	Contract *IERC721MetadataTransactor // Generic write-only contract binding to access the raw methods on
  6951  }
  6952  
  6953  // NewIERC721Metadata creates a new instance of IERC721Metadata, bound to a specific deployed contract.
  6954  func NewIERC721Metadata(address common.Address, backend bind.ContractBackend) (*IERC721Metadata, error) {
  6955  	contract, err := bindIERC721Metadata(address, backend, backend, backend)
  6956  	if err != nil {
  6957  		return nil, err
  6958  	}
  6959  	return &IERC721Metadata{IERC721MetadataCaller: IERC721MetadataCaller{contract: contract}, IERC721MetadataTransactor: IERC721MetadataTransactor{contract: contract}, IERC721MetadataFilterer: IERC721MetadataFilterer{contract: contract}}, nil
  6960  }
  6961  
  6962  // NewIERC721MetadataCaller creates a new read-only instance of IERC721Metadata, bound to a specific deployed contract.
  6963  func NewIERC721MetadataCaller(address common.Address, caller bind.ContractCaller) (*IERC721MetadataCaller, error) {
  6964  	contract, err := bindIERC721Metadata(address, caller, nil, nil)
  6965  	if err != nil {
  6966  		return nil, err
  6967  	}
  6968  	return &IERC721MetadataCaller{contract: contract}, nil
  6969  }
  6970  
  6971  // NewIERC721MetadataTransactor creates a new write-only instance of IERC721Metadata, bound to a specific deployed contract.
  6972  func NewIERC721MetadataTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721MetadataTransactor, error) {
  6973  	contract, err := bindIERC721Metadata(address, nil, transactor, nil)
  6974  	if err != nil {
  6975  		return nil, err
  6976  	}
  6977  	return &IERC721MetadataTransactor{contract: contract}, nil
  6978  }
  6979  
  6980  // NewIERC721MetadataFilterer creates a new log filterer instance of IERC721Metadata, bound to a specific deployed contract.
  6981  func NewIERC721MetadataFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721MetadataFilterer, error) {
  6982  	contract, err := bindIERC721Metadata(address, nil, nil, filterer)
  6983  	if err != nil {
  6984  		return nil, err
  6985  	}
  6986  	return &IERC721MetadataFilterer{contract: contract}, nil
  6987  }
  6988  
  6989  // bindIERC721Metadata binds a generic wrapper to an already deployed contract.
  6990  func bindIERC721Metadata(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  6991  	parsed, err := abi.JSON(strings.NewReader(IERC721MetadataABI))
  6992  	if err != nil {
  6993  		return nil, err
  6994  	}
  6995  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  6996  }
  6997  
  6998  // Call invokes the (constant) contract method with params as input values and
  6999  // sets the output to result. The result type might be a single field for simple
  7000  // returns, a slice of interfaces for anonymous returns and a struct for named
  7001  // returns.
  7002  func (_IERC721Metadata *IERC721MetadataRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  7003  	return _IERC721Metadata.Contract.IERC721MetadataCaller.contract.Call(opts, result, method, params...)
  7004  }
  7005  
  7006  // Transfer initiates a plain transaction to move funds to the contract, calling
  7007  // its default method if one is available.
  7008  func (_IERC721Metadata *IERC721MetadataRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  7009  	return _IERC721Metadata.Contract.IERC721MetadataTransactor.contract.Transfer(opts)
  7010  }
  7011  
  7012  // Transact invokes the (paid) contract method with params as input values.
  7013  func (_IERC721Metadata *IERC721MetadataRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  7014  	return _IERC721Metadata.Contract.IERC721MetadataTransactor.contract.Transact(opts, method, params...)
  7015  }
  7016  
  7017  // Call invokes the (constant) contract method with params as input values and
  7018  // sets the output to result. The result type might be a single field for simple
  7019  // returns, a slice of interfaces for anonymous returns and a struct for named
  7020  // returns.
  7021  func (_IERC721Metadata *IERC721MetadataCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  7022  	return _IERC721Metadata.Contract.contract.Call(opts, result, method, params...)
  7023  }
  7024  
  7025  // Transfer initiates a plain transaction to move funds to the contract, calling
  7026  // its default method if one is available.
  7027  func (_IERC721Metadata *IERC721MetadataTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  7028  	return _IERC721Metadata.Contract.contract.Transfer(opts)
  7029  }
  7030  
  7031  // Transact invokes the (paid) contract method with params as input values.
  7032  func (_IERC721Metadata *IERC721MetadataTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  7033  	return _IERC721Metadata.Contract.contract.Transact(opts, method, params...)
  7034  }
  7035  
  7036  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  7037  //
  7038  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  7039  func (_IERC721Metadata *IERC721MetadataCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  7040  	var out []interface{}
  7041  	err := _IERC721Metadata.contract.Call(opts, &out, "balanceOf", owner)
  7042  
  7043  	if err != nil {
  7044  		return *new(*big.Int), err
  7045  	}
  7046  
  7047  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  7048  
  7049  	return out0, err
  7050  
  7051  }
  7052  
  7053  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  7054  //
  7055  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  7056  func (_IERC721Metadata *IERC721MetadataSession) BalanceOf(owner common.Address) (*big.Int, error) {
  7057  	return _IERC721Metadata.Contract.BalanceOf(&_IERC721Metadata.CallOpts, owner)
  7058  }
  7059  
  7060  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  7061  //
  7062  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  7063  func (_IERC721Metadata *IERC721MetadataCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  7064  	return _IERC721Metadata.Contract.BalanceOf(&_IERC721Metadata.CallOpts, owner)
  7065  }
  7066  
  7067  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  7068  //
  7069  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  7070  func (_IERC721Metadata *IERC721MetadataCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  7071  	var out []interface{}
  7072  	err := _IERC721Metadata.contract.Call(opts, &out, "getApproved", tokenId)
  7073  
  7074  	if err != nil {
  7075  		return *new(common.Address), err
  7076  	}
  7077  
  7078  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  7079  
  7080  	return out0, err
  7081  
  7082  }
  7083  
  7084  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  7085  //
  7086  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  7087  func (_IERC721Metadata *IERC721MetadataSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  7088  	return _IERC721Metadata.Contract.GetApproved(&_IERC721Metadata.CallOpts, tokenId)
  7089  }
  7090  
  7091  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  7092  //
  7093  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  7094  func (_IERC721Metadata *IERC721MetadataCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  7095  	return _IERC721Metadata.Contract.GetApproved(&_IERC721Metadata.CallOpts, tokenId)
  7096  }
  7097  
  7098  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  7099  //
  7100  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  7101  func (_IERC721Metadata *IERC721MetadataCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  7102  	var out []interface{}
  7103  	err := _IERC721Metadata.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  7104  
  7105  	if err != nil {
  7106  		return *new(bool), err
  7107  	}
  7108  
  7109  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  7110  
  7111  	return out0, err
  7112  
  7113  }
  7114  
  7115  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  7116  //
  7117  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  7118  func (_IERC721Metadata *IERC721MetadataSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  7119  	return _IERC721Metadata.Contract.IsApprovedForAll(&_IERC721Metadata.CallOpts, owner, operator)
  7120  }
  7121  
  7122  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  7123  //
  7124  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  7125  func (_IERC721Metadata *IERC721MetadataCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  7126  	return _IERC721Metadata.Contract.IsApprovedForAll(&_IERC721Metadata.CallOpts, owner, operator)
  7127  }
  7128  
  7129  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  7130  //
  7131  // Solidity: function name() view returns(string)
  7132  func (_IERC721Metadata *IERC721MetadataCaller) Name(opts *bind.CallOpts) (string, error) {
  7133  	var out []interface{}
  7134  	err := _IERC721Metadata.contract.Call(opts, &out, "name")
  7135  
  7136  	if err != nil {
  7137  		return *new(string), err
  7138  	}
  7139  
  7140  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  7141  
  7142  	return out0, err
  7143  
  7144  }
  7145  
  7146  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  7147  //
  7148  // Solidity: function name() view returns(string)
  7149  func (_IERC721Metadata *IERC721MetadataSession) Name() (string, error) {
  7150  	return _IERC721Metadata.Contract.Name(&_IERC721Metadata.CallOpts)
  7151  }
  7152  
  7153  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  7154  //
  7155  // Solidity: function name() view returns(string)
  7156  func (_IERC721Metadata *IERC721MetadataCallerSession) Name() (string, error) {
  7157  	return _IERC721Metadata.Contract.Name(&_IERC721Metadata.CallOpts)
  7158  }
  7159  
  7160  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  7161  //
  7162  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  7163  func (_IERC721Metadata *IERC721MetadataCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  7164  	var out []interface{}
  7165  	err := _IERC721Metadata.contract.Call(opts, &out, "ownerOf", tokenId)
  7166  
  7167  	if err != nil {
  7168  		return *new(common.Address), err
  7169  	}
  7170  
  7171  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  7172  
  7173  	return out0, err
  7174  
  7175  }
  7176  
  7177  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  7178  //
  7179  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  7180  func (_IERC721Metadata *IERC721MetadataSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  7181  	return _IERC721Metadata.Contract.OwnerOf(&_IERC721Metadata.CallOpts, tokenId)
  7182  }
  7183  
  7184  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  7185  //
  7186  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  7187  func (_IERC721Metadata *IERC721MetadataCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  7188  	return _IERC721Metadata.Contract.OwnerOf(&_IERC721Metadata.CallOpts, tokenId)
  7189  }
  7190  
  7191  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  7192  //
  7193  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  7194  func (_IERC721Metadata *IERC721MetadataCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  7195  	var out []interface{}
  7196  	err := _IERC721Metadata.contract.Call(opts, &out, "supportsInterface", interfaceId)
  7197  
  7198  	if err != nil {
  7199  		return *new(bool), err
  7200  	}
  7201  
  7202  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  7203  
  7204  	return out0, err
  7205  
  7206  }
  7207  
  7208  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  7209  //
  7210  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  7211  func (_IERC721Metadata *IERC721MetadataSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  7212  	return _IERC721Metadata.Contract.SupportsInterface(&_IERC721Metadata.CallOpts, interfaceId)
  7213  }
  7214  
  7215  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  7216  //
  7217  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  7218  func (_IERC721Metadata *IERC721MetadataCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  7219  	return _IERC721Metadata.Contract.SupportsInterface(&_IERC721Metadata.CallOpts, interfaceId)
  7220  }
  7221  
  7222  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  7223  //
  7224  // Solidity: function symbol() view returns(string)
  7225  func (_IERC721Metadata *IERC721MetadataCaller) Symbol(opts *bind.CallOpts) (string, error) {
  7226  	var out []interface{}
  7227  	err := _IERC721Metadata.contract.Call(opts, &out, "symbol")
  7228  
  7229  	if err != nil {
  7230  		return *new(string), err
  7231  	}
  7232  
  7233  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  7234  
  7235  	return out0, err
  7236  
  7237  }
  7238  
  7239  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  7240  //
  7241  // Solidity: function symbol() view returns(string)
  7242  func (_IERC721Metadata *IERC721MetadataSession) Symbol() (string, error) {
  7243  	return _IERC721Metadata.Contract.Symbol(&_IERC721Metadata.CallOpts)
  7244  }
  7245  
  7246  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  7247  //
  7248  // Solidity: function symbol() view returns(string)
  7249  func (_IERC721Metadata *IERC721MetadataCallerSession) Symbol() (string, error) {
  7250  	return _IERC721Metadata.Contract.Symbol(&_IERC721Metadata.CallOpts)
  7251  }
  7252  
  7253  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  7254  //
  7255  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  7256  func (_IERC721Metadata *IERC721MetadataCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  7257  	var out []interface{}
  7258  	err := _IERC721Metadata.contract.Call(opts, &out, "tokenURI", tokenId)
  7259  
  7260  	if err != nil {
  7261  		return *new(string), err
  7262  	}
  7263  
  7264  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  7265  
  7266  	return out0, err
  7267  
  7268  }
  7269  
  7270  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  7271  //
  7272  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  7273  func (_IERC721Metadata *IERC721MetadataSession) TokenURI(tokenId *big.Int) (string, error) {
  7274  	return _IERC721Metadata.Contract.TokenURI(&_IERC721Metadata.CallOpts, tokenId)
  7275  }
  7276  
  7277  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  7278  //
  7279  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  7280  func (_IERC721Metadata *IERC721MetadataCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  7281  	return _IERC721Metadata.Contract.TokenURI(&_IERC721Metadata.CallOpts, tokenId)
  7282  }
  7283  
  7284  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  7285  //
  7286  // Solidity: function approve(address to, uint256 tokenId) returns()
  7287  func (_IERC721Metadata *IERC721MetadataTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7288  	return _IERC721Metadata.contract.Transact(opts, "approve", to, tokenId)
  7289  }
  7290  
  7291  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  7292  //
  7293  // Solidity: function approve(address to, uint256 tokenId) returns()
  7294  func (_IERC721Metadata *IERC721MetadataSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7295  	return _IERC721Metadata.Contract.Approve(&_IERC721Metadata.TransactOpts, to, tokenId)
  7296  }
  7297  
  7298  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  7299  //
  7300  // Solidity: function approve(address to, uint256 tokenId) returns()
  7301  func (_IERC721Metadata *IERC721MetadataTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7302  	return _IERC721Metadata.Contract.Approve(&_IERC721Metadata.TransactOpts, to, tokenId)
  7303  }
  7304  
  7305  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  7306  //
  7307  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  7308  func (_IERC721Metadata *IERC721MetadataTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7309  	return _IERC721Metadata.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  7310  }
  7311  
  7312  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  7313  //
  7314  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  7315  func (_IERC721Metadata *IERC721MetadataSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7316  	return _IERC721Metadata.Contract.SafeTransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  7317  }
  7318  
  7319  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  7320  //
  7321  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  7322  func (_IERC721Metadata *IERC721MetadataTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7323  	return _IERC721Metadata.Contract.SafeTransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  7324  }
  7325  
  7326  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  7327  //
  7328  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  7329  func (_IERC721Metadata *IERC721MetadataTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  7330  	return _IERC721Metadata.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  7331  }
  7332  
  7333  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  7334  //
  7335  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  7336  func (_IERC721Metadata *IERC721MetadataSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  7337  	return _IERC721Metadata.Contract.SafeTransferFrom0(&_IERC721Metadata.TransactOpts, from, to, tokenId, data)
  7338  }
  7339  
  7340  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  7341  //
  7342  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  7343  func (_IERC721Metadata *IERC721MetadataTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  7344  	return _IERC721Metadata.Contract.SafeTransferFrom0(&_IERC721Metadata.TransactOpts, from, to, tokenId, data)
  7345  }
  7346  
  7347  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  7348  //
  7349  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  7350  func (_IERC721Metadata *IERC721MetadataTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  7351  	return _IERC721Metadata.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  7352  }
  7353  
  7354  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  7355  //
  7356  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  7357  func (_IERC721Metadata *IERC721MetadataSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  7358  	return _IERC721Metadata.Contract.SetApprovalForAll(&_IERC721Metadata.TransactOpts, operator, _approved)
  7359  }
  7360  
  7361  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  7362  //
  7363  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  7364  func (_IERC721Metadata *IERC721MetadataTransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  7365  	return _IERC721Metadata.Contract.SetApprovalForAll(&_IERC721Metadata.TransactOpts, operator, _approved)
  7366  }
  7367  
  7368  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  7369  //
  7370  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  7371  func (_IERC721Metadata *IERC721MetadataTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7372  	return _IERC721Metadata.contract.Transact(opts, "transferFrom", from, to, tokenId)
  7373  }
  7374  
  7375  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  7376  //
  7377  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  7378  func (_IERC721Metadata *IERC721MetadataSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7379  	return _IERC721Metadata.Contract.TransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  7380  }
  7381  
  7382  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  7383  //
  7384  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  7385  func (_IERC721Metadata *IERC721MetadataTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7386  	return _IERC721Metadata.Contract.TransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  7387  }
  7388  
  7389  // IERC721MetadataApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC721Metadata contract.
  7390  type IERC721MetadataApprovalIterator struct {
  7391  	Event *IERC721MetadataApproval // Event containing the contract specifics and raw log
  7392  
  7393  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7394  	event    string              // Event name to use for unpacking event data
  7395  
  7396  	logs chan types.Log        // Log channel receiving the found contract events
  7397  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7398  	done bool                  // Whether the subscription completed delivering logs
  7399  	fail error                 // Occurred error to stop iteration
  7400  }
  7401  
  7402  // Next advances the iterator to the subsequent event, returning whether there
  7403  // are any more events found. In case of a retrieval or parsing error, false is
  7404  // returned and Error() can be queried for the exact failure.
  7405  func (it *IERC721MetadataApprovalIterator) Next() bool {
  7406  	// If the iterator failed, stop iterating
  7407  	if it.fail != nil {
  7408  		return false
  7409  	}
  7410  	// If the iterator completed, deliver directly whatever's available
  7411  	if it.done {
  7412  		select {
  7413  		case log := <-it.logs:
  7414  			it.Event = new(IERC721MetadataApproval)
  7415  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7416  				it.fail = err
  7417  				return false
  7418  			}
  7419  			it.Event.Raw = log
  7420  			return true
  7421  
  7422  		default:
  7423  			return false
  7424  		}
  7425  	}
  7426  	// Iterator still in progress, wait for either a data or an error event
  7427  	select {
  7428  	case log := <-it.logs:
  7429  		it.Event = new(IERC721MetadataApproval)
  7430  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7431  			it.fail = err
  7432  			return false
  7433  		}
  7434  		it.Event.Raw = log
  7435  		return true
  7436  
  7437  	case err := <-it.sub.Err():
  7438  		it.done = true
  7439  		it.fail = err
  7440  		return it.Next()
  7441  	}
  7442  }
  7443  
  7444  // Error returns any retrieval or parsing error occurred during filtering.
  7445  func (it *IERC721MetadataApprovalIterator) Error() error {
  7446  	return it.fail
  7447  }
  7448  
  7449  // Close terminates the iteration process, releasing any pending underlying
  7450  // resources.
  7451  func (it *IERC721MetadataApprovalIterator) Close() error {
  7452  	it.sub.Unsubscribe()
  7453  	return nil
  7454  }
  7455  
  7456  // IERC721MetadataApproval represents a Approval event raised by the IERC721Metadata contract.
  7457  type IERC721MetadataApproval struct {
  7458  	Owner    common.Address
  7459  	Approved common.Address
  7460  	TokenId  *big.Int
  7461  	Raw      types.Log // Blockchain specific contextual infos
  7462  }
  7463  
  7464  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  7465  //
  7466  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  7467  func (_IERC721Metadata *IERC721MetadataFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721MetadataApprovalIterator, error) {
  7468  
  7469  	var ownerRule []interface{}
  7470  	for _, ownerItem := range owner {
  7471  		ownerRule = append(ownerRule, ownerItem)
  7472  	}
  7473  	var approvedRule []interface{}
  7474  	for _, approvedItem := range approved {
  7475  		approvedRule = append(approvedRule, approvedItem)
  7476  	}
  7477  	var tokenIdRule []interface{}
  7478  	for _, tokenIdItem := range tokenId {
  7479  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7480  	}
  7481  
  7482  	logs, sub, err := _IERC721Metadata.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  7483  	if err != nil {
  7484  		return nil, err
  7485  	}
  7486  	return &IERC721MetadataApprovalIterator{contract: _IERC721Metadata.contract, event: "Approval", logs: logs, sub: sub}, nil
  7487  }
  7488  
  7489  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  7490  //
  7491  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  7492  func (_IERC721Metadata *IERC721MetadataFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721MetadataApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  7493  
  7494  	var ownerRule []interface{}
  7495  	for _, ownerItem := range owner {
  7496  		ownerRule = append(ownerRule, ownerItem)
  7497  	}
  7498  	var approvedRule []interface{}
  7499  	for _, approvedItem := range approved {
  7500  		approvedRule = append(approvedRule, approvedItem)
  7501  	}
  7502  	var tokenIdRule []interface{}
  7503  	for _, tokenIdItem := range tokenId {
  7504  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7505  	}
  7506  
  7507  	logs, sub, err := _IERC721Metadata.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  7508  	if err != nil {
  7509  		return nil, err
  7510  	}
  7511  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7512  		defer sub.Unsubscribe()
  7513  		for {
  7514  			select {
  7515  			case log := <-logs:
  7516  				// New log arrived, parse the event and forward to the user
  7517  				event := new(IERC721MetadataApproval)
  7518  				if err := _IERC721Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  7519  					return err
  7520  				}
  7521  				event.Raw = log
  7522  
  7523  				select {
  7524  				case sink <- event:
  7525  				case err := <-sub.Err():
  7526  					return err
  7527  				case <-quit:
  7528  					return nil
  7529  				}
  7530  			case err := <-sub.Err():
  7531  				return err
  7532  			case <-quit:
  7533  				return nil
  7534  			}
  7535  		}
  7536  	}), nil
  7537  }
  7538  
  7539  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  7540  //
  7541  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  7542  func (_IERC721Metadata *IERC721MetadataFilterer) ParseApproval(log types.Log) (*IERC721MetadataApproval, error) {
  7543  	event := new(IERC721MetadataApproval)
  7544  	if err := _IERC721Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  7545  		return nil, err
  7546  	}
  7547  	event.Raw = log
  7548  	return event, nil
  7549  }
  7550  
  7551  // IERC721MetadataApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the IERC721Metadata contract.
  7552  type IERC721MetadataApprovalForAllIterator struct {
  7553  	Event *IERC721MetadataApprovalForAll // Event containing the contract specifics and raw log
  7554  
  7555  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7556  	event    string              // Event name to use for unpacking event data
  7557  
  7558  	logs chan types.Log        // Log channel receiving the found contract events
  7559  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7560  	done bool                  // Whether the subscription completed delivering logs
  7561  	fail error                 // Occurred error to stop iteration
  7562  }
  7563  
  7564  // Next advances the iterator to the subsequent event, returning whether there
  7565  // are any more events found. In case of a retrieval or parsing error, false is
  7566  // returned and Error() can be queried for the exact failure.
  7567  func (it *IERC721MetadataApprovalForAllIterator) Next() bool {
  7568  	// If the iterator failed, stop iterating
  7569  	if it.fail != nil {
  7570  		return false
  7571  	}
  7572  	// If the iterator completed, deliver directly whatever's available
  7573  	if it.done {
  7574  		select {
  7575  		case log := <-it.logs:
  7576  			it.Event = new(IERC721MetadataApprovalForAll)
  7577  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7578  				it.fail = err
  7579  				return false
  7580  			}
  7581  			it.Event.Raw = log
  7582  			return true
  7583  
  7584  		default:
  7585  			return false
  7586  		}
  7587  	}
  7588  	// Iterator still in progress, wait for either a data or an error event
  7589  	select {
  7590  	case log := <-it.logs:
  7591  		it.Event = new(IERC721MetadataApprovalForAll)
  7592  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7593  			it.fail = err
  7594  			return false
  7595  		}
  7596  		it.Event.Raw = log
  7597  		return true
  7598  
  7599  	case err := <-it.sub.Err():
  7600  		it.done = true
  7601  		it.fail = err
  7602  		return it.Next()
  7603  	}
  7604  }
  7605  
  7606  // Error returns any retrieval or parsing error occurred during filtering.
  7607  func (it *IERC721MetadataApprovalForAllIterator) Error() error {
  7608  	return it.fail
  7609  }
  7610  
  7611  // Close terminates the iteration process, releasing any pending underlying
  7612  // resources.
  7613  func (it *IERC721MetadataApprovalForAllIterator) Close() error {
  7614  	it.sub.Unsubscribe()
  7615  	return nil
  7616  }
  7617  
  7618  // IERC721MetadataApprovalForAll represents a ApprovalForAll event raised by the IERC721Metadata contract.
  7619  type IERC721MetadataApprovalForAll struct {
  7620  	Owner    common.Address
  7621  	Operator common.Address
  7622  	Approved bool
  7623  	Raw      types.Log // Blockchain specific contextual infos
  7624  }
  7625  
  7626  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  7627  //
  7628  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  7629  func (_IERC721Metadata *IERC721MetadataFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721MetadataApprovalForAllIterator, error) {
  7630  
  7631  	var ownerRule []interface{}
  7632  	for _, ownerItem := range owner {
  7633  		ownerRule = append(ownerRule, ownerItem)
  7634  	}
  7635  	var operatorRule []interface{}
  7636  	for _, operatorItem := range operator {
  7637  		operatorRule = append(operatorRule, operatorItem)
  7638  	}
  7639  
  7640  	logs, sub, err := _IERC721Metadata.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  7641  	if err != nil {
  7642  		return nil, err
  7643  	}
  7644  	return &IERC721MetadataApprovalForAllIterator{contract: _IERC721Metadata.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  7645  }
  7646  
  7647  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  7648  //
  7649  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  7650  func (_IERC721Metadata *IERC721MetadataFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721MetadataApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  7651  
  7652  	var ownerRule []interface{}
  7653  	for _, ownerItem := range owner {
  7654  		ownerRule = append(ownerRule, ownerItem)
  7655  	}
  7656  	var operatorRule []interface{}
  7657  	for _, operatorItem := range operator {
  7658  		operatorRule = append(operatorRule, operatorItem)
  7659  	}
  7660  
  7661  	logs, sub, err := _IERC721Metadata.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  7662  	if err != nil {
  7663  		return nil, err
  7664  	}
  7665  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7666  		defer sub.Unsubscribe()
  7667  		for {
  7668  			select {
  7669  			case log := <-logs:
  7670  				// New log arrived, parse the event and forward to the user
  7671  				event := new(IERC721MetadataApprovalForAll)
  7672  				if err := _IERC721Metadata.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  7673  					return err
  7674  				}
  7675  				event.Raw = log
  7676  
  7677  				select {
  7678  				case sink <- event:
  7679  				case err := <-sub.Err():
  7680  					return err
  7681  				case <-quit:
  7682  					return nil
  7683  				}
  7684  			case err := <-sub.Err():
  7685  				return err
  7686  			case <-quit:
  7687  				return nil
  7688  			}
  7689  		}
  7690  	}), nil
  7691  }
  7692  
  7693  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  7694  //
  7695  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  7696  func (_IERC721Metadata *IERC721MetadataFilterer) ParseApprovalForAll(log types.Log) (*IERC721MetadataApprovalForAll, error) {
  7697  	event := new(IERC721MetadataApprovalForAll)
  7698  	if err := _IERC721Metadata.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  7699  		return nil, err
  7700  	}
  7701  	event.Raw = log
  7702  	return event, nil
  7703  }
  7704  
  7705  // IERC721MetadataTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC721Metadata contract.
  7706  type IERC721MetadataTransferIterator struct {
  7707  	Event *IERC721MetadataTransfer // Event containing the contract specifics and raw log
  7708  
  7709  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7710  	event    string              // Event name to use for unpacking event data
  7711  
  7712  	logs chan types.Log        // Log channel receiving the found contract events
  7713  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7714  	done bool                  // Whether the subscription completed delivering logs
  7715  	fail error                 // Occurred error to stop iteration
  7716  }
  7717  
  7718  // Next advances the iterator to the subsequent event, returning whether there
  7719  // are any more events found. In case of a retrieval or parsing error, false is
  7720  // returned and Error() can be queried for the exact failure.
  7721  func (it *IERC721MetadataTransferIterator) Next() bool {
  7722  	// If the iterator failed, stop iterating
  7723  	if it.fail != nil {
  7724  		return false
  7725  	}
  7726  	// If the iterator completed, deliver directly whatever's available
  7727  	if it.done {
  7728  		select {
  7729  		case log := <-it.logs:
  7730  			it.Event = new(IERC721MetadataTransfer)
  7731  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7732  				it.fail = err
  7733  				return false
  7734  			}
  7735  			it.Event.Raw = log
  7736  			return true
  7737  
  7738  		default:
  7739  			return false
  7740  		}
  7741  	}
  7742  	// Iterator still in progress, wait for either a data or an error event
  7743  	select {
  7744  	case log := <-it.logs:
  7745  		it.Event = new(IERC721MetadataTransfer)
  7746  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7747  			it.fail = err
  7748  			return false
  7749  		}
  7750  		it.Event.Raw = log
  7751  		return true
  7752  
  7753  	case err := <-it.sub.Err():
  7754  		it.done = true
  7755  		it.fail = err
  7756  		return it.Next()
  7757  	}
  7758  }
  7759  
  7760  // Error returns any retrieval or parsing error occurred during filtering.
  7761  func (it *IERC721MetadataTransferIterator) Error() error {
  7762  	return it.fail
  7763  }
  7764  
  7765  // Close terminates the iteration process, releasing any pending underlying
  7766  // resources.
  7767  func (it *IERC721MetadataTransferIterator) Close() error {
  7768  	it.sub.Unsubscribe()
  7769  	return nil
  7770  }
  7771  
  7772  // IERC721MetadataTransfer represents a Transfer event raised by the IERC721Metadata contract.
  7773  type IERC721MetadataTransfer struct {
  7774  	From    common.Address
  7775  	To      common.Address
  7776  	TokenId *big.Int
  7777  	Raw     types.Log // Blockchain specific contextual infos
  7778  }
  7779  
  7780  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7781  //
  7782  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  7783  func (_IERC721Metadata *IERC721MetadataFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721MetadataTransferIterator, error) {
  7784  
  7785  	var fromRule []interface{}
  7786  	for _, fromItem := range from {
  7787  		fromRule = append(fromRule, fromItem)
  7788  	}
  7789  	var toRule []interface{}
  7790  	for _, toItem := range to {
  7791  		toRule = append(toRule, toItem)
  7792  	}
  7793  	var tokenIdRule []interface{}
  7794  	for _, tokenIdItem := range tokenId {
  7795  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7796  	}
  7797  
  7798  	logs, sub, err := _IERC721Metadata.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  7799  	if err != nil {
  7800  		return nil, err
  7801  	}
  7802  	return &IERC721MetadataTransferIterator{contract: _IERC721Metadata.contract, event: "Transfer", logs: logs, sub: sub}, nil
  7803  }
  7804  
  7805  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7806  //
  7807  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  7808  func (_IERC721Metadata *IERC721MetadataFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721MetadataTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  7809  
  7810  	var fromRule []interface{}
  7811  	for _, fromItem := range from {
  7812  		fromRule = append(fromRule, fromItem)
  7813  	}
  7814  	var toRule []interface{}
  7815  	for _, toItem := range to {
  7816  		toRule = append(toRule, toItem)
  7817  	}
  7818  	var tokenIdRule []interface{}
  7819  	for _, tokenIdItem := range tokenId {
  7820  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7821  	}
  7822  
  7823  	logs, sub, err := _IERC721Metadata.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  7824  	if err != nil {
  7825  		return nil, err
  7826  	}
  7827  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7828  		defer sub.Unsubscribe()
  7829  		for {
  7830  			select {
  7831  			case log := <-logs:
  7832  				// New log arrived, parse the event and forward to the user
  7833  				event := new(IERC721MetadataTransfer)
  7834  				if err := _IERC721Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  7835  					return err
  7836  				}
  7837  				event.Raw = log
  7838  
  7839  				select {
  7840  				case sink <- event:
  7841  				case err := <-sub.Err():
  7842  					return err
  7843  				case <-quit:
  7844  					return nil
  7845  				}
  7846  			case err := <-sub.Err():
  7847  				return err
  7848  			case <-quit:
  7849  				return nil
  7850  			}
  7851  		}
  7852  	}), nil
  7853  }
  7854  
  7855  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7856  //
  7857  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  7858  func (_IERC721Metadata *IERC721MetadataFilterer) ParseTransfer(log types.Log) (*IERC721MetadataTransfer, error) {
  7859  	event := new(IERC721MetadataTransfer)
  7860  	if err := _IERC721Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  7861  		return nil, err
  7862  	}
  7863  	event.Raw = log
  7864  	return event, nil
  7865  }
  7866  
  7867  // IERC721ReceiverABI is the input ABI used to generate the binding from.
  7868  const IERC721ReceiverABI = "[{\"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\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  7869  
  7870  // IERC721ReceiverFuncSigs maps the 4-byte function signature to its string representation.
  7871  var IERC721ReceiverFuncSigs = map[string]string{
  7872  	"150b7a02": "onERC721Received(address,address,uint256,bytes)",
  7873  }
  7874  
  7875  // IERC721Receiver is an auto generated Go binding around an Ethereum contract.
  7876  type IERC721Receiver struct {
  7877  	IERC721ReceiverCaller     // Read-only binding to the contract
  7878  	IERC721ReceiverTransactor // Write-only binding to the contract
  7879  	IERC721ReceiverFilterer   // Log filterer for contract events
  7880  }
  7881  
  7882  // IERC721ReceiverCaller is an auto generated read-only Go binding around an Ethereum contract.
  7883  type IERC721ReceiverCaller struct {
  7884  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  7885  }
  7886  
  7887  // IERC721ReceiverTransactor is an auto generated write-only Go binding around an Ethereum contract.
  7888  type IERC721ReceiverTransactor struct {
  7889  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  7890  }
  7891  
  7892  // IERC721ReceiverFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  7893  type IERC721ReceiverFilterer struct {
  7894  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  7895  }
  7896  
  7897  // IERC721ReceiverSession is an auto generated Go binding around an Ethereum contract,
  7898  // with pre-set call and transact options.
  7899  type IERC721ReceiverSession struct {
  7900  	Contract     *IERC721Receiver  // Generic contract binding to set the session for
  7901  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  7902  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  7903  }
  7904  
  7905  // IERC721ReceiverCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  7906  // with pre-set call options.
  7907  type IERC721ReceiverCallerSession struct {
  7908  	Contract *IERC721ReceiverCaller // Generic contract caller binding to set the session for
  7909  	CallOpts bind.CallOpts          // Call options to use throughout this session
  7910  }
  7911  
  7912  // IERC721ReceiverTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  7913  // with pre-set transact options.
  7914  type IERC721ReceiverTransactorSession struct {
  7915  	Contract     *IERC721ReceiverTransactor // Generic contract transactor binding to set the session for
  7916  	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
  7917  }
  7918  
  7919  // IERC721ReceiverRaw is an auto generated low-level Go binding around an Ethereum contract.
  7920  type IERC721ReceiverRaw struct {
  7921  	Contract *IERC721Receiver // Generic contract binding to access the raw methods on
  7922  }
  7923  
  7924  // IERC721ReceiverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  7925  type IERC721ReceiverCallerRaw struct {
  7926  	Contract *IERC721ReceiverCaller // Generic read-only contract binding to access the raw methods on
  7927  }
  7928  
  7929  // IERC721ReceiverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  7930  type IERC721ReceiverTransactorRaw struct {
  7931  	Contract *IERC721ReceiverTransactor // Generic write-only contract binding to access the raw methods on
  7932  }
  7933  
  7934  // NewIERC721Receiver creates a new instance of IERC721Receiver, bound to a specific deployed contract.
  7935  func NewIERC721Receiver(address common.Address, backend bind.ContractBackend) (*IERC721Receiver, error) {
  7936  	contract, err := bindIERC721Receiver(address, backend, backend, backend)
  7937  	if err != nil {
  7938  		return nil, err
  7939  	}
  7940  	return &IERC721Receiver{IERC721ReceiverCaller: IERC721ReceiverCaller{contract: contract}, IERC721ReceiverTransactor: IERC721ReceiverTransactor{contract: contract}, IERC721ReceiverFilterer: IERC721ReceiverFilterer{contract: contract}}, nil
  7941  }
  7942  
  7943  // NewIERC721ReceiverCaller creates a new read-only instance of IERC721Receiver, bound to a specific deployed contract.
  7944  func NewIERC721ReceiverCaller(address common.Address, caller bind.ContractCaller) (*IERC721ReceiverCaller, error) {
  7945  	contract, err := bindIERC721Receiver(address, caller, nil, nil)
  7946  	if err != nil {
  7947  		return nil, err
  7948  	}
  7949  	return &IERC721ReceiverCaller{contract: contract}, nil
  7950  }
  7951  
  7952  // NewIERC721ReceiverTransactor creates a new write-only instance of IERC721Receiver, bound to a specific deployed contract.
  7953  func NewIERC721ReceiverTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721ReceiverTransactor, error) {
  7954  	contract, err := bindIERC721Receiver(address, nil, transactor, nil)
  7955  	if err != nil {
  7956  		return nil, err
  7957  	}
  7958  	return &IERC721ReceiverTransactor{contract: contract}, nil
  7959  }
  7960  
  7961  // NewIERC721ReceiverFilterer creates a new log filterer instance of IERC721Receiver, bound to a specific deployed contract.
  7962  func NewIERC721ReceiverFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721ReceiverFilterer, error) {
  7963  	contract, err := bindIERC721Receiver(address, nil, nil, filterer)
  7964  	if err != nil {
  7965  		return nil, err
  7966  	}
  7967  	return &IERC721ReceiverFilterer{contract: contract}, nil
  7968  }
  7969  
  7970  // bindIERC721Receiver binds a generic wrapper to an already deployed contract.
  7971  func bindIERC721Receiver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  7972  	parsed, err := abi.JSON(strings.NewReader(IERC721ReceiverABI))
  7973  	if err != nil {
  7974  		return nil, err
  7975  	}
  7976  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  7977  }
  7978  
  7979  // Call invokes the (constant) contract method with params as input values and
  7980  // sets the output to result. The result type might be a single field for simple
  7981  // returns, a slice of interfaces for anonymous returns and a struct for named
  7982  // returns.
  7983  func (_IERC721Receiver *IERC721ReceiverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  7984  	return _IERC721Receiver.Contract.IERC721ReceiverCaller.contract.Call(opts, result, method, params...)
  7985  }
  7986  
  7987  // Transfer initiates a plain transaction to move funds to the contract, calling
  7988  // its default method if one is available.
  7989  func (_IERC721Receiver *IERC721ReceiverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  7990  	return _IERC721Receiver.Contract.IERC721ReceiverTransactor.contract.Transfer(opts)
  7991  }
  7992  
  7993  // Transact invokes the (paid) contract method with params as input values.
  7994  func (_IERC721Receiver *IERC721ReceiverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  7995  	return _IERC721Receiver.Contract.IERC721ReceiverTransactor.contract.Transact(opts, method, params...)
  7996  }
  7997  
  7998  // Call invokes the (constant) contract method with params as input values and
  7999  // sets the output to result. The result type might be a single field for simple
  8000  // returns, a slice of interfaces for anonymous returns and a struct for named
  8001  // returns.
  8002  func (_IERC721Receiver *IERC721ReceiverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8003  	return _IERC721Receiver.Contract.contract.Call(opts, result, method, params...)
  8004  }
  8005  
  8006  // Transfer initiates a plain transaction to move funds to the contract, calling
  8007  // its default method if one is available.
  8008  func (_IERC721Receiver *IERC721ReceiverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8009  	return _IERC721Receiver.Contract.contract.Transfer(opts)
  8010  }
  8011  
  8012  // Transact invokes the (paid) contract method with params as input values.
  8013  func (_IERC721Receiver *IERC721ReceiverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8014  	return _IERC721Receiver.Contract.contract.Transact(opts, method, params...)
  8015  }
  8016  
  8017  // OnERC721Received is a paid mutator transaction binding the contract method 0x150b7a02.
  8018  //
  8019  // Solidity: function onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns(bytes4)
  8020  func (_IERC721Receiver *IERC721ReceiverTransactor) OnERC721Received(opts *bind.TransactOpts, operator common.Address, from common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8021  	return _IERC721Receiver.contract.Transact(opts, "onERC721Received", operator, from, tokenId, data)
  8022  }
  8023  
  8024  // OnERC721Received is a paid mutator transaction binding the contract method 0x150b7a02.
  8025  //
  8026  // Solidity: function onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns(bytes4)
  8027  func (_IERC721Receiver *IERC721ReceiverSession) OnERC721Received(operator common.Address, from common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8028  	return _IERC721Receiver.Contract.OnERC721Received(&_IERC721Receiver.TransactOpts, operator, from, tokenId, data)
  8029  }
  8030  
  8031  // OnERC721Received is a paid mutator transaction binding the contract method 0x150b7a02.
  8032  //
  8033  // Solidity: function onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns(bytes4)
  8034  func (_IERC721Receiver *IERC721ReceiverTransactorSession) OnERC721Received(operator common.Address, from common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8035  	return _IERC721Receiver.Contract.OnERC721Received(&_IERC721Receiver.TransactOpts, operator, from, tokenId, data)
  8036  }
  8037  
  8038  // OwnableABI is the input ABI used to generate the binding from.
  8039  const OwnableABI = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minterAddress\",\"type\":\"address\"}],\"name\":\"setMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minterAddress\",\"type\":\"address\"}],\"name\":\"setMinterContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  8040  
  8041  // OwnableFuncSigs maps the 4-byte function signature to its string representation.
  8042  var OwnableFuncSigs = map[string]string{
  8043  	"8da5cb5b": "owner()",
  8044  	"715018a6": "renounceOwnership()",
  8045  	"fca3b5aa": "setMinter(address)",
  8046  	"38478ae7": "setMinterContract(address)",
  8047  	"f2fde38b": "transferOwnership(address)",
  8048  }
  8049  
  8050  // OwnableBin is the compiled bytecode used for deploying new contracts.
  8051  var OwnableBin = "0x608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610356806100616000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806338478ae71461005c578063715018a6146100715780638da5cb5b14610079578063f2fde38b14610098578063fca3b5aa146100ab575b600080fd5b61006f61006a3660046102bd565b6100be565b005b61006f610113565b600054604080516001600160a01b039092168252519081900360200190f35b61006f6100a63660046102bd565b610187565b61006f6100b93660046102bd565b610271565b6000546001600160a01b031633146100f15760405162461bcd60e51b81526004016100e8906102eb565b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461013d5760405162461bcd60e51b81526004016100e8906102eb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146101b15760405162461bcd60e51b81526004016100e8906102eb565b6001600160a01b0381166102165760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100e8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461029b5760405162461bcd60e51b81526004016100e8906102eb565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156102ce578081fd5b81356001600160a01b03811681146102e4578182fd5b9392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea264697066735822122066bb0d2cd1ba46073c6747ef120661a62cd5fb5ca3fa8588c9999b291100c8df64736f6c63430008030033"
  8052  
  8053  // DeployOwnable deploys a new Ethereum contract, binding an instance of Ownable to it.
  8054  func DeployOwnable(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Ownable, error) {
  8055  	parsed, err := abi.JSON(strings.NewReader(OwnableABI))
  8056  	if err != nil {
  8057  		return common.Address{}, nil, nil, err
  8058  	}
  8059  
  8060  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(OwnableBin), backend)
  8061  	if err != nil {
  8062  		return common.Address{}, nil, nil, err
  8063  	}
  8064  	return address, tx, &Ownable{OwnableCaller: OwnableCaller{contract: contract}, OwnableTransactor: OwnableTransactor{contract: contract}, OwnableFilterer: OwnableFilterer{contract: contract}}, nil
  8065  }
  8066  
  8067  // Ownable is an auto generated Go binding around an Ethereum contract.
  8068  type Ownable struct {
  8069  	OwnableCaller     // Read-only binding to the contract
  8070  	OwnableTransactor // Write-only binding to the contract
  8071  	OwnableFilterer   // Log filterer for contract events
  8072  }
  8073  
  8074  // OwnableCaller is an auto generated read-only Go binding around an Ethereum contract.
  8075  type OwnableCaller struct {
  8076  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8077  }
  8078  
  8079  // OwnableTransactor is an auto generated write-only Go binding around an Ethereum contract.
  8080  type OwnableTransactor struct {
  8081  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8082  }
  8083  
  8084  // OwnableFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  8085  type OwnableFilterer struct {
  8086  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8087  }
  8088  
  8089  // OwnableSession is an auto generated Go binding around an Ethereum contract,
  8090  // with pre-set call and transact options.
  8091  type OwnableSession struct {
  8092  	Contract     *Ownable          // Generic contract binding to set the session for
  8093  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  8094  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  8095  }
  8096  
  8097  // OwnableCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  8098  // with pre-set call options.
  8099  type OwnableCallerSession struct {
  8100  	Contract *OwnableCaller // Generic contract caller binding to set the session for
  8101  	CallOpts bind.CallOpts  // Call options to use throughout this session
  8102  }
  8103  
  8104  // OwnableTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  8105  // with pre-set transact options.
  8106  type OwnableTransactorSession struct {
  8107  	Contract     *OwnableTransactor // Generic contract transactor binding to set the session for
  8108  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  8109  }
  8110  
  8111  // OwnableRaw is an auto generated low-level Go binding around an Ethereum contract.
  8112  type OwnableRaw struct {
  8113  	Contract *Ownable // Generic contract binding to access the raw methods on
  8114  }
  8115  
  8116  // OwnableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  8117  type OwnableCallerRaw struct {
  8118  	Contract *OwnableCaller // Generic read-only contract binding to access the raw methods on
  8119  }
  8120  
  8121  // OwnableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  8122  type OwnableTransactorRaw struct {
  8123  	Contract *OwnableTransactor // Generic write-only contract binding to access the raw methods on
  8124  }
  8125  
  8126  // NewOwnable creates a new instance of Ownable, bound to a specific deployed contract.
  8127  func NewOwnable(address common.Address, backend bind.ContractBackend) (*Ownable, error) {
  8128  	contract, err := bindOwnable(address, backend, backend, backend)
  8129  	if err != nil {
  8130  		return nil, err
  8131  	}
  8132  	return &Ownable{OwnableCaller: OwnableCaller{contract: contract}, OwnableTransactor: OwnableTransactor{contract: contract}, OwnableFilterer: OwnableFilterer{contract: contract}}, nil
  8133  }
  8134  
  8135  // NewOwnableCaller creates a new read-only instance of Ownable, bound to a specific deployed contract.
  8136  func NewOwnableCaller(address common.Address, caller bind.ContractCaller) (*OwnableCaller, error) {
  8137  	contract, err := bindOwnable(address, caller, nil, nil)
  8138  	if err != nil {
  8139  		return nil, err
  8140  	}
  8141  	return &OwnableCaller{contract: contract}, nil
  8142  }
  8143  
  8144  // NewOwnableTransactor creates a new write-only instance of Ownable, bound to a specific deployed contract.
  8145  func NewOwnableTransactor(address common.Address, transactor bind.ContractTransactor) (*OwnableTransactor, error) {
  8146  	contract, err := bindOwnable(address, nil, transactor, nil)
  8147  	if err != nil {
  8148  		return nil, err
  8149  	}
  8150  	return &OwnableTransactor{contract: contract}, nil
  8151  }
  8152  
  8153  // NewOwnableFilterer creates a new log filterer instance of Ownable, bound to a specific deployed contract.
  8154  func NewOwnableFilterer(address common.Address, filterer bind.ContractFilterer) (*OwnableFilterer, error) {
  8155  	contract, err := bindOwnable(address, nil, nil, filterer)
  8156  	if err != nil {
  8157  		return nil, err
  8158  	}
  8159  	return &OwnableFilterer{contract: contract}, nil
  8160  }
  8161  
  8162  // bindOwnable binds a generic wrapper to an already deployed contract.
  8163  func bindOwnable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  8164  	parsed, err := abi.JSON(strings.NewReader(OwnableABI))
  8165  	if err != nil {
  8166  		return nil, err
  8167  	}
  8168  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  8169  }
  8170  
  8171  // Call invokes the (constant) contract method with params as input values and
  8172  // sets the output to result. The result type might be a single field for simple
  8173  // returns, a slice of interfaces for anonymous returns and a struct for named
  8174  // returns.
  8175  func (_Ownable *OwnableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8176  	return _Ownable.Contract.OwnableCaller.contract.Call(opts, result, method, params...)
  8177  }
  8178  
  8179  // Transfer initiates a plain transaction to move funds to the contract, calling
  8180  // its default method if one is available.
  8181  func (_Ownable *OwnableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8182  	return _Ownable.Contract.OwnableTransactor.contract.Transfer(opts)
  8183  }
  8184  
  8185  // Transact invokes the (paid) contract method with params as input values.
  8186  func (_Ownable *OwnableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8187  	return _Ownable.Contract.OwnableTransactor.contract.Transact(opts, method, params...)
  8188  }
  8189  
  8190  // Call invokes the (constant) contract method with params as input values and
  8191  // sets the output to result. The result type might be a single field for simple
  8192  // returns, a slice of interfaces for anonymous returns and a struct for named
  8193  // returns.
  8194  func (_Ownable *OwnableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8195  	return _Ownable.Contract.contract.Call(opts, result, method, params...)
  8196  }
  8197  
  8198  // Transfer initiates a plain transaction to move funds to the contract, calling
  8199  // its default method if one is available.
  8200  func (_Ownable *OwnableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8201  	return _Ownable.Contract.contract.Transfer(opts)
  8202  }
  8203  
  8204  // Transact invokes the (paid) contract method with params as input values.
  8205  func (_Ownable *OwnableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8206  	return _Ownable.Contract.contract.Transact(opts, method, params...)
  8207  }
  8208  
  8209  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
  8210  //
  8211  // Solidity: function owner() view returns(address)
  8212  func (_Ownable *OwnableCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
  8213  	var out []interface{}
  8214  	err := _Ownable.contract.Call(opts, &out, "owner")
  8215  
  8216  	if err != nil {
  8217  		return *new(common.Address), err
  8218  	}
  8219  
  8220  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  8221  
  8222  	return out0, err
  8223  
  8224  }
  8225  
  8226  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
  8227  //
  8228  // Solidity: function owner() view returns(address)
  8229  func (_Ownable *OwnableSession) Owner() (common.Address, error) {
  8230  	return _Ownable.Contract.Owner(&_Ownable.CallOpts)
  8231  }
  8232  
  8233  // Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
  8234  //
  8235  // Solidity: function owner() view returns(address)
  8236  func (_Ownable *OwnableCallerSession) Owner() (common.Address, error) {
  8237  	return _Ownable.Contract.Owner(&_Ownable.CallOpts)
  8238  }
  8239  
  8240  // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
  8241  //
  8242  // Solidity: function renounceOwnership() returns()
  8243  func (_Ownable *OwnableTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
  8244  	return _Ownable.contract.Transact(opts, "renounceOwnership")
  8245  }
  8246  
  8247  // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
  8248  //
  8249  // Solidity: function renounceOwnership() returns()
  8250  func (_Ownable *OwnableSession) RenounceOwnership() (*types.Transaction, error) {
  8251  	return _Ownable.Contract.RenounceOwnership(&_Ownable.TransactOpts)
  8252  }
  8253  
  8254  // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
  8255  //
  8256  // Solidity: function renounceOwnership() returns()
  8257  func (_Ownable *OwnableTransactorSession) RenounceOwnership() (*types.Transaction, error) {
  8258  	return _Ownable.Contract.RenounceOwnership(&_Ownable.TransactOpts)
  8259  }
  8260  
  8261  // SetMinter is a paid mutator transaction binding the contract method 0xfca3b5aa.
  8262  //
  8263  // Solidity: function setMinter(address _minterAddress) returns()
  8264  func (_Ownable *OwnableTransactor) SetMinter(opts *bind.TransactOpts, _minterAddress common.Address) (*types.Transaction, error) {
  8265  	return _Ownable.contract.Transact(opts, "setMinter", _minterAddress)
  8266  }
  8267  
  8268  // SetMinter is a paid mutator transaction binding the contract method 0xfca3b5aa.
  8269  //
  8270  // Solidity: function setMinter(address _minterAddress) returns()
  8271  func (_Ownable *OwnableSession) SetMinter(_minterAddress common.Address) (*types.Transaction, error) {
  8272  	return _Ownable.Contract.SetMinter(&_Ownable.TransactOpts, _minterAddress)
  8273  }
  8274  
  8275  // SetMinter is a paid mutator transaction binding the contract method 0xfca3b5aa.
  8276  //
  8277  // Solidity: function setMinter(address _minterAddress) returns()
  8278  func (_Ownable *OwnableTransactorSession) SetMinter(_minterAddress common.Address) (*types.Transaction, error) {
  8279  	return _Ownable.Contract.SetMinter(&_Ownable.TransactOpts, _minterAddress)
  8280  }
  8281  
  8282  // SetMinterContract is a paid mutator transaction binding the contract method 0x38478ae7.
  8283  //
  8284  // Solidity: function setMinterContract(address _minterAddress) returns()
  8285  func (_Ownable *OwnableTransactor) SetMinterContract(opts *bind.TransactOpts, _minterAddress common.Address) (*types.Transaction, error) {
  8286  	return _Ownable.contract.Transact(opts, "setMinterContract", _minterAddress)
  8287  }
  8288  
  8289  // SetMinterContract is a paid mutator transaction binding the contract method 0x38478ae7.
  8290  //
  8291  // Solidity: function setMinterContract(address _minterAddress) returns()
  8292  func (_Ownable *OwnableSession) SetMinterContract(_minterAddress common.Address) (*types.Transaction, error) {
  8293  	return _Ownable.Contract.SetMinterContract(&_Ownable.TransactOpts, _minterAddress)
  8294  }
  8295  
  8296  // SetMinterContract is a paid mutator transaction binding the contract method 0x38478ae7.
  8297  //
  8298  // Solidity: function setMinterContract(address _minterAddress) returns()
  8299  func (_Ownable *OwnableTransactorSession) SetMinterContract(_minterAddress common.Address) (*types.Transaction, error) {
  8300  	return _Ownable.Contract.SetMinterContract(&_Ownable.TransactOpts, _minterAddress)
  8301  }
  8302  
  8303  // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
  8304  //
  8305  // Solidity: function transferOwnership(address newOwner) returns()
  8306  func (_Ownable *OwnableTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
  8307  	return _Ownable.contract.Transact(opts, "transferOwnership", newOwner)
  8308  }
  8309  
  8310  // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
  8311  //
  8312  // Solidity: function transferOwnership(address newOwner) returns()
  8313  func (_Ownable *OwnableSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
  8314  	return _Ownable.Contract.TransferOwnership(&_Ownable.TransactOpts, newOwner)
  8315  }
  8316  
  8317  // TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
  8318  //
  8319  // Solidity: function transferOwnership(address newOwner) returns()
  8320  func (_Ownable *OwnableTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
  8321  	return _Ownable.Contract.TransferOwnership(&_Ownable.TransactOpts, newOwner)
  8322  }
  8323  
  8324  // OwnableOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Ownable contract.
  8325  type OwnableOwnershipTransferredIterator struct {
  8326  	Event *OwnableOwnershipTransferred // Event containing the contract specifics and raw log
  8327  
  8328  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  8329  	event    string              // Event name to use for unpacking event data
  8330  
  8331  	logs chan types.Log        // Log channel receiving the found contract events
  8332  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  8333  	done bool                  // Whether the subscription completed delivering logs
  8334  	fail error                 // Occurred error to stop iteration
  8335  }
  8336  
  8337  // Next advances the iterator to the subsequent event, returning whether there
  8338  // are any more events found. In case of a retrieval or parsing error, false is
  8339  // returned and Error() can be queried for the exact failure.
  8340  func (it *OwnableOwnershipTransferredIterator) Next() bool {
  8341  	// If the iterator failed, stop iterating
  8342  	if it.fail != nil {
  8343  		return false
  8344  	}
  8345  	// If the iterator completed, deliver directly whatever's available
  8346  	if it.done {
  8347  		select {
  8348  		case log := <-it.logs:
  8349  			it.Event = new(OwnableOwnershipTransferred)
  8350  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8351  				it.fail = err
  8352  				return false
  8353  			}
  8354  			it.Event.Raw = log
  8355  			return true
  8356  
  8357  		default:
  8358  			return false
  8359  		}
  8360  	}
  8361  	// Iterator still in progress, wait for either a data or an error event
  8362  	select {
  8363  	case log := <-it.logs:
  8364  		it.Event = new(OwnableOwnershipTransferred)
  8365  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8366  			it.fail = err
  8367  			return false
  8368  		}
  8369  		it.Event.Raw = log
  8370  		return true
  8371  
  8372  	case err := <-it.sub.Err():
  8373  		it.done = true
  8374  		it.fail = err
  8375  		return it.Next()
  8376  	}
  8377  }
  8378  
  8379  // Error returns any retrieval or parsing error occurred during filtering.
  8380  func (it *OwnableOwnershipTransferredIterator) Error() error {
  8381  	return it.fail
  8382  }
  8383  
  8384  // Close terminates the iteration process, releasing any pending underlying
  8385  // resources.
  8386  func (it *OwnableOwnershipTransferredIterator) Close() error {
  8387  	it.sub.Unsubscribe()
  8388  	return nil
  8389  }
  8390  
  8391  // OwnableOwnershipTransferred represents a OwnershipTransferred event raised by the Ownable contract.
  8392  type OwnableOwnershipTransferred struct {
  8393  	PreviousOwner common.Address
  8394  	NewOwner      common.Address
  8395  	Raw           types.Log // Blockchain specific contextual infos
  8396  }
  8397  
  8398  // FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
  8399  //
  8400  // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
  8401  func (_Ownable *OwnableFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*OwnableOwnershipTransferredIterator, error) {
  8402  
  8403  	var previousOwnerRule []interface{}
  8404  	for _, previousOwnerItem := range previousOwner {
  8405  		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
  8406  	}
  8407  	var newOwnerRule []interface{}
  8408  	for _, newOwnerItem := range newOwner {
  8409  		newOwnerRule = append(newOwnerRule, newOwnerItem)
  8410  	}
  8411  
  8412  	logs, sub, err := _Ownable.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
  8413  	if err != nil {
  8414  		return nil, err
  8415  	}
  8416  	return &OwnableOwnershipTransferredIterator{contract: _Ownable.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
  8417  }
  8418  
  8419  // WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
  8420  //
  8421  // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
  8422  func (_Ownable *OwnableFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OwnableOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
  8423  
  8424  	var previousOwnerRule []interface{}
  8425  	for _, previousOwnerItem := range previousOwner {
  8426  		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
  8427  	}
  8428  	var newOwnerRule []interface{}
  8429  	for _, newOwnerItem := range newOwner {
  8430  		newOwnerRule = append(newOwnerRule, newOwnerItem)
  8431  	}
  8432  
  8433  	logs, sub, err := _Ownable.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
  8434  	if err != nil {
  8435  		return nil, err
  8436  	}
  8437  	return event.NewSubscription(func(quit <-chan struct{}) error {
  8438  		defer sub.Unsubscribe()
  8439  		for {
  8440  			select {
  8441  			case log := <-logs:
  8442  				// New log arrived, parse the event and forward to the user
  8443  				event := new(OwnableOwnershipTransferred)
  8444  				if err := _Ownable.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
  8445  					return err
  8446  				}
  8447  				event.Raw = log
  8448  
  8449  				select {
  8450  				case sink <- event:
  8451  				case err := <-sub.Err():
  8452  					return err
  8453  				case <-quit:
  8454  					return nil
  8455  				}
  8456  			case err := <-sub.Err():
  8457  				return err
  8458  			case <-quit:
  8459  				return nil
  8460  			}
  8461  		}
  8462  	}), nil
  8463  }
  8464  
  8465  // ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
  8466  //
  8467  // Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
  8468  func (_Ownable *OwnableFilterer) ParseOwnershipTransferred(log types.Log) (*OwnableOwnershipTransferred, error) {
  8469  	event := new(OwnableOwnershipTransferred)
  8470  	if err := _Ownable.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
  8471  		return nil, err
  8472  	}
  8473  	event.Raw = log
  8474  	return event, nil
  8475  }
  8476  
  8477  // StringsABI is the input ABI used to generate the binding from.
  8478  const StringsABI = "[]"
  8479  
  8480  // StringsBin is the compiled bytecode used for deploying new contracts.
  8481  var StringsBin = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220f9650d6733eedeedf1d546bfda2358da9d33ef88dd0c21c72e7cbdca92223d7964736f6c63430008030033"
  8482  
  8483  // DeployStrings deploys a new Ethereum contract, binding an instance of Strings to it.
  8484  func DeployStrings(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Strings, error) {
  8485  	parsed, err := abi.JSON(strings.NewReader(StringsABI))
  8486  	if err != nil {
  8487  		return common.Address{}, nil, nil, err
  8488  	}
  8489  
  8490  	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(StringsBin), backend)
  8491  	if err != nil {
  8492  		return common.Address{}, nil, nil, err
  8493  	}
  8494  	return address, tx, &Strings{StringsCaller: StringsCaller{contract: contract}, StringsTransactor: StringsTransactor{contract: contract}, StringsFilterer: StringsFilterer{contract: contract}}, nil
  8495  }
  8496  
  8497  // Strings is an auto generated Go binding around an Ethereum contract.
  8498  type Strings struct {
  8499  	StringsCaller     // Read-only binding to the contract
  8500  	StringsTransactor // Write-only binding to the contract
  8501  	StringsFilterer   // Log filterer for contract events
  8502  }
  8503  
  8504  // StringsCaller is an auto generated read-only Go binding around an Ethereum contract.
  8505  type StringsCaller struct {
  8506  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8507  }
  8508  
  8509  // StringsTransactor is an auto generated write-only Go binding around an Ethereum contract.
  8510  type StringsTransactor struct {
  8511  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8512  }
  8513  
  8514  // StringsFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  8515  type StringsFilterer struct {
  8516  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8517  }
  8518  
  8519  // StringsSession is an auto generated Go binding around an Ethereum contract,
  8520  // with pre-set call and transact options.
  8521  type StringsSession struct {
  8522  	Contract     *Strings          // Generic contract binding to set the session for
  8523  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  8524  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  8525  }
  8526  
  8527  // StringsCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  8528  // with pre-set call options.
  8529  type StringsCallerSession struct {
  8530  	Contract *StringsCaller // Generic contract caller binding to set the session for
  8531  	CallOpts bind.CallOpts  // Call options to use throughout this session
  8532  }
  8533  
  8534  // StringsTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  8535  // with pre-set transact options.
  8536  type StringsTransactorSession struct {
  8537  	Contract     *StringsTransactor // Generic contract transactor binding to set the session for
  8538  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  8539  }
  8540  
  8541  // StringsRaw is an auto generated low-level Go binding around an Ethereum contract.
  8542  type StringsRaw struct {
  8543  	Contract *Strings // Generic contract binding to access the raw methods on
  8544  }
  8545  
  8546  // StringsCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  8547  type StringsCallerRaw struct {
  8548  	Contract *StringsCaller // Generic read-only contract binding to access the raw methods on
  8549  }
  8550  
  8551  // StringsTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  8552  type StringsTransactorRaw struct {
  8553  	Contract *StringsTransactor // Generic write-only contract binding to access the raw methods on
  8554  }
  8555  
  8556  // NewStrings creates a new instance of Strings, bound to a specific deployed contract.
  8557  func NewStrings(address common.Address, backend bind.ContractBackend) (*Strings, error) {
  8558  	contract, err := bindStrings(address, backend, backend, backend)
  8559  	if err != nil {
  8560  		return nil, err
  8561  	}
  8562  	return &Strings{StringsCaller: StringsCaller{contract: contract}, StringsTransactor: StringsTransactor{contract: contract}, StringsFilterer: StringsFilterer{contract: contract}}, nil
  8563  }
  8564  
  8565  // NewStringsCaller creates a new read-only instance of Strings, bound to a specific deployed contract.
  8566  func NewStringsCaller(address common.Address, caller bind.ContractCaller) (*StringsCaller, error) {
  8567  	contract, err := bindStrings(address, caller, nil, nil)
  8568  	if err != nil {
  8569  		return nil, err
  8570  	}
  8571  	return &StringsCaller{contract: contract}, nil
  8572  }
  8573  
  8574  // NewStringsTransactor creates a new write-only instance of Strings, bound to a specific deployed contract.
  8575  func NewStringsTransactor(address common.Address, transactor bind.ContractTransactor) (*StringsTransactor, error) {
  8576  	contract, err := bindStrings(address, nil, transactor, nil)
  8577  	if err != nil {
  8578  		return nil, err
  8579  	}
  8580  	return &StringsTransactor{contract: contract}, nil
  8581  }
  8582  
  8583  // NewStringsFilterer creates a new log filterer instance of Strings, bound to a specific deployed contract.
  8584  func NewStringsFilterer(address common.Address, filterer bind.ContractFilterer) (*StringsFilterer, error) {
  8585  	contract, err := bindStrings(address, nil, nil, filterer)
  8586  	if err != nil {
  8587  		return nil, err
  8588  	}
  8589  	return &StringsFilterer{contract: contract}, nil
  8590  }
  8591  
  8592  // bindStrings binds a generic wrapper to an already deployed contract.
  8593  func bindStrings(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  8594  	parsed, err := abi.JSON(strings.NewReader(StringsABI))
  8595  	if err != nil {
  8596  		return nil, err
  8597  	}
  8598  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  8599  }
  8600  
  8601  // Call invokes the (constant) contract method with params as input values and
  8602  // sets the output to result. The result type might be a single field for simple
  8603  // returns, a slice of interfaces for anonymous returns and a struct for named
  8604  // returns.
  8605  func (_Strings *StringsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8606  	return _Strings.Contract.StringsCaller.contract.Call(opts, result, method, params...)
  8607  }
  8608  
  8609  // Transfer initiates a plain transaction to move funds to the contract, calling
  8610  // its default method if one is available.
  8611  func (_Strings *StringsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8612  	return _Strings.Contract.StringsTransactor.contract.Transfer(opts)
  8613  }
  8614  
  8615  // Transact invokes the (paid) contract method with params as input values.
  8616  func (_Strings *StringsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8617  	return _Strings.Contract.StringsTransactor.contract.Transact(opts, method, params...)
  8618  }
  8619  
  8620  // Call invokes the (constant) contract method with params as input values and
  8621  // sets the output to result. The result type might be a single field for simple
  8622  // returns, a slice of interfaces for anonymous returns and a struct for named
  8623  // returns.
  8624  func (_Strings *StringsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8625  	return _Strings.Contract.contract.Call(opts, result, method, params...)
  8626  }
  8627  
  8628  // Transfer initiates a plain transaction to move funds to the contract, calling
  8629  // its default method if one is available.
  8630  func (_Strings *StringsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8631  	return _Strings.Contract.contract.Transfer(opts)
  8632  }
  8633  
  8634  // Transact invokes the (paid) contract method with params as input values.
  8635  func (_Strings *StringsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8636  	return _Strings.Contract.contract.Transact(opts, method, params...)
  8637  }