github.com/status-im/status-go@v1.1.0/contracts/stickers/contracts.go (about)

     1  // Code generated - DO NOT EDIT.
     2  // This file is a generated binding and any manual changes will be lost.
     3  
     4  package stickers
     5  
     6  import (
     7  	"math/big"
     8  	"strings"
     9  
    10  	ethereum "github.com/ethereum/go-ethereum"
    11  	"github.com/ethereum/go-ethereum/accounts/abi"
    12  	"github.com/ethereum/go-ethereum/accounts/abi/bind"
    13  	"github.com/ethereum/go-ethereum/common"
    14  	"github.com/ethereum/go-ethereum/core/types"
    15  	"github.com/ethereum/go-ethereum/event"
    16  )
    17  
    18  // Reference imports to suppress errors if they are not otherwise used.
    19  var (
    20  	_ = big.NewInt
    21  	_ = strings.NewReader
    22  	_ = ethereum.NotFound
    23  	_ = bind.Bind
    24  	_ = common.Big1
    25  	_ = types.BloomLookup
    26  	_ = event.NewSubscription
    27  )
    28  
    29  // ApproveAndCallFallBackABI is the input ABI used to generate the binding from.
    30  const ApproveAndCallFallBackABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_token\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"receiveApproval\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
    31  
    32  // ApproveAndCallFallBackFuncSigs maps the 4-byte function signature to its string representation.
    33  var ApproveAndCallFallBackFuncSigs = map[string]string{
    34  	"8f4ffcb1": "receiveApproval(address,uint256,address,bytes)",
    35  }
    36  
    37  // ApproveAndCallFallBack is an auto generated Go binding around an Ethereum contract.
    38  type ApproveAndCallFallBack struct {
    39  	ApproveAndCallFallBackCaller     // Read-only binding to the contract
    40  	ApproveAndCallFallBackTransactor // Write-only binding to the contract
    41  	ApproveAndCallFallBackFilterer   // Log filterer for contract events
    42  }
    43  
    44  // ApproveAndCallFallBackCaller is an auto generated read-only Go binding around an Ethereum contract.
    45  type ApproveAndCallFallBackCaller struct {
    46  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    47  }
    48  
    49  // ApproveAndCallFallBackTransactor is an auto generated write-only Go binding around an Ethereum contract.
    50  type ApproveAndCallFallBackTransactor struct {
    51  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    52  }
    53  
    54  // ApproveAndCallFallBackFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
    55  type ApproveAndCallFallBackFilterer struct {
    56  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
    57  }
    58  
    59  // ApproveAndCallFallBackSession is an auto generated Go binding around an Ethereum contract,
    60  // with pre-set call and transact options.
    61  type ApproveAndCallFallBackSession struct {
    62  	Contract     *ApproveAndCallFallBack // Generic contract binding to set the session for
    63  	CallOpts     bind.CallOpts           // Call options to use throughout this session
    64  	TransactOpts bind.TransactOpts       // Transaction auth options to use throughout this session
    65  }
    66  
    67  // ApproveAndCallFallBackCallerSession is an auto generated read-only Go binding around an Ethereum contract,
    68  // with pre-set call options.
    69  type ApproveAndCallFallBackCallerSession struct {
    70  	Contract *ApproveAndCallFallBackCaller // Generic contract caller binding to set the session for
    71  	CallOpts bind.CallOpts                 // Call options to use throughout this session
    72  }
    73  
    74  // ApproveAndCallFallBackTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
    75  // with pre-set transact options.
    76  type ApproveAndCallFallBackTransactorSession struct {
    77  	Contract     *ApproveAndCallFallBackTransactor // Generic contract transactor binding to set the session for
    78  	TransactOpts bind.TransactOpts                 // Transaction auth options to use throughout this session
    79  }
    80  
    81  // ApproveAndCallFallBackRaw is an auto generated low-level Go binding around an Ethereum contract.
    82  type ApproveAndCallFallBackRaw struct {
    83  	Contract *ApproveAndCallFallBack // Generic contract binding to access the raw methods on
    84  }
    85  
    86  // ApproveAndCallFallBackCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
    87  type ApproveAndCallFallBackCallerRaw struct {
    88  	Contract *ApproveAndCallFallBackCaller // Generic read-only contract binding to access the raw methods on
    89  }
    90  
    91  // ApproveAndCallFallBackTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
    92  type ApproveAndCallFallBackTransactorRaw struct {
    93  	Contract *ApproveAndCallFallBackTransactor // Generic write-only contract binding to access the raw methods on
    94  }
    95  
    96  // NewApproveAndCallFallBack creates a new instance of ApproveAndCallFallBack, bound to a specific deployed contract.
    97  func NewApproveAndCallFallBack(address common.Address, backend bind.ContractBackend) (*ApproveAndCallFallBack, error) {
    98  	contract, err := bindApproveAndCallFallBack(address, backend, backend, backend)
    99  	if err != nil {
   100  		return nil, err
   101  	}
   102  	return &ApproveAndCallFallBack{ApproveAndCallFallBackCaller: ApproveAndCallFallBackCaller{contract: contract}, ApproveAndCallFallBackTransactor: ApproveAndCallFallBackTransactor{contract: contract}, ApproveAndCallFallBackFilterer: ApproveAndCallFallBackFilterer{contract: contract}}, nil
   103  }
   104  
   105  // NewApproveAndCallFallBackCaller creates a new read-only instance of ApproveAndCallFallBack, bound to a specific deployed contract.
   106  func NewApproveAndCallFallBackCaller(address common.Address, caller bind.ContractCaller) (*ApproveAndCallFallBackCaller, error) {
   107  	contract, err := bindApproveAndCallFallBack(address, caller, nil, nil)
   108  	if err != nil {
   109  		return nil, err
   110  	}
   111  	return &ApproveAndCallFallBackCaller{contract: contract}, nil
   112  }
   113  
   114  // NewApproveAndCallFallBackTransactor creates a new write-only instance of ApproveAndCallFallBack, bound to a specific deployed contract.
   115  func NewApproveAndCallFallBackTransactor(address common.Address, transactor bind.ContractTransactor) (*ApproveAndCallFallBackTransactor, error) {
   116  	contract, err := bindApproveAndCallFallBack(address, nil, transactor, nil)
   117  	if err != nil {
   118  		return nil, err
   119  	}
   120  	return &ApproveAndCallFallBackTransactor{contract: contract}, nil
   121  }
   122  
   123  // NewApproveAndCallFallBackFilterer creates a new log filterer instance of ApproveAndCallFallBack, bound to a specific deployed contract.
   124  func NewApproveAndCallFallBackFilterer(address common.Address, filterer bind.ContractFilterer) (*ApproveAndCallFallBackFilterer, error) {
   125  	contract, err := bindApproveAndCallFallBack(address, nil, nil, filterer)
   126  	if err != nil {
   127  		return nil, err
   128  	}
   129  	return &ApproveAndCallFallBackFilterer{contract: contract}, nil
   130  }
   131  
   132  // bindApproveAndCallFallBack binds a generic wrapper to an already deployed contract.
   133  func bindApproveAndCallFallBack(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   134  	parsed, err := abi.JSON(strings.NewReader(ApproveAndCallFallBackABI))
   135  	if err != nil {
   136  		return nil, err
   137  	}
   138  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   139  }
   140  
   141  // Call invokes the (constant) contract method with params as input values and
   142  // sets the output to result. The result type might be a single field for simple
   143  // returns, a slice of interfaces for anonymous returns and a struct for named
   144  // returns.
   145  func (_ApproveAndCallFallBack *ApproveAndCallFallBackRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   146  	return _ApproveAndCallFallBack.Contract.ApproveAndCallFallBackCaller.contract.Call(opts, result, method, params...)
   147  }
   148  
   149  // Transfer initiates a plain transaction to move funds to the contract, calling
   150  // its default method if one is available.
   151  func (_ApproveAndCallFallBack *ApproveAndCallFallBackRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   152  	return _ApproveAndCallFallBack.Contract.ApproveAndCallFallBackTransactor.contract.Transfer(opts)
   153  }
   154  
   155  // Transact invokes the (paid) contract method with params as input values.
   156  func (_ApproveAndCallFallBack *ApproveAndCallFallBackRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   157  	return _ApproveAndCallFallBack.Contract.ApproveAndCallFallBackTransactor.contract.Transact(opts, method, params...)
   158  }
   159  
   160  // Call invokes the (constant) contract method with params as input values and
   161  // sets the output to result. The result type might be a single field for simple
   162  // returns, a slice of interfaces for anonymous returns and a struct for named
   163  // returns.
   164  func (_ApproveAndCallFallBack *ApproveAndCallFallBackCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   165  	return _ApproveAndCallFallBack.Contract.contract.Call(opts, result, method, params...)
   166  }
   167  
   168  // Transfer initiates a plain transaction to move funds to the contract, calling
   169  // its default method if one is available.
   170  func (_ApproveAndCallFallBack *ApproveAndCallFallBackTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   171  	return _ApproveAndCallFallBack.Contract.contract.Transfer(opts)
   172  }
   173  
   174  // Transact invokes the (paid) contract method with params as input values.
   175  func (_ApproveAndCallFallBack *ApproveAndCallFallBackTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   176  	return _ApproveAndCallFallBack.Contract.contract.Transact(opts, method, params...)
   177  }
   178  
   179  // ReceiveApproval is a paid mutator transaction binding the contract method 0x8f4ffcb1.
   180  //
   181  // Solidity: function receiveApproval(address from, uint256 _amount, address _token, bytes _data) returns()
   182  func (_ApproveAndCallFallBack *ApproveAndCallFallBackTransactor) ReceiveApproval(opts *bind.TransactOpts, from common.Address, _amount *big.Int, _token common.Address, _data []byte) (*types.Transaction, error) {
   183  	return _ApproveAndCallFallBack.contract.Transact(opts, "receiveApproval", from, _amount, _token, _data)
   184  }
   185  
   186  // ReceiveApproval is a paid mutator transaction binding the contract method 0x8f4ffcb1.
   187  //
   188  // Solidity: function receiveApproval(address from, uint256 _amount, address _token, bytes _data) returns()
   189  func (_ApproveAndCallFallBack *ApproveAndCallFallBackSession) ReceiveApproval(from common.Address, _amount *big.Int, _token common.Address, _data []byte) (*types.Transaction, error) {
   190  	return _ApproveAndCallFallBack.Contract.ReceiveApproval(&_ApproveAndCallFallBack.TransactOpts, from, _amount, _token, _data)
   191  }
   192  
   193  // ReceiveApproval is a paid mutator transaction binding the contract method 0x8f4ffcb1.
   194  //
   195  // Solidity: function receiveApproval(address from, uint256 _amount, address _token, bytes _data) returns()
   196  func (_ApproveAndCallFallBack *ApproveAndCallFallBackTransactorSession) ReceiveApproval(from common.Address, _amount *big.Int, _token common.Address, _data []byte) (*types.Transaction, error) {
   197  	return _ApproveAndCallFallBack.Contract.ReceiveApproval(&_ApproveAndCallFallBack.TransactOpts, from, _amount, _token, _data)
   198  }
   199  
   200  // ControlledABI is the input ABI used to generate the binding from.
   201  const ControlledABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"changeController\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"NewController\",\"type\":\"event\"}]"
   202  
   203  // ControlledFuncSigs maps the 4-byte function signature to its string representation.
   204  var ControlledFuncSigs = map[string]string{
   205  	"3cebb823": "changeController(address)",
   206  	"f77c4791": "controller()",
   207  }
   208  
   209  // Controlled is an auto generated Go binding around an Ethereum contract.
   210  type Controlled struct {
   211  	ControlledCaller     // Read-only binding to the contract
   212  	ControlledTransactor // Write-only binding to the contract
   213  	ControlledFilterer   // Log filterer for contract events
   214  }
   215  
   216  // ControlledCaller is an auto generated read-only Go binding around an Ethereum contract.
   217  type ControlledCaller struct {
   218  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   219  }
   220  
   221  // ControlledTransactor is an auto generated write-only Go binding around an Ethereum contract.
   222  type ControlledTransactor struct {
   223  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   224  }
   225  
   226  // ControlledFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
   227  type ControlledFilterer struct {
   228  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   229  }
   230  
   231  // ControlledSession is an auto generated Go binding around an Ethereum contract,
   232  // with pre-set call and transact options.
   233  type ControlledSession struct {
   234  	Contract     *Controlled       // Generic contract binding to set the session for
   235  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   236  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   237  }
   238  
   239  // ControlledCallerSession is an auto generated read-only Go binding around an Ethereum contract,
   240  // with pre-set call options.
   241  type ControlledCallerSession struct {
   242  	Contract *ControlledCaller // Generic contract caller binding to set the session for
   243  	CallOpts bind.CallOpts     // Call options to use throughout this session
   244  }
   245  
   246  // ControlledTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   247  // with pre-set transact options.
   248  type ControlledTransactorSession struct {
   249  	Contract     *ControlledTransactor // Generic contract transactor binding to set the session for
   250  	TransactOpts bind.TransactOpts     // Transaction auth options to use throughout this session
   251  }
   252  
   253  // ControlledRaw is an auto generated low-level Go binding around an Ethereum contract.
   254  type ControlledRaw struct {
   255  	Contract *Controlled // Generic contract binding to access the raw methods on
   256  }
   257  
   258  // ControlledCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   259  type ControlledCallerRaw struct {
   260  	Contract *ControlledCaller // Generic read-only contract binding to access the raw methods on
   261  }
   262  
   263  // ControlledTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   264  type ControlledTransactorRaw struct {
   265  	Contract *ControlledTransactor // Generic write-only contract binding to access the raw methods on
   266  }
   267  
   268  // NewControlled creates a new instance of Controlled, bound to a specific deployed contract.
   269  func NewControlled(address common.Address, backend bind.ContractBackend) (*Controlled, error) {
   270  	contract, err := bindControlled(address, backend, backend, backend)
   271  	if err != nil {
   272  		return nil, err
   273  	}
   274  	return &Controlled{ControlledCaller: ControlledCaller{contract: contract}, ControlledTransactor: ControlledTransactor{contract: contract}, ControlledFilterer: ControlledFilterer{contract: contract}}, nil
   275  }
   276  
   277  // NewControlledCaller creates a new read-only instance of Controlled, bound to a specific deployed contract.
   278  func NewControlledCaller(address common.Address, caller bind.ContractCaller) (*ControlledCaller, error) {
   279  	contract, err := bindControlled(address, caller, nil, nil)
   280  	if err != nil {
   281  		return nil, err
   282  	}
   283  	return &ControlledCaller{contract: contract}, nil
   284  }
   285  
   286  // NewControlledTransactor creates a new write-only instance of Controlled, bound to a specific deployed contract.
   287  func NewControlledTransactor(address common.Address, transactor bind.ContractTransactor) (*ControlledTransactor, error) {
   288  	contract, err := bindControlled(address, nil, transactor, nil)
   289  	if err != nil {
   290  		return nil, err
   291  	}
   292  	return &ControlledTransactor{contract: contract}, nil
   293  }
   294  
   295  // NewControlledFilterer creates a new log filterer instance of Controlled, bound to a specific deployed contract.
   296  func NewControlledFilterer(address common.Address, filterer bind.ContractFilterer) (*ControlledFilterer, error) {
   297  	contract, err := bindControlled(address, nil, nil, filterer)
   298  	if err != nil {
   299  		return nil, err
   300  	}
   301  	return &ControlledFilterer{contract: contract}, nil
   302  }
   303  
   304  // bindControlled binds a generic wrapper to an already deployed contract.
   305  func bindControlled(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   306  	parsed, err := abi.JSON(strings.NewReader(ControlledABI))
   307  	if err != nil {
   308  		return nil, err
   309  	}
   310  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   311  }
   312  
   313  // Call invokes the (constant) contract method with params as input values and
   314  // sets the output to result. The result type might be a single field for simple
   315  // returns, a slice of interfaces for anonymous returns and a struct for named
   316  // returns.
   317  func (_Controlled *ControlledRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   318  	return _Controlled.Contract.ControlledCaller.contract.Call(opts, result, method, params...)
   319  }
   320  
   321  // Transfer initiates a plain transaction to move funds to the contract, calling
   322  // its default method if one is available.
   323  func (_Controlled *ControlledRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   324  	return _Controlled.Contract.ControlledTransactor.contract.Transfer(opts)
   325  }
   326  
   327  // Transact invokes the (paid) contract method with params as input values.
   328  func (_Controlled *ControlledRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   329  	return _Controlled.Contract.ControlledTransactor.contract.Transact(opts, method, params...)
   330  }
   331  
   332  // Call invokes the (constant) contract method with params as input values and
   333  // sets the output to result. The result type might be a single field for simple
   334  // returns, a slice of interfaces for anonymous returns and a struct for named
   335  // returns.
   336  func (_Controlled *ControlledCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   337  	return _Controlled.Contract.contract.Call(opts, result, method, params...)
   338  }
   339  
   340  // Transfer initiates a plain transaction to move funds to the contract, calling
   341  // its default method if one is available.
   342  func (_Controlled *ControlledTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   343  	return _Controlled.Contract.contract.Transfer(opts)
   344  }
   345  
   346  // Transact invokes the (paid) contract method with params as input values.
   347  func (_Controlled *ControlledTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   348  	return _Controlled.Contract.contract.Transact(opts, method, params...)
   349  }
   350  
   351  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
   352  //
   353  // Solidity: function controller() view returns(address)
   354  func (_Controlled *ControlledCaller) Controller(opts *bind.CallOpts) (common.Address, error) {
   355  	var out []interface{}
   356  	err := _Controlled.contract.Call(opts, &out, "controller")
   357  
   358  	if err != nil {
   359  		return *new(common.Address), err
   360  	}
   361  
   362  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   363  
   364  	return out0, err
   365  
   366  }
   367  
   368  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
   369  //
   370  // Solidity: function controller() view returns(address)
   371  func (_Controlled *ControlledSession) Controller() (common.Address, error) {
   372  	return _Controlled.Contract.Controller(&_Controlled.CallOpts)
   373  }
   374  
   375  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
   376  //
   377  // Solidity: function controller() view returns(address)
   378  func (_Controlled *ControlledCallerSession) Controller() (common.Address, error) {
   379  	return _Controlled.Contract.Controller(&_Controlled.CallOpts)
   380  }
   381  
   382  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
   383  //
   384  // Solidity: function changeController(address _newController) returns()
   385  func (_Controlled *ControlledTransactor) ChangeController(opts *bind.TransactOpts, _newController common.Address) (*types.Transaction, error) {
   386  	return _Controlled.contract.Transact(opts, "changeController", _newController)
   387  }
   388  
   389  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
   390  //
   391  // Solidity: function changeController(address _newController) returns()
   392  func (_Controlled *ControlledSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
   393  	return _Controlled.Contract.ChangeController(&_Controlled.TransactOpts, _newController)
   394  }
   395  
   396  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
   397  //
   398  // Solidity: function changeController(address _newController) returns()
   399  func (_Controlled *ControlledTransactorSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
   400  	return _Controlled.Contract.ChangeController(&_Controlled.TransactOpts, _newController)
   401  }
   402  
   403  // ControlledNewControllerIterator is returned from FilterNewController and is used to iterate over the raw logs and unpacked data for NewController events raised by the Controlled contract.
   404  type ControlledNewControllerIterator struct {
   405  	Event *ControlledNewController // Event containing the contract specifics and raw log
   406  
   407  	contract *bind.BoundContract // Generic contract to use for unpacking event data
   408  	event    string              // Event name to use for unpacking event data
   409  
   410  	logs chan types.Log        // Log channel receiving the found contract events
   411  	sub  ethereum.Subscription // Subscription for errors, completion and termination
   412  	done bool                  // Whether the subscription completed delivering logs
   413  	fail error                 // Occurred error to stop iteration
   414  }
   415  
   416  // Next advances the iterator to the subsequent event, returning whether there
   417  // are any more events found. In case of a retrieval or parsing error, false is
   418  // returned and Error() can be queried for the exact failure.
   419  func (it *ControlledNewControllerIterator) Next() bool {
   420  	// If the iterator failed, stop iterating
   421  	if it.fail != nil {
   422  		return false
   423  	}
   424  	// If the iterator completed, deliver directly whatever's available
   425  	if it.done {
   426  		select {
   427  		case log := <-it.logs:
   428  			it.Event = new(ControlledNewController)
   429  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   430  				it.fail = err
   431  				return false
   432  			}
   433  			it.Event.Raw = log
   434  			return true
   435  
   436  		default:
   437  			return false
   438  		}
   439  	}
   440  	// Iterator still in progress, wait for either a data or an error event
   441  	select {
   442  	case log := <-it.logs:
   443  		it.Event = new(ControlledNewController)
   444  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
   445  			it.fail = err
   446  			return false
   447  		}
   448  		it.Event.Raw = log
   449  		return true
   450  
   451  	case err := <-it.sub.Err():
   452  		it.done = true
   453  		it.fail = err
   454  		return it.Next()
   455  	}
   456  }
   457  
   458  // Error returns any retrieval or parsing error occurred during filtering.
   459  func (it *ControlledNewControllerIterator) Error() error {
   460  	return it.fail
   461  }
   462  
   463  // Close terminates the iteration process, releasing any pending underlying
   464  // resources.
   465  func (it *ControlledNewControllerIterator) Close() error {
   466  	it.sub.Unsubscribe()
   467  	return nil
   468  }
   469  
   470  // ControlledNewController represents a NewController event raised by the Controlled contract.
   471  type ControlledNewController struct {
   472  	Controller common.Address
   473  	Raw        types.Log // Blockchain specific contextual infos
   474  }
   475  
   476  // FilterNewController is a free log retrieval operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
   477  //
   478  // Solidity: event NewController(address controller)
   479  func (_Controlled *ControlledFilterer) FilterNewController(opts *bind.FilterOpts) (*ControlledNewControllerIterator, error) {
   480  
   481  	logs, sub, err := _Controlled.contract.FilterLogs(opts, "NewController")
   482  	if err != nil {
   483  		return nil, err
   484  	}
   485  	return &ControlledNewControllerIterator{contract: _Controlled.contract, event: "NewController", logs: logs, sub: sub}, nil
   486  }
   487  
   488  // WatchNewController is a free log subscription operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
   489  //
   490  // Solidity: event NewController(address controller)
   491  func (_Controlled *ControlledFilterer) WatchNewController(opts *bind.WatchOpts, sink chan<- *ControlledNewController) (event.Subscription, error) {
   492  
   493  	logs, sub, err := _Controlled.contract.WatchLogs(opts, "NewController")
   494  	if err != nil {
   495  		return nil, err
   496  	}
   497  	return event.NewSubscription(func(quit <-chan struct{}) error {
   498  		defer sub.Unsubscribe()
   499  		for {
   500  			select {
   501  			case log := <-logs:
   502  				// New log arrived, parse the event and forward to the user
   503  				event := new(ControlledNewController)
   504  				if err := _Controlled.contract.UnpackLog(event, "NewController", log); err != nil {
   505  					return err
   506  				}
   507  				event.Raw = log
   508  
   509  				select {
   510  				case sink <- event:
   511  				case err := <-sub.Err():
   512  					return err
   513  				case <-quit:
   514  					return nil
   515  				}
   516  			case err := <-sub.Err():
   517  				return err
   518  			case <-quit:
   519  				return nil
   520  			}
   521  		}
   522  	}), nil
   523  }
   524  
   525  // ParseNewController is a log parse operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
   526  //
   527  // Solidity: event NewController(address controller)
   528  func (_Controlled *ControlledFilterer) ParseNewController(log types.Log) (*ControlledNewController, error) {
   529  	event := new(ControlledNewController)
   530  	if err := _Controlled.contract.UnpackLog(event, "NewController", log); err != nil {
   531  		return nil, err
   532  	}
   533  	event.Raw = log
   534  	return event, nil
   535  }
   536  
   537  // ERC165ABI is the input ABI used to generate the binding from.
   538  const ERC165ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]"
   539  
   540  // ERC165FuncSigs maps the 4-byte function signature to its string representation.
   541  var ERC165FuncSigs = map[string]string{
   542  	"01ffc9a7": "supportsInterface(bytes4)",
   543  }
   544  
   545  // ERC165 is an auto generated Go binding around an Ethereum contract.
   546  type ERC165 struct {
   547  	ERC165Caller     // Read-only binding to the contract
   548  	ERC165Transactor // Write-only binding to the contract
   549  	ERC165Filterer   // Log filterer for contract events
   550  }
   551  
   552  // ERC165Caller is an auto generated read-only Go binding around an Ethereum contract.
   553  type ERC165Caller struct {
   554  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   555  }
   556  
   557  // ERC165Transactor is an auto generated write-only Go binding around an Ethereum contract.
   558  type ERC165Transactor struct {
   559  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   560  }
   561  
   562  // ERC165Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
   563  type ERC165Filterer struct {
   564  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   565  }
   566  
   567  // ERC165Session is an auto generated Go binding around an Ethereum contract,
   568  // with pre-set call and transact options.
   569  type ERC165Session struct {
   570  	Contract     *ERC165           // Generic contract binding to set the session for
   571  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   572  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   573  }
   574  
   575  // ERC165CallerSession is an auto generated read-only Go binding around an Ethereum contract,
   576  // with pre-set call options.
   577  type ERC165CallerSession struct {
   578  	Contract *ERC165Caller // Generic contract caller binding to set the session for
   579  	CallOpts bind.CallOpts // Call options to use throughout this session
   580  }
   581  
   582  // ERC165TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   583  // with pre-set transact options.
   584  type ERC165TransactorSession struct {
   585  	Contract     *ERC165Transactor // Generic contract transactor binding to set the session for
   586  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   587  }
   588  
   589  // ERC165Raw is an auto generated low-level Go binding around an Ethereum contract.
   590  type ERC165Raw struct {
   591  	Contract *ERC165 // Generic contract binding to access the raw methods on
   592  }
   593  
   594  // ERC165CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   595  type ERC165CallerRaw struct {
   596  	Contract *ERC165Caller // Generic read-only contract binding to access the raw methods on
   597  }
   598  
   599  // ERC165TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   600  type ERC165TransactorRaw struct {
   601  	Contract *ERC165Transactor // Generic write-only contract binding to access the raw methods on
   602  }
   603  
   604  // NewERC165 creates a new instance of ERC165, bound to a specific deployed contract.
   605  func NewERC165(address common.Address, backend bind.ContractBackend) (*ERC165, error) {
   606  	contract, err := bindERC165(address, backend, backend, backend)
   607  	if err != nil {
   608  		return nil, err
   609  	}
   610  	return &ERC165{ERC165Caller: ERC165Caller{contract: contract}, ERC165Transactor: ERC165Transactor{contract: contract}, ERC165Filterer: ERC165Filterer{contract: contract}}, nil
   611  }
   612  
   613  // NewERC165Caller creates a new read-only instance of ERC165, bound to a specific deployed contract.
   614  func NewERC165Caller(address common.Address, caller bind.ContractCaller) (*ERC165Caller, error) {
   615  	contract, err := bindERC165(address, caller, nil, nil)
   616  	if err != nil {
   617  		return nil, err
   618  	}
   619  	return &ERC165Caller{contract: contract}, nil
   620  }
   621  
   622  // NewERC165Transactor creates a new write-only instance of ERC165, bound to a specific deployed contract.
   623  func NewERC165Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC165Transactor, error) {
   624  	contract, err := bindERC165(address, nil, transactor, nil)
   625  	if err != nil {
   626  		return nil, err
   627  	}
   628  	return &ERC165Transactor{contract: contract}, nil
   629  }
   630  
   631  // NewERC165Filterer creates a new log filterer instance of ERC165, bound to a specific deployed contract.
   632  func NewERC165Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC165Filterer, error) {
   633  	contract, err := bindERC165(address, nil, nil, filterer)
   634  	if err != nil {
   635  		return nil, err
   636  	}
   637  	return &ERC165Filterer{contract: contract}, nil
   638  }
   639  
   640  // bindERC165 binds a generic wrapper to an already deployed contract.
   641  func bindERC165(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   642  	parsed, err := abi.JSON(strings.NewReader(ERC165ABI))
   643  	if err != nil {
   644  		return nil, err
   645  	}
   646  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   647  }
   648  
   649  // Call invokes the (constant) contract method with params as input values and
   650  // sets the output to result. The result type might be a single field for simple
   651  // returns, a slice of interfaces for anonymous returns and a struct for named
   652  // returns.
   653  func (_ERC165 *ERC165Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   654  	return _ERC165.Contract.ERC165Caller.contract.Call(opts, result, method, params...)
   655  }
   656  
   657  // Transfer initiates a plain transaction to move funds to the contract, calling
   658  // its default method if one is available.
   659  func (_ERC165 *ERC165Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   660  	return _ERC165.Contract.ERC165Transactor.contract.Transfer(opts)
   661  }
   662  
   663  // Transact invokes the (paid) contract method with params as input values.
   664  func (_ERC165 *ERC165Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   665  	return _ERC165.Contract.ERC165Transactor.contract.Transact(opts, method, params...)
   666  }
   667  
   668  // Call invokes the (constant) contract method with params as input values and
   669  // sets the output to result. The result type might be a single field for simple
   670  // returns, a slice of interfaces for anonymous returns and a struct for named
   671  // returns.
   672  func (_ERC165 *ERC165CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   673  	return _ERC165.Contract.contract.Call(opts, result, method, params...)
   674  }
   675  
   676  // Transfer initiates a plain transaction to move funds to the contract, calling
   677  // its default method if one is available.
   678  func (_ERC165 *ERC165TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   679  	return _ERC165.Contract.contract.Transfer(opts)
   680  }
   681  
   682  // Transact invokes the (paid) contract method with params as input values.
   683  func (_ERC165 *ERC165TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   684  	return _ERC165.Contract.contract.Transact(opts, method, params...)
   685  }
   686  
   687  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   688  //
   689  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   690  func (_ERC165 *ERC165Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
   691  	var out []interface{}
   692  	err := _ERC165.contract.Call(opts, &out, "supportsInterface", interfaceId)
   693  
   694  	if err != nil {
   695  		return *new(bool), err
   696  	}
   697  
   698  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
   699  
   700  	return out0, err
   701  
   702  }
   703  
   704  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   705  //
   706  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   707  func (_ERC165 *ERC165Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
   708  	return _ERC165.Contract.SupportsInterface(&_ERC165.CallOpts, interfaceId)
   709  }
   710  
   711  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
   712  //
   713  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
   714  func (_ERC165 *ERC165CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
   715  	return _ERC165.Contract.SupportsInterface(&_ERC165.CallOpts, interfaceId)
   716  }
   717  
   718  // ERC721ABI is the input ABI used to generate the binding from.
   719  const ERC721ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
   720  
   721  // ERC721FuncSigs maps the 4-byte function signature to its string representation.
   722  var ERC721FuncSigs = map[string]string{
   723  	"095ea7b3": "approve(address,uint256)",
   724  	"70a08231": "balanceOf(address)",
   725  	"081812fc": "getApproved(uint256)",
   726  	"e985e9c5": "isApprovedForAll(address,address)",
   727  	"6352211e": "ownerOf(uint256)",
   728  	"42842e0e": "safeTransferFrom(address,address,uint256)",
   729  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
   730  	"a22cb465": "setApprovalForAll(address,bool)",
   731  	"01ffc9a7": "supportsInterface(bytes4)",
   732  	"23b872dd": "transferFrom(address,address,uint256)",
   733  }
   734  
   735  // ERC721 is an auto generated Go binding around an Ethereum contract.
   736  type ERC721 struct {
   737  	ERC721Caller     // Read-only binding to the contract
   738  	ERC721Transactor // Write-only binding to the contract
   739  	ERC721Filterer   // Log filterer for contract events
   740  }
   741  
   742  // ERC721Caller is an auto generated read-only Go binding around an Ethereum contract.
   743  type ERC721Caller struct {
   744  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   745  }
   746  
   747  // ERC721Transactor is an auto generated write-only Go binding around an Ethereum contract.
   748  type ERC721Transactor struct {
   749  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   750  }
   751  
   752  // ERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
   753  type ERC721Filterer struct {
   754  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
   755  }
   756  
   757  // ERC721Session is an auto generated Go binding around an Ethereum contract,
   758  // with pre-set call and transact options.
   759  type ERC721Session struct {
   760  	Contract     *ERC721           // Generic contract binding to set the session for
   761  	CallOpts     bind.CallOpts     // Call options to use throughout this session
   762  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   763  }
   764  
   765  // ERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract,
   766  // with pre-set call options.
   767  type ERC721CallerSession struct {
   768  	Contract *ERC721Caller // Generic contract caller binding to set the session for
   769  	CallOpts bind.CallOpts // Call options to use throughout this session
   770  }
   771  
   772  // ERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
   773  // with pre-set transact options.
   774  type ERC721TransactorSession struct {
   775  	Contract     *ERC721Transactor // Generic contract transactor binding to set the session for
   776  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
   777  }
   778  
   779  // ERC721Raw is an auto generated low-level Go binding around an Ethereum contract.
   780  type ERC721Raw struct {
   781  	Contract *ERC721 // Generic contract binding to access the raw methods on
   782  }
   783  
   784  // ERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
   785  type ERC721CallerRaw struct {
   786  	Contract *ERC721Caller // Generic read-only contract binding to access the raw methods on
   787  }
   788  
   789  // ERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
   790  type ERC721TransactorRaw struct {
   791  	Contract *ERC721Transactor // Generic write-only contract binding to access the raw methods on
   792  }
   793  
   794  // NewERC721 creates a new instance of ERC721, bound to a specific deployed contract.
   795  func NewERC721(address common.Address, backend bind.ContractBackend) (*ERC721, error) {
   796  	contract, err := bindERC721(address, backend, backend, backend)
   797  	if err != nil {
   798  		return nil, err
   799  	}
   800  	return &ERC721{ERC721Caller: ERC721Caller{contract: contract}, ERC721Transactor: ERC721Transactor{contract: contract}, ERC721Filterer: ERC721Filterer{contract: contract}}, nil
   801  }
   802  
   803  // NewERC721Caller creates a new read-only instance of ERC721, bound to a specific deployed contract.
   804  func NewERC721Caller(address common.Address, caller bind.ContractCaller) (*ERC721Caller, error) {
   805  	contract, err := bindERC721(address, caller, nil, nil)
   806  	if err != nil {
   807  		return nil, err
   808  	}
   809  	return &ERC721Caller{contract: contract}, nil
   810  }
   811  
   812  // NewERC721Transactor creates a new write-only instance of ERC721, bound to a specific deployed contract.
   813  func NewERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*ERC721Transactor, error) {
   814  	contract, err := bindERC721(address, nil, transactor, nil)
   815  	if err != nil {
   816  		return nil, err
   817  	}
   818  	return &ERC721Transactor{contract: contract}, nil
   819  }
   820  
   821  // NewERC721Filterer creates a new log filterer instance of ERC721, bound to a specific deployed contract.
   822  func NewERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*ERC721Filterer, error) {
   823  	contract, err := bindERC721(address, nil, nil, filterer)
   824  	if err != nil {
   825  		return nil, err
   826  	}
   827  	return &ERC721Filterer{contract: contract}, nil
   828  }
   829  
   830  // bindERC721 binds a generic wrapper to an already deployed contract.
   831  func bindERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
   832  	parsed, err := abi.JSON(strings.NewReader(ERC721ABI))
   833  	if err != nil {
   834  		return nil, err
   835  	}
   836  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
   837  }
   838  
   839  // Call invokes the (constant) contract method with params as input values and
   840  // sets the output to result. The result type might be a single field for simple
   841  // returns, a slice of interfaces for anonymous returns and a struct for named
   842  // returns.
   843  func (_ERC721 *ERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   844  	return _ERC721.Contract.ERC721Caller.contract.Call(opts, result, method, params...)
   845  }
   846  
   847  // Transfer initiates a plain transaction to move funds to the contract, calling
   848  // its default method if one is available.
   849  func (_ERC721 *ERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   850  	return _ERC721.Contract.ERC721Transactor.contract.Transfer(opts)
   851  }
   852  
   853  // Transact invokes the (paid) contract method with params as input values.
   854  func (_ERC721 *ERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   855  	return _ERC721.Contract.ERC721Transactor.contract.Transact(opts, method, params...)
   856  }
   857  
   858  // Call invokes the (constant) contract method with params as input values and
   859  // sets the output to result. The result type might be a single field for simple
   860  // returns, a slice of interfaces for anonymous returns and a struct for named
   861  // returns.
   862  func (_ERC721 *ERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
   863  	return _ERC721.Contract.contract.Call(opts, result, method, params...)
   864  }
   865  
   866  // Transfer initiates a plain transaction to move funds to the contract, calling
   867  // its default method if one is available.
   868  func (_ERC721 *ERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
   869  	return _ERC721.Contract.contract.Transfer(opts)
   870  }
   871  
   872  // Transact invokes the (paid) contract method with params as input values.
   873  func (_ERC721 *ERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
   874  	return _ERC721.Contract.contract.Transact(opts, method, params...)
   875  }
   876  
   877  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   878  //
   879  // Solidity: function balanceOf(address owner) view returns(uint256)
   880  func (_ERC721 *ERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
   881  	var out []interface{}
   882  	err := _ERC721.contract.Call(opts, &out, "balanceOf", owner)
   883  
   884  	if err != nil {
   885  		return *new(*big.Int), err
   886  	}
   887  
   888  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
   889  
   890  	return out0, err
   891  
   892  }
   893  
   894  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   895  //
   896  // Solidity: function balanceOf(address owner) view returns(uint256)
   897  func (_ERC721 *ERC721Session) BalanceOf(owner common.Address) (*big.Int, error) {
   898  	return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner)
   899  }
   900  
   901  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
   902  //
   903  // Solidity: function balanceOf(address owner) view returns(uint256)
   904  func (_ERC721 *ERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
   905  	return _ERC721.Contract.BalanceOf(&_ERC721.CallOpts, owner)
   906  }
   907  
   908  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
   909  //
   910  // Solidity: function getApproved(uint256 tokenId) view returns(address)
   911  func (_ERC721 *ERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
   912  	var out []interface{}
   913  	err := _ERC721.contract.Call(opts, &out, "getApproved", tokenId)
   914  
   915  	if err != nil {
   916  		return *new(common.Address), err
   917  	}
   918  
   919  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   920  
   921  	return out0, err
   922  
   923  }
   924  
   925  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
   926  //
   927  // Solidity: function getApproved(uint256 tokenId) view returns(address)
   928  func (_ERC721 *ERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) {
   929  	return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId)
   930  }
   931  
   932  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
   933  //
   934  // Solidity: function getApproved(uint256 tokenId) view returns(address)
   935  func (_ERC721 *ERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
   936  	return _ERC721.Contract.GetApproved(&_ERC721.CallOpts, tokenId)
   937  }
   938  
   939  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
   940  //
   941  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
   942  func (_ERC721 *ERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
   943  	var out []interface{}
   944  	err := _ERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
   945  
   946  	if err != nil {
   947  		return *new(bool), err
   948  	}
   949  
   950  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
   951  
   952  	return out0, err
   953  
   954  }
   955  
   956  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
   957  //
   958  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
   959  func (_ERC721 *ERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
   960  	return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator)
   961  }
   962  
   963  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
   964  //
   965  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
   966  func (_ERC721 *ERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
   967  	return _ERC721.Contract.IsApprovedForAll(&_ERC721.CallOpts, owner, operator)
   968  }
   969  
   970  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
   971  //
   972  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
   973  func (_ERC721 *ERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
   974  	var out []interface{}
   975  	err := _ERC721.contract.Call(opts, &out, "ownerOf", tokenId)
   976  
   977  	if err != nil {
   978  		return *new(common.Address), err
   979  	}
   980  
   981  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
   982  
   983  	return out0, err
   984  
   985  }
   986  
   987  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
   988  //
   989  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
   990  func (_ERC721 *ERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) {
   991  	return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId)
   992  }
   993  
   994  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
   995  //
   996  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
   997  func (_ERC721 *ERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
   998  	return _ERC721.Contract.OwnerOf(&_ERC721.CallOpts, tokenId)
   999  }
  1000  
  1001  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  1002  //
  1003  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  1004  func (_ERC721 *ERC721Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  1005  	var out []interface{}
  1006  	err := _ERC721.contract.Call(opts, &out, "supportsInterface", interfaceId)
  1007  
  1008  	if err != nil {
  1009  		return *new(bool), err
  1010  	}
  1011  
  1012  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  1013  
  1014  	return out0, err
  1015  
  1016  }
  1017  
  1018  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  1019  //
  1020  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  1021  func (_ERC721 *ERC721Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
  1022  	return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId)
  1023  }
  1024  
  1025  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  1026  //
  1027  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  1028  func (_ERC721 *ERC721CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  1029  	return _ERC721.Contract.SupportsInterface(&_ERC721.CallOpts, interfaceId)
  1030  }
  1031  
  1032  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1033  //
  1034  // Solidity: function approve(address to, uint256 tokenId) returns()
  1035  func (_ERC721 *ERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1036  	return _ERC721.contract.Transact(opts, "approve", to, tokenId)
  1037  }
  1038  
  1039  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1040  //
  1041  // Solidity: function approve(address to, uint256 tokenId) returns()
  1042  func (_ERC721 *ERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1043  	return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId)
  1044  }
  1045  
  1046  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  1047  //
  1048  // Solidity: function approve(address to, uint256 tokenId) returns()
  1049  func (_ERC721 *ERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1050  	return _ERC721.Contract.Approve(&_ERC721.TransactOpts, to, tokenId)
  1051  }
  1052  
  1053  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  1054  //
  1055  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  1056  func (_ERC721 *ERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1057  	return _ERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  1058  }
  1059  
  1060  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  1061  //
  1062  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  1063  func (_ERC721 *ERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1064  	return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1065  }
  1066  
  1067  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  1068  //
  1069  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  1070  func (_ERC721 *ERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1071  	return _ERC721.Contract.SafeTransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1072  }
  1073  
  1074  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  1075  //
  1076  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  1077  func (_ERC721 *ERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  1078  	return _ERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  1079  }
  1080  
  1081  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  1082  //
  1083  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  1084  func (_ERC721 *ERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  1085  	return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, _data)
  1086  }
  1087  
  1088  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  1089  //
  1090  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  1091  func (_ERC721 *ERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  1092  	return _ERC721.Contract.SafeTransferFrom0(&_ERC721.TransactOpts, from, to, tokenId, _data)
  1093  }
  1094  
  1095  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  1096  //
  1097  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  1098  func (_ERC721 *ERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, to common.Address, approved bool) (*types.Transaction, error) {
  1099  	return _ERC721.contract.Transact(opts, "setApprovalForAll", to, approved)
  1100  }
  1101  
  1102  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  1103  //
  1104  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  1105  func (_ERC721 *ERC721Session) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  1106  	return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, to, approved)
  1107  }
  1108  
  1109  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  1110  //
  1111  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  1112  func (_ERC721 *ERC721TransactorSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  1113  	return _ERC721.Contract.SetApprovalForAll(&_ERC721.TransactOpts, to, approved)
  1114  }
  1115  
  1116  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1117  //
  1118  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  1119  func (_ERC721 *ERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1120  	return _ERC721.contract.Transact(opts, "transferFrom", from, to, tokenId)
  1121  }
  1122  
  1123  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1124  //
  1125  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  1126  func (_ERC721 *ERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1127  	return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1128  }
  1129  
  1130  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  1131  //
  1132  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  1133  func (_ERC721 *ERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  1134  	return _ERC721.Contract.TransferFrom(&_ERC721.TransactOpts, from, to, tokenId)
  1135  }
  1136  
  1137  // 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.
  1138  type ERC721ApprovalIterator struct {
  1139  	Event *ERC721Approval // Event containing the contract specifics and raw log
  1140  
  1141  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1142  	event    string              // Event name to use for unpacking event data
  1143  
  1144  	logs chan types.Log        // Log channel receiving the found contract events
  1145  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1146  	done bool                  // Whether the subscription completed delivering logs
  1147  	fail error                 // Occurred error to stop iteration
  1148  }
  1149  
  1150  // Next advances the iterator to the subsequent event, returning whether there
  1151  // are any more events found. In case of a retrieval or parsing error, false is
  1152  // returned and Error() can be queried for the exact failure.
  1153  func (it *ERC721ApprovalIterator) Next() bool {
  1154  	// If the iterator failed, stop iterating
  1155  	if it.fail != nil {
  1156  		return false
  1157  	}
  1158  	// If the iterator completed, deliver directly whatever's available
  1159  	if it.done {
  1160  		select {
  1161  		case log := <-it.logs:
  1162  			it.Event = new(ERC721Approval)
  1163  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1164  				it.fail = err
  1165  				return false
  1166  			}
  1167  			it.Event.Raw = log
  1168  			return true
  1169  
  1170  		default:
  1171  			return false
  1172  		}
  1173  	}
  1174  	// Iterator still in progress, wait for either a data or an error event
  1175  	select {
  1176  	case log := <-it.logs:
  1177  		it.Event = new(ERC721Approval)
  1178  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1179  			it.fail = err
  1180  			return false
  1181  		}
  1182  		it.Event.Raw = log
  1183  		return true
  1184  
  1185  	case err := <-it.sub.Err():
  1186  		it.done = true
  1187  		it.fail = err
  1188  		return it.Next()
  1189  	}
  1190  }
  1191  
  1192  // Error returns any retrieval or parsing error occurred during filtering.
  1193  func (it *ERC721ApprovalIterator) Error() error {
  1194  	return it.fail
  1195  }
  1196  
  1197  // Close terminates the iteration process, releasing any pending underlying
  1198  // resources.
  1199  func (it *ERC721ApprovalIterator) Close() error {
  1200  	it.sub.Unsubscribe()
  1201  	return nil
  1202  }
  1203  
  1204  // ERC721Approval represents a Approval event raised by the ERC721 contract.
  1205  type ERC721Approval struct {
  1206  	Owner    common.Address
  1207  	Approved common.Address
  1208  	TokenId  *big.Int
  1209  	Raw      types.Log // Blockchain specific contextual infos
  1210  }
  1211  
  1212  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1213  //
  1214  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  1215  func (_ERC721 *ERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721ApprovalIterator, error) {
  1216  
  1217  	var ownerRule []interface{}
  1218  	for _, ownerItem := range owner {
  1219  		ownerRule = append(ownerRule, ownerItem)
  1220  	}
  1221  	var approvedRule []interface{}
  1222  	for _, approvedItem := range approved {
  1223  		approvedRule = append(approvedRule, approvedItem)
  1224  	}
  1225  	var tokenIdRule []interface{}
  1226  	for _, tokenIdItem := range tokenId {
  1227  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1228  	}
  1229  
  1230  	logs, sub, err := _ERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  1231  	if err != nil {
  1232  		return nil, err
  1233  	}
  1234  	return &ERC721ApprovalIterator{contract: _ERC721.contract, event: "Approval", logs: logs, sub: sub}, nil
  1235  }
  1236  
  1237  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1238  //
  1239  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  1240  func (_ERC721 *ERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  1241  
  1242  	var ownerRule []interface{}
  1243  	for _, ownerItem := range owner {
  1244  		ownerRule = append(ownerRule, ownerItem)
  1245  	}
  1246  	var approvedRule []interface{}
  1247  	for _, approvedItem := range approved {
  1248  		approvedRule = append(approvedRule, approvedItem)
  1249  	}
  1250  	var tokenIdRule []interface{}
  1251  	for _, tokenIdItem := range tokenId {
  1252  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1253  	}
  1254  
  1255  	logs, sub, err := _ERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  1256  	if err != nil {
  1257  		return nil, err
  1258  	}
  1259  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1260  		defer sub.Unsubscribe()
  1261  		for {
  1262  			select {
  1263  			case log := <-logs:
  1264  				// New log arrived, parse the event and forward to the user
  1265  				event := new(ERC721Approval)
  1266  				if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  1267  					return err
  1268  				}
  1269  				event.Raw = log
  1270  
  1271  				select {
  1272  				case sink <- event:
  1273  				case err := <-sub.Err():
  1274  					return err
  1275  				case <-quit:
  1276  					return nil
  1277  				}
  1278  			case err := <-sub.Err():
  1279  				return err
  1280  			case <-quit:
  1281  				return nil
  1282  			}
  1283  		}
  1284  	}), nil
  1285  }
  1286  
  1287  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  1288  //
  1289  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  1290  func (_ERC721 *ERC721Filterer) ParseApproval(log types.Log) (*ERC721Approval, error) {
  1291  	event := new(ERC721Approval)
  1292  	if err := _ERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  1293  		return nil, err
  1294  	}
  1295  	event.Raw = log
  1296  	return event, nil
  1297  }
  1298  
  1299  // 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.
  1300  type ERC721ApprovalForAllIterator struct {
  1301  	Event *ERC721ApprovalForAll // Event containing the contract specifics and raw log
  1302  
  1303  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1304  	event    string              // Event name to use for unpacking event data
  1305  
  1306  	logs chan types.Log        // Log channel receiving the found contract events
  1307  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1308  	done bool                  // Whether the subscription completed delivering logs
  1309  	fail error                 // Occurred error to stop iteration
  1310  }
  1311  
  1312  // Next advances the iterator to the subsequent event, returning whether there
  1313  // are any more events found. In case of a retrieval or parsing error, false is
  1314  // returned and Error() can be queried for the exact failure.
  1315  func (it *ERC721ApprovalForAllIterator) Next() bool {
  1316  	// If the iterator failed, stop iterating
  1317  	if it.fail != nil {
  1318  		return false
  1319  	}
  1320  	// If the iterator completed, deliver directly whatever's available
  1321  	if it.done {
  1322  		select {
  1323  		case log := <-it.logs:
  1324  			it.Event = new(ERC721ApprovalForAll)
  1325  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1326  				it.fail = err
  1327  				return false
  1328  			}
  1329  			it.Event.Raw = log
  1330  			return true
  1331  
  1332  		default:
  1333  			return false
  1334  		}
  1335  	}
  1336  	// Iterator still in progress, wait for either a data or an error event
  1337  	select {
  1338  	case log := <-it.logs:
  1339  		it.Event = new(ERC721ApprovalForAll)
  1340  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1341  			it.fail = err
  1342  			return false
  1343  		}
  1344  		it.Event.Raw = log
  1345  		return true
  1346  
  1347  	case err := <-it.sub.Err():
  1348  		it.done = true
  1349  		it.fail = err
  1350  		return it.Next()
  1351  	}
  1352  }
  1353  
  1354  // Error returns any retrieval or parsing error occurred during filtering.
  1355  func (it *ERC721ApprovalForAllIterator) Error() error {
  1356  	return it.fail
  1357  }
  1358  
  1359  // Close terminates the iteration process, releasing any pending underlying
  1360  // resources.
  1361  func (it *ERC721ApprovalForAllIterator) Close() error {
  1362  	it.sub.Unsubscribe()
  1363  	return nil
  1364  }
  1365  
  1366  // ERC721ApprovalForAll represents a ApprovalForAll event raised by the ERC721 contract.
  1367  type ERC721ApprovalForAll struct {
  1368  	Owner    common.Address
  1369  	Operator common.Address
  1370  	Approved bool
  1371  	Raw      types.Log // Blockchain specific contextual infos
  1372  }
  1373  
  1374  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  1375  //
  1376  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  1377  func (_ERC721 *ERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721ApprovalForAllIterator, error) {
  1378  
  1379  	var ownerRule []interface{}
  1380  	for _, ownerItem := range owner {
  1381  		ownerRule = append(ownerRule, ownerItem)
  1382  	}
  1383  	var operatorRule []interface{}
  1384  	for _, operatorItem := range operator {
  1385  		operatorRule = append(operatorRule, operatorItem)
  1386  	}
  1387  
  1388  	logs, sub, err := _ERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  1389  	if err != nil {
  1390  		return nil, err
  1391  	}
  1392  	return &ERC721ApprovalForAllIterator{contract: _ERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  1393  }
  1394  
  1395  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  1396  //
  1397  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  1398  func (_ERC721 *ERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  1399  
  1400  	var ownerRule []interface{}
  1401  	for _, ownerItem := range owner {
  1402  		ownerRule = append(ownerRule, ownerItem)
  1403  	}
  1404  	var operatorRule []interface{}
  1405  	for _, operatorItem := range operator {
  1406  		operatorRule = append(operatorRule, operatorItem)
  1407  	}
  1408  
  1409  	logs, sub, err := _ERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  1410  	if err != nil {
  1411  		return nil, err
  1412  	}
  1413  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1414  		defer sub.Unsubscribe()
  1415  		for {
  1416  			select {
  1417  			case log := <-logs:
  1418  				// New log arrived, parse the event and forward to the user
  1419  				event := new(ERC721ApprovalForAll)
  1420  				if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  1421  					return err
  1422  				}
  1423  				event.Raw = log
  1424  
  1425  				select {
  1426  				case sink <- event:
  1427  				case err := <-sub.Err():
  1428  					return err
  1429  				case <-quit:
  1430  					return nil
  1431  				}
  1432  			case err := <-sub.Err():
  1433  				return err
  1434  			case <-quit:
  1435  				return nil
  1436  			}
  1437  		}
  1438  	}), nil
  1439  }
  1440  
  1441  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  1442  //
  1443  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  1444  func (_ERC721 *ERC721Filterer) ParseApprovalForAll(log types.Log) (*ERC721ApprovalForAll, error) {
  1445  	event := new(ERC721ApprovalForAll)
  1446  	if err := _ERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  1447  		return nil, err
  1448  	}
  1449  	event.Raw = log
  1450  	return event, nil
  1451  }
  1452  
  1453  // 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.
  1454  type ERC721TransferIterator struct {
  1455  	Event *ERC721Transfer // Event containing the contract specifics and raw log
  1456  
  1457  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  1458  	event    string              // Event name to use for unpacking event data
  1459  
  1460  	logs chan types.Log        // Log channel receiving the found contract events
  1461  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  1462  	done bool                  // Whether the subscription completed delivering logs
  1463  	fail error                 // Occurred error to stop iteration
  1464  }
  1465  
  1466  // Next advances the iterator to the subsequent event, returning whether there
  1467  // are any more events found. In case of a retrieval or parsing error, false is
  1468  // returned and Error() can be queried for the exact failure.
  1469  func (it *ERC721TransferIterator) Next() bool {
  1470  	// If the iterator failed, stop iterating
  1471  	if it.fail != nil {
  1472  		return false
  1473  	}
  1474  	// If the iterator completed, deliver directly whatever's available
  1475  	if it.done {
  1476  		select {
  1477  		case log := <-it.logs:
  1478  			it.Event = new(ERC721Transfer)
  1479  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1480  				it.fail = err
  1481  				return false
  1482  			}
  1483  			it.Event.Raw = log
  1484  			return true
  1485  
  1486  		default:
  1487  			return false
  1488  		}
  1489  	}
  1490  	// Iterator still in progress, wait for either a data or an error event
  1491  	select {
  1492  	case log := <-it.logs:
  1493  		it.Event = new(ERC721Transfer)
  1494  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  1495  			it.fail = err
  1496  			return false
  1497  		}
  1498  		it.Event.Raw = log
  1499  		return true
  1500  
  1501  	case err := <-it.sub.Err():
  1502  		it.done = true
  1503  		it.fail = err
  1504  		return it.Next()
  1505  	}
  1506  }
  1507  
  1508  // Error returns any retrieval or parsing error occurred during filtering.
  1509  func (it *ERC721TransferIterator) Error() error {
  1510  	return it.fail
  1511  }
  1512  
  1513  // Close terminates the iteration process, releasing any pending underlying
  1514  // resources.
  1515  func (it *ERC721TransferIterator) Close() error {
  1516  	it.sub.Unsubscribe()
  1517  	return nil
  1518  }
  1519  
  1520  // ERC721Transfer represents a Transfer event raised by the ERC721 contract.
  1521  type ERC721Transfer struct {
  1522  	From    common.Address
  1523  	To      common.Address
  1524  	TokenId *big.Int
  1525  	Raw     types.Log // Blockchain specific contextual infos
  1526  }
  1527  
  1528  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1529  //
  1530  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  1531  func (_ERC721 *ERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721TransferIterator, error) {
  1532  
  1533  	var fromRule []interface{}
  1534  	for _, fromItem := range from {
  1535  		fromRule = append(fromRule, fromItem)
  1536  	}
  1537  	var toRule []interface{}
  1538  	for _, toItem := range to {
  1539  		toRule = append(toRule, toItem)
  1540  	}
  1541  	var tokenIdRule []interface{}
  1542  	for _, tokenIdItem := range tokenId {
  1543  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1544  	}
  1545  
  1546  	logs, sub, err := _ERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  1547  	if err != nil {
  1548  		return nil, err
  1549  	}
  1550  	return &ERC721TransferIterator{contract: _ERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil
  1551  }
  1552  
  1553  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1554  //
  1555  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  1556  func (_ERC721 *ERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  1557  
  1558  	var fromRule []interface{}
  1559  	for _, fromItem := range from {
  1560  		fromRule = append(fromRule, fromItem)
  1561  	}
  1562  	var toRule []interface{}
  1563  	for _, toItem := range to {
  1564  		toRule = append(toRule, toItem)
  1565  	}
  1566  	var tokenIdRule []interface{}
  1567  	for _, tokenIdItem := range tokenId {
  1568  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  1569  	}
  1570  
  1571  	logs, sub, err := _ERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  1572  	if err != nil {
  1573  		return nil, err
  1574  	}
  1575  	return event.NewSubscription(func(quit <-chan struct{}) error {
  1576  		defer sub.Unsubscribe()
  1577  		for {
  1578  			select {
  1579  			case log := <-logs:
  1580  				// New log arrived, parse the event and forward to the user
  1581  				event := new(ERC721Transfer)
  1582  				if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  1583  					return err
  1584  				}
  1585  				event.Raw = log
  1586  
  1587  				select {
  1588  				case sink <- event:
  1589  				case err := <-sub.Err():
  1590  					return err
  1591  				case <-quit:
  1592  					return nil
  1593  				}
  1594  			case err := <-sub.Err():
  1595  				return err
  1596  			case <-quit:
  1597  				return nil
  1598  			}
  1599  		}
  1600  	}), nil
  1601  }
  1602  
  1603  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  1604  //
  1605  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  1606  func (_ERC721 *ERC721Filterer) ParseTransfer(log types.Log) (*ERC721Transfer, error) {
  1607  	event := new(ERC721Transfer)
  1608  	if err := _ERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  1609  		return nil, err
  1610  	}
  1611  	event.Raw = log
  1612  	return event, nil
  1613  }
  1614  
  1615  // ERC721EnumerableABI is the input ABI used to generate the binding from.
  1616  const ERC721EnumerableABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  1617  
  1618  // ERC721EnumerableFuncSigs maps the 4-byte function signature to its string representation.
  1619  var ERC721EnumerableFuncSigs = map[string]string{
  1620  	"095ea7b3": "approve(address,uint256)",
  1621  	"70a08231": "balanceOf(address)",
  1622  	"081812fc": "getApproved(uint256)",
  1623  	"e985e9c5": "isApprovedForAll(address,address)",
  1624  	"6352211e": "ownerOf(uint256)",
  1625  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  1626  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  1627  	"a22cb465": "setApprovalForAll(address,bool)",
  1628  	"01ffc9a7": "supportsInterface(bytes4)",
  1629  	"4f6ccce7": "tokenByIndex(uint256)",
  1630  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  1631  	"18160ddd": "totalSupply()",
  1632  	"23b872dd": "transferFrom(address,address,uint256)",
  1633  }
  1634  
  1635  // ERC721Enumerable is an auto generated Go binding around an Ethereum contract.
  1636  type ERC721Enumerable struct {
  1637  	ERC721EnumerableCaller     // Read-only binding to the contract
  1638  	ERC721EnumerableTransactor // Write-only binding to the contract
  1639  	ERC721EnumerableFilterer   // Log filterer for contract events
  1640  }
  1641  
  1642  // ERC721EnumerableCaller is an auto generated read-only Go binding around an Ethereum contract.
  1643  type ERC721EnumerableCaller struct {
  1644  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1645  }
  1646  
  1647  // ERC721EnumerableTransactor is an auto generated write-only Go binding around an Ethereum contract.
  1648  type ERC721EnumerableTransactor struct {
  1649  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1650  }
  1651  
  1652  // ERC721EnumerableFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  1653  type ERC721EnumerableFilterer struct {
  1654  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  1655  }
  1656  
  1657  // ERC721EnumerableSession is an auto generated Go binding around an Ethereum contract,
  1658  // with pre-set call and transact options.
  1659  type ERC721EnumerableSession struct {
  1660  	Contract     *ERC721Enumerable // Generic contract binding to set the session for
  1661  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  1662  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  1663  }
  1664  
  1665  // ERC721EnumerableCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  1666  // with pre-set call options.
  1667  type ERC721EnumerableCallerSession struct {
  1668  	Contract *ERC721EnumerableCaller // Generic contract caller binding to set the session for
  1669  	CallOpts bind.CallOpts           // Call options to use throughout this session
  1670  }
  1671  
  1672  // ERC721EnumerableTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  1673  // with pre-set transact options.
  1674  type ERC721EnumerableTransactorSession struct {
  1675  	Contract     *ERC721EnumerableTransactor // Generic contract transactor binding to set the session for
  1676  	TransactOpts bind.TransactOpts           // Transaction auth options to use throughout this session
  1677  }
  1678  
  1679  // ERC721EnumerableRaw is an auto generated low-level Go binding around an Ethereum contract.
  1680  type ERC721EnumerableRaw struct {
  1681  	Contract *ERC721Enumerable // Generic contract binding to access the raw methods on
  1682  }
  1683  
  1684  // ERC721EnumerableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  1685  type ERC721EnumerableCallerRaw struct {
  1686  	Contract *ERC721EnumerableCaller // Generic read-only contract binding to access the raw methods on
  1687  }
  1688  
  1689  // ERC721EnumerableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  1690  type ERC721EnumerableTransactorRaw struct {
  1691  	Contract *ERC721EnumerableTransactor // Generic write-only contract binding to access the raw methods on
  1692  }
  1693  
  1694  // NewERC721Enumerable creates a new instance of ERC721Enumerable, bound to a specific deployed contract.
  1695  func NewERC721Enumerable(address common.Address, backend bind.ContractBackend) (*ERC721Enumerable, error) {
  1696  	contract, err := bindERC721Enumerable(address, backend, backend, backend)
  1697  	if err != nil {
  1698  		return nil, err
  1699  	}
  1700  	return &ERC721Enumerable{ERC721EnumerableCaller: ERC721EnumerableCaller{contract: contract}, ERC721EnumerableTransactor: ERC721EnumerableTransactor{contract: contract}, ERC721EnumerableFilterer: ERC721EnumerableFilterer{contract: contract}}, nil
  1701  }
  1702  
  1703  // NewERC721EnumerableCaller creates a new read-only instance of ERC721Enumerable, bound to a specific deployed contract.
  1704  func NewERC721EnumerableCaller(address common.Address, caller bind.ContractCaller) (*ERC721EnumerableCaller, error) {
  1705  	contract, err := bindERC721Enumerable(address, caller, nil, nil)
  1706  	if err != nil {
  1707  		return nil, err
  1708  	}
  1709  	return &ERC721EnumerableCaller{contract: contract}, nil
  1710  }
  1711  
  1712  // NewERC721EnumerableTransactor creates a new write-only instance of ERC721Enumerable, bound to a specific deployed contract.
  1713  func NewERC721EnumerableTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC721EnumerableTransactor, error) {
  1714  	contract, err := bindERC721Enumerable(address, nil, transactor, nil)
  1715  	if err != nil {
  1716  		return nil, err
  1717  	}
  1718  	return &ERC721EnumerableTransactor{contract: contract}, nil
  1719  }
  1720  
  1721  // NewERC721EnumerableFilterer creates a new log filterer instance of ERC721Enumerable, bound to a specific deployed contract.
  1722  func NewERC721EnumerableFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC721EnumerableFilterer, error) {
  1723  	contract, err := bindERC721Enumerable(address, nil, nil, filterer)
  1724  	if err != nil {
  1725  		return nil, err
  1726  	}
  1727  	return &ERC721EnumerableFilterer{contract: contract}, nil
  1728  }
  1729  
  1730  // bindERC721Enumerable binds a generic wrapper to an already deployed contract.
  1731  func bindERC721Enumerable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  1732  	parsed, err := abi.JSON(strings.NewReader(ERC721EnumerableABI))
  1733  	if err != nil {
  1734  		return nil, err
  1735  	}
  1736  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  1737  }
  1738  
  1739  // Call invokes the (constant) contract method with params as input values and
  1740  // sets the output to result. The result type might be a single field for simple
  1741  // returns, a slice of interfaces for anonymous returns and a struct for named
  1742  // returns.
  1743  func (_ERC721Enumerable *ERC721EnumerableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1744  	return _ERC721Enumerable.Contract.ERC721EnumerableCaller.contract.Call(opts, result, method, params...)
  1745  }
  1746  
  1747  // Transfer initiates a plain transaction to move funds to the contract, calling
  1748  // its default method if one is available.
  1749  func (_ERC721Enumerable *ERC721EnumerableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1750  	return _ERC721Enumerable.Contract.ERC721EnumerableTransactor.contract.Transfer(opts)
  1751  }
  1752  
  1753  // Transact invokes the (paid) contract method with params as input values.
  1754  func (_ERC721Enumerable *ERC721EnumerableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1755  	return _ERC721Enumerable.Contract.ERC721EnumerableTransactor.contract.Transact(opts, method, params...)
  1756  }
  1757  
  1758  // Call invokes the (constant) contract method with params as input values and
  1759  // sets the output to result. The result type might be a single field for simple
  1760  // returns, a slice of interfaces for anonymous returns and a struct for named
  1761  // returns.
  1762  func (_ERC721Enumerable *ERC721EnumerableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  1763  	return _ERC721Enumerable.Contract.contract.Call(opts, result, method, params...)
  1764  }
  1765  
  1766  // Transfer initiates a plain transaction to move funds to the contract, calling
  1767  // its default method if one is available.
  1768  func (_ERC721Enumerable *ERC721EnumerableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  1769  	return _ERC721Enumerable.Contract.contract.Transfer(opts)
  1770  }
  1771  
  1772  // Transact invokes the (paid) contract method with params as input values.
  1773  func (_ERC721Enumerable *ERC721EnumerableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  1774  	return _ERC721Enumerable.Contract.contract.Transact(opts, method, params...)
  1775  }
  1776  
  1777  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1778  //
  1779  // Solidity: function balanceOf(address owner) view returns(uint256)
  1780  func (_ERC721Enumerable *ERC721EnumerableCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  1781  	var out []interface{}
  1782  	err := _ERC721Enumerable.contract.Call(opts, &out, "balanceOf", owner)
  1783  
  1784  	if err != nil {
  1785  		return *new(*big.Int), err
  1786  	}
  1787  
  1788  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1789  
  1790  	return out0, err
  1791  
  1792  }
  1793  
  1794  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1795  //
  1796  // Solidity: function balanceOf(address owner) view returns(uint256)
  1797  func (_ERC721Enumerable *ERC721EnumerableSession) BalanceOf(owner common.Address) (*big.Int, error) {
  1798  	return _ERC721Enumerable.Contract.BalanceOf(&_ERC721Enumerable.CallOpts, owner)
  1799  }
  1800  
  1801  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  1802  //
  1803  // Solidity: function balanceOf(address owner) view returns(uint256)
  1804  func (_ERC721Enumerable *ERC721EnumerableCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  1805  	return _ERC721Enumerable.Contract.BalanceOf(&_ERC721Enumerable.CallOpts, owner)
  1806  }
  1807  
  1808  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  1809  //
  1810  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  1811  func (_ERC721Enumerable *ERC721EnumerableCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  1812  	var out []interface{}
  1813  	err := _ERC721Enumerable.contract.Call(opts, &out, "getApproved", tokenId)
  1814  
  1815  	if err != nil {
  1816  		return *new(common.Address), err
  1817  	}
  1818  
  1819  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1820  
  1821  	return out0, err
  1822  
  1823  }
  1824  
  1825  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  1826  //
  1827  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  1828  func (_ERC721Enumerable *ERC721EnumerableSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  1829  	return _ERC721Enumerable.Contract.GetApproved(&_ERC721Enumerable.CallOpts, tokenId)
  1830  }
  1831  
  1832  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  1833  //
  1834  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  1835  func (_ERC721Enumerable *ERC721EnumerableCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  1836  	return _ERC721Enumerable.Contract.GetApproved(&_ERC721Enumerable.CallOpts, tokenId)
  1837  }
  1838  
  1839  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  1840  //
  1841  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  1842  func (_ERC721Enumerable *ERC721EnumerableCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  1843  	var out []interface{}
  1844  	err := _ERC721Enumerable.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  1845  
  1846  	if err != nil {
  1847  		return *new(bool), err
  1848  	}
  1849  
  1850  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  1851  
  1852  	return out0, err
  1853  
  1854  }
  1855  
  1856  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  1857  //
  1858  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  1859  func (_ERC721Enumerable *ERC721EnumerableSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  1860  	return _ERC721Enumerable.Contract.IsApprovedForAll(&_ERC721Enumerable.CallOpts, owner, operator)
  1861  }
  1862  
  1863  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  1864  //
  1865  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  1866  func (_ERC721Enumerable *ERC721EnumerableCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  1867  	return _ERC721Enumerable.Contract.IsApprovedForAll(&_ERC721Enumerable.CallOpts, owner, operator)
  1868  }
  1869  
  1870  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  1871  //
  1872  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  1873  func (_ERC721Enumerable *ERC721EnumerableCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  1874  	var out []interface{}
  1875  	err := _ERC721Enumerable.contract.Call(opts, &out, "ownerOf", tokenId)
  1876  
  1877  	if err != nil {
  1878  		return *new(common.Address), err
  1879  	}
  1880  
  1881  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  1882  
  1883  	return out0, err
  1884  
  1885  }
  1886  
  1887  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  1888  //
  1889  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  1890  func (_ERC721Enumerable *ERC721EnumerableSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  1891  	return _ERC721Enumerable.Contract.OwnerOf(&_ERC721Enumerable.CallOpts, tokenId)
  1892  }
  1893  
  1894  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  1895  //
  1896  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  1897  func (_ERC721Enumerable *ERC721EnumerableCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  1898  	return _ERC721Enumerable.Contract.OwnerOf(&_ERC721Enumerable.CallOpts, tokenId)
  1899  }
  1900  
  1901  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  1902  //
  1903  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  1904  func (_ERC721Enumerable *ERC721EnumerableCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  1905  	var out []interface{}
  1906  	err := _ERC721Enumerable.contract.Call(opts, &out, "supportsInterface", interfaceId)
  1907  
  1908  	if err != nil {
  1909  		return *new(bool), err
  1910  	}
  1911  
  1912  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  1913  
  1914  	return out0, err
  1915  
  1916  }
  1917  
  1918  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  1919  //
  1920  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  1921  func (_ERC721Enumerable *ERC721EnumerableSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  1922  	return _ERC721Enumerable.Contract.SupportsInterface(&_ERC721Enumerable.CallOpts, interfaceId)
  1923  }
  1924  
  1925  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  1926  //
  1927  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  1928  func (_ERC721Enumerable *ERC721EnumerableCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  1929  	return _ERC721Enumerable.Contract.SupportsInterface(&_ERC721Enumerable.CallOpts, interfaceId)
  1930  }
  1931  
  1932  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  1933  //
  1934  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  1935  func (_ERC721Enumerable *ERC721EnumerableCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  1936  	var out []interface{}
  1937  	err := _ERC721Enumerable.contract.Call(opts, &out, "tokenByIndex", index)
  1938  
  1939  	if err != nil {
  1940  		return *new(*big.Int), err
  1941  	}
  1942  
  1943  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1944  
  1945  	return out0, err
  1946  
  1947  }
  1948  
  1949  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  1950  //
  1951  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  1952  func (_ERC721Enumerable *ERC721EnumerableSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  1953  	return _ERC721Enumerable.Contract.TokenByIndex(&_ERC721Enumerable.CallOpts, index)
  1954  }
  1955  
  1956  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  1957  //
  1958  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  1959  func (_ERC721Enumerable *ERC721EnumerableCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  1960  	return _ERC721Enumerable.Contract.TokenByIndex(&_ERC721Enumerable.CallOpts, index)
  1961  }
  1962  
  1963  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  1964  //
  1965  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  1966  func (_ERC721Enumerable *ERC721EnumerableCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  1967  	var out []interface{}
  1968  	err := _ERC721Enumerable.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  1969  
  1970  	if err != nil {
  1971  		return *new(*big.Int), err
  1972  	}
  1973  
  1974  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  1975  
  1976  	return out0, err
  1977  
  1978  }
  1979  
  1980  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  1981  //
  1982  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  1983  func (_ERC721Enumerable *ERC721EnumerableSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  1984  	return _ERC721Enumerable.Contract.TokenOfOwnerByIndex(&_ERC721Enumerable.CallOpts, owner, index)
  1985  }
  1986  
  1987  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  1988  //
  1989  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  1990  func (_ERC721Enumerable *ERC721EnumerableCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  1991  	return _ERC721Enumerable.Contract.TokenOfOwnerByIndex(&_ERC721Enumerable.CallOpts, owner, index)
  1992  }
  1993  
  1994  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  1995  //
  1996  // Solidity: function totalSupply() view returns(uint256)
  1997  func (_ERC721Enumerable *ERC721EnumerableCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  1998  	var out []interface{}
  1999  	err := _ERC721Enumerable.contract.Call(opts, &out, "totalSupply")
  2000  
  2001  	if err != nil {
  2002  		return *new(*big.Int), err
  2003  	}
  2004  
  2005  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2006  
  2007  	return out0, err
  2008  
  2009  }
  2010  
  2011  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2012  //
  2013  // Solidity: function totalSupply() view returns(uint256)
  2014  func (_ERC721Enumerable *ERC721EnumerableSession) TotalSupply() (*big.Int, error) {
  2015  	return _ERC721Enumerable.Contract.TotalSupply(&_ERC721Enumerable.CallOpts)
  2016  }
  2017  
  2018  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  2019  //
  2020  // Solidity: function totalSupply() view returns(uint256)
  2021  func (_ERC721Enumerable *ERC721EnumerableCallerSession) TotalSupply() (*big.Int, error) {
  2022  	return _ERC721Enumerable.Contract.TotalSupply(&_ERC721Enumerable.CallOpts)
  2023  }
  2024  
  2025  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2026  //
  2027  // Solidity: function approve(address to, uint256 tokenId) returns()
  2028  func (_ERC721Enumerable *ERC721EnumerableTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2029  	return _ERC721Enumerable.contract.Transact(opts, "approve", to, tokenId)
  2030  }
  2031  
  2032  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2033  //
  2034  // Solidity: function approve(address to, uint256 tokenId) returns()
  2035  func (_ERC721Enumerable *ERC721EnumerableSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2036  	return _ERC721Enumerable.Contract.Approve(&_ERC721Enumerable.TransactOpts, to, tokenId)
  2037  }
  2038  
  2039  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  2040  //
  2041  // Solidity: function approve(address to, uint256 tokenId) returns()
  2042  func (_ERC721Enumerable *ERC721EnumerableTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2043  	return _ERC721Enumerable.Contract.Approve(&_ERC721Enumerable.TransactOpts, to, tokenId)
  2044  }
  2045  
  2046  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  2047  //
  2048  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  2049  func (_ERC721Enumerable *ERC721EnumerableTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2050  	return _ERC721Enumerable.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  2051  }
  2052  
  2053  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  2054  //
  2055  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  2056  func (_ERC721Enumerable *ERC721EnumerableSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2057  	return _ERC721Enumerable.Contract.SafeTransferFrom(&_ERC721Enumerable.TransactOpts, from, to, tokenId)
  2058  }
  2059  
  2060  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  2061  //
  2062  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  2063  func (_ERC721Enumerable *ERC721EnumerableTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2064  	return _ERC721Enumerable.Contract.SafeTransferFrom(&_ERC721Enumerable.TransactOpts, from, to, tokenId)
  2065  }
  2066  
  2067  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  2068  //
  2069  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  2070  func (_ERC721Enumerable *ERC721EnumerableTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  2071  	return _ERC721Enumerable.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  2072  }
  2073  
  2074  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  2075  //
  2076  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  2077  func (_ERC721Enumerable *ERC721EnumerableSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  2078  	return _ERC721Enumerable.Contract.SafeTransferFrom0(&_ERC721Enumerable.TransactOpts, from, to, tokenId, _data)
  2079  }
  2080  
  2081  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  2082  //
  2083  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  2084  func (_ERC721Enumerable *ERC721EnumerableTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  2085  	return _ERC721Enumerable.Contract.SafeTransferFrom0(&_ERC721Enumerable.TransactOpts, from, to, tokenId, _data)
  2086  }
  2087  
  2088  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  2089  //
  2090  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  2091  func (_ERC721Enumerable *ERC721EnumerableTransactor) SetApprovalForAll(opts *bind.TransactOpts, to common.Address, approved bool) (*types.Transaction, error) {
  2092  	return _ERC721Enumerable.contract.Transact(opts, "setApprovalForAll", to, approved)
  2093  }
  2094  
  2095  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  2096  //
  2097  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  2098  func (_ERC721Enumerable *ERC721EnumerableSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  2099  	return _ERC721Enumerable.Contract.SetApprovalForAll(&_ERC721Enumerable.TransactOpts, to, approved)
  2100  }
  2101  
  2102  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  2103  //
  2104  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  2105  func (_ERC721Enumerable *ERC721EnumerableTransactorSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  2106  	return _ERC721Enumerable.Contract.SetApprovalForAll(&_ERC721Enumerable.TransactOpts, to, approved)
  2107  }
  2108  
  2109  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  2110  //
  2111  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  2112  func (_ERC721Enumerable *ERC721EnumerableTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2113  	return _ERC721Enumerable.contract.Transact(opts, "transferFrom", from, to, tokenId)
  2114  }
  2115  
  2116  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  2117  //
  2118  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  2119  func (_ERC721Enumerable *ERC721EnumerableSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2120  	return _ERC721Enumerable.Contract.TransferFrom(&_ERC721Enumerable.TransactOpts, from, to, tokenId)
  2121  }
  2122  
  2123  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  2124  //
  2125  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  2126  func (_ERC721Enumerable *ERC721EnumerableTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  2127  	return _ERC721Enumerable.Contract.TransferFrom(&_ERC721Enumerable.TransactOpts, from, to, tokenId)
  2128  }
  2129  
  2130  // ERC721EnumerableApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721Enumerable contract.
  2131  type ERC721EnumerableApprovalIterator struct {
  2132  	Event *ERC721EnumerableApproval // Event containing the contract specifics and raw log
  2133  
  2134  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2135  	event    string              // Event name to use for unpacking event data
  2136  
  2137  	logs chan types.Log        // Log channel receiving the found contract events
  2138  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2139  	done bool                  // Whether the subscription completed delivering logs
  2140  	fail error                 // Occurred error to stop iteration
  2141  }
  2142  
  2143  // Next advances the iterator to the subsequent event, returning whether there
  2144  // are any more events found. In case of a retrieval or parsing error, false is
  2145  // returned and Error() can be queried for the exact failure.
  2146  func (it *ERC721EnumerableApprovalIterator) Next() bool {
  2147  	// If the iterator failed, stop iterating
  2148  	if it.fail != nil {
  2149  		return false
  2150  	}
  2151  	// If the iterator completed, deliver directly whatever's available
  2152  	if it.done {
  2153  		select {
  2154  		case log := <-it.logs:
  2155  			it.Event = new(ERC721EnumerableApproval)
  2156  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2157  				it.fail = err
  2158  				return false
  2159  			}
  2160  			it.Event.Raw = log
  2161  			return true
  2162  
  2163  		default:
  2164  			return false
  2165  		}
  2166  	}
  2167  	// Iterator still in progress, wait for either a data or an error event
  2168  	select {
  2169  	case log := <-it.logs:
  2170  		it.Event = new(ERC721EnumerableApproval)
  2171  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2172  			it.fail = err
  2173  			return false
  2174  		}
  2175  		it.Event.Raw = log
  2176  		return true
  2177  
  2178  	case err := <-it.sub.Err():
  2179  		it.done = true
  2180  		it.fail = err
  2181  		return it.Next()
  2182  	}
  2183  }
  2184  
  2185  // Error returns any retrieval or parsing error occurred during filtering.
  2186  func (it *ERC721EnumerableApprovalIterator) Error() error {
  2187  	return it.fail
  2188  }
  2189  
  2190  // Close terminates the iteration process, releasing any pending underlying
  2191  // resources.
  2192  func (it *ERC721EnumerableApprovalIterator) Close() error {
  2193  	it.sub.Unsubscribe()
  2194  	return nil
  2195  }
  2196  
  2197  // ERC721EnumerableApproval represents a Approval event raised by the ERC721Enumerable contract.
  2198  type ERC721EnumerableApproval struct {
  2199  	Owner    common.Address
  2200  	Approved common.Address
  2201  	TokenId  *big.Int
  2202  	Raw      types.Log // Blockchain specific contextual infos
  2203  }
  2204  
  2205  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  2206  //
  2207  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  2208  func (_ERC721Enumerable *ERC721EnumerableFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721EnumerableApprovalIterator, error) {
  2209  
  2210  	var ownerRule []interface{}
  2211  	for _, ownerItem := range owner {
  2212  		ownerRule = append(ownerRule, ownerItem)
  2213  	}
  2214  	var approvedRule []interface{}
  2215  	for _, approvedItem := range approved {
  2216  		approvedRule = append(approvedRule, approvedItem)
  2217  	}
  2218  	var tokenIdRule []interface{}
  2219  	for _, tokenIdItem := range tokenId {
  2220  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2221  	}
  2222  
  2223  	logs, sub, err := _ERC721Enumerable.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  2224  	if err != nil {
  2225  		return nil, err
  2226  	}
  2227  	return &ERC721EnumerableApprovalIterator{contract: _ERC721Enumerable.contract, event: "Approval", logs: logs, sub: sub}, nil
  2228  }
  2229  
  2230  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  2231  //
  2232  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  2233  func (_ERC721Enumerable *ERC721EnumerableFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721EnumerableApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  2234  
  2235  	var ownerRule []interface{}
  2236  	for _, ownerItem := range owner {
  2237  		ownerRule = append(ownerRule, ownerItem)
  2238  	}
  2239  	var approvedRule []interface{}
  2240  	for _, approvedItem := range approved {
  2241  		approvedRule = append(approvedRule, approvedItem)
  2242  	}
  2243  	var tokenIdRule []interface{}
  2244  	for _, tokenIdItem := range tokenId {
  2245  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2246  	}
  2247  
  2248  	logs, sub, err := _ERC721Enumerable.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  2249  	if err != nil {
  2250  		return nil, err
  2251  	}
  2252  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2253  		defer sub.Unsubscribe()
  2254  		for {
  2255  			select {
  2256  			case log := <-logs:
  2257  				// New log arrived, parse the event and forward to the user
  2258  				event := new(ERC721EnumerableApproval)
  2259  				if err := _ERC721Enumerable.contract.UnpackLog(event, "Approval", log); err != nil {
  2260  					return err
  2261  				}
  2262  				event.Raw = log
  2263  
  2264  				select {
  2265  				case sink <- event:
  2266  				case err := <-sub.Err():
  2267  					return err
  2268  				case <-quit:
  2269  					return nil
  2270  				}
  2271  			case err := <-sub.Err():
  2272  				return err
  2273  			case <-quit:
  2274  				return nil
  2275  			}
  2276  		}
  2277  	}), nil
  2278  }
  2279  
  2280  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  2281  //
  2282  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  2283  func (_ERC721Enumerable *ERC721EnumerableFilterer) ParseApproval(log types.Log) (*ERC721EnumerableApproval, error) {
  2284  	event := new(ERC721EnumerableApproval)
  2285  	if err := _ERC721Enumerable.contract.UnpackLog(event, "Approval", log); err != nil {
  2286  		return nil, err
  2287  	}
  2288  	event.Raw = log
  2289  	return event, nil
  2290  }
  2291  
  2292  // ERC721EnumerableApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721Enumerable contract.
  2293  type ERC721EnumerableApprovalForAllIterator struct {
  2294  	Event *ERC721EnumerableApprovalForAll // Event containing the contract specifics and raw log
  2295  
  2296  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2297  	event    string              // Event name to use for unpacking event data
  2298  
  2299  	logs chan types.Log        // Log channel receiving the found contract events
  2300  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2301  	done bool                  // Whether the subscription completed delivering logs
  2302  	fail error                 // Occurred error to stop iteration
  2303  }
  2304  
  2305  // Next advances the iterator to the subsequent event, returning whether there
  2306  // are any more events found. In case of a retrieval or parsing error, false is
  2307  // returned and Error() can be queried for the exact failure.
  2308  func (it *ERC721EnumerableApprovalForAllIterator) Next() bool {
  2309  	// If the iterator failed, stop iterating
  2310  	if it.fail != nil {
  2311  		return false
  2312  	}
  2313  	// If the iterator completed, deliver directly whatever's available
  2314  	if it.done {
  2315  		select {
  2316  		case log := <-it.logs:
  2317  			it.Event = new(ERC721EnumerableApprovalForAll)
  2318  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2319  				it.fail = err
  2320  				return false
  2321  			}
  2322  			it.Event.Raw = log
  2323  			return true
  2324  
  2325  		default:
  2326  			return false
  2327  		}
  2328  	}
  2329  	// Iterator still in progress, wait for either a data or an error event
  2330  	select {
  2331  	case log := <-it.logs:
  2332  		it.Event = new(ERC721EnumerableApprovalForAll)
  2333  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2334  			it.fail = err
  2335  			return false
  2336  		}
  2337  		it.Event.Raw = log
  2338  		return true
  2339  
  2340  	case err := <-it.sub.Err():
  2341  		it.done = true
  2342  		it.fail = err
  2343  		return it.Next()
  2344  	}
  2345  }
  2346  
  2347  // Error returns any retrieval or parsing error occurred during filtering.
  2348  func (it *ERC721EnumerableApprovalForAllIterator) Error() error {
  2349  	return it.fail
  2350  }
  2351  
  2352  // Close terminates the iteration process, releasing any pending underlying
  2353  // resources.
  2354  func (it *ERC721EnumerableApprovalForAllIterator) Close() error {
  2355  	it.sub.Unsubscribe()
  2356  	return nil
  2357  }
  2358  
  2359  // ERC721EnumerableApprovalForAll represents a ApprovalForAll event raised by the ERC721Enumerable contract.
  2360  type ERC721EnumerableApprovalForAll struct {
  2361  	Owner    common.Address
  2362  	Operator common.Address
  2363  	Approved bool
  2364  	Raw      types.Log // Blockchain specific contextual infos
  2365  }
  2366  
  2367  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  2368  //
  2369  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  2370  func (_ERC721Enumerable *ERC721EnumerableFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721EnumerableApprovalForAllIterator, error) {
  2371  
  2372  	var ownerRule []interface{}
  2373  	for _, ownerItem := range owner {
  2374  		ownerRule = append(ownerRule, ownerItem)
  2375  	}
  2376  	var operatorRule []interface{}
  2377  	for _, operatorItem := range operator {
  2378  		operatorRule = append(operatorRule, operatorItem)
  2379  	}
  2380  
  2381  	logs, sub, err := _ERC721Enumerable.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  2382  	if err != nil {
  2383  		return nil, err
  2384  	}
  2385  	return &ERC721EnumerableApprovalForAllIterator{contract: _ERC721Enumerable.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  2386  }
  2387  
  2388  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  2389  //
  2390  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  2391  func (_ERC721Enumerable *ERC721EnumerableFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721EnumerableApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  2392  
  2393  	var ownerRule []interface{}
  2394  	for _, ownerItem := range owner {
  2395  		ownerRule = append(ownerRule, ownerItem)
  2396  	}
  2397  	var operatorRule []interface{}
  2398  	for _, operatorItem := range operator {
  2399  		operatorRule = append(operatorRule, operatorItem)
  2400  	}
  2401  
  2402  	logs, sub, err := _ERC721Enumerable.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  2403  	if err != nil {
  2404  		return nil, err
  2405  	}
  2406  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2407  		defer sub.Unsubscribe()
  2408  		for {
  2409  			select {
  2410  			case log := <-logs:
  2411  				// New log arrived, parse the event and forward to the user
  2412  				event := new(ERC721EnumerableApprovalForAll)
  2413  				if err := _ERC721Enumerable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  2414  					return err
  2415  				}
  2416  				event.Raw = log
  2417  
  2418  				select {
  2419  				case sink <- event:
  2420  				case err := <-sub.Err():
  2421  					return err
  2422  				case <-quit:
  2423  					return nil
  2424  				}
  2425  			case err := <-sub.Err():
  2426  				return err
  2427  			case <-quit:
  2428  				return nil
  2429  			}
  2430  		}
  2431  	}), nil
  2432  }
  2433  
  2434  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  2435  //
  2436  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  2437  func (_ERC721Enumerable *ERC721EnumerableFilterer) ParseApprovalForAll(log types.Log) (*ERC721EnumerableApprovalForAll, error) {
  2438  	event := new(ERC721EnumerableApprovalForAll)
  2439  	if err := _ERC721Enumerable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  2440  		return nil, err
  2441  	}
  2442  	event.Raw = log
  2443  	return event, nil
  2444  }
  2445  
  2446  // ERC721EnumerableTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721Enumerable contract.
  2447  type ERC721EnumerableTransferIterator struct {
  2448  	Event *ERC721EnumerableTransfer // Event containing the contract specifics and raw log
  2449  
  2450  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  2451  	event    string              // Event name to use for unpacking event data
  2452  
  2453  	logs chan types.Log        // Log channel receiving the found contract events
  2454  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  2455  	done bool                  // Whether the subscription completed delivering logs
  2456  	fail error                 // Occurred error to stop iteration
  2457  }
  2458  
  2459  // Next advances the iterator to the subsequent event, returning whether there
  2460  // are any more events found. In case of a retrieval or parsing error, false is
  2461  // returned and Error() can be queried for the exact failure.
  2462  func (it *ERC721EnumerableTransferIterator) Next() bool {
  2463  	// If the iterator failed, stop iterating
  2464  	if it.fail != nil {
  2465  		return false
  2466  	}
  2467  	// If the iterator completed, deliver directly whatever's available
  2468  	if it.done {
  2469  		select {
  2470  		case log := <-it.logs:
  2471  			it.Event = new(ERC721EnumerableTransfer)
  2472  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2473  				it.fail = err
  2474  				return false
  2475  			}
  2476  			it.Event.Raw = log
  2477  			return true
  2478  
  2479  		default:
  2480  			return false
  2481  		}
  2482  	}
  2483  	// Iterator still in progress, wait for either a data or an error event
  2484  	select {
  2485  	case log := <-it.logs:
  2486  		it.Event = new(ERC721EnumerableTransfer)
  2487  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  2488  			it.fail = err
  2489  			return false
  2490  		}
  2491  		it.Event.Raw = log
  2492  		return true
  2493  
  2494  	case err := <-it.sub.Err():
  2495  		it.done = true
  2496  		it.fail = err
  2497  		return it.Next()
  2498  	}
  2499  }
  2500  
  2501  // Error returns any retrieval or parsing error occurred during filtering.
  2502  func (it *ERC721EnumerableTransferIterator) Error() error {
  2503  	return it.fail
  2504  }
  2505  
  2506  // Close terminates the iteration process, releasing any pending underlying
  2507  // resources.
  2508  func (it *ERC721EnumerableTransferIterator) Close() error {
  2509  	it.sub.Unsubscribe()
  2510  	return nil
  2511  }
  2512  
  2513  // ERC721EnumerableTransfer represents a Transfer event raised by the ERC721Enumerable contract.
  2514  type ERC721EnumerableTransfer struct {
  2515  	From    common.Address
  2516  	To      common.Address
  2517  	TokenId *big.Int
  2518  	Raw     types.Log // Blockchain specific contextual infos
  2519  }
  2520  
  2521  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  2522  //
  2523  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  2524  func (_ERC721Enumerable *ERC721EnumerableFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721EnumerableTransferIterator, error) {
  2525  
  2526  	var fromRule []interface{}
  2527  	for _, fromItem := range from {
  2528  		fromRule = append(fromRule, fromItem)
  2529  	}
  2530  	var toRule []interface{}
  2531  	for _, toItem := range to {
  2532  		toRule = append(toRule, toItem)
  2533  	}
  2534  	var tokenIdRule []interface{}
  2535  	for _, tokenIdItem := range tokenId {
  2536  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2537  	}
  2538  
  2539  	logs, sub, err := _ERC721Enumerable.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  2540  	if err != nil {
  2541  		return nil, err
  2542  	}
  2543  	return &ERC721EnumerableTransferIterator{contract: _ERC721Enumerable.contract, event: "Transfer", logs: logs, sub: sub}, nil
  2544  }
  2545  
  2546  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  2547  //
  2548  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  2549  func (_ERC721Enumerable *ERC721EnumerableFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721EnumerableTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  2550  
  2551  	var fromRule []interface{}
  2552  	for _, fromItem := range from {
  2553  		fromRule = append(fromRule, fromItem)
  2554  	}
  2555  	var toRule []interface{}
  2556  	for _, toItem := range to {
  2557  		toRule = append(toRule, toItem)
  2558  	}
  2559  	var tokenIdRule []interface{}
  2560  	for _, tokenIdItem := range tokenId {
  2561  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  2562  	}
  2563  
  2564  	logs, sub, err := _ERC721Enumerable.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  2565  	if err != nil {
  2566  		return nil, err
  2567  	}
  2568  	return event.NewSubscription(func(quit <-chan struct{}) error {
  2569  		defer sub.Unsubscribe()
  2570  		for {
  2571  			select {
  2572  			case log := <-logs:
  2573  				// New log arrived, parse the event and forward to the user
  2574  				event := new(ERC721EnumerableTransfer)
  2575  				if err := _ERC721Enumerable.contract.UnpackLog(event, "Transfer", log); err != nil {
  2576  					return err
  2577  				}
  2578  				event.Raw = log
  2579  
  2580  				select {
  2581  				case sink <- event:
  2582  				case err := <-sub.Err():
  2583  					return err
  2584  				case <-quit:
  2585  					return nil
  2586  				}
  2587  			case err := <-sub.Err():
  2588  				return err
  2589  			case <-quit:
  2590  				return nil
  2591  			}
  2592  		}
  2593  	}), nil
  2594  }
  2595  
  2596  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  2597  //
  2598  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  2599  func (_ERC721Enumerable *ERC721EnumerableFilterer) ParseTransfer(log types.Log) (*ERC721EnumerableTransfer, error) {
  2600  	event := new(ERC721EnumerableTransfer)
  2601  	if err := _ERC721Enumerable.contract.UnpackLog(event, "Transfer", log); err != nil {
  2602  		return nil, err
  2603  	}
  2604  	event.Raw = log
  2605  	return event, nil
  2606  }
  2607  
  2608  // ERC721FullABI is the input ABI used to generate the binding from.
  2609  const ERC721FullABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  2610  
  2611  // ERC721FullFuncSigs maps the 4-byte function signature to its string representation.
  2612  var ERC721FullFuncSigs = map[string]string{
  2613  	"095ea7b3": "approve(address,uint256)",
  2614  	"70a08231": "balanceOf(address)",
  2615  	"081812fc": "getApproved(uint256)",
  2616  	"e985e9c5": "isApprovedForAll(address,address)",
  2617  	"06fdde03": "name()",
  2618  	"6352211e": "ownerOf(uint256)",
  2619  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  2620  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  2621  	"a22cb465": "setApprovalForAll(address,bool)",
  2622  	"01ffc9a7": "supportsInterface(bytes4)",
  2623  	"95d89b41": "symbol()",
  2624  	"4f6ccce7": "tokenByIndex(uint256)",
  2625  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  2626  	"c87b56dd": "tokenURI(uint256)",
  2627  	"18160ddd": "totalSupply()",
  2628  	"23b872dd": "transferFrom(address,address,uint256)",
  2629  }
  2630  
  2631  // ERC721Full is an auto generated Go binding around an Ethereum contract.
  2632  type ERC721Full struct {
  2633  	ERC721FullCaller     // Read-only binding to the contract
  2634  	ERC721FullTransactor // Write-only binding to the contract
  2635  	ERC721FullFilterer   // Log filterer for contract events
  2636  }
  2637  
  2638  // ERC721FullCaller is an auto generated read-only Go binding around an Ethereum contract.
  2639  type ERC721FullCaller struct {
  2640  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2641  }
  2642  
  2643  // ERC721FullTransactor is an auto generated write-only Go binding around an Ethereum contract.
  2644  type ERC721FullTransactor struct {
  2645  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2646  }
  2647  
  2648  // ERC721FullFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  2649  type ERC721FullFilterer struct {
  2650  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  2651  }
  2652  
  2653  // ERC721FullSession is an auto generated Go binding around an Ethereum contract,
  2654  // with pre-set call and transact options.
  2655  type ERC721FullSession struct {
  2656  	Contract     *ERC721Full       // Generic contract binding to set the session for
  2657  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  2658  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  2659  }
  2660  
  2661  // ERC721FullCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  2662  // with pre-set call options.
  2663  type ERC721FullCallerSession struct {
  2664  	Contract *ERC721FullCaller // Generic contract caller binding to set the session for
  2665  	CallOpts bind.CallOpts     // Call options to use throughout this session
  2666  }
  2667  
  2668  // ERC721FullTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  2669  // with pre-set transact options.
  2670  type ERC721FullTransactorSession struct {
  2671  	Contract     *ERC721FullTransactor // Generic contract transactor binding to set the session for
  2672  	TransactOpts bind.TransactOpts     // Transaction auth options to use throughout this session
  2673  }
  2674  
  2675  // ERC721FullRaw is an auto generated low-level Go binding around an Ethereum contract.
  2676  type ERC721FullRaw struct {
  2677  	Contract *ERC721Full // Generic contract binding to access the raw methods on
  2678  }
  2679  
  2680  // ERC721FullCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  2681  type ERC721FullCallerRaw struct {
  2682  	Contract *ERC721FullCaller // Generic read-only contract binding to access the raw methods on
  2683  }
  2684  
  2685  // ERC721FullTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  2686  type ERC721FullTransactorRaw struct {
  2687  	Contract *ERC721FullTransactor // Generic write-only contract binding to access the raw methods on
  2688  }
  2689  
  2690  // NewERC721Full creates a new instance of ERC721Full, bound to a specific deployed contract.
  2691  func NewERC721Full(address common.Address, backend bind.ContractBackend) (*ERC721Full, error) {
  2692  	contract, err := bindERC721Full(address, backend, backend, backend)
  2693  	if err != nil {
  2694  		return nil, err
  2695  	}
  2696  	return &ERC721Full{ERC721FullCaller: ERC721FullCaller{contract: contract}, ERC721FullTransactor: ERC721FullTransactor{contract: contract}, ERC721FullFilterer: ERC721FullFilterer{contract: contract}}, nil
  2697  }
  2698  
  2699  // NewERC721FullCaller creates a new read-only instance of ERC721Full, bound to a specific deployed contract.
  2700  func NewERC721FullCaller(address common.Address, caller bind.ContractCaller) (*ERC721FullCaller, error) {
  2701  	contract, err := bindERC721Full(address, caller, nil, nil)
  2702  	if err != nil {
  2703  		return nil, err
  2704  	}
  2705  	return &ERC721FullCaller{contract: contract}, nil
  2706  }
  2707  
  2708  // NewERC721FullTransactor creates a new write-only instance of ERC721Full, bound to a specific deployed contract.
  2709  func NewERC721FullTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC721FullTransactor, error) {
  2710  	contract, err := bindERC721Full(address, nil, transactor, nil)
  2711  	if err != nil {
  2712  		return nil, err
  2713  	}
  2714  	return &ERC721FullTransactor{contract: contract}, nil
  2715  }
  2716  
  2717  // NewERC721FullFilterer creates a new log filterer instance of ERC721Full, bound to a specific deployed contract.
  2718  func NewERC721FullFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC721FullFilterer, error) {
  2719  	contract, err := bindERC721Full(address, nil, nil, filterer)
  2720  	if err != nil {
  2721  		return nil, err
  2722  	}
  2723  	return &ERC721FullFilterer{contract: contract}, nil
  2724  }
  2725  
  2726  // bindERC721Full binds a generic wrapper to an already deployed contract.
  2727  func bindERC721Full(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  2728  	parsed, err := abi.JSON(strings.NewReader(ERC721FullABI))
  2729  	if err != nil {
  2730  		return nil, err
  2731  	}
  2732  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  2733  }
  2734  
  2735  // Call invokes the (constant) contract method with params as input values and
  2736  // sets the output to result. The result type might be a single field for simple
  2737  // returns, a slice of interfaces for anonymous returns and a struct for named
  2738  // returns.
  2739  func (_ERC721Full *ERC721FullRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  2740  	return _ERC721Full.Contract.ERC721FullCaller.contract.Call(opts, result, method, params...)
  2741  }
  2742  
  2743  // Transfer initiates a plain transaction to move funds to the contract, calling
  2744  // its default method if one is available.
  2745  func (_ERC721Full *ERC721FullRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  2746  	return _ERC721Full.Contract.ERC721FullTransactor.contract.Transfer(opts)
  2747  }
  2748  
  2749  // Transact invokes the (paid) contract method with params as input values.
  2750  func (_ERC721Full *ERC721FullRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  2751  	return _ERC721Full.Contract.ERC721FullTransactor.contract.Transact(opts, method, params...)
  2752  }
  2753  
  2754  // Call invokes the (constant) contract method with params as input values and
  2755  // sets the output to result. The result type might be a single field for simple
  2756  // returns, a slice of interfaces for anonymous returns and a struct for named
  2757  // returns.
  2758  func (_ERC721Full *ERC721FullCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  2759  	return _ERC721Full.Contract.contract.Call(opts, result, method, params...)
  2760  }
  2761  
  2762  // Transfer initiates a plain transaction to move funds to the contract, calling
  2763  // its default method if one is available.
  2764  func (_ERC721Full *ERC721FullTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  2765  	return _ERC721Full.Contract.contract.Transfer(opts)
  2766  }
  2767  
  2768  // Transact invokes the (paid) contract method with params as input values.
  2769  func (_ERC721Full *ERC721FullTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  2770  	return _ERC721Full.Contract.contract.Transact(opts, method, params...)
  2771  }
  2772  
  2773  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  2774  //
  2775  // Solidity: function balanceOf(address owner) view returns(uint256)
  2776  func (_ERC721Full *ERC721FullCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  2777  	var out []interface{}
  2778  	err := _ERC721Full.contract.Call(opts, &out, "balanceOf", owner)
  2779  
  2780  	if err != nil {
  2781  		return *new(*big.Int), err
  2782  	}
  2783  
  2784  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  2785  
  2786  	return out0, err
  2787  
  2788  }
  2789  
  2790  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  2791  //
  2792  // Solidity: function balanceOf(address owner) view returns(uint256)
  2793  func (_ERC721Full *ERC721FullSession) BalanceOf(owner common.Address) (*big.Int, error) {
  2794  	return _ERC721Full.Contract.BalanceOf(&_ERC721Full.CallOpts, owner)
  2795  }
  2796  
  2797  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  2798  //
  2799  // Solidity: function balanceOf(address owner) view returns(uint256)
  2800  func (_ERC721Full *ERC721FullCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  2801  	return _ERC721Full.Contract.BalanceOf(&_ERC721Full.CallOpts, owner)
  2802  }
  2803  
  2804  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  2805  //
  2806  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  2807  func (_ERC721Full *ERC721FullCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  2808  	var out []interface{}
  2809  	err := _ERC721Full.contract.Call(opts, &out, "getApproved", tokenId)
  2810  
  2811  	if err != nil {
  2812  		return *new(common.Address), err
  2813  	}
  2814  
  2815  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2816  
  2817  	return out0, err
  2818  
  2819  }
  2820  
  2821  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  2822  //
  2823  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  2824  func (_ERC721Full *ERC721FullSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  2825  	return _ERC721Full.Contract.GetApproved(&_ERC721Full.CallOpts, tokenId)
  2826  }
  2827  
  2828  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  2829  //
  2830  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  2831  func (_ERC721Full *ERC721FullCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  2832  	return _ERC721Full.Contract.GetApproved(&_ERC721Full.CallOpts, tokenId)
  2833  }
  2834  
  2835  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  2836  //
  2837  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  2838  func (_ERC721Full *ERC721FullCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  2839  	var out []interface{}
  2840  	err := _ERC721Full.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  2841  
  2842  	if err != nil {
  2843  		return *new(bool), err
  2844  	}
  2845  
  2846  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  2847  
  2848  	return out0, err
  2849  
  2850  }
  2851  
  2852  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  2853  //
  2854  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  2855  func (_ERC721Full *ERC721FullSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  2856  	return _ERC721Full.Contract.IsApprovedForAll(&_ERC721Full.CallOpts, owner, operator)
  2857  }
  2858  
  2859  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  2860  //
  2861  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  2862  func (_ERC721Full *ERC721FullCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  2863  	return _ERC721Full.Contract.IsApprovedForAll(&_ERC721Full.CallOpts, owner, operator)
  2864  }
  2865  
  2866  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  2867  //
  2868  // Solidity: function name() view returns(string)
  2869  func (_ERC721Full *ERC721FullCaller) Name(opts *bind.CallOpts) (string, error) {
  2870  	var out []interface{}
  2871  	err := _ERC721Full.contract.Call(opts, &out, "name")
  2872  
  2873  	if err != nil {
  2874  		return *new(string), err
  2875  	}
  2876  
  2877  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  2878  
  2879  	return out0, err
  2880  
  2881  }
  2882  
  2883  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  2884  //
  2885  // Solidity: function name() view returns(string)
  2886  func (_ERC721Full *ERC721FullSession) Name() (string, error) {
  2887  	return _ERC721Full.Contract.Name(&_ERC721Full.CallOpts)
  2888  }
  2889  
  2890  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  2891  //
  2892  // Solidity: function name() view returns(string)
  2893  func (_ERC721Full *ERC721FullCallerSession) Name() (string, error) {
  2894  	return _ERC721Full.Contract.Name(&_ERC721Full.CallOpts)
  2895  }
  2896  
  2897  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  2898  //
  2899  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  2900  func (_ERC721Full *ERC721FullCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  2901  	var out []interface{}
  2902  	err := _ERC721Full.contract.Call(opts, &out, "ownerOf", tokenId)
  2903  
  2904  	if err != nil {
  2905  		return *new(common.Address), err
  2906  	}
  2907  
  2908  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  2909  
  2910  	return out0, err
  2911  
  2912  }
  2913  
  2914  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  2915  //
  2916  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  2917  func (_ERC721Full *ERC721FullSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  2918  	return _ERC721Full.Contract.OwnerOf(&_ERC721Full.CallOpts, tokenId)
  2919  }
  2920  
  2921  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  2922  //
  2923  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  2924  func (_ERC721Full *ERC721FullCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  2925  	return _ERC721Full.Contract.OwnerOf(&_ERC721Full.CallOpts, tokenId)
  2926  }
  2927  
  2928  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  2929  //
  2930  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  2931  func (_ERC721Full *ERC721FullCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  2932  	var out []interface{}
  2933  	err := _ERC721Full.contract.Call(opts, &out, "supportsInterface", interfaceId)
  2934  
  2935  	if err != nil {
  2936  		return *new(bool), err
  2937  	}
  2938  
  2939  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  2940  
  2941  	return out0, err
  2942  
  2943  }
  2944  
  2945  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  2946  //
  2947  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  2948  func (_ERC721Full *ERC721FullSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  2949  	return _ERC721Full.Contract.SupportsInterface(&_ERC721Full.CallOpts, interfaceId)
  2950  }
  2951  
  2952  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  2953  //
  2954  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  2955  func (_ERC721Full *ERC721FullCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  2956  	return _ERC721Full.Contract.SupportsInterface(&_ERC721Full.CallOpts, interfaceId)
  2957  }
  2958  
  2959  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2960  //
  2961  // Solidity: function symbol() view returns(string)
  2962  func (_ERC721Full *ERC721FullCaller) Symbol(opts *bind.CallOpts) (string, error) {
  2963  	var out []interface{}
  2964  	err := _ERC721Full.contract.Call(opts, &out, "symbol")
  2965  
  2966  	if err != nil {
  2967  		return *new(string), err
  2968  	}
  2969  
  2970  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  2971  
  2972  	return out0, err
  2973  
  2974  }
  2975  
  2976  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2977  //
  2978  // Solidity: function symbol() view returns(string)
  2979  func (_ERC721Full *ERC721FullSession) Symbol() (string, error) {
  2980  	return _ERC721Full.Contract.Symbol(&_ERC721Full.CallOpts)
  2981  }
  2982  
  2983  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  2984  //
  2985  // Solidity: function symbol() view returns(string)
  2986  func (_ERC721Full *ERC721FullCallerSession) Symbol() (string, error) {
  2987  	return _ERC721Full.Contract.Symbol(&_ERC721Full.CallOpts)
  2988  }
  2989  
  2990  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  2991  //
  2992  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  2993  func (_ERC721Full *ERC721FullCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  2994  	var out []interface{}
  2995  	err := _ERC721Full.contract.Call(opts, &out, "tokenByIndex", index)
  2996  
  2997  	if err != nil {
  2998  		return *new(*big.Int), err
  2999  	}
  3000  
  3001  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3002  
  3003  	return out0, err
  3004  
  3005  }
  3006  
  3007  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  3008  //
  3009  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  3010  func (_ERC721Full *ERC721FullSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  3011  	return _ERC721Full.Contract.TokenByIndex(&_ERC721Full.CallOpts, index)
  3012  }
  3013  
  3014  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  3015  //
  3016  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  3017  func (_ERC721Full *ERC721FullCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  3018  	return _ERC721Full.Contract.TokenByIndex(&_ERC721Full.CallOpts, index)
  3019  }
  3020  
  3021  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  3022  //
  3023  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  3024  func (_ERC721Full *ERC721FullCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  3025  	var out []interface{}
  3026  	err := _ERC721Full.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  3027  
  3028  	if err != nil {
  3029  		return *new(*big.Int), err
  3030  	}
  3031  
  3032  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3033  
  3034  	return out0, err
  3035  
  3036  }
  3037  
  3038  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  3039  //
  3040  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  3041  func (_ERC721Full *ERC721FullSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  3042  	return _ERC721Full.Contract.TokenOfOwnerByIndex(&_ERC721Full.CallOpts, owner, index)
  3043  }
  3044  
  3045  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  3046  //
  3047  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
  3048  func (_ERC721Full *ERC721FullCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  3049  	return _ERC721Full.Contract.TokenOfOwnerByIndex(&_ERC721Full.CallOpts, owner, index)
  3050  }
  3051  
  3052  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  3053  //
  3054  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  3055  func (_ERC721Full *ERC721FullCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  3056  	var out []interface{}
  3057  	err := _ERC721Full.contract.Call(opts, &out, "tokenURI", tokenId)
  3058  
  3059  	if err != nil {
  3060  		return *new(string), err
  3061  	}
  3062  
  3063  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  3064  
  3065  	return out0, err
  3066  
  3067  }
  3068  
  3069  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  3070  //
  3071  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  3072  func (_ERC721Full *ERC721FullSession) TokenURI(tokenId *big.Int) (string, error) {
  3073  	return _ERC721Full.Contract.TokenURI(&_ERC721Full.CallOpts, tokenId)
  3074  }
  3075  
  3076  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  3077  //
  3078  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  3079  func (_ERC721Full *ERC721FullCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  3080  	return _ERC721Full.Contract.TokenURI(&_ERC721Full.CallOpts, tokenId)
  3081  }
  3082  
  3083  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  3084  //
  3085  // Solidity: function totalSupply() view returns(uint256)
  3086  func (_ERC721Full *ERC721FullCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  3087  	var out []interface{}
  3088  	err := _ERC721Full.contract.Call(opts, &out, "totalSupply")
  3089  
  3090  	if err != nil {
  3091  		return *new(*big.Int), err
  3092  	}
  3093  
  3094  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3095  
  3096  	return out0, err
  3097  
  3098  }
  3099  
  3100  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  3101  //
  3102  // Solidity: function totalSupply() view returns(uint256)
  3103  func (_ERC721Full *ERC721FullSession) TotalSupply() (*big.Int, error) {
  3104  	return _ERC721Full.Contract.TotalSupply(&_ERC721Full.CallOpts)
  3105  }
  3106  
  3107  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  3108  //
  3109  // Solidity: function totalSupply() view returns(uint256)
  3110  func (_ERC721Full *ERC721FullCallerSession) TotalSupply() (*big.Int, error) {
  3111  	return _ERC721Full.Contract.TotalSupply(&_ERC721Full.CallOpts)
  3112  }
  3113  
  3114  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3115  //
  3116  // Solidity: function approve(address to, uint256 tokenId) returns()
  3117  func (_ERC721Full *ERC721FullTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3118  	return _ERC721Full.contract.Transact(opts, "approve", to, tokenId)
  3119  }
  3120  
  3121  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3122  //
  3123  // Solidity: function approve(address to, uint256 tokenId) returns()
  3124  func (_ERC721Full *ERC721FullSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3125  	return _ERC721Full.Contract.Approve(&_ERC721Full.TransactOpts, to, tokenId)
  3126  }
  3127  
  3128  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  3129  //
  3130  // Solidity: function approve(address to, uint256 tokenId) returns()
  3131  func (_ERC721Full *ERC721FullTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3132  	return _ERC721Full.Contract.Approve(&_ERC721Full.TransactOpts, to, tokenId)
  3133  }
  3134  
  3135  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  3136  //
  3137  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  3138  func (_ERC721Full *ERC721FullTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3139  	return _ERC721Full.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  3140  }
  3141  
  3142  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  3143  //
  3144  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  3145  func (_ERC721Full *ERC721FullSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3146  	return _ERC721Full.Contract.SafeTransferFrom(&_ERC721Full.TransactOpts, from, to, tokenId)
  3147  }
  3148  
  3149  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  3150  //
  3151  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  3152  func (_ERC721Full *ERC721FullTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3153  	return _ERC721Full.Contract.SafeTransferFrom(&_ERC721Full.TransactOpts, from, to, tokenId)
  3154  }
  3155  
  3156  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  3157  //
  3158  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  3159  func (_ERC721Full *ERC721FullTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  3160  	return _ERC721Full.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  3161  }
  3162  
  3163  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  3164  //
  3165  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  3166  func (_ERC721Full *ERC721FullSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  3167  	return _ERC721Full.Contract.SafeTransferFrom0(&_ERC721Full.TransactOpts, from, to, tokenId, _data)
  3168  }
  3169  
  3170  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  3171  //
  3172  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  3173  func (_ERC721Full *ERC721FullTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  3174  	return _ERC721Full.Contract.SafeTransferFrom0(&_ERC721Full.TransactOpts, from, to, tokenId, _data)
  3175  }
  3176  
  3177  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  3178  //
  3179  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  3180  func (_ERC721Full *ERC721FullTransactor) SetApprovalForAll(opts *bind.TransactOpts, to common.Address, approved bool) (*types.Transaction, error) {
  3181  	return _ERC721Full.contract.Transact(opts, "setApprovalForAll", to, approved)
  3182  }
  3183  
  3184  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  3185  //
  3186  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  3187  func (_ERC721Full *ERC721FullSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  3188  	return _ERC721Full.Contract.SetApprovalForAll(&_ERC721Full.TransactOpts, to, approved)
  3189  }
  3190  
  3191  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  3192  //
  3193  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  3194  func (_ERC721Full *ERC721FullTransactorSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  3195  	return _ERC721Full.Contract.SetApprovalForAll(&_ERC721Full.TransactOpts, to, approved)
  3196  }
  3197  
  3198  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3199  //
  3200  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  3201  func (_ERC721Full *ERC721FullTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3202  	return _ERC721Full.contract.Transact(opts, "transferFrom", from, to, tokenId)
  3203  }
  3204  
  3205  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3206  //
  3207  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  3208  func (_ERC721Full *ERC721FullSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3209  	return _ERC721Full.Contract.TransferFrom(&_ERC721Full.TransactOpts, from, to, tokenId)
  3210  }
  3211  
  3212  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  3213  //
  3214  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  3215  func (_ERC721Full *ERC721FullTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  3216  	return _ERC721Full.Contract.TransferFrom(&_ERC721Full.TransactOpts, from, to, tokenId)
  3217  }
  3218  
  3219  // ERC721FullApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721Full contract.
  3220  type ERC721FullApprovalIterator struct {
  3221  	Event *ERC721FullApproval // Event containing the contract specifics and raw log
  3222  
  3223  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3224  	event    string              // Event name to use for unpacking event data
  3225  
  3226  	logs chan types.Log        // Log channel receiving the found contract events
  3227  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3228  	done bool                  // Whether the subscription completed delivering logs
  3229  	fail error                 // Occurred error to stop iteration
  3230  }
  3231  
  3232  // Next advances the iterator to the subsequent event, returning whether there
  3233  // are any more events found. In case of a retrieval or parsing error, false is
  3234  // returned and Error() can be queried for the exact failure.
  3235  func (it *ERC721FullApprovalIterator) Next() bool {
  3236  	// If the iterator failed, stop iterating
  3237  	if it.fail != nil {
  3238  		return false
  3239  	}
  3240  	// If the iterator completed, deliver directly whatever's available
  3241  	if it.done {
  3242  		select {
  3243  		case log := <-it.logs:
  3244  			it.Event = new(ERC721FullApproval)
  3245  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3246  				it.fail = err
  3247  				return false
  3248  			}
  3249  			it.Event.Raw = log
  3250  			return true
  3251  
  3252  		default:
  3253  			return false
  3254  		}
  3255  	}
  3256  	// Iterator still in progress, wait for either a data or an error event
  3257  	select {
  3258  	case log := <-it.logs:
  3259  		it.Event = new(ERC721FullApproval)
  3260  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3261  			it.fail = err
  3262  			return false
  3263  		}
  3264  		it.Event.Raw = log
  3265  		return true
  3266  
  3267  	case err := <-it.sub.Err():
  3268  		it.done = true
  3269  		it.fail = err
  3270  		return it.Next()
  3271  	}
  3272  }
  3273  
  3274  // Error returns any retrieval or parsing error occurred during filtering.
  3275  func (it *ERC721FullApprovalIterator) Error() error {
  3276  	return it.fail
  3277  }
  3278  
  3279  // Close terminates the iteration process, releasing any pending underlying
  3280  // resources.
  3281  func (it *ERC721FullApprovalIterator) Close() error {
  3282  	it.sub.Unsubscribe()
  3283  	return nil
  3284  }
  3285  
  3286  // ERC721FullApproval represents a Approval event raised by the ERC721Full contract.
  3287  type ERC721FullApproval struct {
  3288  	Owner    common.Address
  3289  	Approved common.Address
  3290  	TokenId  *big.Int
  3291  	Raw      types.Log // Blockchain specific contextual infos
  3292  }
  3293  
  3294  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  3295  //
  3296  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  3297  func (_ERC721Full *ERC721FullFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721FullApprovalIterator, error) {
  3298  
  3299  	var ownerRule []interface{}
  3300  	for _, ownerItem := range owner {
  3301  		ownerRule = append(ownerRule, ownerItem)
  3302  	}
  3303  	var approvedRule []interface{}
  3304  	for _, approvedItem := range approved {
  3305  		approvedRule = append(approvedRule, approvedItem)
  3306  	}
  3307  	var tokenIdRule []interface{}
  3308  	for _, tokenIdItem := range tokenId {
  3309  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  3310  	}
  3311  
  3312  	logs, sub, err := _ERC721Full.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  3313  	if err != nil {
  3314  		return nil, err
  3315  	}
  3316  	return &ERC721FullApprovalIterator{contract: _ERC721Full.contract, event: "Approval", logs: logs, sub: sub}, nil
  3317  }
  3318  
  3319  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  3320  //
  3321  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  3322  func (_ERC721Full *ERC721FullFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721FullApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  3323  
  3324  	var ownerRule []interface{}
  3325  	for _, ownerItem := range owner {
  3326  		ownerRule = append(ownerRule, ownerItem)
  3327  	}
  3328  	var approvedRule []interface{}
  3329  	for _, approvedItem := range approved {
  3330  		approvedRule = append(approvedRule, approvedItem)
  3331  	}
  3332  	var tokenIdRule []interface{}
  3333  	for _, tokenIdItem := range tokenId {
  3334  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  3335  	}
  3336  
  3337  	logs, sub, err := _ERC721Full.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  3338  	if err != nil {
  3339  		return nil, err
  3340  	}
  3341  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3342  		defer sub.Unsubscribe()
  3343  		for {
  3344  			select {
  3345  			case log := <-logs:
  3346  				// New log arrived, parse the event and forward to the user
  3347  				event := new(ERC721FullApproval)
  3348  				if err := _ERC721Full.contract.UnpackLog(event, "Approval", log); err != nil {
  3349  					return err
  3350  				}
  3351  				event.Raw = log
  3352  
  3353  				select {
  3354  				case sink <- event:
  3355  				case err := <-sub.Err():
  3356  					return err
  3357  				case <-quit:
  3358  					return nil
  3359  				}
  3360  			case err := <-sub.Err():
  3361  				return err
  3362  			case <-quit:
  3363  				return nil
  3364  			}
  3365  		}
  3366  	}), nil
  3367  }
  3368  
  3369  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  3370  //
  3371  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  3372  func (_ERC721Full *ERC721FullFilterer) ParseApproval(log types.Log) (*ERC721FullApproval, error) {
  3373  	event := new(ERC721FullApproval)
  3374  	if err := _ERC721Full.contract.UnpackLog(event, "Approval", log); err != nil {
  3375  		return nil, err
  3376  	}
  3377  	event.Raw = log
  3378  	return event, nil
  3379  }
  3380  
  3381  // ERC721FullApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721Full contract.
  3382  type ERC721FullApprovalForAllIterator struct {
  3383  	Event *ERC721FullApprovalForAll // Event containing the contract specifics and raw log
  3384  
  3385  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3386  	event    string              // Event name to use for unpacking event data
  3387  
  3388  	logs chan types.Log        // Log channel receiving the found contract events
  3389  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3390  	done bool                  // Whether the subscription completed delivering logs
  3391  	fail error                 // Occurred error to stop iteration
  3392  }
  3393  
  3394  // Next advances the iterator to the subsequent event, returning whether there
  3395  // are any more events found. In case of a retrieval or parsing error, false is
  3396  // returned and Error() can be queried for the exact failure.
  3397  func (it *ERC721FullApprovalForAllIterator) Next() bool {
  3398  	// If the iterator failed, stop iterating
  3399  	if it.fail != nil {
  3400  		return false
  3401  	}
  3402  	// If the iterator completed, deliver directly whatever's available
  3403  	if it.done {
  3404  		select {
  3405  		case log := <-it.logs:
  3406  			it.Event = new(ERC721FullApprovalForAll)
  3407  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3408  				it.fail = err
  3409  				return false
  3410  			}
  3411  			it.Event.Raw = log
  3412  			return true
  3413  
  3414  		default:
  3415  			return false
  3416  		}
  3417  	}
  3418  	// Iterator still in progress, wait for either a data or an error event
  3419  	select {
  3420  	case log := <-it.logs:
  3421  		it.Event = new(ERC721FullApprovalForAll)
  3422  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3423  			it.fail = err
  3424  			return false
  3425  		}
  3426  		it.Event.Raw = log
  3427  		return true
  3428  
  3429  	case err := <-it.sub.Err():
  3430  		it.done = true
  3431  		it.fail = err
  3432  		return it.Next()
  3433  	}
  3434  }
  3435  
  3436  // Error returns any retrieval or parsing error occurred during filtering.
  3437  func (it *ERC721FullApprovalForAllIterator) Error() error {
  3438  	return it.fail
  3439  }
  3440  
  3441  // Close terminates the iteration process, releasing any pending underlying
  3442  // resources.
  3443  func (it *ERC721FullApprovalForAllIterator) Close() error {
  3444  	it.sub.Unsubscribe()
  3445  	return nil
  3446  }
  3447  
  3448  // ERC721FullApprovalForAll represents a ApprovalForAll event raised by the ERC721Full contract.
  3449  type ERC721FullApprovalForAll struct {
  3450  	Owner    common.Address
  3451  	Operator common.Address
  3452  	Approved bool
  3453  	Raw      types.Log // Blockchain specific contextual infos
  3454  }
  3455  
  3456  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  3457  //
  3458  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  3459  func (_ERC721Full *ERC721FullFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721FullApprovalForAllIterator, error) {
  3460  
  3461  	var ownerRule []interface{}
  3462  	for _, ownerItem := range owner {
  3463  		ownerRule = append(ownerRule, ownerItem)
  3464  	}
  3465  	var operatorRule []interface{}
  3466  	for _, operatorItem := range operator {
  3467  		operatorRule = append(operatorRule, operatorItem)
  3468  	}
  3469  
  3470  	logs, sub, err := _ERC721Full.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  3471  	if err != nil {
  3472  		return nil, err
  3473  	}
  3474  	return &ERC721FullApprovalForAllIterator{contract: _ERC721Full.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  3475  }
  3476  
  3477  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  3478  //
  3479  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  3480  func (_ERC721Full *ERC721FullFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721FullApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  3481  
  3482  	var ownerRule []interface{}
  3483  	for _, ownerItem := range owner {
  3484  		ownerRule = append(ownerRule, ownerItem)
  3485  	}
  3486  	var operatorRule []interface{}
  3487  	for _, operatorItem := range operator {
  3488  		operatorRule = append(operatorRule, operatorItem)
  3489  	}
  3490  
  3491  	logs, sub, err := _ERC721Full.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  3492  	if err != nil {
  3493  		return nil, err
  3494  	}
  3495  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3496  		defer sub.Unsubscribe()
  3497  		for {
  3498  			select {
  3499  			case log := <-logs:
  3500  				// New log arrived, parse the event and forward to the user
  3501  				event := new(ERC721FullApprovalForAll)
  3502  				if err := _ERC721Full.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  3503  					return err
  3504  				}
  3505  				event.Raw = log
  3506  
  3507  				select {
  3508  				case sink <- event:
  3509  				case err := <-sub.Err():
  3510  					return err
  3511  				case <-quit:
  3512  					return nil
  3513  				}
  3514  			case err := <-sub.Err():
  3515  				return err
  3516  			case <-quit:
  3517  				return nil
  3518  			}
  3519  		}
  3520  	}), nil
  3521  }
  3522  
  3523  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  3524  //
  3525  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  3526  func (_ERC721Full *ERC721FullFilterer) ParseApprovalForAll(log types.Log) (*ERC721FullApprovalForAll, error) {
  3527  	event := new(ERC721FullApprovalForAll)
  3528  	if err := _ERC721Full.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  3529  		return nil, err
  3530  	}
  3531  	event.Raw = log
  3532  	return event, nil
  3533  }
  3534  
  3535  // ERC721FullTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721Full contract.
  3536  type ERC721FullTransferIterator struct {
  3537  	Event *ERC721FullTransfer // Event containing the contract specifics and raw log
  3538  
  3539  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  3540  	event    string              // Event name to use for unpacking event data
  3541  
  3542  	logs chan types.Log        // Log channel receiving the found contract events
  3543  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  3544  	done bool                  // Whether the subscription completed delivering logs
  3545  	fail error                 // Occurred error to stop iteration
  3546  }
  3547  
  3548  // Next advances the iterator to the subsequent event, returning whether there
  3549  // are any more events found. In case of a retrieval or parsing error, false is
  3550  // returned and Error() can be queried for the exact failure.
  3551  func (it *ERC721FullTransferIterator) Next() bool {
  3552  	// If the iterator failed, stop iterating
  3553  	if it.fail != nil {
  3554  		return false
  3555  	}
  3556  	// If the iterator completed, deliver directly whatever's available
  3557  	if it.done {
  3558  		select {
  3559  		case log := <-it.logs:
  3560  			it.Event = new(ERC721FullTransfer)
  3561  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3562  				it.fail = err
  3563  				return false
  3564  			}
  3565  			it.Event.Raw = log
  3566  			return true
  3567  
  3568  		default:
  3569  			return false
  3570  		}
  3571  	}
  3572  	// Iterator still in progress, wait for either a data or an error event
  3573  	select {
  3574  	case log := <-it.logs:
  3575  		it.Event = new(ERC721FullTransfer)
  3576  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  3577  			it.fail = err
  3578  			return false
  3579  		}
  3580  		it.Event.Raw = log
  3581  		return true
  3582  
  3583  	case err := <-it.sub.Err():
  3584  		it.done = true
  3585  		it.fail = err
  3586  		return it.Next()
  3587  	}
  3588  }
  3589  
  3590  // Error returns any retrieval or parsing error occurred during filtering.
  3591  func (it *ERC721FullTransferIterator) Error() error {
  3592  	return it.fail
  3593  }
  3594  
  3595  // Close terminates the iteration process, releasing any pending underlying
  3596  // resources.
  3597  func (it *ERC721FullTransferIterator) Close() error {
  3598  	it.sub.Unsubscribe()
  3599  	return nil
  3600  }
  3601  
  3602  // ERC721FullTransfer represents a Transfer event raised by the ERC721Full contract.
  3603  type ERC721FullTransfer struct {
  3604  	From    common.Address
  3605  	To      common.Address
  3606  	TokenId *big.Int
  3607  	Raw     types.Log // Blockchain specific contextual infos
  3608  }
  3609  
  3610  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  3611  //
  3612  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  3613  func (_ERC721Full *ERC721FullFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721FullTransferIterator, error) {
  3614  
  3615  	var fromRule []interface{}
  3616  	for _, fromItem := range from {
  3617  		fromRule = append(fromRule, fromItem)
  3618  	}
  3619  	var toRule []interface{}
  3620  	for _, toItem := range to {
  3621  		toRule = append(toRule, toItem)
  3622  	}
  3623  	var tokenIdRule []interface{}
  3624  	for _, tokenIdItem := range tokenId {
  3625  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  3626  	}
  3627  
  3628  	logs, sub, err := _ERC721Full.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  3629  	if err != nil {
  3630  		return nil, err
  3631  	}
  3632  	return &ERC721FullTransferIterator{contract: _ERC721Full.contract, event: "Transfer", logs: logs, sub: sub}, nil
  3633  }
  3634  
  3635  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  3636  //
  3637  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  3638  func (_ERC721Full *ERC721FullFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721FullTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  3639  
  3640  	var fromRule []interface{}
  3641  	for _, fromItem := range from {
  3642  		fromRule = append(fromRule, fromItem)
  3643  	}
  3644  	var toRule []interface{}
  3645  	for _, toItem := range to {
  3646  		toRule = append(toRule, toItem)
  3647  	}
  3648  	var tokenIdRule []interface{}
  3649  	for _, tokenIdItem := range tokenId {
  3650  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  3651  	}
  3652  
  3653  	logs, sub, err := _ERC721Full.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  3654  	if err != nil {
  3655  		return nil, err
  3656  	}
  3657  	return event.NewSubscription(func(quit <-chan struct{}) error {
  3658  		defer sub.Unsubscribe()
  3659  		for {
  3660  			select {
  3661  			case log := <-logs:
  3662  				// New log arrived, parse the event and forward to the user
  3663  				event := new(ERC721FullTransfer)
  3664  				if err := _ERC721Full.contract.UnpackLog(event, "Transfer", log); err != nil {
  3665  					return err
  3666  				}
  3667  				event.Raw = log
  3668  
  3669  				select {
  3670  				case sink <- event:
  3671  				case err := <-sub.Err():
  3672  					return err
  3673  				case <-quit:
  3674  					return nil
  3675  				}
  3676  			case err := <-sub.Err():
  3677  				return err
  3678  			case <-quit:
  3679  				return nil
  3680  			}
  3681  		}
  3682  	}), nil
  3683  }
  3684  
  3685  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  3686  //
  3687  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  3688  func (_ERC721Full *ERC721FullFilterer) ParseTransfer(log types.Log) (*ERC721FullTransfer, error) {
  3689  	event := new(ERC721FullTransfer)
  3690  	if err := _ERC721Full.contract.UnpackLog(event, "Transfer", log); err != nil {
  3691  		return nil, err
  3692  	}
  3693  	event.Raw = log
  3694  	return event, nil
  3695  }
  3696  
  3697  // ERC721MetadataABI is the input ABI used to generate the binding from.
  3698  const ERC721MetadataABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  3699  
  3700  // ERC721MetadataFuncSigs maps the 4-byte function signature to its string representation.
  3701  var ERC721MetadataFuncSigs = map[string]string{
  3702  	"095ea7b3": "approve(address,uint256)",
  3703  	"70a08231": "balanceOf(address)",
  3704  	"081812fc": "getApproved(uint256)",
  3705  	"e985e9c5": "isApprovedForAll(address,address)",
  3706  	"06fdde03": "name()",
  3707  	"6352211e": "ownerOf(uint256)",
  3708  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  3709  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  3710  	"a22cb465": "setApprovalForAll(address,bool)",
  3711  	"01ffc9a7": "supportsInterface(bytes4)",
  3712  	"95d89b41": "symbol()",
  3713  	"c87b56dd": "tokenURI(uint256)",
  3714  	"23b872dd": "transferFrom(address,address,uint256)",
  3715  }
  3716  
  3717  // ERC721Metadata is an auto generated Go binding around an Ethereum contract.
  3718  type ERC721Metadata struct {
  3719  	ERC721MetadataCaller     // Read-only binding to the contract
  3720  	ERC721MetadataTransactor // Write-only binding to the contract
  3721  	ERC721MetadataFilterer   // Log filterer for contract events
  3722  }
  3723  
  3724  // ERC721MetadataCaller is an auto generated read-only Go binding around an Ethereum contract.
  3725  type ERC721MetadataCaller struct {
  3726  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3727  }
  3728  
  3729  // ERC721MetadataTransactor is an auto generated write-only Go binding around an Ethereum contract.
  3730  type ERC721MetadataTransactor struct {
  3731  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3732  }
  3733  
  3734  // ERC721MetadataFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  3735  type ERC721MetadataFilterer struct {
  3736  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  3737  }
  3738  
  3739  // ERC721MetadataSession is an auto generated Go binding around an Ethereum contract,
  3740  // with pre-set call and transact options.
  3741  type ERC721MetadataSession struct {
  3742  	Contract     *ERC721Metadata   // Generic contract binding to set the session for
  3743  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  3744  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  3745  }
  3746  
  3747  // ERC721MetadataCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  3748  // with pre-set call options.
  3749  type ERC721MetadataCallerSession struct {
  3750  	Contract *ERC721MetadataCaller // Generic contract caller binding to set the session for
  3751  	CallOpts bind.CallOpts         // Call options to use throughout this session
  3752  }
  3753  
  3754  // ERC721MetadataTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  3755  // with pre-set transact options.
  3756  type ERC721MetadataTransactorSession struct {
  3757  	Contract     *ERC721MetadataTransactor // Generic contract transactor binding to set the session for
  3758  	TransactOpts bind.TransactOpts         // Transaction auth options to use throughout this session
  3759  }
  3760  
  3761  // ERC721MetadataRaw is an auto generated low-level Go binding around an Ethereum contract.
  3762  type ERC721MetadataRaw struct {
  3763  	Contract *ERC721Metadata // Generic contract binding to access the raw methods on
  3764  }
  3765  
  3766  // ERC721MetadataCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  3767  type ERC721MetadataCallerRaw struct {
  3768  	Contract *ERC721MetadataCaller // Generic read-only contract binding to access the raw methods on
  3769  }
  3770  
  3771  // ERC721MetadataTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  3772  type ERC721MetadataTransactorRaw struct {
  3773  	Contract *ERC721MetadataTransactor // Generic write-only contract binding to access the raw methods on
  3774  }
  3775  
  3776  // NewERC721Metadata creates a new instance of ERC721Metadata, bound to a specific deployed contract.
  3777  func NewERC721Metadata(address common.Address, backend bind.ContractBackend) (*ERC721Metadata, error) {
  3778  	contract, err := bindERC721Metadata(address, backend, backend, backend)
  3779  	if err != nil {
  3780  		return nil, err
  3781  	}
  3782  	return &ERC721Metadata{ERC721MetadataCaller: ERC721MetadataCaller{contract: contract}, ERC721MetadataTransactor: ERC721MetadataTransactor{contract: contract}, ERC721MetadataFilterer: ERC721MetadataFilterer{contract: contract}}, nil
  3783  }
  3784  
  3785  // NewERC721MetadataCaller creates a new read-only instance of ERC721Metadata, bound to a specific deployed contract.
  3786  func NewERC721MetadataCaller(address common.Address, caller bind.ContractCaller) (*ERC721MetadataCaller, error) {
  3787  	contract, err := bindERC721Metadata(address, caller, nil, nil)
  3788  	if err != nil {
  3789  		return nil, err
  3790  	}
  3791  	return &ERC721MetadataCaller{contract: contract}, nil
  3792  }
  3793  
  3794  // NewERC721MetadataTransactor creates a new write-only instance of ERC721Metadata, bound to a specific deployed contract.
  3795  func NewERC721MetadataTransactor(address common.Address, transactor bind.ContractTransactor) (*ERC721MetadataTransactor, error) {
  3796  	contract, err := bindERC721Metadata(address, nil, transactor, nil)
  3797  	if err != nil {
  3798  		return nil, err
  3799  	}
  3800  	return &ERC721MetadataTransactor{contract: contract}, nil
  3801  }
  3802  
  3803  // NewERC721MetadataFilterer creates a new log filterer instance of ERC721Metadata, bound to a specific deployed contract.
  3804  func NewERC721MetadataFilterer(address common.Address, filterer bind.ContractFilterer) (*ERC721MetadataFilterer, error) {
  3805  	contract, err := bindERC721Metadata(address, nil, nil, filterer)
  3806  	if err != nil {
  3807  		return nil, err
  3808  	}
  3809  	return &ERC721MetadataFilterer{contract: contract}, nil
  3810  }
  3811  
  3812  // bindERC721Metadata binds a generic wrapper to an already deployed contract.
  3813  func bindERC721Metadata(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  3814  	parsed, err := abi.JSON(strings.NewReader(ERC721MetadataABI))
  3815  	if err != nil {
  3816  		return nil, err
  3817  	}
  3818  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  3819  }
  3820  
  3821  // Call invokes the (constant) contract method with params as input values and
  3822  // sets the output to result. The result type might be a single field for simple
  3823  // returns, a slice of interfaces for anonymous returns and a struct for named
  3824  // returns.
  3825  func (_ERC721Metadata *ERC721MetadataRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3826  	return _ERC721Metadata.Contract.ERC721MetadataCaller.contract.Call(opts, result, method, params...)
  3827  }
  3828  
  3829  // Transfer initiates a plain transaction to move funds to the contract, calling
  3830  // its default method if one is available.
  3831  func (_ERC721Metadata *ERC721MetadataRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3832  	return _ERC721Metadata.Contract.ERC721MetadataTransactor.contract.Transfer(opts)
  3833  }
  3834  
  3835  // Transact invokes the (paid) contract method with params as input values.
  3836  func (_ERC721Metadata *ERC721MetadataRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3837  	return _ERC721Metadata.Contract.ERC721MetadataTransactor.contract.Transact(opts, method, params...)
  3838  }
  3839  
  3840  // Call invokes the (constant) contract method with params as input values and
  3841  // sets the output to result. The result type might be a single field for simple
  3842  // returns, a slice of interfaces for anonymous returns and a struct for named
  3843  // returns.
  3844  func (_ERC721Metadata *ERC721MetadataCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  3845  	return _ERC721Metadata.Contract.contract.Call(opts, result, method, params...)
  3846  }
  3847  
  3848  // Transfer initiates a plain transaction to move funds to the contract, calling
  3849  // its default method if one is available.
  3850  func (_ERC721Metadata *ERC721MetadataTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  3851  	return _ERC721Metadata.Contract.contract.Transfer(opts)
  3852  }
  3853  
  3854  // Transact invokes the (paid) contract method with params as input values.
  3855  func (_ERC721Metadata *ERC721MetadataTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  3856  	return _ERC721Metadata.Contract.contract.Transact(opts, method, params...)
  3857  }
  3858  
  3859  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  3860  //
  3861  // Solidity: function balanceOf(address owner) view returns(uint256)
  3862  func (_ERC721Metadata *ERC721MetadataCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  3863  	var out []interface{}
  3864  	err := _ERC721Metadata.contract.Call(opts, &out, "balanceOf", owner)
  3865  
  3866  	if err != nil {
  3867  		return *new(*big.Int), err
  3868  	}
  3869  
  3870  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  3871  
  3872  	return out0, err
  3873  
  3874  }
  3875  
  3876  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  3877  //
  3878  // Solidity: function balanceOf(address owner) view returns(uint256)
  3879  func (_ERC721Metadata *ERC721MetadataSession) BalanceOf(owner common.Address) (*big.Int, error) {
  3880  	return _ERC721Metadata.Contract.BalanceOf(&_ERC721Metadata.CallOpts, owner)
  3881  }
  3882  
  3883  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  3884  //
  3885  // Solidity: function balanceOf(address owner) view returns(uint256)
  3886  func (_ERC721Metadata *ERC721MetadataCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  3887  	return _ERC721Metadata.Contract.BalanceOf(&_ERC721Metadata.CallOpts, owner)
  3888  }
  3889  
  3890  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  3891  //
  3892  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  3893  func (_ERC721Metadata *ERC721MetadataCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  3894  	var out []interface{}
  3895  	err := _ERC721Metadata.contract.Call(opts, &out, "getApproved", tokenId)
  3896  
  3897  	if err != nil {
  3898  		return *new(common.Address), err
  3899  	}
  3900  
  3901  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3902  
  3903  	return out0, err
  3904  
  3905  }
  3906  
  3907  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  3908  //
  3909  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  3910  func (_ERC721Metadata *ERC721MetadataSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  3911  	return _ERC721Metadata.Contract.GetApproved(&_ERC721Metadata.CallOpts, tokenId)
  3912  }
  3913  
  3914  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  3915  //
  3916  // Solidity: function getApproved(uint256 tokenId) view returns(address)
  3917  func (_ERC721Metadata *ERC721MetadataCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  3918  	return _ERC721Metadata.Contract.GetApproved(&_ERC721Metadata.CallOpts, tokenId)
  3919  }
  3920  
  3921  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  3922  //
  3923  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  3924  func (_ERC721Metadata *ERC721MetadataCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  3925  	var out []interface{}
  3926  	err := _ERC721Metadata.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  3927  
  3928  	if err != nil {
  3929  		return *new(bool), err
  3930  	}
  3931  
  3932  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  3933  
  3934  	return out0, err
  3935  
  3936  }
  3937  
  3938  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  3939  //
  3940  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  3941  func (_ERC721Metadata *ERC721MetadataSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  3942  	return _ERC721Metadata.Contract.IsApprovedForAll(&_ERC721Metadata.CallOpts, owner, operator)
  3943  }
  3944  
  3945  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  3946  //
  3947  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  3948  func (_ERC721Metadata *ERC721MetadataCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  3949  	return _ERC721Metadata.Contract.IsApprovedForAll(&_ERC721Metadata.CallOpts, owner, operator)
  3950  }
  3951  
  3952  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  3953  //
  3954  // Solidity: function name() view returns(string)
  3955  func (_ERC721Metadata *ERC721MetadataCaller) Name(opts *bind.CallOpts) (string, error) {
  3956  	var out []interface{}
  3957  	err := _ERC721Metadata.contract.Call(opts, &out, "name")
  3958  
  3959  	if err != nil {
  3960  		return *new(string), err
  3961  	}
  3962  
  3963  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  3964  
  3965  	return out0, err
  3966  
  3967  }
  3968  
  3969  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  3970  //
  3971  // Solidity: function name() view returns(string)
  3972  func (_ERC721Metadata *ERC721MetadataSession) Name() (string, error) {
  3973  	return _ERC721Metadata.Contract.Name(&_ERC721Metadata.CallOpts)
  3974  }
  3975  
  3976  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  3977  //
  3978  // Solidity: function name() view returns(string)
  3979  func (_ERC721Metadata *ERC721MetadataCallerSession) Name() (string, error) {
  3980  	return _ERC721Metadata.Contract.Name(&_ERC721Metadata.CallOpts)
  3981  }
  3982  
  3983  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  3984  //
  3985  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  3986  func (_ERC721Metadata *ERC721MetadataCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  3987  	var out []interface{}
  3988  	err := _ERC721Metadata.contract.Call(opts, &out, "ownerOf", tokenId)
  3989  
  3990  	if err != nil {
  3991  		return *new(common.Address), err
  3992  	}
  3993  
  3994  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  3995  
  3996  	return out0, err
  3997  
  3998  }
  3999  
  4000  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  4001  //
  4002  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  4003  func (_ERC721Metadata *ERC721MetadataSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  4004  	return _ERC721Metadata.Contract.OwnerOf(&_ERC721Metadata.CallOpts, tokenId)
  4005  }
  4006  
  4007  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  4008  //
  4009  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
  4010  func (_ERC721Metadata *ERC721MetadataCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  4011  	return _ERC721Metadata.Contract.OwnerOf(&_ERC721Metadata.CallOpts, tokenId)
  4012  }
  4013  
  4014  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4015  //
  4016  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4017  func (_ERC721Metadata *ERC721MetadataCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  4018  	var out []interface{}
  4019  	err := _ERC721Metadata.contract.Call(opts, &out, "supportsInterface", interfaceId)
  4020  
  4021  	if err != nil {
  4022  		return *new(bool), err
  4023  	}
  4024  
  4025  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  4026  
  4027  	return out0, err
  4028  
  4029  }
  4030  
  4031  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4032  //
  4033  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4034  func (_ERC721Metadata *ERC721MetadataSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  4035  	return _ERC721Metadata.Contract.SupportsInterface(&_ERC721Metadata.CallOpts, interfaceId)
  4036  }
  4037  
  4038  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4039  //
  4040  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4041  func (_ERC721Metadata *ERC721MetadataCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  4042  	return _ERC721Metadata.Contract.SupportsInterface(&_ERC721Metadata.CallOpts, interfaceId)
  4043  }
  4044  
  4045  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  4046  //
  4047  // Solidity: function symbol() view returns(string)
  4048  func (_ERC721Metadata *ERC721MetadataCaller) Symbol(opts *bind.CallOpts) (string, error) {
  4049  	var out []interface{}
  4050  	err := _ERC721Metadata.contract.Call(opts, &out, "symbol")
  4051  
  4052  	if err != nil {
  4053  		return *new(string), err
  4054  	}
  4055  
  4056  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  4057  
  4058  	return out0, err
  4059  
  4060  }
  4061  
  4062  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  4063  //
  4064  // Solidity: function symbol() view returns(string)
  4065  func (_ERC721Metadata *ERC721MetadataSession) Symbol() (string, error) {
  4066  	return _ERC721Metadata.Contract.Symbol(&_ERC721Metadata.CallOpts)
  4067  }
  4068  
  4069  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  4070  //
  4071  // Solidity: function symbol() view returns(string)
  4072  func (_ERC721Metadata *ERC721MetadataCallerSession) Symbol() (string, error) {
  4073  	return _ERC721Metadata.Contract.Symbol(&_ERC721Metadata.CallOpts)
  4074  }
  4075  
  4076  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  4077  //
  4078  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  4079  func (_ERC721Metadata *ERC721MetadataCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  4080  	var out []interface{}
  4081  	err := _ERC721Metadata.contract.Call(opts, &out, "tokenURI", tokenId)
  4082  
  4083  	if err != nil {
  4084  		return *new(string), err
  4085  	}
  4086  
  4087  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  4088  
  4089  	return out0, err
  4090  
  4091  }
  4092  
  4093  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  4094  //
  4095  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  4096  func (_ERC721Metadata *ERC721MetadataSession) TokenURI(tokenId *big.Int) (string, error) {
  4097  	return _ERC721Metadata.Contract.TokenURI(&_ERC721Metadata.CallOpts, tokenId)
  4098  }
  4099  
  4100  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  4101  //
  4102  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  4103  func (_ERC721Metadata *ERC721MetadataCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  4104  	return _ERC721Metadata.Contract.TokenURI(&_ERC721Metadata.CallOpts, tokenId)
  4105  }
  4106  
  4107  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  4108  //
  4109  // Solidity: function approve(address to, uint256 tokenId) returns()
  4110  func (_ERC721Metadata *ERC721MetadataTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4111  	return _ERC721Metadata.contract.Transact(opts, "approve", to, tokenId)
  4112  }
  4113  
  4114  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  4115  //
  4116  // Solidity: function approve(address to, uint256 tokenId) returns()
  4117  func (_ERC721Metadata *ERC721MetadataSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4118  	return _ERC721Metadata.Contract.Approve(&_ERC721Metadata.TransactOpts, to, tokenId)
  4119  }
  4120  
  4121  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  4122  //
  4123  // Solidity: function approve(address to, uint256 tokenId) returns()
  4124  func (_ERC721Metadata *ERC721MetadataTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4125  	return _ERC721Metadata.Contract.Approve(&_ERC721Metadata.TransactOpts, to, tokenId)
  4126  }
  4127  
  4128  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  4129  //
  4130  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  4131  func (_ERC721Metadata *ERC721MetadataTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4132  	return _ERC721Metadata.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  4133  }
  4134  
  4135  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  4136  //
  4137  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  4138  func (_ERC721Metadata *ERC721MetadataSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4139  	return _ERC721Metadata.Contract.SafeTransferFrom(&_ERC721Metadata.TransactOpts, from, to, tokenId)
  4140  }
  4141  
  4142  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  4143  //
  4144  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  4145  func (_ERC721Metadata *ERC721MetadataTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4146  	return _ERC721Metadata.Contract.SafeTransferFrom(&_ERC721Metadata.TransactOpts, from, to, tokenId)
  4147  }
  4148  
  4149  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  4150  //
  4151  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  4152  func (_ERC721Metadata *ERC721MetadataTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  4153  	return _ERC721Metadata.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
  4154  }
  4155  
  4156  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  4157  //
  4158  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  4159  func (_ERC721Metadata *ERC721MetadataSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  4160  	return _ERC721Metadata.Contract.SafeTransferFrom0(&_ERC721Metadata.TransactOpts, from, to, tokenId, _data)
  4161  }
  4162  
  4163  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  4164  //
  4165  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
  4166  func (_ERC721Metadata *ERC721MetadataTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
  4167  	return _ERC721Metadata.Contract.SafeTransferFrom0(&_ERC721Metadata.TransactOpts, from, to, tokenId, _data)
  4168  }
  4169  
  4170  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  4171  //
  4172  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  4173  func (_ERC721Metadata *ERC721MetadataTransactor) SetApprovalForAll(opts *bind.TransactOpts, to common.Address, approved bool) (*types.Transaction, error) {
  4174  	return _ERC721Metadata.contract.Transact(opts, "setApprovalForAll", to, approved)
  4175  }
  4176  
  4177  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  4178  //
  4179  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  4180  func (_ERC721Metadata *ERC721MetadataSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  4181  	return _ERC721Metadata.Contract.SetApprovalForAll(&_ERC721Metadata.TransactOpts, to, approved)
  4182  }
  4183  
  4184  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  4185  //
  4186  // Solidity: function setApprovalForAll(address to, bool approved) returns()
  4187  func (_ERC721Metadata *ERC721MetadataTransactorSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
  4188  	return _ERC721Metadata.Contract.SetApprovalForAll(&_ERC721Metadata.TransactOpts, to, approved)
  4189  }
  4190  
  4191  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  4192  //
  4193  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  4194  func (_ERC721Metadata *ERC721MetadataTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4195  	return _ERC721Metadata.contract.Transact(opts, "transferFrom", from, to, tokenId)
  4196  }
  4197  
  4198  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  4199  //
  4200  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  4201  func (_ERC721Metadata *ERC721MetadataSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4202  	return _ERC721Metadata.Contract.TransferFrom(&_ERC721Metadata.TransactOpts, from, to, tokenId)
  4203  }
  4204  
  4205  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  4206  //
  4207  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  4208  func (_ERC721Metadata *ERC721MetadataTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  4209  	return _ERC721Metadata.Contract.TransferFrom(&_ERC721Metadata.TransactOpts, from, to, tokenId)
  4210  }
  4211  
  4212  // ERC721MetadataApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the ERC721Metadata contract.
  4213  type ERC721MetadataApprovalIterator struct {
  4214  	Event *ERC721MetadataApproval // Event containing the contract specifics and raw log
  4215  
  4216  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4217  	event    string              // Event name to use for unpacking event data
  4218  
  4219  	logs chan types.Log        // Log channel receiving the found contract events
  4220  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4221  	done bool                  // Whether the subscription completed delivering logs
  4222  	fail error                 // Occurred error to stop iteration
  4223  }
  4224  
  4225  // Next advances the iterator to the subsequent event, returning whether there
  4226  // are any more events found. In case of a retrieval or parsing error, false is
  4227  // returned and Error() can be queried for the exact failure.
  4228  func (it *ERC721MetadataApprovalIterator) Next() bool {
  4229  	// If the iterator failed, stop iterating
  4230  	if it.fail != nil {
  4231  		return false
  4232  	}
  4233  	// If the iterator completed, deliver directly whatever's available
  4234  	if it.done {
  4235  		select {
  4236  		case log := <-it.logs:
  4237  			it.Event = new(ERC721MetadataApproval)
  4238  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4239  				it.fail = err
  4240  				return false
  4241  			}
  4242  			it.Event.Raw = log
  4243  			return true
  4244  
  4245  		default:
  4246  			return false
  4247  		}
  4248  	}
  4249  	// Iterator still in progress, wait for either a data or an error event
  4250  	select {
  4251  	case log := <-it.logs:
  4252  		it.Event = new(ERC721MetadataApproval)
  4253  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4254  			it.fail = err
  4255  			return false
  4256  		}
  4257  		it.Event.Raw = log
  4258  		return true
  4259  
  4260  	case err := <-it.sub.Err():
  4261  		it.done = true
  4262  		it.fail = err
  4263  		return it.Next()
  4264  	}
  4265  }
  4266  
  4267  // Error returns any retrieval or parsing error occurred during filtering.
  4268  func (it *ERC721MetadataApprovalIterator) Error() error {
  4269  	return it.fail
  4270  }
  4271  
  4272  // Close terminates the iteration process, releasing any pending underlying
  4273  // resources.
  4274  func (it *ERC721MetadataApprovalIterator) Close() error {
  4275  	it.sub.Unsubscribe()
  4276  	return nil
  4277  }
  4278  
  4279  // ERC721MetadataApproval represents a Approval event raised by the ERC721Metadata contract.
  4280  type ERC721MetadataApproval struct {
  4281  	Owner    common.Address
  4282  	Approved common.Address
  4283  	TokenId  *big.Int
  4284  	Raw      types.Log // Blockchain specific contextual infos
  4285  }
  4286  
  4287  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  4288  //
  4289  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  4290  func (_ERC721Metadata *ERC721MetadataFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*ERC721MetadataApprovalIterator, error) {
  4291  
  4292  	var ownerRule []interface{}
  4293  	for _, ownerItem := range owner {
  4294  		ownerRule = append(ownerRule, ownerItem)
  4295  	}
  4296  	var approvedRule []interface{}
  4297  	for _, approvedItem := range approved {
  4298  		approvedRule = append(approvedRule, approvedItem)
  4299  	}
  4300  	var tokenIdRule []interface{}
  4301  	for _, tokenIdItem := range tokenId {
  4302  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4303  	}
  4304  
  4305  	logs, sub, err := _ERC721Metadata.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  4306  	if err != nil {
  4307  		return nil, err
  4308  	}
  4309  	return &ERC721MetadataApprovalIterator{contract: _ERC721Metadata.contract, event: "Approval", logs: logs, sub: sub}, nil
  4310  }
  4311  
  4312  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  4313  //
  4314  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  4315  func (_ERC721Metadata *ERC721MetadataFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *ERC721MetadataApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  4316  
  4317  	var ownerRule []interface{}
  4318  	for _, ownerItem := range owner {
  4319  		ownerRule = append(ownerRule, ownerItem)
  4320  	}
  4321  	var approvedRule []interface{}
  4322  	for _, approvedItem := range approved {
  4323  		approvedRule = append(approvedRule, approvedItem)
  4324  	}
  4325  	var tokenIdRule []interface{}
  4326  	for _, tokenIdItem := range tokenId {
  4327  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4328  	}
  4329  
  4330  	logs, sub, err := _ERC721Metadata.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  4331  	if err != nil {
  4332  		return nil, err
  4333  	}
  4334  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4335  		defer sub.Unsubscribe()
  4336  		for {
  4337  			select {
  4338  			case log := <-logs:
  4339  				// New log arrived, parse the event and forward to the user
  4340  				event := new(ERC721MetadataApproval)
  4341  				if err := _ERC721Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  4342  					return err
  4343  				}
  4344  				event.Raw = log
  4345  
  4346  				select {
  4347  				case sink <- event:
  4348  				case err := <-sub.Err():
  4349  					return err
  4350  				case <-quit:
  4351  					return nil
  4352  				}
  4353  			case err := <-sub.Err():
  4354  				return err
  4355  			case <-quit:
  4356  				return nil
  4357  			}
  4358  		}
  4359  	}), nil
  4360  }
  4361  
  4362  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  4363  //
  4364  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  4365  func (_ERC721Metadata *ERC721MetadataFilterer) ParseApproval(log types.Log) (*ERC721MetadataApproval, error) {
  4366  	event := new(ERC721MetadataApproval)
  4367  	if err := _ERC721Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  4368  		return nil, err
  4369  	}
  4370  	event.Raw = log
  4371  	return event, nil
  4372  }
  4373  
  4374  // ERC721MetadataApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the ERC721Metadata contract.
  4375  type ERC721MetadataApprovalForAllIterator struct {
  4376  	Event *ERC721MetadataApprovalForAll // Event containing the contract specifics and raw log
  4377  
  4378  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4379  	event    string              // Event name to use for unpacking event data
  4380  
  4381  	logs chan types.Log        // Log channel receiving the found contract events
  4382  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4383  	done bool                  // Whether the subscription completed delivering logs
  4384  	fail error                 // Occurred error to stop iteration
  4385  }
  4386  
  4387  // Next advances the iterator to the subsequent event, returning whether there
  4388  // are any more events found. In case of a retrieval or parsing error, false is
  4389  // returned and Error() can be queried for the exact failure.
  4390  func (it *ERC721MetadataApprovalForAllIterator) Next() bool {
  4391  	// If the iterator failed, stop iterating
  4392  	if it.fail != nil {
  4393  		return false
  4394  	}
  4395  	// If the iterator completed, deliver directly whatever's available
  4396  	if it.done {
  4397  		select {
  4398  		case log := <-it.logs:
  4399  			it.Event = new(ERC721MetadataApprovalForAll)
  4400  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4401  				it.fail = err
  4402  				return false
  4403  			}
  4404  			it.Event.Raw = log
  4405  			return true
  4406  
  4407  		default:
  4408  			return false
  4409  		}
  4410  	}
  4411  	// Iterator still in progress, wait for either a data or an error event
  4412  	select {
  4413  	case log := <-it.logs:
  4414  		it.Event = new(ERC721MetadataApprovalForAll)
  4415  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4416  			it.fail = err
  4417  			return false
  4418  		}
  4419  		it.Event.Raw = log
  4420  		return true
  4421  
  4422  	case err := <-it.sub.Err():
  4423  		it.done = true
  4424  		it.fail = err
  4425  		return it.Next()
  4426  	}
  4427  }
  4428  
  4429  // Error returns any retrieval or parsing error occurred during filtering.
  4430  func (it *ERC721MetadataApprovalForAllIterator) Error() error {
  4431  	return it.fail
  4432  }
  4433  
  4434  // Close terminates the iteration process, releasing any pending underlying
  4435  // resources.
  4436  func (it *ERC721MetadataApprovalForAllIterator) Close() error {
  4437  	it.sub.Unsubscribe()
  4438  	return nil
  4439  }
  4440  
  4441  // ERC721MetadataApprovalForAll represents a ApprovalForAll event raised by the ERC721Metadata contract.
  4442  type ERC721MetadataApprovalForAll struct {
  4443  	Owner    common.Address
  4444  	Operator common.Address
  4445  	Approved bool
  4446  	Raw      types.Log // Blockchain specific contextual infos
  4447  }
  4448  
  4449  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  4450  //
  4451  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  4452  func (_ERC721Metadata *ERC721MetadataFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*ERC721MetadataApprovalForAllIterator, error) {
  4453  
  4454  	var ownerRule []interface{}
  4455  	for _, ownerItem := range owner {
  4456  		ownerRule = append(ownerRule, ownerItem)
  4457  	}
  4458  	var operatorRule []interface{}
  4459  	for _, operatorItem := range operator {
  4460  		operatorRule = append(operatorRule, operatorItem)
  4461  	}
  4462  
  4463  	logs, sub, err := _ERC721Metadata.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  4464  	if err != nil {
  4465  		return nil, err
  4466  	}
  4467  	return &ERC721MetadataApprovalForAllIterator{contract: _ERC721Metadata.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  4468  }
  4469  
  4470  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  4471  //
  4472  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  4473  func (_ERC721Metadata *ERC721MetadataFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *ERC721MetadataApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  4474  
  4475  	var ownerRule []interface{}
  4476  	for _, ownerItem := range owner {
  4477  		ownerRule = append(ownerRule, ownerItem)
  4478  	}
  4479  	var operatorRule []interface{}
  4480  	for _, operatorItem := range operator {
  4481  		operatorRule = append(operatorRule, operatorItem)
  4482  	}
  4483  
  4484  	logs, sub, err := _ERC721Metadata.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  4485  	if err != nil {
  4486  		return nil, err
  4487  	}
  4488  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4489  		defer sub.Unsubscribe()
  4490  		for {
  4491  			select {
  4492  			case log := <-logs:
  4493  				// New log arrived, parse the event and forward to the user
  4494  				event := new(ERC721MetadataApprovalForAll)
  4495  				if err := _ERC721Metadata.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  4496  					return err
  4497  				}
  4498  				event.Raw = log
  4499  
  4500  				select {
  4501  				case sink <- event:
  4502  				case err := <-sub.Err():
  4503  					return err
  4504  				case <-quit:
  4505  					return nil
  4506  				}
  4507  			case err := <-sub.Err():
  4508  				return err
  4509  			case <-quit:
  4510  				return nil
  4511  			}
  4512  		}
  4513  	}), nil
  4514  }
  4515  
  4516  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  4517  //
  4518  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  4519  func (_ERC721Metadata *ERC721MetadataFilterer) ParseApprovalForAll(log types.Log) (*ERC721MetadataApprovalForAll, error) {
  4520  	event := new(ERC721MetadataApprovalForAll)
  4521  	if err := _ERC721Metadata.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  4522  		return nil, err
  4523  	}
  4524  	event.Raw = log
  4525  	return event, nil
  4526  }
  4527  
  4528  // ERC721MetadataTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the ERC721Metadata contract.
  4529  type ERC721MetadataTransferIterator struct {
  4530  	Event *ERC721MetadataTransfer // Event containing the contract specifics and raw log
  4531  
  4532  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  4533  	event    string              // Event name to use for unpacking event data
  4534  
  4535  	logs chan types.Log        // Log channel receiving the found contract events
  4536  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  4537  	done bool                  // Whether the subscription completed delivering logs
  4538  	fail error                 // Occurred error to stop iteration
  4539  }
  4540  
  4541  // Next advances the iterator to the subsequent event, returning whether there
  4542  // are any more events found. In case of a retrieval or parsing error, false is
  4543  // returned and Error() can be queried for the exact failure.
  4544  func (it *ERC721MetadataTransferIterator) Next() bool {
  4545  	// If the iterator failed, stop iterating
  4546  	if it.fail != nil {
  4547  		return false
  4548  	}
  4549  	// If the iterator completed, deliver directly whatever's available
  4550  	if it.done {
  4551  		select {
  4552  		case log := <-it.logs:
  4553  			it.Event = new(ERC721MetadataTransfer)
  4554  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4555  				it.fail = err
  4556  				return false
  4557  			}
  4558  			it.Event.Raw = log
  4559  			return true
  4560  
  4561  		default:
  4562  			return false
  4563  		}
  4564  	}
  4565  	// Iterator still in progress, wait for either a data or an error event
  4566  	select {
  4567  	case log := <-it.logs:
  4568  		it.Event = new(ERC721MetadataTransfer)
  4569  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  4570  			it.fail = err
  4571  			return false
  4572  		}
  4573  		it.Event.Raw = log
  4574  		return true
  4575  
  4576  	case err := <-it.sub.Err():
  4577  		it.done = true
  4578  		it.fail = err
  4579  		return it.Next()
  4580  	}
  4581  }
  4582  
  4583  // Error returns any retrieval or parsing error occurred during filtering.
  4584  func (it *ERC721MetadataTransferIterator) Error() error {
  4585  	return it.fail
  4586  }
  4587  
  4588  // Close terminates the iteration process, releasing any pending underlying
  4589  // resources.
  4590  func (it *ERC721MetadataTransferIterator) Close() error {
  4591  	it.sub.Unsubscribe()
  4592  	return nil
  4593  }
  4594  
  4595  // ERC721MetadataTransfer represents a Transfer event raised by the ERC721Metadata contract.
  4596  type ERC721MetadataTransfer struct {
  4597  	From    common.Address
  4598  	To      common.Address
  4599  	TokenId *big.Int
  4600  	Raw     types.Log // Blockchain specific contextual infos
  4601  }
  4602  
  4603  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4604  //
  4605  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  4606  func (_ERC721Metadata *ERC721MetadataFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*ERC721MetadataTransferIterator, error) {
  4607  
  4608  	var fromRule []interface{}
  4609  	for _, fromItem := range from {
  4610  		fromRule = append(fromRule, fromItem)
  4611  	}
  4612  	var toRule []interface{}
  4613  	for _, toItem := range to {
  4614  		toRule = append(toRule, toItem)
  4615  	}
  4616  	var tokenIdRule []interface{}
  4617  	for _, tokenIdItem := range tokenId {
  4618  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4619  	}
  4620  
  4621  	logs, sub, err := _ERC721Metadata.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  4622  	if err != nil {
  4623  		return nil, err
  4624  	}
  4625  	return &ERC721MetadataTransferIterator{contract: _ERC721Metadata.contract, event: "Transfer", logs: logs, sub: sub}, nil
  4626  }
  4627  
  4628  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4629  //
  4630  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  4631  func (_ERC721Metadata *ERC721MetadataFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *ERC721MetadataTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  4632  
  4633  	var fromRule []interface{}
  4634  	for _, fromItem := range from {
  4635  		fromRule = append(fromRule, fromItem)
  4636  	}
  4637  	var toRule []interface{}
  4638  	for _, toItem := range to {
  4639  		toRule = append(toRule, toItem)
  4640  	}
  4641  	var tokenIdRule []interface{}
  4642  	for _, tokenIdItem := range tokenId {
  4643  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  4644  	}
  4645  
  4646  	logs, sub, err := _ERC721Metadata.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  4647  	if err != nil {
  4648  		return nil, err
  4649  	}
  4650  	return event.NewSubscription(func(quit <-chan struct{}) error {
  4651  		defer sub.Unsubscribe()
  4652  		for {
  4653  			select {
  4654  			case log := <-logs:
  4655  				// New log arrived, parse the event and forward to the user
  4656  				event := new(ERC721MetadataTransfer)
  4657  				if err := _ERC721Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  4658  					return err
  4659  				}
  4660  				event.Raw = log
  4661  
  4662  				select {
  4663  				case sink <- event:
  4664  				case err := <-sub.Err():
  4665  					return err
  4666  				case <-quit:
  4667  					return nil
  4668  				}
  4669  			case err := <-sub.Err():
  4670  				return err
  4671  			case <-quit:
  4672  				return nil
  4673  			}
  4674  		}
  4675  	}), nil
  4676  }
  4677  
  4678  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  4679  //
  4680  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  4681  func (_ERC721Metadata *ERC721MetadataFilterer) ParseTransfer(log types.Log) (*ERC721MetadataTransfer, error) {
  4682  	event := new(ERC721MetadataTransfer)
  4683  	if err := _ERC721Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  4684  		return nil, err
  4685  	}
  4686  	event.Raw = log
  4687  	return event, nil
  4688  }
  4689  
  4690  // IERC165ABI is the input ABI used to generate the binding from.
  4691  const IERC165ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]"
  4692  
  4693  // IERC165FuncSigs maps the 4-byte function signature to its string representation.
  4694  var IERC165FuncSigs = map[string]string{
  4695  	"01ffc9a7": "supportsInterface(bytes4)",
  4696  }
  4697  
  4698  // IERC165 is an auto generated Go binding around an Ethereum contract.
  4699  type IERC165 struct {
  4700  	IERC165Caller     // Read-only binding to the contract
  4701  	IERC165Transactor // Write-only binding to the contract
  4702  	IERC165Filterer   // Log filterer for contract events
  4703  }
  4704  
  4705  // IERC165Caller is an auto generated read-only Go binding around an Ethereum contract.
  4706  type IERC165Caller struct {
  4707  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4708  }
  4709  
  4710  // IERC165Transactor is an auto generated write-only Go binding around an Ethereum contract.
  4711  type IERC165Transactor struct {
  4712  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4713  }
  4714  
  4715  // IERC165Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4716  type IERC165Filterer struct {
  4717  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4718  }
  4719  
  4720  // IERC165Session is an auto generated Go binding around an Ethereum contract,
  4721  // with pre-set call and transact options.
  4722  type IERC165Session struct {
  4723  	Contract     *IERC165          // Generic contract binding to set the session for
  4724  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4725  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4726  }
  4727  
  4728  // IERC165CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4729  // with pre-set call options.
  4730  type IERC165CallerSession struct {
  4731  	Contract *IERC165Caller // Generic contract caller binding to set the session for
  4732  	CallOpts bind.CallOpts  // Call options to use throughout this session
  4733  }
  4734  
  4735  // IERC165TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4736  // with pre-set transact options.
  4737  type IERC165TransactorSession struct {
  4738  	Contract     *IERC165Transactor // Generic contract transactor binding to set the session for
  4739  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  4740  }
  4741  
  4742  // IERC165Raw is an auto generated low-level Go binding around an Ethereum contract.
  4743  type IERC165Raw struct {
  4744  	Contract *IERC165 // Generic contract binding to access the raw methods on
  4745  }
  4746  
  4747  // IERC165CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4748  type IERC165CallerRaw struct {
  4749  	Contract *IERC165Caller // Generic read-only contract binding to access the raw methods on
  4750  }
  4751  
  4752  // IERC165TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4753  type IERC165TransactorRaw struct {
  4754  	Contract *IERC165Transactor // Generic write-only contract binding to access the raw methods on
  4755  }
  4756  
  4757  // NewIERC165 creates a new instance of IERC165, bound to a specific deployed contract.
  4758  func NewIERC165(address common.Address, backend bind.ContractBackend) (*IERC165, error) {
  4759  	contract, err := bindIERC165(address, backend, backend, backend)
  4760  	if err != nil {
  4761  		return nil, err
  4762  	}
  4763  	return &IERC165{IERC165Caller: IERC165Caller{contract: contract}, IERC165Transactor: IERC165Transactor{contract: contract}, IERC165Filterer: IERC165Filterer{contract: contract}}, nil
  4764  }
  4765  
  4766  // NewIERC165Caller creates a new read-only instance of IERC165, bound to a specific deployed contract.
  4767  func NewIERC165Caller(address common.Address, caller bind.ContractCaller) (*IERC165Caller, error) {
  4768  	contract, err := bindIERC165(address, caller, nil, nil)
  4769  	if err != nil {
  4770  		return nil, err
  4771  	}
  4772  	return &IERC165Caller{contract: contract}, nil
  4773  }
  4774  
  4775  // NewIERC165Transactor creates a new write-only instance of IERC165, bound to a specific deployed contract.
  4776  func NewIERC165Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC165Transactor, error) {
  4777  	contract, err := bindIERC165(address, nil, transactor, nil)
  4778  	if err != nil {
  4779  		return nil, err
  4780  	}
  4781  	return &IERC165Transactor{contract: contract}, nil
  4782  }
  4783  
  4784  // NewIERC165Filterer creates a new log filterer instance of IERC165, bound to a specific deployed contract.
  4785  func NewIERC165Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC165Filterer, error) {
  4786  	contract, err := bindIERC165(address, nil, nil, filterer)
  4787  	if err != nil {
  4788  		return nil, err
  4789  	}
  4790  	return &IERC165Filterer{contract: contract}, nil
  4791  }
  4792  
  4793  // bindIERC165 binds a generic wrapper to an already deployed contract.
  4794  func bindIERC165(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4795  	parsed, err := abi.JSON(strings.NewReader(IERC165ABI))
  4796  	if err != nil {
  4797  		return nil, err
  4798  	}
  4799  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4800  }
  4801  
  4802  // Call invokes the (constant) contract method with params as input values and
  4803  // sets the output to result. The result type might be a single field for simple
  4804  // returns, a slice of interfaces for anonymous returns and a struct for named
  4805  // returns.
  4806  func (_IERC165 *IERC165Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4807  	return _IERC165.Contract.IERC165Caller.contract.Call(opts, result, method, params...)
  4808  }
  4809  
  4810  // Transfer initiates a plain transaction to move funds to the contract, calling
  4811  // its default method if one is available.
  4812  func (_IERC165 *IERC165Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4813  	return _IERC165.Contract.IERC165Transactor.contract.Transfer(opts)
  4814  }
  4815  
  4816  // Transact invokes the (paid) contract method with params as input values.
  4817  func (_IERC165 *IERC165Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4818  	return _IERC165.Contract.IERC165Transactor.contract.Transact(opts, method, params...)
  4819  }
  4820  
  4821  // Call invokes the (constant) contract method with params as input values and
  4822  // sets the output to result. The result type might be a single field for simple
  4823  // returns, a slice of interfaces for anonymous returns and a struct for named
  4824  // returns.
  4825  func (_IERC165 *IERC165CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4826  	return _IERC165.Contract.contract.Call(opts, result, method, params...)
  4827  }
  4828  
  4829  // Transfer initiates a plain transaction to move funds to the contract, calling
  4830  // its default method if one is available.
  4831  func (_IERC165 *IERC165TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  4832  	return _IERC165.Contract.contract.Transfer(opts)
  4833  }
  4834  
  4835  // Transact invokes the (paid) contract method with params as input values.
  4836  func (_IERC165 *IERC165TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  4837  	return _IERC165.Contract.contract.Transact(opts, method, params...)
  4838  }
  4839  
  4840  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4841  //
  4842  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4843  func (_IERC165 *IERC165Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  4844  	var out []interface{}
  4845  	err := _IERC165.contract.Call(opts, &out, "supportsInterface", interfaceId)
  4846  
  4847  	if err != nil {
  4848  		return *new(bool), err
  4849  	}
  4850  
  4851  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  4852  
  4853  	return out0, err
  4854  
  4855  }
  4856  
  4857  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4858  //
  4859  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4860  func (_IERC165 *IERC165Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
  4861  	return _IERC165.Contract.SupportsInterface(&_IERC165.CallOpts, interfaceId)
  4862  }
  4863  
  4864  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  4865  //
  4866  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  4867  func (_IERC165 *IERC165CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  4868  	return _IERC165.Contract.SupportsInterface(&_IERC165.CallOpts, interfaceId)
  4869  }
  4870  
  4871  // IERC721ABI is the input ABI used to generate the binding from.
  4872  const IERC721ABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  4873  
  4874  // IERC721FuncSigs maps the 4-byte function signature to its string representation.
  4875  var IERC721FuncSigs = map[string]string{
  4876  	"095ea7b3": "approve(address,uint256)",
  4877  	"70a08231": "balanceOf(address)",
  4878  	"081812fc": "getApproved(uint256)",
  4879  	"e985e9c5": "isApprovedForAll(address,address)",
  4880  	"6352211e": "ownerOf(uint256)",
  4881  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  4882  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  4883  	"a22cb465": "setApprovalForAll(address,bool)",
  4884  	"01ffc9a7": "supportsInterface(bytes4)",
  4885  	"23b872dd": "transferFrom(address,address,uint256)",
  4886  }
  4887  
  4888  // IERC721 is an auto generated Go binding around an Ethereum contract.
  4889  type IERC721 struct {
  4890  	IERC721Caller     // Read-only binding to the contract
  4891  	IERC721Transactor // Write-only binding to the contract
  4892  	IERC721Filterer   // Log filterer for contract events
  4893  }
  4894  
  4895  // IERC721Caller is an auto generated read-only Go binding around an Ethereum contract.
  4896  type IERC721Caller struct {
  4897  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4898  }
  4899  
  4900  // IERC721Transactor is an auto generated write-only Go binding around an Ethereum contract.
  4901  type IERC721Transactor struct {
  4902  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4903  }
  4904  
  4905  // IERC721Filterer is an auto generated log filtering Go binding around an Ethereum contract events.
  4906  type IERC721Filterer struct {
  4907  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  4908  }
  4909  
  4910  // IERC721Session is an auto generated Go binding around an Ethereum contract,
  4911  // with pre-set call and transact options.
  4912  type IERC721Session struct {
  4913  	Contract     *IERC721          // Generic contract binding to set the session for
  4914  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  4915  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  4916  }
  4917  
  4918  // IERC721CallerSession is an auto generated read-only Go binding around an Ethereum contract,
  4919  // with pre-set call options.
  4920  type IERC721CallerSession struct {
  4921  	Contract *IERC721Caller // Generic contract caller binding to set the session for
  4922  	CallOpts bind.CallOpts  // Call options to use throughout this session
  4923  }
  4924  
  4925  // IERC721TransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  4926  // with pre-set transact options.
  4927  type IERC721TransactorSession struct {
  4928  	Contract     *IERC721Transactor // Generic contract transactor binding to set the session for
  4929  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  4930  }
  4931  
  4932  // IERC721Raw is an auto generated low-level Go binding around an Ethereum contract.
  4933  type IERC721Raw struct {
  4934  	Contract *IERC721 // Generic contract binding to access the raw methods on
  4935  }
  4936  
  4937  // IERC721CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  4938  type IERC721CallerRaw struct {
  4939  	Contract *IERC721Caller // Generic read-only contract binding to access the raw methods on
  4940  }
  4941  
  4942  // IERC721TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  4943  type IERC721TransactorRaw struct {
  4944  	Contract *IERC721Transactor // Generic write-only contract binding to access the raw methods on
  4945  }
  4946  
  4947  // NewIERC721 creates a new instance of IERC721, bound to a specific deployed contract.
  4948  func NewIERC721(address common.Address, backend bind.ContractBackend) (*IERC721, error) {
  4949  	contract, err := bindIERC721(address, backend, backend, backend)
  4950  	if err != nil {
  4951  		return nil, err
  4952  	}
  4953  	return &IERC721{IERC721Caller: IERC721Caller{contract: contract}, IERC721Transactor: IERC721Transactor{contract: contract}, IERC721Filterer: IERC721Filterer{contract: contract}}, nil
  4954  }
  4955  
  4956  // NewIERC721Caller creates a new read-only instance of IERC721, bound to a specific deployed contract.
  4957  func NewIERC721Caller(address common.Address, caller bind.ContractCaller) (*IERC721Caller, error) {
  4958  	contract, err := bindIERC721(address, caller, nil, nil)
  4959  	if err != nil {
  4960  		return nil, err
  4961  	}
  4962  	return &IERC721Caller{contract: contract}, nil
  4963  }
  4964  
  4965  // NewIERC721Transactor creates a new write-only instance of IERC721, bound to a specific deployed contract.
  4966  func NewIERC721Transactor(address common.Address, transactor bind.ContractTransactor) (*IERC721Transactor, error) {
  4967  	contract, err := bindIERC721(address, nil, transactor, nil)
  4968  	if err != nil {
  4969  		return nil, err
  4970  	}
  4971  	return &IERC721Transactor{contract: contract}, nil
  4972  }
  4973  
  4974  // NewIERC721Filterer creates a new log filterer instance of IERC721, bound to a specific deployed contract.
  4975  func NewIERC721Filterer(address common.Address, filterer bind.ContractFilterer) (*IERC721Filterer, error) {
  4976  	contract, err := bindIERC721(address, nil, nil, filterer)
  4977  	if err != nil {
  4978  		return nil, err
  4979  	}
  4980  	return &IERC721Filterer{contract: contract}, nil
  4981  }
  4982  
  4983  // bindIERC721 binds a generic wrapper to an already deployed contract.
  4984  func bindIERC721(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  4985  	parsed, err := abi.JSON(strings.NewReader(IERC721ABI))
  4986  	if err != nil {
  4987  		return nil, err
  4988  	}
  4989  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  4990  }
  4991  
  4992  // Call invokes the (constant) contract method with params as input values and
  4993  // sets the output to result. The result type might be a single field for simple
  4994  // returns, a slice of interfaces for anonymous returns and a struct for named
  4995  // returns.
  4996  func (_IERC721 *IERC721Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  4997  	return _IERC721.Contract.IERC721Caller.contract.Call(opts, result, method, params...)
  4998  }
  4999  
  5000  // Transfer initiates a plain transaction to move funds to the contract, calling
  5001  // its default method if one is available.
  5002  func (_IERC721 *IERC721Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5003  	return _IERC721.Contract.IERC721Transactor.contract.Transfer(opts)
  5004  }
  5005  
  5006  // Transact invokes the (paid) contract method with params as input values.
  5007  func (_IERC721 *IERC721Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5008  	return _IERC721.Contract.IERC721Transactor.contract.Transact(opts, method, params...)
  5009  }
  5010  
  5011  // Call invokes the (constant) contract method with params as input values and
  5012  // sets the output to result. The result type might be a single field for simple
  5013  // returns, a slice of interfaces for anonymous returns and a struct for named
  5014  // returns.
  5015  func (_IERC721 *IERC721CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5016  	return _IERC721.Contract.contract.Call(opts, result, method, params...)
  5017  }
  5018  
  5019  // Transfer initiates a plain transaction to move funds to the contract, calling
  5020  // its default method if one is available.
  5021  func (_IERC721 *IERC721TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5022  	return _IERC721.Contract.contract.Transfer(opts)
  5023  }
  5024  
  5025  // Transact invokes the (paid) contract method with params as input values.
  5026  func (_IERC721 *IERC721TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5027  	return _IERC721.Contract.contract.Transact(opts, method, params...)
  5028  }
  5029  
  5030  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5031  //
  5032  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5033  func (_IERC721 *IERC721Caller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  5034  	var out []interface{}
  5035  	err := _IERC721.contract.Call(opts, &out, "balanceOf", owner)
  5036  
  5037  	if err != nil {
  5038  		return *new(*big.Int), err
  5039  	}
  5040  
  5041  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5042  
  5043  	return out0, err
  5044  
  5045  }
  5046  
  5047  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5048  //
  5049  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5050  func (_IERC721 *IERC721Session) BalanceOf(owner common.Address) (*big.Int, error) {
  5051  	return _IERC721.Contract.BalanceOf(&_IERC721.CallOpts, owner)
  5052  }
  5053  
  5054  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5055  //
  5056  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5057  func (_IERC721 *IERC721CallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  5058  	return _IERC721.Contract.BalanceOf(&_IERC721.CallOpts, owner)
  5059  }
  5060  
  5061  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5062  //
  5063  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5064  func (_IERC721 *IERC721Caller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  5065  	var out []interface{}
  5066  	err := _IERC721.contract.Call(opts, &out, "getApproved", tokenId)
  5067  
  5068  	if err != nil {
  5069  		return *new(common.Address), err
  5070  	}
  5071  
  5072  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5073  
  5074  	return out0, err
  5075  
  5076  }
  5077  
  5078  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5079  //
  5080  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5081  func (_IERC721 *IERC721Session) GetApproved(tokenId *big.Int) (common.Address, error) {
  5082  	return _IERC721.Contract.GetApproved(&_IERC721.CallOpts, tokenId)
  5083  }
  5084  
  5085  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5086  //
  5087  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5088  func (_IERC721 *IERC721CallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  5089  	return _IERC721.Contract.GetApproved(&_IERC721.CallOpts, tokenId)
  5090  }
  5091  
  5092  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5093  //
  5094  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5095  func (_IERC721 *IERC721Caller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  5096  	var out []interface{}
  5097  	err := _IERC721.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  5098  
  5099  	if err != nil {
  5100  		return *new(bool), err
  5101  	}
  5102  
  5103  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5104  
  5105  	return out0, err
  5106  
  5107  }
  5108  
  5109  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5110  //
  5111  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5112  func (_IERC721 *IERC721Session) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  5113  	return _IERC721.Contract.IsApprovedForAll(&_IERC721.CallOpts, owner, operator)
  5114  }
  5115  
  5116  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5117  //
  5118  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5119  func (_IERC721 *IERC721CallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  5120  	return _IERC721.Contract.IsApprovedForAll(&_IERC721.CallOpts, owner, operator)
  5121  }
  5122  
  5123  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  5124  //
  5125  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  5126  func (_IERC721 *IERC721Caller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  5127  	var out []interface{}
  5128  	err := _IERC721.contract.Call(opts, &out, "ownerOf", tokenId)
  5129  
  5130  	if err != nil {
  5131  		return *new(common.Address), err
  5132  	}
  5133  
  5134  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5135  
  5136  	return out0, err
  5137  
  5138  }
  5139  
  5140  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  5141  //
  5142  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  5143  func (_IERC721 *IERC721Session) OwnerOf(tokenId *big.Int) (common.Address, error) {
  5144  	return _IERC721.Contract.OwnerOf(&_IERC721.CallOpts, tokenId)
  5145  }
  5146  
  5147  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  5148  //
  5149  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  5150  func (_IERC721 *IERC721CallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  5151  	return _IERC721.Contract.OwnerOf(&_IERC721.CallOpts, tokenId)
  5152  }
  5153  
  5154  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  5155  //
  5156  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  5157  func (_IERC721 *IERC721Caller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  5158  	var out []interface{}
  5159  	err := _IERC721.contract.Call(opts, &out, "supportsInterface", interfaceId)
  5160  
  5161  	if err != nil {
  5162  		return *new(bool), err
  5163  	}
  5164  
  5165  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  5166  
  5167  	return out0, err
  5168  
  5169  }
  5170  
  5171  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  5172  //
  5173  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  5174  func (_IERC721 *IERC721Session) SupportsInterface(interfaceId [4]byte) (bool, error) {
  5175  	return _IERC721.Contract.SupportsInterface(&_IERC721.CallOpts, interfaceId)
  5176  }
  5177  
  5178  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  5179  //
  5180  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  5181  func (_IERC721 *IERC721CallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  5182  	return _IERC721.Contract.SupportsInterface(&_IERC721.CallOpts, interfaceId)
  5183  }
  5184  
  5185  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5186  //
  5187  // Solidity: function approve(address to, uint256 tokenId) returns()
  5188  func (_IERC721 *IERC721Transactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5189  	return _IERC721.contract.Transact(opts, "approve", to, tokenId)
  5190  }
  5191  
  5192  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5193  //
  5194  // Solidity: function approve(address to, uint256 tokenId) returns()
  5195  func (_IERC721 *IERC721Session) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5196  	return _IERC721.Contract.Approve(&_IERC721.TransactOpts, to, tokenId)
  5197  }
  5198  
  5199  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  5200  //
  5201  // Solidity: function approve(address to, uint256 tokenId) returns()
  5202  func (_IERC721 *IERC721TransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5203  	return _IERC721.Contract.Approve(&_IERC721.TransactOpts, to, tokenId)
  5204  }
  5205  
  5206  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  5207  //
  5208  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  5209  func (_IERC721 *IERC721Transactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5210  	return _IERC721.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  5211  }
  5212  
  5213  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  5214  //
  5215  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  5216  func (_IERC721 *IERC721Session) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5217  	return _IERC721.Contract.SafeTransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5218  }
  5219  
  5220  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  5221  //
  5222  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  5223  func (_IERC721 *IERC721TransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5224  	return _IERC721.Contract.SafeTransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5225  }
  5226  
  5227  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  5228  //
  5229  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  5230  func (_IERC721 *IERC721Transactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  5231  	return _IERC721.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  5232  }
  5233  
  5234  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  5235  //
  5236  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  5237  func (_IERC721 *IERC721Session) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  5238  	return _IERC721.Contract.SafeTransferFrom0(&_IERC721.TransactOpts, from, to, tokenId, data)
  5239  }
  5240  
  5241  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  5242  //
  5243  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  5244  func (_IERC721 *IERC721TransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  5245  	return _IERC721.Contract.SafeTransferFrom0(&_IERC721.TransactOpts, from, to, tokenId, data)
  5246  }
  5247  
  5248  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  5249  //
  5250  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  5251  func (_IERC721 *IERC721Transactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  5252  	return _IERC721.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  5253  }
  5254  
  5255  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  5256  //
  5257  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  5258  func (_IERC721 *IERC721Session) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  5259  	return _IERC721.Contract.SetApprovalForAll(&_IERC721.TransactOpts, operator, _approved)
  5260  }
  5261  
  5262  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  5263  //
  5264  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  5265  func (_IERC721 *IERC721TransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  5266  	return _IERC721.Contract.SetApprovalForAll(&_IERC721.TransactOpts, operator, _approved)
  5267  }
  5268  
  5269  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5270  //
  5271  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  5272  func (_IERC721 *IERC721Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5273  	return _IERC721.contract.Transact(opts, "transferFrom", from, to, tokenId)
  5274  }
  5275  
  5276  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5277  //
  5278  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  5279  func (_IERC721 *IERC721Session) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5280  	return _IERC721.Contract.TransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5281  }
  5282  
  5283  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  5284  //
  5285  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  5286  func (_IERC721 *IERC721TransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  5287  	return _IERC721.Contract.TransferFrom(&_IERC721.TransactOpts, from, to, tokenId)
  5288  }
  5289  
  5290  // 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.
  5291  type IERC721ApprovalIterator struct {
  5292  	Event *IERC721Approval // Event containing the contract specifics and raw log
  5293  
  5294  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5295  	event    string              // Event name to use for unpacking event data
  5296  
  5297  	logs chan types.Log        // Log channel receiving the found contract events
  5298  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5299  	done bool                  // Whether the subscription completed delivering logs
  5300  	fail error                 // Occurred error to stop iteration
  5301  }
  5302  
  5303  // Next advances the iterator to the subsequent event, returning whether there
  5304  // are any more events found. In case of a retrieval or parsing error, false is
  5305  // returned and Error() can be queried for the exact failure.
  5306  func (it *IERC721ApprovalIterator) Next() bool {
  5307  	// If the iterator failed, stop iterating
  5308  	if it.fail != nil {
  5309  		return false
  5310  	}
  5311  	// If the iterator completed, deliver directly whatever's available
  5312  	if it.done {
  5313  		select {
  5314  		case log := <-it.logs:
  5315  			it.Event = new(IERC721Approval)
  5316  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5317  				it.fail = err
  5318  				return false
  5319  			}
  5320  			it.Event.Raw = log
  5321  			return true
  5322  
  5323  		default:
  5324  			return false
  5325  		}
  5326  	}
  5327  	// Iterator still in progress, wait for either a data or an error event
  5328  	select {
  5329  	case log := <-it.logs:
  5330  		it.Event = new(IERC721Approval)
  5331  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5332  			it.fail = err
  5333  			return false
  5334  		}
  5335  		it.Event.Raw = log
  5336  		return true
  5337  
  5338  	case err := <-it.sub.Err():
  5339  		it.done = true
  5340  		it.fail = err
  5341  		return it.Next()
  5342  	}
  5343  }
  5344  
  5345  // Error returns any retrieval or parsing error occurred during filtering.
  5346  func (it *IERC721ApprovalIterator) Error() error {
  5347  	return it.fail
  5348  }
  5349  
  5350  // Close terminates the iteration process, releasing any pending underlying
  5351  // resources.
  5352  func (it *IERC721ApprovalIterator) Close() error {
  5353  	it.sub.Unsubscribe()
  5354  	return nil
  5355  }
  5356  
  5357  // IERC721Approval represents a Approval event raised by the IERC721 contract.
  5358  type IERC721Approval struct {
  5359  	Owner    common.Address
  5360  	Approved common.Address
  5361  	TokenId  *big.Int
  5362  	Raw      types.Log // Blockchain specific contextual infos
  5363  }
  5364  
  5365  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5366  //
  5367  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  5368  func (_IERC721 *IERC721Filterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721ApprovalIterator, error) {
  5369  
  5370  	var ownerRule []interface{}
  5371  	for _, ownerItem := range owner {
  5372  		ownerRule = append(ownerRule, ownerItem)
  5373  	}
  5374  	var approvedRule []interface{}
  5375  	for _, approvedItem := range approved {
  5376  		approvedRule = append(approvedRule, approvedItem)
  5377  	}
  5378  	var tokenIdRule []interface{}
  5379  	for _, tokenIdItem := range tokenId {
  5380  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5381  	}
  5382  
  5383  	logs, sub, err := _IERC721.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  5384  	if err != nil {
  5385  		return nil, err
  5386  	}
  5387  	return &IERC721ApprovalIterator{contract: _IERC721.contract, event: "Approval", logs: logs, sub: sub}, nil
  5388  }
  5389  
  5390  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5391  //
  5392  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  5393  func (_IERC721 *IERC721Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721Approval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  5394  
  5395  	var ownerRule []interface{}
  5396  	for _, ownerItem := range owner {
  5397  		ownerRule = append(ownerRule, ownerItem)
  5398  	}
  5399  	var approvedRule []interface{}
  5400  	for _, approvedItem := range approved {
  5401  		approvedRule = append(approvedRule, approvedItem)
  5402  	}
  5403  	var tokenIdRule []interface{}
  5404  	for _, tokenIdItem := range tokenId {
  5405  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5406  	}
  5407  
  5408  	logs, sub, err := _IERC721.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  5409  	if err != nil {
  5410  		return nil, err
  5411  	}
  5412  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5413  		defer sub.Unsubscribe()
  5414  		for {
  5415  			select {
  5416  			case log := <-logs:
  5417  				// New log arrived, parse the event and forward to the user
  5418  				event := new(IERC721Approval)
  5419  				if err := _IERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  5420  					return err
  5421  				}
  5422  				event.Raw = log
  5423  
  5424  				select {
  5425  				case sink <- event:
  5426  				case err := <-sub.Err():
  5427  					return err
  5428  				case <-quit:
  5429  					return nil
  5430  				}
  5431  			case err := <-sub.Err():
  5432  				return err
  5433  			case <-quit:
  5434  				return nil
  5435  			}
  5436  		}
  5437  	}), nil
  5438  }
  5439  
  5440  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  5441  //
  5442  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  5443  func (_IERC721 *IERC721Filterer) ParseApproval(log types.Log) (*IERC721Approval, error) {
  5444  	event := new(IERC721Approval)
  5445  	if err := _IERC721.contract.UnpackLog(event, "Approval", log); err != nil {
  5446  		return nil, err
  5447  	}
  5448  	event.Raw = log
  5449  	return event, nil
  5450  }
  5451  
  5452  // 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.
  5453  type IERC721ApprovalForAllIterator struct {
  5454  	Event *IERC721ApprovalForAll // Event containing the contract specifics and raw log
  5455  
  5456  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5457  	event    string              // Event name to use for unpacking event data
  5458  
  5459  	logs chan types.Log        // Log channel receiving the found contract events
  5460  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5461  	done bool                  // Whether the subscription completed delivering logs
  5462  	fail error                 // Occurred error to stop iteration
  5463  }
  5464  
  5465  // Next advances the iterator to the subsequent event, returning whether there
  5466  // are any more events found. In case of a retrieval or parsing error, false is
  5467  // returned and Error() can be queried for the exact failure.
  5468  func (it *IERC721ApprovalForAllIterator) Next() bool {
  5469  	// If the iterator failed, stop iterating
  5470  	if it.fail != nil {
  5471  		return false
  5472  	}
  5473  	// If the iterator completed, deliver directly whatever's available
  5474  	if it.done {
  5475  		select {
  5476  		case log := <-it.logs:
  5477  			it.Event = new(IERC721ApprovalForAll)
  5478  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5479  				it.fail = err
  5480  				return false
  5481  			}
  5482  			it.Event.Raw = log
  5483  			return true
  5484  
  5485  		default:
  5486  			return false
  5487  		}
  5488  	}
  5489  	// Iterator still in progress, wait for either a data or an error event
  5490  	select {
  5491  	case log := <-it.logs:
  5492  		it.Event = new(IERC721ApprovalForAll)
  5493  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5494  			it.fail = err
  5495  			return false
  5496  		}
  5497  		it.Event.Raw = log
  5498  		return true
  5499  
  5500  	case err := <-it.sub.Err():
  5501  		it.done = true
  5502  		it.fail = err
  5503  		return it.Next()
  5504  	}
  5505  }
  5506  
  5507  // Error returns any retrieval or parsing error occurred during filtering.
  5508  func (it *IERC721ApprovalForAllIterator) Error() error {
  5509  	return it.fail
  5510  }
  5511  
  5512  // Close terminates the iteration process, releasing any pending underlying
  5513  // resources.
  5514  func (it *IERC721ApprovalForAllIterator) Close() error {
  5515  	it.sub.Unsubscribe()
  5516  	return nil
  5517  }
  5518  
  5519  // IERC721ApprovalForAll represents a ApprovalForAll event raised by the IERC721 contract.
  5520  type IERC721ApprovalForAll struct {
  5521  	Owner    common.Address
  5522  	Operator common.Address
  5523  	Approved bool
  5524  	Raw      types.Log // Blockchain specific contextual infos
  5525  }
  5526  
  5527  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  5528  //
  5529  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  5530  func (_IERC721 *IERC721Filterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721ApprovalForAllIterator, error) {
  5531  
  5532  	var ownerRule []interface{}
  5533  	for _, ownerItem := range owner {
  5534  		ownerRule = append(ownerRule, ownerItem)
  5535  	}
  5536  	var operatorRule []interface{}
  5537  	for _, operatorItem := range operator {
  5538  		operatorRule = append(operatorRule, operatorItem)
  5539  	}
  5540  
  5541  	logs, sub, err := _IERC721.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  5542  	if err != nil {
  5543  		return nil, err
  5544  	}
  5545  	return &IERC721ApprovalForAllIterator{contract: _IERC721.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  5546  }
  5547  
  5548  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  5549  //
  5550  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  5551  func (_IERC721 *IERC721Filterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721ApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  5552  
  5553  	var ownerRule []interface{}
  5554  	for _, ownerItem := range owner {
  5555  		ownerRule = append(ownerRule, ownerItem)
  5556  	}
  5557  	var operatorRule []interface{}
  5558  	for _, operatorItem := range operator {
  5559  		operatorRule = append(operatorRule, operatorItem)
  5560  	}
  5561  
  5562  	logs, sub, err := _IERC721.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  5563  	if err != nil {
  5564  		return nil, err
  5565  	}
  5566  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5567  		defer sub.Unsubscribe()
  5568  		for {
  5569  			select {
  5570  			case log := <-logs:
  5571  				// New log arrived, parse the event and forward to the user
  5572  				event := new(IERC721ApprovalForAll)
  5573  				if err := _IERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  5574  					return err
  5575  				}
  5576  				event.Raw = log
  5577  
  5578  				select {
  5579  				case sink <- event:
  5580  				case err := <-sub.Err():
  5581  					return err
  5582  				case <-quit:
  5583  					return nil
  5584  				}
  5585  			case err := <-sub.Err():
  5586  				return err
  5587  			case <-quit:
  5588  				return nil
  5589  			}
  5590  		}
  5591  	}), nil
  5592  }
  5593  
  5594  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  5595  //
  5596  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  5597  func (_IERC721 *IERC721Filterer) ParseApprovalForAll(log types.Log) (*IERC721ApprovalForAll, error) {
  5598  	event := new(IERC721ApprovalForAll)
  5599  	if err := _IERC721.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  5600  		return nil, err
  5601  	}
  5602  	event.Raw = log
  5603  	return event, nil
  5604  }
  5605  
  5606  // 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.
  5607  type IERC721TransferIterator struct {
  5608  	Event *IERC721Transfer // Event containing the contract specifics and raw log
  5609  
  5610  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  5611  	event    string              // Event name to use for unpacking event data
  5612  
  5613  	logs chan types.Log        // Log channel receiving the found contract events
  5614  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  5615  	done bool                  // Whether the subscription completed delivering logs
  5616  	fail error                 // Occurred error to stop iteration
  5617  }
  5618  
  5619  // Next advances the iterator to the subsequent event, returning whether there
  5620  // are any more events found. In case of a retrieval or parsing error, false is
  5621  // returned and Error() can be queried for the exact failure.
  5622  func (it *IERC721TransferIterator) Next() bool {
  5623  	// If the iterator failed, stop iterating
  5624  	if it.fail != nil {
  5625  		return false
  5626  	}
  5627  	// If the iterator completed, deliver directly whatever's available
  5628  	if it.done {
  5629  		select {
  5630  		case log := <-it.logs:
  5631  			it.Event = new(IERC721Transfer)
  5632  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5633  				it.fail = err
  5634  				return false
  5635  			}
  5636  			it.Event.Raw = log
  5637  			return true
  5638  
  5639  		default:
  5640  			return false
  5641  		}
  5642  	}
  5643  	// Iterator still in progress, wait for either a data or an error event
  5644  	select {
  5645  	case log := <-it.logs:
  5646  		it.Event = new(IERC721Transfer)
  5647  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  5648  			it.fail = err
  5649  			return false
  5650  		}
  5651  		it.Event.Raw = log
  5652  		return true
  5653  
  5654  	case err := <-it.sub.Err():
  5655  		it.done = true
  5656  		it.fail = err
  5657  		return it.Next()
  5658  	}
  5659  }
  5660  
  5661  // Error returns any retrieval or parsing error occurred during filtering.
  5662  func (it *IERC721TransferIterator) Error() error {
  5663  	return it.fail
  5664  }
  5665  
  5666  // Close terminates the iteration process, releasing any pending underlying
  5667  // resources.
  5668  func (it *IERC721TransferIterator) Close() error {
  5669  	it.sub.Unsubscribe()
  5670  	return nil
  5671  }
  5672  
  5673  // IERC721Transfer represents a Transfer event raised by the IERC721 contract.
  5674  type IERC721Transfer struct {
  5675  	From    common.Address
  5676  	To      common.Address
  5677  	TokenId *big.Int
  5678  	Raw     types.Log // Blockchain specific contextual infos
  5679  }
  5680  
  5681  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5682  //
  5683  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  5684  func (_IERC721 *IERC721Filterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721TransferIterator, error) {
  5685  
  5686  	var fromRule []interface{}
  5687  	for _, fromItem := range from {
  5688  		fromRule = append(fromRule, fromItem)
  5689  	}
  5690  	var toRule []interface{}
  5691  	for _, toItem := range to {
  5692  		toRule = append(toRule, toItem)
  5693  	}
  5694  	var tokenIdRule []interface{}
  5695  	for _, tokenIdItem := range tokenId {
  5696  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5697  	}
  5698  
  5699  	logs, sub, err := _IERC721.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  5700  	if err != nil {
  5701  		return nil, err
  5702  	}
  5703  	return &IERC721TransferIterator{contract: _IERC721.contract, event: "Transfer", logs: logs, sub: sub}, nil
  5704  }
  5705  
  5706  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5707  //
  5708  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  5709  func (_IERC721 *IERC721Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721Transfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  5710  
  5711  	var fromRule []interface{}
  5712  	for _, fromItem := range from {
  5713  		fromRule = append(fromRule, fromItem)
  5714  	}
  5715  	var toRule []interface{}
  5716  	for _, toItem := range to {
  5717  		toRule = append(toRule, toItem)
  5718  	}
  5719  	var tokenIdRule []interface{}
  5720  	for _, tokenIdItem := range tokenId {
  5721  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  5722  	}
  5723  
  5724  	logs, sub, err := _IERC721.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  5725  	if err != nil {
  5726  		return nil, err
  5727  	}
  5728  	return event.NewSubscription(func(quit <-chan struct{}) error {
  5729  		defer sub.Unsubscribe()
  5730  		for {
  5731  			select {
  5732  			case log := <-logs:
  5733  				// New log arrived, parse the event and forward to the user
  5734  				event := new(IERC721Transfer)
  5735  				if err := _IERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  5736  					return err
  5737  				}
  5738  				event.Raw = log
  5739  
  5740  				select {
  5741  				case sink <- event:
  5742  				case err := <-sub.Err():
  5743  					return err
  5744  				case <-quit:
  5745  					return nil
  5746  				}
  5747  			case err := <-sub.Err():
  5748  				return err
  5749  			case <-quit:
  5750  				return nil
  5751  			}
  5752  		}
  5753  	}), nil
  5754  }
  5755  
  5756  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  5757  //
  5758  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  5759  func (_IERC721 *IERC721Filterer) ParseTransfer(log types.Log) (*IERC721Transfer, error) {
  5760  	event := new(IERC721Transfer)
  5761  	if err := _IERC721.contract.UnpackLog(event, "Transfer", log); err != nil {
  5762  		return nil, err
  5763  	}
  5764  	event.Raw = log
  5765  	return event, nil
  5766  }
  5767  
  5768  // IERC721EnumerableABI is the input ABI used to generate the binding from.
  5769  const IERC721EnumerableABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  5770  
  5771  // IERC721EnumerableFuncSigs maps the 4-byte function signature to its string representation.
  5772  var IERC721EnumerableFuncSigs = map[string]string{
  5773  	"095ea7b3": "approve(address,uint256)",
  5774  	"70a08231": "balanceOf(address)",
  5775  	"081812fc": "getApproved(uint256)",
  5776  	"e985e9c5": "isApprovedForAll(address,address)",
  5777  	"6352211e": "ownerOf(uint256)",
  5778  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  5779  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  5780  	"a22cb465": "setApprovalForAll(address,bool)",
  5781  	"01ffc9a7": "supportsInterface(bytes4)",
  5782  	"4f6ccce7": "tokenByIndex(uint256)",
  5783  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  5784  	"18160ddd": "totalSupply()",
  5785  	"23b872dd": "transferFrom(address,address,uint256)",
  5786  }
  5787  
  5788  // IERC721Enumerable is an auto generated Go binding around an Ethereum contract.
  5789  type IERC721Enumerable struct {
  5790  	IERC721EnumerableCaller     // Read-only binding to the contract
  5791  	IERC721EnumerableTransactor // Write-only binding to the contract
  5792  	IERC721EnumerableFilterer   // Log filterer for contract events
  5793  }
  5794  
  5795  // IERC721EnumerableCaller is an auto generated read-only Go binding around an Ethereum contract.
  5796  type IERC721EnumerableCaller struct {
  5797  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5798  }
  5799  
  5800  // IERC721EnumerableTransactor is an auto generated write-only Go binding around an Ethereum contract.
  5801  type IERC721EnumerableTransactor struct {
  5802  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5803  }
  5804  
  5805  // IERC721EnumerableFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  5806  type IERC721EnumerableFilterer struct {
  5807  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  5808  }
  5809  
  5810  // IERC721EnumerableSession is an auto generated Go binding around an Ethereum contract,
  5811  // with pre-set call and transact options.
  5812  type IERC721EnumerableSession struct {
  5813  	Contract     *IERC721Enumerable // Generic contract binding to set the session for
  5814  	CallOpts     bind.CallOpts      // Call options to use throughout this session
  5815  	TransactOpts bind.TransactOpts  // Transaction auth options to use throughout this session
  5816  }
  5817  
  5818  // IERC721EnumerableCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  5819  // with pre-set call options.
  5820  type IERC721EnumerableCallerSession struct {
  5821  	Contract *IERC721EnumerableCaller // Generic contract caller binding to set the session for
  5822  	CallOpts bind.CallOpts            // Call options to use throughout this session
  5823  }
  5824  
  5825  // IERC721EnumerableTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  5826  // with pre-set transact options.
  5827  type IERC721EnumerableTransactorSession struct {
  5828  	Contract     *IERC721EnumerableTransactor // Generic contract transactor binding to set the session for
  5829  	TransactOpts bind.TransactOpts            // Transaction auth options to use throughout this session
  5830  }
  5831  
  5832  // IERC721EnumerableRaw is an auto generated low-level Go binding around an Ethereum contract.
  5833  type IERC721EnumerableRaw struct {
  5834  	Contract *IERC721Enumerable // Generic contract binding to access the raw methods on
  5835  }
  5836  
  5837  // IERC721EnumerableCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  5838  type IERC721EnumerableCallerRaw struct {
  5839  	Contract *IERC721EnumerableCaller // Generic read-only contract binding to access the raw methods on
  5840  }
  5841  
  5842  // IERC721EnumerableTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  5843  type IERC721EnumerableTransactorRaw struct {
  5844  	Contract *IERC721EnumerableTransactor // Generic write-only contract binding to access the raw methods on
  5845  }
  5846  
  5847  // NewIERC721Enumerable creates a new instance of IERC721Enumerable, bound to a specific deployed contract.
  5848  func NewIERC721Enumerable(address common.Address, backend bind.ContractBackend) (*IERC721Enumerable, error) {
  5849  	contract, err := bindIERC721Enumerable(address, backend, backend, backend)
  5850  	if err != nil {
  5851  		return nil, err
  5852  	}
  5853  	return &IERC721Enumerable{IERC721EnumerableCaller: IERC721EnumerableCaller{contract: contract}, IERC721EnumerableTransactor: IERC721EnumerableTransactor{contract: contract}, IERC721EnumerableFilterer: IERC721EnumerableFilterer{contract: contract}}, nil
  5854  }
  5855  
  5856  // NewIERC721EnumerableCaller creates a new read-only instance of IERC721Enumerable, bound to a specific deployed contract.
  5857  func NewIERC721EnumerableCaller(address common.Address, caller bind.ContractCaller) (*IERC721EnumerableCaller, error) {
  5858  	contract, err := bindIERC721Enumerable(address, caller, nil, nil)
  5859  	if err != nil {
  5860  		return nil, err
  5861  	}
  5862  	return &IERC721EnumerableCaller{contract: contract}, nil
  5863  }
  5864  
  5865  // NewIERC721EnumerableTransactor creates a new write-only instance of IERC721Enumerable, bound to a specific deployed contract.
  5866  func NewIERC721EnumerableTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721EnumerableTransactor, error) {
  5867  	contract, err := bindIERC721Enumerable(address, nil, transactor, nil)
  5868  	if err != nil {
  5869  		return nil, err
  5870  	}
  5871  	return &IERC721EnumerableTransactor{contract: contract}, nil
  5872  }
  5873  
  5874  // NewIERC721EnumerableFilterer creates a new log filterer instance of IERC721Enumerable, bound to a specific deployed contract.
  5875  func NewIERC721EnumerableFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721EnumerableFilterer, error) {
  5876  	contract, err := bindIERC721Enumerable(address, nil, nil, filterer)
  5877  	if err != nil {
  5878  		return nil, err
  5879  	}
  5880  	return &IERC721EnumerableFilterer{contract: contract}, nil
  5881  }
  5882  
  5883  // bindIERC721Enumerable binds a generic wrapper to an already deployed contract.
  5884  func bindIERC721Enumerable(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  5885  	parsed, err := abi.JSON(strings.NewReader(IERC721EnumerableABI))
  5886  	if err != nil {
  5887  		return nil, err
  5888  	}
  5889  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  5890  }
  5891  
  5892  // Call invokes the (constant) contract method with params as input values and
  5893  // sets the output to result. The result type might be a single field for simple
  5894  // returns, a slice of interfaces for anonymous returns and a struct for named
  5895  // returns.
  5896  func (_IERC721Enumerable *IERC721EnumerableRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5897  	return _IERC721Enumerable.Contract.IERC721EnumerableCaller.contract.Call(opts, result, method, params...)
  5898  }
  5899  
  5900  // Transfer initiates a plain transaction to move funds to the contract, calling
  5901  // its default method if one is available.
  5902  func (_IERC721Enumerable *IERC721EnumerableRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5903  	return _IERC721Enumerable.Contract.IERC721EnumerableTransactor.contract.Transfer(opts)
  5904  }
  5905  
  5906  // Transact invokes the (paid) contract method with params as input values.
  5907  func (_IERC721Enumerable *IERC721EnumerableRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5908  	return _IERC721Enumerable.Contract.IERC721EnumerableTransactor.contract.Transact(opts, method, params...)
  5909  }
  5910  
  5911  // Call invokes the (constant) contract method with params as input values and
  5912  // sets the output to result. The result type might be a single field for simple
  5913  // returns, a slice of interfaces for anonymous returns and a struct for named
  5914  // returns.
  5915  func (_IERC721Enumerable *IERC721EnumerableCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  5916  	return _IERC721Enumerable.Contract.contract.Call(opts, result, method, params...)
  5917  }
  5918  
  5919  // Transfer initiates a plain transaction to move funds to the contract, calling
  5920  // its default method if one is available.
  5921  func (_IERC721Enumerable *IERC721EnumerableTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  5922  	return _IERC721Enumerable.Contract.contract.Transfer(opts)
  5923  }
  5924  
  5925  // Transact invokes the (paid) contract method with params as input values.
  5926  func (_IERC721Enumerable *IERC721EnumerableTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  5927  	return _IERC721Enumerable.Contract.contract.Transact(opts, method, params...)
  5928  }
  5929  
  5930  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5931  //
  5932  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5933  func (_IERC721Enumerable *IERC721EnumerableCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  5934  	var out []interface{}
  5935  	err := _IERC721Enumerable.contract.Call(opts, &out, "balanceOf", owner)
  5936  
  5937  	if err != nil {
  5938  		return *new(*big.Int), err
  5939  	}
  5940  
  5941  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  5942  
  5943  	return out0, err
  5944  
  5945  }
  5946  
  5947  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5948  //
  5949  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5950  func (_IERC721Enumerable *IERC721EnumerableSession) BalanceOf(owner common.Address) (*big.Int, error) {
  5951  	return _IERC721Enumerable.Contract.BalanceOf(&_IERC721Enumerable.CallOpts, owner)
  5952  }
  5953  
  5954  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  5955  //
  5956  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  5957  func (_IERC721Enumerable *IERC721EnumerableCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  5958  	return _IERC721Enumerable.Contract.BalanceOf(&_IERC721Enumerable.CallOpts, owner)
  5959  }
  5960  
  5961  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5962  //
  5963  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5964  func (_IERC721Enumerable *IERC721EnumerableCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  5965  	var out []interface{}
  5966  	err := _IERC721Enumerable.contract.Call(opts, &out, "getApproved", tokenId)
  5967  
  5968  	if err != nil {
  5969  		return *new(common.Address), err
  5970  	}
  5971  
  5972  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  5973  
  5974  	return out0, err
  5975  
  5976  }
  5977  
  5978  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5979  //
  5980  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5981  func (_IERC721Enumerable *IERC721EnumerableSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  5982  	return _IERC721Enumerable.Contract.GetApproved(&_IERC721Enumerable.CallOpts, tokenId)
  5983  }
  5984  
  5985  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  5986  //
  5987  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  5988  func (_IERC721Enumerable *IERC721EnumerableCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  5989  	return _IERC721Enumerable.Contract.GetApproved(&_IERC721Enumerable.CallOpts, tokenId)
  5990  }
  5991  
  5992  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  5993  //
  5994  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  5995  func (_IERC721Enumerable *IERC721EnumerableCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  5996  	var out []interface{}
  5997  	err := _IERC721Enumerable.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  5998  
  5999  	if err != nil {
  6000  		return *new(bool), err
  6001  	}
  6002  
  6003  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  6004  
  6005  	return out0, err
  6006  
  6007  }
  6008  
  6009  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  6010  //
  6011  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  6012  func (_IERC721Enumerable *IERC721EnumerableSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  6013  	return _IERC721Enumerable.Contract.IsApprovedForAll(&_IERC721Enumerable.CallOpts, owner, operator)
  6014  }
  6015  
  6016  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  6017  //
  6018  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  6019  func (_IERC721Enumerable *IERC721EnumerableCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  6020  	return _IERC721Enumerable.Contract.IsApprovedForAll(&_IERC721Enumerable.CallOpts, owner, operator)
  6021  }
  6022  
  6023  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  6024  //
  6025  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  6026  func (_IERC721Enumerable *IERC721EnumerableCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  6027  	var out []interface{}
  6028  	err := _IERC721Enumerable.contract.Call(opts, &out, "ownerOf", tokenId)
  6029  
  6030  	if err != nil {
  6031  		return *new(common.Address), err
  6032  	}
  6033  
  6034  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  6035  
  6036  	return out0, err
  6037  
  6038  }
  6039  
  6040  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  6041  //
  6042  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  6043  func (_IERC721Enumerable *IERC721EnumerableSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  6044  	return _IERC721Enumerable.Contract.OwnerOf(&_IERC721Enumerable.CallOpts, tokenId)
  6045  }
  6046  
  6047  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  6048  //
  6049  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  6050  func (_IERC721Enumerable *IERC721EnumerableCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  6051  	return _IERC721Enumerable.Contract.OwnerOf(&_IERC721Enumerable.CallOpts, tokenId)
  6052  }
  6053  
  6054  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  6055  //
  6056  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  6057  func (_IERC721Enumerable *IERC721EnumerableCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  6058  	var out []interface{}
  6059  	err := _IERC721Enumerable.contract.Call(opts, &out, "supportsInterface", interfaceId)
  6060  
  6061  	if err != nil {
  6062  		return *new(bool), err
  6063  	}
  6064  
  6065  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  6066  
  6067  	return out0, err
  6068  
  6069  }
  6070  
  6071  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  6072  //
  6073  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  6074  func (_IERC721Enumerable *IERC721EnumerableSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  6075  	return _IERC721Enumerable.Contract.SupportsInterface(&_IERC721Enumerable.CallOpts, interfaceId)
  6076  }
  6077  
  6078  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  6079  //
  6080  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  6081  func (_IERC721Enumerable *IERC721EnumerableCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  6082  	return _IERC721Enumerable.Contract.SupportsInterface(&_IERC721Enumerable.CallOpts, interfaceId)
  6083  }
  6084  
  6085  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  6086  //
  6087  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  6088  func (_IERC721Enumerable *IERC721EnumerableCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  6089  	var out []interface{}
  6090  	err := _IERC721Enumerable.contract.Call(opts, &out, "tokenByIndex", index)
  6091  
  6092  	if err != nil {
  6093  		return *new(*big.Int), err
  6094  	}
  6095  
  6096  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6097  
  6098  	return out0, err
  6099  
  6100  }
  6101  
  6102  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  6103  //
  6104  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  6105  func (_IERC721Enumerable *IERC721EnumerableSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  6106  	return _IERC721Enumerable.Contract.TokenByIndex(&_IERC721Enumerable.CallOpts, index)
  6107  }
  6108  
  6109  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  6110  //
  6111  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  6112  func (_IERC721Enumerable *IERC721EnumerableCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  6113  	return _IERC721Enumerable.Contract.TokenByIndex(&_IERC721Enumerable.CallOpts, index)
  6114  }
  6115  
  6116  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  6117  //
  6118  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  6119  func (_IERC721Enumerable *IERC721EnumerableCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  6120  	var out []interface{}
  6121  	err := _IERC721Enumerable.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  6122  
  6123  	if err != nil {
  6124  		return *new(*big.Int), err
  6125  	}
  6126  
  6127  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6128  
  6129  	return out0, err
  6130  
  6131  }
  6132  
  6133  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  6134  //
  6135  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  6136  func (_IERC721Enumerable *IERC721EnumerableSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  6137  	return _IERC721Enumerable.Contract.TokenOfOwnerByIndex(&_IERC721Enumerable.CallOpts, owner, index)
  6138  }
  6139  
  6140  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  6141  //
  6142  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  6143  func (_IERC721Enumerable *IERC721EnumerableCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  6144  	return _IERC721Enumerable.Contract.TokenOfOwnerByIndex(&_IERC721Enumerable.CallOpts, owner, index)
  6145  }
  6146  
  6147  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6148  //
  6149  // Solidity: function totalSupply() view returns(uint256)
  6150  func (_IERC721Enumerable *IERC721EnumerableCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  6151  	var out []interface{}
  6152  	err := _IERC721Enumerable.contract.Call(opts, &out, "totalSupply")
  6153  
  6154  	if err != nil {
  6155  		return *new(*big.Int), err
  6156  	}
  6157  
  6158  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6159  
  6160  	return out0, err
  6161  
  6162  }
  6163  
  6164  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6165  //
  6166  // Solidity: function totalSupply() view returns(uint256)
  6167  func (_IERC721Enumerable *IERC721EnumerableSession) TotalSupply() (*big.Int, error) {
  6168  	return _IERC721Enumerable.Contract.TotalSupply(&_IERC721Enumerable.CallOpts)
  6169  }
  6170  
  6171  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  6172  //
  6173  // Solidity: function totalSupply() view returns(uint256)
  6174  func (_IERC721Enumerable *IERC721EnumerableCallerSession) TotalSupply() (*big.Int, error) {
  6175  	return _IERC721Enumerable.Contract.TotalSupply(&_IERC721Enumerable.CallOpts)
  6176  }
  6177  
  6178  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6179  //
  6180  // Solidity: function approve(address to, uint256 tokenId) returns()
  6181  func (_IERC721Enumerable *IERC721EnumerableTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6182  	return _IERC721Enumerable.contract.Transact(opts, "approve", to, tokenId)
  6183  }
  6184  
  6185  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6186  //
  6187  // Solidity: function approve(address to, uint256 tokenId) returns()
  6188  func (_IERC721Enumerable *IERC721EnumerableSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6189  	return _IERC721Enumerable.Contract.Approve(&_IERC721Enumerable.TransactOpts, to, tokenId)
  6190  }
  6191  
  6192  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  6193  //
  6194  // Solidity: function approve(address to, uint256 tokenId) returns()
  6195  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6196  	return _IERC721Enumerable.Contract.Approve(&_IERC721Enumerable.TransactOpts, to, tokenId)
  6197  }
  6198  
  6199  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  6200  //
  6201  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  6202  func (_IERC721Enumerable *IERC721EnumerableTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6203  	return _IERC721Enumerable.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  6204  }
  6205  
  6206  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  6207  //
  6208  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  6209  func (_IERC721Enumerable *IERC721EnumerableSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6210  	return _IERC721Enumerable.Contract.SafeTransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6211  }
  6212  
  6213  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  6214  //
  6215  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  6216  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6217  	return _IERC721Enumerable.Contract.SafeTransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6218  }
  6219  
  6220  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  6221  //
  6222  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  6223  func (_IERC721Enumerable *IERC721EnumerableTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  6224  	return _IERC721Enumerable.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  6225  }
  6226  
  6227  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  6228  //
  6229  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  6230  func (_IERC721Enumerable *IERC721EnumerableSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  6231  	return _IERC721Enumerable.Contract.SafeTransferFrom0(&_IERC721Enumerable.TransactOpts, from, to, tokenId, data)
  6232  }
  6233  
  6234  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  6235  //
  6236  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  6237  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  6238  	return _IERC721Enumerable.Contract.SafeTransferFrom0(&_IERC721Enumerable.TransactOpts, from, to, tokenId, data)
  6239  }
  6240  
  6241  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  6242  //
  6243  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  6244  func (_IERC721Enumerable *IERC721EnumerableTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  6245  	return _IERC721Enumerable.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  6246  }
  6247  
  6248  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  6249  //
  6250  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  6251  func (_IERC721Enumerable *IERC721EnumerableSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  6252  	return _IERC721Enumerable.Contract.SetApprovalForAll(&_IERC721Enumerable.TransactOpts, operator, _approved)
  6253  }
  6254  
  6255  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  6256  //
  6257  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  6258  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  6259  	return _IERC721Enumerable.Contract.SetApprovalForAll(&_IERC721Enumerable.TransactOpts, operator, _approved)
  6260  }
  6261  
  6262  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6263  //
  6264  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  6265  func (_IERC721Enumerable *IERC721EnumerableTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6266  	return _IERC721Enumerable.contract.Transact(opts, "transferFrom", from, to, tokenId)
  6267  }
  6268  
  6269  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6270  //
  6271  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  6272  func (_IERC721Enumerable *IERC721EnumerableSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6273  	return _IERC721Enumerable.Contract.TransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6274  }
  6275  
  6276  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  6277  //
  6278  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  6279  func (_IERC721Enumerable *IERC721EnumerableTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  6280  	return _IERC721Enumerable.Contract.TransferFrom(&_IERC721Enumerable.TransactOpts, from, to, tokenId)
  6281  }
  6282  
  6283  // 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.
  6284  type IERC721EnumerableApprovalIterator struct {
  6285  	Event *IERC721EnumerableApproval // Event containing the contract specifics and raw log
  6286  
  6287  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6288  	event    string              // Event name to use for unpacking event data
  6289  
  6290  	logs chan types.Log        // Log channel receiving the found contract events
  6291  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6292  	done bool                  // Whether the subscription completed delivering logs
  6293  	fail error                 // Occurred error to stop iteration
  6294  }
  6295  
  6296  // Next advances the iterator to the subsequent event, returning whether there
  6297  // are any more events found. In case of a retrieval or parsing error, false is
  6298  // returned and Error() can be queried for the exact failure.
  6299  func (it *IERC721EnumerableApprovalIterator) Next() bool {
  6300  	// If the iterator failed, stop iterating
  6301  	if it.fail != nil {
  6302  		return false
  6303  	}
  6304  	// If the iterator completed, deliver directly whatever's available
  6305  	if it.done {
  6306  		select {
  6307  		case log := <-it.logs:
  6308  			it.Event = new(IERC721EnumerableApproval)
  6309  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6310  				it.fail = err
  6311  				return false
  6312  			}
  6313  			it.Event.Raw = log
  6314  			return true
  6315  
  6316  		default:
  6317  			return false
  6318  		}
  6319  	}
  6320  	// Iterator still in progress, wait for either a data or an error event
  6321  	select {
  6322  	case log := <-it.logs:
  6323  		it.Event = new(IERC721EnumerableApproval)
  6324  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6325  			it.fail = err
  6326  			return false
  6327  		}
  6328  		it.Event.Raw = log
  6329  		return true
  6330  
  6331  	case err := <-it.sub.Err():
  6332  		it.done = true
  6333  		it.fail = err
  6334  		return it.Next()
  6335  	}
  6336  }
  6337  
  6338  // Error returns any retrieval or parsing error occurred during filtering.
  6339  func (it *IERC721EnumerableApprovalIterator) Error() error {
  6340  	return it.fail
  6341  }
  6342  
  6343  // Close terminates the iteration process, releasing any pending underlying
  6344  // resources.
  6345  func (it *IERC721EnumerableApprovalIterator) Close() error {
  6346  	it.sub.Unsubscribe()
  6347  	return nil
  6348  }
  6349  
  6350  // IERC721EnumerableApproval represents a Approval event raised by the IERC721Enumerable contract.
  6351  type IERC721EnumerableApproval struct {
  6352  	Owner    common.Address
  6353  	Approved common.Address
  6354  	TokenId  *big.Int
  6355  	Raw      types.Log // Blockchain specific contextual infos
  6356  }
  6357  
  6358  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6359  //
  6360  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  6361  func (_IERC721Enumerable *IERC721EnumerableFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721EnumerableApprovalIterator, error) {
  6362  
  6363  	var ownerRule []interface{}
  6364  	for _, ownerItem := range owner {
  6365  		ownerRule = append(ownerRule, ownerItem)
  6366  	}
  6367  	var approvedRule []interface{}
  6368  	for _, approvedItem := range approved {
  6369  		approvedRule = append(approvedRule, approvedItem)
  6370  	}
  6371  	var tokenIdRule []interface{}
  6372  	for _, tokenIdItem := range tokenId {
  6373  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6374  	}
  6375  
  6376  	logs, sub, err := _IERC721Enumerable.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  6377  	if err != nil {
  6378  		return nil, err
  6379  	}
  6380  	return &IERC721EnumerableApprovalIterator{contract: _IERC721Enumerable.contract, event: "Approval", logs: logs, sub: sub}, nil
  6381  }
  6382  
  6383  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6384  //
  6385  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  6386  func (_IERC721Enumerable *IERC721EnumerableFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721EnumerableApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  6387  
  6388  	var ownerRule []interface{}
  6389  	for _, ownerItem := range owner {
  6390  		ownerRule = append(ownerRule, ownerItem)
  6391  	}
  6392  	var approvedRule []interface{}
  6393  	for _, approvedItem := range approved {
  6394  		approvedRule = append(approvedRule, approvedItem)
  6395  	}
  6396  	var tokenIdRule []interface{}
  6397  	for _, tokenIdItem := range tokenId {
  6398  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6399  	}
  6400  
  6401  	logs, sub, err := _IERC721Enumerable.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  6402  	if err != nil {
  6403  		return nil, err
  6404  	}
  6405  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6406  		defer sub.Unsubscribe()
  6407  		for {
  6408  			select {
  6409  			case log := <-logs:
  6410  				// New log arrived, parse the event and forward to the user
  6411  				event := new(IERC721EnumerableApproval)
  6412  				if err := _IERC721Enumerable.contract.UnpackLog(event, "Approval", log); err != nil {
  6413  					return err
  6414  				}
  6415  				event.Raw = log
  6416  
  6417  				select {
  6418  				case sink <- event:
  6419  				case err := <-sub.Err():
  6420  					return err
  6421  				case <-quit:
  6422  					return nil
  6423  				}
  6424  			case err := <-sub.Err():
  6425  				return err
  6426  			case <-quit:
  6427  				return nil
  6428  			}
  6429  		}
  6430  	}), nil
  6431  }
  6432  
  6433  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  6434  //
  6435  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  6436  func (_IERC721Enumerable *IERC721EnumerableFilterer) ParseApproval(log types.Log) (*IERC721EnumerableApproval, error) {
  6437  	event := new(IERC721EnumerableApproval)
  6438  	if err := _IERC721Enumerable.contract.UnpackLog(event, "Approval", log); err != nil {
  6439  		return nil, err
  6440  	}
  6441  	event.Raw = log
  6442  	return event, nil
  6443  }
  6444  
  6445  // 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.
  6446  type IERC721EnumerableApprovalForAllIterator struct {
  6447  	Event *IERC721EnumerableApprovalForAll // Event containing the contract specifics and raw log
  6448  
  6449  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6450  	event    string              // Event name to use for unpacking event data
  6451  
  6452  	logs chan types.Log        // Log channel receiving the found contract events
  6453  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6454  	done bool                  // Whether the subscription completed delivering logs
  6455  	fail error                 // Occurred error to stop iteration
  6456  }
  6457  
  6458  // Next advances the iterator to the subsequent event, returning whether there
  6459  // are any more events found. In case of a retrieval or parsing error, false is
  6460  // returned and Error() can be queried for the exact failure.
  6461  func (it *IERC721EnumerableApprovalForAllIterator) Next() bool {
  6462  	// If the iterator failed, stop iterating
  6463  	if it.fail != nil {
  6464  		return false
  6465  	}
  6466  	// If the iterator completed, deliver directly whatever's available
  6467  	if it.done {
  6468  		select {
  6469  		case log := <-it.logs:
  6470  			it.Event = new(IERC721EnumerableApprovalForAll)
  6471  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6472  				it.fail = err
  6473  				return false
  6474  			}
  6475  			it.Event.Raw = log
  6476  			return true
  6477  
  6478  		default:
  6479  			return false
  6480  		}
  6481  	}
  6482  	// Iterator still in progress, wait for either a data or an error event
  6483  	select {
  6484  	case log := <-it.logs:
  6485  		it.Event = new(IERC721EnumerableApprovalForAll)
  6486  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6487  			it.fail = err
  6488  			return false
  6489  		}
  6490  		it.Event.Raw = log
  6491  		return true
  6492  
  6493  	case err := <-it.sub.Err():
  6494  		it.done = true
  6495  		it.fail = err
  6496  		return it.Next()
  6497  	}
  6498  }
  6499  
  6500  // Error returns any retrieval or parsing error occurred during filtering.
  6501  func (it *IERC721EnumerableApprovalForAllIterator) Error() error {
  6502  	return it.fail
  6503  }
  6504  
  6505  // Close terminates the iteration process, releasing any pending underlying
  6506  // resources.
  6507  func (it *IERC721EnumerableApprovalForAllIterator) Close() error {
  6508  	it.sub.Unsubscribe()
  6509  	return nil
  6510  }
  6511  
  6512  // IERC721EnumerableApprovalForAll represents a ApprovalForAll event raised by the IERC721Enumerable contract.
  6513  type IERC721EnumerableApprovalForAll struct {
  6514  	Owner    common.Address
  6515  	Operator common.Address
  6516  	Approved bool
  6517  	Raw      types.Log // Blockchain specific contextual infos
  6518  }
  6519  
  6520  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  6521  //
  6522  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  6523  func (_IERC721Enumerable *IERC721EnumerableFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721EnumerableApprovalForAllIterator, error) {
  6524  
  6525  	var ownerRule []interface{}
  6526  	for _, ownerItem := range owner {
  6527  		ownerRule = append(ownerRule, ownerItem)
  6528  	}
  6529  	var operatorRule []interface{}
  6530  	for _, operatorItem := range operator {
  6531  		operatorRule = append(operatorRule, operatorItem)
  6532  	}
  6533  
  6534  	logs, sub, err := _IERC721Enumerable.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  6535  	if err != nil {
  6536  		return nil, err
  6537  	}
  6538  	return &IERC721EnumerableApprovalForAllIterator{contract: _IERC721Enumerable.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  6539  }
  6540  
  6541  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  6542  //
  6543  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  6544  func (_IERC721Enumerable *IERC721EnumerableFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721EnumerableApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  6545  
  6546  	var ownerRule []interface{}
  6547  	for _, ownerItem := range owner {
  6548  		ownerRule = append(ownerRule, ownerItem)
  6549  	}
  6550  	var operatorRule []interface{}
  6551  	for _, operatorItem := range operator {
  6552  		operatorRule = append(operatorRule, operatorItem)
  6553  	}
  6554  
  6555  	logs, sub, err := _IERC721Enumerable.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  6556  	if err != nil {
  6557  		return nil, err
  6558  	}
  6559  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6560  		defer sub.Unsubscribe()
  6561  		for {
  6562  			select {
  6563  			case log := <-logs:
  6564  				// New log arrived, parse the event and forward to the user
  6565  				event := new(IERC721EnumerableApprovalForAll)
  6566  				if err := _IERC721Enumerable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  6567  					return err
  6568  				}
  6569  				event.Raw = log
  6570  
  6571  				select {
  6572  				case sink <- event:
  6573  				case err := <-sub.Err():
  6574  					return err
  6575  				case <-quit:
  6576  					return nil
  6577  				}
  6578  			case err := <-sub.Err():
  6579  				return err
  6580  			case <-quit:
  6581  				return nil
  6582  			}
  6583  		}
  6584  	}), nil
  6585  }
  6586  
  6587  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  6588  //
  6589  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  6590  func (_IERC721Enumerable *IERC721EnumerableFilterer) ParseApprovalForAll(log types.Log) (*IERC721EnumerableApprovalForAll, error) {
  6591  	event := new(IERC721EnumerableApprovalForAll)
  6592  	if err := _IERC721Enumerable.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  6593  		return nil, err
  6594  	}
  6595  	event.Raw = log
  6596  	return event, nil
  6597  }
  6598  
  6599  // 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.
  6600  type IERC721EnumerableTransferIterator struct {
  6601  	Event *IERC721EnumerableTransfer // Event containing the contract specifics and raw log
  6602  
  6603  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  6604  	event    string              // Event name to use for unpacking event data
  6605  
  6606  	logs chan types.Log        // Log channel receiving the found contract events
  6607  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  6608  	done bool                  // Whether the subscription completed delivering logs
  6609  	fail error                 // Occurred error to stop iteration
  6610  }
  6611  
  6612  // Next advances the iterator to the subsequent event, returning whether there
  6613  // are any more events found. In case of a retrieval or parsing error, false is
  6614  // returned and Error() can be queried for the exact failure.
  6615  func (it *IERC721EnumerableTransferIterator) Next() bool {
  6616  	// If the iterator failed, stop iterating
  6617  	if it.fail != nil {
  6618  		return false
  6619  	}
  6620  	// If the iterator completed, deliver directly whatever's available
  6621  	if it.done {
  6622  		select {
  6623  		case log := <-it.logs:
  6624  			it.Event = new(IERC721EnumerableTransfer)
  6625  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6626  				it.fail = err
  6627  				return false
  6628  			}
  6629  			it.Event.Raw = log
  6630  			return true
  6631  
  6632  		default:
  6633  			return false
  6634  		}
  6635  	}
  6636  	// Iterator still in progress, wait for either a data or an error event
  6637  	select {
  6638  	case log := <-it.logs:
  6639  		it.Event = new(IERC721EnumerableTransfer)
  6640  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  6641  			it.fail = err
  6642  			return false
  6643  		}
  6644  		it.Event.Raw = log
  6645  		return true
  6646  
  6647  	case err := <-it.sub.Err():
  6648  		it.done = true
  6649  		it.fail = err
  6650  		return it.Next()
  6651  	}
  6652  }
  6653  
  6654  // Error returns any retrieval or parsing error occurred during filtering.
  6655  func (it *IERC721EnumerableTransferIterator) Error() error {
  6656  	return it.fail
  6657  }
  6658  
  6659  // Close terminates the iteration process, releasing any pending underlying
  6660  // resources.
  6661  func (it *IERC721EnumerableTransferIterator) Close() error {
  6662  	it.sub.Unsubscribe()
  6663  	return nil
  6664  }
  6665  
  6666  // IERC721EnumerableTransfer represents a Transfer event raised by the IERC721Enumerable contract.
  6667  type IERC721EnumerableTransfer struct {
  6668  	From    common.Address
  6669  	To      common.Address
  6670  	TokenId *big.Int
  6671  	Raw     types.Log // Blockchain specific contextual infos
  6672  }
  6673  
  6674  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  6675  //
  6676  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  6677  func (_IERC721Enumerable *IERC721EnumerableFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721EnumerableTransferIterator, error) {
  6678  
  6679  	var fromRule []interface{}
  6680  	for _, fromItem := range from {
  6681  		fromRule = append(fromRule, fromItem)
  6682  	}
  6683  	var toRule []interface{}
  6684  	for _, toItem := range to {
  6685  		toRule = append(toRule, toItem)
  6686  	}
  6687  	var tokenIdRule []interface{}
  6688  	for _, tokenIdItem := range tokenId {
  6689  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6690  	}
  6691  
  6692  	logs, sub, err := _IERC721Enumerable.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  6693  	if err != nil {
  6694  		return nil, err
  6695  	}
  6696  	return &IERC721EnumerableTransferIterator{contract: _IERC721Enumerable.contract, event: "Transfer", logs: logs, sub: sub}, nil
  6697  }
  6698  
  6699  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  6700  //
  6701  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  6702  func (_IERC721Enumerable *IERC721EnumerableFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721EnumerableTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  6703  
  6704  	var fromRule []interface{}
  6705  	for _, fromItem := range from {
  6706  		fromRule = append(fromRule, fromItem)
  6707  	}
  6708  	var toRule []interface{}
  6709  	for _, toItem := range to {
  6710  		toRule = append(toRule, toItem)
  6711  	}
  6712  	var tokenIdRule []interface{}
  6713  	for _, tokenIdItem := range tokenId {
  6714  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  6715  	}
  6716  
  6717  	logs, sub, err := _IERC721Enumerable.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  6718  	if err != nil {
  6719  		return nil, err
  6720  	}
  6721  	return event.NewSubscription(func(quit <-chan struct{}) error {
  6722  		defer sub.Unsubscribe()
  6723  		for {
  6724  			select {
  6725  			case log := <-logs:
  6726  				// New log arrived, parse the event and forward to the user
  6727  				event := new(IERC721EnumerableTransfer)
  6728  				if err := _IERC721Enumerable.contract.UnpackLog(event, "Transfer", log); err != nil {
  6729  					return err
  6730  				}
  6731  				event.Raw = log
  6732  
  6733  				select {
  6734  				case sink <- event:
  6735  				case err := <-sub.Err():
  6736  					return err
  6737  				case <-quit:
  6738  					return nil
  6739  				}
  6740  			case err := <-sub.Err():
  6741  				return err
  6742  			case <-quit:
  6743  				return nil
  6744  			}
  6745  		}
  6746  	}), nil
  6747  }
  6748  
  6749  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  6750  //
  6751  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  6752  func (_IERC721Enumerable *IERC721EnumerableFilterer) ParseTransfer(log types.Log) (*IERC721EnumerableTransfer, error) {
  6753  	event := new(IERC721EnumerableTransfer)
  6754  	if err := _IERC721Enumerable.contract.UnpackLog(event, "Transfer", log); err != nil {
  6755  		return nil, err
  6756  	}
  6757  	event.Raw = log
  6758  	return event, nil
  6759  }
  6760  
  6761  // IERC721FullABI is the input ABI used to generate the binding from.
  6762  const IERC721FullABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  6763  
  6764  // IERC721FullFuncSigs maps the 4-byte function signature to its string representation.
  6765  var IERC721FullFuncSigs = map[string]string{
  6766  	"095ea7b3": "approve(address,uint256)",
  6767  	"70a08231": "balanceOf(address)",
  6768  	"081812fc": "getApproved(uint256)",
  6769  	"e985e9c5": "isApprovedForAll(address,address)",
  6770  	"06fdde03": "name()",
  6771  	"6352211e": "ownerOf(uint256)",
  6772  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  6773  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  6774  	"a22cb465": "setApprovalForAll(address,bool)",
  6775  	"01ffc9a7": "supportsInterface(bytes4)",
  6776  	"95d89b41": "symbol()",
  6777  	"4f6ccce7": "tokenByIndex(uint256)",
  6778  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
  6779  	"c87b56dd": "tokenURI(uint256)",
  6780  	"18160ddd": "totalSupply()",
  6781  	"23b872dd": "transferFrom(address,address,uint256)",
  6782  }
  6783  
  6784  // IERC721Full is an auto generated Go binding around an Ethereum contract.
  6785  type IERC721Full struct {
  6786  	IERC721FullCaller     // Read-only binding to the contract
  6787  	IERC721FullTransactor // Write-only binding to the contract
  6788  	IERC721FullFilterer   // Log filterer for contract events
  6789  }
  6790  
  6791  // IERC721FullCaller is an auto generated read-only Go binding around an Ethereum contract.
  6792  type IERC721FullCaller struct {
  6793  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  6794  }
  6795  
  6796  // IERC721FullTransactor is an auto generated write-only Go binding around an Ethereum contract.
  6797  type IERC721FullTransactor struct {
  6798  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  6799  }
  6800  
  6801  // IERC721FullFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  6802  type IERC721FullFilterer struct {
  6803  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  6804  }
  6805  
  6806  // IERC721FullSession is an auto generated Go binding around an Ethereum contract,
  6807  // with pre-set call and transact options.
  6808  type IERC721FullSession struct {
  6809  	Contract     *IERC721Full      // Generic contract binding to set the session for
  6810  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  6811  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  6812  }
  6813  
  6814  // IERC721FullCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  6815  // with pre-set call options.
  6816  type IERC721FullCallerSession struct {
  6817  	Contract *IERC721FullCaller // Generic contract caller binding to set the session for
  6818  	CallOpts bind.CallOpts      // Call options to use throughout this session
  6819  }
  6820  
  6821  // IERC721FullTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  6822  // with pre-set transact options.
  6823  type IERC721FullTransactorSession struct {
  6824  	Contract     *IERC721FullTransactor // Generic contract transactor binding to set the session for
  6825  	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
  6826  }
  6827  
  6828  // IERC721FullRaw is an auto generated low-level Go binding around an Ethereum contract.
  6829  type IERC721FullRaw struct {
  6830  	Contract *IERC721Full // Generic contract binding to access the raw methods on
  6831  }
  6832  
  6833  // IERC721FullCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  6834  type IERC721FullCallerRaw struct {
  6835  	Contract *IERC721FullCaller // Generic read-only contract binding to access the raw methods on
  6836  }
  6837  
  6838  // IERC721FullTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  6839  type IERC721FullTransactorRaw struct {
  6840  	Contract *IERC721FullTransactor // Generic write-only contract binding to access the raw methods on
  6841  }
  6842  
  6843  // NewIERC721Full creates a new instance of IERC721Full, bound to a specific deployed contract.
  6844  func NewIERC721Full(address common.Address, backend bind.ContractBackend) (*IERC721Full, error) {
  6845  	contract, err := bindIERC721Full(address, backend, backend, backend)
  6846  	if err != nil {
  6847  		return nil, err
  6848  	}
  6849  	return &IERC721Full{IERC721FullCaller: IERC721FullCaller{contract: contract}, IERC721FullTransactor: IERC721FullTransactor{contract: contract}, IERC721FullFilterer: IERC721FullFilterer{contract: contract}}, nil
  6850  }
  6851  
  6852  // NewIERC721FullCaller creates a new read-only instance of IERC721Full, bound to a specific deployed contract.
  6853  func NewIERC721FullCaller(address common.Address, caller bind.ContractCaller) (*IERC721FullCaller, error) {
  6854  	contract, err := bindIERC721Full(address, caller, nil, nil)
  6855  	if err != nil {
  6856  		return nil, err
  6857  	}
  6858  	return &IERC721FullCaller{contract: contract}, nil
  6859  }
  6860  
  6861  // NewIERC721FullTransactor creates a new write-only instance of IERC721Full, bound to a specific deployed contract.
  6862  func NewIERC721FullTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721FullTransactor, error) {
  6863  	contract, err := bindIERC721Full(address, nil, transactor, nil)
  6864  	if err != nil {
  6865  		return nil, err
  6866  	}
  6867  	return &IERC721FullTransactor{contract: contract}, nil
  6868  }
  6869  
  6870  // NewIERC721FullFilterer creates a new log filterer instance of IERC721Full, bound to a specific deployed contract.
  6871  func NewIERC721FullFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721FullFilterer, error) {
  6872  	contract, err := bindIERC721Full(address, nil, nil, filterer)
  6873  	if err != nil {
  6874  		return nil, err
  6875  	}
  6876  	return &IERC721FullFilterer{contract: contract}, nil
  6877  }
  6878  
  6879  // bindIERC721Full binds a generic wrapper to an already deployed contract.
  6880  func bindIERC721Full(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  6881  	parsed, err := abi.JSON(strings.NewReader(IERC721FullABI))
  6882  	if err != nil {
  6883  		return nil, err
  6884  	}
  6885  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  6886  }
  6887  
  6888  // Call invokes the (constant) contract method with params as input values and
  6889  // sets the output to result. The result type might be a single field for simple
  6890  // returns, a slice of interfaces for anonymous returns and a struct for named
  6891  // returns.
  6892  func (_IERC721Full *IERC721FullRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  6893  	return _IERC721Full.Contract.IERC721FullCaller.contract.Call(opts, result, method, params...)
  6894  }
  6895  
  6896  // Transfer initiates a plain transaction to move funds to the contract, calling
  6897  // its default method if one is available.
  6898  func (_IERC721Full *IERC721FullRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  6899  	return _IERC721Full.Contract.IERC721FullTransactor.contract.Transfer(opts)
  6900  }
  6901  
  6902  // Transact invokes the (paid) contract method with params as input values.
  6903  func (_IERC721Full *IERC721FullRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  6904  	return _IERC721Full.Contract.IERC721FullTransactor.contract.Transact(opts, method, params...)
  6905  }
  6906  
  6907  // Call invokes the (constant) contract method with params as input values and
  6908  // sets the output to result. The result type might be a single field for simple
  6909  // returns, a slice of interfaces for anonymous returns and a struct for named
  6910  // returns.
  6911  func (_IERC721Full *IERC721FullCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  6912  	return _IERC721Full.Contract.contract.Call(opts, result, method, params...)
  6913  }
  6914  
  6915  // Transfer initiates a plain transaction to move funds to the contract, calling
  6916  // its default method if one is available.
  6917  func (_IERC721Full *IERC721FullTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  6918  	return _IERC721Full.Contract.contract.Transfer(opts)
  6919  }
  6920  
  6921  // Transact invokes the (paid) contract method with params as input values.
  6922  func (_IERC721Full *IERC721FullTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  6923  	return _IERC721Full.Contract.contract.Transact(opts, method, params...)
  6924  }
  6925  
  6926  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  6927  //
  6928  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  6929  func (_IERC721Full *IERC721FullCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  6930  	var out []interface{}
  6931  	err := _IERC721Full.contract.Call(opts, &out, "balanceOf", owner)
  6932  
  6933  	if err != nil {
  6934  		return *new(*big.Int), err
  6935  	}
  6936  
  6937  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  6938  
  6939  	return out0, err
  6940  
  6941  }
  6942  
  6943  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  6944  //
  6945  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  6946  func (_IERC721Full *IERC721FullSession) BalanceOf(owner common.Address) (*big.Int, error) {
  6947  	return _IERC721Full.Contract.BalanceOf(&_IERC721Full.CallOpts, owner)
  6948  }
  6949  
  6950  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  6951  //
  6952  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  6953  func (_IERC721Full *IERC721FullCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  6954  	return _IERC721Full.Contract.BalanceOf(&_IERC721Full.CallOpts, owner)
  6955  }
  6956  
  6957  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  6958  //
  6959  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  6960  func (_IERC721Full *IERC721FullCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  6961  	var out []interface{}
  6962  	err := _IERC721Full.contract.Call(opts, &out, "getApproved", tokenId)
  6963  
  6964  	if err != nil {
  6965  		return *new(common.Address), err
  6966  	}
  6967  
  6968  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  6969  
  6970  	return out0, err
  6971  
  6972  }
  6973  
  6974  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  6975  //
  6976  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  6977  func (_IERC721Full *IERC721FullSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  6978  	return _IERC721Full.Contract.GetApproved(&_IERC721Full.CallOpts, tokenId)
  6979  }
  6980  
  6981  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  6982  //
  6983  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  6984  func (_IERC721Full *IERC721FullCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  6985  	return _IERC721Full.Contract.GetApproved(&_IERC721Full.CallOpts, tokenId)
  6986  }
  6987  
  6988  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  6989  //
  6990  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  6991  func (_IERC721Full *IERC721FullCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  6992  	var out []interface{}
  6993  	err := _IERC721Full.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  6994  
  6995  	if err != nil {
  6996  		return *new(bool), err
  6997  	}
  6998  
  6999  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  7000  
  7001  	return out0, err
  7002  
  7003  }
  7004  
  7005  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  7006  //
  7007  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  7008  func (_IERC721Full *IERC721FullSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  7009  	return _IERC721Full.Contract.IsApprovedForAll(&_IERC721Full.CallOpts, owner, operator)
  7010  }
  7011  
  7012  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  7013  //
  7014  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  7015  func (_IERC721Full *IERC721FullCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  7016  	return _IERC721Full.Contract.IsApprovedForAll(&_IERC721Full.CallOpts, owner, operator)
  7017  }
  7018  
  7019  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  7020  //
  7021  // Solidity: function name() view returns(string)
  7022  func (_IERC721Full *IERC721FullCaller) Name(opts *bind.CallOpts) (string, error) {
  7023  	var out []interface{}
  7024  	err := _IERC721Full.contract.Call(opts, &out, "name")
  7025  
  7026  	if err != nil {
  7027  		return *new(string), err
  7028  	}
  7029  
  7030  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  7031  
  7032  	return out0, err
  7033  
  7034  }
  7035  
  7036  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  7037  //
  7038  // Solidity: function name() view returns(string)
  7039  func (_IERC721Full *IERC721FullSession) Name() (string, error) {
  7040  	return _IERC721Full.Contract.Name(&_IERC721Full.CallOpts)
  7041  }
  7042  
  7043  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  7044  //
  7045  // Solidity: function name() view returns(string)
  7046  func (_IERC721Full *IERC721FullCallerSession) Name() (string, error) {
  7047  	return _IERC721Full.Contract.Name(&_IERC721Full.CallOpts)
  7048  }
  7049  
  7050  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  7051  //
  7052  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  7053  func (_IERC721Full *IERC721FullCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  7054  	var out []interface{}
  7055  	err := _IERC721Full.contract.Call(opts, &out, "ownerOf", tokenId)
  7056  
  7057  	if err != nil {
  7058  		return *new(common.Address), err
  7059  	}
  7060  
  7061  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  7062  
  7063  	return out0, err
  7064  
  7065  }
  7066  
  7067  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  7068  //
  7069  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  7070  func (_IERC721Full *IERC721FullSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  7071  	return _IERC721Full.Contract.OwnerOf(&_IERC721Full.CallOpts, tokenId)
  7072  }
  7073  
  7074  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  7075  //
  7076  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  7077  func (_IERC721Full *IERC721FullCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  7078  	return _IERC721Full.Contract.OwnerOf(&_IERC721Full.CallOpts, tokenId)
  7079  }
  7080  
  7081  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  7082  //
  7083  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  7084  func (_IERC721Full *IERC721FullCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  7085  	var out []interface{}
  7086  	err := _IERC721Full.contract.Call(opts, &out, "supportsInterface", interfaceId)
  7087  
  7088  	if err != nil {
  7089  		return *new(bool), err
  7090  	}
  7091  
  7092  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  7093  
  7094  	return out0, err
  7095  
  7096  }
  7097  
  7098  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  7099  //
  7100  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  7101  func (_IERC721Full *IERC721FullSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  7102  	return _IERC721Full.Contract.SupportsInterface(&_IERC721Full.CallOpts, interfaceId)
  7103  }
  7104  
  7105  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  7106  //
  7107  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  7108  func (_IERC721Full *IERC721FullCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  7109  	return _IERC721Full.Contract.SupportsInterface(&_IERC721Full.CallOpts, interfaceId)
  7110  }
  7111  
  7112  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  7113  //
  7114  // Solidity: function symbol() view returns(string)
  7115  func (_IERC721Full *IERC721FullCaller) Symbol(opts *bind.CallOpts) (string, error) {
  7116  	var out []interface{}
  7117  	err := _IERC721Full.contract.Call(opts, &out, "symbol")
  7118  
  7119  	if err != nil {
  7120  		return *new(string), err
  7121  	}
  7122  
  7123  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  7124  
  7125  	return out0, err
  7126  
  7127  }
  7128  
  7129  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  7130  //
  7131  // Solidity: function symbol() view returns(string)
  7132  func (_IERC721Full *IERC721FullSession) Symbol() (string, error) {
  7133  	return _IERC721Full.Contract.Symbol(&_IERC721Full.CallOpts)
  7134  }
  7135  
  7136  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  7137  //
  7138  // Solidity: function symbol() view returns(string)
  7139  func (_IERC721Full *IERC721FullCallerSession) Symbol() (string, error) {
  7140  	return _IERC721Full.Contract.Symbol(&_IERC721Full.CallOpts)
  7141  }
  7142  
  7143  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  7144  //
  7145  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  7146  func (_IERC721Full *IERC721FullCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
  7147  	var out []interface{}
  7148  	err := _IERC721Full.contract.Call(opts, &out, "tokenByIndex", index)
  7149  
  7150  	if err != nil {
  7151  		return *new(*big.Int), err
  7152  	}
  7153  
  7154  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  7155  
  7156  	return out0, err
  7157  
  7158  }
  7159  
  7160  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  7161  //
  7162  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  7163  func (_IERC721Full *IERC721FullSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  7164  	return _IERC721Full.Contract.TokenByIndex(&_IERC721Full.CallOpts, index)
  7165  }
  7166  
  7167  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
  7168  //
  7169  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
  7170  func (_IERC721Full *IERC721FullCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
  7171  	return _IERC721Full.Contract.TokenByIndex(&_IERC721Full.CallOpts, index)
  7172  }
  7173  
  7174  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  7175  //
  7176  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  7177  func (_IERC721Full *IERC721FullCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
  7178  	var out []interface{}
  7179  	err := _IERC721Full.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
  7180  
  7181  	if err != nil {
  7182  		return *new(*big.Int), err
  7183  	}
  7184  
  7185  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  7186  
  7187  	return out0, err
  7188  
  7189  }
  7190  
  7191  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  7192  //
  7193  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  7194  func (_IERC721Full *IERC721FullSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  7195  	return _IERC721Full.Contract.TokenOfOwnerByIndex(&_IERC721Full.CallOpts, owner, index)
  7196  }
  7197  
  7198  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
  7199  //
  7200  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256 tokenId)
  7201  func (_IERC721Full *IERC721FullCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
  7202  	return _IERC721Full.Contract.TokenOfOwnerByIndex(&_IERC721Full.CallOpts, owner, index)
  7203  }
  7204  
  7205  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  7206  //
  7207  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  7208  func (_IERC721Full *IERC721FullCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  7209  	var out []interface{}
  7210  	err := _IERC721Full.contract.Call(opts, &out, "tokenURI", tokenId)
  7211  
  7212  	if err != nil {
  7213  		return *new(string), err
  7214  	}
  7215  
  7216  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  7217  
  7218  	return out0, err
  7219  
  7220  }
  7221  
  7222  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  7223  //
  7224  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  7225  func (_IERC721Full *IERC721FullSession) TokenURI(tokenId *big.Int) (string, error) {
  7226  	return _IERC721Full.Contract.TokenURI(&_IERC721Full.CallOpts, tokenId)
  7227  }
  7228  
  7229  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  7230  //
  7231  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  7232  func (_IERC721Full *IERC721FullCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  7233  	return _IERC721Full.Contract.TokenURI(&_IERC721Full.CallOpts, tokenId)
  7234  }
  7235  
  7236  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  7237  //
  7238  // Solidity: function totalSupply() view returns(uint256)
  7239  func (_IERC721Full *IERC721FullCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
  7240  	var out []interface{}
  7241  	err := _IERC721Full.contract.Call(opts, &out, "totalSupply")
  7242  
  7243  	if err != nil {
  7244  		return *new(*big.Int), err
  7245  	}
  7246  
  7247  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  7248  
  7249  	return out0, err
  7250  
  7251  }
  7252  
  7253  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  7254  //
  7255  // Solidity: function totalSupply() view returns(uint256)
  7256  func (_IERC721Full *IERC721FullSession) TotalSupply() (*big.Int, error) {
  7257  	return _IERC721Full.Contract.TotalSupply(&_IERC721Full.CallOpts)
  7258  }
  7259  
  7260  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
  7261  //
  7262  // Solidity: function totalSupply() view returns(uint256)
  7263  func (_IERC721Full *IERC721FullCallerSession) TotalSupply() (*big.Int, error) {
  7264  	return _IERC721Full.Contract.TotalSupply(&_IERC721Full.CallOpts)
  7265  }
  7266  
  7267  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  7268  //
  7269  // Solidity: function approve(address to, uint256 tokenId) returns()
  7270  func (_IERC721Full *IERC721FullTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7271  	return _IERC721Full.contract.Transact(opts, "approve", to, tokenId)
  7272  }
  7273  
  7274  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  7275  //
  7276  // Solidity: function approve(address to, uint256 tokenId) returns()
  7277  func (_IERC721Full *IERC721FullSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7278  	return _IERC721Full.Contract.Approve(&_IERC721Full.TransactOpts, to, tokenId)
  7279  }
  7280  
  7281  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  7282  //
  7283  // Solidity: function approve(address to, uint256 tokenId) returns()
  7284  func (_IERC721Full *IERC721FullTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7285  	return _IERC721Full.Contract.Approve(&_IERC721Full.TransactOpts, to, tokenId)
  7286  }
  7287  
  7288  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  7289  //
  7290  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  7291  func (_IERC721Full *IERC721FullTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7292  	return _IERC721Full.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  7293  }
  7294  
  7295  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  7296  //
  7297  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  7298  func (_IERC721Full *IERC721FullSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7299  	return _IERC721Full.Contract.SafeTransferFrom(&_IERC721Full.TransactOpts, from, to, tokenId)
  7300  }
  7301  
  7302  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  7303  //
  7304  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  7305  func (_IERC721Full *IERC721FullTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7306  	return _IERC721Full.Contract.SafeTransferFrom(&_IERC721Full.TransactOpts, from, to, tokenId)
  7307  }
  7308  
  7309  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  7310  //
  7311  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  7312  func (_IERC721Full *IERC721FullTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  7313  	return _IERC721Full.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  7314  }
  7315  
  7316  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  7317  //
  7318  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  7319  func (_IERC721Full *IERC721FullSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  7320  	return _IERC721Full.Contract.SafeTransferFrom0(&_IERC721Full.TransactOpts, from, to, tokenId, data)
  7321  }
  7322  
  7323  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  7324  //
  7325  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  7326  func (_IERC721Full *IERC721FullTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  7327  	return _IERC721Full.Contract.SafeTransferFrom0(&_IERC721Full.TransactOpts, from, to, tokenId, data)
  7328  }
  7329  
  7330  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  7331  //
  7332  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  7333  func (_IERC721Full *IERC721FullTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  7334  	return _IERC721Full.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  7335  }
  7336  
  7337  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  7338  //
  7339  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  7340  func (_IERC721Full *IERC721FullSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  7341  	return _IERC721Full.Contract.SetApprovalForAll(&_IERC721Full.TransactOpts, operator, _approved)
  7342  }
  7343  
  7344  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  7345  //
  7346  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  7347  func (_IERC721Full *IERC721FullTransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  7348  	return _IERC721Full.Contract.SetApprovalForAll(&_IERC721Full.TransactOpts, operator, _approved)
  7349  }
  7350  
  7351  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  7352  //
  7353  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  7354  func (_IERC721Full *IERC721FullTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7355  	return _IERC721Full.contract.Transact(opts, "transferFrom", from, to, tokenId)
  7356  }
  7357  
  7358  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  7359  //
  7360  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  7361  func (_IERC721Full *IERC721FullSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7362  	return _IERC721Full.Contract.TransferFrom(&_IERC721Full.TransactOpts, from, to, tokenId)
  7363  }
  7364  
  7365  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  7366  //
  7367  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  7368  func (_IERC721Full *IERC721FullTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  7369  	return _IERC721Full.Contract.TransferFrom(&_IERC721Full.TransactOpts, from, to, tokenId)
  7370  }
  7371  
  7372  // IERC721FullApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the IERC721Full contract.
  7373  type IERC721FullApprovalIterator struct {
  7374  	Event *IERC721FullApproval // Event containing the contract specifics and raw log
  7375  
  7376  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7377  	event    string              // Event name to use for unpacking event data
  7378  
  7379  	logs chan types.Log        // Log channel receiving the found contract events
  7380  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7381  	done bool                  // Whether the subscription completed delivering logs
  7382  	fail error                 // Occurred error to stop iteration
  7383  }
  7384  
  7385  // Next advances the iterator to the subsequent event, returning whether there
  7386  // are any more events found. In case of a retrieval or parsing error, false is
  7387  // returned and Error() can be queried for the exact failure.
  7388  func (it *IERC721FullApprovalIterator) Next() bool {
  7389  	// If the iterator failed, stop iterating
  7390  	if it.fail != nil {
  7391  		return false
  7392  	}
  7393  	// If the iterator completed, deliver directly whatever's available
  7394  	if it.done {
  7395  		select {
  7396  		case log := <-it.logs:
  7397  			it.Event = new(IERC721FullApproval)
  7398  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7399  				it.fail = err
  7400  				return false
  7401  			}
  7402  			it.Event.Raw = log
  7403  			return true
  7404  
  7405  		default:
  7406  			return false
  7407  		}
  7408  	}
  7409  	// Iterator still in progress, wait for either a data or an error event
  7410  	select {
  7411  	case log := <-it.logs:
  7412  		it.Event = new(IERC721FullApproval)
  7413  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7414  			it.fail = err
  7415  			return false
  7416  		}
  7417  		it.Event.Raw = log
  7418  		return true
  7419  
  7420  	case err := <-it.sub.Err():
  7421  		it.done = true
  7422  		it.fail = err
  7423  		return it.Next()
  7424  	}
  7425  }
  7426  
  7427  // Error returns any retrieval or parsing error occurred during filtering.
  7428  func (it *IERC721FullApprovalIterator) Error() error {
  7429  	return it.fail
  7430  }
  7431  
  7432  // Close terminates the iteration process, releasing any pending underlying
  7433  // resources.
  7434  func (it *IERC721FullApprovalIterator) Close() error {
  7435  	it.sub.Unsubscribe()
  7436  	return nil
  7437  }
  7438  
  7439  // IERC721FullApproval represents a Approval event raised by the IERC721Full contract.
  7440  type IERC721FullApproval struct {
  7441  	Owner    common.Address
  7442  	Approved common.Address
  7443  	TokenId  *big.Int
  7444  	Raw      types.Log // Blockchain specific contextual infos
  7445  }
  7446  
  7447  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  7448  //
  7449  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  7450  func (_IERC721Full *IERC721FullFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721FullApprovalIterator, error) {
  7451  
  7452  	var ownerRule []interface{}
  7453  	for _, ownerItem := range owner {
  7454  		ownerRule = append(ownerRule, ownerItem)
  7455  	}
  7456  	var approvedRule []interface{}
  7457  	for _, approvedItem := range approved {
  7458  		approvedRule = append(approvedRule, approvedItem)
  7459  	}
  7460  	var tokenIdRule []interface{}
  7461  	for _, tokenIdItem := range tokenId {
  7462  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7463  	}
  7464  
  7465  	logs, sub, err := _IERC721Full.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  7466  	if err != nil {
  7467  		return nil, err
  7468  	}
  7469  	return &IERC721FullApprovalIterator{contract: _IERC721Full.contract, event: "Approval", logs: logs, sub: sub}, nil
  7470  }
  7471  
  7472  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  7473  //
  7474  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  7475  func (_IERC721Full *IERC721FullFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721FullApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  7476  
  7477  	var ownerRule []interface{}
  7478  	for _, ownerItem := range owner {
  7479  		ownerRule = append(ownerRule, ownerItem)
  7480  	}
  7481  	var approvedRule []interface{}
  7482  	for _, approvedItem := range approved {
  7483  		approvedRule = append(approvedRule, approvedItem)
  7484  	}
  7485  	var tokenIdRule []interface{}
  7486  	for _, tokenIdItem := range tokenId {
  7487  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7488  	}
  7489  
  7490  	logs, sub, err := _IERC721Full.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  7491  	if err != nil {
  7492  		return nil, err
  7493  	}
  7494  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7495  		defer sub.Unsubscribe()
  7496  		for {
  7497  			select {
  7498  			case log := <-logs:
  7499  				// New log arrived, parse the event and forward to the user
  7500  				event := new(IERC721FullApproval)
  7501  				if err := _IERC721Full.contract.UnpackLog(event, "Approval", log); err != nil {
  7502  					return err
  7503  				}
  7504  				event.Raw = log
  7505  
  7506  				select {
  7507  				case sink <- event:
  7508  				case err := <-sub.Err():
  7509  					return err
  7510  				case <-quit:
  7511  					return nil
  7512  				}
  7513  			case err := <-sub.Err():
  7514  				return err
  7515  			case <-quit:
  7516  				return nil
  7517  			}
  7518  		}
  7519  	}), nil
  7520  }
  7521  
  7522  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  7523  //
  7524  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  7525  func (_IERC721Full *IERC721FullFilterer) ParseApproval(log types.Log) (*IERC721FullApproval, error) {
  7526  	event := new(IERC721FullApproval)
  7527  	if err := _IERC721Full.contract.UnpackLog(event, "Approval", log); err != nil {
  7528  		return nil, err
  7529  	}
  7530  	event.Raw = log
  7531  	return event, nil
  7532  }
  7533  
  7534  // IERC721FullApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the IERC721Full contract.
  7535  type IERC721FullApprovalForAllIterator struct {
  7536  	Event *IERC721FullApprovalForAll // Event containing the contract specifics and raw log
  7537  
  7538  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7539  	event    string              // Event name to use for unpacking event data
  7540  
  7541  	logs chan types.Log        // Log channel receiving the found contract events
  7542  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7543  	done bool                  // Whether the subscription completed delivering logs
  7544  	fail error                 // Occurred error to stop iteration
  7545  }
  7546  
  7547  // Next advances the iterator to the subsequent event, returning whether there
  7548  // are any more events found. In case of a retrieval or parsing error, false is
  7549  // returned and Error() can be queried for the exact failure.
  7550  func (it *IERC721FullApprovalForAllIterator) Next() bool {
  7551  	// If the iterator failed, stop iterating
  7552  	if it.fail != nil {
  7553  		return false
  7554  	}
  7555  	// If the iterator completed, deliver directly whatever's available
  7556  	if it.done {
  7557  		select {
  7558  		case log := <-it.logs:
  7559  			it.Event = new(IERC721FullApprovalForAll)
  7560  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7561  				it.fail = err
  7562  				return false
  7563  			}
  7564  			it.Event.Raw = log
  7565  			return true
  7566  
  7567  		default:
  7568  			return false
  7569  		}
  7570  	}
  7571  	// Iterator still in progress, wait for either a data or an error event
  7572  	select {
  7573  	case log := <-it.logs:
  7574  		it.Event = new(IERC721FullApprovalForAll)
  7575  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7576  			it.fail = err
  7577  			return false
  7578  		}
  7579  		it.Event.Raw = log
  7580  		return true
  7581  
  7582  	case err := <-it.sub.Err():
  7583  		it.done = true
  7584  		it.fail = err
  7585  		return it.Next()
  7586  	}
  7587  }
  7588  
  7589  // Error returns any retrieval or parsing error occurred during filtering.
  7590  func (it *IERC721FullApprovalForAllIterator) Error() error {
  7591  	return it.fail
  7592  }
  7593  
  7594  // Close terminates the iteration process, releasing any pending underlying
  7595  // resources.
  7596  func (it *IERC721FullApprovalForAllIterator) Close() error {
  7597  	it.sub.Unsubscribe()
  7598  	return nil
  7599  }
  7600  
  7601  // IERC721FullApprovalForAll represents a ApprovalForAll event raised by the IERC721Full contract.
  7602  type IERC721FullApprovalForAll struct {
  7603  	Owner    common.Address
  7604  	Operator common.Address
  7605  	Approved bool
  7606  	Raw      types.Log // Blockchain specific contextual infos
  7607  }
  7608  
  7609  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  7610  //
  7611  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  7612  func (_IERC721Full *IERC721FullFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721FullApprovalForAllIterator, error) {
  7613  
  7614  	var ownerRule []interface{}
  7615  	for _, ownerItem := range owner {
  7616  		ownerRule = append(ownerRule, ownerItem)
  7617  	}
  7618  	var operatorRule []interface{}
  7619  	for _, operatorItem := range operator {
  7620  		operatorRule = append(operatorRule, operatorItem)
  7621  	}
  7622  
  7623  	logs, sub, err := _IERC721Full.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  7624  	if err != nil {
  7625  		return nil, err
  7626  	}
  7627  	return &IERC721FullApprovalForAllIterator{contract: _IERC721Full.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  7628  }
  7629  
  7630  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  7631  //
  7632  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  7633  func (_IERC721Full *IERC721FullFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721FullApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  7634  
  7635  	var ownerRule []interface{}
  7636  	for _, ownerItem := range owner {
  7637  		ownerRule = append(ownerRule, ownerItem)
  7638  	}
  7639  	var operatorRule []interface{}
  7640  	for _, operatorItem := range operator {
  7641  		operatorRule = append(operatorRule, operatorItem)
  7642  	}
  7643  
  7644  	logs, sub, err := _IERC721Full.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  7645  	if err != nil {
  7646  		return nil, err
  7647  	}
  7648  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7649  		defer sub.Unsubscribe()
  7650  		for {
  7651  			select {
  7652  			case log := <-logs:
  7653  				// New log arrived, parse the event and forward to the user
  7654  				event := new(IERC721FullApprovalForAll)
  7655  				if err := _IERC721Full.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  7656  					return err
  7657  				}
  7658  				event.Raw = log
  7659  
  7660  				select {
  7661  				case sink <- event:
  7662  				case err := <-sub.Err():
  7663  					return err
  7664  				case <-quit:
  7665  					return nil
  7666  				}
  7667  			case err := <-sub.Err():
  7668  				return err
  7669  			case <-quit:
  7670  				return nil
  7671  			}
  7672  		}
  7673  	}), nil
  7674  }
  7675  
  7676  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  7677  //
  7678  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  7679  func (_IERC721Full *IERC721FullFilterer) ParseApprovalForAll(log types.Log) (*IERC721FullApprovalForAll, error) {
  7680  	event := new(IERC721FullApprovalForAll)
  7681  	if err := _IERC721Full.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  7682  		return nil, err
  7683  	}
  7684  	event.Raw = log
  7685  	return event, nil
  7686  }
  7687  
  7688  // IERC721FullTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the IERC721Full contract.
  7689  type IERC721FullTransferIterator struct {
  7690  	Event *IERC721FullTransfer // Event containing the contract specifics and raw log
  7691  
  7692  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  7693  	event    string              // Event name to use for unpacking event data
  7694  
  7695  	logs chan types.Log        // Log channel receiving the found contract events
  7696  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  7697  	done bool                  // Whether the subscription completed delivering logs
  7698  	fail error                 // Occurred error to stop iteration
  7699  }
  7700  
  7701  // Next advances the iterator to the subsequent event, returning whether there
  7702  // are any more events found. In case of a retrieval or parsing error, false is
  7703  // returned and Error() can be queried for the exact failure.
  7704  func (it *IERC721FullTransferIterator) Next() bool {
  7705  	// If the iterator failed, stop iterating
  7706  	if it.fail != nil {
  7707  		return false
  7708  	}
  7709  	// If the iterator completed, deliver directly whatever's available
  7710  	if it.done {
  7711  		select {
  7712  		case log := <-it.logs:
  7713  			it.Event = new(IERC721FullTransfer)
  7714  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7715  				it.fail = err
  7716  				return false
  7717  			}
  7718  			it.Event.Raw = log
  7719  			return true
  7720  
  7721  		default:
  7722  			return false
  7723  		}
  7724  	}
  7725  	// Iterator still in progress, wait for either a data or an error event
  7726  	select {
  7727  	case log := <-it.logs:
  7728  		it.Event = new(IERC721FullTransfer)
  7729  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  7730  			it.fail = err
  7731  			return false
  7732  		}
  7733  		it.Event.Raw = log
  7734  		return true
  7735  
  7736  	case err := <-it.sub.Err():
  7737  		it.done = true
  7738  		it.fail = err
  7739  		return it.Next()
  7740  	}
  7741  }
  7742  
  7743  // Error returns any retrieval or parsing error occurred during filtering.
  7744  func (it *IERC721FullTransferIterator) Error() error {
  7745  	return it.fail
  7746  }
  7747  
  7748  // Close terminates the iteration process, releasing any pending underlying
  7749  // resources.
  7750  func (it *IERC721FullTransferIterator) Close() error {
  7751  	it.sub.Unsubscribe()
  7752  	return nil
  7753  }
  7754  
  7755  // IERC721FullTransfer represents a Transfer event raised by the IERC721Full contract.
  7756  type IERC721FullTransfer struct {
  7757  	From    common.Address
  7758  	To      common.Address
  7759  	TokenId *big.Int
  7760  	Raw     types.Log // Blockchain specific contextual infos
  7761  }
  7762  
  7763  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7764  //
  7765  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  7766  func (_IERC721Full *IERC721FullFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721FullTransferIterator, error) {
  7767  
  7768  	var fromRule []interface{}
  7769  	for _, fromItem := range from {
  7770  		fromRule = append(fromRule, fromItem)
  7771  	}
  7772  	var toRule []interface{}
  7773  	for _, toItem := range to {
  7774  		toRule = append(toRule, toItem)
  7775  	}
  7776  	var tokenIdRule []interface{}
  7777  	for _, tokenIdItem := range tokenId {
  7778  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7779  	}
  7780  
  7781  	logs, sub, err := _IERC721Full.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  7782  	if err != nil {
  7783  		return nil, err
  7784  	}
  7785  	return &IERC721FullTransferIterator{contract: _IERC721Full.contract, event: "Transfer", logs: logs, sub: sub}, nil
  7786  }
  7787  
  7788  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7789  //
  7790  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  7791  func (_IERC721Full *IERC721FullFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721FullTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  7792  
  7793  	var fromRule []interface{}
  7794  	for _, fromItem := range from {
  7795  		fromRule = append(fromRule, fromItem)
  7796  	}
  7797  	var toRule []interface{}
  7798  	for _, toItem := range to {
  7799  		toRule = append(toRule, toItem)
  7800  	}
  7801  	var tokenIdRule []interface{}
  7802  	for _, tokenIdItem := range tokenId {
  7803  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  7804  	}
  7805  
  7806  	logs, sub, err := _IERC721Full.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  7807  	if err != nil {
  7808  		return nil, err
  7809  	}
  7810  	return event.NewSubscription(func(quit <-chan struct{}) error {
  7811  		defer sub.Unsubscribe()
  7812  		for {
  7813  			select {
  7814  			case log := <-logs:
  7815  				// New log arrived, parse the event and forward to the user
  7816  				event := new(IERC721FullTransfer)
  7817  				if err := _IERC721Full.contract.UnpackLog(event, "Transfer", log); err != nil {
  7818  					return err
  7819  				}
  7820  				event.Raw = log
  7821  
  7822  				select {
  7823  				case sink <- event:
  7824  				case err := <-sub.Err():
  7825  					return err
  7826  				case <-quit:
  7827  					return nil
  7828  				}
  7829  			case err := <-sub.Err():
  7830  				return err
  7831  			case <-quit:
  7832  				return nil
  7833  			}
  7834  		}
  7835  	}), nil
  7836  }
  7837  
  7838  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  7839  //
  7840  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  7841  func (_IERC721Full *IERC721FullFilterer) ParseTransfer(log types.Log) (*IERC721FullTransfer, error) {
  7842  	event := new(IERC721FullTransfer)
  7843  	if err := _IERC721Full.contract.UnpackLog(event, "Transfer", log); err != nil {
  7844  		return nil, err
  7845  	}
  7846  	event.Raw = log
  7847  	return event, nil
  7848  }
  7849  
  7850  // IERC721MetadataABI is the input ABI used to generate the binding from.
  7851  const IERC721MetadataABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"operator\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"_approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"}]"
  7852  
  7853  // IERC721MetadataFuncSigs maps the 4-byte function signature to its string representation.
  7854  var IERC721MetadataFuncSigs = map[string]string{
  7855  	"095ea7b3": "approve(address,uint256)",
  7856  	"70a08231": "balanceOf(address)",
  7857  	"081812fc": "getApproved(uint256)",
  7858  	"e985e9c5": "isApprovedForAll(address,address)",
  7859  	"06fdde03": "name()",
  7860  	"6352211e": "ownerOf(uint256)",
  7861  	"42842e0e": "safeTransferFrom(address,address,uint256)",
  7862  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
  7863  	"a22cb465": "setApprovalForAll(address,bool)",
  7864  	"01ffc9a7": "supportsInterface(bytes4)",
  7865  	"95d89b41": "symbol()",
  7866  	"c87b56dd": "tokenURI(uint256)",
  7867  	"23b872dd": "transferFrom(address,address,uint256)",
  7868  }
  7869  
  7870  // IERC721Metadata is an auto generated Go binding around an Ethereum contract.
  7871  type IERC721Metadata struct {
  7872  	IERC721MetadataCaller     // Read-only binding to the contract
  7873  	IERC721MetadataTransactor // Write-only binding to the contract
  7874  	IERC721MetadataFilterer   // Log filterer for contract events
  7875  }
  7876  
  7877  // IERC721MetadataCaller is an auto generated read-only Go binding around an Ethereum contract.
  7878  type IERC721MetadataCaller struct {
  7879  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  7880  }
  7881  
  7882  // IERC721MetadataTransactor is an auto generated write-only Go binding around an Ethereum contract.
  7883  type IERC721MetadataTransactor struct {
  7884  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  7885  }
  7886  
  7887  // IERC721MetadataFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  7888  type IERC721MetadataFilterer struct {
  7889  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  7890  }
  7891  
  7892  // IERC721MetadataSession is an auto generated Go binding around an Ethereum contract,
  7893  // with pre-set call and transact options.
  7894  type IERC721MetadataSession struct {
  7895  	Contract     *IERC721Metadata  // Generic contract binding to set the session for
  7896  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  7897  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  7898  }
  7899  
  7900  // IERC721MetadataCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  7901  // with pre-set call options.
  7902  type IERC721MetadataCallerSession struct {
  7903  	Contract *IERC721MetadataCaller // Generic contract caller binding to set the session for
  7904  	CallOpts bind.CallOpts          // Call options to use throughout this session
  7905  }
  7906  
  7907  // IERC721MetadataTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  7908  // with pre-set transact options.
  7909  type IERC721MetadataTransactorSession struct {
  7910  	Contract     *IERC721MetadataTransactor // Generic contract transactor binding to set the session for
  7911  	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
  7912  }
  7913  
  7914  // IERC721MetadataRaw is an auto generated low-level Go binding around an Ethereum contract.
  7915  type IERC721MetadataRaw struct {
  7916  	Contract *IERC721Metadata // Generic contract binding to access the raw methods on
  7917  }
  7918  
  7919  // IERC721MetadataCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  7920  type IERC721MetadataCallerRaw struct {
  7921  	Contract *IERC721MetadataCaller // Generic read-only contract binding to access the raw methods on
  7922  }
  7923  
  7924  // IERC721MetadataTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  7925  type IERC721MetadataTransactorRaw struct {
  7926  	Contract *IERC721MetadataTransactor // Generic write-only contract binding to access the raw methods on
  7927  }
  7928  
  7929  // NewIERC721Metadata creates a new instance of IERC721Metadata, bound to a specific deployed contract.
  7930  func NewIERC721Metadata(address common.Address, backend bind.ContractBackend) (*IERC721Metadata, error) {
  7931  	contract, err := bindIERC721Metadata(address, backend, backend, backend)
  7932  	if err != nil {
  7933  		return nil, err
  7934  	}
  7935  	return &IERC721Metadata{IERC721MetadataCaller: IERC721MetadataCaller{contract: contract}, IERC721MetadataTransactor: IERC721MetadataTransactor{contract: contract}, IERC721MetadataFilterer: IERC721MetadataFilterer{contract: contract}}, nil
  7936  }
  7937  
  7938  // NewIERC721MetadataCaller creates a new read-only instance of IERC721Metadata, bound to a specific deployed contract.
  7939  func NewIERC721MetadataCaller(address common.Address, caller bind.ContractCaller) (*IERC721MetadataCaller, error) {
  7940  	contract, err := bindIERC721Metadata(address, caller, nil, nil)
  7941  	if err != nil {
  7942  		return nil, err
  7943  	}
  7944  	return &IERC721MetadataCaller{contract: contract}, nil
  7945  }
  7946  
  7947  // NewIERC721MetadataTransactor creates a new write-only instance of IERC721Metadata, bound to a specific deployed contract.
  7948  func NewIERC721MetadataTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721MetadataTransactor, error) {
  7949  	contract, err := bindIERC721Metadata(address, nil, transactor, nil)
  7950  	if err != nil {
  7951  		return nil, err
  7952  	}
  7953  	return &IERC721MetadataTransactor{contract: contract}, nil
  7954  }
  7955  
  7956  // NewIERC721MetadataFilterer creates a new log filterer instance of IERC721Metadata, bound to a specific deployed contract.
  7957  func NewIERC721MetadataFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721MetadataFilterer, error) {
  7958  	contract, err := bindIERC721Metadata(address, nil, nil, filterer)
  7959  	if err != nil {
  7960  		return nil, err
  7961  	}
  7962  	return &IERC721MetadataFilterer{contract: contract}, nil
  7963  }
  7964  
  7965  // bindIERC721Metadata binds a generic wrapper to an already deployed contract.
  7966  func bindIERC721Metadata(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  7967  	parsed, err := abi.JSON(strings.NewReader(IERC721MetadataABI))
  7968  	if err != nil {
  7969  		return nil, err
  7970  	}
  7971  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  7972  }
  7973  
  7974  // Call invokes the (constant) contract method with params as input values and
  7975  // sets the output to result. The result type might be a single field for simple
  7976  // returns, a slice of interfaces for anonymous returns and a struct for named
  7977  // returns.
  7978  func (_IERC721Metadata *IERC721MetadataRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  7979  	return _IERC721Metadata.Contract.IERC721MetadataCaller.contract.Call(opts, result, method, params...)
  7980  }
  7981  
  7982  // Transfer initiates a plain transaction to move funds to the contract, calling
  7983  // its default method if one is available.
  7984  func (_IERC721Metadata *IERC721MetadataRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  7985  	return _IERC721Metadata.Contract.IERC721MetadataTransactor.contract.Transfer(opts)
  7986  }
  7987  
  7988  // Transact invokes the (paid) contract method with params as input values.
  7989  func (_IERC721Metadata *IERC721MetadataRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  7990  	return _IERC721Metadata.Contract.IERC721MetadataTransactor.contract.Transact(opts, method, params...)
  7991  }
  7992  
  7993  // Call invokes the (constant) contract method with params as input values and
  7994  // sets the output to result. The result type might be a single field for simple
  7995  // returns, a slice of interfaces for anonymous returns and a struct for named
  7996  // returns.
  7997  func (_IERC721Metadata *IERC721MetadataCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  7998  	return _IERC721Metadata.Contract.contract.Call(opts, result, method, params...)
  7999  }
  8000  
  8001  // Transfer initiates a plain transaction to move funds to the contract, calling
  8002  // its default method if one is available.
  8003  func (_IERC721Metadata *IERC721MetadataTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8004  	return _IERC721Metadata.Contract.contract.Transfer(opts)
  8005  }
  8006  
  8007  // Transact invokes the (paid) contract method with params as input values.
  8008  func (_IERC721Metadata *IERC721MetadataTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8009  	return _IERC721Metadata.Contract.contract.Transact(opts, method, params...)
  8010  }
  8011  
  8012  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  8013  //
  8014  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  8015  func (_IERC721Metadata *IERC721MetadataCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
  8016  	var out []interface{}
  8017  	err := _IERC721Metadata.contract.Call(opts, &out, "balanceOf", owner)
  8018  
  8019  	if err != nil {
  8020  		return *new(*big.Int), err
  8021  	}
  8022  
  8023  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
  8024  
  8025  	return out0, err
  8026  
  8027  }
  8028  
  8029  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  8030  //
  8031  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  8032  func (_IERC721Metadata *IERC721MetadataSession) BalanceOf(owner common.Address) (*big.Int, error) {
  8033  	return _IERC721Metadata.Contract.BalanceOf(&_IERC721Metadata.CallOpts, owner)
  8034  }
  8035  
  8036  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
  8037  //
  8038  // Solidity: function balanceOf(address owner) view returns(uint256 balance)
  8039  func (_IERC721Metadata *IERC721MetadataCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
  8040  	return _IERC721Metadata.Contract.BalanceOf(&_IERC721Metadata.CallOpts, owner)
  8041  }
  8042  
  8043  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  8044  //
  8045  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  8046  func (_IERC721Metadata *IERC721MetadataCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  8047  	var out []interface{}
  8048  	err := _IERC721Metadata.contract.Call(opts, &out, "getApproved", tokenId)
  8049  
  8050  	if err != nil {
  8051  		return *new(common.Address), err
  8052  	}
  8053  
  8054  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  8055  
  8056  	return out0, err
  8057  
  8058  }
  8059  
  8060  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  8061  //
  8062  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  8063  func (_IERC721Metadata *IERC721MetadataSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  8064  	return _IERC721Metadata.Contract.GetApproved(&_IERC721Metadata.CallOpts, tokenId)
  8065  }
  8066  
  8067  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
  8068  //
  8069  // Solidity: function getApproved(uint256 tokenId) view returns(address operator)
  8070  func (_IERC721Metadata *IERC721MetadataCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
  8071  	return _IERC721Metadata.Contract.GetApproved(&_IERC721Metadata.CallOpts, tokenId)
  8072  }
  8073  
  8074  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  8075  //
  8076  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  8077  func (_IERC721Metadata *IERC721MetadataCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
  8078  	var out []interface{}
  8079  	err := _IERC721Metadata.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
  8080  
  8081  	if err != nil {
  8082  		return *new(bool), err
  8083  	}
  8084  
  8085  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  8086  
  8087  	return out0, err
  8088  
  8089  }
  8090  
  8091  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  8092  //
  8093  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  8094  func (_IERC721Metadata *IERC721MetadataSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  8095  	return _IERC721Metadata.Contract.IsApprovedForAll(&_IERC721Metadata.CallOpts, owner, operator)
  8096  }
  8097  
  8098  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
  8099  //
  8100  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
  8101  func (_IERC721Metadata *IERC721MetadataCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
  8102  	return _IERC721Metadata.Contract.IsApprovedForAll(&_IERC721Metadata.CallOpts, owner, operator)
  8103  }
  8104  
  8105  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  8106  //
  8107  // Solidity: function name() view returns(string)
  8108  func (_IERC721Metadata *IERC721MetadataCaller) Name(opts *bind.CallOpts) (string, error) {
  8109  	var out []interface{}
  8110  	err := _IERC721Metadata.contract.Call(opts, &out, "name")
  8111  
  8112  	if err != nil {
  8113  		return *new(string), err
  8114  	}
  8115  
  8116  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  8117  
  8118  	return out0, err
  8119  
  8120  }
  8121  
  8122  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  8123  //
  8124  // Solidity: function name() view returns(string)
  8125  func (_IERC721Metadata *IERC721MetadataSession) Name() (string, error) {
  8126  	return _IERC721Metadata.Contract.Name(&_IERC721Metadata.CallOpts)
  8127  }
  8128  
  8129  // Name is a free data retrieval call binding the contract method 0x06fdde03.
  8130  //
  8131  // Solidity: function name() view returns(string)
  8132  func (_IERC721Metadata *IERC721MetadataCallerSession) Name() (string, error) {
  8133  	return _IERC721Metadata.Contract.Name(&_IERC721Metadata.CallOpts)
  8134  }
  8135  
  8136  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  8137  //
  8138  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  8139  func (_IERC721Metadata *IERC721MetadataCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
  8140  	var out []interface{}
  8141  	err := _IERC721Metadata.contract.Call(opts, &out, "ownerOf", tokenId)
  8142  
  8143  	if err != nil {
  8144  		return *new(common.Address), err
  8145  	}
  8146  
  8147  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  8148  
  8149  	return out0, err
  8150  
  8151  }
  8152  
  8153  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  8154  //
  8155  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  8156  func (_IERC721Metadata *IERC721MetadataSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  8157  	return _IERC721Metadata.Contract.OwnerOf(&_IERC721Metadata.CallOpts, tokenId)
  8158  }
  8159  
  8160  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
  8161  //
  8162  // Solidity: function ownerOf(uint256 tokenId) view returns(address owner)
  8163  func (_IERC721Metadata *IERC721MetadataCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
  8164  	return _IERC721Metadata.Contract.OwnerOf(&_IERC721Metadata.CallOpts, tokenId)
  8165  }
  8166  
  8167  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  8168  //
  8169  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  8170  func (_IERC721Metadata *IERC721MetadataCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
  8171  	var out []interface{}
  8172  	err := _IERC721Metadata.contract.Call(opts, &out, "supportsInterface", interfaceId)
  8173  
  8174  	if err != nil {
  8175  		return *new(bool), err
  8176  	}
  8177  
  8178  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
  8179  
  8180  	return out0, err
  8181  
  8182  }
  8183  
  8184  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  8185  //
  8186  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  8187  func (_IERC721Metadata *IERC721MetadataSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  8188  	return _IERC721Metadata.Contract.SupportsInterface(&_IERC721Metadata.CallOpts, interfaceId)
  8189  }
  8190  
  8191  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
  8192  //
  8193  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
  8194  func (_IERC721Metadata *IERC721MetadataCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
  8195  	return _IERC721Metadata.Contract.SupportsInterface(&_IERC721Metadata.CallOpts, interfaceId)
  8196  }
  8197  
  8198  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  8199  //
  8200  // Solidity: function symbol() view returns(string)
  8201  func (_IERC721Metadata *IERC721MetadataCaller) Symbol(opts *bind.CallOpts) (string, error) {
  8202  	var out []interface{}
  8203  	err := _IERC721Metadata.contract.Call(opts, &out, "symbol")
  8204  
  8205  	if err != nil {
  8206  		return *new(string), err
  8207  	}
  8208  
  8209  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  8210  
  8211  	return out0, err
  8212  
  8213  }
  8214  
  8215  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  8216  //
  8217  // Solidity: function symbol() view returns(string)
  8218  func (_IERC721Metadata *IERC721MetadataSession) Symbol() (string, error) {
  8219  	return _IERC721Metadata.Contract.Symbol(&_IERC721Metadata.CallOpts)
  8220  }
  8221  
  8222  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
  8223  //
  8224  // Solidity: function symbol() view returns(string)
  8225  func (_IERC721Metadata *IERC721MetadataCallerSession) Symbol() (string, error) {
  8226  	return _IERC721Metadata.Contract.Symbol(&_IERC721Metadata.CallOpts)
  8227  }
  8228  
  8229  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  8230  //
  8231  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  8232  func (_IERC721Metadata *IERC721MetadataCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
  8233  	var out []interface{}
  8234  	err := _IERC721Metadata.contract.Call(opts, &out, "tokenURI", tokenId)
  8235  
  8236  	if err != nil {
  8237  		return *new(string), err
  8238  	}
  8239  
  8240  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
  8241  
  8242  	return out0, err
  8243  
  8244  }
  8245  
  8246  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  8247  //
  8248  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  8249  func (_IERC721Metadata *IERC721MetadataSession) TokenURI(tokenId *big.Int) (string, error) {
  8250  	return _IERC721Metadata.Contract.TokenURI(&_IERC721Metadata.CallOpts, tokenId)
  8251  }
  8252  
  8253  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
  8254  //
  8255  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
  8256  func (_IERC721Metadata *IERC721MetadataCallerSession) TokenURI(tokenId *big.Int) (string, error) {
  8257  	return _IERC721Metadata.Contract.TokenURI(&_IERC721Metadata.CallOpts, tokenId)
  8258  }
  8259  
  8260  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  8261  //
  8262  // Solidity: function approve(address to, uint256 tokenId) returns()
  8263  func (_IERC721Metadata *IERC721MetadataTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8264  	return _IERC721Metadata.contract.Transact(opts, "approve", to, tokenId)
  8265  }
  8266  
  8267  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  8268  //
  8269  // Solidity: function approve(address to, uint256 tokenId) returns()
  8270  func (_IERC721Metadata *IERC721MetadataSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8271  	return _IERC721Metadata.Contract.Approve(&_IERC721Metadata.TransactOpts, to, tokenId)
  8272  }
  8273  
  8274  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
  8275  //
  8276  // Solidity: function approve(address to, uint256 tokenId) returns()
  8277  func (_IERC721Metadata *IERC721MetadataTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8278  	return _IERC721Metadata.Contract.Approve(&_IERC721Metadata.TransactOpts, to, tokenId)
  8279  }
  8280  
  8281  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  8282  //
  8283  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  8284  func (_IERC721Metadata *IERC721MetadataTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8285  	return _IERC721Metadata.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
  8286  }
  8287  
  8288  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  8289  //
  8290  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  8291  func (_IERC721Metadata *IERC721MetadataSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8292  	return _IERC721Metadata.Contract.SafeTransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  8293  }
  8294  
  8295  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
  8296  //
  8297  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
  8298  func (_IERC721Metadata *IERC721MetadataTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8299  	return _IERC721Metadata.Contract.SafeTransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  8300  }
  8301  
  8302  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  8303  //
  8304  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  8305  func (_IERC721Metadata *IERC721MetadataTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8306  	return _IERC721Metadata.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
  8307  }
  8308  
  8309  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  8310  //
  8311  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  8312  func (_IERC721Metadata *IERC721MetadataSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8313  	return _IERC721Metadata.Contract.SafeTransferFrom0(&_IERC721Metadata.TransactOpts, from, to, tokenId, data)
  8314  }
  8315  
  8316  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
  8317  //
  8318  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
  8319  func (_IERC721Metadata *IERC721MetadataTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8320  	return _IERC721Metadata.Contract.SafeTransferFrom0(&_IERC721Metadata.TransactOpts, from, to, tokenId, data)
  8321  }
  8322  
  8323  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  8324  //
  8325  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  8326  func (_IERC721Metadata *IERC721MetadataTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, _approved bool) (*types.Transaction, error) {
  8327  	return _IERC721Metadata.contract.Transact(opts, "setApprovalForAll", operator, _approved)
  8328  }
  8329  
  8330  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  8331  //
  8332  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  8333  func (_IERC721Metadata *IERC721MetadataSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  8334  	return _IERC721Metadata.Contract.SetApprovalForAll(&_IERC721Metadata.TransactOpts, operator, _approved)
  8335  }
  8336  
  8337  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
  8338  //
  8339  // Solidity: function setApprovalForAll(address operator, bool _approved) returns()
  8340  func (_IERC721Metadata *IERC721MetadataTransactorSession) SetApprovalForAll(operator common.Address, _approved bool) (*types.Transaction, error) {
  8341  	return _IERC721Metadata.Contract.SetApprovalForAll(&_IERC721Metadata.TransactOpts, operator, _approved)
  8342  }
  8343  
  8344  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  8345  //
  8346  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  8347  func (_IERC721Metadata *IERC721MetadataTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8348  	return _IERC721Metadata.contract.Transact(opts, "transferFrom", from, to, tokenId)
  8349  }
  8350  
  8351  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  8352  //
  8353  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  8354  func (_IERC721Metadata *IERC721MetadataSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8355  	return _IERC721Metadata.Contract.TransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  8356  }
  8357  
  8358  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
  8359  //
  8360  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
  8361  func (_IERC721Metadata *IERC721MetadataTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
  8362  	return _IERC721Metadata.Contract.TransferFrom(&_IERC721Metadata.TransactOpts, from, to, tokenId)
  8363  }
  8364  
  8365  // 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.
  8366  type IERC721MetadataApprovalIterator struct {
  8367  	Event *IERC721MetadataApproval // Event containing the contract specifics and raw log
  8368  
  8369  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  8370  	event    string              // Event name to use for unpacking event data
  8371  
  8372  	logs chan types.Log        // Log channel receiving the found contract events
  8373  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  8374  	done bool                  // Whether the subscription completed delivering logs
  8375  	fail error                 // Occurred error to stop iteration
  8376  }
  8377  
  8378  // Next advances the iterator to the subsequent event, returning whether there
  8379  // are any more events found. In case of a retrieval or parsing error, false is
  8380  // returned and Error() can be queried for the exact failure.
  8381  func (it *IERC721MetadataApprovalIterator) Next() bool {
  8382  	// If the iterator failed, stop iterating
  8383  	if it.fail != nil {
  8384  		return false
  8385  	}
  8386  	// If the iterator completed, deliver directly whatever's available
  8387  	if it.done {
  8388  		select {
  8389  		case log := <-it.logs:
  8390  			it.Event = new(IERC721MetadataApproval)
  8391  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8392  				it.fail = err
  8393  				return false
  8394  			}
  8395  			it.Event.Raw = log
  8396  			return true
  8397  
  8398  		default:
  8399  			return false
  8400  		}
  8401  	}
  8402  	// Iterator still in progress, wait for either a data or an error event
  8403  	select {
  8404  	case log := <-it.logs:
  8405  		it.Event = new(IERC721MetadataApproval)
  8406  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8407  			it.fail = err
  8408  			return false
  8409  		}
  8410  		it.Event.Raw = log
  8411  		return true
  8412  
  8413  	case err := <-it.sub.Err():
  8414  		it.done = true
  8415  		it.fail = err
  8416  		return it.Next()
  8417  	}
  8418  }
  8419  
  8420  // Error returns any retrieval or parsing error occurred during filtering.
  8421  func (it *IERC721MetadataApprovalIterator) Error() error {
  8422  	return it.fail
  8423  }
  8424  
  8425  // Close terminates the iteration process, releasing any pending underlying
  8426  // resources.
  8427  func (it *IERC721MetadataApprovalIterator) Close() error {
  8428  	it.sub.Unsubscribe()
  8429  	return nil
  8430  }
  8431  
  8432  // IERC721MetadataApproval represents a Approval event raised by the IERC721Metadata contract.
  8433  type IERC721MetadataApproval struct {
  8434  	Owner    common.Address
  8435  	Approved common.Address
  8436  	TokenId  *big.Int
  8437  	Raw      types.Log // Blockchain specific contextual infos
  8438  }
  8439  
  8440  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  8441  //
  8442  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  8443  func (_IERC721Metadata *IERC721MetadataFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*IERC721MetadataApprovalIterator, error) {
  8444  
  8445  	var ownerRule []interface{}
  8446  	for _, ownerItem := range owner {
  8447  		ownerRule = append(ownerRule, ownerItem)
  8448  	}
  8449  	var approvedRule []interface{}
  8450  	for _, approvedItem := range approved {
  8451  		approvedRule = append(approvedRule, approvedItem)
  8452  	}
  8453  	var tokenIdRule []interface{}
  8454  	for _, tokenIdItem := range tokenId {
  8455  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  8456  	}
  8457  
  8458  	logs, sub, err := _IERC721Metadata.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  8459  	if err != nil {
  8460  		return nil, err
  8461  	}
  8462  	return &IERC721MetadataApprovalIterator{contract: _IERC721Metadata.contract, event: "Approval", logs: logs, sub: sub}, nil
  8463  }
  8464  
  8465  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  8466  //
  8467  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  8468  func (_IERC721Metadata *IERC721MetadataFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *IERC721MetadataApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  8469  
  8470  	var ownerRule []interface{}
  8471  	for _, ownerItem := range owner {
  8472  		ownerRule = append(ownerRule, ownerItem)
  8473  	}
  8474  	var approvedRule []interface{}
  8475  	for _, approvedItem := range approved {
  8476  		approvedRule = append(approvedRule, approvedItem)
  8477  	}
  8478  	var tokenIdRule []interface{}
  8479  	for _, tokenIdItem := range tokenId {
  8480  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  8481  	}
  8482  
  8483  	logs, sub, err := _IERC721Metadata.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
  8484  	if err != nil {
  8485  		return nil, err
  8486  	}
  8487  	return event.NewSubscription(func(quit <-chan struct{}) error {
  8488  		defer sub.Unsubscribe()
  8489  		for {
  8490  			select {
  8491  			case log := <-logs:
  8492  				// New log arrived, parse the event and forward to the user
  8493  				event := new(IERC721MetadataApproval)
  8494  				if err := _IERC721Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  8495  					return err
  8496  				}
  8497  				event.Raw = log
  8498  
  8499  				select {
  8500  				case sink <- event:
  8501  				case err := <-sub.Err():
  8502  					return err
  8503  				case <-quit:
  8504  					return nil
  8505  				}
  8506  			case err := <-sub.Err():
  8507  				return err
  8508  			case <-quit:
  8509  				return nil
  8510  			}
  8511  		}
  8512  	}), nil
  8513  }
  8514  
  8515  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
  8516  //
  8517  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  8518  func (_IERC721Metadata *IERC721MetadataFilterer) ParseApproval(log types.Log) (*IERC721MetadataApproval, error) {
  8519  	event := new(IERC721MetadataApproval)
  8520  	if err := _IERC721Metadata.contract.UnpackLog(event, "Approval", log); err != nil {
  8521  		return nil, err
  8522  	}
  8523  	event.Raw = log
  8524  	return event, nil
  8525  }
  8526  
  8527  // 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.
  8528  type IERC721MetadataApprovalForAllIterator struct {
  8529  	Event *IERC721MetadataApprovalForAll // Event containing the contract specifics and raw log
  8530  
  8531  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  8532  	event    string              // Event name to use for unpacking event data
  8533  
  8534  	logs chan types.Log        // Log channel receiving the found contract events
  8535  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  8536  	done bool                  // Whether the subscription completed delivering logs
  8537  	fail error                 // Occurred error to stop iteration
  8538  }
  8539  
  8540  // Next advances the iterator to the subsequent event, returning whether there
  8541  // are any more events found. In case of a retrieval or parsing error, false is
  8542  // returned and Error() can be queried for the exact failure.
  8543  func (it *IERC721MetadataApprovalForAllIterator) Next() bool {
  8544  	// If the iterator failed, stop iterating
  8545  	if it.fail != nil {
  8546  		return false
  8547  	}
  8548  	// If the iterator completed, deliver directly whatever's available
  8549  	if it.done {
  8550  		select {
  8551  		case log := <-it.logs:
  8552  			it.Event = new(IERC721MetadataApprovalForAll)
  8553  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8554  				it.fail = err
  8555  				return false
  8556  			}
  8557  			it.Event.Raw = log
  8558  			return true
  8559  
  8560  		default:
  8561  			return false
  8562  		}
  8563  	}
  8564  	// Iterator still in progress, wait for either a data or an error event
  8565  	select {
  8566  	case log := <-it.logs:
  8567  		it.Event = new(IERC721MetadataApprovalForAll)
  8568  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8569  			it.fail = err
  8570  			return false
  8571  		}
  8572  		it.Event.Raw = log
  8573  		return true
  8574  
  8575  	case err := <-it.sub.Err():
  8576  		it.done = true
  8577  		it.fail = err
  8578  		return it.Next()
  8579  	}
  8580  }
  8581  
  8582  // Error returns any retrieval or parsing error occurred during filtering.
  8583  func (it *IERC721MetadataApprovalForAllIterator) Error() error {
  8584  	return it.fail
  8585  }
  8586  
  8587  // Close terminates the iteration process, releasing any pending underlying
  8588  // resources.
  8589  func (it *IERC721MetadataApprovalForAllIterator) Close() error {
  8590  	it.sub.Unsubscribe()
  8591  	return nil
  8592  }
  8593  
  8594  // IERC721MetadataApprovalForAll represents a ApprovalForAll event raised by the IERC721Metadata contract.
  8595  type IERC721MetadataApprovalForAll struct {
  8596  	Owner    common.Address
  8597  	Operator common.Address
  8598  	Approved bool
  8599  	Raw      types.Log // Blockchain specific contextual infos
  8600  }
  8601  
  8602  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  8603  //
  8604  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  8605  func (_IERC721Metadata *IERC721MetadataFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*IERC721MetadataApprovalForAllIterator, error) {
  8606  
  8607  	var ownerRule []interface{}
  8608  	for _, ownerItem := range owner {
  8609  		ownerRule = append(ownerRule, ownerItem)
  8610  	}
  8611  	var operatorRule []interface{}
  8612  	for _, operatorItem := range operator {
  8613  		operatorRule = append(operatorRule, operatorItem)
  8614  	}
  8615  
  8616  	logs, sub, err := _IERC721Metadata.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  8617  	if err != nil {
  8618  		return nil, err
  8619  	}
  8620  	return &IERC721MetadataApprovalForAllIterator{contract: _IERC721Metadata.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
  8621  }
  8622  
  8623  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  8624  //
  8625  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  8626  func (_IERC721Metadata *IERC721MetadataFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *IERC721MetadataApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
  8627  
  8628  	var ownerRule []interface{}
  8629  	for _, ownerItem := range owner {
  8630  		ownerRule = append(ownerRule, ownerItem)
  8631  	}
  8632  	var operatorRule []interface{}
  8633  	for _, operatorItem := range operator {
  8634  		operatorRule = append(operatorRule, operatorItem)
  8635  	}
  8636  
  8637  	logs, sub, err := _IERC721Metadata.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
  8638  	if err != nil {
  8639  		return nil, err
  8640  	}
  8641  	return event.NewSubscription(func(quit <-chan struct{}) error {
  8642  		defer sub.Unsubscribe()
  8643  		for {
  8644  			select {
  8645  			case log := <-logs:
  8646  				// New log arrived, parse the event and forward to the user
  8647  				event := new(IERC721MetadataApprovalForAll)
  8648  				if err := _IERC721Metadata.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  8649  					return err
  8650  				}
  8651  				event.Raw = log
  8652  
  8653  				select {
  8654  				case sink <- event:
  8655  				case err := <-sub.Err():
  8656  					return err
  8657  				case <-quit:
  8658  					return nil
  8659  				}
  8660  			case err := <-sub.Err():
  8661  				return err
  8662  			case <-quit:
  8663  				return nil
  8664  			}
  8665  		}
  8666  	}), nil
  8667  }
  8668  
  8669  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
  8670  //
  8671  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
  8672  func (_IERC721Metadata *IERC721MetadataFilterer) ParseApprovalForAll(log types.Log) (*IERC721MetadataApprovalForAll, error) {
  8673  	event := new(IERC721MetadataApprovalForAll)
  8674  	if err := _IERC721Metadata.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
  8675  		return nil, err
  8676  	}
  8677  	event.Raw = log
  8678  	return event, nil
  8679  }
  8680  
  8681  // 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.
  8682  type IERC721MetadataTransferIterator struct {
  8683  	Event *IERC721MetadataTransfer // Event containing the contract specifics and raw log
  8684  
  8685  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  8686  	event    string              // Event name to use for unpacking event data
  8687  
  8688  	logs chan types.Log        // Log channel receiving the found contract events
  8689  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  8690  	done bool                  // Whether the subscription completed delivering logs
  8691  	fail error                 // Occurred error to stop iteration
  8692  }
  8693  
  8694  // Next advances the iterator to the subsequent event, returning whether there
  8695  // are any more events found. In case of a retrieval or parsing error, false is
  8696  // returned and Error() can be queried for the exact failure.
  8697  func (it *IERC721MetadataTransferIterator) Next() bool {
  8698  	// If the iterator failed, stop iterating
  8699  	if it.fail != nil {
  8700  		return false
  8701  	}
  8702  	// If the iterator completed, deliver directly whatever's available
  8703  	if it.done {
  8704  		select {
  8705  		case log := <-it.logs:
  8706  			it.Event = new(IERC721MetadataTransfer)
  8707  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8708  				it.fail = err
  8709  				return false
  8710  			}
  8711  			it.Event.Raw = log
  8712  			return true
  8713  
  8714  		default:
  8715  			return false
  8716  		}
  8717  	}
  8718  	// Iterator still in progress, wait for either a data or an error event
  8719  	select {
  8720  	case log := <-it.logs:
  8721  		it.Event = new(IERC721MetadataTransfer)
  8722  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  8723  			it.fail = err
  8724  			return false
  8725  		}
  8726  		it.Event.Raw = log
  8727  		return true
  8728  
  8729  	case err := <-it.sub.Err():
  8730  		it.done = true
  8731  		it.fail = err
  8732  		return it.Next()
  8733  	}
  8734  }
  8735  
  8736  // Error returns any retrieval or parsing error occurred during filtering.
  8737  func (it *IERC721MetadataTransferIterator) Error() error {
  8738  	return it.fail
  8739  }
  8740  
  8741  // Close terminates the iteration process, releasing any pending underlying
  8742  // resources.
  8743  func (it *IERC721MetadataTransferIterator) Close() error {
  8744  	it.sub.Unsubscribe()
  8745  	return nil
  8746  }
  8747  
  8748  // IERC721MetadataTransfer represents a Transfer event raised by the IERC721Metadata contract.
  8749  type IERC721MetadataTransfer struct {
  8750  	From    common.Address
  8751  	To      common.Address
  8752  	TokenId *big.Int
  8753  	Raw     types.Log // Blockchain specific contextual infos
  8754  }
  8755  
  8756  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  8757  //
  8758  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  8759  func (_IERC721Metadata *IERC721MetadataFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*IERC721MetadataTransferIterator, error) {
  8760  
  8761  	var fromRule []interface{}
  8762  	for _, fromItem := range from {
  8763  		fromRule = append(fromRule, fromItem)
  8764  	}
  8765  	var toRule []interface{}
  8766  	for _, toItem := range to {
  8767  		toRule = append(toRule, toItem)
  8768  	}
  8769  	var tokenIdRule []interface{}
  8770  	for _, tokenIdItem := range tokenId {
  8771  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  8772  	}
  8773  
  8774  	logs, sub, err := _IERC721Metadata.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  8775  	if err != nil {
  8776  		return nil, err
  8777  	}
  8778  	return &IERC721MetadataTransferIterator{contract: _IERC721Metadata.contract, event: "Transfer", logs: logs, sub: sub}, nil
  8779  }
  8780  
  8781  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  8782  //
  8783  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  8784  func (_IERC721Metadata *IERC721MetadataFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *IERC721MetadataTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
  8785  
  8786  	var fromRule []interface{}
  8787  	for _, fromItem := range from {
  8788  		fromRule = append(fromRule, fromItem)
  8789  	}
  8790  	var toRule []interface{}
  8791  	for _, toItem := range to {
  8792  		toRule = append(toRule, toItem)
  8793  	}
  8794  	var tokenIdRule []interface{}
  8795  	for _, tokenIdItem := range tokenId {
  8796  		tokenIdRule = append(tokenIdRule, tokenIdItem)
  8797  	}
  8798  
  8799  	logs, sub, err := _IERC721Metadata.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
  8800  	if err != nil {
  8801  		return nil, err
  8802  	}
  8803  	return event.NewSubscription(func(quit <-chan struct{}) error {
  8804  		defer sub.Unsubscribe()
  8805  		for {
  8806  			select {
  8807  			case log := <-logs:
  8808  				// New log arrived, parse the event and forward to the user
  8809  				event := new(IERC721MetadataTransfer)
  8810  				if err := _IERC721Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  8811  					return err
  8812  				}
  8813  				event.Raw = log
  8814  
  8815  				select {
  8816  				case sink <- event:
  8817  				case err := <-sub.Err():
  8818  					return err
  8819  				case <-quit:
  8820  					return nil
  8821  				}
  8822  			case err := <-sub.Err():
  8823  				return err
  8824  			case <-quit:
  8825  				return nil
  8826  			}
  8827  		}
  8828  	}), nil
  8829  }
  8830  
  8831  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
  8832  //
  8833  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  8834  func (_IERC721Metadata *IERC721MetadataFilterer) ParseTransfer(log types.Log) (*IERC721MetadataTransfer, error) {
  8835  	event := new(IERC721MetadataTransfer)
  8836  	if err := _IERC721Metadata.contract.UnpackLog(event, "Transfer", log); err != nil {
  8837  		return nil, err
  8838  	}
  8839  	event.Raw = log
  8840  	return event, nil
  8841  }
  8842  
  8843  // IERC721ReceiverABI is the input ABI used to generate the binding from.
  8844  const IERC721ReceiverABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
  8845  
  8846  // IERC721ReceiverFuncSigs maps the 4-byte function signature to its string representation.
  8847  var IERC721ReceiverFuncSigs = map[string]string{
  8848  	"150b7a02": "onERC721Received(address,address,uint256,bytes)",
  8849  }
  8850  
  8851  // IERC721Receiver is an auto generated Go binding around an Ethereum contract.
  8852  type IERC721Receiver struct {
  8853  	IERC721ReceiverCaller     // Read-only binding to the contract
  8854  	IERC721ReceiverTransactor // Write-only binding to the contract
  8855  	IERC721ReceiverFilterer   // Log filterer for contract events
  8856  }
  8857  
  8858  // IERC721ReceiverCaller is an auto generated read-only Go binding around an Ethereum contract.
  8859  type IERC721ReceiverCaller struct {
  8860  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8861  }
  8862  
  8863  // IERC721ReceiverTransactor is an auto generated write-only Go binding around an Ethereum contract.
  8864  type IERC721ReceiverTransactor struct {
  8865  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8866  }
  8867  
  8868  // IERC721ReceiverFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  8869  type IERC721ReceiverFilterer struct {
  8870  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  8871  }
  8872  
  8873  // IERC721ReceiverSession is an auto generated Go binding around an Ethereum contract,
  8874  // with pre-set call and transact options.
  8875  type IERC721ReceiverSession struct {
  8876  	Contract     *IERC721Receiver  // Generic contract binding to set the session for
  8877  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  8878  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  8879  }
  8880  
  8881  // IERC721ReceiverCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  8882  // with pre-set call options.
  8883  type IERC721ReceiverCallerSession struct {
  8884  	Contract *IERC721ReceiverCaller // Generic contract caller binding to set the session for
  8885  	CallOpts bind.CallOpts          // Call options to use throughout this session
  8886  }
  8887  
  8888  // IERC721ReceiverTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  8889  // with pre-set transact options.
  8890  type IERC721ReceiverTransactorSession struct {
  8891  	Contract     *IERC721ReceiverTransactor // Generic contract transactor binding to set the session for
  8892  	TransactOpts bind.TransactOpts          // Transaction auth options to use throughout this session
  8893  }
  8894  
  8895  // IERC721ReceiverRaw is an auto generated low-level Go binding around an Ethereum contract.
  8896  type IERC721ReceiverRaw struct {
  8897  	Contract *IERC721Receiver // Generic contract binding to access the raw methods on
  8898  }
  8899  
  8900  // IERC721ReceiverCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  8901  type IERC721ReceiverCallerRaw struct {
  8902  	Contract *IERC721ReceiverCaller // Generic read-only contract binding to access the raw methods on
  8903  }
  8904  
  8905  // IERC721ReceiverTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  8906  type IERC721ReceiverTransactorRaw struct {
  8907  	Contract *IERC721ReceiverTransactor // Generic write-only contract binding to access the raw methods on
  8908  }
  8909  
  8910  // NewIERC721Receiver creates a new instance of IERC721Receiver, bound to a specific deployed contract.
  8911  func NewIERC721Receiver(address common.Address, backend bind.ContractBackend) (*IERC721Receiver, error) {
  8912  	contract, err := bindIERC721Receiver(address, backend, backend, backend)
  8913  	if err != nil {
  8914  		return nil, err
  8915  	}
  8916  	return &IERC721Receiver{IERC721ReceiverCaller: IERC721ReceiverCaller{contract: contract}, IERC721ReceiverTransactor: IERC721ReceiverTransactor{contract: contract}, IERC721ReceiverFilterer: IERC721ReceiverFilterer{contract: contract}}, nil
  8917  }
  8918  
  8919  // NewIERC721ReceiverCaller creates a new read-only instance of IERC721Receiver, bound to a specific deployed contract.
  8920  func NewIERC721ReceiverCaller(address common.Address, caller bind.ContractCaller) (*IERC721ReceiverCaller, error) {
  8921  	contract, err := bindIERC721Receiver(address, caller, nil, nil)
  8922  	if err != nil {
  8923  		return nil, err
  8924  	}
  8925  	return &IERC721ReceiverCaller{contract: contract}, nil
  8926  }
  8927  
  8928  // NewIERC721ReceiverTransactor creates a new write-only instance of IERC721Receiver, bound to a specific deployed contract.
  8929  func NewIERC721ReceiverTransactor(address common.Address, transactor bind.ContractTransactor) (*IERC721ReceiverTransactor, error) {
  8930  	contract, err := bindIERC721Receiver(address, nil, transactor, nil)
  8931  	if err != nil {
  8932  		return nil, err
  8933  	}
  8934  	return &IERC721ReceiverTransactor{contract: contract}, nil
  8935  }
  8936  
  8937  // NewIERC721ReceiverFilterer creates a new log filterer instance of IERC721Receiver, bound to a specific deployed contract.
  8938  func NewIERC721ReceiverFilterer(address common.Address, filterer bind.ContractFilterer) (*IERC721ReceiverFilterer, error) {
  8939  	contract, err := bindIERC721Receiver(address, nil, nil, filterer)
  8940  	if err != nil {
  8941  		return nil, err
  8942  	}
  8943  	return &IERC721ReceiverFilterer{contract: contract}, nil
  8944  }
  8945  
  8946  // bindIERC721Receiver binds a generic wrapper to an already deployed contract.
  8947  func bindIERC721Receiver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  8948  	parsed, err := abi.JSON(strings.NewReader(IERC721ReceiverABI))
  8949  	if err != nil {
  8950  		return nil, err
  8951  	}
  8952  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  8953  }
  8954  
  8955  // Call invokes the (constant) contract method with params as input values and
  8956  // sets the output to result. The result type might be a single field for simple
  8957  // returns, a slice of interfaces for anonymous returns and a struct for named
  8958  // returns.
  8959  func (_IERC721Receiver *IERC721ReceiverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8960  	return _IERC721Receiver.Contract.IERC721ReceiverCaller.contract.Call(opts, result, method, params...)
  8961  }
  8962  
  8963  // Transfer initiates a plain transaction to move funds to the contract, calling
  8964  // its default method if one is available.
  8965  func (_IERC721Receiver *IERC721ReceiverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8966  	return _IERC721Receiver.Contract.IERC721ReceiverTransactor.contract.Transfer(opts)
  8967  }
  8968  
  8969  // Transact invokes the (paid) contract method with params as input values.
  8970  func (_IERC721Receiver *IERC721ReceiverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8971  	return _IERC721Receiver.Contract.IERC721ReceiverTransactor.contract.Transact(opts, method, params...)
  8972  }
  8973  
  8974  // Call invokes the (constant) contract method with params as input values and
  8975  // sets the output to result. The result type might be a single field for simple
  8976  // returns, a slice of interfaces for anonymous returns and a struct for named
  8977  // returns.
  8978  func (_IERC721Receiver *IERC721ReceiverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  8979  	return _IERC721Receiver.Contract.contract.Call(opts, result, method, params...)
  8980  }
  8981  
  8982  // Transfer initiates a plain transaction to move funds to the contract, calling
  8983  // its default method if one is available.
  8984  func (_IERC721Receiver *IERC721ReceiverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  8985  	return _IERC721Receiver.Contract.contract.Transfer(opts)
  8986  }
  8987  
  8988  // Transact invokes the (paid) contract method with params as input values.
  8989  func (_IERC721Receiver *IERC721ReceiverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  8990  	return _IERC721Receiver.Contract.contract.Transact(opts, method, params...)
  8991  }
  8992  
  8993  // OnERC721Received is a paid mutator transaction binding the contract method 0x150b7a02.
  8994  //
  8995  // Solidity: function onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns(bytes4)
  8996  func (_IERC721Receiver *IERC721ReceiverTransactor) OnERC721Received(opts *bind.TransactOpts, operator common.Address, from common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  8997  	return _IERC721Receiver.contract.Transact(opts, "onERC721Received", operator, from, tokenId, data)
  8998  }
  8999  
  9000  // OnERC721Received is a paid mutator transaction binding the contract method 0x150b7a02.
  9001  //
  9002  // Solidity: function onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns(bytes4)
  9003  func (_IERC721Receiver *IERC721ReceiverSession) OnERC721Received(operator common.Address, from common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  9004  	return _IERC721Receiver.Contract.OnERC721Received(&_IERC721Receiver.TransactOpts, operator, from, tokenId, data)
  9005  }
  9006  
  9007  // OnERC721Received is a paid mutator transaction binding the contract method 0x150b7a02.
  9008  //
  9009  // Solidity: function onERC721Received(address operator, address from, uint256 tokenId, bytes data) returns(bytes4)
  9010  func (_IERC721Receiver *IERC721ReceiverTransactorSession) OnERC721Received(operator common.Address, from common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
  9011  	return _IERC721Receiver.Contract.OnERC721Received(&_IERC721Receiver.TransactOpts, operator, from, tokenId, data)
  9012  }
  9013  
  9014  // StickerMarketABI is the input ABI used to generate the binding from.
  9015  const StickerMarketABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"purgePack\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"snt\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stickerType\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_packId\",\"type\":\"uint256\"}],\"name\":\"generateToken\",\"outputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setBurnRate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"},{\"name\":\"_donate\",\"type\":\"uint256\"},{\"name\":\"_category\",\"type\":\"bytes4[]\"},{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_contenthash\",\"type\":\"bytes\"},{\"name\":\"_fee\",\"type\":\"uint256\"}],\"name\":\"registerPack\",\"outputs\":[{\"name\":\"packId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"changeController\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stickerPack\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"},{\"name\":\"_donate\",\"type\":\"uint256\"},{\"name\":\"_category\",\"type\":\"bytes4[]\"},{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_contenthash\",\"type\":\"bytes\"}],\"name\":\"generatePack\",\"outputs\":[{\"name\":\"packId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_state\",\"type\":\"uint8\"}],\"name\":\"setMarketState\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_token\",\"type\":\"address\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"receiveApproval\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"setRegisterFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getTokenData\",\"outputs\":[{\"name\":\"category\",\"type\":\"bytes4[]\"},{\"name\":\"timestamp\",\"type\":\"uint256\"},{\"name\":\"contenthash\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"migrate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claimTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_destination\",\"type\":\"address\"},{\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"buyToken\",\"outputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_controller\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"state\",\"type\":\"uint8\"}],\"name\":\"MarketState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"RegisterFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"BurnRate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"dataPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"contenthash\",\"type\":\"bytes\"}],\"name\":\"Register\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"NewController\",\"type\":\"event\"}]"
  9016  
  9017  // StickerMarketFuncSigs maps the 4-byte function signature to its string representation.
  9018  var StickerMarketFuncSigs = map[string]string{
  9019  	"f3e62640": "buyToken(uint256,address,uint256)",
  9020  	"3cebb823": "changeController(address)",
  9021  	"df8de3e7": "claimTokens(address)",
  9022  	"f77c4791": "controller()",
  9023  	"4c06dc17": "generatePack(uint256,uint256,bytes4[],address,bytes)",
  9024  	"188b5372": "generateToken(address,uint256)",
  9025  	"b09afec1": "getTokenData(uint256)",
  9026  	"ce5494bb": "migrate(address)",
  9027  	"00b3c91b": "purgePack(uint256,uint256)",
  9028  	"8f4ffcb1": "receiveApproval(address,uint256,address,bytes)",
  9029  	"1cf75710": "registerPack(uint256,uint256,bytes4[],address,bytes,uint256)",
  9030  	"189d165e": "setBurnRate(uint256)",
  9031  	"536b0445": "setMarketState(uint8)",
  9032  	"92be2ab8": "setRegisterFee(uint256)",
  9033  	"060eb520": "snt()",
  9034  	"c19d93fb": "state()",
  9035  	"4858b015": "stickerPack()",
  9036  	"0ddd4c87": "stickerType()",
  9037  }
  9038  
  9039  // StickerMarket is an auto generated Go binding around an Ethereum contract.
  9040  type StickerMarket struct {
  9041  	StickerMarketCaller     // Read-only binding to the contract
  9042  	StickerMarketTransactor // Write-only binding to the contract
  9043  	StickerMarketFilterer   // Log filterer for contract events
  9044  }
  9045  
  9046  // StickerMarketCaller is an auto generated read-only Go binding around an Ethereum contract.
  9047  type StickerMarketCaller struct {
  9048  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  9049  }
  9050  
  9051  // StickerMarketTransactor is an auto generated write-only Go binding around an Ethereum contract.
  9052  type StickerMarketTransactor struct {
  9053  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  9054  }
  9055  
  9056  // StickerMarketFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
  9057  type StickerMarketFilterer struct {
  9058  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
  9059  }
  9060  
  9061  // StickerMarketSession is an auto generated Go binding around an Ethereum contract,
  9062  // with pre-set call and transact options.
  9063  type StickerMarketSession struct {
  9064  	Contract     *StickerMarket    // Generic contract binding to set the session for
  9065  	CallOpts     bind.CallOpts     // Call options to use throughout this session
  9066  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
  9067  }
  9068  
  9069  // StickerMarketCallerSession is an auto generated read-only Go binding around an Ethereum contract,
  9070  // with pre-set call options.
  9071  type StickerMarketCallerSession struct {
  9072  	Contract *StickerMarketCaller // Generic contract caller binding to set the session for
  9073  	CallOpts bind.CallOpts        // Call options to use throughout this session
  9074  }
  9075  
  9076  // StickerMarketTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
  9077  // with pre-set transact options.
  9078  type StickerMarketTransactorSession struct {
  9079  	Contract     *StickerMarketTransactor // Generic contract transactor binding to set the session for
  9080  	TransactOpts bind.TransactOpts        // Transaction auth options to use throughout this session
  9081  }
  9082  
  9083  // StickerMarketRaw is an auto generated low-level Go binding around an Ethereum contract.
  9084  type StickerMarketRaw struct {
  9085  	Contract *StickerMarket // Generic contract binding to access the raw methods on
  9086  }
  9087  
  9088  // StickerMarketCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
  9089  type StickerMarketCallerRaw struct {
  9090  	Contract *StickerMarketCaller // Generic read-only contract binding to access the raw methods on
  9091  }
  9092  
  9093  // StickerMarketTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
  9094  type StickerMarketTransactorRaw struct {
  9095  	Contract *StickerMarketTransactor // Generic write-only contract binding to access the raw methods on
  9096  }
  9097  
  9098  // NewStickerMarket creates a new instance of StickerMarket, bound to a specific deployed contract.
  9099  func NewStickerMarket(address common.Address, backend bind.ContractBackend) (*StickerMarket, error) {
  9100  	contract, err := bindStickerMarket(address, backend, backend, backend)
  9101  	if err != nil {
  9102  		return nil, err
  9103  	}
  9104  	return &StickerMarket{StickerMarketCaller: StickerMarketCaller{contract: contract}, StickerMarketTransactor: StickerMarketTransactor{contract: contract}, StickerMarketFilterer: StickerMarketFilterer{contract: contract}}, nil
  9105  }
  9106  
  9107  // NewStickerMarketCaller creates a new read-only instance of StickerMarket, bound to a specific deployed contract.
  9108  func NewStickerMarketCaller(address common.Address, caller bind.ContractCaller) (*StickerMarketCaller, error) {
  9109  	contract, err := bindStickerMarket(address, caller, nil, nil)
  9110  	if err != nil {
  9111  		return nil, err
  9112  	}
  9113  	return &StickerMarketCaller{contract: contract}, nil
  9114  }
  9115  
  9116  // NewStickerMarketTransactor creates a new write-only instance of StickerMarket, bound to a specific deployed contract.
  9117  func NewStickerMarketTransactor(address common.Address, transactor bind.ContractTransactor) (*StickerMarketTransactor, error) {
  9118  	contract, err := bindStickerMarket(address, nil, transactor, nil)
  9119  	if err != nil {
  9120  		return nil, err
  9121  	}
  9122  	return &StickerMarketTransactor{contract: contract}, nil
  9123  }
  9124  
  9125  // NewStickerMarketFilterer creates a new log filterer instance of StickerMarket, bound to a specific deployed contract.
  9126  func NewStickerMarketFilterer(address common.Address, filterer bind.ContractFilterer) (*StickerMarketFilterer, error) {
  9127  	contract, err := bindStickerMarket(address, nil, nil, filterer)
  9128  	if err != nil {
  9129  		return nil, err
  9130  	}
  9131  	return &StickerMarketFilterer{contract: contract}, nil
  9132  }
  9133  
  9134  // bindStickerMarket binds a generic wrapper to an already deployed contract.
  9135  func bindStickerMarket(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
  9136  	parsed, err := abi.JSON(strings.NewReader(StickerMarketABI))
  9137  	if err != nil {
  9138  		return nil, err
  9139  	}
  9140  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
  9141  }
  9142  
  9143  // Call invokes the (constant) contract method with params as input values and
  9144  // sets the output to result. The result type might be a single field for simple
  9145  // returns, a slice of interfaces for anonymous returns and a struct for named
  9146  // returns.
  9147  func (_StickerMarket *StickerMarketRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  9148  	return _StickerMarket.Contract.StickerMarketCaller.contract.Call(opts, result, method, params...)
  9149  }
  9150  
  9151  // Transfer initiates a plain transaction to move funds to the contract, calling
  9152  // its default method if one is available.
  9153  func (_StickerMarket *StickerMarketRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  9154  	return _StickerMarket.Contract.StickerMarketTransactor.contract.Transfer(opts)
  9155  }
  9156  
  9157  // Transact invokes the (paid) contract method with params as input values.
  9158  func (_StickerMarket *StickerMarketRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  9159  	return _StickerMarket.Contract.StickerMarketTransactor.contract.Transact(opts, method, params...)
  9160  }
  9161  
  9162  // Call invokes the (constant) contract method with params as input values and
  9163  // sets the output to result. The result type might be a single field for simple
  9164  // returns, a slice of interfaces for anonymous returns and a struct for named
  9165  // returns.
  9166  func (_StickerMarket *StickerMarketCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
  9167  	return _StickerMarket.Contract.contract.Call(opts, result, method, params...)
  9168  }
  9169  
  9170  // Transfer initiates a plain transaction to move funds to the contract, calling
  9171  // its default method if one is available.
  9172  func (_StickerMarket *StickerMarketTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
  9173  	return _StickerMarket.Contract.contract.Transfer(opts)
  9174  }
  9175  
  9176  // Transact invokes the (paid) contract method with params as input values.
  9177  func (_StickerMarket *StickerMarketTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
  9178  	return _StickerMarket.Contract.contract.Transact(opts, method, params...)
  9179  }
  9180  
  9181  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
  9182  //
  9183  // Solidity: function controller() view returns(address)
  9184  func (_StickerMarket *StickerMarketCaller) Controller(opts *bind.CallOpts) (common.Address, error) {
  9185  	var out []interface{}
  9186  	err := _StickerMarket.contract.Call(opts, &out, "controller")
  9187  
  9188  	if err != nil {
  9189  		return *new(common.Address), err
  9190  	}
  9191  
  9192  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  9193  
  9194  	return out0, err
  9195  
  9196  }
  9197  
  9198  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
  9199  //
  9200  // Solidity: function controller() view returns(address)
  9201  func (_StickerMarket *StickerMarketSession) Controller() (common.Address, error) {
  9202  	return _StickerMarket.Contract.Controller(&_StickerMarket.CallOpts)
  9203  }
  9204  
  9205  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
  9206  //
  9207  // Solidity: function controller() view returns(address)
  9208  func (_StickerMarket *StickerMarketCallerSession) Controller() (common.Address, error) {
  9209  	return _StickerMarket.Contract.Controller(&_StickerMarket.CallOpts)
  9210  }
  9211  
  9212  // GetTokenData is a free data retrieval call binding the contract method 0xb09afec1.
  9213  //
  9214  // Solidity: function getTokenData(uint256 _tokenId) view returns(bytes4[] category, uint256 timestamp, bytes contenthash)
  9215  func (_StickerMarket *StickerMarketCaller) GetTokenData(opts *bind.CallOpts, _tokenId *big.Int) (struct {
  9216  	Category    [][4]byte
  9217  	Timestamp   *big.Int
  9218  	Contenthash []byte
  9219  }, error) {
  9220  	var out []interface{}
  9221  	err := _StickerMarket.contract.Call(opts, &out, "getTokenData", _tokenId)
  9222  
  9223  	outstruct := new(struct {
  9224  		Category    [][4]byte
  9225  		Timestamp   *big.Int
  9226  		Contenthash []byte
  9227  	})
  9228  	if err != nil {
  9229  		return *outstruct, err
  9230  	}
  9231  
  9232  	outstruct.Category = *abi.ConvertType(out[0], new([][4]byte)).(*[][4]byte)
  9233  	outstruct.Timestamp = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
  9234  	outstruct.Contenthash = *abi.ConvertType(out[2], new([]byte)).(*[]byte)
  9235  
  9236  	return *outstruct, err
  9237  
  9238  }
  9239  
  9240  // GetTokenData is a free data retrieval call binding the contract method 0xb09afec1.
  9241  //
  9242  // Solidity: function getTokenData(uint256 _tokenId) view returns(bytes4[] category, uint256 timestamp, bytes contenthash)
  9243  func (_StickerMarket *StickerMarketSession) GetTokenData(_tokenId *big.Int) (struct {
  9244  	Category    [][4]byte
  9245  	Timestamp   *big.Int
  9246  	Contenthash []byte
  9247  }, error) {
  9248  	return _StickerMarket.Contract.GetTokenData(&_StickerMarket.CallOpts, _tokenId)
  9249  }
  9250  
  9251  // GetTokenData is a free data retrieval call binding the contract method 0xb09afec1.
  9252  //
  9253  // Solidity: function getTokenData(uint256 _tokenId) view returns(bytes4[] category, uint256 timestamp, bytes contenthash)
  9254  func (_StickerMarket *StickerMarketCallerSession) GetTokenData(_tokenId *big.Int) (struct {
  9255  	Category    [][4]byte
  9256  	Timestamp   *big.Int
  9257  	Contenthash []byte
  9258  }, error) {
  9259  	return _StickerMarket.Contract.GetTokenData(&_StickerMarket.CallOpts, _tokenId)
  9260  }
  9261  
  9262  // Snt is a free data retrieval call binding the contract method 0x060eb520.
  9263  //
  9264  // Solidity: function snt() view returns(address)
  9265  func (_StickerMarket *StickerMarketCaller) Snt(opts *bind.CallOpts) (common.Address, error) {
  9266  	var out []interface{}
  9267  	err := _StickerMarket.contract.Call(opts, &out, "snt")
  9268  
  9269  	if err != nil {
  9270  		return *new(common.Address), err
  9271  	}
  9272  
  9273  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  9274  
  9275  	return out0, err
  9276  
  9277  }
  9278  
  9279  // Snt is a free data retrieval call binding the contract method 0x060eb520.
  9280  //
  9281  // Solidity: function snt() view returns(address)
  9282  func (_StickerMarket *StickerMarketSession) Snt() (common.Address, error) {
  9283  	return _StickerMarket.Contract.Snt(&_StickerMarket.CallOpts)
  9284  }
  9285  
  9286  // Snt is a free data retrieval call binding the contract method 0x060eb520.
  9287  //
  9288  // Solidity: function snt() view returns(address)
  9289  func (_StickerMarket *StickerMarketCallerSession) Snt() (common.Address, error) {
  9290  	return _StickerMarket.Contract.Snt(&_StickerMarket.CallOpts)
  9291  }
  9292  
  9293  // State is a free data retrieval call binding the contract method 0xc19d93fb.
  9294  //
  9295  // Solidity: function state() view returns(uint8)
  9296  func (_StickerMarket *StickerMarketCaller) State(opts *bind.CallOpts) (uint8, error) {
  9297  	var out []interface{}
  9298  	err := _StickerMarket.contract.Call(opts, &out, "state")
  9299  
  9300  	if err != nil {
  9301  		return *new(uint8), err
  9302  	}
  9303  
  9304  	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
  9305  
  9306  	return out0, err
  9307  
  9308  }
  9309  
  9310  // State is a free data retrieval call binding the contract method 0xc19d93fb.
  9311  //
  9312  // Solidity: function state() view returns(uint8)
  9313  func (_StickerMarket *StickerMarketSession) State() (uint8, error) {
  9314  	return _StickerMarket.Contract.State(&_StickerMarket.CallOpts)
  9315  }
  9316  
  9317  // State is a free data retrieval call binding the contract method 0xc19d93fb.
  9318  //
  9319  // Solidity: function state() view returns(uint8)
  9320  func (_StickerMarket *StickerMarketCallerSession) State() (uint8, error) {
  9321  	return _StickerMarket.Contract.State(&_StickerMarket.CallOpts)
  9322  }
  9323  
  9324  // StickerPack is a free data retrieval call binding the contract method 0x4858b015.
  9325  //
  9326  // Solidity: function stickerPack() view returns(address)
  9327  func (_StickerMarket *StickerMarketCaller) StickerPack(opts *bind.CallOpts) (common.Address, error) {
  9328  	var out []interface{}
  9329  	err := _StickerMarket.contract.Call(opts, &out, "stickerPack")
  9330  
  9331  	if err != nil {
  9332  		return *new(common.Address), err
  9333  	}
  9334  
  9335  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  9336  
  9337  	return out0, err
  9338  
  9339  }
  9340  
  9341  // StickerPack is a free data retrieval call binding the contract method 0x4858b015.
  9342  //
  9343  // Solidity: function stickerPack() view returns(address)
  9344  func (_StickerMarket *StickerMarketSession) StickerPack() (common.Address, error) {
  9345  	return _StickerMarket.Contract.StickerPack(&_StickerMarket.CallOpts)
  9346  }
  9347  
  9348  // StickerPack is a free data retrieval call binding the contract method 0x4858b015.
  9349  //
  9350  // Solidity: function stickerPack() view returns(address)
  9351  func (_StickerMarket *StickerMarketCallerSession) StickerPack() (common.Address, error) {
  9352  	return _StickerMarket.Contract.StickerPack(&_StickerMarket.CallOpts)
  9353  }
  9354  
  9355  // StickerType is a free data retrieval call binding the contract method 0x0ddd4c87.
  9356  //
  9357  // Solidity: function stickerType() view returns(address)
  9358  func (_StickerMarket *StickerMarketCaller) StickerType(opts *bind.CallOpts) (common.Address, error) {
  9359  	var out []interface{}
  9360  	err := _StickerMarket.contract.Call(opts, &out, "stickerType")
  9361  
  9362  	if err != nil {
  9363  		return *new(common.Address), err
  9364  	}
  9365  
  9366  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
  9367  
  9368  	return out0, err
  9369  
  9370  }
  9371  
  9372  // StickerType is a free data retrieval call binding the contract method 0x0ddd4c87.
  9373  //
  9374  // Solidity: function stickerType() view returns(address)
  9375  func (_StickerMarket *StickerMarketSession) StickerType() (common.Address, error) {
  9376  	return _StickerMarket.Contract.StickerType(&_StickerMarket.CallOpts)
  9377  }
  9378  
  9379  // StickerType is a free data retrieval call binding the contract method 0x0ddd4c87.
  9380  //
  9381  // Solidity: function stickerType() view returns(address)
  9382  func (_StickerMarket *StickerMarketCallerSession) StickerType() (common.Address, error) {
  9383  	return _StickerMarket.Contract.StickerType(&_StickerMarket.CallOpts)
  9384  }
  9385  
  9386  // BuyToken is a paid mutator transaction binding the contract method 0xf3e62640.
  9387  //
  9388  // Solidity: function buyToken(uint256 _packId, address _destination, uint256 _price) returns(uint256 tokenId)
  9389  func (_StickerMarket *StickerMarketTransactor) BuyToken(opts *bind.TransactOpts, _packId *big.Int, _destination common.Address, _price *big.Int) (*types.Transaction, error) {
  9390  	return _StickerMarket.contract.Transact(opts, "buyToken", _packId, _destination, _price)
  9391  }
  9392  
  9393  // BuyToken is a paid mutator transaction binding the contract method 0xf3e62640.
  9394  //
  9395  // Solidity: function buyToken(uint256 _packId, address _destination, uint256 _price) returns(uint256 tokenId)
  9396  func (_StickerMarket *StickerMarketSession) BuyToken(_packId *big.Int, _destination common.Address, _price *big.Int) (*types.Transaction, error) {
  9397  	return _StickerMarket.Contract.BuyToken(&_StickerMarket.TransactOpts, _packId, _destination, _price)
  9398  }
  9399  
  9400  // BuyToken is a paid mutator transaction binding the contract method 0xf3e62640.
  9401  //
  9402  // Solidity: function buyToken(uint256 _packId, address _destination, uint256 _price) returns(uint256 tokenId)
  9403  func (_StickerMarket *StickerMarketTransactorSession) BuyToken(_packId *big.Int, _destination common.Address, _price *big.Int) (*types.Transaction, error) {
  9404  	return _StickerMarket.Contract.BuyToken(&_StickerMarket.TransactOpts, _packId, _destination, _price)
  9405  }
  9406  
  9407  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
  9408  //
  9409  // Solidity: function changeController(address _newController) returns()
  9410  func (_StickerMarket *StickerMarketTransactor) ChangeController(opts *bind.TransactOpts, _newController common.Address) (*types.Transaction, error) {
  9411  	return _StickerMarket.contract.Transact(opts, "changeController", _newController)
  9412  }
  9413  
  9414  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
  9415  //
  9416  // Solidity: function changeController(address _newController) returns()
  9417  func (_StickerMarket *StickerMarketSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
  9418  	return _StickerMarket.Contract.ChangeController(&_StickerMarket.TransactOpts, _newController)
  9419  }
  9420  
  9421  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
  9422  //
  9423  // Solidity: function changeController(address _newController) returns()
  9424  func (_StickerMarket *StickerMarketTransactorSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
  9425  	return _StickerMarket.Contract.ChangeController(&_StickerMarket.TransactOpts, _newController)
  9426  }
  9427  
  9428  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
  9429  //
  9430  // Solidity: function claimTokens(address _token) returns()
  9431  func (_StickerMarket *StickerMarketTransactor) ClaimTokens(opts *bind.TransactOpts, _token common.Address) (*types.Transaction, error) {
  9432  	return _StickerMarket.contract.Transact(opts, "claimTokens", _token)
  9433  }
  9434  
  9435  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
  9436  //
  9437  // Solidity: function claimTokens(address _token) returns()
  9438  func (_StickerMarket *StickerMarketSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
  9439  	return _StickerMarket.Contract.ClaimTokens(&_StickerMarket.TransactOpts, _token)
  9440  }
  9441  
  9442  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
  9443  //
  9444  // Solidity: function claimTokens(address _token) returns()
  9445  func (_StickerMarket *StickerMarketTransactorSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
  9446  	return _StickerMarket.Contract.ClaimTokens(&_StickerMarket.TransactOpts, _token)
  9447  }
  9448  
  9449  // GeneratePack is a paid mutator transaction binding the contract method 0x4c06dc17.
  9450  //
  9451  // Solidity: function generatePack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash) returns(uint256 packId)
  9452  func (_StickerMarket *StickerMarketTransactor) GeneratePack(opts *bind.TransactOpts, _price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte) (*types.Transaction, error) {
  9453  	return _StickerMarket.contract.Transact(opts, "generatePack", _price, _donate, _category, _owner, _contenthash)
  9454  }
  9455  
  9456  // GeneratePack is a paid mutator transaction binding the contract method 0x4c06dc17.
  9457  //
  9458  // Solidity: function generatePack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash) returns(uint256 packId)
  9459  func (_StickerMarket *StickerMarketSession) GeneratePack(_price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte) (*types.Transaction, error) {
  9460  	return _StickerMarket.Contract.GeneratePack(&_StickerMarket.TransactOpts, _price, _donate, _category, _owner, _contenthash)
  9461  }
  9462  
  9463  // GeneratePack is a paid mutator transaction binding the contract method 0x4c06dc17.
  9464  //
  9465  // Solidity: function generatePack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash) returns(uint256 packId)
  9466  func (_StickerMarket *StickerMarketTransactorSession) GeneratePack(_price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte) (*types.Transaction, error) {
  9467  	return _StickerMarket.Contract.GeneratePack(&_StickerMarket.TransactOpts, _price, _donate, _category, _owner, _contenthash)
  9468  }
  9469  
  9470  // GenerateToken is a paid mutator transaction binding the contract method 0x188b5372.
  9471  //
  9472  // Solidity: function generateToken(address _owner, uint256 _packId) returns(uint256 tokenId)
  9473  func (_StickerMarket *StickerMarketTransactor) GenerateToken(opts *bind.TransactOpts, _owner common.Address, _packId *big.Int) (*types.Transaction, error) {
  9474  	return _StickerMarket.contract.Transact(opts, "generateToken", _owner, _packId)
  9475  }
  9476  
  9477  // GenerateToken is a paid mutator transaction binding the contract method 0x188b5372.
  9478  //
  9479  // Solidity: function generateToken(address _owner, uint256 _packId) returns(uint256 tokenId)
  9480  func (_StickerMarket *StickerMarketSession) GenerateToken(_owner common.Address, _packId *big.Int) (*types.Transaction, error) {
  9481  	return _StickerMarket.Contract.GenerateToken(&_StickerMarket.TransactOpts, _owner, _packId)
  9482  }
  9483  
  9484  // GenerateToken is a paid mutator transaction binding the contract method 0x188b5372.
  9485  //
  9486  // Solidity: function generateToken(address _owner, uint256 _packId) returns(uint256 tokenId)
  9487  func (_StickerMarket *StickerMarketTransactorSession) GenerateToken(_owner common.Address, _packId *big.Int) (*types.Transaction, error) {
  9488  	return _StickerMarket.Contract.GenerateToken(&_StickerMarket.TransactOpts, _owner, _packId)
  9489  }
  9490  
  9491  // Migrate is a paid mutator transaction binding the contract method 0xce5494bb.
  9492  //
  9493  // Solidity: function migrate(address _newController) returns()
  9494  func (_StickerMarket *StickerMarketTransactor) Migrate(opts *bind.TransactOpts, _newController common.Address) (*types.Transaction, error) {
  9495  	return _StickerMarket.contract.Transact(opts, "migrate", _newController)
  9496  }
  9497  
  9498  // Migrate is a paid mutator transaction binding the contract method 0xce5494bb.
  9499  //
  9500  // Solidity: function migrate(address _newController) returns()
  9501  func (_StickerMarket *StickerMarketSession) Migrate(_newController common.Address) (*types.Transaction, error) {
  9502  	return _StickerMarket.Contract.Migrate(&_StickerMarket.TransactOpts, _newController)
  9503  }
  9504  
  9505  // Migrate is a paid mutator transaction binding the contract method 0xce5494bb.
  9506  //
  9507  // Solidity: function migrate(address _newController) returns()
  9508  func (_StickerMarket *StickerMarketTransactorSession) Migrate(_newController common.Address) (*types.Transaction, error) {
  9509  	return _StickerMarket.Contract.Migrate(&_StickerMarket.TransactOpts, _newController)
  9510  }
  9511  
  9512  // PurgePack is a paid mutator transaction binding the contract method 0x00b3c91b.
  9513  //
  9514  // Solidity: function purgePack(uint256 _packId, uint256 _limit) returns()
  9515  func (_StickerMarket *StickerMarketTransactor) PurgePack(opts *bind.TransactOpts, _packId *big.Int, _limit *big.Int) (*types.Transaction, error) {
  9516  	return _StickerMarket.contract.Transact(opts, "purgePack", _packId, _limit)
  9517  }
  9518  
  9519  // PurgePack is a paid mutator transaction binding the contract method 0x00b3c91b.
  9520  //
  9521  // Solidity: function purgePack(uint256 _packId, uint256 _limit) returns()
  9522  func (_StickerMarket *StickerMarketSession) PurgePack(_packId *big.Int, _limit *big.Int) (*types.Transaction, error) {
  9523  	return _StickerMarket.Contract.PurgePack(&_StickerMarket.TransactOpts, _packId, _limit)
  9524  }
  9525  
  9526  // PurgePack is a paid mutator transaction binding the contract method 0x00b3c91b.
  9527  //
  9528  // Solidity: function purgePack(uint256 _packId, uint256 _limit) returns()
  9529  func (_StickerMarket *StickerMarketTransactorSession) PurgePack(_packId *big.Int, _limit *big.Int) (*types.Transaction, error) {
  9530  	return _StickerMarket.Contract.PurgePack(&_StickerMarket.TransactOpts, _packId, _limit)
  9531  }
  9532  
  9533  // ReceiveApproval is a paid mutator transaction binding the contract method 0x8f4ffcb1.
  9534  //
  9535  // Solidity: function receiveApproval(address _from, uint256 _value, address _token, bytes _data) returns()
  9536  func (_StickerMarket *StickerMarketTransactor) ReceiveApproval(opts *bind.TransactOpts, _from common.Address, _value *big.Int, _token common.Address, _data []byte) (*types.Transaction, error) {
  9537  	return _StickerMarket.contract.Transact(opts, "receiveApproval", _from, _value, _token, _data)
  9538  }
  9539  
  9540  // ReceiveApproval is a paid mutator transaction binding the contract method 0x8f4ffcb1.
  9541  //
  9542  // Solidity: function receiveApproval(address _from, uint256 _value, address _token, bytes _data) returns()
  9543  func (_StickerMarket *StickerMarketSession) ReceiveApproval(_from common.Address, _value *big.Int, _token common.Address, _data []byte) (*types.Transaction, error) {
  9544  	return _StickerMarket.Contract.ReceiveApproval(&_StickerMarket.TransactOpts, _from, _value, _token, _data)
  9545  }
  9546  
  9547  // ReceiveApproval is a paid mutator transaction binding the contract method 0x8f4ffcb1.
  9548  //
  9549  // Solidity: function receiveApproval(address _from, uint256 _value, address _token, bytes _data) returns()
  9550  func (_StickerMarket *StickerMarketTransactorSession) ReceiveApproval(_from common.Address, _value *big.Int, _token common.Address, _data []byte) (*types.Transaction, error) {
  9551  	return _StickerMarket.Contract.ReceiveApproval(&_StickerMarket.TransactOpts, _from, _value, _token, _data)
  9552  }
  9553  
  9554  // RegisterPack is a paid mutator transaction binding the contract method 0x1cf75710.
  9555  //
  9556  // Solidity: function registerPack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash, uint256 _fee) returns(uint256 packId)
  9557  func (_StickerMarket *StickerMarketTransactor) RegisterPack(opts *bind.TransactOpts, _price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte, _fee *big.Int) (*types.Transaction, error) {
  9558  	return _StickerMarket.contract.Transact(opts, "registerPack", _price, _donate, _category, _owner, _contenthash, _fee)
  9559  }
  9560  
  9561  // RegisterPack is a paid mutator transaction binding the contract method 0x1cf75710.
  9562  //
  9563  // Solidity: function registerPack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash, uint256 _fee) returns(uint256 packId)
  9564  func (_StickerMarket *StickerMarketSession) RegisterPack(_price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte, _fee *big.Int) (*types.Transaction, error) {
  9565  	return _StickerMarket.Contract.RegisterPack(&_StickerMarket.TransactOpts, _price, _donate, _category, _owner, _contenthash, _fee)
  9566  }
  9567  
  9568  // RegisterPack is a paid mutator transaction binding the contract method 0x1cf75710.
  9569  //
  9570  // Solidity: function registerPack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash, uint256 _fee) returns(uint256 packId)
  9571  func (_StickerMarket *StickerMarketTransactorSession) RegisterPack(_price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte, _fee *big.Int) (*types.Transaction, error) {
  9572  	return _StickerMarket.Contract.RegisterPack(&_StickerMarket.TransactOpts, _price, _donate, _category, _owner, _contenthash, _fee)
  9573  }
  9574  
  9575  // SetBurnRate is a paid mutator transaction binding the contract method 0x189d165e.
  9576  //
  9577  // Solidity: function setBurnRate(uint256 _value) returns()
  9578  func (_StickerMarket *StickerMarketTransactor) SetBurnRate(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) {
  9579  	return _StickerMarket.contract.Transact(opts, "setBurnRate", _value)
  9580  }
  9581  
  9582  // SetBurnRate is a paid mutator transaction binding the contract method 0x189d165e.
  9583  //
  9584  // Solidity: function setBurnRate(uint256 _value) returns()
  9585  func (_StickerMarket *StickerMarketSession) SetBurnRate(_value *big.Int) (*types.Transaction, error) {
  9586  	return _StickerMarket.Contract.SetBurnRate(&_StickerMarket.TransactOpts, _value)
  9587  }
  9588  
  9589  // SetBurnRate is a paid mutator transaction binding the contract method 0x189d165e.
  9590  //
  9591  // Solidity: function setBurnRate(uint256 _value) returns()
  9592  func (_StickerMarket *StickerMarketTransactorSession) SetBurnRate(_value *big.Int) (*types.Transaction, error) {
  9593  	return _StickerMarket.Contract.SetBurnRate(&_StickerMarket.TransactOpts, _value)
  9594  }
  9595  
  9596  // SetMarketState is a paid mutator transaction binding the contract method 0x536b0445.
  9597  //
  9598  // Solidity: function setMarketState(uint8 _state) returns()
  9599  func (_StickerMarket *StickerMarketTransactor) SetMarketState(opts *bind.TransactOpts, _state uint8) (*types.Transaction, error) {
  9600  	return _StickerMarket.contract.Transact(opts, "setMarketState", _state)
  9601  }
  9602  
  9603  // SetMarketState is a paid mutator transaction binding the contract method 0x536b0445.
  9604  //
  9605  // Solidity: function setMarketState(uint8 _state) returns()
  9606  func (_StickerMarket *StickerMarketSession) SetMarketState(_state uint8) (*types.Transaction, error) {
  9607  	return _StickerMarket.Contract.SetMarketState(&_StickerMarket.TransactOpts, _state)
  9608  }
  9609  
  9610  // SetMarketState is a paid mutator transaction binding the contract method 0x536b0445.
  9611  //
  9612  // Solidity: function setMarketState(uint8 _state) returns()
  9613  func (_StickerMarket *StickerMarketTransactorSession) SetMarketState(_state uint8) (*types.Transaction, error) {
  9614  	return _StickerMarket.Contract.SetMarketState(&_StickerMarket.TransactOpts, _state)
  9615  }
  9616  
  9617  // SetRegisterFee is a paid mutator transaction binding the contract method 0x92be2ab8.
  9618  //
  9619  // Solidity: function setRegisterFee(uint256 _value) returns()
  9620  func (_StickerMarket *StickerMarketTransactor) SetRegisterFee(opts *bind.TransactOpts, _value *big.Int) (*types.Transaction, error) {
  9621  	return _StickerMarket.contract.Transact(opts, "setRegisterFee", _value)
  9622  }
  9623  
  9624  // SetRegisterFee is a paid mutator transaction binding the contract method 0x92be2ab8.
  9625  //
  9626  // Solidity: function setRegisterFee(uint256 _value) returns()
  9627  func (_StickerMarket *StickerMarketSession) SetRegisterFee(_value *big.Int) (*types.Transaction, error) {
  9628  	return _StickerMarket.Contract.SetRegisterFee(&_StickerMarket.TransactOpts, _value)
  9629  }
  9630  
  9631  // SetRegisterFee is a paid mutator transaction binding the contract method 0x92be2ab8.
  9632  //
  9633  // Solidity: function setRegisterFee(uint256 _value) returns()
  9634  func (_StickerMarket *StickerMarketTransactorSession) SetRegisterFee(_value *big.Int) (*types.Transaction, error) {
  9635  	return _StickerMarket.Contract.SetRegisterFee(&_StickerMarket.TransactOpts, _value)
  9636  }
  9637  
  9638  // StickerMarketBurnRateIterator is returned from FilterBurnRate and is used to iterate over the raw logs and unpacked data for BurnRate events raised by the StickerMarket contract.
  9639  type StickerMarketBurnRateIterator struct {
  9640  	Event *StickerMarketBurnRate // Event containing the contract specifics and raw log
  9641  
  9642  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  9643  	event    string              // Event name to use for unpacking event data
  9644  
  9645  	logs chan types.Log        // Log channel receiving the found contract events
  9646  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  9647  	done bool                  // Whether the subscription completed delivering logs
  9648  	fail error                 // Occurred error to stop iteration
  9649  }
  9650  
  9651  // Next advances the iterator to the subsequent event, returning whether there
  9652  // are any more events found. In case of a retrieval or parsing error, false is
  9653  // returned and Error() can be queried for the exact failure.
  9654  func (it *StickerMarketBurnRateIterator) Next() bool {
  9655  	// If the iterator failed, stop iterating
  9656  	if it.fail != nil {
  9657  		return false
  9658  	}
  9659  	// If the iterator completed, deliver directly whatever's available
  9660  	if it.done {
  9661  		select {
  9662  		case log := <-it.logs:
  9663  			it.Event = new(StickerMarketBurnRate)
  9664  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  9665  				it.fail = err
  9666  				return false
  9667  			}
  9668  			it.Event.Raw = log
  9669  			return true
  9670  
  9671  		default:
  9672  			return false
  9673  		}
  9674  	}
  9675  	// Iterator still in progress, wait for either a data or an error event
  9676  	select {
  9677  	case log := <-it.logs:
  9678  		it.Event = new(StickerMarketBurnRate)
  9679  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  9680  			it.fail = err
  9681  			return false
  9682  		}
  9683  		it.Event.Raw = log
  9684  		return true
  9685  
  9686  	case err := <-it.sub.Err():
  9687  		it.done = true
  9688  		it.fail = err
  9689  		return it.Next()
  9690  	}
  9691  }
  9692  
  9693  // Error returns any retrieval or parsing error occurred during filtering.
  9694  func (it *StickerMarketBurnRateIterator) Error() error {
  9695  	return it.fail
  9696  }
  9697  
  9698  // Close terminates the iteration process, releasing any pending underlying
  9699  // resources.
  9700  func (it *StickerMarketBurnRateIterator) Close() error {
  9701  	it.sub.Unsubscribe()
  9702  	return nil
  9703  }
  9704  
  9705  // StickerMarketBurnRate represents a BurnRate event raised by the StickerMarket contract.
  9706  type StickerMarketBurnRate struct {
  9707  	Value *big.Int
  9708  	Raw   types.Log // Blockchain specific contextual infos
  9709  }
  9710  
  9711  // FilterBurnRate is a free log retrieval operation binding the contract event 0x59701ed6f46ff3f5c94b1b741d5b3f2968eb7a0ae31d2cf2a3a9f2153d18b514.
  9712  //
  9713  // Solidity: event BurnRate(uint256 value)
  9714  func (_StickerMarket *StickerMarketFilterer) FilterBurnRate(opts *bind.FilterOpts) (*StickerMarketBurnRateIterator, error) {
  9715  
  9716  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "BurnRate")
  9717  	if err != nil {
  9718  		return nil, err
  9719  	}
  9720  	return &StickerMarketBurnRateIterator{contract: _StickerMarket.contract, event: "BurnRate", logs: logs, sub: sub}, nil
  9721  }
  9722  
  9723  // WatchBurnRate is a free log subscription operation binding the contract event 0x59701ed6f46ff3f5c94b1b741d5b3f2968eb7a0ae31d2cf2a3a9f2153d18b514.
  9724  //
  9725  // Solidity: event BurnRate(uint256 value)
  9726  func (_StickerMarket *StickerMarketFilterer) WatchBurnRate(opts *bind.WatchOpts, sink chan<- *StickerMarketBurnRate) (event.Subscription, error) {
  9727  
  9728  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "BurnRate")
  9729  	if err != nil {
  9730  		return nil, err
  9731  	}
  9732  	return event.NewSubscription(func(quit <-chan struct{}) error {
  9733  		defer sub.Unsubscribe()
  9734  		for {
  9735  			select {
  9736  			case log := <-logs:
  9737  				// New log arrived, parse the event and forward to the user
  9738  				event := new(StickerMarketBurnRate)
  9739  				if err := _StickerMarket.contract.UnpackLog(event, "BurnRate", log); err != nil {
  9740  					return err
  9741  				}
  9742  				event.Raw = log
  9743  
  9744  				select {
  9745  				case sink <- event:
  9746  				case err := <-sub.Err():
  9747  					return err
  9748  				case <-quit:
  9749  					return nil
  9750  				}
  9751  			case err := <-sub.Err():
  9752  				return err
  9753  			case <-quit:
  9754  				return nil
  9755  			}
  9756  		}
  9757  	}), nil
  9758  }
  9759  
  9760  // ParseBurnRate is a log parse operation binding the contract event 0x59701ed6f46ff3f5c94b1b741d5b3f2968eb7a0ae31d2cf2a3a9f2153d18b514.
  9761  //
  9762  // Solidity: event BurnRate(uint256 value)
  9763  func (_StickerMarket *StickerMarketFilterer) ParseBurnRate(log types.Log) (*StickerMarketBurnRate, error) {
  9764  	event := new(StickerMarketBurnRate)
  9765  	if err := _StickerMarket.contract.UnpackLog(event, "BurnRate", log); err != nil {
  9766  		return nil, err
  9767  	}
  9768  	event.Raw = log
  9769  	return event, nil
  9770  }
  9771  
  9772  // StickerMarketClaimedTokensIterator is returned from FilterClaimedTokens and is used to iterate over the raw logs and unpacked data for ClaimedTokens events raised by the StickerMarket contract.
  9773  type StickerMarketClaimedTokensIterator struct {
  9774  	Event *StickerMarketClaimedTokens // Event containing the contract specifics and raw log
  9775  
  9776  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  9777  	event    string              // Event name to use for unpacking event data
  9778  
  9779  	logs chan types.Log        // Log channel receiving the found contract events
  9780  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  9781  	done bool                  // Whether the subscription completed delivering logs
  9782  	fail error                 // Occurred error to stop iteration
  9783  }
  9784  
  9785  // Next advances the iterator to the subsequent event, returning whether there
  9786  // are any more events found. In case of a retrieval or parsing error, false is
  9787  // returned and Error() can be queried for the exact failure.
  9788  func (it *StickerMarketClaimedTokensIterator) Next() bool {
  9789  	// If the iterator failed, stop iterating
  9790  	if it.fail != nil {
  9791  		return false
  9792  	}
  9793  	// If the iterator completed, deliver directly whatever's available
  9794  	if it.done {
  9795  		select {
  9796  		case log := <-it.logs:
  9797  			it.Event = new(StickerMarketClaimedTokens)
  9798  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  9799  				it.fail = err
  9800  				return false
  9801  			}
  9802  			it.Event.Raw = log
  9803  			return true
  9804  
  9805  		default:
  9806  			return false
  9807  		}
  9808  	}
  9809  	// Iterator still in progress, wait for either a data or an error event
  9810  	select {
  9811  	case log := <-it.logs:
  9812  		it.Event = new(StickerMarketClaimedTokens)
  9813  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  9814  			it.fail = err
  9815  			return false
  9816  		}
  9817  		it.Event.Raw = log
  9818  		return true
  9819  
  9820  	case err := <-it.sub.Err():
  9821  		it.done = true
  9822  		it.fail = err
  9823  		return it.Next()
  9824  	}
  9825  }
  9826  
  9827  // Error returns any retrieval or parsing error occurred during filtering.
  9828  func (it *StickerMarketClaimedTokensIterator) Error() error {
  9829  	return it.fail
  9830  }
  9831  
  9832  // Close terminates the iteration process, releasing any pending underlying
  9833  // resources.
  9834  func (it *StickerMarketClaimedTokensIterator) Close() error {
  9835  	it.sub.Unsubscribe()
  9836  	return nil
  9837  }
  9838  
  9839  // StickerMarketClaimedTokens represents a ClaimedTokens event raised by the StickerMarket contract.
  9840  type StickerMarketClaimedTokens struct {
  9841  	Token      common.Address
  9842  	Controller common.Address
  9843  	Amount     *big.Int
  9844  	Raw        types.Log // Blockchain specific contextual infos
  9845  }
  9846  
  9847  // FilterClaimedTokens is a free log retrieval operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
  9848  //
  9849  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
  9850  func (_StickerMarket *StickerMarketFilterer) FilterClaimedTokens(opts *bind.FilterOpts, _token []common.Address, _controller []common.Address) (*StickerMarketClaimedTokensIterator, error) {
  9851  
  9852  	var _tokenRule []interface{}
  9853  	for _, _tokenItem := range _token {
  9854  		_tokenRule = append(_tokenRule, _tokenItem)
  9855  	}
  9856  	var _controllerRule []interface{}
  9857  	for _, _controllerItem := range _controller {
  9858  		_controllerRule = append(_controllerRule, _controllerItem)
  9859  	}
  9860  
  9861  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
  9862  	if err != nil {
  9863  		return nil, err
  9864  	}
  9865  	return &StickerMarketClaimedTokensIterator{contract: _StickerMarket.contract, event: "ClaimedTokens", logs: logs, sub: sub}, nil
  9866  }
  9867  
  9868  // WatchClaimedTokens is a free log subscription operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
  9869  //
  9870  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
  9871  func (_StickerMarket *StickerMarketFilterer) WatchClaimedTokens(opts *bind.WatchOpts, sink chan<- *StickerMarketClaimedTokens, _token []common.Address, _controller []common.Address) (event.Subscription, error) {
  9872  
  9873  	var _tokenRule []interface{}
  9874  	for _, _tokenItem := range _token {
  9875  		_tokenRule = append(_tokenRule, _tokenItem)
  9876  	}
  9877  	var _controllerRule []interface{}
  9878  	for _, _controllerItem := range _controller {
  9879  		_controllerRule = append(_controllerRule, _controllerItem)
  9880  	}
  9881  
  9882  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
  9883  	if err != nil {
  9884  		return nil, err
  9885  	}
  9886  	return event.NewSubscription(func(quit <-chan struct{}) error {
  9887  		defer sub.Unsubscribe()
  9888  		for {
  9889  			select {
  9890  			case log := <-logs:
  9891  				// New log arrived, parse the event and forward to the user
  9892  				event := new(StickerMarketClaimedTokens)
  9893  				if err := _StickerMarket.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
  9894  					return err
  9895  				}
  9896  				event.Raw = log
  9897  
  9898  				select {
  9899  				case sink <- event:
  9900  				case err := <-sub.Err():
  9901  					return err
  9902  				case <-quit:
  9903  					return nil
  9904  				}
  9905  			case err := <-sub.Err():
  9906  				return err
  9907  			case <-quit:
  9908  				return nil
  9909  			}
  9910  		}
  9911  	}), nil
  9912  }
  9913  
  9914  // ParseClaimedTokens is a log parse operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
  9915  //
  9916  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
  9917  func (_StickerMarket *StickerMarketFilterer) ParseClaimedTokens(log types.Log) (*StickerMarketClaimedTokens, error) {
  9918  	event := new(StickerMarketClaimedTokens)
  9919  	if err := _StickerMarket.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
  9920  		return nil, err
  9921  	}
  9922  	event.Raw = log
  9923  	return event, nil
  9924  }
  9925  
  9926  // StickerMarketMarketStateIterator is returned from FilterMarketState and is used to iterate over the raw logs and unpacked data for MarketState events raised by the StickerMarket contract.
  9927  type StickerMarketMarketStateIterator struct {
  9928  	Event *StickerMarketMarketState // Event containing the contract specifics and raw log
  9929  
  9930  	contract *bind.BoundContract // Generic contract to use for unpacking event data
  9931  	event    string              // Event name to use for unpacking event data
  9932  
  9933  	logs chan types.Log        // Log channel receiving the found contract events
  9934  	sub  ethereum.Subscription // Subscription for errors, completion and termination
  9935  	done bool                  // Whether the subscription completed delivering logs
  9936  	fail error                 // Occurred error to stop iteration
  9937  }
  9938  
  9939  // Next advances the iterator to the subsequent event, returning whether there
  9940  // are any more events found. In case of a retrieval or parsing error, false is
  9941  // returned and Error() can be queried for the exact failure.
  9942  func (it *StickerMarketMarketStateIterator) Next() bool {
  9943  	// If the iterator failed, stop iterating
  9944  	if it.fail != nil {
  9945  		return false
  9946  	}
  9947  	// If the iterator completed, deliver directly whatever's available
  9948  	if it.done {
  9949  		select {
  9950  		case log := <-it.logs:
  9951  			it.Event = new(StickerMarketMarketState)
  9952  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  9953  				it.fail = err
  9954  				return false
  9955  			}
  9956  			it.Event.Raw = log
  9957  			return true
  9958  
  9959  		default:
  9960  			return false
  9961  		}
  9962  	}
  9963  	// Iterator still in progress, wait for either a data or an error event
  9964  	select {
  9965  	case log := <-it.logs:
  9966  		it.Event = new(StickerMarketMarketState)
  9967  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
  9968  			it.fail = err
  9969  			return false
  9970  		}
  9971  		it.Event.Raw = log
  9972  		return true
  9973  
  9974  	case err := <-it.sub.Err():
  9975  		it.done = true
  9976  		it.fail = err
  9977  		return it.Next()
  9978  	}
  9979  }
  9980  
  9981  // Error returns any retrieval or parsing error occurred during filtering.
  9982  func (it *StickerMarketMarketStateIterator) Error() error {
  9983  	return it.fail
  9984  }
  9985  
  9986  // Close terminates the iteration process, releasing any pending underlying
  9987  // resources.
  9988  func (it *StickerMarketMarketStateIterator) Close() error {
  9989  	it.sub.Unsubscribe()
  9990  	return nil
  9991  }
  9992  
  9993  // StickerMarketMarketState represents a MarketState event raised by the StickerMarket contract.
  9994  type StickerMarketMarketState struct {
  9995  	State uint8
  9996  	Raw   types.Log // Blockchain specific contextual infos
  9997  }
  9998  
  9999  // FilterMarketState is a free log retrieval operation binding the contract event 0x9f17f1d96f7bb1d5a573d638f26fdb9fa651427eb2e7b36481cd5e1351581e58.
 10000  //
 10001  // Solidity: event MarketState(uint8 state)
 10002  func (_StickerMarket *StickerMarketFilterer) FilterMarketState(opts *bind.FilterOpts) (*StickerMarketMarketStateIterator, error) {
 10003  
 10004  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "MarketState")
 10005  	if err != nil {
 10006  		return nil, err
 10007  	}
 10008  	return &StickerMarketMarketStateIterator{contract: _StickerMarket.contract, event: "MarketState", logs: logs, sub: sub}, nil
 10009  }
 10010  
 10011  // WatchMarketState is a free log subscription operation binding the contract event 0x9f17f1d96f7bb1d5a573d638f26fdb9fa651427eb2e7b36481cd5e1351581e58.
 10012  //
 10013  // Solidity: event MarketState(uint8 state)
 10014  func (_StickerMarket *StickerMarketFilterer) WatchMarketState(opts *bind.WatchOpts, sink chan<- *StickerMarketMarketState) (event.Subscription, error) {
 10015  
 10016  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "MarketState")
 10017  	if err != nil {
 10018  		return nil, err
 10019  	}
 10020  	return event.NewSubscription(func(quit <-chan struct{}) error {
 10021  		defer sub.Unsubscribe()
 10022  		for {
 10023  			select {
 10024  			case log := <-logs:
 10025  				// New log arrived, parse the event and forward to the user
 10026  				event := new(StickerMarketMarketState)
 10027  				if err := _StickerMarket.contract.UnpackLog(event, "MarketState", log); err != nil {
 10028  					return err
 10029  				}
 10030  				event.Raw = log
 10031  
 10032  				select {
 10033  				case sink <- event:
 10034  				case err := <-sub.Err():
 10035  					return err
 10036  				case <-quit:
 10037  					return nil
 10038  				}
 10039  			case err := <-sub.Err():
 10040  				return err
 10041  			case <-quit:
 10042  				return nil
 10043  			}
 10044  		}
 10045  	}), nil
 10046  }
 10047  
 10048  // ParseMarketState is a log parse operation binding the contract event 0x9f17f1d96f7bb1d5a573d638f26fdb9fa651427eb2e7b36481cd5e1351581e58.
 10049  //
 10050  // Solidity: event MarketState(uint8 state)
 10051  func (_StickerMarket *StickerMarketFilterer) ParseMarketState(log types.Log) (*StickerMarketMarketState, error) {
 10052  	event := new(StickerMarketMarketState)
 10053  	if err := _StickerMarket.contract.UnpackLog(event, "MarketState", log); err != nil {
 10054  		return nil, err
 10055  	}
 10056  	event.Raw = log
 10057  	return event, nil
 10058  }
 10059  
 10060  // StickerMarketNewControllerIterator is returned from FilterNewController and is used to iterate over the raw logs and unpacked data for NewController events raised by the StickerMarket contract.
 10061  type StickerMarketNewControllerIterator struct {
 10062  	Event *StickerMarketNewController // Event containing the contract specifics and raw log
 10063  
 10064  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 10065  	event    string              // Event name to use for unpacking event data
 10066  
 10067  	logs chan types.Log        // Log channel receiving the found contract events
 10068  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 10069  	done bool                  // Whether the subscription completed delivering logs
 10070  	fail error                 // Occurred error to stop iteration
 10071  }
 10072  
 10073  // Next advances the iterator to the subsequent event, returning whether there
 10074  // are any more events found. In case of a retrieval or parsing error, false is
 10075  // returned and Error() can be queried for the exact failure.
 10076  func (it *StickerMarketNewControllerIterator) Next() bool {
 10077  	// If the iterator failed, stop iterating
 10078  	if it.fail != nil {
 10079  		return false
 10080  	}
 10081  	// If the iterator completed, deliver directly whatever's available
 10082  	if it.done {
 10083  		select {
 10084  		case log := <-it.logs:
 10085  			it.Event = new(StickerMarketNewController)
 10086  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10087  				it.fail = err
 10088  				return false
 10089  			}
 10090  			it.Event.Raw = log
 10091  			return true
 10092  
 10093  		default:
 10094  			return false
 10095  		}
 10096  	}
 10097  	// Iterator still in progress, wait for either a data or an error event
 10098  	select {
 10099  	case log := <-it.logs:
 10100  		it.Event = new(StickerMarketNewController)
 10101  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10102  			it.fail = err
 10103  			return false
 10104  		}
 10105  		it.Event.Raw = log
 10106  		return true
 10107  
 10108  	case err := <-it.sub.Err():
 10109  		it.done = true
 10110  		it.fail = err
 10111  		return it.Next()
 10112  	}
 10113  }
 10114  
 10115  // Error returns any retrieval or parsing error occurred during filtering.
 10116  func (it *StickerMarketNewControllerIterator) Error() error {
 10117  	return it.fail
 10118  }
 10119  
 10120  // Close terminates the iteration process, releasing any pending underlying
 10121  // resources.
 10122  func (it *StickerMarketNewControllerIterator) Close() error {
 10123  	it.sub.Unsubscribe()
 10124  	return nil
 10125  }
 10126  
 10127  // StickerMarketNewController represents a NewController event raised by the StickerMarket contract.
 10128  type StickerMarketNewController struct {
 10129  	Controller common.Address
 10130  	Raw        types.Log // Blockchain specific contextual infos
 10131  }
 10132  
 10133  // FilterNewController is a free log retrieval operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 10134  //
 10135  // Solidity: event NewController(address controller)
 10136  func (_StickerMarket *StickerMarketFilterer) FilterNewController(opts *bind.FilterOpts) (*StickerMarketNewControllerIterator, error) {
 10137  
 10138  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "NewController")
 10139  	if err != nil {
 10140  		return nil, err
 10141  	}
 10142  	return &StickerMarketNewControllerIterator{contract: _StickerMarket.contract, event: "NewController", logs: logs, sub: sub}, nil
 10143  }
 10144  
 10145  // WatchNewController is a free log subscription operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 10146  //
 10147  // Solidity: event NewController(address controller)
 10148  func (_StickerMarket *StickerMarketFilterer) WatchNewController(opts *bind.WatchOpts, sink chan<- *StickerMarketNewController) (event.Subscription, error) {
 10149  
 10150  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "NewController")
 10151  	if err != nil {
 10152  		return nil, err
 10153  	}
 10154  	return event.NewSubscription(func(quit <-chan struct{}) error {
 10155  		defer sub.Unsubscribe()
 10156  		for {
 10157  			select {
 10158  			case log := <-logs:
 10159  				// New log arrived, parse the event and forward to the user
 10160  				event := new(StickerMarketNewController)
 10161  				if err := _StickerMarket.contract.UnpackLog(event, "NewController", log); err != nil {
 10162  					return err
 10163  				}
 10164  				event.Raw = log
 10165  
 10166  				select {
 10167  				case sink <- event:
 10168  				case err := <-sub.Err():
 10169  					return err
 10170  				case <-quit:
 10171  					return nil
 10172  				}
 10173  			case err := <-sub.Err():
 10174  				return err
 10175  			case <-quit:
 10176  				return nil
 10177  			}
 10178  		}
 10179  	}), nil
 10180  }
 10181  
 10182  // ParseNewController is a log parse operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 10183  //
 10184  // Solidity: event NewController(address controller)
 10185  func (_StickerMarket *StickerMarketFilterer) ParseNewController(log types.Log) (*StickerMarketNewController, error) {
 10186  	event := new(StickerMarketNewController)
 10187  	if err := _StickerMarket.contract.UnpackLog(event, "NewController", log); err != nil {
 10188  		return nil, err
 10189  	}
 10190  	event.Raw = log
 10191  	return event, nil
 10192  }
 10193  
 10194  // StickerMarketRegisterIterator is returned from FilterRegister and is used to iterate over the raw logs and unpacked data for Register events raised by the StickerMarket contract.
 10195  type StickerMarketRegisterIterator struct {
 10196  	Event *StickerMarketRegister // Event containing the contract specifics and raw log
 10197  
 10198  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 10199  	event    string              // Event name to use for unpacking event data
 10200  
 10201  	logs chan types.Log        // Log channel receiving the found contract events
 10202  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 10203  	done bool                  // Whether the subscription completed delivering logs
 10204  	fail error                 // Occurred error to stop iteration
 10205  }
 10206  
 10207  // Next advances the iterator to the subsequent event, returning whether there
 10208  // are any more events found. In case of a retrieval or parsing error, false is
 10209  // returned and Error() can be queried for the exact failure.
 10210  func (it *StickerMarketRegisterIterator) Next() bool {
 10211  	// If the iterator failed, stop iterating
 10212  	if it.fail != nil {
 10213  		return false
 10214  	}
 10215  	// If the iterator completed, deliver directly whatever's available
 10216  	if it.done {
 10217  		select {
 10218  		case log := <-it.logs:
 10219  			it.Event = new(StickerMarketRegister)
 10220  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10221  				it.fail = err
 10222  				return false
 10223  			}
 10224  			it.Event.Raw = log
 10225  			return true
 10226  
 10227  		default:
 10228  			return false
 10229  		}
 10230  	}
 10231  	// Iterator still in progress, wait for either a data or an error event
 10232  	select {
 10233  	case log := <-it.logs:
 10234  		it.Event = new(StickerMarketRegister)
 10235  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10236  			it.fail = err
 10237  			return false
 10238  		}
 10239  		it.Event.Raw = log
 10240  		return true
 10241  
 10242  	case err := <-it.sub.Err():
 10243  		it.done = true
 10244  		it.fail = err
 10245  		return it.Next()
 10246  	}
 10247  }
 10248  
 10249  // Error returns any retrieval or parsing error occurred during filtering.
 10250  func (it *StickerMarketRegisterIterator) Error() error {
 10251  	return it.fail
 10252  }
 10253  
 10254  // Close terminates the iteration process, releasing any pending underlying
 10255  // resources.
 10256  func (it *StickerMarketRegisterIterator) Close() error {
 10257  	it.sub.Unsubscribe()
 10258  	return nil
 10259  }
 10260  
 10261  // StickerMarketRegister represents a Register event raised by the StickerMarket contract.
 10262  type StickerMarketRegister struct {
 10263  	PackId      *big.Int
 10264  	DataPrice   *big.Int
 10265  	Contenthash []byte
 10266  	Raw         types.Log // Blockchain specific contextual infos
 10267  }
 10268  
 10269  // FilterRegister is a free log retrieval operation binding the contract event 0x977f348a33aa09ea5592a5999ead89ce5390634d548c226c6a32c8f18b93e082.
 10270  //
 10271  // Solidity: event Register(uint256 indexed packId, uint256 dataPrice, bytes contenthash)
 10272  func (_StickerMarket *StickerMarketFilterer) FilterRegister(opts *bind.FilterOpts, packId []*big.Int) (*StickerMarketRegisterIterator, error) {
 10273  
 10274  	var packIdRule []interface{}
 10275  	for _, packIdItem := range packId {
 10276  		packIdRule = append(packIdRule, packIdItem)
 10277  	}
 10278  
 10279  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "Register", packIdRule)
 10280  	if err != nil {
 10281  		return nil, err
 10282  	}
 10283  	return &StickerMarketRegisterIterator{contract: _StickerMarket.contract, event: "Register", logs: logs, sub: sub}, nil
 10284  }
 10285  
 10286  // WatchRegister is a free log subscription operation binding the contract event 0x977f348a33aa09ea5592a5999ead89ce5390634d548c226c6a32c8f18b93e082.
 10287  //
 10288  // Solidity: event Register(uint256 indexed packId, uint256 dataPrice, bytes contenthash)
 10289  func (_StickerMarket *StickerMarketFilterer) WatchRegister(opts *bind.WatchOpts, sink chan<- *StickerMarketRegister, packId []*big.Int) (event.Subscription, error) {
 10290  
 10291  	var packIdRule []interface{}
 10292  	for _, packIdItem := range packId {
 10293  		packIdRule = append(packIdRule, packIdItem)
 10294  	}
 10295  
 10296  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "Register", packIdRule)
 10297  	if err != nil {
 10298  		return nil, err
 10299  	}
 10300  	return event.NewSubscription(func(quit <-chan struct{}) error {
 10301  		defer sub.Unsubscribe()
 10302  		for {
 10303  			select {
 10304  			case log := <-logs:
 10305  				// New log arrived, parse the event and forward to the user
 10306  				event := new(StickerMarketRegister)
 10307  				if err := _StickerMarket.contract.UnpackLog(event, "Register", log); err != nil {
 10308  					return err
 10309  				}
 10310  				event.Raw = log
 10311  
 10312  				select {
 10313  				case sink <- event:
 10314  				case err := <-sub.Err():
 10315  					return err
 10316  				case <-quit:
 10317  					return nil
 10318  				}
 10319  			case err := <-sub.Err():
 10320  				return err
 10321  			case <-quit:
 10322  				return nil
 10323  			}
 10324  		}
 10325  	}), nil
 10326  }
 10327  
 10328  // ParseRegister is a log parse operation binding the contract event 0x977f348a33aa09ea5592a5999ead89ce5390634d548c226c6a32c8f18b93e082.
 10329  //
 10330  // Solidity: event Register(uint256 indexed packId, uint256 dataPrice, bytes contenthash)
 10331  func (_StickerMarket *StickerMarketFilterer) ParseRegister(log types.Log) (*StickerMarketRegister, error) {
 10332  	event := new(StickerMarketRegister)
 10333  	if err := _StickerMarket.contract.UnpackLog(event, "Register", log); err != nil {
 10334  		return nil, err
 10335  	}
 10336  	event.Raw = log
 10337  	return event, nil
 10338  }
 10339  
 10340  // StickerMarketRegisterFeeIterator is returned from FilterRegisterFee and is used to iterate over the raw logs and unpacked data for RegisterFee events raised by the StickerMarket contract.
 10341  type StickerMarketRegisterFeeIterator struct {
 10342  	Event *StickerMarketRegisterFee // Event containing the contract specifics and raw log
 10343  
 10344  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 10345  	event    string              // Event name to use for unpacking event data
 10346  
 10347  	logs chan types.Log        // Log channel receiving the found contract events
 10348  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 10349  	done bool                  // Whether the subscription completed delivering logs
 10350  	fail error                 // Occurred error to stop iteration
 10351  }
 10352  
 10353  // Next advances the iterator to the subsequent event, returning whether there
 10354  // are any more events found. In case of a retrieval or parsing error, false is
 10355  // returned and Error() can be queried for the exact failure.
 10356  func (it *StickerMarketRegisterFeeIterator) Next() bool {
 10357  	// If the iterator failed, stop iterating
 10358  	if it.fail != nil {
 10359  		return false
 10360  	}
 10361  	// If the iterator completed, deliver directly whatever's available
 10362  	if it.done {
 10363  		select {
 10364  		case log := <-it.logs:
 10365  			it.Event = new(StickerMarketRegisterFee)
 10366  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10367  				it.fail = err
 10368  				return false
 10369  			}
 10370  			it.Event.Raw = log
 10371  			return true
 10372  
 10373  		default:
 10374  			return false
 10375  		}
 10376  	}
 10377  	// Iterator still in progress, wait for either a data or an error event
 10378  	select {
 10379  	case log := <-it.logs:
 10380  		it.Event = new(StickerMarketRegisterFee)
 10381  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10382  			it.fail = err
 10383  			return false
 10384  		}
 10385  		it.Event.Raw = log
 10386  		return true
 10387  
 10388  	case err := <-it.sub.Err():
 10389  		it.done = true
 10390  		it.fail = err
 10391  		return it.Next()
 10392  	}
 10393  }
 10394  
 10395  // Error returns any retrieval or parsing error occurred during filtering.
 10396  func (it *StickerMarketRegisterFeeIterator) Error() error {
 10397  	return it.fail
 10398  }
 10399  
 10400  // Close terminates the iteration process, releasing any pending underlying
 10401  // resources.
 10402  func (it *StickerMarketRegisterFeeIterator) Close() error {
 10403  	it.sub.Unsubscribe()
 10404  	return nil
 10405  }
 10406  
 10407  // StickerMarketRegisterFee represents a RegisterFee event raised by the StickerMarket contract.
 10408  type StickerMarketRegisterFee struct {
 10409  	Value *big.Int
 10410  	Raw   types.Log // Blockchain specific contextual infos
 10411  }
 10412  
 10413  // FilterRegisterFee is a free log retrieval operation binding the contract event 0x1d4a2348bf98e0fa847f28a7db9967b1327ac954c312b659b65a860bb6959172.
 10414  //
 10415  // Solidity: event RegisterFee(uint256 value)
 10416  func (_StickerMarket *StickerMarketFilterer) FilterRegisterFee(opts *bind.FilterOpts) (*StickerMarketRegisterFeeIterator, error) {
 10417  
 10418  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "RegisterFee")
 10419  	if err != nil {
 10420  		return nil, err
 10421  	}
 10422  	return &StickerMarketRegisterFeeIterator{contract: _StickerMarket.contract, event: "RegisterFee", logs: logs, sub: sub}, nil
 10423  }
 10424  
 10425  // WatchRegisterFee is a free log subscription operation binding the contract event 0x1d4a2348bf98e0fa847f28a7db9967b1327ac954c312b659b65a860bb6959172.
 10426  //
 10427  // Solidity: event RegisterFee(uint256 value)
 10428  func (_StickerMarket *StickerMarketFilterer) WatchRegisterFee(opts *bind.WatchOpts, sink chan<- *StickerMarketRegisterFee) (event.Subscription, error) {
 10429  
 10430  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "RegisterFee")
 10431  	if err != nil {
 10432  		return nil, err
 10433  	}
 10434  	return event.NewSubscription(func(quit <-chan struct{}) error {
 10435  		defer sub.Unsubscribe()
 10436  		for {
 10437  			select {
 10438  			case log := <-logs:
 10439  				// New log arrived, parse the event and forward to the user
 10440  				event := new(StickerMarketRegisterFee)
 10441  				if err := _StickerMarket.contract.UnpackLog(event, "RegisterFee", log); err != nil {
 10442  					return err
 10443  				}
 10444  				event.Raw = log
 10445  
 10446  				select {
 10447  				case sink <- event:
 10448  				case err := <-sub.Err():
 10449  					return err
 10450  				case <-quit:
 10451  					return nil
 10452  				}
 10453  			case err := <-sub.Err():
 10454  				return err
 10455  			case <-quit:
 10456  				return nil
 10457  			}
 10458  		}
 10459  	}), nil
 10460  }
 10461  
 10462  // ParseRegisterFee is a log parse operation binding the contract event 0x1d4a2348bf98e0fa847f28a7db9967b1327ac954c312b659b65a860bb6959172.
 10463  //
 10464  // Solidity: event RegisterFee(uint256 value)
 10465  func (_StickerMarket *StickerMarketFilterer) ParseRegisterFee(log types.Log) (*StickerMarketRegisterFee, error) {
 10466  	event := new(StickerMarketRegisterFee)
 10467  	if err := _StickerMarket.contract.UnpackLog(event, "RegisterFee", log); err != nil {
 10468  		return nil, err
 10469  	}
 10470  	event.Raw = log
 10471  	return event, nil
 10472  }
 10473  
 10474  // StickerMarketTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the StickerMarket contract.
 10475  type StickerMarketTransferIterator struct {
 10476  	Event *StickerMarketTransfer // Event containing the contract specifics and raw log
 10477  
 10478  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 10479  	event    string              // Event name to use for unpacking event data
 10480  
 10481  	logs chan types.Log        // Log channel receiving the found contract events
 10482  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 10483  	done bool                  // Whether the subscription completed delivering logs
 10484  	fail error                 // Occurred error to stop iteration
 10485  }
 10486  
 10487  // Next advances the iterator to the subsequent event, returning whether there
 10488  // are any more events found. In case of a retrieval or parsing error, false is
 10489  // returned and Error() can be queried for the exact failure.
 10490  func (it *StickerMarketTransferIterator) Next() bool {
 10491  	// If the iterator failed, stop iterating
 10492  	if it.fail != nil {
 10493  		return false
 10494  	}
 10495  	// If the iterator completed, deliver directly whatever's available
 10496  	if it.done {
 10497  		select {
 10498  		case log := <-it.logs:
 10499  			it.Event = new(StickerMarketTransfer)
 10500  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10501  				it.fail = err
 10502  				return false
 10503  			}
 10504  			it.Event.Raw = log
 10505  			return true
 10506  
 10507  		default:
 10508  			return false
 10509  		}
 10510  	}
 10511  	// Iterator still in progress, wait for either a data or an error event
 10512  	select {
 10513  	case log := <-it.logs:
 10514  		it.Event = new(StickerMarketTransfer)
 10515  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 10516  			it.fail = err
 10517  			return false
 10518  		}
 10519  		it.Event.Raw = log
 10520  		return true
 10521  
 10522  	case err := <-it.sub.Err():
 10523  		it.done = true
 10524  		it.fail = err
 10525  		return it.Next()
 10526  	}
 10527  }
 10528  
 10529  // Error returns any retrieval or parsing error occurred during filtering.
 10530  func (it *StickerMarketTransferIterator) Error() error {
 10531  	return it.fail
 10532  }
 10533  
 10534  // Close terminates the iteration process, releasing any pending underlying
 10535  // resources.
 10536  func (it *StickerMarketTransferIterator) Close() error {
 10537  	it.sub.Unsubscribe()
 10538  	return nil
 10539  }
 10540  
 10541  // StickerMarketTransfer represents a Transfer event raised by the StickerMarket contract.
 10542  type StickerMarketTransfer struct {
 10543  	From  common.Address
 10544  	To    common.Address
 10545  	Value *big.Int
 10546  	Raw   types.Log // Blockchain specific contextual infos
 10547  }
 10548  
 10549  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 10550  //
 10551  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed value)
 10552  func (_StickerMarket *StickerMarketFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, value []*big.Int) (*StickerMarketTransferIterator, error) {
 10553  
 10554  	var fromRule []interface{}
 10555  	for _, fromItem := range from {
 10556  		fromRule = append(fromRule, fromItem)
 10557  	}
 10558  	var toRule []interface{}
 10559  	for _, toItem := range to {
 10560  		toRule = append(toRule, toItem)
 10561  	}
 10562  	var valueRule []interface{}
 10563  	for _, valueItem := range value {
 10564  		valueRule = append(valueRule, valueItem)
 10565  	}
 10566  
 10567  	logs, sub, err := _StickerMarket.contract.FilterLogs(opts, "Transfer", fromRule, toRule, valueRule)
 10568  	if err != nil {
 10569  		return nil, err
 10570  	}
 10571  	return &StickerMarketTransferIterator{contract: _StickerMarket.contract, event: "Transfer", logs: logs, sub: sub}, nil
 10572  }
 10573  
 10574  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 10575  //
 10576  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed value)
 10577  func (_StickerMarket *StickerMarketFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *StickerMarketTransfer, from []common.Address, to []common.Address, value []*big.Int) (event.Subscription, error) {
 10578  
 10579  	var fromRule []interface{}
 10580  	for _, fromItem := range from {
 10581  		fromRule = append(fromRule, fromItem)
 10582  	}
 10583  	var toRule []interface{}
 10584  	for _, toItem := range to {
 10585  		toRule = append(toRule, toItem)
 10586  	}
 10587  	var valueRule []interface{}
 10588  	for _, valueItem := range value {
 10589  		valueRule = append(valueRule, valueItem)
 10590  	}
 10591  
 10592  	logs, sub, err := _StickerMarket.contract.WatchLogs(opts, "Transfer", fromRule, toRule, valueRule)
 10593  	if err != nil {
 10594  		return nil, err
 10595  	}
 10596  	return event.NewSubscription(func(quit <-chan struct{}) error {
 10597  		defer sub.Unsubscribe()
 10598  		for {
 10599  			select {
 10600  			case log := <-logs:
 10601  				// New log arrived, parse the event and forward to the user
 10602  				event := new(StickerMarketTransfer)
 10603  				if err := _StickerMarket.contract.UnpackLog(event, "Transfer", log); err != nil {
 10604  					return err
 10605  				}
 10606  				event.Raw = log
 10607  
 10608  				select {
 10609  				case sink <- event:
 10610  				case err := <-sub.Err():
 10611  					return err
 10612  				case <-quit:
 10613  					return nil
 10614  				}
 10615  			case err := <-sub.Err():
 10616  				return err
 10617  			case <-quit:
 10618  				return nil
 10619  			}
 10620  		}
 10621  	}), nil
 10622  }
 10623  
 10624  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 10625  //
 10626  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed value)
 10627  func (_StickerMarket *StickerMarketFilterer) ParseTransfer(log types.Log) (*StickerMarketTransfer, error) {
 10628  	event := new(StickerMarketTransfer)
 10629  	if err := _StickerMarket.contract.UnpackLog(event, "Transfer", log); err != nil {
 10630  		return nil, err
 10631  	}
 10632  	event.Raw = log
 10633  	return event, nil
 10634  }
 10635  
 10636  // StickerPackABI is the input ABI used to generate the binding from.
 10637  const StickerPackABI = "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_packId\",\"type\":\"uint256\"}],\"name\":\"generateToken\",\"outputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"changeController\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenPackId\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claimTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_controller\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"NewController\",\"type\":\"event\"}]"
 10638  
 10639  // StickerPackFuncSigs maps the 4-byte function signature to its string representation.
 10640  var StickerPackFuncSigs = map[string]string{
 10641  	"095ea7b3": "approve(address,uint256)",
 10642  	"70a08231": "balanceOf(address)",
 10643  	"3cebb823": "changeController(address)",
 10644  	"df8de3e7": "claimTokens(address)",
 10645  	"f77c4791": "controller()",
 10646  	"188b5372": "generateToken(address,uint256)",
 10647  	"081812fc": "getApproved(uint256)",
 10648  	"e985e9c5": "isApprovedForAll(address,address)",
 10649  	"06fdde03": "name()",
 10650  	"6352211e": "ownerOf(uint256)",
 10651  	"42842e0e": "safeTransferFrom(address,address,uint256)",
 10652  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
 10653  	"a22cb465": "setApprovalForAll(address,bool)",
 10654  	"01ffc9a7": "supportsInterface(bytes4)",
 10655  	"95d89b41": "symbol()",
 10656  	"4f6ccce7": "tokenByIndex(uint256)",
 10657  	"9f181b5e": "tokenCount()",
 10658  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
 10659  	"a546af4c": "tokenPackId(uint256)",
 10660  	"c87b56dd": "tokenURI(uint256)",
 10661  	"18160ddd": "totalSupply()",
 10662  	"23b872dd": "transferFrom(address,address,uint256)",
 10663  }
 10664  
 10665  // StickerPack is an auto generated Go binding around an Ethereum contract.
 10666  type StickerPack struct {
 10667  	StickerPackCaller     // Read-only binding to the contract
 10668  	StickerPackTransactor // Write-only binding to the contract
 10669  	StickerPackFilterer   // Log filterer for contract events
 10670  }
 10671  
 10672  // StickerPackCaller is an auto generated read-only Go binding around an Ethereum contract.
 10673  type StickerPackCaller struct {
 10674  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 10675  }
 10676  
 10677  // StickerPackTransactor is an auto generated write-only Go binding around an Ethereum contract.
 10678  type StickerPackTransactor struct {
 10679  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 10680  }
 10681  
 10682  // StickerPackFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
 10683  type StickerPackFilterer struct {
 10684  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 10685  }
 10686  
 10687  // StickerPackSession is an auto generated Go binding around an Ethereum contract,
 10688  // with pre-set call and transact options.
 10689  type StickerPackSession struct {
 10690  	Contract     *StickerPack      // Generic contract binding to set the session for
 10691  	CallOpts     bind.CallOpts     // Call options to use throughout this session
 10692  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
 10693  }
 10694  
 10695  // StickerPackCallerSession is an auto generated read-only Go binding around an Ethereum contract,
 10696  // with pre-set call options.
 10697  type StickerPackCallerSession struct {
 10698  	Contract *StickerPackCaller // Generic contract caller binding to set the session for
 10699  	CallOpts bind.CallOpts      // Call options to use throughout this session
 10700  }
 10701  
 10702  // StickerPackTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
 10703  // with pre-set transact options.
 10704  type StickerPackTransactorSession struct {
 10705  	Contract     *StickerPackTransactor // Generic contract transactor binding to set the session for
 10706  	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
 10707  }
 10708  
 10709  // StickerPackRaw is an auto generated low-level Go binding around an Ethereum contract.
 10710  type StickerPackRaw struct {
 10711  	Contract *StickerPack // Generic contract binding to access the raw methods on
 10712  }
 10713  
 10714  // StickerPackCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
 10715  type StickerPackCallerRaw struct {
 10716  	Contract *StickerPackCaller // Generic read-only contract binding to access the raw methods on
 10717  }
 10718  
 10719  // StickerPackTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
 10720  type StickerPackTransactorRaw struct {
 10721  	Contract *StickerPackTransactor // Generic write-only contract binding to access the raw methods on
 10722  }
 10723  
 10724  // NewStickerPack creates a new instance of StickerPack, bound to a specific deployed contract.
 10725  func NewStickerPack(address common.Address, backend bind.ContractBackend) (*StickerPack, error) {
 10726  	contract, err := bindStickerPack(address, backend, backend, backend)
 10727  	if err != nil {
 10728  		return nil, err
 10729  	}
 10730  	return &StickerPack{StickerPackCaller: StickerPackCaller{contract: contract}, StickerPackTransactor: StickerPackTransactor{contract: contract}, StickerPackFilterer: StickerPackFilterer{contract: contract}}, nil
 10731  }
 10732  
 10733  // NewStickerPackCaller creates a new read-only instance of StickerPack, bound to a specific deployed contract.
 10734  func NewStickerPackCaller(address common.Address, caller bind.ContractCaller) (*StickerPackCaller, error) {
 10735  	contract, err := bindStickerPack(address, caller, nil, nil)
 10736  	if err != nil {
 10737  		return nil, err
 10738  	}
 10739  	return &StickerPackCaller{contract: contract}, nil
 10740  }
 10741  
 10742  // NewStickerPackTransactor creates a new write-only instance of StickerPack, bound to a specific deployed contract.
 10743  func NewStickerPackTransactor(address common.Address, transactor bind.ContractTransactor) (*StickerPackTransactor, error) {
 10744  	contract, err := bindStickerPack(address, nil, transactor, nil)
 10745  	if err != nil {
 10746  		return nil, err
 10747  	}
 10748  	return &StickerPackTransactor{contract: contract}, nil
 10749  }
 10750  
 10751  // NewStickerPackFilterer creates a new log filterer instance of StickerPack, bound to a specific deployed contract.
 10752  func NewStickerPackFilterer(address common.Address, filterer bind.ContractFilterer) (*StickerPackFilterer, error) {
 10753  	contract, err := bindStickerPack(address, nil, nil, filterer)
 10754  	if err != nil {
 10755  		return nil, err
 10756  	}
 10757  	return &StickerPackFilterer{contract: contract}, nil
 10758  }
 10759  
 10760  // bindStickerPack binds a generic wrapper to an already deployed contract.
 10761  func bindStickerPack(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
 10762  	parsed, err := abi.JSON(strings.NewReader(StickerPackABI))
 10763  	if err != nil {
 10764  		return nil, err
 10765  	}
 10766  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
 10767  }
 10768  
 10769  // Call invokes the (constant) contract method with params as input values and
 10770  // sets the output to result. The result type might be a single field for simple
 10771  // returns, a slice of interfaces for anonymous returns and a struct for named
 10772  // returns.
 10773  func (_StickerPack *StickerPackRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
 10774  	return _StickerPack.Contract.StickerPackCaller.contract.Call(opts, result, method, params...)
 10775  }
 10776  
 10777  // Transfer initiates a plain transaction to move funds to the contract, calling
 10778  // its default method if one is available.
 10779  func (_StickerPack *StickerPackRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 10780  	return _StickerPack.Contract.StickerPackTransactor.contract.Transfer(opts)
 10781  }
 10782  
 10783  // Transact invokes the (paid) contract method with params as input values.
 10784  func (_StickerPack *StickerPackRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 10785  	return _StickerPack.Contract.StickerPackTransactor.contract.Transact(opts, method, params...)
 10786  }
 10787  
 10788  // Call invokes the (constant) contract method with params as input values and
 10789  // sets the output to result. The result type might be a single field for simple
 10790  // returns, a slice of interfaces for anonymous returns and a struct for named
 10791  // returns.
 10792  func (_StickerPack *StickerPackCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
 10793  	return _StickerPack.Contract.contract.Call(opts, result, method, params...)
 10794  }
 10795  
 10796  // Transfer initiates a plain transaction to move funds to the contract, calling
 10797  // its default method if one is available.
 10798  func (_StickerPack *StickerPackTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 10799  	return _StickerPack.Contract.contract.Transfer(opts)
 10800  }
 10801  
 10802  // Transact invokes the (paid) contract method with params as input values.
 10803  func (_StickerPack *StickerPackTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 10804  	return _StickerPack.Contract.contract.Transact(opts, method, params...)
 10805  }
 10806  
 10807  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 10808  //
 10809  // Solidity: function balanceOf(address owner) view returns(uint256)
 10810  func (_StickerPack *StickerPackCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
 10811  	var out []interface{}
 10812  	err := _StickerPack.contract.Call(opts, &out, "balanceOf", owner)
 10813  
 10814  	if err != nil {
 10815  		return *new(*big.Int), err
 10816  	}
 10817  
 10818  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 10819  
 10820  	return out0, err
 10821  
 10822  }
 10823  
 10824  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 10825  //
 10826  // Solidity: function balanceOf(address owner) view returns(uint256)
 10827  func (_StickerPack *StickerPackSession) BalanceOf(owner common.Address) (*big.Int, error) {
 10828  	return _StickerPack.Contract.BalanceOf(&_StickerPack.CallOpts, owner)
 10829  }
 10830  
 10831  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 10832  //
 10833  // Solidity: function balanceOf(address owner) view returns(uint256)
 10834  func (_StickerPack *StickerPackCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
 10835  	return _StickerPack.Contract.BalanceOf(&_StickerPack.CallOpts, owner)
 10836  }
 10837  
 10838  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
 10839  //
 10840  // Solidity: function controller() view returns(address)
 10841  func (_StickerPack *StickerPackCaller) Controller(opts *bind.CallOpts) (common.Address, error) {
 10842  	var out []interface{}
 10843  	err := _StickerPack.contract.Call(opts, &out, "controller")
 10844  
 10845  	if err != nil {
 10846  		return *new(common.Address), err
 10847  	}
 10848  
 10849  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 10850  
 10851  	return out0, err
 10852  
 10853  }
 10854  
 10855  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
 10856  //
 10857  // Solidity: function controller() view returns(address)
 10858  func (_StickerPack *StickerPackSession) Controller() (common.Address, error) {
 10859  	return _StickerPack.Contract.Controller(&_StickerPack.CallOpts)
 10860  }
 10861  
 10862  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
 10863  //
 10864  // Solidity: function controller() view returns(address)
 10865  func (_StickerPack *StickerPackCallerSession) Controller() (common.Address, error) {
 10866  	return _StickerPack.Contract.Controller(&_StickerPack.CallOpts)
 10867  }
 10868  
 10869  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
 10870  //
 10871  // Solidity: function getApproved(uint256 tokenId) view returns(address)
 10872  func (_StickerPack *StickerPackCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
 10873  	var out []interface{}
 10874  	err := _StickerPack.contract.Call(opts, &out, "getApproved", tokenId)
 10875  
 10876  	if err != nil {
 10877  		return *new(common.Address), err
 10878  	}
 10879  
 10880  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 10881  
 10882  	return out0, err
 10883  
 10884  }
 10885  
 10886  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
 10887  //
 10888  // Solidity: function getApproved(uint256 tokenId) view returns(address)
 10889  func (_StickerPack *StickerPackSession) GetApproved(tokenId *big.Int) (common.Address, error) {
 10890  	return _StickerPack.Contract.GetApproved(&_StickerPack.CallOpts, tokenId)
 10891  }
 10892  
 10893  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
 10894  //
 10895  // Solidity: function getApproved(uint256 tokenId) view returns(address)
 10896  func (_StickerPack *StickerPackCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
 10897  	return _StickerPack.Contract.GetApproved(&_StickerPack.CallOpts, tokenId)
 10898  }
 10899  
 10900  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
 10901  //
 10902  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
 10903  func (_StickerPack *StickerPackCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
 10904  	var out []interface{}
 10905  	err := _StickerPack.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
 10906  
 10907  	if err != nil {
 10908  		return *new(bool), err
 10909  	}
 10910  
 10911  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
 10912  
 10913  	return out0, err
 10914  
 10915  }
 10916  
 10917  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
 10918  //
 10919  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
 10920  func (_StickerPack *StickerPackSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
 10921  	return _StickerPack.Contract.IsApprovedForAll(&_StickerPack.CallOpts, owner, operator)
 10922  }
 10923  
 10924  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
 10925  //
 10926  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
 10927  func (_StickerPack *StickerPackCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
 10928  	return _StickerPack.Contract.IsApprovedForAll(&_StickerPack.CallOpts, owner, operator)
 10929  }
 10930  
 10931  // Name is a free data retrieval call binding the contract method 0x06fdde03.
 10932  //
 10933  // Solidity: function name() view returns(string)
 10934  func (_StickerPack *StickerPackCaller) Name(opts *bind.CallOpts) (string, error) {
 10935  	var out []interface{}
 10936  	err := _StickerPack.contract.Call(opts, &out, "name")
 10937  
 10938  	if err != nil {
 10939  		return *new(string), err
 10940  	}
 10941  
 10942  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
 10943  
 10944  	return out0, err
 10945  
 10946  }
 10947  
 10948  // Name is a free data retrieval call binding the contract method 0x06fdde03.
 10949  //
 10950  // Solidity: function name() view returns(string)
 10951  func (_StickerPack *StickerPackSession) Name() (string, error) {
 10952  	return _StickerPack.Contract.Name(&_StickerPack.CallOpts)
 10953  }
 10954  
 10955  // Name is a free data retrieval call binding the contract method 0x06fdde03.
 10956  //
 10957  // Solidity: function name() view returns(string)
 10958  func (_StickerPack *StickerPackCallerSession) Name() (string, error) {
 10959  	return _StickerPack.Contract.Name(&_StickerPack.CallOpts)
 10960  }
 10961  
 10962  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
 10963  //
 10964  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
 10965  func (_StickerPack *StickerPackCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
 10966  	var out []interface{}
 10967  	err := _StickerPack.contract.Call(opts, &out, "ownerOf", tokenId)
 10968  
 10969  	if err != nil {
 10970  		return *new(common.Address), err
 10971  	}
 10972  
 10973  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 10974  
 10975  	return out0, err
 10976  
 10977  }
 10978  
 10979  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
 10980  //
 10981  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
 10982  func (_StickerPack *StickerPackSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
 10983  	return _StickerPack.Contract.OwnerOf(&_StickerPack.CallOpts, tokenId)
 10984  }
 10985  
 10986  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
 10987  //
 10988  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
 10989  func (_StickerPack *StickerPackCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
 10990  	return _StickerPack.Contract.OwnerOf(&_StickerPack.CallOpts, tokenId)
 10991  }
 10992  
 10993  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
 10994  //
 10995  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
 10996  func (_StickerPack *StickerPackCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
 10997  	var out []interface{}
 10998  	err := _StickerPack.contract.Call(opts, &out, "supportsInterface", interfaceId)
 10999  
 11000  	if err != nil {
 11001  		return *new(bool), err
 11002  	}
 11003  
 11004  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
 11005  
 11006  	return out0, err
 11007  
 11008  }
 11009  
 11010  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
 11011  //
 11012  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
 11013  func (_StickerPack *StickerPackSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
 11014  	return _StickerPack.Contract.SupportsInterface(&_StickerPack.CallOpts, interfaceId)
 11015  }
 11016  
 11017  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
 11018  //
 11019  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
 11020  func (_StickerPack *StickerPackCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
 11021  	return _StickerPack.Contract.SupportsInterface(&_StickerPack.CallOpts, interfaceId)
 11022  }
 11023  
 11024  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 11025  //
 11026  // Solidity: function symbol() view returns(string)
 11027  func (_StickerPack *StickerPackCaller) Symbol(opts *bind.CallOpts) (string, error) {
 11028  	var out []interface{}
 11029  	err := _StickerPack.contract.Call(opts, &out, "symbol")
 11030  
 11031  	if err != nil {
 11032  		return *new(string), err
 11033  	}
 11034  
 11035  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
 11036  
 11037  	return out0, err
 11038  
 11039  }
 11040  
 11041  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 11042  //
 11043  // Solidity: function symbol() view returns(string)
 11044  func (_StickerPack *StickerPackSession) Symbol() (string, error) {
 11045  	return _StickerPack.Contract.Symbol(&_StickerPack.CallOpts)
 11046  }
 11047  
 11048  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 11049  //
 11050  // Solidity: function symbol() view returns(string)
 11051  func (_StickerPack *StickerPackCallerSession) Symbol() (string, error) {
 11052  	return _StickerPack.Contract.Symbol(&_StickerPack.CallOpts)
 11053  }
 11054  
 11055  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
 11056  //
 11057  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
 11058  func (_StickerPack *StickerPackCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
 11059  	var out []interface{}
 11060  	err := _StickerPack.contract.Call(opts, &out, "tokenByIndex", index)
 11061  
 11062  	if err != nil {
 11063  		return *new(*big.Int), err
 11064  	}
 11065  
 11066  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 11067  
 11068  	return out0, err
 11069  
 11070  }
 11071  
 11072  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
 11073  //
 11074  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
 11075  func (_StickerPack *StickerPackSession) TokenByIndex(index *big.Int) (*big.Int, error) {
 11076  	return _StickerPack.Contract.TokenByIndex(&_StickerPack.CallOpts, index)
 11077  }
 11078  
 11079  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
 11080  //
 11081  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
 11082  func (_StickerPack *StickerPackCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
 11083  	return _StickerPack.Contract.TokenByIndex(&_StickerPack.CallOpts, index)
 11084  }
 11085  
 11086  // TokenCount is a free data retrieval call binding the contract method 0x9f181b5e.
 11087  //
 11088  // Solidity: function tokenCount() view returns(uint256)
 11089  func (_StickerPack *StickerPackCaller) TokenCount(opts *bind.CallOpts) (*big.Int, error) {
 11090  	var out []interface{}
 11091  	err := _StickerPack.contract.Call(opts, &out, "tokenCount")
 11092  
 11093  	if err != nil {
 11094  		return *new(*big.Int), err
 11095  	}
 11096  
 11097  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 11098  
 11099  	return out0, err
 11100  
 11101  }
 11102  
 11103  // TokenCount is a free data retrieval call binding the contract method 0x9f181b5e.
 11104  //
 11105  // Solidity: function tokenCount() view returns(uint256)
 11106  func (_StickerPack *StickerPackSession) TokenCount() (*big.Int, error) {
 11107  	return _StickerPack.Contract.TokenCount(&_StickerPack.CallOpts)
 11108  }
 11109  
 11110  // TokenCount is a free data retrieval call binding the contract method 0x9f181b5e.
 11111  //
 11112  // Solidity: function tokenCount() view returns(uint256)
 11113  func (_StickerPack *StickerPackCallerSession) TokenCount() (*big.Int, error) {
 11114  	return _StickerPack.Contract.TokenCount(&_StickerPack.CallOpts)
 11115  }
 11116  
 11117  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
 11118  //
 11119  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
 11120  func (_StickerPack *StickerPackCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
 11121  	var out []interface{}
 11122  	err := _StickerPack.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
 11123  
 11124  	if err != nil {
 11125  		return *new(*big.Int), err
 11126  	}
 11127  
 11128  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 11129  
 11130  	return out0, err
 11131  
 11132  }
 11133  
 11134  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
 11135  //
 11136  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
 11137  func (_StickerPack *StickerPackSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
 11138  	return _StickerPack.Contract.TokenOfOwnerByIndex(&_StickerPack.CallOpts, owner, index)
 11139  }
 11140  
 11141  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
 11142  //
 11143  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
 11144  func (_StickerPack *StickerPackCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
 11145  	return _StickerPack.Contract.TokenOfOwnerByIndex(&_StickerPack.CallOpts, owner, index)
 11146  }
 11147  
 11148  // TokenPackId is a free data retrieval call binding the contract method 0xa546af4c.
 11149  //
 11150  // Solidity: function tokenPackId(uint256 ) view returns(uint256)
 11151  func (_StickerPack *StickerPackCaller) TokenPackId(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
 11152  	var out []interface{}
 11153  	err := _StickerPack.contract.Call(opts, &out, "tokenPackId", arg0)
 11154  
 11155  	if err != nil {
 11156  		return *new(*big.Int), err
 11157  	}
 11158  
 11159  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 11160  
 11161  	return out0, err
 11162  
 11163  }
 11164  
 11165  // TokenPackId is a free data retrieval call binding the contract method 0xa546af4c.
 11166  //
 11167  // Solidity: function tokenPackId(uint256 ) view returns(uint256)
 11168  func (_StickerPack *StickerPackSession) TokenPackId(arg0 *big.Int) (*big.Int, error) {
 11169  	return _StickerPack.Contract.TokenPackId(&_StickerPack.CallOpts, arg0)
 11170  }
 11171  
 11172  // TokenPackId is a free data retrieval call binding the contract method 0xa546af4c.
 11173  //
 11174  // Solidity: function tokenPackId(uint256 ) view returns(uint256)
 11175  func (_StickerPack *StickerPackCallerSession) TokenPackId(arg0 *big.Int) (*big.Int, error) {
 11176  	return _StickerPack.Contract.TokenPackId(&_StickerPack.CallOpts, arg0)
 11177  }
 11178  
 11179  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
 11180  //
 11181  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
 11182  func (_StickerPack *StickerPackCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
 11183  	var out []interface{}
 11184  	err := _StickerPack.contract.Call(opts, &out, "tokenURI", tokenId)
 11185  
 11186  	if err != nil {
 11187  		return *new(string), err
 11188  	}
 11189  
 11190  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
 11191  
 11192  	return out0, err
 11193  
 11194  }
 11195  
 11196  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
 11197  //
 11198  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
 11199  func (_StickerPack *StickerPackSession) TokenURI(tokenId *big.Int) (string, error) {
 11200  	return _StickerPack.Contract.TokenURI(&_StickerPack.CallOpts, tokenId)
 11201  }
 11202  
 11203  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
 11204  //
 11205  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
 11206  func (_StickerPack *StickerPackCallerSession) TokenURI(tokenId *big.Int) (string, error) {
 11207  	return _StickerPack.Contract.TokenURI(&_StickerPack.CallOpts, tokenId)
 11208  }
 11209  
 11210  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 11211  //
 11212  // Solidity: function totalSupply() view returns(uint256)
 11213  func (_StickerPack *StickerPackCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
 11214  	var out []interface{}
 11215  	err := _StickerPack.contract.Call(opts, &out, "totalSupply")
 11216  
 11217  	if err != nil {
 11218  		return *new(*big.Int), err
 11219  	}
 11220  
 11221  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 11222  
 11223  	return out0, err
 11224  
 11225  }
 11226  
 11227  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 11228  //
 11229  // Solidity: function totalSupply() view returns(uint256)
 11230  func (_StickerPack *StickerPackSession) TotalSupply() (*big.Int, error) {
 11231  	return _StickerPack.Contract.TotalSupply(&_StickerPack.CallOpts)
 11232  }
 11233  
 11234  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 11235  //
 11236  // Solidity: function totalSupply() view returns(uint256)
 11237  func (_StickerPack *StickerPackCallerSession) TotalSupply() (*big.Int, error) {
 11238  	return _StickerPack.Contract.TotalSupply(&_StickerPack.CallOpts)
 11239  }
 11240  
 11241  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 11242  //
 11243  // Solidity: function approve(address to, uint256 tokenId) returns()
 11244  func (_StickerPack *StickerPackTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11245  	return _StickerPack.contract.Transact(opts, "approve", to, tokenId)
 11246  }
 11247  
 11248  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 11249  //
 11250  // Solidity: function approve(address to, uint256 tokenId) returns()
 11251  func (_StickerPack *StickerPackSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11252  	return _StickerPack.Contract.Approve(&_StickerPack.TransactOpts, to, tokenId)
 11253  }
 11254  
 11255  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 11256  //
 11257  // Solidity: function approve(address to, uint256 tokenId) returns()
 11258  func (_StickerPack *StickerPackTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11259  	return _StickerPack.Contract.Approve(&_StickerPack.TransactOpts, to, tokenId)
 11260  }
 11261  
 11262  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
 11263  //
 11264  // Solidity: function changeController(address _newController) returns()
 11265  func (_StickerPack *StickerPackTransactor) ChangeController(opts *bind.TransactOpts, _newController common.Address) (*types.Transaction, error) {
 11266  	return _StickerPack.contract.Transact(opts, "changeController", _newController)
 11267  }
 11268  
 11269  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
 11270  //
 11271  // Solidity: function changeController(address _newController) returns()
 11272  func (_StickerPack *StickerPackSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
 11273  	return _StickerPack.Contract.ChangeController(&_StickerPack.TransactOpts, _newController)
 11274  }
 11275  
 11276  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
 11277  //
 11278  // Solidity: function changeController(address _newController) returns()
 11279  func (_StickerPack *StickerPackTransactorSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
 11280  	return _StickerPack.Contract.ChangeController(&_StickerPack.TransactOpts, _newController)
 11281  }
 11282  
 11283  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 11284  //
 11285  // Solidity: function claimTokens(address _token) returns()
 11286  func (_StickerPack *StickerPackTransactor) ClaimTokens(opts *bind.TransactOpts, _token common.Address) (*types.Transaction, error) {
 11287  	return _StickerPack.contract.Transact(opts, "claimTokens", _token)
 11288  }
 11289  
 11290  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 11291  //
 11292  // Solidity: function claimTokens(address _token) returns()
 11293  func (_StickerPack *StickerPackSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
 11294  	return _StickerPack.Contract.ClaimTokens(&_StickerPack.TransactOpts, _token)
 11295  }
 11296  
 11297  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 11298  //
 11299  // Solidity: function claimTokens(address _token) returns()
 11300  func (_StickerPack *StickerPackTransactorSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
 11301  	return _StickerPack.Contract.ClaimTokens(&_StickerPack.TransactOpts, _token)
 11302  }
 11303  
 11304  // GenerateToken is a paid mutator transaction binding the contract method 0x188b5372.
 11305  //
 11306  // Solidity: function generateToken(address _owner, uint256 _packId) returns(uint256 tokenId)
 11307  func (_StickerPack *StickerPackTransactor) GenerateToken(opts *bind.TransactOpts, _owner common.Address, _packId *big.Int) (*types.Transaction, error) {
 11308  	return _StickerPack.contract.Transact(opts, "generateToken", _owner, _packId)
 11309  }
 11310  
 11311  // GenerateToken is a paid mutator transaction binding the contract method 0x188b5372.
 11312  //
 11313  // Solidity: function generateToken(address _owner, uint256 _packId) returns(uint256 tokenId)
 11314  func (_StickerPack *StickerPackSession) GenerateToken(_owner common.Address, _packId *big.Int) (*types.Transaction, error) {
 11315  	return _StickerPack.Contract.GenerateToken(&_StickerPack.TransactOpts, _owner, _packId)
 11316  }
 11317  
 11318  // GenerateToken is a paid mutator transaction binding the contract method 0x188b5372.
 11319  //
 11320  // Solidity: function generateToken(address _owner, uint256 _packId) returns(uint256 tokenId)
 11321  func (_StickerPack *StickerPackTransactorSession) GenerateToken(_owner common.Address, _packId *big.Int) (*types.Transaction, error) {
 11322  	return _StickerPack.Contract.GenerateToken(&_StickerPack.TransactOpts, _owner, _packId)
 11323  }
 11324  
 11325  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
 11326  //
 11327  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
 11328  func (_StickerPack *StickerPackTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11329  	return _StickerPack.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
 11330  }
 11331  
 11332  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
 11333  //
 11334  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
 11335  func (_StickerPack *StickerPackSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11336  	return _StickerPack.Contract.SafeTransferFrom(&_StickerPack.TransactOpts, from, to, tokenId)
 11337  }
 11338  
 11339  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
 11340  //
 11341  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
 11342  func (_StickerPack *StickerPackTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11343  	return _StickerPack.Contract.SafeTransferFrom(&_StickerPack.TransactOpts, from, to, tokenId)
 11344  }
 11345  
 11346  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
 11347  //
 11348  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
 11349  func (_StickerPack *StickerPackTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
 11350  	return _StickerPack.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
 11351  }
 11352  
 11353  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
 11354  //
 11355  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
 11356  func (_StickerPack *StickerPackSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
 11357  	return _StickerPack.Contract.SafeTransferFrom0(&_StickerPack.TransactOpts, from, to, tokenId, _data)
 11358  }
 11359  
 11360  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
 11361  //
 11362  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
 11363  func (_StickerPack *StickerPackTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
 11364  	return _StickerPack.Contract.SafeTransferFrom0(&_StickerPack.TransactOpts, from, to, tokenId, _data)
 11365  }
 11366  
 11367  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
 11368  //
 11369  // Solidity: function setApprovalForAll(address to, bool approved) returns()
 11370  func (_StickerPack *StickerPackTransactor) SetApprovalForAll(opts *bind.TransactOpts, to common.Address, approved bool) (*types.Transaction, error) {
 11371  	return _StickerPack.contract.Transact(opts, "setApprovalForAll", to, approved)
 11372  }
 11373  
 11374  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
 11375  //
 11376  // Solidity: function setApprovalForAll(address to, bool approved) returns()
 11377  func (_StickerPack *StickerPackSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
 11378  	return _StickerPack.Contract.SetApprovalForAll(&_StickerPack.TransactOpts, to, approved)
 11379  }
 11380  
 11381  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
 11382  //
 11383  // Solidity: function setApprovalForAll(address to, bool approved) returns()
 11384  func (_StickerPack *StickerPackTransactorSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
 11385  	return _StickerPack.Contract.SetApprovalForAll(&_StickerPack.TransactOpts, to, approved)
 11386  }
 11387  
 11388  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 11389  //
 11390  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
 11391  func (_StickerPack *StickerPackTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11392  	return _StickerPack.contract.Transact(opts, "transferFrom", from, to, tokenId)
 11393  }
 11394  
 11395  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 11396  //
 11397  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
 11398  func (_StickerPack *StickerPackSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11399  	return _StickerPack.Contract.TransferFrom(&_StickerPack.TransactOpts, from, to, tokenId)
 11400  }
 11401  
 11402  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 11403  //
 11404  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
 11405  func (_StickerPack *StickerPackTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 11406  	return _StickerPack.Contract.TransferFrom(&_StickerPack.TransactOpts, from, to, tokenId)
 11407  }
 11408  
 11409  // StickerPackApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the StickerPack contract.
 11410  type StickerPackApprovalIterator struct {
 11411  	Event *StickerPackApproval // Event containing the contract specifics and raw log
 11412  
 11413  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 11414  	event    string              // Event name to use for unpacking event data
 11415  
 11416  	logs chan types.Log        // Log channel receiving the found contract events
 11417  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 11418  	done bool                  // Whether the subscription completed delivering logs
 11419  	fail error                 // Occurred error to stop iteration
 11420  }
 11421  
 11422  // Next advances the iterator to the subsequent event, returning whether there
 11423  // are any more events found. In case of a retrieval or parsing error, false is
 11424  // returned and Error() can be queried for the exact failure.
 11425  func (it *StickerPackApprovalIterator) Next() bool {
 11426  	// If the iterator failed, stop iterating
 11427  	if it.fail != nil {
 11428  		return false
 11429  	}
 11430  	// If the iterator completed, deliver directly whatever's available
 11431  	if it.done {
 11432  		select {
 11433  		case log := <-it.logs:
 11434  			it.Event = new(StickerPackApproval)
 11435  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11436  				it.fail = err
 11437  				return false
 11438  			}
 11439  			it.Event.Raw = log
 11440  			return true
 11441  
 11442  		default:
 11443  			return false
 11444  		}
 11445  	}
 11446  	// Iterator still in progress, wait for either a data or an error event
 11447  	select {
 11448  	case log := <-it.logs:
 11449  		it.Event = new(StickerPackApproval)
 11450  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11451  			it.fail = err
 11452  			return false
 11453  		}
 11454  		it.Event.Raw = log
 11455  		return true
 11456  
 11457  	case err := <-it.sub.Err():
 11458  		it.done = true
 11459  		it.fail = err
 11460  		return it.Next()
 11461  	}
 11462  }
 11463  
 11464  // Error returns any retrieval or parsing error occurred during filtering.
 11465  func (it *StickerPackApprovalIterator) Error() error {
 11466  	return it.fail
 11467  }
 11468  
 11469  // Close terminates the iteration process, releasing any pending underlying
 11470  // resources.
 11471  func (it *StickerPackApprovalIterator) Close() error {
 11472  	it.sub.Unsubscribe()
 11473  	return nil
 11474  }
 11475  
 11476  // StickerPackApproval represents a Approval event raised by the StickerPack contract.
 11477  type StickerPackApproval struct {
 11478  	Owner    common.Address
 11479  	Approved common.Address
 11480  	TokenId  *big.Int
 11481  	Raw      types.Log // Blockchain specific contextual infos
 11482  }
 11483  
 11484  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 11485  //
 11486  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
 11487  func (_StickerPack *StickerPackFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*StickerPackApprovalIterator, error) {
 11488  
 11489  	var ownerRule []interface{}
 11490  	for _, ownerItem := range owner {
 11491  		ownerRule = append(ownerRule, ownerItem)
 11492  	}
 11493  	var approvedRule []interface{}
 11494  	for _, approvedItem := range approved {
 11495  		approvedRule = append(approvedRule, approvedItem)
 11496  	}
 11497  	var tokenIdRule []interface{}
 11498  	for _, tokenIdItem := range tokenId {
 11499  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 11500  	}
 11501  
 11502  	logs, sub, err := _StickerPack.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
 11503  	if err != nil {
 11504  		return nil, err
 11505  	}
 11506  	return &StickerPackApprovalIterator{contract: _StickerPack.contract, event: "Approval", logs: logs, sub: sub}, nil
 11507  }
 11508  
 11509  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 11510  //
 11511  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
 11512  func (_StickerPack *StickerPackFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *StickerPackApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
 11513  
 11514  	var ownerRule []interface{}
 11515  	for _, ownerItem := range owner {
 11516  		ownerRule = append(ownerRule, ownerItem)
 11517  	}
 11518  	var approvedRule []interface{}
 11519  	for _, approvedItem := range approved {
 11520  		approvedRule = append(approvedRule, approvedItem)
 11521  	}
 11522  	var tokenIdRule []interface{}
 11523  	for _, tokenIdItem := range tokenId {
 11524  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 11525  	}
 11526  
 11527  	logs, sub, err := _StickerPack.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
 11528  	if err != nil {
 11529  		return nil, err
 11530  	}
 11531  	return event.NewSubscription(func(quit <-chan struct{}) error {
 11532  		defer sub.Unsubscribe()
 11533  		for {
 11534  			select {
 11535  			case log := <-logs:
 11536  				// New log arrived, parse the event and forward to the user
 11537  				event := new(StickerPackApproval)
 11538  				if err := _StickerPack.contract.UnpackLog(event, "Approval", log); err != nil {
 11539  					return err
 11540  				}
 11541  				event.Raw = log
 11542  
 11543  				select {
 11544  				case sink <- event:
 11545  				case err := <-sub.Err():
 11546  					return err
 11547  				case <-quit:
 11548  					return nil
 11549  				}
 11550  			case err := <-sub.Err():
 11551  				return err
 11552  			case <-quit:
 11553  				return nil
 11554  			}
 11555  		}
 11556  	}), nil
 11557  }
 11558  
 11559  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 11560  //
 11561  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
 11562  func (_StickerPack *StickerPackFilterer) ParseApproval(log types.Log) (*StickerPackApproval, error) {
 11563  	event := new(StickerPackApproval)
 11564  	if err := _StickerPack.contract.UnpackLog(event, "Approval", log); err != nil {
 11565  		return nil, err
 11566  	}
 11567  	event.Raw = log
 11568  	return event, nil
 11569  }
 11570  
 11571  // StickerPackApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the StickerPack contract.
 11572  type StickerPackApprovalForAllIterator struct {
 11573  	Event *StickerPackApprovalForAll // Event containing the contract specifics and raw log
 11574  
 11575  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 11576  	event    string              // Event name to use for unpacking event data
 11577  
 11578  	logs chan types.Log        // Log channel receiving the found contract events
 11579  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 11580  	done bool                  // Whether the subscription completed delivering logs
 11581  	fail error                 // Occurred error to stop iteration
 11582  }
 11583  
 11584  // Next advances the iterator to the subsequent event, returning whether there
 11585  // are any more events found. In case of a retrieval or parsing error, false is
 11586  // returned and Error() can be queried for the exact failure.
 11587  func (it *StickerPackApprovalForAllIterator) Next() bool {
 11588  	// If the iterator failed, stop iterating
 11589  	if it.fail != nil {
 11590  		return false
 11591  	}
 11592  	// If the iterator completed, deliver directly whatever's available
 11593  	if it.done {
 11594  		select {
 11595  		case log := <-it.logs:
 11596  			it.Event = new(StickerPackApprovalForAll)
 11597  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11598  				it.fail = err
 11599  				return false
 11600  			}
 11601  			it.Event.Raw = log
 11602  			return true
 11603  
 11604  		default:
 11605  			return false
 11606  		}
 11607  	}
 11608  	// Iterator still in progress, wait for either a data or an error event
 11609  	select {
 11610  	case log := <-it.logs:
 11611  		it.Event = new(StickerPackApprovalForAll)
 11612  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11613  			it.fail = err
 11614  			return false
 11615  		}
 11616  		it.Event.Raw = log
 11617  		return true
 11618  
 11619  	case err := <-it.sub.Err():
 11620  		it.done = true
 11621  		it.fail = err
 11622  		return it.Next()
 11623  	}
 11624  }
 11625  
 11626  // Error returns any retrieval or parsing error occurred during filtering.
 11627  func (it *StickerPackApprovalForAllIterator) Error() error {
 11628  	return it.fail
 11629  }
 11630  
 11631  // Close terminates the iteration process, releasing any pending underlying
 11632  // resources.
 11633  func (it *StickerPackApprovalForAllIterator) Close() error {
 11634  	it.sub.Unsubscribe()
 11635  	return nil
 11636  }
 11637  
 11638  // StickerPackApprovalForAll represents a ApprovalForAll event raised by the StickerPack contract.
 11639  type StickerPackApprovalForAll struct {
 11640  	Owner    common.Address
 11641  	Operator common.Address
 11642  	Approved bool
 11643  	Raw      types.Log // Blockchain specific contextual infos
 11644  }
 11645  
 11646  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
 11647  //
 11648  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
 11649  func (_StickerPack *StickerPackFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*StickerPackApprovalForAllIterator, error) {
 11650  
 11651  	var ownerRule []interface{}
 11652  	for _, ownerItem := range owner {
 11653  		ownerRule = append(ownerRule, ownerItem)
 11654  	}
 11655  	var operatorRule []interface{}
 11656  	for _, operatorItem := range operator {
 11657  		operatorRule = append(operatorRule, operatorItem)
 11658  	}
 11659  
 11660  	logs, sub, err := _StickerPack.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
 11661  	if err != nil {
 11662  		return nil, err
 11663  	}
 11664  	return &StickerPackApprovalForAllIterator{contract: _StickerPack.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
 11665  }
 11666  
 11667  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
 11668  //
 11669  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
 11670  func (_StickerPack *StickerPackFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *StickerPackApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
 11671  
 11672  	var ownerRule []interface{}
 11673  	for _, ownerItem := range owner {
 11674  		ownerRule = append(ownerRule, ownerItem)
 11675  	}
 11676  	var operatorRule []interface{}
 11677  	for _, operatorItem := range operator {
 11678  		operatorRule = append(operatorRule, operatorItem)
 11679  	}
 11680  
 11681  	logs, sub, err := _StickerPack.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
 11682  	if err != nil {
 11683  		return nil, err
 11684  	}
 11685  	return event.NewSubscription(func(quit <-chan struct{}) error {
 11686  		defer sub.Unsubscribe()
 11687  		for {
 11688  			select {
 11689  			case log := <-logs:
 11690  				// New log arrived, parse the event and forward to the user
 11691  				event := new(StickerPackApprovalForAll)
 11692  				if err := _StickerPack.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
 11693  					return err
 11694  				}
 11695  				event.Raw = log
 11696  
 11697  				select {
 11698  				case sink <- event:
 11699  				case err := <-sub.Err():
 11700  					return err
 11701  				case <-quit:
 11702  					return nil
 11703  				}
 11704  			case err := <-sub.Err():
 11705  				return err
 11706  			case <-quit:
 11707  				return nil
 11708  			}
 11709  		}
 11710  	}), nil
 11711  }
 11712  
 11713  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
 11714  //
 11715  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
 11716  func (_StickerPack *StickerPackFilterer) ParseApprovalForAll(log types.Log) (*StickerPackApprovalForAll, error) {
 11717  	event := new(StickerPackApprovalForAll)
 11718  	if err := _StickerPack.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
 11719  		return nil, err
 11720  	}
 11721  	event.Raw = log
 11722  	return event, nil
 11723  }
 11724  
 11725  // StickerPackClaimedTokensIterator is returned from FilterClaimedTokens and is used to iterate over the raw logs and unpacked data for ClaimedTokens events raised by the StickerPack contract.
 11726  type StickerPackClaimedTokensIterator struct {
 11727  	Event *StickerPackClaimedTokens // Event containing the contract specifics and raw log
 11728  
 11729  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 11730  	event    string              // Event name to use for unpacking event data
 11731  
 11732  	logs chan types.Log        // Log channel receiving the found contract events
 11733  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 11734  	done bool                  // Whether the subscription completed delivering logs
 11735  	fail error                 // Occurred error to stop iteration
 11736  }
 11737  
 11738  // Next advances the iterator to the subsequent event, returning whether there
 11739  // are any more events found. In case of a retrieval or parsing error, false is
 11740  // returned and Error() can be queried for the exact failure.
 11741  func (it *StickerPackClaimedTokensIterator) Next() bool {
 11742  	// If the iterator failed, stop iterating
 11743  	if it.fail != nil {
 11744  		return false
 11745  	}
 11746  	// If the iterator completed, deliver directly whatever's available
 11747  	if it.done {
 11748  		select {
 11749  		case log := <-it.logs:
 11750  			it.Event = new(StickerPackClaimedTokens)
 11751  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11752  				it.fail = err
 11753  				return false
 11754  			}
 11755  			it.Event.Raw = log
 11756  			return true
 11757  
 11758  		default:
 11759  			return false
 11760  		}
 11761  	}
 11762  	// Iterator still in progress, wait for either a data or an error event
 11763  	select {
 11764  	case log := <-it.logs:
 11765  		it.Event = new(StickerPackClaimedTokens)
 11766  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11767  			it.fail = err
 11768  			return false
 11769  		}
 11770  		it.Event.Raw = log
 11771  		return true
 11772  
 11773  	case err := <-it.sub.Err():
 11774  		it.done = true
 11775  		it.fail = err
 11776  		return it.Next()
 11777  	}
 11778  }
 11779  
 11780  // Error returns any retrieval or parsing error occurred during filtering.
 11781  func (it *StickerPackClaimedTokensIterator) Error() error {
 11782  	return it.fail
 11783  }
 11784  
 11785  // Close terminates the iteration process, releasing any pending underlying
 11786  // resources.
 11787  func (it *StickerPackClaimedTokensIterator) Close() error {
 11788  	it.sub.Unsubscribe()
 11789  	return nil
 11790  }
 11791  
 11792  // StickerPackClaimedTokens represents a ClaimedTokens event raised by the StickerPack contract.
 11793  type StickerPackClaimedTokens struct {
 11794  	Token      common.Address
 11795  	Controller common.Address
 11796  	Amount     *big.Int
 11797  	Raw        types.Log // Blockchain specific contextual infos
 11798  }
 11799  
 11800  // FilterClaimedTokens is a free log retrieval operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 11801  //
 11802  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 11803  func (_StickerPack *StickerPackFilterer) FilterClaimedTokens(opts *bind.FilterOpts, _token []common.Address, _controller []common.Address) (*StickerPackClaimedTokensIterator, error) {
 11804  
 11805  	var _tokenRule []interface{}
 11806  	for _, _tokenItem := range _token {
 11807  		_tokenRule = append(_tokenRule, _tokenItem)
 11808  	}
 11809  	var _controllerRule []interface{}
 11810  	for _, _controllerItem := range _controller {
 11811  		_controllerRule = append(_controllerRule, _controllerItem)
 11812  	}
 11813  
 11814  	logs, sub, err := _StickerPack.contract.FilterLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
 11815  	if err != nil {
 11816  		return nil, err
 11817  	}
 11818  	return &StickerPackClaimedTokensIterator{contract: _StickerPack.contract, event: "ClaimedTokens", logs: logs, sub: sub}, nil
 11819  }
 11820  
 11821  // WatchClaimedTokens is a free log subscription operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 11822  //
 11823  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 11824  func (_StickerPack *StickerPackFilterer) WatchClaimedTokens(opts *bind.WatchOpts, sink chan<- *StickerPackClaimedTokens, _token []common.Address, _controller []common.Address) (event.Subscription, error) {
 11825  
 11826  	var _tokenRule []interface{}
 11827  	for _, _tokenItem := range _token {
 11828  		_tokenRule = append(_tokenRule, _tokenItem)
 11829  	}
 11830  	var _controllerRule []interface{}
 11831  	for _, _controllerItem := range _controller {
 11832  		_controllerRule = append(_controllerRule, _controllerItem)
 11833  	}
 11834  
 11835  	logs, sub, err := _StickerPack.contract.WatchLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
 11836  	if err != nil {
 11837  		return nil, err
 11838  	}
 11839  	return event.NewSubscription(func(quit <-chan struct{}) error {
 11840  		defer sub.Unsubscribe()
 11841  		for {
 11842  			select {
 11843  			case log := <-logs:
 11844  				// New log arrived, parse the event and forward to the user
 11845  				event := new(StickerPackClaimedTokens)
 11846  				if err := _StickerPack.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
 11847  					return err
 11848  				}
 11849  				event.Raw = log
 11850  
 11851  				select {
 11852  				case sink <- event:
 11853  				case err := <-sub.Err():
 11854  					return err
 11855  				case <-quit:
 11856  					return nil
 11857  				}
 11858  			case err := <-sub.Err():
 11859  				return err
 11860  			case <-quit:
 11861  				return nil
 11862  			}
 11863  		}
 11864  	}), nil
 11865  }
 11866  
 11867  // ParseClaimedTokens is a log parse operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 11868  //
 11869  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 11870  func (_StickerPack *StickerPackFilterer) ParseClaimedTokens(log types.Log) (*StickerPackClaimedTokens, error) {
 11871  	event := new(StickerPackClaimedTokens)
 11872  	if err := _StickerPack.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
 11873  		return nil, err
 11874  	}
 11875  	event.Raw = log
 11876  	return event, nil
 11877  }
 11878  
 11879  // StickerPackNewControllerIterator is returned from FilterNewController and is used to iterate over the raw logs and unpacked data for NewController events raised by the StickerPack contract.
 11880  type StickerPackNewControllerIterator struct {
 11881  	Event *StickerPackNewController // Event containing the contract specifics and raw log
 11882  
 11883  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 11884  	event    string              // Event name to use for unpacking event data
 11885  
 11886  	logs chan types.Log        // Log channel receiving the found contract events
 11887  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 11888  	done bool                  // Whether the subscription completed delivering logs
 11889  	fail error                 // Occurred error to stop iteration
 11890  }
 11891  
 11892  // Next advances the iterator to the subsequent event, returning whether there
 11893  // are any more events found. In case of a retrieval or parsing error, false is
 11894  // returned and Error() can be queried for the exact failure.
 11895  func (it *StickerPackNewControllerIterator) Next() bool {
 11896  	// If the iterator failed, stop iterating
 11897  	if it.fail != nil {
 11898  		return false
 11899  	}
 11900  	// If the iterator completed, deliver directly whatever's available
 11901  	if it.done {
 11902  		select {
 11903  		case log := <-it.logs:
 11904  			it.Event = new(StickerPackNewController)
 11905  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11906  				it.fail = err
 11907  				return false
 11908  			}
 11909  			it.Event.Raw = log
 11910  			return true
 11911  
 11912  		default:
 11913  			return false
 11914  		}
 11915  	}
 11916  	// Iterator still in progress, wait for either a data or an error event
 11917  	select {
 11918  	case log := <-it.logs:
 11919  		it.Event = new(StickerPackNewController)
 11920  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 11921  			it.fail = err
 11922  			return false
 11923  		}
 11924  		it.Event.Raw = log
 11925  		return true
 11926  
 11927  	case err := <-it.sub.Err():
 11928  		it.done = true
 11929  		it.fail = err
 11930  		return it.Next()
 11931  	}
 11932  }
 11933  
 11934  // Error returns any retrieval or parsing error occurred during filtering.
 11935  func (it *StickerPackNewControllerIterator) Error() error {
 11936  	return it.fail
 11937  }
 11938  
 11939  // Close terminates the iteration process, releasing any pending underlying
 11940  // resources.
 11941  func (it *StickerPackNewControllerIterator) Close() error {
 11942  	it.sub.Unsubscribe()
 11943  	return nil
 11944  }
 11945  
 11946  // StickerPackNewController represents a NewController event raised by the StickerPack contract.
 11947  type StickerPackNewController struct {
 11948  	Controller common.Address
 11949  	Raw        types.Log // Blockchain specific contextual infos
 11950  }
 11951  
 11952  // FilterNewController is a free log retrieval operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 11953  //
 11954  // Solidity: event NewController(address controller)
 11955  func (_StickerPack *StickerPackFilterer) FilterNewController(opts *bind.FilterOpts) (*StickerPackNewControllerIterator, error) {
 11956  
 11957  	logs, sub, err := _StickerPack.contract.FilterLogs(opts, "NewController")
 11958  	if err != nil {
 11959  		return nil, err
 11960  	}
 11961  	return &StickerPackNewControllerIterator{contract: _StickerPack.contract, event: "NewController", logs: logs, sub: sub}, nil
 11962  }
 11963  
 11964  // WatchNewController is a free log subscription operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 11965  //
 11966  // Solidity: event NewController(address controller)
 11967  func (_StickerPack *StickerPackFilterer) WatchNewController(opts *bind.WatchOpts, sink chan<- *StickerPackNewController) (event.Subscription, error) {
 11968  
 11969  	logs, sub, err := _StickerPack.contract.WatchLogs(opts, "NewController")
 11970  	if err != nil {
 11971  		return nil, err
 11972  	}
 11973  	return event.NewSubscription(func(quit <-chan struct{}) error {
 11974  		defer sub.Unsubscribe()
 11975  		for {
 11976  			select {
 11977  			case log := <-logs:
 11978  				// New log arrived, parse the event and forward to the user
 11979  				event := new(StickerPackNewController)
 11980  				if err := _StickerPack.contract.UnpackLog(event, "NewController", log); err != nil {
 11981  					return err
 11982  				}
 11983  				event.Raw = log
 11984  
 11985  				select {
 11986  				case sink <- event:
 11987  				case err := <-sub.Err():
 11988  					return err
 11989  				case <-quit:
 11990  					return nil
 11991  				}
 11992  			case err := <-sub.Err():
 11993  				return err
 11994  			case <-quit:
 11995  				return nil
 11996  			}
 11997  		}
 11998  	}), nil
 11999  }
 12000  
 12001  // ParseNewController is a log parse operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 12002  //
 12003  // Solidity: event NewController(address controller)
 12004  func (_StickerPack *StickerPackFilterer) ParseNewController(log types.Log) (*StickerPackNewController, error) {
 12005  	event := new(StickerPackNewController)
 12006  	if err := _StickerPack.contract.UnpackLog(event, "NewController", log); err != nil {
 12007  		return nil, err
 12008  	}
 12009  	event.Raw = log
 12010  	return event, nil
 12011  }
 12012  
 12013  // StickerPackTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the StickerPack contract.
 12014  type StickerPackTransferIterator struct {
 12015  	Event *StickerPackTransfer // Event containing the contract specifics and raw log
 12016  
 12017  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 12018  	event    string              // Event name to use for unpacking event data
 12019  
 12020  	logs chan types.Log        // Log channel receiving the found contract events
 12021  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 12022  	done bool                  // Whether the subscription completed delivering logs
 12023  	fail error                 // Occurred error to stop iteration
 12024  }
 12025  
 12026  // Next advances the iterator to the subsequent event, returning whether there
 12027  // are any more events found. In case of a retrieval or parsing error, false is
 12028  // returned and Error() can be queried for the exact failure.
 12029  func (it *StickerPackTransferIterator) Next() bool {
 12030  	// If the iterator failed, stop iterating
 12031  	if it.fail != nil {
 12032  		return false
 12033  	}
 12034  	// If the iterator completed, deliver directly whatever's available
 12035  	if it.done {
 12036  		select {
 12037  		case log := <-it.logs:
 12038  			it.Event = new(StickerPackTransfer)
 12039  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 12040  				it.fail = err
 12041  				return false
 12042  			}
 12043  			it.Event.Raw = log
 12044  			return true
 12045  
 12046  		default:
 12047  			return false
 12048  		}
 12049  	}
 12050  	// Iterator still in progress, wait for either a data or an error event
 12051  	select {
 12052  	case log := <-it.logs:
 12053  		it.Event = new(StickerPackTransfer)
 12054  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 12055  			it.fail = err
 12056  			return false
 12057  		}
 12058  		it.Event.Raw = log
 12059  		return true
 12060  
 12061  	case err := <-it.sub.Err():
 12062  		it.done = true
 12063  		it.fail = err
 12064  		return it.Next()
 12065  	}
 12066  }
 12067  
 12068  // Error returns any retrieval or parsing error occurred during filtering.
 12069  func (it *StickerPackTransferIterator) Error() error {
 12070  	return it.fail
 12071  }
 12072  
 12073  // Close terminates the iteration process, releasing any pending underlying
 12074  // resources.
 12075  func (it *StickerPackTransferIterator) Close() error {
 12076  	it.sub.Unsubscribe()
 12077  	return nil
 12078  }
 12079  
 12080  // StickerPackTransfer represents a Transfer event raised by the StickerPack contract.
 12081  type StickerPackTransfer struct {
 12082  	From    common.Address
 12083  	To      common.Address
 12084  	TokenId *big.Int
 12085  	Raw     types.Log // Blockchain specific contextual infos
 12086  }
 12087  
 12088  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 12089  //
 12090  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
 12091  func (_StickerPack *StickerPackFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*StickerPackTransferIterator, error) {
 12092  
 12093  	var fromRule []interface{}
 12094  	for _, fromItem := range from {
 12095  		fromRule = append(fromRule, fromItem)
 12096  	}
 12097  	var toRule []interface{}
 12098  	for _, toItem := range to {
 12099  		toRule = append(toRule, toItem)
 12100  	}
 12101  	var tokenIdRule []interface{}
 12102  	for _, tokenIdItem := range tokenId {
 12103  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 12104  	}
 12105  
 12106  	logs, sub, err := _StickerPack.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
 12107  	if err != nil {
 12108  		return nil, err
 12109  	}
 12110  	return &StickerPackTransferIterator{contract: _StickerPack.contract, event: "Transfer", logs: logs, sub: sub}, nil
 12111  }
 12112  
 12113  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 12114  //
 12115  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
 12116  func (_StickerPack *StickerPackFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *StickerPackTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
 12117  
 12118  	var fromRule []interface{}
 12119  	for _, fromItem := range from {
 12120  		fromRule = append(fromRule, fromItem)
 12121  	}
 12122  	var toRule []interface{}
 12123  	for _, toItem := range to {
 12124  		toRule = append(toRule, toItem)
 12125  	}
 12126  	var tokenIdRule []interface{}
 12127  	for _, tokenIdItem := range tokenId {
 12128  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 12129  	}
 12130  
 12131  	logs, sub, err := _StickerPack.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
 12132  	if err != nil {
 12133  		return nil, err
 12134  	}
 12135  	return event.NewSubscription(func(quit <-chan struct{}) error {
 12136  		defer sub.Unsubscribe()
 12137  		for {
 12138  			select {
 12139  			case log := <-logs:
 12140  				// New log arrived, parse the event and forward to the user
 12141  				event := new(StickerPackTransfer)
 12142  				if err := _StickerPack.contract.UnpackLog(event, "Transfer", log); err != nil {
 12143  					return err
 12144  				}
 12145  				event.Raw = log
 12146  
 12147  				select {
 12148  				case sink <- event:
 12149  				case err := <-sub.Err():
 12150  					return err
 12151  				case <-quit:
 12152  					return nil
 12153  				}
 12154  			case err := <-sub.Err():
 12155  				return err
 12156  			case <-quit:
 12157  				return nil
 12158  			}
 12159  		}
 12160  	}), nil
 12161  }
 12162  
 12163  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 12164  //
 12165  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
 12166  func (_StickerPack *StickerPackFilterer) ParseTransfer(log types.Log) (*StickerPackTransfer, error) {
 12167  	event := new(StickerPackTransfer)
 12168  	if err := _StickerPack.contract.UnpackLog(event, "Transfer", log); err != nil {
 12169  		return nil, err
 12170  	}
 12171  	event.Raw = log
 12172  	return event, nil
 12173  }
 12174  
 12175  // StickerTypeABI is the input ABI used to generate the binding from.
 12176  const StickerTypeABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_limit\",\"type\":\"uint256\"}],\"name\":\"purgePack\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newController\",\"type\":\"address\"}],\"name\":\"changeController\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"},{\"name\":\"_donate\",\"type\":\"uint256\"},{\"name\":\"_category\",\"type\":\"bytes4[]\"},{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_contenthash\",\"type\":\"bytes\"}],\"name\":\"generatePack\",\"outputs\":[{\"name\":\"packId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"packCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_contenthash\",\"type\":\"bytes\"}],\"name\":\"setPackContenthash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"}],\"name\":\"getPackSummary\",\"outputs\":[{\"name\":\"category\",\"type\":\"bytes4[]\"},{\"name\":\"timestamp\",\"type\":\"uint256\"},{\"name\":\"contenthash\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_price\",\"type\":\"uint256\"},{\"name\":\"_donate\",\"type\":\"uint256\"}],\"name\":\"setPackPrice\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"}],\"name\":\"getPaymentData\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"mintable\",\"type\":\"bool\"},{\"name\":\"price\",\"type\":\"uint256\"},{\"name\":\"donate\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_category\",\"type\":\"bytes4\"}],\"name\":\"getCategoryLength\",\"outputs\":[{\"name\":\"size\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_category\",\"type\":\"bytes4\"}],\"name\":\"addPackCategory\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_category\",\"type\":\"bytes4\"}],\"name\":\"getAvailablePacks\",\"outputs\":[{\"name\":\"availableIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_category\",\"type\":\"bytes4\"},{\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"getCategoryPack\",\"outputs\":[{\"name\":\"packId\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_mintable\",\"type\":\"bool\"}],\"name\":\"setPackState\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"packs\",\"outputs\":[{\"name\":\"mintable\",\"type\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\"},{\"name\":\"donate\",\"type\":\"uint256\"},{\"name\":\"contenthash\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"tokenId\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"}],\"name\":\"getPackData\",\"outputs\":[{\"name\":\"category\",\"type\":\"bytes4[]\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"mintable\",\"type\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\"},{\"name\":\"contenthash\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claimTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_packId\",\"type\":\"uint256\"},{\"name\":\"_category\",\"type\":\"bytes4\"}],\"name\":\"removePackCategory\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"controller\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"dataPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"contenthash\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"mintable\",\"type\":\"bool\"}],\"name\":\"Register\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"dataPrice\",\"type\":\"uint256\"}],\"name\":\"PriceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"mintable\",\"type\":\"bool\"}],\"name\":\"MintabilityChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"packid\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"contenthash\",\"type\":\"bytes\"}],\"name\":\"ContenthashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"category\",\"type\":\"bytes4\"},{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"}],\"name\":\"Categorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"category\",\"type\":\"bytes4\"},{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"}],\"name\":\"Uncategorized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"packId\",\"type\":\"uint256\"}],\"name\":\"Unregister\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_controller\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"NewController\",\"type\":\"event\"}]"
 12177  
 12178  // StickerTypeFuncSigs maps the 4-byte function signature to its string representation.
 12179  var StickerTypeFuncSigs = map[string]string{
 12180  	"aeeaf3da": "addPackCategory(uint256,bytes4)",
 12181  	"095ea7b3": "approve(address,uint256)",
 12182  	"70a08231": "balanceOf(address)",
 12183  	"3cebb823": "changeController(address)",
 12184  	"df8de3e7": "claimTokens(address)",
 12185  	"f77c4791": "controller()",
 12186  	"4c06dc17": "generatePack(uint256,uint256,bytes4[],address,bytes)",
 12187  	"081812fc": "getApproved(uint256)",
 12188  	"b34b5825": "getAvailablePacks(bytes4)",
 12189  	"9f9a9b63": "getCategoryLength(bytes4)",
 12190  	"b5420d68": "getCategoryPack(bytes4,uint256)",
 12191  	"d2bf36c0": "getPackData(uint256)",
 12192  	"81ec792d": "getPackSummary(uint256)",
 12193  	"9c3a39a2": "getPaymentData(uint256)",
 12194  	"e985e9c5": "isApprovedForAll(address,address)",
 12195  	"06fdde03": "name()",
 12196  	"6352211e": "ownerOf(uint256)",
 12197  	"61bd6725": "packCount()",
 12198  	"b84c1392": "packs(uint256)",
 12199  	"00b3c91b": "purgePack(uint256,uint256)",
 12200  	"e8bb7143": "removePackCategory(uint256,bytes4)",
 12201  	"42842e0e": "safeTransferFrom(address,address,uint256)",
 12202  	"b88d4fde": "safeTransferFrom(address,address,uint256,bytes)",
 12203  	"a22cb465": "setApprovalForAll(address,bool)",
 12204  	"6a847981": "setPackContenthash(uint256,bytes)",
 12205  	"9389c5b5": "setPackPrice(uint256,uint256,uint256)",
 12206  	"b7f48211": "setPackState(uint256,bool)",
 12207  	"01ffc9a7": "supportsInterface(bytes4)",
 12208  	"95d89b41": "symbol()",
 12209  	"4f6ccce7": "tokenByIndex(uint256)",
 12210  	"2f745c59": "tokenOfOwnerByIndex(address,uint256)",
 12211  	"c87b56dd": "tokenURI(uint256)",
 12212  	"18160ddd": "totalSupply()",
 12213  	"23b872dd": "transferFrom(address,address,uint256)",
 12214  }
 12215  
 12216  // StickerType is an auto generated Go binding around an Ethereum contract.
 12217  type StickerType struct {
 12218  	StickerTypeCaller     // Read-only binding to the contract
 12219  	StickerTypeTransactor // Write-only binding to the contract
 12220  	StickerTypeFilterer   // Log filterer for contract events
 12221  }
 12222  
 12223  // StickerTypeCaller is an auto generated read-only Go binding around an Ethereum contract.
 12224  type StickerTypeCaller struct {
 12225  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 12226  }
 12227  
 12228  // StickerTypeTransactor is an auto generated write-only Go binding around an Ethereum contract.
 12229  type StickerTypeTransactor struct {
 12230  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 12231  }
 12232  
 12233  // StickerTypeFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
 12234  type StickerTypeFilterer struct {
 12235  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 12236  }
 12237  
 12238  // StickerTypeSession is an auto generated Go binding around an Ethereum contract,
 12239  // with pre-set call and transact options.
 12240  type StickerTypeSession struct {
 12241  	Contract     *StickerType      // Generic contract binding to set the session for
 12242  	CallOpts     bind.CallOpts     // Call options to use throughout this session
 12243  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
 12244  }
 12245  
 12246  // StickerTypeCallerSession is an auto generated read-only Go binding around an Ethereum contract,
 12247  // with pre-set call options.
 12248  type StickerTypeCallerSession struct {
 12249  	Contract *StickerTypeCaller // Generic contract caller binding to set the session for
 12250  	CallOpts bind.CallOpts      // Call options to use throughout this session
 12251  }
 12252  
 12253  // StickerTypeTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
 12254  // with pre-set transact options.
 12255  type StickerTypeTransactorSession struct {
 12256  	Contract     *StickerTypeTransactor // Generic contract transactor binding to set the session for
 12257  	TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
 12258  }
 12259  
 12260  // StickerTypeRaw is an auto generated low-level Go binding around an Ethereum contract.
 12261  type StickerTypeRaw struct {
 12262  	Contract *StickerType // Generic contract binding to access the raw methods on
 12263  }
 12264  
 12265  // StickerTypeCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
 12266  type StickerTypeCallerRaw struct {
 12267  	Contract *StickerTypeCaller // Generic read-only contract binding to access the raw methods on
 12268  }
 12269  
 12270  // StickerTypeTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
 12271  type StickerTypeTransactorRaw struct {
 12272  	Contract *StickerTypeTransactor // Generic write-only contract binding to access the raw methods on
 12273  }
 12274  
 12275  // NewStickerType creates a new instance of StickerType, bound to a specific deployed contract.
 12276  func NewStickerType(address common.Address, backend bind.ContractBackend) (*StickerType, error) {
 12277  	contract, err := bindStickerType(address, backend, backend, backend)
 12278  	if err != nil {
 12279  		return nil, err
 12280  	}
 12281  	return &StickerType{StickerTypeCaller: StickerTypeCaller{contract: contract}, StickerTypeTransactor: StickerTypeTransactor{contract: contract}, StickerTypeFilterer: StickerTypeFilterer{contract: contract}}, nil
 12282  }
 12283  
 12284  // NewStickerTypeCaller creates a new read-only instance of StickerType, bound to a specific deployed contract.
 12285  func NewStickerTypeCaller(address common.Address, caller bind.ContractCaller) (*StickerTypeCaller, error) {
 12286  	contract, err := bindStickerType(address, caller, nil, nil)
 12287  	if err != nil {
 12288  		return nil, err
 12289  	}
 12290  	return &StickerTypeCaller{contract: contract}, nil
 12291  }
 12292  
 12293  // NewStickerTypeTransactor creates a new write-only instance of StickerType, bound to a specific deployed contract.
 12294  func NewStickerTypeTransactor(address common.Address, transactor bind.ContractTransactor) (*StickerTypeTransactor, error) {
 12295  	contract, err := bindStickerType(address, nil, transactor, nil)
 12296  	if err != nil {
 12297  		return nil, err
 12298  	}
 12299  	return &StickerTypeTransactor{contract: contract}, nil
 12300  }
 12301  
 12302  // NewStickerTypeFilterer creates a new log filterer instance of StickerType, bound to a specific deployed contract.
 12303  func NewStickerTypeFilterer(address common.Address, filterer bind.ContractFilterer) (*StickerTypeFilterer, error) {
 12304  	contract, err := bindStickerType(address, nil, nil, filterer)
 12305  	if err != nil {
 12306  		return nil, err
 12307  	}
 12308  	return &StickerTypeFilterer{contract: contract}, nil
 12309  }
 12310  
 12311  // bindStickerType binds a generic wrapper to an already deployed contract.
 12312  func bindStickerType(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
 12313  	parsed, err := abi.JSON(strings.NewReader(StickerTypeABI))
 12314  	if err != nil {
 12315  		return nil, err
 12316  	}
 12317  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
 12318  }
 12319  
 12320  // Call invokes the (constant) contract method with params as input values and
 12321  // sets the output to result. The result type might be a single field for simple
 12322  // returns, a slice of interfaces for anonymous returns and a struct for named
 12323  // returns.
 12324  func (_StickerType *StickerTypeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
 12325  	return _StickerType.Contract.StickerTypeCaller.contract.Call(opts, result, method, params...)
 12326  }
 12327  
 12328  // Transfer initiates a plain transaction to move funds to the contract, calling
 12329  // its default method if one is available.
 12330  func (_StickerType *StickerTypeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 12331  	return _StickerType.Contract.StickerTypeTransactor.contract.Transfer(opts)
 12332  }
 12333  
 12334  // Transact invokes the (paid) contract method with params as input values.
 12335  func (_StickerType *StickerTypeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 12336  	return _StickerType.Contract.StickerTypeTransactor.contract.Transact(opts, method, params...)
 12337  }
 12338  
 12339  // Call invokes the (constant) contract method with params as input values and
 12340  // sets the output to result. The result type might be a single field for simple
 12341  // returns, a slice of interfaces for anonymous returns and a struct for named
 12342  // returns.
 12343  func (_StickerType *StickerTypeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
 12344  	return _StickerType.Contract.contract.Call(opts, result, method, params...)
 12345  }
 12346  
 12347  // Transfer initiates a plain transaction to move funds to the contract, calling
 12348  // its default method if one is available.
 12349  func (_StickerType *StickerTypeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 12350  	return _StickerType.Contract.contract.Transfer(opts)
 12351  }
 12352  
 12353  // Transact invokes the (paid) contract method with params as input values.
 12354  func (_StickerType *StickerTypeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 12355  	return _StickerType.Contract.contract.Transact(opts, method, params...)
 12356  }
 12357  
 12358  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 12359  //
 12360  // Solidity: function balanceOf(address owner) view returns(uint256)
 12361  func (_StickerType *StickerTypeCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
 12362  	var out []interface{}
 12363  	err := _StickerType.contract.Call(opts, &out, "balanceOf", owner)
 12364  
 12365  	if err != nil {
 12366  		return *new(*big.Int), err
 12367  	}
 12368  
 12369  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 12370  
 12371  	return out0, err
 12372  
 12373  }
 12374  
 12375  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 12376  //
 12377  // Solidity: function balanceOf(address owner) view returns(uint256)
 12378  func (_StickerType *StickerTypeSession) BalanceOf(owner common.Address) (*big.Int, error) {
 12379  	return _StickerType.Contract.BalanceOf(&_StickerType.CallOpts, owner)
 12380  }
 12381  
 12382  // BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
 12383  //
 12384  // Solidity: function balanceOf(address owner) view returns(uint256)
 12385  func (_StickerType *StickerTypeCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
 12386  	return _StickerType.Contract.BalanceOf(&_StickerType.CallOpts, owner)
 12387  }
 12388  
 12389  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
 12390  //
 12391  // Solidity: function controller() view returns(address)
 12392  func (_StickerType *StickerTypeCaller) Controller(opts *bind.CallOpts) (common.Address, error) {
 12393  	var out []interface{}
 12394  	err := _StickerType.contract.Call(opts, &out, "controller")
 12395  
 12396  	if err != nil {
 12397  		return *new(common.Address), err
 12398  	}
 12399  
 12400  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 12401  
 12402  	return out0, err
 12403  
 12404  }
 12405  
 12406  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
 12407  //
 12408  // Solidity: function controller() view returns(address)
 12409  func (_StickerType *StickerTypeSession) Controller() (common.Address, error) {
 12410  	return _StickerType.Contract.Controller(&_StickerType.CallOpts)
 12411  }
 12412  
 12413  // Controller is a free data retrieval call binding the contract method 0xf77c4791.
 12414  //
 12415  // Solidity: function controller() view returns(address)
 12416  func (_StickerType *StickerTypeCallerSession) Controller() (common.Address, error) {
 12417  	return _StickerType.Contract.Controller(&_StickerType.CallOpts)
 12418  }
 12419  
 12420  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
 12421  //
 12422  // Solidity: function getApproved(uint256 tokenId) view returns(address)
 12423  func (_StickerType *StickerTypeCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
 12424  	var out []interface{}
 12425  	err := _StickerType.contract.Call(opts, &out, "getApproved", tokenId)
 12426  
 12427  	if err != nil {
 12428  		return *new(common.Address), err
 12429  	}
 12430  
 12431  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 12432  
 12433  	return out0, err
 12434  
 12435  }
 12436  
 12437  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
 12438  //
 12439  // Solidity: function getApproved(uint256 tokenId) view returns(address)
 12440  func (_StickerType *StickerTypeSession) GetApproved(tokenId *big.Int) (common.Address, error) {
 12441  	return _StickerType.Contract.GetApproved(&_StickerType.CallOpts, tokenId)
 12442  }
 12443  
 12444  // GetApproved is a free data retrieval call binding the contract method 0x081812fc.
 12445  //
 12446  // Solidity: function getApproved(uint256 tokenId) view returns(address)
 12447  func (_StickerType *StickerTypeCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
 12448  	return _StickerType.Contract.GetApproved(&_StickerType.CallOpts, tokenId)
 12449  }
 12450  
 12451  // GetAvailablePacks is a free data retrieval call binding the contract method 0xb34b5825.
 12452  //
 12453  // Solidity: function getAvailablePacks(bytes4 _category) view returns(uint256[] availableIds)
 12454  func (_StickerType *StickerTypeCaller) GetAvailablePacks(opts *bind.CallOpts, _category [4]byte) ([]*big.Int, error) {
 12455  	var out []interface{}
 12456  	err := _StickerType.contract.Call(opts, &out, "getAvailablePacks", _category)
 12457  
 12458  	if err != nil {
 12459  		return *new([]*big.Int), err
 12460  	}
 12461  
 12462  	out0 := *abi.ConvertType(out[0], new([]*big.Int)).(*[]*big.Int)
 12463  
 12464  	return out0, err
 12465  
 12466  }
 12467  
 12468  // GetAvailablePacks is a free data retrieval call binding the contract method 0xb34b5825.
 12469  //
 12470  // Solidity: function getAvailablePacks(bytes4 _category) view returns(uint256[] availableIds)
 12471  func (_StickerType *StickerTypeSession) GetAvailablePacks(_category [4]byte) ([]*big.Int, error) {
 12472  	return _StickerType.Contract.GetAvailablePacks(&_StickerType.CallOpts, _category)
 12473  }
 12474  
 12475  // GetAvailablePacks is a free data retrieval call binding the contract method 0xb34b5825.
 12476  //
 12477  // Solidity: function getAvailablePacks(bytes4 _category) view returns(uint256[] availableIds)
 12478  func (_StickerType *StickerTypeCallerSession) GetAvailablePacks(_category [4]byte) ([]*big.Int, error) {
 12479  	return _StickerType.Contract.GetAvailablePacks(&_StickerType.CallOpts, _category)
 12480  }
 12481  
 12482  // GetCategoryLength is a free data retrieval call binding the contract method 0x9f9a9b63.
 12483  //
 12484  // Solidity: function getCategoryLength(bytes4 _category) view returns(uint256 size)
 12485  func (_StickerType *StickerTypeCaller) GetCategoryLength(opts *bind.CallOpts, _category [4]byte) (*big.Int, error) {
 12486  	var out []interface{}
 12487  	err := _StickerType.contract.Call(opts, &out, "getCategoryLength", _category)
 12488  
 12489  	if err != nil {
 12490  		return *new(*big.Int), err
 12491  	}
 12492  
 12493  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 12494  
 12495  	return out0, err
 12496  
 12497  }
 12498  
 12499  // GetCategoryLength is a free data retrieval call binding the contract method 0x9f9a9b63.
 12500  //
 12501  // Solidity: function getCategoryLength(bytes4 _category) view returns(uint256 size)
 12502  func (_StickerType *StickerTypeSession) GetCategoryLength(_category [4]byte) (*big.Int, error) {
 12503  	return _StickerType.Contract.GetCategoryLength(&_StickerType.CallOpts, _category)
 12504  }
 12505  
 12506  // GetCategoryLength is a free data retrieval call binding the contract method 0x9f9a9b63.
 12507  //
 12508  // Solidity: function getCategoryLength(bytes4 _category) view returns(uint256 size)
 12509  func (_StickerType *StickerTypeCallerSession) GetCategoryLength(_category [4]byte) (*big.Int, error) {
 12510  	return _StickerType.Contract.GetCategoryLength(&_StickerType.CallOpts, _category)
 12511  }
 12512  
 12513  // GetCategoryPack is a free data retrieval call binding the contract method 0xb5420d68.
 12514  //
 12515  // Solidity: function getCategoryPack(bytes4 _category, uint256 _index) view returns(uint256 packId)
 12516  func (_StickerType *StickerTypeCaller) GetCategoryPack(opts *bind.CallOpts, _category [4]byte, _index *big.Int) (*big.Int, error) {
 12517  	var out []interface{}
 12518  	err := _StickerType.contract.Call(opts, &out, "getCategoryPack", _category, _index)
 12519  
 12520  	if err != nil {
 12521  		return *new(*big.Int), err
 12522  	}
 12523  
 12524  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 12525  
 12526  	return out0, err
 12527  
 12528  }
 12529  
 12530  // GetCategoryPack is a free data retrieval call binding the contract method 0xb5420d68.
 12531  //
 12532  // Solidity: function getCategoryPack(bytes4 _category, uint256 _index) view returns(uint256 packId)
 12533  func (_StickerType *StickerTypeSession) GetCategoryPack(_category [4]byte, _index *big.Int) (*big.Int, error) {
 12534  	return _StickerType.Contract.GetCategoryPack(&_StickerType.CallOpts, _category, _index)
 12535  }
 12536  
 12537  // GetCategoryPack is a free data retrieval call binding the contract method 0xb5420d68.
 12538  //
 12539  // Solidity: function getCategoryPack(bytes4 _category, uint256 _index) view returns(uint256 packId)
 12540  func (_StickerType *StickerTypeCallerSession) GetCategoryPack(_category [4]byte, _index *big.Int) (*big.Int, error) {
 12541  	return _StickerType.Contract.GetCategoryPack(&_StickerType.CallOpts, _category, _index)
 12542  }
 12543  
 12544  // GetPackData is a free data retrieval call binding the contract method 0xd2bf36c0.
 12545  //
 12546  // Solidity: function getPackData(uint256 _packId) view returns(bytes4[] category, address owner, bool mintable, uint256 timestamp, uint256 price, bytes contenthash)
 12547  func (_StickerType *StickerTypeCaller) GetPackData(opts *bind.CallOpts, _packId *big.Int) (struct {
 12548  	Category    [][4]byte
 12549  	Owner       common.Address
 12550  	Mintable    bool
 12551  	Timestamp   *big.Int
 12552  	Price       *big.Int
 12553  	Contenthash []byte
 12554  }, error) {
 12555  	var out []interface{}
 12556  	err := _StickerType.contract.Call(opts, &out, "getPackData", _packId)
 12557  
 12558  	outstruct := new(struct {
 12559  		Category    [][4]byte
 12560  		Owner       common.Address
 12561  		Mintable    bool
 12562  		Timestamp   *big.Int
 12563  		Price       *big.Int
 12564  		Contenthash []byte
 12565  	})
 12566  	if err != nil {
 12567  		return *outstruct, err
 12568  	}
 12569  
 12570  	outstruct.Category = *abi.ConvertType(out[0], new([][4]byte)).(*[][4]byte)
 12571  	outstruct.Owner = *abi.ConvertType(out[1], new(common.Address)).(*common.Address)
 12572  	outstruct.Mintable = *abi.ConvertType(out[2], new(bool)).(*bool)
 12573  	outstruct.Timestamp = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
 12574  	outstruct.Price = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int)
 12575  	outstruct.Contenthash = *abi.ConvertType(out[5], new([]byte)).(*[]byte)
 12576  
 12577  	return *outstruct, err
 12578  
 12579  }
 12580  
 12581  // GetPackData is a free data retrieval call binding the contract method 0xd2bf36c0.
 12582  //
 12583  // Solidity: function getPackData(uint256 _packId) view returns(bytes4[] category, address owner, bool mintable, uint256 timestamp, uint256 price, bytes contenthash)
 12584  func (_StickerType *StickerTypeSession) GetPackData(_packId *big.Int) (struct {
 12585  	Category    [][4]byte
 12586  	Owner       common.Address
 12587  	Mintable    bool
 12588  	Timestamp   *big.Int
 12589  	Price       *big.Int
 12590  	Contenthash []byte
 12591  }, error) {
 12592  	return _StickerType.Contract.GetPackData(&_StickerType.CallOpts, _packId)
 12593  }
 12594  
 12595  // GetPackData is a free data retrieval call binding the contract method 0xd2bf36c0.
 12596  //
 12597  // Solidity: function getPackData(uint256 _packId) view returns(bytes4[] category, address owner, bool mintable, uint256 timestamp, uint256 price, bytes contenthash)
 12598  func (_StickerType *StickerTypeCallerSession) GetPackData(_packId *big.Int) (struct {
 12599  	Category    [][4]byte
 12600  	Owner       common.Address
 12601  	Mintable    bool
 12602  	Timestamp   *big.Int
 12603  	Price       *big.Int
 12604  	Contenthash []byte
 12605  }, error) {
 12606  	return _StickerType.Contract.GetPackData(&_StickerType.CallOpts, _packId)
 12607  }
 12608  
 12609  // GetPackSummary is a free data retrieval call binding the contract method 0x81ec792d.
 12610  //
 12611  // Solidity: function getPackSummary(uint256 _packId) view returns(bytes4[] category, uint256 timestamp, bytes contenthash)
 12612  func (_StickerType *StickerTypeCaller) GetPackSummary(opts *bind.CallOpts, _packId *big.Int) (struct {
 12613  	Category    [][4]byte
 12614  	Timestamp   *big.Int
 12615  	Contenthash []byte
 12616  }, error) {
 12617  	var out []interface{}
 12618  	err := _StickerType.contract.Call(opts, &out, "getPackSummary", _packId)
 12619  
 12620  	outstruct := new(struct {
 12621  		Category    [][4]byte
 12622  		Timestamp   *big.Int
 12623  		Contenthash []byte
 12624  	})
 12625  	if err != nil {
 12626  		return *outstruct, err
 12627  	}
 12628  
 12629  	outstruct.Category = *abi.ConvertType(out[0], new([][4]byte)).(*[][4]byte)
 12630  	outstruct.Timestamp = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
 12631  	outstruct.Contenthash = *abi.ConvertType(out[2], new([]byte)).(*[]byte)
 12632  
 12633  	return *outstruct, err
 12634  
 12635  }
 12636  
 12637  // GetPackSummary is a free data retrieval call binding the contract method 0x81ec792d.
 12638  //
 12639  // Solidity: function getPackSummary(uint256 _packId) view returns(bytes4[] category, uint256 timestamp, bytes contenthash)
 12640  func (_StickerType *StickerTypeSession) GetPackSummary(_packId *big.Int) (struct {
 12641  	Category    [][4]byte
 12642  	Timestamp   *big.Int
 12643  	Contenthash []byte
 12644  }, error) {
 12645  	return _StickerType.Contract.GetPackSummary(&_StickerType.CallOpts, _packId)
 12646  }
 12647  
 12648  // GetPackSummary is a free data retrieval call binding the contract method 0x81ec792d.
 12649  //
 12650  // Solidity: function getPackSummary(uint256 _packId) view returns(bytes4[] category, uint256 timestamp, bytes contenthash)
 12651  func (_StickerType *StickerTypeCallerSession) GetPackSummary(_packId *big.Int) (struct {
 12652  	Category    [][4]byte
 12653  	Timestamp   *big.Int
 12654  	Contenthash []byte
 12655  }, error) {
 12656  	return _StickerType.Contract.GetPackSummary(&_StickerType.CallOpts, _packId)
 12657  }
 12658  
 12659  // GetPaymentData is a free data retrieval call binding the contract method 0x9c3a39a2.
 12660  //
 12661  // Solidity: function getPaymentData(uint256 _packId) view returns(address owner, bool mintable, uint256 price, uint256 donate)
 12662  func (_StickerType *StickerTypeCaller) GetPaymentData(opts *bind.CallOpts, _packId *big.Int) (struct {
 12663  	Owner    common.Address
 12664  	Mintable bool
 12665  	Price    *big.Int
 12666  	Donate   *big.Int
 12667  }, error) {
 12668  	var out []interface{}
 12669  	err := _StickerType.contract.Call(opts, &out, "getPaymentData", _packId)
 12670  
 12671  	outstruct := new(struct {
 12672  		Owner    common.Address
 12673  		Mintable bool
 12674  		Price    *big.Int
 12675  		Donate   *big.Int
 12676  	})
 12677  	if err != nil {
 12678  		return *outstruct, err
 12679  	}
 12680  
 12681  	outstruct.Owner = *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 12682  	outstruct.Mintable = *abi.ConvertType(out[1], new(bool)).(*bool)
 12683  	outstruct.Price = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
 12684  	outstruct.Donate = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
 12685  
 12686  	return *outstruct, err
 12687  
 12688  }
 12689  
 12690  // GetPaymentData is a free data retrieval call binding the contract method 0x9c3a39a2.
 12691  //
 12692  // Solidity: function getPaymentData(uint256 _packId) view returns(address owner, bool mintable, uint256 price, uint256 donate)
 12693  func (_StickerType *StickerTypeSession) GetPaymentData(_packId *big.Int) (struct {
 12694  	Owner    common.Address
 12695  	Mintable bool
 12696  	Price    *big.Int
 12697  	Donate   *big.Int
 12698  }, error) {
 12699  	return _StickerType.Contract.GetPaymentData(&_StickerType.CallOpts, _packId)
 12700  }
 12701  
 12702  // GetPaymentData is a free data retrieval call binding the contract method 0x9c3a39a2.
 12703  //
 12704  // Solidity: function getPaymentData(uint256 _packId) view returns(address owner, bool mintable, uint256 price, uint256 donate)
 12705  func (_StickerType *StickerTypeCallerSession) GetPaymentData(_packId *big.Int) (struct {
 12706  	Owner    common.Address
 12707  	Mintable bool
 12708  	Price    *big.Int
 12709  	Donate   *big.Int
 12710  }, error) {
 12711  	return _StickerType.Contract.GetPaymentData(&_StickerType.CallOpts, _packId)
 12712  }
 12713  
 12714  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
 12715  //
 12716  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
 12717  func (_StickerType *StickerTypeCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
 12718  	var out []interface{}
 12719  	err := _StickerType.contract.Call(opts, &out, "isApprovedForAll", owner, operator)
 12720  
 12721  	if err != nil {
 12722  		return *new(bool), err
 12723  	}
 12724  
 12725  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
 12726  
 12727  	return out0, err
 12728  
 12729  }
 12730  
 12731  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
 12732  //
 12733  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
 12734  func (_StickerType *StickerTypeSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
 12735  	return _StickerType.Contract.IsApprovedForAll(&_StickerType.CallOpts, owner, operator)
 12736  }
 12737  
 12738  // IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
 12739  //
 12740  // Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
 12741  func (_StickerType *StickerTypeCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
 12742  	return _StickerType.Contract.IsApprovedForAll(&_StickerType.CallOpts, owner, operator)
 12743  }
 12744  
 12745  // Name is a free data retrieval call binding the contract method 0x06fdde03.
 12746  //
 12747  // Solidity: function name() view returns(string)
 12748  func (_StickerType *StickerTypeCaller) Name(opts *bind.CallOpts) (string, error) {
 12749  	var out []interface{}
 12750  	err := _StickerType.contract.Call(opts, &out, "name")
 12751  
 12752  	if err != nil {
 12753  		return *new(string), err
 12754  	}
 12755  
 12756  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
 12757  
 12758  	return out0, err
 12759  
 12760  }
 12761  
 12762  // Name is a free data retrieval call binding the contract method 0x06fdde03.
 12763  //
 12764  // Solidity: function name() view returns(string)
 12765  func (_StickerType *StickerTypeSession) Name() (string, error) {
 12766  	return _StickerType.Contract.Name(&_StickerType.CallOpts)
 12767  }
 12768  
 12769  // Name is a free data retrieval call binding the contract method 0x06fdde03.
 12770  //
 12771  // Solidity: function name() view returns(string)
 12772  func (_StickerType *StickerTypeCallerSession) Name() (string, error) {
 12773  	return _StickerType.Contract.Name(&_StickerType.CallOpts)
 12774  }
 12775  
 12776  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
 12777  //
 12778  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
 12779  func (_StickerType *StickerTypeCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
 12780  	var out []interface{}
 12781  	err := _StickerType.contract.Call(opts, &out, "ownerOf", tokenId)
 12782  
 12783  	if err != nil {
 12784  		return *new(common.Address), err
 12785  	}
 12786  
 12787  	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
 12788  
 12789  	return out0, err
 12790  
 12791  }
 12792  
 12793  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
 12794  //
 12795  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
 12796  func (_StickerType *StickerTypeSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
 12797  	return _StickerType.Contract.OwnerOf(&_StickerType.CallOpts, tokenId)
 12798  }
 12799  
 12800  // OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
 12801  //
 12802  // Solidity: function ownerOf(uint256 tokenId) view returns(address)
 12803  func (_StickerType *StickerTypeCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
 12804  	return _StickerType.Contract.OwnerOf(&_StickerType.CallOpts, tokenId)
 12805  }
 12806  
 12807  // PackCount is a free data retrieval call binding the contract method 0x61bd6725.
 12808  //
 12809  // Solidity: function packCount() view returns(uint256)
 12810  func (_StickerType *StickerTypeCaller) PackCount(opts *bind.CallOpts) (*big.Int, error) {
 12811  	var out []interface{}
 12812  	err := _StickerType.contract.Call(opts, &out, "packCount")
 12813  
 12814  	if err != nil {
 12815  		return *new(*big.Int), err
 12816  	}
 12817  
 12818  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 12819  
 12820  	return out0, err
 12821  
 12822  }
 12823  
 12824  // PackCount is a free data retrieval call binding the contract method 0x61bd6725.
 12825  //
 12826  // Solidity: function packCount() view returns(uint256)
 12827  func (_StickerType *StickerTypeSession) PackCount() (*big.Int, error) {
 12828  	return _StickerType.Contract.PackCount(&_StickerType.CallOpts)
 12829  }
 12830  
 12831  // PackCount is a free data retrieval call binding the contract method 0x61bd6725.
 12832  //
 12833  // Solidity: function packCount() view returns(uint256)
 12834  func (_StickerType *StickerTypeCallerSession) PackCount() (*big.Int, error) {
 12835  	return _StickerType.Contract.PackCount(&_StickerType.CallOpts)
 12836  }
 12837  
 12838  // Packs is a free data retrieval call binding the contract method 0xb84c1392.
 12839  //
 12840  // Solidity: function packs(uint256 ) view returns(bool mintable, uint256 timestamp, uint256 price, uint256 donate, bytes contenthash)
 12841  func (_StickerType *StickerTypeCaller) Packs(opts *bind.CallOpts, arg0 *big.Int) (struct {
 12842  	Mintable    bool
 12843  	Timestamp   *big.Int
 12844  	Price       *big.Int
 12845  	Donate      *big.Int
 12846  	Contenthash []byte
 12847  }, error) {
 12848  	var out []interface{}
 12849  	err := _StickerType.contract.Call(opts, &out, "packs", arg0)
 12850  
 12851  	outstruct := new(struct {
 12852  		Mintable    bool
 12853  		Timestamp   *big.Int
 12854  		Price       *big.Int
 12855  		Donate      *big.Int
 12856  		Contenthash []byte
 12857  	})
 12858  	if err != nil {
 12859  		return *outstruct, err
 12860  	}
 12861  
 12862  	outstruct.Mintable = *abi.ConvertType(out[0], new(bool)).(*bool)
 12863  	outstruct.Timestamp = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)
 12864  	outstruct.Price = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int)
 12865  	outstruct.Donate = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
 12866  	outstruct.Contenthash = *abi.ConvertType(out[4], new([]byte)).(*[]byte)
 12867  
 12868  	return *outstruct, err
 12869  
 12870  }
 12871  
 12872  // Packs is a free data retrieval call binding the contract method 0xb84c1392.
 12873  //
 12874  // Solidity: function packs(uint256 ) view returns(bool mintable, uint256 timestamp, uint256 price, uint256 donate, bytes contenthash)
 12875  func (_StickerType *StickerTypeSession) Packs(arg0 *big.Int) (struct {
 12876  	Mintable    bool
 12877  	Timestamp   *big.Int
 12878  	Price       *big.Int
 12879  	Donate      *big.Int
 12880  	Contenthash []byte
 12881  }, error) {
 12882  	return _StickerType.Contract.Packs(&_StickerType.CallOpts, arg0)
 12883  }
 12884  
 12885  // Packs is a free data retrieval call binding the contract method 0xb84c1392.
 12886  //
 12887  // Solidity: function packs(uint256 ) view returns(bool mintable, uint256 timestamp, uint256 price, uint256 donate, bytes contenthash)
 12888  func (_StickerType *StickerTypeCallerSession) Packs(arg0 *big.Int) (struct {
 12889  	Mintable    bool
 12890  	Timestamp   *big.Int
 12891  	Price       *big.Int
 12892  	Donate      *big.Int
 12893  	Contenthash []byte
 12894  }, error) {
 12895  	return _StickerType.Contract.Packs(&_StickerType.CallOpts, arg0)
 12896  }
 12897  
 12898  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
 12899  //
 12900  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
 12901  func (_StickerType *StickerTypeCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
 12902  	var out []interface{}
 12903  	err := _StickerType.contract.Call(opts, &out, "supportsInterface", interfaceId)
 12904  
 12905  	if err != nil {
 12906  		return *new(bool), err
 12907  	}
 12908  
 12909  	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
 12910  
 12911  	return out0, err
 12912  
 12913  }
 12914  
 12915  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
 12916  //
 12917  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
 12918  func (_StickerType *StickerTypeSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
 12919  	return _StickerType.Contract.SupportsInterface(&_StickerType.CallOpts, interfaceId)
 12920  }
 12921  
 12922  // SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
 12923  //
 12924  // Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
 12925  func (_StickerType *StickerTypeCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
 12926  	return _StickerType.Contract.SupportsInterface(&_StickerType.CallOpts, interfaceId)
 12927  }
 12928  
 12929  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 12930  //
 12931  // Solidity: function symbol() view returns(string)
 12932  func (_StickerType *StickerTypeCaller) Symbol(opts *bind.CallOpts) (string, error) {
 12933  	var out []interface{}
 12934  	err := _StickerType.contract.Call(opts, &out, "symbol")
 12935  
 12936  	if err != nil {
 12937  		return *new(string), err
 12938  	}
 12939  
 12940  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
 12941  
 12942  	return out0, err
 12943  
 12944  }
 12945  
 12946  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 12947  //
 12948  // Solidity: function symbol() view returns(string)
 12949  func (_StickerType *StickerTypeSession) Symbol() (string, error) {
 12950  	return _StickerType.Contract.Symbol(&_StickerType.CallOpts)
 12951  }
 12952  
 12953  // Symbol is a free data retrieval call binding the contract method 0x95d89b41.
 12954  //
 12955  // Solidity: function symbol() view returns(string)
 12956  func (_StickerType *StickerTypeCallerSession) Symbol() (string, error) {
 12957  	return _StickerType.Contract.Symbol(&_StickerType.CallOpts)
 12958  }
 12959  
 12960  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
 12961  //
 12962  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
 12963  func (_StickerType *StickerTypeCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
 12964  	var out []interface{}
 12965  	err := _StickerType.contract.Call(opts, &out, "tokenByIndex", index)
 12966  
 12967  	if err != nil {
 12968  		return *new(*big.Int), err
 12969  	}
 12970  
 12971  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 12972  
 12973  	return out0, err
 12974  
 12975  }
 12976  
 12977  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
 12978  //
 12979  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
 12980  func (_StickerType *StickerTypeSession) TokenByIndex(index *big.Int) (*big.Int, error) {
 12981  	return _StickerType.Contract.TokenByIndex(&_StickerType.CallOpts, index)
 12982  }
 12983  
 12984  // TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
 12985  //
 12986  // Solidity: function tokenByIndex(uint256 index) view returns(uint256)
 12987  func (_StickerType *StickerTypeCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
 12988  	return _StickerType.Contract.TokenByIndex(&_StickerType.CallOpts, index)
 12989  }
 12990  
 12991  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
 12992  //
 12993  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
 12994  func (_StickerType *StickerTypeCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
 12995  	var out []interface{}
 12996  	err := _StickerType.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)
 12997  
 12998  	if err != nil {
 12999  		return *new(*big.Int), err
 13000  	}
 13001  
 13002  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 13003  
 13004  	return out0, err
 13005  
 13006  }
 13007  
 13008  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
 13009  //
 13010  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
 13011  func (_StickerType *StickerTypeSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
 13012  	return _StickerType.Contract.TokenOfOwnerByIndex(&_StickerType.CallOpts, owner, index)
 13013  }
 13014  
 13015  // TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
 13016  //
 13017  // Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
 13018  func (_StickerType *StickerTypeCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
 13019  	return _StickerType.Contract.TokenOfOwnerByIndex(&_StickerType.CallOpts, owner, index)
 13020  }
 13021  
 13022  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
 13023  //
 13024  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
 13025  func (_StickerType *StickerTypeCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
 13026  	var out []interface{}
 13027  	err := _StickerType.contract.Call(opts, &out, "tokenURI", tokenId)
 13028  
 13029  	if err != nil {
 13030  		return *new(string), err
 13031  	}
 13032  
 13033  	out0 := *abi.ConvertType(out[0], new(string)).(*string)
 13034  
 13035  	return out0, err
 13036  
 13037  }
 13038  
 13039  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
 13040  //
 13041  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
 13042  func (_StickerType *StickerTypeSession) TokenURI(tokenId *big.Int) (string, error) {
 13043  	return _StickerType.Contract.TokenURI(&_StickerType.CallOpts, tokenId)
 13044  }
 13045  
 13046  // TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
 13047  //
 13048  // Solidity: function tokenURI(uint256 tokenId) view returns(string)
 13049  func (_StickerType *StickerTypeCallerSession) TokenURI(tokenId *big.Int) (string, error) {
 13050  	return _StickerType.Contract.TokenURI(&_StickerType.CallOpts, tokenId)
 13051  }
 13052  
 13053  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 13054  //
 13055  // Solidity: function totalSupply() view returns(uint256)
 13056  func (_StickerType *StickerTypeCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
 13057  	var out []interface{}
 13058  	err := _StickerType.contract.Call(opts, &out, "totalSupply")
 13059  
 13060  	if err != nil {
 13061  		return *new(*big.Int), err
 13062  	}
 13063  
 13064  	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
 13065  
 13066  	return out0, err
 13067  
 13068  }
 13069  
 13070  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 13071  //
 13072  // Solidity: function totalSupply() view returns(uint256)
 13073  func (_StickerType *StickerTypeSession) TotalSupply() (*big.Int, error) {
 13074  	return _StickerType.Contract.TotalSupply(&_StickerType.CallOpts)
 13075  }
 13076  
 13077  // TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
 13078  //
 13079  // Solidity: function totalSupply() view returns(uint256)
 13080  func (_StickerType *StickerTypeCallerSession) TotalSupply() (*big.Int, error) {
 13081  	return _StickerType.Contract.TotalSupply(&_StickerType.CallOpts)
 13082  }
 13083  
 13084  // AddPackCategory is a paid mutator transaction binding the contract method 0xaeeaf3da.
 13085  //
 13086  // Solidity: function addPackCategory(uint256 _packId, bytes4 _category) returns()
 13087  func (_StickerType *StickerTypeTransactor) AddPackCategory(opts *bind.TransactOpts, _packId *big.Int, _category [4]byte) (*types.Transaction, error) {
 13088  	return _StickerType.contract.Transact(opts, "addPackCategory", _packId, _category)
 13089  }
 13090  
 13091  // AddPackCategory is a paid mutator transaction binding the contract method 0xaeeaf3da.
 13092  //
 13093  // Solidity: function addPackCategory(uint256 _packId, bytes4 _category) returns()
 13094  func (_StickerType *StickerTypeSession) AddPackCategory(_packId *big.Int, _category [4]byte) (*types.Transaction, error) {
 13095  	return _StickerType.Contract.AddPackCategory(&_StickerType.TransactOpts, _packId, _category)
 13096  }
 13097  
 13098  // AddPackCategory is a paid mutator transaction binding the contract method 0xaeeaf3da.
 13099  //
 13100  // Solidity: function addPackCategory(uint256 _packId, bytes4 _category) returns()
 13101  func (_StickerType *StickerTypeTransactorSession) AddPackCategory(_packId *big.Int, _category [4]byte) (*types.Transaction, error) {
 13102  	return _StickerType.Contract.AddPackCategory(&_StickerType.TransactOpts, _packId, _category)
 13103  }
 13104  
 13105  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 13106  //
 13107  // Solidity: function approve(address to, uint256 tokenId) returns()
 13108  func (_StickerType *StickerTypeTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13109  	return _StickerType.contract.Transact(opts, "approve", to, tokenId)
 13110  }
 13111  
 13112  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 13113  //
 13114  // Solidity: function approve(address to, uint256 tokenId) returns()
 13115  func (_StickerType *StickerTypeSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13116  	return _StickerType.Contract.Approve(&_StickerType.TransactOpts, to, tokenId)
 13117  }
 13118  
 13119  // Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
 13120  //
 13121  // Solidity: function approve(address to, uint256 tokenId) returns()
 13122  func (_StickerType *StickerTypeTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13123  	return _StickerType.Contract.Approve(&_StickerType.TransactOpts, to, tokenId)
 13124  }
 13125  
 13126  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
 13127  //
 13128  // Solidity: function changeController(address _newController) returns()
 13129  func (_StickerType *StickerTypeTransactor) ChangeController(opts *bind.TransactOpts, _newController common.Address) (*types.Transaction, error) {
 13130  	return _StickerType.contract.Transact(opts, "changeController", _newController)
 13131  }
 13132  
 13133  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
 13134  //
 13135  // Solidity: function changeController(address _newController) returns()
 13136  func (_StickerType *StickerTypeSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
 13137  	return _StickerType.Contract.ChangeController(&_StickerType.TransactOpts, _newController)
 13138  }
 13139  
 13140  // ChangeController is a paid mutator transaction binding the contract method 0x3cebb823.
 13141  //
 13142  // Solidity: function changeController(address _newController) returns()
 13143  func (_StickerType *StickerTypeTransactorSession) ChangeController(_newController common.Address) (*types.Transaction, error) {
 13144  	return _StickerType.Contract.ChangeController(&_StickerType.TransactOpts, _newController)
 13145  }
 13146  
 13147  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 13148  //
 13149  // Solidity: function claimTokens(address _token) returns()
 13150  func (_StickerType *StickerTypeTransactor) ClaimTokens(opts *bind.TransactOpts, _token common.Address) (*types.Transaction, error) {
 13151  	return _StickerType.contract.Transact(opts, "claimTokens", _token)
 13152  }
 13153  
 13154  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 13155  //
 13156  // Solidity: function claimTokens(address _token) returns()
 13157  func (_StickerType *StickerTypeSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
 13158  	return _StickerType.Contract.ClaimTokens(&_StickerType.TransactOpts, _token)
 13159  }
 13160  
 13161  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 13162  //
 13163  // Solidity: function claimTokens(address _token) returns()
 13164  func (_StickerType *StickerTypeTransactorSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
 13165  	return _StickerType.Contract.ClaimTokens(&_StickerType.TransactOpts, _token)
 13166  }
 13167  
 13168  // GeneratePack is a paid mutator transaction binding the contract method 0x4c06dc17.
 13169  //
 13170  // Solidity: function generatePack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash) returns(uint256 packId)
 13171  func (_StickerType *StickerTypeTransactor) GeneratePack(opts *bind.TransactOpts, _price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte) (*types.Transaction, error) {
 13172  	return _StickerType.contract.Transact(opts, "generatePack", _price, _donate, _category, _owner, _contenthash)
 13173  }
 13174  
 13175  // GeneratePack is a paid mutator transaction binding the contract method 0x4c06dc17.
 13176  //
 13177  // Solidity: function generatePack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash) returns(uint256 packId)
 13178  func (_StickerType *StickerTypeSession) GeneratePack(_price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte) (*types.Transaction, error) {
 13179  	return _StickerType.Contract.GeneratePack(&_StickerType.TransactOpts, _price, _donate, _category, _owner, _contenthash)
 13180  }
 13181  
 13182  // GeneratePack is a paid mutator transaction binding the contract method 0x4c06dc17.
 13183  //
 13184  // Solidity: function generatePack(uint256 _price, uint256 _donate, bytes4[] _category, address _owner, bytes _contenthash) returns(uint256 packId)
 13185  func (_StickerType *StickerTypeTransactorSession) GeneratePack(_price *big.Int, _donate *big.Int, _category [][4]byte, _owner common.Address, _contenthash []byte) (*types.Transaction, error) {
 13186  	return _StickerType.Contract.GeneratePack(&_StickerType.TransactOpts, _price, _donate, _category, _owner, _contenthash)
 13187  }
 13188  
 13189  // PurgePack is a paid mutator transaction binding the contract method 0x00b3c91b.
 13190  //
 13191  // Solidity: function purgePack(uint256 _packId, uint256 _limit) returns()
 13192  func (_StickerType *StickerTypeTransactor) PurgePack(opts *bind.TransactOpts, _packId *big.Int, _limit *big.Int) (*types.Transaction, error) {
 13193  	return _StickerType.contract.Transact(opts, "purgePack", _packId, _limit)
 13194  }
 13195  
 13196  // PurgePack is a paid mutator transaction binding the contract method 0x00b3c91b.
 13197  //
 13198  // Solidity: function purgePack(uint256 _packId, uint256 _limit) returns()
 13199  func (_StickerType *StickerTypeSession) PurgePack(_packId *big.Int, _limit *big.Int) (*types.Transaction, error) {
 13200  	return _StickerType.Contract.PurgePack(&_StickerType.TransactOpts, _packId, _limit)
 13201  }
 13202  
 13203  // PurgePack is a paid mutator transaction binding the contract method 0x00b3c91b.
 13204  //
 13205  // Solidity: function purgePack(uint256 _packId, uint256 _limit) returns()
 13206  func (_StickerType *StickerTypeTransactorSession) PurgePack(_packId *big.Int, _limit *big.Int) (*types.Transaction, error) {
 13207  	return _StickerType.Contract.PurgePack(&_StickerType.TransactOpts, _packId, _limit)
 13208  }
 13209  
 13210  // RemovePackCategory is a paid mutator transaction binding the contract method 0xe8bb7143.
 13211  //
 13212  // Solidity: function removePackCategory(uint256 _packId, bytes4 _category) returns()
 13213  func (_StickerType *StickerTypeTransactor) RemovePackCategory(opts *bind.TransactOpts, _packId *big.Int, _category [4]byte) (*types.Transaction, error) {
 13214  	return _StickerType.contract.Transact(opts, "removePackCategory", _packId, _category)
 13215  }
 13216  
 13217  // RemovePackCategory is a paid mutator transaction binding the contract method 0xe8bb7143.
 13218  //
 13219  // Solidity: function removePackCategory(uint256 _packId, bytes4 _category) returns()
 13220  func (_StickerType *StickerTypeSession) RemovePackCategory(_packId *big.Int, _category [4]byte) (*types.Transaction, error) {
 13221  	return _StickerType.Contract.RemovePackCategory(&_StickerType.TransactOpts, _packId, _category)
 13222  }
 13223  
 13224  // RemovePackCategory is a paid mutator transaction binding the contract method 0xe8bb7143.
 13225  //
 13226  // Solidity: function removePackCategory(uint256 _packId, bytes4 _category) returns()
 13227  func (_StickerType *StickerTypeTransactorSession) RemovePackCategory(_packId *big.Int, _category [4]byte) (*types.Transaction, error) {
 13228  	return _StickerType.Contract.RemovePackCategory(&_StickerType.TransactOpts, _packId, _category)
 13229  }
 13230  
 13231  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
 13232  //
 13233  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
 13234  func (_StickerType *StickerTypeTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13235  	return _StickerType.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
 13236  }
 13237  
 13238  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
 13239  //
 13240  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
 13241  func (_StickerType *StickerTypeSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13242  	return _StickerType.Contract.SafeTransferFrom(&_StickerType.TransactOpts, from, to, tokenId)
 13243  }
 13244  
 13245  // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
 13246  //
 13247  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
 13248  func (_StickerType *StickerTypeTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13249  	return _StickerType.Contract.SafeTransferFrom(&_StickerType.TransactOpts, from, to, tokenId)
 13250  }
 13251  
 13252  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
 13253  //
 13254  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
 13255  func (_StickerType *StickerTypeTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
 13256  	return _StickerType.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, _data)
 13257  }
 13258  
 13259  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
 13260  //
 13261  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
 13262  func (_StickerType *StickerTypeSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
 13263  	return _StickerType.Contract.SafeTransferFrom0(&_StickerType.TransactOpts, from, to, tokenId, _data)
 13264  }
 13265  
 13266  // SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
 13267  //
 13268  // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) returns()
 13269  func (_StickerType *StickerTypeTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, _data []byte) (*types.Transaction, error) {
 13270  	return _StickerType.Contract.SafeTransferFrom0(&_StickerType.TransactOpts, from, to, tokenId, _data)
 13271  }
 13272  
 13273  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
 13274  //
 13275  // Solidity: function setApprovalForAll(address to, bool approved) returns()
 13276  func (_StickerType *StickerTypeTransactor) SetApprovalForAll(opts *bind.TransactOpts, to common.Address, approved bool) (*types.Transaction, error) {
 13277  	return _StickerType.contract.Transact(opts, "setApprovalForAll", to, approved)
 13278  }
 13279  
 13280  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
 13281  //
 13282  // Solidity: function setApprovalForAll(address to, bool approved) returns()
 13283  func (_StickerType *StickerTypeSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
 13284  	return _StickerType.Contract.SetApprovalForAll(&_StickerType.TransactOpts, to, approved)
 13285  }
 13286  
 13287  // SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
 13288  //
 13289  // Solidity: function setApprovalForAll(address to, bool approved) returns()
 13290  func (_StickerType *StickerTypeTransactorSession) SetApprovalForAll(to common.Address, approved bool) (*types.Transaction, error) {
 13291  	return _StickerType.Contract.SetApprovalForAll(&_StickerType.TransactOpts, to, approved)
 13292  }
 13293  
 13294  // SetPackContenthash is a paid mutator transaction binding the contract method 0x6a847981.
 13295  //
 13296  // Solidity: function setPackContenthash(uint256 _packId, bytes _contenthash) returns()
 13297  func (_StickerType *StickerTypeTransactor) SetPackContenthash(opts *bind.TransactOpts, _packId *big.Int, _contenthash []byte) (*types.Transaction, error) {
 13298  	return _StickerType.contract.Transact(opts, "setPackContenthash", _packId, _contenthash)
 13299  }
 13300  
 13301  // SetPackContenthash is a paid mutator transaction binding the contract method 0x6a847981.
 13302  //
 13303  // Solidity: function setPackContenthash(uint256 _packId, bytes _contenthash) returns()
 13304  func (_StickerType *StickerTypeSession) SetPackContenthash(_packId *big.Int, _contenthash []byte) (*types.Transaction, error) {
 13305  	return _StickerType.Contract.SetPackContenthash(&_StickerType.TransactOpts, _packId, _contenthash)
 13306  }
 13307  
 13308  // SetPackContenthash is a paid mutator transaction binding the contract method 0x6a847981.
 13309  //
 13310  // Solidity: function setPackContenthash(uint256 _packId, bytes _contenthash) returns()
 13311  func (_StickerType *StickerTypeTransactorSession) SetPackContenthash(_packId *big.Int, _contenthash []byte) (*types.Transaction, error) {
 13312  	return _StickerType.Contract.SetPackContenthash(&_StickerType.TransactOpts, _packId, _contenthash)
 13313  }
 13314  
 13315  // SetPackPrice is a paid mutator transaction binding the contract method 0x9389c5b5.
 13316  //
 13317  // Solidity: function setPackPrice(uint256 _packId, uint256 _price, uint256 _donate) returns()
 13318  func (_StickerType *StickerTypeTransactor) SetPackPrice(opts *bind.TransactOpts, _packId *big.Int, _price *big.Int, _donate *big.Int) (*types.Transaction, error) {
 13319  	return _StickerType.contract.Transact(opts, "setPackPrice", _packId, _price, _donate)
 13320  }
 13321  
 13322  // SetPackPrice is a paid mutator transaction binding the contract method 0x9389c5b5.
 13323  //
 13324  // Solidity: function setPackPrice(uint256 _packId, uint256 _price, uint256 _donate) returns()
 13325  func (_StickerType *StickerTypeSession) SetPackPrice(_packId *big.Int, _price *big.Int, _donate *big.Int) (*types.Transaction, error) {
 13326  	return _StickerType.Contract.SetPackPrice(&_StickerType.TransactOpts, _packId, _price, _donate)
 13327  }
 13328  
 13329  // SetPackPrice is a paid mutator transaction binding the contract method 0x9389c5b5.
 13330  //
 13331  // Solidity: function setPackPrice(uint256 _packId, uint256 _price, uint256 _donate) returns()
 13332  func (_StickerType *StickerTypeTransactorSession) SetPackPrice(_packId *big.Int, _price *big.Int, _donate *big.Int) (*types.Transaction, error) {
 13333  	return _StickerType.Contract.SetPackPrice(&_StickerType.TransactOpts, _packId, _price, _donate)
 13334  }
 13335  
 13336  // SetPackState is a paid mutator transaction binding the contract method 0xb7f48211.
 13337  //
 13338  // Solidity: function setPackState(uint256 _packId, bool _mintable) returns()
 13339  func (_StickerType *StickerTypeTransactor) SetPackState(opts *bind.TransactOpts, _packId *big.Int, _mintable bool) (*types.Transaction, error) {
 13340  	return _StickerType.contract.Transact(opts, "setPackState", _packId, _mintable)
 13341  }
 13342  
 13343  // SetPackState is a paid mutator transaction binding the contract method 0xb7f48211.
 13344  //
 13345  // Solidity: function setPackState(uint256 _packId, bool _mintable) returns()
 13346  func (_StickerType *StickerTypeSession) SetPackState(_packId *big.Int, _mintable bool) (*types.Transaction, error) {
 13347  	return _StickerType.Contract.SetPackState(&_StickerType.TransactOpts, _packId, _mintable)
 13348  }
 13349  
 13350  // SetPackState is a paid mutator transaction binding the contract method 0xb7f48211.
 13351  //
 13352  // Solidity: function setPackState(uint256 _packId, bool _mintable) returns()
 13353  func (_StickerType *StickerTypeTransactorSession) SetPackState(_packId *big.Int, _mintable bool) (*types.Transaction, error) {
 13354  	return _StickerType.Contract.SetPackState(&_StickerType.TransactOpts, _packId, _mintable)
 13355  }
 13356  
 13357  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 13358  //
 13359  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
 13360  func (_StickerType *StickerTypeTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13361  	return _StickerType.contract.Transact(opts, "transferFrom", from, to, tokenId)
 13362  }
 13363  
 13364  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 13365  //
 13366  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
 13367  func (_StickerType *StickerTypeSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13368  	return _StickerType.Contract.TransferFrom(&_StickerType.TransactOpts, from, to, tokenId)
 13369  }
 13370  
 13371  // TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
 13372  //
 13373  // Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
 13374  func (_StickerType *StickerTypeTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
 13375  	return _StickerType.Contract.TransferFrom(&_StickerType.TransactOpts, from, to, tokenId)
 13376  }
 13377  
 13378  // StickerTypeApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the StickerType contract.
 13379  type StickerTypeApprovalIterator struct {
 13380  	Event *StickerTypeApproval // Event containing the contract specifics and raw log
 13381  
 13382  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 13383  	event    string              // Event name to use for unpacking event data
 13384  
 13385  	logs chan types.Log        // Log channel receiving the found contract events
 13386  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 13387  	done bool                  // Whether the subscription completed delivering logs
 13388  	fail error                 // Occurred error to stop iteration
 13389  }
 13390  
 13391  // Next advances the iterator to the subsequent event, returning whether there
 13392  // are any more events found. In case of a retrieval or parsing error, false is
 13393  // returned and Error() can be queried for the exact failure.
 13394  func (it *StickerTypeApprovalIterator) Next() bool {
 13395  	// If the iterator failed, stop iterating
 13396  	if it.fail != nil {
 13397  		return false
 13398  	}
 13399  	// If the iterator completed, deliver directly whatever's available
 13400  	if it.done {
 13401  		select {
 13402  		case log := <-it.logs:
 13403  			it.Event = new(StickerTypeApproval)
 13404  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13405  				it.fail = err
 13406  				return false
 13407  			}
 13408  			it.Event.Raw = log
 13409  			return true
 13410  
 13411  		default:
 13412  			return false
 13413  		}
 13414  	}
 13415  	// Iterator still in progress, wait for either a data or an error event
 13416  	select {
 13417  	case log := <-it.logs:
 13418  		it.Event = new(StickerTypeApproval)
 13419  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13420  			it.fail = err
 13421  			return false
 13422  		}
 13423  		it.Event.Raw = log
 13424  		return true
 13425  
 13426  	case err := <-it.sub.Err():
 13427  		it.done = true
 13428  		it.fail = err
 13429  		return it.Next()
 13430  	}
 13431  }
 13432  
 13433  // Error returns any retrieval or parsing error occurred during filtering.
 13434  func (it *StickerTypeApprovalIterator) Error() error {
 13435  	return it.fail
 13436  }
 13437  
 13438  // Close terminates the iteration process, releasing any pending underlying
 13439  // resources.
 13440  func (it *StickerTypeApprovalIterator) Close() error {
 13441  	it.sub.Unsubscribe()
 13442  	return nil
 13443  }
 13444  
 13445  // StickerTypeApproval represents a Approval event raised by the StickerType contract.
 13446  type StickerTypeApproval struct {
 13447  	Owner    common.Address
 13448  	Approved common.Address
 13449  	TokenId  *big.Int
 13450  	Raw      types.Log // Blockchain specific contextual infos
 13451  }
 13452  
 13453  // FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 13454  //
 13455  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
 13456  func (_StickerType *StickerTypeFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*StickerTypeApprovalIterator, error) {
 13457  
 13458  	var ownerRule []interface{}
 13459  	for _, ownerItem := range owner {
 13460  		ownerRule = append(ownerRule, ownerItem)
 13461  	}
 13462  	var approvedRule []interface{}
 13463  	for _, approvedItem := range approved {
 13464  		approvedRule = append(approvedRule, approvedItem)
 13465  	}
 13466  	var tokenIdRule []interface{}
 13467  	for _, tokenIdItem := range tokenId {
 13468  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 13469  	}
 13470  
 13471  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
 13472  	if err != nil {
 13473  		return nil, err
 13474  	}
 13475  	return &StickerTypeApprovalIterator{contract: _StickerType.contract, event: "Approval", logs: logs, sub: sub}, nil
 13476  }
 13477  
 13478  // WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 13479  //
 13480  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
 13481  func (_StickerType *StickerTypeFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *StickerTypeApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {
 13482  
 13483  	var ownerRule []interface{}
 13484  	for _, ownerItem := range owner {
 13485  		ownerRule = append(ownerRule, ownerItem)
 13486  	}
 13487  	var approvedRule []interface{}
 13488  	for _, approvedItem := range approved {
 13489  		approvedRule = append(approvedRule, approvedItem)
 13490  	}
 13491  	var tokenIdRule []interface{}
 13492  	for _, tokenIdItem := range tokenId {
 13493  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 13494  	}
 13495  
 13496  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
 13497  	if err != nil {
 13498  		return nil, err
 13499  	}
 13500  	return event.NewSubscription(func(quit <-chan struct{}) error {
 13501  		defer sub.Unsubscribe()
 13502  		for {
 13503  			select {
 13504  			case log := <-logs:
 13505  				// New log arrived, parse the event and forward to the user
 13506  				event := new(StickerTypeApproval)
 13507  				if err := _StickerType.contract.UnpackLog(event, "Approval", log); err != nil {
 13508  					return err
 13509  				}
 13510  				event.Raw = log
 13511  
 13512  				select {
 13513  				case sink <- event:
 13514  				case err := <-sub.Err():
 13515  					return err
 13516  				case <-quit:
 13517  					return nil
 13518  				}
 13519  			case err := <-sub.Err():
 13520  				return err
 13521  			case <-quit:
 13522  				return nil
 13523  			}
 13524  		}
 13525  	}), nil
 13526  }
 13527  
 13528  // ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
 13529  //
 13530  // Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
 13531  func (_StickerType *StickerTypeFilterer) ParseApproval(log types.Log) (*StickerTypeApproval, error) {
 13532  	event := new(StickerTypeApproval)
 13533  	if err := _StickerType.contract.UnpackLog(event, "Approval", log); err != nil {
 13534  		return nil, err
 13535  	}
 13536  	event.Raw = log
 13537  	return event, nil
 13538  }
 13539  
 13540  // StickerTypeApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the StickerType contract.
 13541  type StickerTypeApprovalForAllIterator struct {
 13542  	Event *StickerTypeApprovalForAll // Event containing the contract specifics and raw log
 13543  
 13544  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 13545  	event    string              // Event name to use for unpacking event data
 13546  
 13547  	logs chan types.Log        // Log channel receiving the found contract events
 13548  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 13549  	done bool                  // Whether the subscription completed delivering logs
 13550  	fail error                 // Occurred error to stop iteration
 13551  }
 13552  
 13553  // Next advances the iterator to the subsequent event, returning whether there
 13554  // are any more events found. In case of a retrieval or parsing error, false is
 13555  // returned and Error() can be queried for the exact failure.
 13556  func (it *StickerTypeApprovalForAllIterator) Next() bool {
 13557  	// If the iterator failed, stop iterating
 13558  	if it.fail != nil {
 13559  		return false
 13560  	}
 13561  	// If the iterator completed, deliver directly whatever's available
 13562  	if it.done {
 13563  		select {
 13564  		case log := <-it.logs:
 13565  			it.Event = new(StickerTypeApprovalForAll)
 13566  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13567  				it.fail = err
 13568  				return false
 13569  			}
 13570  			it.Event.Raw = log
 13571  			return true
 13572  
 13573  		default:
 13574  			return false
 13575  		}
 13576  	}
 13577  	// Iterator still in progress, wait for either a data or an error event
 13578  	select {
 13579  	case log := <-it.logs:
 13580  		it.Event = new(StickerTypeApprovalForAll)
 13581  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13582  			it.fail = err
 13583  			return false
 13584  		}
 13585  		it.Event.Raw = log
 13586  		return true
 13587  
 13588  	case err := <-it.sub.Err():
 13589  		it.done = true
 13590  		it.fail = err
 13591  		return it.Next()
 13592  	}
 13593  }
 13594  
 13595  // Error returns any retrieval or parsing error occurred during filtering.
 13596  func (it *StickerTypeApprovalForAllIterator) Error() error {
 13597  	return it.fail
 13598  }
 13599  
 13600  // Close terminates the iteration process, releasing any pending underlying
 13601  // resources.
 13602  func (it *StickerTypeApprovalForAllIterator) Close() error {
 13603  	it.sub.Unsubscribe()
 13604  	return nil
 13605  }
 13606  
 13607  // StickerTypeApprovalForAll represents a ApprovalForAll event raised by the StickerType contract.
 13608  type StickerTypeApprovalForAll struct {
 13609  	Owner    common.Address
 13610  	Operator common.Address
 13611  	Approved bool
 13612  	Raw      types.Log // Blockchain specific contextual infos
 13613  }
 13614  
 13615  // FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
 13616  //
 13617  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
 13618  func (_StickerType *StickerTypeFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*StickerTypeApprovalForAllIterator, error) {
 13619  
 13620  	var ownerRule []interface{}
 13621  	for _, ownerItem := range owner {
 13622  		ownerRule = append(ownerRule, ownerItem)
 13623  	}
 13624  	var operatorRule []interface{}
 13625  	for _, operatorItem := range operator {
 13626  		operatorRule = append(operatorRule, operatorItem)
 13627  	}
 13628  
 13629  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
 13630  	if err != nil {
 13631  		return nil, err
 13632  	}
 13633  	return &StickerTypeApprovalForAllIterator{contract: _StickerType.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
 13634  }
 13635  
 13636  // WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
 13637  //
 13638  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
 13639  func (_StickerType *StickerTypeFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *StickerTypeApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {
 13640  
 13641  	var ownerRule []interface{}
 13642  	for _, ownerItem := range owner {
 13643  		ownerRule = append(ownerRule, ownerItem)
 13644  	}
 13645  	var operatorRule []interface{}
 13646  	for _, operatorItem := range operator {
 13647  		operatorRule = append(operatorRule, operatorItem)
 13648  	}
 13649  
 13650  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
 13651  	if err != nil {
 13652  		return nil, err
 13653  	}
 13654  	return event.NewSubscription(func(quit <-chan struct{}) error {
 13655  		defer sub.Unsubscribe()
 13656  		for {
 13657  			select {
 13658  			case log := <-logs:
 13659  				// New log arrived, parse the event and forward to the user
 13660  				event := new(StickerTypeApprovalForAll)
 13661  				if err := _StickerType.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
 13662  					return err
 13663  				}
 13664  				event.Raw = log
 13665  
 13666  				select {
 13667  				case sink <- event:
 13668  				case err := <-sub.Err():
 13669  					return err
 13670  				case <-quit:
 13671  					return nil
 13672  				}
 13673  			case err := <-sub.Err():
 13674  				return err
 13675  			case <-quit:
 13676  				return nil
 13677  			}
 13678  		}
 13679  	}), nil
 13680  }
 13681  
 13682  // ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
 13683  //
 13684  // Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
 13685  func (_StickerType *StickerTypeFilterer) ParseApprovalForAll(log types.Log) (*StickerTypeApprovalForAll, error) {
 13686  	event := new(StickerTypeApprovalForAll)
 13687  	if err := _StickerType.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
 13688  		return nil, err
 13689  	}
 13690  	event.Raw = log
 13691  	return event, nil
 13692  }
 13693  
 13694  // StickerTypeCategorizedIterator is returned from FilterCategorized and is used to iterate over the raw logs and unpacked data for Categorized events raised by the StickerType contract.
 13695  type StickerTypeCategorizedIterator struct {
 13696  	Event *StickerTypeCategorized // Event containing the contract specifics and raw log
 13697  
 13698  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 13699  	event    string              // Event name to use for unpacking event data
 13700  
 13701  	logs chan types.Log        // Log channel receiving the found contract events
 13702  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 13703  	done bool                  // Whether the subscription completed delivering logs
 13704  	fail error                 // Occurred error to stop iteration
 13705  }
 13706  
 13707  // Next advances the iterator to the subsequent event, returning whether there
 13708  // are any more events found. In case of a retrieval or parsing error, false is
 13709  // returned and Error() can be queried for the exact failure.
 13710  func (it *StickerTypeCategorizedIterator) Next() bool {
 13711  	// If the iterator failed, stop iterating
 13712  	if it.fail != nil {
 13713  		return false
 13714  	}
 13715  	// If the iterator completed, deliver directly whatever's available
 13716  	if it.done {
 13717  		select {
 13718  		case log := <-it.logs:
 13719  			it.Event = new(StickerTypeCategorized)
 13720  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13721  				it.fail = err
 13722  				return false
 13723  			}
 13724  			it.Event.Raw = log
 13725  			return true
 13726  
 13727  		default:
 13728  			return false
 13729  		}
 13730  	}
 13731  	// Iterator still in progress, wait for either a data or an error event
 13732  	select {
 13733  	case log := <-it.logs:
 13734  		it.Event = new(StickerTypeCategorized)
 13735  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13736  			it.fail = err
 13737  			return false
 13738  		}
 13739  		it.Event.Raw = log
 13740  		return true
 13741  
 13742  	case err := <-it.sub.Err():
 13743  		it.done = true
 13744  		it.fail = err
 13745  		return it.Next()
 13746  	}
 13747  }
 13748  
 13749  // Error returns any retrieval or parsing error occurred during filtering.
 13750  func (it *StickerTypeCategorizedIterator) Error() error {
 13751  	return it.fail
 13752  }
 13753  
 13754  // Close terminates the iteration process, releasing any pending underlying
 13755  // resources.
 13756  func (it *StickerTypeCategorizedIterator) Close() error {
 13757  	it.sub.Unsubscribe()
 13758  	return nil
 13759  }
 13760  
 13761  // StickerTypeCategorized represents a Categorized event raised by the StickerType contract.
 13762  type StickerTypeCategorized struct {
 13763  	Category [4]byte
 13764  	PackId   *big.Int
 13765  	Raw      types.Log // Blockchain specific contextual infos
 13766  }
 13767  
 13768  // FilterCategorized is a free log retrieval operation binding the contract event 0x74186c4c4ee368ea5564982241efb7357014b52d6e195d026bc4fdfaa112691b.
 13769  //
 13770  // Solidity: event Categorized(bytes4 indexed category, uint256 indexed packId)
 13771  func (_StickerType *StickerTypeFilterer) FilterCategorized(opts *bind.FilterOpts, category [][4]byte, packId []*big.Int) (*StickerTypeCategorizedIterator, error) {
 13772  
 13773  	var categoryRule []interface{}
 13774  	for _, categoryItem := range category {
 13775  		categoryRule = append(categoryRule, categoryItem)
 13776  	}
 13777  	var packIdRule []interface{}
 13778  	for _, packIdItem := range packId {
 13779  		packIdRule = append(packIdRule, packIdItem)
 13780  	}
 13781  
 13782  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "Categorized", categoryRule, packIdRule)
 13783  	if err != nil {
 13784  		return nil, err
 13785  	}
 13786  	return &StickerTypeCategorizedIterator{contract: _StickerType.contract, event: "Categorized", logs: logs, sub: sub}, nil
 13787  }
 13788  
 13789  // WatchCategorized is a free log subscription operation binding the contract event 0x74186c4c4ee368ea5564982241efb7357014b52d6e195d026bc4fdfaa112691b.
 13790  //
 13791  // Solidity: event Categorized(bytes4 indexed category, uint256 indexed packId)
 13792  func (_StickerType *StickerTypeFilterer) WatchCategorized(opts *bind.WatchOpts, sink chan<- *StickerTypeCategorized, category [][4]byte, packId []*big.Int) (event.Subscription, error) {
 13793  
 13794  	var categoryRule []interface{}
 13795  	for _, categoryItem := range category {
 13796  		categoryRule = append(categoryRule, categoryItem)
 13797  	}
 13798  	var packIdRule []interface{}
 13799  	for _, packIdItem := range packId {
 13800  		packIdRule = append(packIdRule, packIdItem)
 13801  	}
 13802  
 13803  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "Categorized", categoryRule, packIdRule)
 13804  	if err != nil {
 13805  		return nil, err
 13806  	}
 13807  	return event.NewSubscription(func(quit <-chan struct{}) error {
 13808  		defer sub.Unsubscribe()
 13809  		for {
 13810  			select {
 13811  			case log := <-logs:
 13812  				// New log arrived, parse the event and forward to the user
 13813  				event := new(StickerTypeCategorized)
 13814  				if err := _StickerType.contract.UnpackLog(event, "Categorized", log); err != nil {
 13815  					return err
 13816  				}
 13817  				event.Raw = log
 13818  
 13819  				select {
 13820  				case sink <- event:
 13821  				case err := <-sub.Err():
 13822  					return err
 13823  				case <-quit:
 13824  					return nil
 13825  				}
 13826  			case err := <-sub.Err():
 13827  				return err
 13828  			case <-quit:
 13829  				return nil
 13830  			}
 13831  		}
 13832  	}), nil
 13833  }
 13834  
 13835  // ParseCategorized is a log parse operation binding the contract event 0x74186c4c4ee368ea5564982241efb7357014b52d6e195d026bc4fdfaa112691b.
 13836  //
 13837  // Solidity: event Categorized(bytes4 indexed category, uint256 indexed packId)
 13838  func (_StickerType *StickerTypeFilterer) ParseCategorized(log types.Log) (*StickerTypeCategorized, error) {
 13839  	event := new(StickerTypeCategorized)
 13840  	if err := _StickerType.contract.UnpackLog(event, "Categorized", log); err != nil {
 13841  		return nil, err
 13842  	}
 13843  	event.Raw = log
 13844  	return event, nil
 13845  }
 13846  
 13847  // StickerTypeClaimedTokensIterator is returned from FilterClaimedTokens and is used to iterate over the raw logs and unpacked data for ClaimedTokens events raised by the StickerType contract.
 13848  type StickerTypeClaimedTokensIterator struct {
 13849  	Event *StickerTypeClaimedTokens // Event containing the contract specifics and raw log
 13850  
 13851  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 13852  	event    string              // Event name to use for unpacking event data
 13853  
 13854  	logs chan types.Log        // Log channel receiving the found contract events
 13855  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 13856  	done bool                  // Whether the subscription completed delivering logs
 13857  	fail error                 // Occurred error to stop iteration
 13858  }
 13859  
 13860  // Next advances the iterator to the subsequent event, returning whether there
 13861  // are any more events found. In case of a retrieval or parsing error, false is
 13862  // returned and Error() can be queried for the exact failure.
 13863  func (it *StickerTypeClaimedTokensIterator) Next() bool {
 13864  	// If the iterator failed, stop iterating
 13865  	if it.fail != nil {
 13866  		return false
 13867  	}
 13868  	// If the iterator completed, deliver directly whatever's available
 13869  	if it.done {
 13870  		select {
 13871  		case log := <-it.logs:
 13872  			it.Event = new(StickerTypeClaimedTokens)
 13873  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13874  				it.fail = err
 13875  				return false
 13876  			}
 13877  			it.Event.Raw = log
 13878  			return true
 13879  
 13880  		default:
 13881  			return false
 13882  		}
 13883  	}
 13884  	// Iterator still in progress, wait for either a data or an error event
 13885  	select {
 13886  	case log := <-it.logs:
 13887  		it.Event = new(StickerTypeClaimedTokens)
 13888  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 13889  			it.fail = err
 13890  			return false
 13891  		}
 13892  		it.Event.Raw = log
 13893  		return true
 13894  
 13895  	case err := <-it.sub.Err():
 13896  		it.done = true
 13897  		it.fail = err
 13898  		return it.Next()
 13899  	}
 13900  }
 13901  
 13902  // Error returns any retrieval or parsing error occurred during filtering.
 13903  func (it *StickerTypeClaimedTokensIterator) Error() error {
 13904  	return it.fail
 13905  }
 13906  
 13907  // Close terminates the iteration process, releasing any pending underlying
 13908  // resources.
 13909  func (it *StickerTypeClaimedTokensIterator) Close() error {
 13910  	it.sub.Unsubscribe()
 13911  	return nil
 13912  }
 13913  
 13914  // StickerTypeClaimedTokens represents a ClaimedTokens event raised by the StickerType contract.
 13915  type StickerTypeClaimedTokens struct {
 13916  	Token      common.Address
 13917  	Controller common.Address
 13918  	Amount     *big.Int
 13919  	Raw        types.Log // Blockchain specific contextual infos
 13920  }
 13921  
 13922  // FilterClaimedTokens is a free log retrieval operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 13923  //
 13924  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 13925  func (_StickerType *StickerTypeFilterer) FilterClaimedTokens(opts *bind.FilterOpts, _token []common.Address, _controller []common.Address) (*StickerTypeClaimedTokensIterator, error) {
 13926  
 13927  	var _tokenRule []interface{}
 13928  	for _, _tokenItem := range _token {
 13929  		_tokenRule = append(_tokenRule, _tokenItem)
 13930  	}
 13931  	var _controllerRule []interface{}
 13932  	for _, _controllerItem := range _controller {
 13933  		_controllerRule = append(_controllerRule, _controllerItem)
 13934  	}
 13935  
 13936  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
 13937  	if err != nil {
 13938  		return nil, err
 13939  	}
 13940  	return &StickerTypeClaimedTokensIterator{contract: _StickerType.contract, event: "ClaimedTokens", logs: logs, sub: sub}, nil
 13941  }
 13942  
 13943  // WatchClaimedTokens is a free log subscription operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 13944  //
 13945  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 13946  func (_StickerType *StickerTypeFilterer) WatchClaimedTokens(opts *bind.WatchOpts, sink chan<- *StickerTypeClaimedTokens, _token []common.Address, _controller []common.Address) (event.Subscription, error) {
 13947  
 13948  	var _tokenRule []interface{}
 13949  	for _, _tokenItem := range _token {
 13950  		_tokenRule = append(_tokenRule, _tokenItem)
 13951  	}
 13952  	var _controllerRule []interface{}
 13953  	for _, _controllerItem := range _controller {
 13954  		_controllerRule = append(_controllerRule, _controllerItem)
 13955  	}
 13956  
 13957  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
 13958  	if err != nil {
 13959  		return nil, err
 13960  	}
 13961  	return event.NewSubscription(func(quit <-chan struct{}) error {
 13962  		defer sub.Unsubscribe()
 13963  		for {
 13964  			select {
 13965  			case log := <-logs:
 13966  				// New log arrived, parse the event and forward to the user
 13967  				event := new(StickerTypeClaimedTokens)
 13968  				if err := _StickerType.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
 13969  					return err
 13970  				}
 13971  				event.Raw = log
 13972  
 13973  				select {
 13974  				case sink <- event:
 13975  				case err := <-sub.Err():
 13976  					return err
 13977  				case <-quit:
 13978  					return nil
 13979  				}
 13980  			case err := <-sub.Err():
 13981  				return err
 13982  			case <-quit:
 13983  				return nil
 13984  			}
 13985  		}
 13986  	}), nil
 13987  }
 13988  
 13989  // ParseClaimedTokens is a log parse operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 13990  //
 13991  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 13992  func (_StickerType *StickerTypeFilterer) ParseClaimedTokens(log types.Log) (*StickerTypeClaimedTokens, error) {
 13993  	event := new(StickerTypeClaimedTokens)
 13994  	if err := _StickerType.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
 13995  		return nil, err
 13996  	}
 13997  	event.Raw = log
 13998  	return event, nil
 13999  }
 14000  
 14001  // StickerTypeContenthashChangedIterator is returned from FilterContenthashChanged and is used to iterate over the raw logs and unpacked data for ContenthashChanged events raised by the StickerType contract.
 14002  type StickerTypeContenthashChangedIterator struct {
 14003  	Event *StickerTypeContenthashChanged // Event containing the contract specifics and raw log
 14004  
 14005  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14006  	event    string              // Event name to use for unpacking event data
 14007  
 14008  	logs chan types.Log        // Log channel receiving the found contract events
 14009  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14010  	done bool                  // Whether the subscription completed delivering logs
 14011  	fail error                 // Occurred error to stop iteration
 14012  }
 14013  
 14014  // Next advances the iterator to the subsequent event, returning whether there
 14015  // are any more events found. In case of a retrieval or parsing error, false is
 14016  // returned and Error() can be queried for the exact failure.
 14017  func (it *StickerTypeContenthashChangedIterator) Next() bool {
 14018  	// If the iterator failed, stop iterating
 14019  	if it.fail != nil {
 14020  		return false
 14021  	}
 14022  	// If the iterator completed, deliver directly whatever's available
 14023  	if it.done {
 14024  		select {
 14025  		case log := <-it.logs:
 14026  			it.Event = new(StickerTypeContenthashChanged)
 14027  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14028  				it.fail = err
 14029  				return false
 14030  			}
 14031  			it.Event.Raw = log
 14032  			return true
 14033  
 14034  		default:
 14035  			return false
 14036  		}
 14037  	}
 14038  	// Iterator still in progress, wait for either a data or an error event
 14039  	select {
 14040  	case log := <-it.logs:
 14041  		it.Event = new(StickerTypeContenthashChanged)
 14042  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14043  			it.fail = err
 14044  			return false
 14045  		}
 14046  		it.Event.Raw = log
 14047  		return true
 14048  
 14049  	case err := <-it.sub.Err():
 14050  		it.done = true
 14051  		it.fail = err
 14052  		return it.Next()
 14053  	}
 14054  }
 14055  
 14056  // Error returns any retrieval or parsing error occurred during filtering.
 14057  func (it *StickerTypeContenthashChangedIterator) Error() error {
 14058  	return it.fail
 14059  }
 14060  
 14061  // Close terminates the iteration process, releasing any pending underlying
 14062  // resources.
 14063  func (it *StickerTypeContenthashChangedIterator) Close() error {
 14064  	it.sub.Unsubscribe()
 14065  	return nil
 14066  }
 14067  
 14068  // StickerTypeContenthashChanged represents a ContenthashChanged event raised by the StickerType contract.
 14069  type StickerTypeContenthashChanged struct {
 14070  	Packid      *big.Int
 14071  	Contenthash []byte
 14072  	Raw         types.Log // Blockchain specific contextual infos
 14073  }
 14074  
 14075  // FilterContenthashChanged is a free log retrieval operation binding the contract event 0x6fd3fdff55b0feb6f24c338494b36929368cd564825688c741d54b8d7fa7beb9.
 14076  //
 14077  // Solidity: event ContenthashChanged(uint256 indexed packid, bytes contenthash)
 14078  func (_StickerType *StickerTypeFilterer) FilterContenthashChanged(opts *bind.FilterOpts, packid []*big.Int) (*StickerTypeContenthashChangedIterator, error) {
 14079  
 14080  	var packidRule []interface{}
 14081  	for _, packidItem := range packid {
 14082  		packidRule = append(packidRule, packidItem)
 14083  	}
 14084  
 14085  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "ContenthashChanged", packidRule)
 14086  	if err != nil {
 14087  		return nil, err
 14088  	}
 14089  	return &StickerTypeContenthashChangedIterator{contract: _StickerType.contract, event: "ContenthashChanged", logs: logs, sub: sub}, nil
 14090  }
 14091  
 14092  // WatchContenthashChanged is a free log subscription operation binding the contract event 0x6fd3fdff55b0feb6f24c338494b36929368cd564825688c741d54b8d7fa7beb9.
 14093  //
 14094  // Solidity: event ContenthashChanged(uint256 indexed packid, bytes contenthash)
 14095  func (_StickerType *StickerTypeFilterer) WatchContenthashChanged(opts *bind.WatchOpts, sink chan<- *StickerTypeContenthashChanged, packid []*big.Int) (event.Subscription, error) {
 14096  
 14097  	var packidRule []interface{}
 14098  	for _, packidItem := range packid {
 14099  		packidRule = append(packidRule, packidItem)
 14100  	}
 14101  
 14102  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "ContenthashChanged", packidRule)
 14103  	if err != nil {
 14104  		return nil, err
 14105  	}
 14106  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14107  		defer sub.Unsubscribe()
 14108  		for {
 14109  			select {
 14110  			case log := <-logs:
 14111  				// New log arrived, parse the event and forward to the user
 14112  				event := new(StickerTypeContenthashChanged)
 14113  				if err := _StickerType.contract.UnpackLog(event, "ContenthashChanged", log); err != nil {
 14114  					return err
 14115  				}
 14116  				event.Raw = log
 14117  
 14118  				select {
 14119  				case sink <- event:
 14120  				case err := <-sub.Err():
 14121  					return err
 14122  				case <-quit:
 14123  					return nil
 14124  				}
 14125  			case err := <-sub.Err():
 14126  				return err
 14127  			case <-quit:
 14128  				return nil
 14129  			}
 14130  		}
 14131  	}), nil
 14132  }
 14133  
 14134  // ParseContenthashChanged is a log parse operation binding the contract event 0x6fd3fdff55b0feb6f24c338494b36929368cd564825688c741d54b8d7fa7beb9.
 14135  //
 14136  // Solidity: event ContenthashChanged(uint256 indexed packid, bytes contenthash)
 14137  func (_StickerType *StickerTypeFilterer) ParseContenthashChanged(log types.Log) (*StickerTypeContenthashChanged, error) {
 14138  	event := new(StickerTypeContenthashChanged)
 14139  	if err := _StickerType.contract.UnpackLog(event, "ContenthashChanged", log); err != nil {
 14140  		return nil, err
 14141  	}
 14142  	event.Raw = log
 14143  	return event, nil
 14144  }
 14145  
 14146  // StickerTypeMintabilityChangedIterator is returned from FilterMintabilityChanged and is used to iterate over the raw logs and unpacked data for MintabilityChanged events raised by the StickerType contract.
 14147  type StickerTypeMintabilityChangedIterator struct {
 14148  	Event *StickerTypeMintabilityChanged // Event containing the contract specifics and raw log
 14149  
 14150  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14151  	event    string              // Event name to use for unpacking event data
 14152  
 14153  	logs chan types.Log        // Log channel receiving the found contract events
 14154  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14155  	done bool                  // Whether the subscription completed delivering logs
 14156  	fail error                 // Occurred error to stop iteration
 14157  }
 14158  
 14159  // Next advances the iterator to the subsequent event, returning whether there
 14160  // are any more events found. In case of a retrieval or parsing error, false is
 14161  // returned and Error() can be queried for the exact failure.
 14162  func (it *StickerTypeMintabilityChangedIterator) Next() bool {
 14163  	// If the iterator failed, stop iterating
 14164  	if it.fail != nil {
 14165  		return false
 14166  	}
 14167  	// If the iterator completed, deliver directly whatever's available
 14168  	if it.done {
 14169  		select {
 14170  		case log := <-it.logs:
 14171  			it.Event = new(StickerTypeMintabilityChanged)
 14172  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14173  				it.fail = err
 14174  				return false
 14175  			}
 14176  			it.Event.Raw = log
 14177  			return true
 14178  
 14179  		default:
 14180  			return false
 14181  		}
 14182  	}
 14183  	// Iterator still in progress, wait for either a data or an error event
 14184  	select {
 14185  	case log := <-it.logs:
 14186  		it.Event = new(StickerTypeMintabilityChanged)
 14187  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14188  			it.fail = err
 14189  			return false
 14190  		}
 14191  		it.Event.Raw = log
 14192  		return true
 14193  
 14194  	case err := <-it.sub.Err():
 14195  		it.done = true
 14196  		it.fail = err
 14197  		return it.Next()
 14198  	}
 14199  }
 14200  
 14201  // Error returns any retrieval or parsing error occurred during filtering.
 14202  func (it *StickerTypeMintabilityChangedIterator) Error() error {
 14203  	return it.fail
 14204  }
 14205  
 14206  // Close terminates the iteration process, releasing any pending underlying
 14207  // resources.
 14208  func (it *StickerTypeMintabilityChangedIterator) Close() error {
 14209  	it.sub.Unsubscribe()
 14210  	return nil
 14211  }
 14212  
 14213  // StickerTypeMintabilityChanged represents a MintabilityChanged event raised by the StickerType contract.
 14214  type StickerTypeMintabilityChanged struct {
 14215  	PackId   *big.Int
 14216  	Mintable bool
 14217  	Raw      types.Log // Blockchain specific contextual infos
 14218  }
 14219  
 14220  // FilterMintabilityChanged is a free log retrieval operation binding the contract event 0x7a5b9103727f29409c14d2581e9710a1648b1354e667e1c803d4bda045159660.
 14221  //
 14222  // Solidity: event MintabilityChanged(uint256 indexed packId, bool mintable)
 14223  func (_StickerType *StickerTypeFilterer) FilterMintabilityChanged(opts *bind.FilterOpts, packId []*big.Int) (*StickerTypeMintabilityChangedIterator, error) {
 14224  
 14225  	var packIdRule []interface{}
 14226  	for _, packIdItem := range packId {
 14227  		packIdRule = append(packIdRule, packIdItem)
 14228  	}
 14229  
 14230  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "MintabilityChanged", packIdRule)
 14231  	if err != nil {
 14232  		return nil, err
 14233  	}
 14234  	return &StickerTypeMintabilityChangedIterator{contract: _StickerType.contract, event: "MintabilityChanged", logs: logs, sub: sub}, nil
 14235  }
 14236  
 14237  // WatchMintabilityChanged is a free log subscription operation binding the contract event 0x7a5b9103727f29409c14d2581e9710a1648b1354e667e1c803d4bda045159660.
 14238  //
 14239  // Solidity: event MintabilityChanged(uint256 indexed packId, bool mintable)
 14240  func (_StickerType *StickerTypeFilterer) WatchMintabilityChanged(opts *bind.WatchOpts, sink chan<- *StickerTypeMintabilityChanged, packId []*big.Int) (event.Subscription, error) {
 14241  
 14242  	var packIdRule []interface{}
 14243  	for _, packIdItem := range packId {
 14244  		packIdRule = append(packIdRule, packIdItem)
 14245  	}
 14246  
 14247  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "MintabilityChanged", packIdRule)
 14248  	if err != nil {
 14249  		return nil, err
 14250  	}
 14251  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14252  		defer sub.Unsubscribe()
 14253  		for {
 14254  			select {
 14255  			case log := <-logs:
 14256  				// New log arrived, parse the event and forward to the user
 14257  				event := new(StickerTypeMintabilityChanged)
 14258  				if err := _StickerType.contract.UnpackLog(event, "MintabilityChanged", log); err != nil {
 14259  					return err
 14260  				}
 14261  				event.Raw = log
 14262  
 14263  				select {
 14264  				case sink <- event:
 14265  				case err := <-sub.Err():
 14266  					return err
 14267  				case <-quit:
 14268  					return nil
 14269  				}
 14270  			case err := <-sub.Err():
 14271  				return err
 14272  			case <-quit:
 14273  				return nil
 14274  			}
 14275  		}
 14276  	}), nil
 14277  }
 14278  
 14279  // ParseMintabilityChanged is a log parse operation binding the contract event 0x7a5b9103727f29409c14d2581e9710a1648b1354e667e1c803d4bda045159660.
 14280  //
 14281  // Solidity: event MintabilityChanged(uint256 indexed packId, bool mintable)
 14282  func (_StickerType *StickerTypeFilterer) ParseMintabilityChanged(log types.Log) (*StickerTypeMintabilityChanged, error) {
 14283  	event := new(StickerTypeMintabilityChanged)
 14284  	if err := _StickerType.contract.UnpackLog(event, "MintabilityChanged", log); err != nil {
 14285  		return nil, err
 14286  	}
 14287  	event.Raw = log
 14288  	return event, nil
 14289  }
 14290  
 14291  // StickerTypeNewControllerIterator is returned from FilterNewController and is used to iterate over the raw logs and unpacked data for NewController events raised by the StickerType contract.
 14292  type StickerTypeNewControllerIterator struct {
 14293  	Event *StickerTypeNewController // Event containing the contract specifics and raw log
 14294  
 14295  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14296  	event    string              // Event name to use for unpacking event data
 14297  
 14298  	logs chan types.Log        // Log channel receiving the found contract events
 14299  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14300  	done bool                  // Whether the subscription completed delivering logs
 14301  	fail error                 // Occurred error to stop iteration
 14302  }
 14303  
 14304  // Next advances the iterator to the subsequent event, returning whether there
 14305  // are any more events found. In case of a retrieval or parsing error, false is
 14306  // returned and Error() can be queried for the exact failure.
 14307  func (it *StickerTypeNewControllerIterator) Next() bool {
 14308  	// If the iterator failed, stop iterating
 14309  	if it.fail != nil {
 14310  		return false
 14311  	}
 14312  	// If the iterator completed, deliver directly whatever's available
 14313  	if it.done {
 14314  		select {
 14315  		case log := <-it.logs:
 14316  			it.Event = new(StickerTypeNewController)
 14317  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14318  				it.fail = err
 14319  				return false
 14320  			}
 14321  			it.Event.Raw = log
 14322  			return true
 14323  
 14324  		default:
 14325  			return false
 14326  		}
 14327  	}
 14328  	// Iterator still in progress, wait for either a data or an error event
 14329  	select {
 14330  	case log := <-it.logs:
 14331  		it.Event = new(StickerTypeNewController)
 14332  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14333  			it.fail = err
 14334  			return false
 14335  		}
 14336  		it.Event.Raw = log
 14337  		return true
 14338  
 14339  	case err := <-it.sub.Err():
 14340  		it.done = true
 14341  		it.fail = err
 14342  		return it.Next()
 14343  	}
 14344  }
 14345  
 14346  // Error returns any retrieval or parsing error occurred during filtering.
 14347  func (it *StickerTypeNewControllerIterator) Error() error {
 14348  	return it.fail
 14349  }
 14350  
 14351  // Close terminates the iteration process, releasing any pending underlying
 14352  // resources.
 14353  func (it *StickerTypeNewControllerIterator) Close() error {
 14354  	it.sub.Unsubscribe()
 14355  	return nil
 14356  }
 14357  
 14358  // StickerTypeNewController represents a NewController event raised by the StickerType contract.
 14359  type StickerTypeNewController struct {
 14360  	Controller common.Address
 14361  	Raw        types.Log // Blockchain specific contextual infos
 14362  }
 14363  
 14364  // FilterNewController is a free log retrieval operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 14365  //
 14366  // Solidity: event NewController(address controller)
 14367  func (_StickerType *StickerTypeFilterer) FilterNewController(opts *bind.FilterOpts) (*StickerTypeNewControllerIterator, error) {
 14368  
 14369  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "NewController")
 14370  	if err != nil {
 14371  		return nil, err
 14372  	}
 14373  	return &StickerTypeNewControllerIterator{contract: _StickerType.contract, event: "NewController", logs: logs, sub: sub}, nil
 14374  }
 14375  
 14376  // WatchNewController is a free log subscription operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 14377  //
 14378  // Solidity: event NewController(address controller)
 14379  func (_StickerType *StickerTypeFilterer) WatchNewController(opts *bind.WatchOpts, sink chan<- *StickerTypeNewController) (event.Subscription, error) {
 14380  
 14381  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "NewController")
 14382  	if err != nil {
 14383  		return nil, err
 14384  	}
 14385  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14386  		defer sub.Unsubscribe()
 14387  		for {
 14388  			select {
 14389  			case log := <-logs:
 14390  				// New log arrived, parse the event and forward to the user
 14391  				event := new(StickerTypeNewController)
 14392  				if err := _StickerType.contract.UnpackLog(event, "NewController", log); err != nil {
 14393  					return err
 14394  				}
 14395  				event.Raw = log
 14396  
 14397  				select {
 14398  				case sink <- event:
 14399  				case err := <-sub.Err():
 14400  					return err
 14401  				case <-quit:
 14402  					return nil
 14403  				}
 14404  			case err := <-sub.Err():
 14405  				return err
 14406  			case <-quit:
 14407  				return nil
 14408  			}
 14409  		}
 14410  	}), nil
 14411  }
 14412  
 14413  // ParseNewController is a log parse operation binding the contract event 0xe253457d9ad994ca9682fc3bbc38c890dca73a2d5ecee3809e548bac8b00d7c6.
 14414  //
 14415  // Solidity: event NewController(address controller)
 14416  func (_StickerType *StickerTypeFilterer) ParseNewController(log types.Log) (*StickerTypeNewController, error) {
 14417  	event := new(StickerTypeNewController)
 14418  	if err := _StickerType.contract.UnpackLog(event, "NewController", log); err != nil {
 14419  		return nil, err
 14420  	}
 14421  	event.Raw = log
 14422  	return event, nil
 14423  }
 14424  
 14425  // StickerTypePriceChangedIterator is returned from FilterPriceChanged and is used to iterate over the raw logs and unpacked data for PriceChanged events raised by the StickerType contract.
 14426  type StickerTypePriceChangedIterator struct {
 14427  	Event *StickerTypePriceChanged // Event containing the contract specifics and raw log
 14428  
 14429  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14430  	event    string              // Event name to use for unpacking event data
 14431  
 14432  	logs chan types.Log        // Log channel receiving the found contract events
 14433  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14434  	done bool                  // Whether the subscription completed delivering logs
 14435  	fail error                 // Occurred error to stop iteration
 14436  }
 14437  
 14438  // Next advances the iterator to the subsequent event, returning whether there
 14439  // are any more events found. In case of a retrieval or parsing error, false is
 14440  // returned and Error() can be queried for the exact failure.
 14441  func (it *StickerTypePriceChangedIterator) Next() bool {
 14442  	// If the iterator failed, stop iterating
 14443  	if it.fail != nil {
 14444  		return false
 14445  	}
 14446  	// If the iterator completed, deliver directly whatever's available
 14447  	if it.done {
 14448  		select {
 14449  		case log := <-it.logs:
 14450  			it.Event = new(StickerTypePriceChanged)
 14451  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14452  				it.fail = err
 14453  				return false
 14454  			}
 14455  			it.Event.Raw = log
 14456  			return true
 14457  
 14458  		default:
 14459  			return false
 14460  		}
 14461  	}
 14462  	// Iterator still in progress, wait for either a data or an error event
 14463  	select {
 14464  	case log := <-it.logs:
 14465  		it.Event = new(StickerTypePriceChanged)
 14466  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14467  			it.fail = err
 14468  			return false
 14469  		}
 14470  		it.Event.Raw = log
 14471  		return true
 14472  
 14473  	case err := <-it.sub.Err():
 14474  		it.done = true
 14475  		it.fail = err
 14476  		return it.Next()
 14477  	}
 14478  }
 14479  
 14480  // Error returns any retrieval or parsing error occurred during filtering.
 14481  func (it *StickerTypePriceChangedIterator) Error() error {
 14482  	return it.fail
 14483  }
 14484  
 14485  // Close terminates the iteration process, releasing any pending underlying
 14486  // resources.
 14487  func (it *StickerTypePriceChangedIterator) Close() error {
 14488  	it.sub.Unsubscribe()
 14489  	return nil
 14490  }
 14491  
 14492  // StickerTypePriceChanged represents a PriceChanged event raised by the StickerType contract.
 14493  type StickerTypePriceChanged struct {
 14494  	PackId    *big.Int
 14495  	DataPrice *big.Int
 14496  	Raw       types.Log // Blockchain specific contextual infos
 14497  }
 14498  
 14499  // FilterPriceChanged is a free log retrieval operation binding the contract event 0x8aa4fa52648a6d15edce8a179c792c86f3719d0cc3c572cf90f91948f0f2cb68.
 14500  //
 14501  // Solidity: event PriceChanged(uint256 indexed packId, uint256 dataPrice)
 14502  func (_StickerType *StickerTypeFilterer) FilterPriceChanged(opts *bind.FilterOpts, packId []*big.Int) (*StickerTypePriceChangedIterator, error) {
 14503  
 14504  	var packIdRule []interface{}
 14505  	for _, packIdItem := range packId {
 14506  		packIdRule = append(packIdRule, packIdItem)
 14507  	}
 14508  
 14509  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "PriceChanged", packIdRule)
 14510  	if err != nil {
 14511  		return nil, err
 14512  	}
 14513  	return &StickerTypePriceChangedIterator{contract: _StickerType.contract, event: "PriceChanged", logs: logs, sub: sub}, nil
 14514  }
 14515  
 14516  // WatchPriceChanged is a free log subscription operation binding the contract event 0x8aa4fa52648a6d15edce8a179c792c86f3719d0cc3c572cf90f91948f0f2cb68.
 14517  //
 14518  // Solidity: event PriceChanged(uint256 indexed packId, uint256 dataPrice)
 14519  func (_StickerType *StickerTypeFilterer) WatchPriceChanged(opts *bind.WatchOpts, sink chan<- *StickerTypePriceChanged, packId []*big.Int) (event.Subscription, error) {
 14520  
 14521  	var packIdRule []interface{}
 14522  	for _, packIdItem := range packId {
 14523  		packIdRule = append(packIdRule, packIdItem)
 14524  	}
 14525  
 14526  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "PriceChanged", packIdRule)
 14527  	if err != nil {
 14528  		return nil, err
 14529  	}
 14530  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14531  		defer sub.Unsubscribe()
 14532  		for {
 14533  			select {
 14534  			case log := <-logs:
 14535  				// New log arrived, parse the event and forward to the user
 14536  				event := new(StickerTypePriceChanged)
 14537  				if err := _StickerType.contract.UnpackLog(event, "PriceChanged", log); err != nil {
 14538  					return err
 14539  				}
 14540  				event.Raw = log
 14541  
 14542  				select {
 14543  				case sink <- event:
 14544  				case err := <-sub.Err():
 14545  					return err
 14546  				case <-quit:
 14547  					return nil
 14548  				}
 14549  			case err := <-sub.Err():
 14550  				return err
 14551  			case <-quit:
 14552  				return nil
 14553  			}
 14554  		}
 14555  	}), nil
 14556  }
 14557  
 14558  // ParsePriceChanged is a log parse operation binding the contract event 0x8aa4fa52648a6d15edce8a179c792c86f3719d0cc3c572cf90f91948f0f2cb68.
 14559  //
 14560  // Solidity: event PriceChanged(uint256 indexed packId, uint256 dataPrice)
 14561  func (_StickerType *StickerTypeFilterer) ParsePriceChanged(log types.Log) (*StickerTypePriceChanged, error) {
 14562  	event := new(StickerTypePriceChanged)
 14563  	if err := _StickerType.contract.UnpackLog(event, "PriceChanged", log); err != nil {
 14564  		return nil, err
 14565  	}
 14566  	event.Raw = log
 14567  	return event, nil
 14568  }
 14569  
 14570  // StickerTypeRegisterIterator is returned from FilterRegister and is used to iterate over the raw logs and unpacked data for Register events raised by the StickerType contract.
 14571  type StickerTypeRegisterIterator struct {
 14572  	Event *StickerTypeRegister // Event containing the contract specifics and raw log
 14573  
 14574  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14575  	event    string              // Event name to use for unpacking event data
 14576  
 14577  	logs chan types.Log        // Log channel receiving the found contract events
 14578  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14579  	done bool                  // Whether the subscription completed delivering logs
 14580  	fail error                 // Occurred error to stop iteration
 14581  }
 14582  
 14583  // Next advances the iterator to the subsequent event, returning whether there
 14584  // are any more events found. In case of a retrieval or parsing error, false is
 14585  // returned and Error() can be queried for the exact failure.
 14586  func (it *StickerTypeRegisterIterator) Next() bool {
 14587  	// If the iterator failed, stop iterating
 14588  	if it.fail != nil {
 14589  		return false
 14590  	}
 14591  	// If the iterator completed, deliver directly whatever's available
 14592  	if it.done {
 14593  		select {
 14594  		case log := <-it.logs:
 14595  			it.Event = new(StickerTypeRegister)
 14596  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14597  				it.fail = err
 14598  				return false
 14599  			}
 14600  			it.Event.Raw = log
 14601  			return true
 14602  
 14603  		default:
 14604  			return false
 14605  		}
 14606  	}
 14607  	// Iterator still in progress, wait for either a data or an error event
 14608  	select {
 14609  	case log := <-it.logs:
 14610  		it.Event = new(StickerTypeRegister)
 14611  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14612  			it.fail = err
 14613  			return false
 14614  		}
 14615  		it.Event.Raw = log
 14616  		return true
 14617  
 14618  	case err := <-it.sub.Err():
 14619  		it.done = true
 14620  		it.fail = err
 14621  		return it.Next()
 14622  	}
 14623  }
 14624  
 14625  // Error returns any retrieval or parsing error occurred during filtering.
 14626  func (it *StickerTypeRegisterIterator) Error() error {
 14627  	return it.fail
 14628  }
 14629  
 14630  // Close terminates the iteration process, releasing any pending underlying
 14631  // resources.
 14632  func (it *StickerTypeRegisterIterator) Close() error {
 14633  	it.sub.Unsubscribe()
 14634  	return nil
 14635  }
 14636  
 14637  // StickerTypeRegister represents a Register event raised by the StickerType contract.
 14638  type StickerTypeRegister struct {
 14639  	PackId      *big.Int
 14640  	DataPrice   *big.Int
 14641  	Contenthash []byte
 14642  	Mintable    bool
 14643  	Raw         types.Log // Blockchain specific contextual infos
 14644  }
 14645  
 14646  // FilterRegister is a free log retrieval operation binding the contract event 0x8304dd8a0ecd1927e64564792f1147f0aca02ba211e48c2981bf7244a9877975.
 14647  //
 14648  // Solidity: event Register(uint256 indexed packId, uint256 dataPrice, bytes contenthash, bool mintable)
 14649  func (_StickerType *StickerTypeFilterer) FilterRegister(opts *bind.FilterOpts, packId []*big.Int) (*StickerTypeRegisterIterator, error) {
 14650  
 14651  	var packIdRule []interface{}
 14652  	for _, packIdItem := range packId {
 14653  		packIdRule = append(packIdRule, packIdItem)
 14654  	}
 14655  
 14656  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "Register", packIdRule)
 14657  	if err != nil {
 14658  		return nil, err
 14659  	}
 14660  	return &StickerTypeRegisterIterator{contract: _StickerType.contract, event: "Register", logs: logs, sub: sub}, nil
 14661  }
 14662  
 14663  // WatchRegister is a free log subscription operation binding the contract event 0x8304dd8a0ecd1927e64564792f1147f0aca02ba211e48c2981bf7244a9877975.
 14664  //
 14665  // Solidity: event Register(uint256 indexed packId, uint256 dataPrice, bytes contenthash, bool mintable)
 14666  func (_StickerType *StickerTypeFilterer) WatchRegister(opts *bind.WatchOpts, sink chan<- *StickerTypeRegister, packId []*big.Int) (event.Subscription, error) {
 14667  
 14668  	var packIdRule []interface{}
 14669  	for _, packIdItem := range packId {
 14670  		packIdRule = append(packIdRule, packIdItem)
 14671  	}
 14672  
 14673  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "Register", packIdRule)
 14674  	if err != nil {
 14675  		return nil, err
 14676  	}
 14677  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14678  		defer sub.Unsubscribe()
 14679  		for {
 14680  			select {
 14681  			case log := <-logs:
 14682  				// New log arrived, parse the event and forward to the user
 14683  				event := new(StickerTypeRegister)
 14684  				if err := _StickerType.contract.UnpackLog(event, "Register", log); err != nil {
 14685  					return err
 14686  				}
 14687  				event.Raw = log
 14688  
 14689  				select {
 14690  				case sink <- event:
 14691  				case err := <-sub.Err():
 14692  					return err
 14693  				case <-quit:
 14694  					return nil
 14695  				}
 14696  			case err := <-sub.Err():
 14697  				return err
 14698  			case <-quit:
 14699  				return nil
 14700  			}
 14701  		}
 14702  	}), nil
 14703  }
 14704  
 14705  // ParseRegister is a log parse operation binding the contract event 0x8304dd8a0ecd1927e64564792f1147f0aca02ba211e48c2981bf7244a9877975.
 14706  //
 14707  // Solidity: event Register(uint256 indexed packId, uint256 dataPrice, bytes contenthash, bool mintable)
 14708  func (_StickerType *StickerTypeFilterer) ParseRegister(log types.Log) (*StickerTypeRegister, error) {
 14709  	event := new(StickerTypeRegister)
 14710  	if err := _StickerType.contract.UnpackLog(event, "Register", log); err != nil {
 14711  		return nil, err
 14712  	}
 14713  	event.Raw = log
 14714  	return event, nil
 14715  }
 14716  
 14717  // StickerTypeTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the StickerType contract.
 14718  type StickerTypeTransferIterator struct {
 14719  	Event *StickerTypeTransfer // Event containing the contract specifics and raw log
 14720  
 14721  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14722  	event    string              // Event name to use for unpacking event data
 14723  
 14724  	logs chan types.Log        // Log channel receiving the found contract events
 14725  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14726  	done bool                  // Whether the subscription completed delivering logs
 14727  	fail error                 // Occurred error to stop iteration
 14728  }
 14729  
 14730  // Next advances the iterator to the subsequent event, returning whether there
 14731  // are any more events found. In case of a retrieval or parsing error, false is
 14732  // returned and Error() can be queried for the exact failure.
 14733  func (it *StickerTypeTransferIterator) Next() bool {
 14734  	// If the iterator failed, stop iterating
 14735  	if it.fail != nil {
 14736  		return false
 14737  	}
 14738  	// If the iterator completed, deliver directly whatever's available
 14739  	if it.done {
 14740  		select {
 14741  		case log := <-it.logs:
 14742  			it.Event = new(StickerTypeTransfer)
 14743  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14744  				it.fail = err
 14745  				return false
 14746  			}
 14747  			it.Event.Raw = log
 14748  			return true
 14749  
 14750  		default:
 14751  			return false
 14752  		}
 14753  	}
 14754  	// Iterator still in progress, wait for either a data or an error event
 14755  	select {
 14756  	case log := <-it.logs:
 14757  		it.Event = new(StickerTypeTransfer)
 14758  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14759  			it.fail = err
 14760  			return false
 14761  		}
 14762  		it.Event.Raw = log
 14763  		return true
 14764  
 14765  	case err := <-it.sub.Err():
 14766  		it.done = true
 14767  		it.fail = err
 14768  		return it.Next()
 14769  	}
 14770  }
 14771  
 14772  // Error returns any retrieval or parsing error occurred during filtering.
 14773  func (it *StickerTypeTransferIterator) Error() error {
 14774  	return it.fail
 14775  }
 14776  
 14777  // Close terminates the iteration process, releasing any pending underlying
 14778  // resources.
 14779  func (it *StickerTypeTransferIterator) Close() error {
 14780  	it.sub.Unsubscribe()
 14781  	return nil
 14782  }
 14783  
 14784  // StickerTypeTransfer represents a Transfer event raised by the StickerType contract.
 14785  type StickerTypeTransfer struct {
 14786  	From    common.Address
 14787  	To      common.Address
 14788  	TokenId *big.Int
 14789  	Raw     types.Log // Blockchain specific contextual infos
 14790  }
 14791  
 14792  // FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 14793  //
 14794  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
 14795  func (_StickerType *StickerTypeFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*StickerTypeTransferIterator, error) {
 14796  
 14797  	var fromRule []interface{}
 14798  	for _, fromItem := range from {
 14799  		fromRule = append(fromRule, fromItem)
 14800  	}
 14801  	var toRule []interface{}
 14802  	for _, toItem := range to {
 14803  		toRule = append(toRule, toItem)
 14804  	}
 14805  	var tokenIdRule []interface{}
 14806  	for _, tokenIdItem := range tokenId {
 14807  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 14808  	}
 14809  
 14810  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
 14811  	if err != nil {
 14812  		return nil, err
 14813  	}
 14814  	return &StickerTypeTransferIterator{contract: _StickerType.contract, event: "Transfer", logs: logs, sub: sub}, nil
 14815  }
 14816  
 14817  // WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 14818  //
 14819  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
 14820  func (_StickerType *StickerTypeFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *StickerTypeTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {
 14821  
 14822  	var fromRule []interface{}
 14823  	for _, fromItem := range from {
 14824  		fromRule = append(fromRule, fromItem)
 14825  	}
 14826  	var toRule []interface{}
 14827  	for _, toItem := range to {
 14828  		toRule = append(toRule, toItem)
 14829  	}
 14830  	var tokenIdRule []interface{}
 14831  	for _, tokenIdItem := range tokenId {
 14832  		tokenIdRule = append(tokenIdRule, tokenIdItem)
 14833  	}
 14834  
 14835  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
 14836  	if err != nil {
 14837  		return nil, err
 14838  	}
 14839  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14840  		defer sub.Unsubscribe()
 14841  		for {
 14842  			select {
 14843  			case log := <-logs:
 14844  				// New log arrived, parse the event and forward to the user
 14845  				event := new(StickerTypeTransfer)
 14846  				if err := _StickerType.contract.UnpackLog(event, "Transfer", log); err != nil {
 14847  					return err
 14848  				}
 14849  				event.Raw = log
 14850  
 14851  				select {
 14852  				case sink <- event:
 14853  				case err := <-sub.Err():
 14854  					return err
 14855  				case <-quit:
 14856  					return nil
 14857  				}
 14858  			case err := <-sub.Err():
 14859  				return err
 14860  			case <-quit:
 14861  				return nil
 14862  			}
 14863  		}
 14864  	}), nil
 14865  }
 14866  
 14867  // ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
 14868  //
 14869  // Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
 14870  func (_StickerType *StickerTypeFilterer) ParseTransfer(log types.Log) (*StickerTypeTransfer, error) {
 14871  	event := new(StickerTypeTransfer)
 14872  	if err := _StickerType.contract.UnpackLog(event, "Transfer", log); err != nil {
 14873  		return nil, err
 14874  	}
 14875  	event.Raw = log
 14876  	return event, nil
 14877  }
 14878  
 14879  // StickerTypeUncategorizedIterator is returned from FilterUncategorized and is used to iterate over the raw logs and unpacked data for Uncategorized events raised by the StickerType contract.
 14880  type StickerTypeUncategorizedIterator struct {
 14881  	Event *StickerTypeUncategorized // Event containing the contract specifics and raw log
 14882  
 14883  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 14884  	event    string              // Event name to use for unpacking event data
 14885  
 14886  	logs chan types.Log        // Log channel receiving the found contract events
 14887  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 14888  	done bool                  // Whether the subscription completed delivering logs
 14889  	fail error                 // Occurred error to stop iteration
 14890  }
 14891  
 14892  // Next advances the iterator to the subsequent event, returning whether there
 14893  // are any more events found. In case of a retrieval or parsing error, false is
 14894  // returned and Error() can be queried for the exact failure.
 14895  func (it *StickerTypeUncategorizedIterator) Next() bool {
 14896  	// If the iterator failed, stop iterating
 14897  	if it.fail != nil {
 14898  		return false
 14899  	}
 14900  	// If the iterator completed, deliver directly whatever's available
 14901  	if it.done {
 14902  		select {
 14903  		case log := <-it.logs:
 14904  			it.Event = new(StickerTypeUncategorized)
 14905  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14906  				it.fail = err
 14907  				return false
 14908  			}
 14909  			it.Event.Raw = log
 14910  			return true
 14911  
 14912  		default:
 14913  			return false
 14914  		}
 14915  	}
 14916  	// Iterator still in progress, wait for either a data or an error event
 14917  	select {
 14918  	case log := <-it.logs:
 14919  		it.Event = new(StickerTypeUncategorized)
 14920  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 14921  			it.fail = err
 14922  			return false
 14923  		}
 14924  		it.Event.Raw = log
 14925  		return true
 14926  
 14927  	case err := <-it.sub.Err():
 14928  		it.done = true
 14929  		it.fail = err
 14930  		return it.Next()
 14931  	}
 14932  }
 14933  
 14934  // Error returns any retrieval or parsing error occurred during filtering.
 14935  func (it *StickerTypeUncategorizedIterator) Error() error {
 14936  	return it.fail
 14937  }
 14938  
 14939  // Close terminates the iteration process, releasing any pending underlying
 14940  // resources.
 14941  func (it *StickerTypeUncategorizedIterator) Close() error {
 14942  	it.sub.Unsubscribe()
 14943  	return nil
 14944  }
 14945  
 14946  // StickerTypeUncategorized represents a Uncategorized event raised by the StickerType contract.
 14947  type StickerTypeUncategorized struct {
 14948  	Category [4]byte
 14949  	PackId   *big.Int
 14950  	Raw      types.Log // Blockchain specific contextual infos
 14951  }
 14952  
 14953  // FilterUncategorized is a free log retrieval operation binding the contract event 0x9574a9d09dc883e69228a0eea15ed4da6e520b13cc84cca994c1787c234d78fe.
 14954  //
 14955  // Solidity: event Uncategorized(bytes4 indexed category, uint256 indexed packId)
 14956  func (_StickerType *StickerTypeFilterer) FilterUncategorized(opts *bind.FilterOpts, category [][4]byte, packId []*big.Int) (*StickerTypeUncategorizedIterator, error) {
 14957  
 14958  	var categoryRule []interface{}
 14959  	for _, categoryItem := range category {
 14960  		categoryRule = append(categoryRule, categoryItem)
 14961  	}
 14962  	var packIdRule []interface{}
 14963  	for _, packIdItem := range packId {
 14964  		packIdRule = append(packIdRule, packIdItem)
 14965  	}
 14966  
 14967  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "Uncategorized", categoryRule, packIdRule)
 14968  	if err != nil {
 14969  		return nil, err
 14970  	}
 14971  	return &StickerTypeUncategorizedIterator{contract: _StickerType.contract, event: "Uncategorized", logs: logs, sub: sub}, nil
 14972  }
 14973  
 14974  // WatchUncategorized is a free log subscription operation binding the contract event 0x9574a9d09dc883e69228a0eea15ed4da6e520b13cc84cca994c1787c234d78fe.
 14975  //
 14976  // Solidity: event Uncategorized(bytes4 indexed category, uint256 indexed packId)
 14977  func (_StickerType *StickerTypeFilterer) WatchUncategorized(opts *bind.WatchOpts, sink chan<- *StickerTypeUncategorized, category [][4]byte, packId []*big.Int) (event.Subscription, error) {
 14978  
 14979  	var categoryRule []interface{}
 14980  	for _, categoryItem := range category {
 14981  		categoryRule = append(categoryRule, categoryItem)
 14982  	}
 14983  	var packIdRule []interface{}
 14984  	for _, packIdItem := range packId {
 14985  		packIdRule = append(packIdRule, packIdItem)
 14986  	}
 14987  
 14988  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "Uncategorized", categoryRule, packIdRule)
 14989  	if err != nil {
 14990  		return nil, err
 14991  	}
 14992  	return event.NewSubscription(func(quit <-chan struct{}) error {
 14993  		defer sub.Unsubscribe()
 14994  		for {
 14995  			select {
 14996  			case log := <-logs:
 14997  				// New log arrived, parse the event and forward to the user
 14998  				event := new(StickerTypeUncategorized)
 14999  				if err := _StickerType.contract.UnpackLog(event, "Uncategorized", log); err != nil {
 15000  					return err
 15001  				}
 15002  				event.Raw = log
 15003  
 15004  				select {
 15005  				case sink <- event:
 15006  				case err := <-sub.Err():
 15007  					return err
 15008  				case <-quit:
 15009  					return nil
 15010  				}
 15011  			case err := <-sub.Err():
 15012  				return err
 15013  			case <-quit:
 15014  				return nil
 15015  			}
 15016  		}
 15017  	}), nil
 15018  }
 15019  
 15020  // ParseUncategorized is a log parse operation binding the contract event 0x9574a9d09dc883e69228a0eea15ed4da6e520b13cc84cca994c1787c234d78fe.
 15021  //
 15022  // Solidity: event Uncategorized(bytes4 indexed category, uint256 indexed packId)
 15023  func (_StickerType *StickerTypeFilterer) ParseUncategorized(log types.Log) (*StickerTypeUncategorized, error) {
 15024  	event := new(StickerTypeUncategorized)
 15025  	if err := _StickerType.contract.UnpackLog(event, "Uncategorized", log); err != nil {
 15026  		return nil, err
 15027  	}
 15028  	event.Raw = log
 15029  	return event, nil
 15030  }
 15031  
 15032  // StickerTypeUnregisterIterator is returned from FilterUnregister and is used to iterate over the raw logs and unpacked data for Unregister events raised by the StickerType contract.
 15033  type StickerTypeUnregisterIterator struct {
 15034  	Event *StickerTypeUnregister // Event containing the contract specifics and raw log
 15035  
 15036  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 15037  	event    string              // Event name to use for unpacking event data
 15038  
 15039  	logs chan types.Log        // Log channel receiving the found contract events
 15040  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 15041  	done bool                  // Whether the subscription completed delivering logs
 15042  	fail error                 // Occurred error to stop iteration
 15043  }
 15044  
 15045  // Next advances the iterator to the subsequent event, returning whether there
 15046  // are any more events found. In case of a retrieval or parsing error, false is
 15047  // returned and Error() can be queried for the exact failure.
 15048  func (it *StickerTypeUnregisterIterator) Next() bool {
 15049  	// If the iterator failed, stop iterating
 15050  	if it.fail != nil {
 15051  		return false
 15052  	}
 15053  	// If the iterator completed, deliver directly whatever's available
 15054  	if it.done {
 15055  		select {
 15056  		case log := <-it.logs:
 15057  			it.Event = new(StickerTypeUnregister)
 15058  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 15059  				it.fail = err
 15060  				return false
 15061  			}
 15062  			it.Event.Raw = log
 15063  			return true
 15064  
 15065  		default:
 15066  			return false
 15067  		}
 15068  	}
 15069  	// Iterator still in progress, wait for either a data or an error event
 15070  	select {
 15071  	case log := <-it.logs:
 15072  		it.Event = new(StickerTypeUnregister)
 15073  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 15074  			it.fail = err
 15075  			return false
 15076  		}
 15077  		it.Event.Raw = log
 15078  		return true
 15079  
 15080  	case err := <-it.sub.Err():
 15081  		it.done = true
 15082  		it.fail = err
 15083  		return it.Next()
 15084  	}
 15085  }
 15086  
 15087  // Error returns any retrieval or parsing error occurred during filtering.
 15088  func (it *StickerTypeUnregisterIterator) Error() error {
 15089  	return it.fail
 15090  }
 15091  
 15092  // Close terminates the iteration process, releasing any pending underlying
 15093  // resources.
 15094  func (it *StickerTypeUnregisterIterator) Close() error {
 15095  	it.sub.Unsubscribe()
 15096  	return nil
 15097  }
 15098  
 15099  // StickerTypeUnregister represents a Unregister event raised by the StickerType contract.
 15100  type StickerTypeUnregister struct {
 15101  	PackId *big.Int
 15102  	Raw    types.Log // Blockchain specific contextual infos
 15103  }
 15104  
 15105  // FilterUnregister is a free log retrieval operation binding the contract event 0x98f986773731debbbf041b73d7edaec62da3ff42b2116c45cd0001fb40ed9086.
 15106  //
 15107  // Solidity: event Unregister(uint256 indexed packId)
 15108  func (_StickerType *StickerTypeFilterer) FilterUnregister(opts *bind.FilterOpts, packId []*big.Int) (*StickerTypeUnregisterIterator, error) {
 15109  
 15110  	var packIdRule []interface{}
 15111  	for _, packIdItem := range packId {
 15112  		packIdRule = append(packIdRule, packIdItem)
 15113  	}
 15114  
 15115  	logs, sub, err := _StickerType.contract.FilterLogs(opts, "Unregister", packIdRule)
 15116  	if err != nil {
 15117  		return nil, err
 15118  	}
 15119  	return &StickerTypeUnregisterIterator{contract: _StickerType.contract, event: "Unregister", logs: logs, sub: sub}, nil
 15120  }
 15121  
 15122  // WatchUnregister is a free log subscription operation binding the contract event 0x98f986773731debbbf041b73d7edaec62da3ff42b2116c45cd0001fb40ed9086.
 15123  //
 15124  // Solidity: event Unregister(uint256 indexed packId)
 15125  func (_StickerType *StickerTypeFilterer) WatchUnregister(opts *bind.WatchOpts, sink chan<- *StickerTypeUnregister, packId []*big.Int) (event.Subscription, error) {
 15126  
 15127  	var packIdRule []interface{}
 15128  	for _, packIdItem := range packId {
 15129  		packIdRule = append(packIdRule, packIdItem)
 15130  	}
 15131  
 15132  	logs, sub, err := _StickerType.contract.WatchLogs(opts, "Unregister", packIdRule)
 15133  	if err != nil {
 15134  		return nil, err
 15135  	}
 15136  	return event.NewSubscription(func(quit <-chan struct{}) error {
 15137  		defer sub.Unsubscribe()
 15138  		for {
 15139  			select {
 15140  			case log := <-logs:
 15141  				// New log arrived, parse the event and forward to the user
 15142  				event := new(StickerTypeUnregister)
 15143  				if err := _StickerType.contract.UnpackLog(event, "Unregister", log); err != nil {
 15144  					return err
 15145  				}
 15146  				event.Raw = log
 15147  
 15148  				select {
 15149  				case sink <- event:
 15150  				case err := <-sub.Err():
 15151  					return err
 15152  				case <-quit:
 15153  					return nil
 15154  				}
 15155  			case err := <-sub.Err():
 15156  				return err
 15157  			case <-quit:
 15158  				return nil
 15159  			}
 15160  		}
 15161  	}), nil
 15162  }
 15163  
 15164  // ParseUnregister is a log parse operation binding the contract event 0x98f986773731debbbf041b73d7edaec62da3ff42b2116c45cd0001fb40ed9086.
 15165  //
 15166  // Solidity: event Unregister(uint256 indexed packId)
 15167  func (_StickerType *StickerTypeFilterer) ParseUnregister(log types.Log) (*StickerTypeUnregister, error) {
 15168  	event := new(StickerTypeUnregister)
 15169  	if err := _StickerType.contract.UnpackLog(event, "Unregister", log); err != nil {
 15170  		return nil, err
 15171  	}
 15172  	event.Raw = log
 15173  	return event, nil
 15174  }
 15175  
 15176  // TokenClaimerABI is the input ABI used to generate the binding from.
 15177  const TokenClaimerABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claimTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_token\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_controller\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ClaimedTokens\",\"type\":\"event\"}]"
 15178  
 15179  // TokenClaimerFuncSigs maps the 4-byte function signature to its string representation.
 15180  var TokenClaimerFuncSigs = map[string]string{
 15181  	"df8de3e7": "claimTokens(address)",
 15182  }
 15183  
 15184  // TokenClaimer is an auto generated Go binding around an Ethereum contract.
 15185  type TokenClaimer struct {
 15186  	TokenClaimerCaller     // Read-only binding to the contract
 15187  	TokenClaimerTransactor // Write-only binding to the contract
 15188  	TokenClaimerFilterer   // Log filterer for contract events
 15189  }
 15190  
 15191  // TokenClaimerCaller is an auto generated read-only Go binding around an Ethereum contract.
 15192  type TokenClaimerCaller struct {
 15193  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 15194  }
 15195  
 15196  // TokenClaimerTransactor is an auto generated write-only Go binding around an Ethereum contract.
 15197  type TokenClaimerTransactor struct {
 15198  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 15199  }
 15200  
 15201  // TokenClaimerFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
 15202  type TokenClaimerFilterer struct {
 15203  	contract *bind.BoundContract // Generic contract wrapper for the low level calls
 15204  }
 15205  
 15206  // TokenClaimerSession is an auto generated Go binding around an Ethereum contract,
 15207  // with pre-set call and transact options.
 15208  type TokenClaimerSession struct {
 15209  	Contract     *TokenClaimer     // Generic contract binding to set the session for
 15210  	CallOpts     bind.CallOpts     // Call options to use throughout this session
 15211  	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
 15212  }
 15213  
 15214  // TokenClaimerCallerSession is an auto generated read-only Go binding around an Ethereum contract,
 15215  // with pre-set call options.
 15216  type TokenClaimerCallerSession struct {
 15217  	Contract *TokenClaimerCaller // Generic contract caller binding to set the session for
 15218  	CallOpts bind.CallOpts       // Call options to use throughout this session
 15219  }
 15220  
 15221  // TokenClaimerTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
 15222  // with pre-set transact options.
 15223  type TokenClaimerTransactorSession struct {
 15224  	Contract     *TokenClaimerTransactor // Generic contract transactor binding to set the session for
 15225  	TransactOpts bind.TransactOpts       // Transaction auth options to use throughout this session
 15226  }
 15227  
 15228  // TokenClaimerRaw is an auto generated low-level Go binding around an Ethereum contract.
 15229  type TokenClaimerRaw struct {
 15230  	Contract *TokenClaimer // Generic contract binding to access the raw methods on
 15231  }
 15232  
 15233  // TokenClaimerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
 15234  type TokenClaimerCallerRaw struct {
 15235  	Contract *TokenClaimerCaller // Generic read-only contract binding to access the raw methods on
 15236  }
 15237  
 15238  // TokenClaimerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
 15239  type TokenClaimerTransactorRaw struct {
 15240  	Contract *TokenClaimerTransactor // Generic write-only contract binding to access the raw methods on
 15241  }
 15242  
 15243  // NewTokenClaimer creates a new instance of TokenClaimer, bound to a specific deployed contract.
 15244  func NewTokenClaimer(address common.Address, backend bind.ContractBackend) (*TokenClaimer, error) {
 15245  	contract, err := bindTokenClaimer(address, backend, backend, backend)
 15246  	if err != nil {
 15247  		return nil, err
 15248  	}
 15249  	return &TokenClaimer{TokenClaimerCaller: TokenClaimerCaller{contract: contract}, TokenClaimerTransactor: TokenClaimerTransactor{contract: contract}, TokenClaimerFilterer: TokenClaimerFilterer{contract: contract}}, nil
 15250  }
 15251  
 15252  // NewTokenClaimerCaller creates a new read-only instance of TokenClaimer, bound to a specific deployed contract.
 15253  func NewTokenClaimerCaller(address common.Address, caller bind.ContractCaller) (*TokenClaimerCaller, error) {
 15254  	contract, err := bindTokenClaimer(address, caller, nil, nil)
 15255  	if err != nil {
 15256  		return nil, err
 15257  	}
 15258  	return &TokenClaimerCaller{contract: contract}, nil
 15259  }
 15260  
 15261  // NewTokenClaimerTransactor creates a new write-only instance of TokenClaimer, bound to a specific deployed contract.
 15262  func NewTokenClaimerTransactor(address common.Address, transactor bind.ContractTransactor) (*TokenClaimerTransactor, error) {
 15263  	contract, err := bindTokenClaimer(address, nil, transactor, nil)
 15264  	if err != nil {
 15265  		return nil, err
 15266  	}
 15267  	return &TokenClaimerTransactor{contract: contract}, nil
 15268  }
 15269  
 15270  // NewTokenClaimerFilterer creates a new log filterer instance of TokenClaimer, bound to a specific deployed contract.
 15271  func NewTokenClaimerFilterer(address common.Address, filterer bind.ContractFilterer) (*TokenClaimerFilterer, error) {
 15272  	contract, err := bindTokenClaimer(address, nil, nil, filterer)
 15273  	if err != nil {
 15274  		return nil, err
 15275  	}
 15276  	return &TokenClaimerFilterer{contract: contract}, nil
 15277  }
 15278  
 15279  // bindTokenClaimer binds a generic wrapper to an already deployed contract.
 15280  func bindTokenClaimer(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
 15281  	parsed, err := abi.JSON(strings.NewReader(TokenClaimerABI))
 15282  	if err != nil {
 15283  		return nil, err
 15284  	}
 15285  	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
 15286  }
 15287  
 15288  // Call invokes the (constant) contract method with params as input values and
 15289  // sets the output to result. The result type might be a single field for simple
 15290  // returns, a slice of interfaces for anonymous returns and a struct for named
 15291  // returns.
 15292  func (_TokenClaimer *TokenClaimerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
 15293  	return _TokenClaimer.Contract.TokenClaimerCaller.contract.Call(opts, result, method, params...)
 15294  }
 15295  
 15296  // Transfer initiates a plain transaction to move funds to the contract, calling
 15297  // its default method if one is available.
 15298  func (_TokenClaimer *TokenClaimerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 15299  	return _TokenClaimer.Contract.TokenClaimerTransactor.contract.Transfer(opts)
 15300  }
 15301  
 15302  // Transact invokes the (paid) contract method with params as input values.
 15303  func (_TokenClaimer *TokenClaimerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 15304  	return _TokenClaimer.Contract.TokenClaimerTransactor.contract.Transact(opts, method, params...)
 15305  }
 15306  
 15307  // Call invokes the (constant) contract method with params as input values and
 15308  // sets the output to result. The result type might be a single field for simple
 15309  // returns, a slice of interfaces for anonymous returns and a struct for named
 15310  // returns.
 15311  func (_TokenClaimer *TokenClaimerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
 15312  	return _TokenClaimer.Contract.contract.Call(opts, result, method, params...)
 15313  }
 15314  
 15315  // Transfer initiates a plain transaction to move funds to the contract, calling
 15316  // its default method if one is available.
 15317  func (_TokenClaimer *TokenClaimerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
 15318  	return _TokenClaimer.Contract.contract.Transfer(opts)
 15319  }
 15320  
 15321  // Transact invokes the (paid) contract method with params as input values.
 15322  func (_TokenClaimer *TokenClaimerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
 15323  	return _TokenClaimer.Contract.contract.Transact(opts, method, params...)
 15324  }
 15325  
 15326  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 15327  //
 15328  // Solidity: function claimTokens(address _token) returns()
 15329  func (_TokenClaimer *TokenClaimerTransactor) ClaimTokens(opts *bind.TransactOpts, _token common.Address) (*types.Transaction, error) {
 15330  	return _TokenClaimer.contract.Transact(opts, "claimTokens", _token)
 15331  }
 15332  
 15333  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 15334  //
 15335  // Solidity: function claimTokens(address _token) returns()
 15336  func (_TokenClaimer *TokenClaimerSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
 15337  	return _TokenClaimer.Contract.ClaimTokens(&_TokenClaimer.TransactOpts, _token)
 15338  }
 15339  
 15340  // ClaimTokens is a paid mutator transaction binding the contract method 0xdf8de3e7.
 15341  //
 15342  // Solidity: function claimTokens(address _token) returns()
 15343  func (_TokenClaimer *TokenClaimerTransactorSession) ClaimTokens(_token common.Address) (*types.Transaction, error) {
 15344  	return _TokenClaimer.Contract.ClaimTokens(&_TokenClaimer.TransactOpts, _token)
 15345  }
 15346  
 15347  // TokenClaimerClaimedTokensIterator is returned from FilterClaimedTokens and is used to iterate over the raw logs and unpacked data for ClaimedTokens events raised by the TokenClaimer contract.
 15348  type TokenClaimerClaimedTokensIterator struct {
 15349  	Event *TokenClaimerClaimedTokens // Event containing the contract specifics and raw log
 15350  
 15351  	contract *bind.BoundContract // Generic contract to use for unpacking event data
 15352  	event    string              // Event name to use for unpacking event data
 15353  
 15354  	logs chan types.Log        // Log channel receiving the found contract events
 15355  	sub  ethereum.Subscription // Subscription for errors, completion and termination
 15356  	done bool                  // Whether the subscription completed delivering logs
 15357  	fail error                 // Occurred error to stop iteration
 15358  }
 15359  
 15360  // Next advances the iterator to the subsequent event, returning whether there
 15361  // are any more events found. In case of a retrieval or parsing error, false is
 15362  // returned and Error() can be queried for the exact failure.
 15363  func (it *TokenClaimerClaimedTokensIterator) Next() bool {
 15364  	// If the iterator failed, stop iterating
 15365  	if it.fail != nil {
 15366  		return false
 15367  	}
 15368  	// If the iterator completed, deliver directly whatever's available
 15369  	if it.done {
 15370  		select {
 15371  		case log := <-it.logs:
 15372  			it.Event = new(TokenClaimerClaimedTokens)
 15373  			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 15374  				it.fail = err
 15375  				return false
 15376  			}
 15377  			it.Event.Raw = log
 15378  			return true
 15379  
 15380  		default:
 15381  			return false
 15382  		}
 15383  	}
 15384  	// Iterator still in progress, wait for either a data or an error event
 15385  	select {
 15386  	case log := <-it.logs:
 15387  		it.Event = new(TokenClaimerClaimedTokens)
 15388  		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
 15389  			it.fail = err
 15390  			return false
 15391  		}
 15392  		it.Event.Raw = log
 15393  		return true
 15394  
 15395  	case err := <-it.sub.Err():
 15396  		it.done = true
 15397  		it.fail = err
 15398  		return it.Next()
 15399  	}
 15400  }
 15401  
 15402  // Error returns any retrieval or parsing error occurred during filtering.
 15403  func (it *TokenClaimerClaimedTokensIterator) Error() error {
 15404  	return it.fail
 15405  }
 15406  
 15407  // Close terminates the iteration process, releasing any pending underlying
 15408  // resources.
 15409  func (it *TokenClaimerClaimedTokensIterator) Close() error {
 15410  	it.sub.Unsubscribe()
 15411  	return nil
 15412  }
 15413  
 15414  // TokenClaimerClaimedTokens represents a ClaimedTokens event raised by the TokenClaimer contract.
 15415  type TokenClaimerClaimedTokens struct {
 15416  	Token      common.Address
 15417  	Controller common.Address
 15418  	Amount     *big.Int
 15419  	Raw        types.Log // Blockchain specific contextual infos
 15420  }
 15421  
 15422  // FilterClaimedTokens is a free log retrieval operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 15423  //
 15424  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 15425  func (_TokenClaimer *TokenClaimerFilterer) FilterClaimedTokens(opts *bind.FilterOpts, _token []common.Address, _controller []common.Address) (*TokenClaimerClaimedTokensIterator, error) {
 15426  
 15427  	var _tokenRule []interface{}
 15428  	for _, _tokenItem := range _token {
 15429  		_tokenRule = append(_tokenRule, _tokenItem)
 15430  	}
 15431  	var _controllerRule []interface{}
 15432  	for _, _controllerItem := range _controller {
 15433  		_controllerRule = append(_controllerRule, _controllerItem)
 15434  	}
 15435  
 15436  	logs, sub, err := _TokenClaimer.contract.FilterLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
 15437  	if err != nil {
 15438  		return nil, err
 15439  	}
 15440  	return &TokenClaimerClaimedTokensIterator{contract: _TokenClaimer.contract, event: "ClaimedTokens", logs: logs, sub: sub}, nil
 15441  }
 15442  
 15443  // WatchClaimedTokens is a free log subscription operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 15444  //
 15445  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 15446  func (_TokenClaimer *TokenClaimerFilterer) WatchClaimedTokens(opts *bind.WatchOpts, sink chan<- *TokenClaimerClaimedTokens, _token []common.Address, _controller []common.Address) (event.Subscription, error) {
 15447  
 15448  	var _tokenRule []interface{}
 15449  	for _, _tokenItem := range _token {
 15450  		_tokenRule = append(_tokenRule, _tokenItem)
 15451  	}
 15452  	var _controllerRule []interface{}
 15453  	for _, _controllerItem := range _controller {
 15454  		_controllerRule = append(_controllerRule, _controllerItem)
 15455  	}
 15456  
 15457  	logs, sub, err := _TokenClaimer.contract.WatchLogs(opts, "ClaimedTokens", _tokenRule, _controllerRule)
 15458  	if err != nil {
 15459  		return nil, err
 15460  	}
 15461  	return event.NewSubscription(func(quit <-chan struct{}) error {
 15462  		defer sub.Unsubscribe()
 15463  		for {
 15464  			select {
 15465  			case log := <-logs:
 15466  				// New log arrived, parse the event and forward to the user
 15467  				event := new(TokenClaimerClaimedTokens)
 15468  				if err := _TokenClaimer.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
 15469  					return err
 15470  				}
 15471  				event.Raw = log
 15472  
 15473  				select {
 15474  				case sink <- event:
 15475  				case err := <-sub.Err():
 15476  					return err
 15477  				case <-quit:
 15478  					return nil
 15479  				}
 15480  			case err := <-sub.Err():
 15481  				return err
 15482  			case <-quit:
 15483  				return nil
 15484  			}
 15485  		}
 15486  	}), nil
 15487  }
 15488  
 15489  // ParseClaimedTokens is a log parse operation binding the contract event 0xf931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c.
 15490  //
 15491  // Solidity: event ClaimedTokens(address indexed _token, address indexed _controller, uint256 _amount)
 15492  func (_TokenClaimer *TokenClaimerFilterer) ParseClaimedTokens(log types.Log) (*TokenClaimerClaimedTokens, error) {
 15493  	event := new(TokenClaimerClaimedTokens)
 15494  	if err := _TokenClaimer.contract.UnpackLog(event, "ClaimedTokens", log); err != nil {
 15495  		return nil, err
 15496  	}
 15497  	event.Raw = log
 15498  	return event, nil
 15499  }