// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package ulxly

import (
	"errors"
	"math/big"
	"strings"

	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)

// Reference imports to suppress errors if they are not otherwise used.
var (
	_ = errors.New
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
	_ = abi.ConvertType
)

// LegacyMetaData contains all meta data concerning the Legacy contract.
var LegacyMetaData = &bind.MetaData{
	ABI: "[{\"type\":\"function\",\"name\":\"activateEmergencyState\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeAsset\",\"inputs\":[{\"name\":\"destinationNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"permitData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeMessage\",\"inputs\":[{\"name\":\"destinationNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"forceUpdateGlobalExitRoot\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"metadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"claimAsset\",\"inputs\":[{\"name\":\"smtProof\",\"type\":\"bytes32[32]\",\"internalType\":\"bytes32[32]\"},{\"name\":\"index\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rollupExitRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"originNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"originTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destinationNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"metadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimMessage\",\"inputs\":[{\"name\":\"smtProof\",\"type\":\"bytes32[32]\",\"internalType\":\"bytes32[32]\"},{\"name\":\"index\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"mainnetExitRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rollupExitRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"originNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"originAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destinationNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"metadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimedBitMap\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deactivateEmergencyState\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLeafValue\",\"inputs\":[{\"name\":\"leafType\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"originNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"originAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destinationNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"metadataHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getTokenWrappedAddress\",\"inputs\":[{\"name\":\"originNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"originTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalExitRootManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBasePolygonZkEVMGlobalExitRoot\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_networkID\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_globalExitRootManager\",\"type\":\"address\",\"internalType\":\"contractIBasePolygonZkEVMGlobalExitRoot\"},{\"name\":\"_polygonZkEVMaddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isClaimed\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isEmergencyState\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"lastUpdatedDepositCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"networkID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"polygonZkEVMaddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"precalculatedWrapperAddress\",\"inputs\":[{\"name\":\"originNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"originTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tokenInfoToWrappedToken\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateGlobalExitRoot\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyMerkleProof\",\"inputs\":[{\"name\":\"leafHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"smtProof\",\"type\":\"bytes32[32]\",\"internalType\":\"bytes32[32]\"},{\"name\":\"index\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"wrappedTokenToTokenInfo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"originNetwork\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"originTokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"BridgeEvent\",\"inputs\":[{\"name\":\"leafType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"},{\"name\":\"originNetwork\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"originAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destinationNetwork\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"depositCount\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimEvent\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"originNetwork\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"originAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destinationAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EmergencyStateActivated\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EmergencyStateDeactivated\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewWrappedToken\",\"inputs\":[{\"name\":\"originNetwork\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"originTokenAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"wrappedTokenAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"metadata\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountDoesNotMatchMsgValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DestinationNetworkInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EtherTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalExitRootInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSmtProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MerkleTreeFull\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNotZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotValidAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotValidOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotValidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotValidSpender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEmergencyState\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyNotEmergencyState\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPolygonZkEVM\",\"inputs\":[]}]",
	Bin: "0x608060405234801561001057600080fd5b50614743806100206000396000f3fe6080604052600436106200015b5760003560e01c8063647c576c11620000c5578063be5831c71162000078578063be5831c7146200045a578063cd5865791462000480578063d02103ca1462000497578063dbc1697614620004c0578063ee25560b14620004d8578063fb570834146200050957600080fd5b8063647c576c146200033f57806379e2cf97146200036457806381b1c174146200037c5780639e34070f14620003b6578063aaa13cc214620003fb578063bab161bf146200042057600080fd5b80632d2c9d94116200011e5780632d2c9d9414620002255780632dfdf0b5146200024a578063318aee3d146200027157806334ac9cf214620002e05780633ae0504714620003025780633e197043146200031a57600080fd5b806315064c9614620001605780632072f6c5146200019157806322e95f2c14620001ab578063240ff37814620001e95780632cffd02e1462000200575b600080fd5b3480156200016d57600080fd5b506068546200017c9060ff1681565b60405190151581526020015b60405180910390f35b3480156200019e57600080fd5b50620001a96200052e565b005b348015620001b857600080fd5b50620001d0620001ca36600462002424565b62000566565b6040516001600160a01b03909116815260200162000188565b620001a9620001fa366004620024bb565b620005b9565b3480156200020d57600080fd5b50620001a96200021f36600462002552565b620006e0565b3480156200023257600080fd5b50620001a96200024436600462002552565b62000ae5565b3480156200025757600080fd5b506200026260535481565b60405190815260200162000188565b3480156200027e57600080fd5b50620002bb6200029036600462002638565b606b6020526000908152604090205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b0390911660208301520162000188565b348015620002ed57600080fd5b50606c54620001d0906001600160a01b031681565b3480156200030f57600080fd5b506200026262000c34565b3480156200032757600080fd5b5062000262620003393660046200266f565b62000d1a565b3480156200034c57600080fd5b50620001a96200035e366004620026f9565b62000da7565b3480156200037157600080fd5b50620001a962000f24565b3480156200038957600080fd5b50620001d06200039b36600462002749565b606a602052600090815260409020546001600160a01b031681565b348015620003c357600080fd5b506200017c620003d536600462002749565b600881901c600090815260696020526040902054600160ff9092169190911b9081161490565b3480156200040857600080fd5b50620001d06200041a36600462002763565b62000f48565b3480156200042d57600080fd5b506068546200044490610100900463ffffffff1681565b60405163ffffffff909116815260200162000188565b3480156200046757600080fd5b506068546200044490600160c81b900463ffffffff1681565b620001a96200049136600462002817565b6200105f565b348015620004a457600080fd5b50606854620001d090600160281b90046001600160a01b031681565b348015620004cd57600080fd5b50620001a9620013f7565b348015620004e557600080fd5b5062000262620004f736600462002749565b60696020526000908152604090205481565b3480156200051657600080fd5b506200017c62000528366004620028b9565b6200142d565b606c546001600160a01b031633146200055a5760405163e2e8106b60e01b815260040160405180910390fd5b6200056462001516565b565b6000606a600084846040516020016200058192919062002906565b60408051601f19818403018152918152815160209283012083529082019290925201600020546001600160a01b031690505b92915050565b60685460ff1615620005de57604051630bc011ff60e21b815260040160405180910390fd5b60685463ffffffff868116610100909204161480620006045750600263ffffffff861610155b1562000623576040516302caf51760e11b815260040160405180910390fd5b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b6001606860019054906101000a900463ffffffff16338888348888605354604051620006799998979695949392919062002959565b60405180910390a1620006c8620006c26001606860019054906101000a900463ffffffff16338989348989604051620006b4929190620029c8565b604051809103902062000d1a565b62001573565b8215620006d957620006d962001671565b5050505050565b60685460ff16156200070557604051630bc011ff60e21b815260040160405180910390fd5b6200071c8b8b8b8b8b8b8b8b8b8b8b600062001709565b6001600160a01b038616620007c557604080516000808252602082019092526001600160a01b03861690859060405162000757919062002a14565b60006040518083038185875af1925050503d806000811462000796576040519150601f19603f3d011682016040523d82523d6000602084013e6200079b565b606091505b5050905080620007be57604051630ce8f45160e31b815260040160405180910390fd5b5062000a97565b60685463ffffffff610100909104811690881603620007fa57620007f46001600160a01b038716858562001887565b62000a97565b600087876040516020016200081192919062002906565b60408051601f1981840301815291815281516020928301206000818152606a9093529120549091506001600160a01b03168062000a2f57600080806200085a8688018862002aed565b9250925092506000858484846040516200087490620023e8565b620008829392919062002b91565b8190604051809103906000f5905080158015620008a3573d6000803e3d6000fd5b506040516340c10f1960e01b81526001600160a01b038c81166004830152602482018c9052919250908216906340c10f1990604401600060405180830381600087803b158015620008f357600080fd5b505af115801562000908573d6000803e3d6000fd5b5050505080606a600088815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180604001604052808e63ffffffff1681526020018d6001600160a01b0316815250606b6000836001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154816001600160a01b0302191690836001600160a01b031602179055509050507f490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a398d8d838b8b60405162000a1d95949392919062002bce565b60405180910390a15050505062000a94565b6040516340c10f1960e01b81526001600160a01b038781166004830152602482018790528216906340c10f1990604401600060405180830381600087803b15801562000a7a57600080fd5b505af115801562000a8f573d6000803e3d6000fd5b505050505b50505b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838a8888878760405162000ad095949392919062002c09565b60405180910390a15050505050505050505050565b60685460ff161562000b0a57604051630bc011ff60e21b815260040160405180910390fd5b62000b218b8b8b8b8b8b8b8b8b8b8b600162001709565b6000846001600160a01b031684888a868660405160240162000b47949392919062002c40565b60408051601f198184030181529181526020820180516001600160e01b0316630c035af960e11b1790525162000b7e919062002a14565b60006040518083038185875af1925050503d806000811462000bbd576040519150601f19603f3d011682016040523d82523d6000602084013e62000bc2565b606091505b505090508062000be5576040516337e391c360e01b815260040160405180910390fd5b7f25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe275459838b8989888860405162000c1e95949392919062002c09565b60405180910390a1505050505050505050505050565b605354600090819081805b602081101562000d11578083901c60011660010362000ca2576033816020811062000c6e5762000c6e62002c7d565b0154604080516020810192909252810185905260600160405160208183030381529060405280519060200120935062000ccf565b60408051602081018690529081018390526060016040516020818303038152906040528051906020012093505b6040805160208101849052908101839052606001604051602081830303815290604052805190602001209150808062000d089062002ca9565b91505062000c3f565b50919392505050565b6040516001600160f81b031960f889901b1660208201526001600160e01b031960e088811b821660218401526001600160601b0319606089811b821660258601529188901b909216603984015285901b16603d8201526051810183905260718101829052600090609101604051602081830303815290604052805190602001209050979650505050505050565b600054610100900460ff161580801562000dc85750600054600160ff909116105b8062000de45750303b15801562000de4575060005460ff166001145b62000e4d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000e71576000805461ff0019166101001790555b60688054610100600160c81b03191661010063ffffffff87160265010000000000600160c81b03191617600160281b6001600160a01b038681169190910291909117909155606c80546001600160a01b03191691841691909117905562000ed7620018ec565b801562000f1e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b605354606854600160c81b900463ffffffff16101562000564576200056462001671565b600080888860405160200162000f6092919062002906565b604051602081830303815290604052805190602001209050600060ff60f81b30836040518060200162000f9390620023e8565b601f1982820381018352601f90910116604081905262000fc0908d908d908d908d908d9060200162002cc5565b60408051601f198184030181529082905262000fe0929160200162002d06565b604051602081830303815290604052805190602001206040516020016200103994939291906001600160f81b031994909416845260609290921b6001600160601b03191660018401526015830152603582015260550190565b60408051808303601f1901815291905280516020909101209a9950505050505050505050565b60685460ff16156200108457604051630bc011ff60e21b815260040160405180910390fd5b6200108e62001920565b60685463ffffffff888116610100909204161480620010b45750600263ffffffff881610155b15620010d3576040516302caf51760e11b815260040160405180910390fd5b6000806060876001600160a01b0388166200111357883414620011095760405163b89240f560e01b815260040160405180910390fd5b6000925062001368565b3415620011335760405163798ee6f160e01b815260040160405180910390fd5b6001600160a01b038089166000908152606b602090815260409182902082518084019093525463ffffffff8116835264010000000090049092169181018290529015620011f057604051632770a7eb60e21b8152336004820152602481018b90526001600160a01b038a1690639dc29fac90604401600060405180830381600087803b158015620011c357600080fd5b505af1158015620011d8573d6000803e3d6000fd5b50505050806020015194508060000151935062001366565b8515620012055762001205898b89896200197b565b6040516370a0823160e01b81523060048201526000906001600160a01b038b16906370a0823190602401602060405180830381865afa1580156200124d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001273919062002d39565b90506200128c6001600160a01b038b1633308e62001cdd565b6040516370a0823160e01b81523060048201526000906001600160a01b038c16906370a0823190602401602060405180830381865afa158015620012d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012fa919062002d39565b905062001308828262002d53565b6068548c9850610100900463ffffffff1696509350620013288762001d17565b620013338c62001dde565b6200133e8d62001e9c565b604051602001620013529392919062002b91565b604051602081830303815290604052945050505b505b7f501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b600084868e8e8688605354604051620013aa98979695949392919062002d69565b60405180910390a1620013cf620006c2600085878f8f87898051906020012062000d1a565b8615620013e057620013e062001671565b50505050620013ee60018055565b50505050505050565b606c546001600160a01b03163314620014235760405163e2e8106b60e01b815260040160405180910390fd5b6200056462001f63565b600084815b60208110156200150857600163ffffffff8616821c81169003620014a45785816020811062001465576200146562002c7d565b60200201358260405160200162001486929190918252602082015260400190565b604051602081830303815290604052805190602001209150620014f3565b81868260208110620014ba57620014ba62002c7d565b6020020135604051602001620014da929190918252602082015260400190565b6040516020818303038152906040528051906020012091505b80620014ff8162002ca9565b91505062001432565b50821490505b949350505050565b60685460ff16156200153b57604051630bc011ff60e21b815260040160405180910390fd5b6068805460ff191660011790556040517f2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a549790600090a1565b806001620015846020600262002ed3565b62001590919062002d53565b60535410620015b2576040516377ae67b360e11b815260040160405180910390fd5b6000605360008154620015c59062002ca9565b9182905550905060005b602081101562001661578082901c60011660010362001607578260338260208110620015ff57620015ff62002c7d565b015550505050565b603381602081106200161d576200161d62002c7d565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092508080620016589062002ca9565b915050620015cf565b506200166c62002ee1565b505050565b6053546068805463ffffffff909216600160c81b0263ffffffff60c81b1990921691909117908190556001600160a01b03600160281b909104166333d6247d620016ba62000c34565b6040518263ffffffff1660e01b8152600401620016d991815260200190565b600060405180830381600087803b158015620016f457600080fd5b505af115801562000f1e573d6000803e3d6000fd5b6200171a8b63ffffffff1662001fbc565b6068546040805160208082018e90528183018d9052825180830384018152606083019384905280519101206312bd9b1960e11b9092526064810191909152600091600160281b90046001600160a01b03169063257b3632906084016020604051808303816000875af115801562001795573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017bb919062002d39565b905080600003620017de57604051622f6fad60e01b815260040160405180910390fd5b60685463ffffffff88811661010090920416146200180f576040516302caf51760e11b815260040160405180910390fd5b606854600090610100900463ffffffff166200182d57508962001830565b508a5b6200185962001850848c8c8c8c8c8c8c604051620006b4929190620029c8565b8f8f846200142d565b62001877576040516338105f3b60e21b815260040160405180910390fd5b5050505050505050505050505050565b6040516001600160a01b0383166024820152604481018290526200166c90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915262002008565b600054610100900460ff16620019165760405162461bcd60e51b815260040162000e449062002ef7565b62000564620020e1565b600260015403620019745760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640162000e44565b6002600155565b60006200198c600482848662002f42565b620019979162002f6e565b9050632afa533160e01b6001600160e01b031982160162001b38576000808080808080620019c9896004818d62002f42565b810190620019d8919062002f9f565b9650965096509650965096509650336001600160a01b0316876001600160a01b03161462001a195760405163912ecce760e01b815260040160405180910390fd5b6001600160a01b038616301462001a435760405163750643af60e01b815260040160405180910390fd5b8a851462001a64576040516303fffc4b60e01b815260040160405180910390fd5b604080516001600160a01b0389811660248301528881166044830152606482018890526084820187905260ff861660a483015260c4820185905260e48083018590528351808403909101815261010490920183526020820180516001600160e01b031663d505accf60e01b1790529151918e169162001ae4919062002a14565b6000604051808303816000865af19150503d806000811462001b23576040519150601f19603f3d011682016040523d82523d6000602084013e62001b28565b606091505b50505050505050505050620006d9565b6001600160e01b031981166323f2ebc360e21b1462001b6a57604051637141605d60e11b815260040160405180910390fd5b60008080808080808062001b828a6004818e62002f42565b81019062001b91919062002ffa565b97509750975097509750975097509750336001600160a01b0316886001600160a01b03161462001bd45760405163912ecce760e01b815260040160405180910390fd5b6001600160a01b038716301462001bfe5760405163750643af60e01b815260040160405180910390fd5b604080516001600160a01b038a811660248301528981166044830152606482018990526084820188905286151560a483015260ff861660c483015260e482018590526101048083018590528351808403909101815261012490920183526020820180516001600160e01b03166323f2ebc360e21b1790529151918f169162001c87919062002a14565b6000604051808303816000865af19150503d806000811462001cc6576040519150601f19603f3d011682016040523d82523d6000602084013e62001ccb565b606091505b50505050505050505050505050505050565b6040516001600160a01b038085166024830152831660448201526064810182905262000f1e9085906323b872dd60e01b90608401620018b4565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b179052905160609160009182916001600160a01b0386169162001d60919062002a14565b600060405180830381855afa9150503d806000811462001d9d576040519150601f19603f3d011682016040523d82523d6000602084013e62001da2565b606091505b50915091508162001dd357604051806040016040528060078152602001664e4f5f4e414d4560c81b8152506200150e565b6200150e816200210b565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009182916001600160a01b0386169162001e27919062002a14565b600060405180830381855afa9150503d806000811462001e64576040519150601f19603f3d011682016040523d82523d6000602084013e62001e69565b606091505b50915091508162001dd357604051806040016040528060098152602001681393d7d4d6535093d360ba1b8152506200150e565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b1790529051600091829182916001600160a01b0386169162001ee4919062002a14565b600060405180830381855afa9150503d806000811462001f21576040519150601f19603f3d011682016040523d82523d6000602084013e62001f26565b606091505b509150915081801562001f3a575080516020145b62001f475760126200150e565b808060200190518101906200150e919062003086565b60018055565b60685460ff1662001f8757604051635386698160e01b815260040160405180910390fd5b6068805460ff191690556040517f1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b390600090a1565b600881901c60008181526069602052604081208054600160ff861690811b91821892839055929091908183169003620006d957604051630c8d9eab60e31b815260040160405180910390fd5b60006200205f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620022b59092919063ffffffff16565b8051909150156200166c5780806020019051810190620020809190620030a6565b6200166c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000e44565b600054610100900460ff1662001f5d5760405162461bcd60e51b815260040162000e449062002ef7565b606060408251106200212d5781806020019051810190620005b39190620030c6565b8151602003620022825760005b6020811080156200216d57508281815181106200215b576200215b62002c7d565b01602001516001600160f81b03191615155b156200218857806200217f8162002ca9565b9150506200213a565b80600003620021c15750506040805180820190915260128152714e4f545f56414c49445f454e434f44494e4760701b6020820152919050565b60008167ffffffffffffffff811115620021df57620021df620029d8565b6040519080825280601f01601f1916602001820160405280156200220a576020820181803683370190505b50905060005b828110156200227a578481815181106200222e576200222e62002c7d565b602001015160f81c60f81b8282815181106200224e576200224e62002c7d565b60200101906001600160f81b031916908160001a90535080620022718162002ca9565b91505062002210565b509392505050565b50506040805180820190915260128152714e4f545f56414c49445f454e434f44494e4760701b602082015290565b919050565b60606200150e848460008585600080866001600160a01b03168587604051620022df919062002a14565b60006040518083038185875af1925050503d80600081146200231e576040519150601f19603f3d011682016040523d82523d6000602084013e62002323565b606091505b5091509150620023368783838762002341565b979650505050505050565b60608315620023b5578251600003620023ad576001600160a01b0385163b620023ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000e44565b50816200150e565b6200150e8383815115620023cc5781518083602001fd5b8060405162461bcd60e51b815260040162000e44919062003146565b6115b2806200315c83390190565b803563ffffffff81168114620022b057600080fd5b6001600160a01b03811681146200242157600080fd5b50565b600080604083850312156200243857600080fd5b6200244383620023f6565b9150602083013562002455816200240b565b809150509250929050565b80151581146200242157600080fd5b60008083601f8401126200248257600080fd5b50813567ffffffffffffffff8111156200249b57600080fd5b602083019150836020828501011115620024b457600080fd5b9250929050565b600080600080600060808688031215620024d457600080fd5b620024df86620023f6565b94506020860135620024f1816200240b565b93506040860135620025038162002460565b9250606086013567ffffffffffffffff8111156200252057600080fd5b6200252e888289016200246f565b969995985093965092949392505050565b806104008101831015620005b357600080fd5b60008060008060008060008060008060006105208c8e0312156200257557600080fd5b620025818d8d6200253f565b9a50620025926104008d01620023f6565b99506104208c013598506104408c01359750620025b36104608d01620023f6565b96506104808c0135620025c6816200240b565b9550620025d76104a08d01620023f6565b94506104c08c0135620025ea816200240b565b93506104e08c013592506105008c013567ffffffffffffffff8111156200261057600080fd5b6200261e8e828f016200246f565b915080935050809150509295989b509295989b9093969950565b6000602082840312156200264b57600080fd5b813562002658816200240b565b9392505050565b60ff811681146200242157600080fd5b600080600080600080600060e0888a0312156200268b57600080fd5b873562002698816200265f565b9650620026a860208901620023f6565b95506040880135620026ba816200240b565b9450620026ca60608901620023f6565b93506080880135620026dc816200240b565b9699959850939692959460a0840135945060c09093013592915050565b6000806000606084860312156200270f57600080fd5b6200271a84620023f6565b925060208401356200272c816200240b565b915060408401356200273e816200240b565b809150509250925092565b6000602082840312156200275c57600080fd5b5035919050565b600080600080600080600060a0888a0312156200277f57600080fd5b6200278a88620023f6565b965060208801356200279c816200240b565b9550604088013567ffffffffffffffff80821115620027ba57600080fd5b620027c88b838c016200246f565b909750955060608a0135915080821115620027e257600080fd5b50620027f18a828b016200246f565b909450925050608088013562002807816200265f565b8091505092959891949750929550565b600080600080600080600060c0888a0312156200283357600080fd5b6200283e88620023f6565b9650602088013562002850816200240b565b955060408801359450606088013562002869816200240b565b935060808801356200287b8162002460565b925060a088013567ffffffffffffffff8111156200289857600080fd5b620028a68a828b016200246f565b989b979a50959850939692959293505050565b6000806000806104608587031215620028d157600080fd5b84359350620028e486602087016200253f565b9250620028f56104208601620023f6565b939692955092936104400135925050565b60e09290921b6001600160e01b031916825260601b6001600160601b031916600482015260180190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff8a16815263ffffffff89811660208301526001600160a01b03898116604084015288821660608401528716608083015260a0820186905261010060c08301819052600091620029ae848301878962002930565b925080851660e085015250509a9950505050505050505050565b8183823760009101908152919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562002a0b578181015183820152602001620029f1565b50506000910152565b6000825162002a28818460208701620029ee565b9190910192915050565b604051601f8201601f1916810167ffffffffffffffff8111828210171562002a5e5762002a5e620029d8565b604052919050565b600067ffffffffffffffff82111562002a835762002a83620029d8565b50601f01601f191660200190565b600082601f83011262002aa357600080fd5b813562002aba62002ab48262002a66565b62002a32565b81815284602083860101111562002ad057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121562002b0357600080fd5b833567ffffffffffffffff8082111562002b1c57600080fd5b62002b2a8783880162002a91565b9450602086013591508082111562002b4157600080fd5b5062002b508682870162002a91565b92505060408401356200273e816200265f565b6000815180845262002b7d816020860160208601620029ee565b601f01601f19169290920160200192915050565b60608152600062002ba6606083018662002b63565b828103602084015262002bba818662002b63565b91505060ff83166040830152949350505050565b63ffffffff861681526001600160a01b0385811660208301528416604082015260806060820181905260009062002336908301848662002930565b63ffffffff95861681529390941660208401526001600160a01b039182166040840152166060820152608081019190915260a00190565b6001600160a01b038516815263ffffffff8416602082015260606040820181905260009062002c73908301848662002930565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162002cbe5762002cbe62002c93565b5060010190565b60608152600062002cdb60608301878962002930565b828103602084015262002cf081868862002930565b91505060ff831660408301529695505050505050565b6000835162002d1a818460208801620029ee565b83519083019062002d30818360208801620029ee565b01949350505050565b60006020828403121562002d4c57600080fd5b5051919050565b81810381811115620005b357620005b362002c93565b60ff8916815263ffffffff88811660208301526001600160a01b03888116604084015287821660608401528616608083015260a0820185905261010060c0830181905260009162002dbd8483018762002b63565b925080851660e085015250509998505050505050505050565b600181815b8085111562002e1757816000190482111562002dfb5762002dfb62002c93565b8085161562002e0957918102915b93841c939080029062002ddb565b509250929050565b60008262002e3057506001620005b3565b8162002e3f57506000620005b3565b816001811462002e58576002811462002e635762002e83565b6001915050620005b3565b60ff84111562002e775762002e7762002c93565b50506001821b620005b3565b5060208310610133831016604e8410600b841016171562002ea8575081810a620005b3565b62002eb4838362002dd6565b806000190482111562002ecb5762002ecb62002c93565b029392505050565b600062002658838362002e1f565b634e487b7160e01b600052600160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000808585111562002f5357600080fd5b8386111562002f6157600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101562002f975780818660040360031b1b83161692505b505092915050565b600080600080600080600060e0888a03121562002fbb57600080fd5b873562002fc8816200240b565b9650602088013562002fda816200240b565b955060408801359450606088013593506080880135620026dc816200265f565b600080600080600080600080610100898b0312156200301857600080fd5b883562003025816200240b565b9750602089013562003037816200240b565b965060408901359550606089013594506080890135620030578162002460565b935060a089013562003069816200265f565b979a969950949793969295929450505060c08201359160e0013590565b6000602082840312156200309957600080fd5b815162002658816200265f565b600060208284031215620030b957600080fd5b8151620026588162002460565b600060208284031215620030d957600080fd5b815167ffffffffffffffff811115620030f157600080fd5b8201601f810184136200310357600080fd5b80516200311462002ab48262002a66565b8181528560208385010111156200312a57600080fd5b6200313d826020830160208601620029ee565b95945050505050565b60208152600062002658602083018462002b6356fe6101006040523480156200001257600080fd5b50604051620015b2380380620015b283398101604081905262000035916200028d565b82826003620000458382620003a1565b506004620000548282620003a1565b50503360c0525060ff811660e052466080819052620000739062000080565b60a052506200046d915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000ad6200012e565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060600380546200013f9062000312565b80601f01602080910402602001604051908101604052809291908181526020018280546200016d9062000312565b8015620001be5780601f106200019257610100808354040283529160200191620001be565b820191906000526020600020905b815481529060010190602001808311620001a057829003601f168201915b5050505050905090565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001f057600080fd5b81516001600160401b03808211156200020d576200020d620001c8565b604051601f8301601f19908116603f01168101908282118183101715620002385762000238620001c8565b816040528381526020925086838588010111156200025557600080fd5b600091505b838210156200027957858201830151818301840152908201906200025a565b600093810190920192909252949350505050565b600080600060608486031215620002a357600080fd5b83516001600160401b0380821115620002bb57600080fd5b620002c987838801620001de565b94506020860151915080821115620002e057600080fd5b50620002ef86828701620001de565b925050604084015160ff811681146200030757600080fd5b809150509250925092565b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620001c8565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516110f6620004bc60003960006101f70152600081816102ba015281816104e0015261054e0152600061049101526000818161031f015261045b01526110f66000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d7146102f4578063a9059cbb14610307578063cd0d00961461031a578063d505accf14610341578063dd62ed3e14610354578063ffa1ad741461036757600080fd5b806370a08231146102515780637ecebe001461027a57806395d89b411461029a5780639dc29fac146102a2578063a3c573eb146102b557600080fd5b806330adf81f116100ff57806330adf81f146101c9578063313ce567146101f05780633644e51514610221578063395093511461022957806340c10f191461023c57600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806320606b701461018f57806323b872dd146101b6575b600080fd5b610144610387565b6040516101519190610e5c565b60405180910390f35b61016d610168366004610ec6565b610419565b6040519015158152602001610151565b6002545b604051908152602001610151565b6101817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b61016d6101c4366004610ef0565b610433565b6101817f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610151565b610181610457565b61016d610237366004610ec6565b6104b3565b61024f61024a366004610ec6565b6104d5565b005b61018161025f366004610f2c565b6001600160a01b031660009081526020819052604090205490565b610181610288366004610f2c565b60056020526000908152604090205481565b610144610534565b61024f6102b0366004610ec6565b610543565b6102dc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610151565b61016d610302366004610ec6565b610595565b61016d610315366004610ec6565b610610565b6101817f000000000000000000000000000000000000000000000000000000000000000081565b61024f61034f366004610f4e565b61061e565b610181610362366004610fc1565b610859565b610144604051806040016040528060018152602001603160f81b81525081565b60606003805461039690610ff4565b80601f01602080910402602001604051908101604052809291908181526020018280546103c290610ff4565b801561040f5780601f106103e45761010080835404028352916020019161040f565b820191906000526020600020905b8154815290600101906020018083116103f257829003601f168201915b5050505050905090565b600033610427818585610884565b60019150505b92915050565b6000336104418582856109a9565b61044c858585610a23565b506001949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461048e5761048946610bc7565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b6000336104278185856104c68383610859565b6104d09190611044565b610884565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105265760405162461bcd60e51b815260040161051d90611057565b60405180910390fd5b6105308282610c73565b5050565b60606004805461039690610ff4565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461058b5760405162461bcd60e51b815260040161051d90611057565b6105308282610d32565b600033816105a38286610859565b9050838110156106035760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161051d565b61044c8286868403610884565b600033610427818585610a23565b8342111561067a5760405162461bcd60e51b8152602060048201526024808201527f546f6b656e577261707065643a3a7065726d69743a20457870697265642070656044820152631c9b5a5d60e21b606482015260840161051d565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a9190866106c7836110a7565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610725610457565b60405161190160f01b602082015260228101919091526042810183905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa1580156107b0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107e65750896001600160a01b0316816001600160a01b0316145b6108425760405162461bcd60e51b815260206004820152602760248201527f546f6b656e577261707065643a3a7065726d69743a20496e76616c6964207369604482015266676e617475726560c81b606482015260840161051d565b61084d8a8a8a610884565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166108e65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161051d565b6001600160a01b0382166109475760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161051d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006109b58484610859565b90506000198114610a1d5781811015610a105760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161051d565b610a1d8484848403610884565b50505050565b6001600160a01b038316610a875760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161051d565b6001600160a01b038216610ae95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161051d565b6001600160a01b03831660009081526020819052604090205481811015610b615760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161051d565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a1d565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610bf2610387565b805160209182012060408051808201825260018152603160f81b90840152805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b6001600160a01b038216610cc95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161051d565b8060026000828254610cdb9190611044565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216610d925760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161051d565b6001600160a01b03821660009081526020819052604090205481811015610e065760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161051d565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161099c565b600060208083528351808285015260005b81811015610e8957858101830151858201604001528201610e6d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610ec157600080fd5b919050565b60008060408385031215610ed957600080fd5b610ee283610eaa565b946020939093013593505050565b600080600060608486031215610f0557600080fd5b610f0e84610eaa565b9250610f1c60208501610eaa565b9150604084013590509250925092565b600060208284031215610f3e57600080fd5b610f4782610eaa565b9392505050565b600080600080600080600060e0888a031215610f6957600080fd5b610f7288610eaa565b9650610f8060208901610eaa565b95506040880135945060608801359350608088013560ff81168114610fa457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610fd457600080fd5b610fdd83610eaa565b9150610feb60208401610eaa565b90509250929050565b600181811c9082168061100857607f821691505b60208210810361102857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561042d5761042d61102e565b60208082526030908201527f546f6b656e577261707065643a3a6f6e6c794272696467653a204e6f7420506f60408201526f6c79676f6e5a6b45564d42726964676560801b606082015260800190565b6000600182016110b9576110b961102e565b506001019056fea2646970667358221220e578d8e4b71a5c98739e7f11de9b62b5bff7c0ec9d1c2013a5019efa3df3a96d64736f6c63430008140033a2646970667358221220a5db4ca599c25af724716ede251c43e562514e0970d03b930b42a70d351d54b164736f6c63430008140033",
}

// LegacyABI is the input ABI used to generate the binding from.
// Deprecated: Use LegacyMetaData.ABI instead.
var LegacyABI = LegacyMetaData.ABI

// LegacyBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use LegacyMetaData.Bin instead.
var LegacyBin = LegacyMetaData.Bin

// DeployLegacy deploys a new Ethereum contract, binding an instance of Legacy to it.
func DeployLegacy(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Legacy, error) {
	parsed, err := LegacyMetaData.GetAbi()
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	if parsed == nil {
		return common.Address{}, nil, nil, errors.New("GetABI returned nil")
	}

	address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LegacyBin), backend)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &Legacy{LegacyCaller: LegacyCaller{contract: contract}, LegacyTransactor: LegacyTransactor{contract: contract}, LegacyFilterer: LegacyFilterer{contract: contract}}, nil
}

// Legacy is an auto generated Go binding around an Ethereum contract.
type Legacy struct {
	LegacyCaller     // Read-only binding to the contract
	LegacyTransactor // Write-only binding to the contract
	LegacyFilterer   // Log filterer for contract events
}

// LegacyCaller is an auto generated read-only Go binding around an Ethereum contract.
type LegacyCaller struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LegacyTransactor is an auto generated write-only Go binding around an Ethereum contract.
type LegacyTransactor struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LegacyFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type LegacyFilterer struct {
	contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// LegacySession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type LegacySession struct {
	Contract     *Legacy           // Generic contract binding to set the session for
	CallOpts     bind.CallOpts     // Call options to use throughout this session
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// LegacyCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type LegacyCallerSession struct {
	Contract *LegacyCaller // Generic contract caller binding to set the session for
	CallOpts bind.CallOpts // Call options to use throughout this session
}

// LegacyTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type LegacyTransactorSession struct {
	Contract     *LegacyTransactor // Generic contract transactor binding to set the session for
	TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// LegacyRaw is an auto generated low-level Go binding around an Ethereum contract.
type LegacyRaw struct {
	Contract *Legacy // Generic contract binding to access the raw methods on
}

// LegacyCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type LegacyCallerRaw struct {
	Contract *LegacyCaller // Generic read-only contract binding to access the raw methods on
}

// LegacyTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type LegacyTransactorRaw struct {
	Contract *LegacyTransactor // Generic write-only contract binding to access the raw methods on
}

// NewLegacy creates a new instance of Legacy, bound to a specific deployed contract.
func NewLegacy(address common.Address, backend bind.ContractBackend) (*Legacy, error) {
	contract, err := bindLegacy(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &Legacy{LegacyCaller: LegacyCaller{contract: contract}, LegacyTransactor: LegacyTransactor{contract: contract}, LegacyFilterer: LegacyFilterer{contract: contract}}, nil
}

// NewLegacyCaller creates a new read-only instance of Legacy, bound to a specific deployed contract.
func NewLegacyCaller(address common.Address, caller bind.ContractCaller) (*LegacyCaller, error) {
	contract, err := bindLegacy(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &LegacyCaller{contract: contract}, nil
}

// NewLegacyTransactor creates a new write-only instance of Legacy, bound to a specific deployed contract.
func NewLegacyTransactor(address common.Address, transactor bind.ContractTransactor) (*LegacyTransactor, error) {
	contract, err := bindLegacy(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &LegacyTransactor{contract: contract}, nil
}

// NewLegacyFilterer creates a new log filterer instance of Legacy, bound to a specific deployed contract.
func NewLegacyFilterer(address common.Address, filterer bind.ContractFilterer) (*LegacyFilterer, error) {
	contract, err := bindLegacy(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &LegacyFilterer{contract: contract}, nil
}

// bindLegacy binds a generic wrapper to an already deployed contract.
func bindLegacy(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := LegacyMetaData.GetAbi()
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_Legacy *LegacyRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Legacy.Contract.LegacyCaller.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_Legacy *LegacyRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Legacy.Contract.LegacyTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Legacy *LegacyRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Legacy.Contract.LegacyTransactor.contract.Transact(opts, method, params...)
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_Legacy *LegacyCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _Legacy.Contract.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_Legacy *LegacyTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Legacy.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_Legacy *LegacyTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _Legacy.Contract.contract.Transact(opts, method, params...)
}

// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b.
//
// Solidity: function claimedBitMap(uint256 ) view returns(uint256)
func (_Legacy *LegacyCaller) ClaimedBitMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "claimedBitMap", arg0)

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b.
//
// Solidity: function claimedBitMap(uint256 ) view returns(uint256)
func (_Legacy *LegacySession) ClaimedBitMap(arg0 *big.Int) (*big.Int, error) {
	return _Legacy.Contract.ClaimedBitMap(&_Legacy.CallOpts, arg0)
}

// ClaimedBitMap is a free data retrieval call binding the contract method 0xee25560b.
//
// Solidity: function claimedBitMap(uint256 ) view returns(uint256)
func (_Legacy *LegacyCallerSession) ClaimedBitMap(arg0 *big.Int) (*big.Int, error) {
	return _Legacy.Contract.ClaimedBitMap(&_Legacy.CallOpts, arg0)
}

// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5.
//
// Solidity: function depositCount() view returns(uint256)
func (_Legacy *LegacyCaller) DepositCount(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "depositCount")

	if err != nil {
		return *new(*big.Int), err
	}

	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

	return out0, err

}

// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5.
//
// Solidity: function depositCount() view returns(uint256)
func (_Legacy *LegacySession) DepositCount() (*big.Int, error) {
	return _Legacy.Contract.DepositCount(&_Legacy.CallOpts)
}

// DepositCount is a free data retrieval call binding the contract method 0x2dfdf0b5.
//
// Solidity: function depositCount() view returns(uint256)
func (_Legacy *LegacyCallerSession) DepositCount() (*big.Int, error) {
	return _Legacy.Contract.DepositCount(&_Legacy.CallOpts)
}

// GetDepositRoot is a free data retrieval call binding the contract method 0x3ae05047.
//
// Solidity: function getDepositRoot() view returns(bytes32)
func (_Legacy *LegacyCaller) GetDepositRoot(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "getDepositRoot")

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// GetDepositRoot is a free data retrieval call binding the contract method 0x3ae05047.
//
// Solidity: function getDepositRoot() view returns(bytes32)
func (_Legacy *LegacySession) GetDepositRoot() ([32]byte, error) {
	return _Legacy.Contract.GetDepositRoot(&_Legacy.CallOpts)
}

// GetDepositRoot is a free data retrieval call binding the contract method 0x3ae05047.
//
// Solidity: function getDepositRoot() view returns(bytes32)
func (_Legacy *LegacyCallerSession) GetDepositRoot() ([32]byte, error) {
	return _Legacy.Contract.GetDepositRoot(&_Legacy.CallOpts)
}

// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043.
//
// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32)
func (_Legacy *LegacyCaller) GetLeafValue(opts *bind.CallOpts, leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "getLeafValue", leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash)

	if err != nil {
		return *new([32]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)

	return out0, err

}

// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043.
//
// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32)
func (_Legacy *LegacySession) GetLeafValue(leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) {
	return _Legacy.Contract.GetLeafValue(&_Legacy.CallOpts, leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash)
}

// GetLeafValue is a free data retrieval call binding the contract method 0x3e197043.
//
// Solidity: function getLeafValue(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes32 metadataHash) pure returns(bytes32)
func (_Legacy *LegacyCallerSession) GetLeafValue(leafType uint8, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadataHash [32]byte) ([32]byte, error) {
	return _Legacy.Contract.GetLeafValue(&_Legacy.CallOpts, leafType, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadataHash)
}

// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c.
//
// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Legacy *LegacyCaller) GetTokenWrappedAddress(opts *bind.CallOpts, originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "getTokenWrappedAddress", originNetwork, originTokenAddress)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c.
//
// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Legacy *LegacySession) GetTokenWrappedAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	return _Legacy.Contract.GetTokenWrappedAddress(&_Legacy.CallOpts, originNetwork, originTokenAddress)
}

// GetTokenWrappedAddress is a free data retrieval call binding the contract method 0x22e95f2c.
//
// Solidity: function getTokenWrappedAddress(uint32 originNetwork, address originTokenAddress) view returns(address)
func (_Legacy *LegacyCallerSession) GetTokenWrappedAddress(originNetwork uint32, originTokenAddress common.Address) (common.Address, error) {
	return _Legacy.Contract.GetTokenWrappedAddress(&_Legacy.CallOpts, originNetwork, originTokenAddress)
}

// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca.
//
// Solidity: function globalExitRootManager() view returns(address)
func (_Legacy *LegacyCaller) GlobalExitRootManager(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "globalExitRootManager")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca.
//
// Solidity: function globalExitRootManager() view returns(address)
func (_Legacy *LegacySession) GlobalExitRootManager() (common.Address, error) {
	return _Legacy.Contract.GlobalExitRootManager(&_Legacy.CallOpts)
}

// GlobalExitRootManager is a free data retrieval call binding the contract method 0xd02103ca.
//
// Solidity: function globalExitRootManager() view returns(address)
func (_Legacy *LegacyCallerSession) GlobalExitRootManager() (common.Address, error) {
	return _Legacy.Contract.GlobalExitRootManager(&_Legacy.CallOpts)
}

// IsClaimed is a free data retrieval call binding the contract method 0x9e34070f.
//
// Solidity: function isClaimed(uint256 index) view returns(bool)
func (_Legacy *LegacyCaller) IsClaimed(opts *bind.CallOpts, index *big.Int) (bool, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "isClaimed", index)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsClaimed is a free data retrieval call binding the contract method 0x9e34070f.
//
// Solidity: function isClaimed(uint256 index) view returns(bool)
func (_Legacy *LegacySession) IsClaimed(index *big.Int) (bool, error) {
	return _Legacy.Contract.IsClaimed(&_Legacy.CallOpts, index)
}

// IsClaimed is a free data retrieval call binding the contract method 0x9e34070f.
//
// Solidity: function isClaimed(uint256 index) view returns(bool)
func (_Legacy *LegacyCallerSession) IsClaimed(index *big.Int) (bool, error) {
	return _Legacy.Contract.IsClaimed(&_Legacy.CallOpts, index)
}

// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96.
//
// Solidity: function isEmergencyState() view returns(bool)
func (_Legacy *LegacyCaller) IsEmergencyState(opts *bind.CallOpts) (bool, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "isEmergencyState")

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96.
//
// Solidity: function isEmergencyState() view returns(bool)
func (_Legacy *LegacySession) IsEmergencyState() (bool, error) {
	return _Legacy.Contract.IsEmergencyState(&_Legacy.CallOpts)
}

// IsEmergencyState is a free data retrieval call binding the contract method 0x15064c96.
//
// Solidity: function isEmergencyState() view returns(bool)
func (_Legacy *LegacyCallerSession) IsEmergencyState() (bool, error) {
	return _Legacy.Contract.IsEmergencyState(&_Legacy.CallOpts)
}

// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7.
//
// Solidity: function lastUpdatedDepositCount() view returns(uint32)
func (_Legacy *LegacyCaller) LastUpdatedDepositCount(opts *bind.CallOpts) (uint32, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "lastUpdatedDepositCount")

	if err != nil {
		return *new(uint32), err
	}

	out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32)

	return out0, err

}

// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7.
//
// Solidity: function lastUpdatedDepositCount() view returns(uint32)
func (_Legacy *LegacySession) LastUpdatedDepositCount() (uint32, error) {
	return _Legacy.Contract.LastUpdatedDepositCount(&_Legacy.CallOpts)
}

// LastUpdatedDepositCount is a free data retrieval call binding the contract method 0xbe5831c7.
//
// Solidity: function lastUpdatedDepositCount() view returns(uint32)
func (_Legacy *LegacyCallerSession) LastUpdatedDepositCount() (uint32, error) {
	return _Legacy.Contract.LastUpdatedDepositCount(&_Legacy.CallOpts)
}

// NetworkID is a free data retrieval call binding the contract method 0xbab161bf.
//
// Solidity: function networkID() view returns(uint32)
func (_Legacy *LegacyCaller) NetworkID(opts *bind.CallOpts) (uint32, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "networkID")

	if err != nil {
		return *new(uint32), err
	}

	out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32)

	return out0, err

}

// NetworkID is a free data retrieval call binding the contract method 0xbab161bf.
//
// Solidity: function networkID() view returns(uint32)
func (_Legacy *LegacySession) NetworkID() (uint32, error) {
	return _Legacy.Contract.NetworkID(&_Legacy.CallOpts)
}

// NetworkID is a free data retrieval call binding the contract method 0xbab161bf.
//
// Solidity: function networkID() view returns(uint32)
func (_Legacy *LegacyCallerSession) NetworkID() (uint32, error) {
	return _Legacy.Contract.NetworkID(&_Legacy.CallOpts)
}

// PolygonZkEVMaddress is a free data retrieval call binding the contract method 0x34ac9cf2.
//
// Solidity: function polygonZkEVMaddress() view returns(address)
func (_Legacy *LegacyCaller) PolygonZkEVMaddress(opts *bind.CallOpts) (common.Address, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "polygonZkEVMaddress")

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// PolygonZkEVMaddress is a free data retrieval call binding the contract method 0x34ac9cf2.
//
// Solidity: function polygonZkEVMaddress() view returns(address)
func (_Legacy *LegacySession) PolygonZkEVMaddress() (common.Address, error) {
	return _Legacy.Contract.PolygonZkEVMaddress(&_Legacy.CallOpts)
}

// PolygonZkEVMaddress is a free data retrieval call binding the contract method 0x34ac9cf2.
//
// Solidity: function polygonZkEVMaddress() view returns(address)
func (_Legacy *LegacyCallerSession) PolygonZkEVMaddress() (common.Address, error) {
	return _Legacy.Contract.PolygonZkEVMaddress(&_Legacy.CallOpts)
}

// PrecalculatedWrapperAddress is a free data retrieval call binding the contract method 0xaaa13cc2.
//
// Solidity: function precalculatedWrapperAddress(uint32 originNetwork, address originTokenAddress, string name, string symbol, uint8 decimals) view returns(address)
func (_Legacy *LegacyCaller) PrecalculatedWrapperAddress(opts *bind.CallOpts, originNetwork uint32, originTokenAddress common.Address, name string, symbol string, decimals uint8) (common.Address, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "precalculatedWrapperAddress", originNetwork, originTokenAddress, name, symbol, decimals)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// PrecalculatedWrapperAddress is a free data retrieval call binding the contract method 0xaaa13cc2.
//
// Solidity: function precalculatedWrapperAddress(uint32 originNetwork, address originTokenAddress, string name, string symbol, uint8 decimals) view returns(address)
func (_Legacy *LegacySession) PrecalculatedWrapperAddress(originNetwork uint32, originTokenAddress common.Address, name string, symbol string, decimals uint8) (common.Address, error) {
	return _Legacy.Contract.PrecalculatedWrapperAddress(&_Legacy.CallOpts, originNetwork, originTokenAddress, name, symbol, decimals)
}

// PrecalculatedWrapperAddress is a free data retrieval call binding the contract method 0xaaa13cc2.
//
// Solidity: function precalculatedWrapperAddress(uint32 originNetwork, address originTokenAddress, string name, string symbol, uint8 decimals) view returns(address)
func (_Legacy *LegacyCallerSession) PrecalculatedWrapperAddress(originNetwork uint32, originTokenAddress common.Address, name string, symbol string, decimals uint8) (common.Address, error) {
	return _Legacy.Contract.PrecalculatedWrapperAddress(&_Legacy.CallOpts, originNetwork, originTokenAddress, name, symbol, decimals)
}

// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174.
//
// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address)
func (_Legacy *LegacyCaller) TokenInfoToWrappedToken(opts *bind.CallOpts, arg0 [32]byte) (common.Address, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "tokenInfoToWrappedToken", arg0)

	if err != nil {
		return *new(common.Address), err
	}

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

	return out0, err

}

// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174.
//
// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address)
func (_Legacy *LegacySession) TokenInfoToWrappedToken(arg0 [32]byte) (common.Address, error) {
	return _Legacy.Contract.TokenInfoToWrappedToken(&_Legacy.CallOpts, arg0)
}

// TokenInfoToWrappedToken is a free data retrieval call binding the contract method 0x81b1c174.
//
// Solidity: function tokenInfoToWrappedToken(bytes32 ) view returns(address)
func (_Legacy *LegacyCallerSession) TokenInfoToWrappedToken(arg0 [32]byte) (common.Address, error) {
	return _Legacy.Contract.TokenInfoToWrappedToken(&_Legacy.CallOpts, arg0)
}

// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834.
//
// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool)
func (_Legacy *LegacyCaller) VerifyMerkleProof(opts *bind.CallOpts, leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "verifyMerkleProof", leafHash, smtProof, index, root)

	if err != nil {
		return *new(bool), err
	}

	out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

	return out0, err

}

// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834.
//
// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool)
func (_Legacy *LegacySession) VerifyMerkleProof(leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) {
	return _Legacy.Contract.VerifyMerkleProof(&_Legacy.CallOpts, leafHash, smtProof, index, root)
}

// VerifyMerkleProof is a free data retrieval call binding the contract method 0xfb570834.
//
// Solidity: function verifyMerkleProof(bytes32 leafHash, bytes32[32] smtProof, uint32 index, bytes32 root) pure returns(bool)
func (_Legacy *LegacyCallerSession) VerifyMerkleProof(leafHash [32]byte, smtProof [32][32]byte, index uint32, root [32]byte) (bool, error) {
	return _Legacy.Contract.VerifyMerkleProof(&_Legacy.CallOpts, leafHash, smtProof, index, root)
}

// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d.
//
// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress)
func (_Legacy *LegacyCaller) WrappedTokenToTokenInfo(opts *bind.CallOpts, arg0 common.Address) (struct {
	OriginNetwork      uint32
	OriginTokenAddress common.Address
}, error) {
	var out []interface{}
	err := _Legacy.contract.Call(opts, &out, "wrappedTokenToTokenInfo", arg0)

	outstruct := new(struct {
		OriginNetwork      uint32
		OriginTokenAddress common.Address
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.OriginNetwork = *abi.ConvertType(out[0], new(uint32)).(*uint32)
	outstruct.OriginTokenAddress = *abi.ConvertType(out[1], new(common.Address)).(*common.Address)

	return *outstruct, err

}

// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d.
//
// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress)
func (_Legacy *LegacySession) WrappedTokenToTokenInfo(arg0 common.Address) (struct {
	OriginNetwork      uint32
	OriginTokenAddress common.Address
}, error) {
	return _Legacy.Contract.WrappedTokenToTokenInfo(&_Legacy.CallOpts, arg0)
}

// WrappedTokenToTokenInfo is a free data retrieval call binding the contract method 0x318aee3d.
//
// Solidity: function wrappedTokenToTokenInfo(address ) view returns(uint32 originNetwork, address originTokenAddress)
func (_Legacy *LegacyCallerSession) WrappedTokenToTokenInfo(arg0 common.Address) (struct {
	OriginNetwork      uint32
	OriginTokenAddress common.Address
}, error) {
	return _Legacy.Contract.WrappedTokenToTokenInfo(&_Legacy.CallOpts, arg0)
}

// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5.
//
// Solidity: function activateEmergencyState() returns()
func (_Legacy *LegacyTransactor) ActivateEmergencyState(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "activateEmergencyState")
}

// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5.
//
// Solidity: function activateEmergencyState() returns()
func (_Legacy *LegacySession) ActivateEmergencyState() (*types.Transaction, error) {
	return _Legacy.Contract.ActivateEmergencyState(&_Legacy.TransactOpts)
}

// ActivateEmergencyState is a paid mutator transaction binding the contract method 0x2072f6c5.
//
// Solidity: function activateEmergencyState() returns()
func (_Legacy *LegacyTransactorSession) ActivateEmergencyState() (*types.Transaction, error) {
	return _Legacy.Contract.ActivateEmergencyState(&_Legacy.TransactOpts)
}

// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579.
//
// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns()
func (_Legacy *LegacyTransactor) BridgeAsset(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "bridgeAsset", destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData)
}

// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579.
//
// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns()
func (_Legacy *LegacySession) BridgeAsset(destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) {
	return _Legacy.Contract.BridgeAsset(&_Legacy.TransactOpts, destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData)
}

// BridgeAsset is a paid mutator transaction binding the contract method 0xcd586579.
//
// Solidity: function bridgeAsset(uint32 destinationNetwork, address destinationAddress, uint256 amount, address token, bool forceUpdateGlobalExitRoot, bytes permitData) payable returns()
func (_Legacy *LegacyTransactorSession) BridgeAsset(destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, token common.Address, forceUpdateGlobalExitRoot bool, permitData []byte) (*types.Transaction, error) {
	return _Legacy.Contract.BridgeAsset(&_Legacy.TransactOpts, destinationNetwork, destinationAddress, amount, token, forceUpdateGlobalExitRoot, permitData)
}

// BridgeMessage is a paid mutator transaction binding the contract method 0x240ff378.
//
// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns()
func (_Legacy *LegacyTransactor) BridgeMessage(opts *bind.TransactOpts, destinationNetwork uint32, destinationAddress common.Address, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "bridgeMessage", destinationNetwork, destinationAddress, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessage is a paid mutator transaction binding the contract method 0x240ff378.
//
// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns()
func (_Legacy *LegacySession) BridgeMessage(destinationNetwork uint32, destinationAddress common.Address, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Legacy.Contract.BridgeMessage(&_Legacy.TransactOpts, destinationNetwork, destinationAddress, forceUpdateGlobalExitRoot, metadata)
}

// BridgeMessage is a paid mutator transaction binding the contract method 0x240ff378.
//
// Solidity: function bridgeMessage(uint32 destinationNetwork, address destinationAddress, bool forceUpdateGlobalExitRoot, bytes metadata) payable returns()
func (_Legacy *LegacyTransactorSession) BridgeMessage(destinationNetwork uint32, destinationAddress common.Address, forceUpdateGlobalExitRoot bool, metadata []byte) (*types.Transaction, error) {
	return _Legacy.Contract.BridgeMessage(&_Legacy.TransactOpts, destinationNetwork, destinationAddress, forceUpdateGlobalExitRoot, metadata)
}

// ClaimAsset is a paid mutator transaction binding the contract method 0x2cffd02e.
//
// Solidity: function claimAsset(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Legacy *LegacyTransactor) ClaimAsset(opts *bind.TransactOpts, smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "claimAsset", smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimAsset is a paid mutator transaction binding the contract method 0x2cffd02e.
//
// Solidity: function claimAsset(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Legacy *LegacySession) ClaimAsset(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Legacy.Contract.ClaimAsset(&_Legacy.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimAsset is a paid mutator transaction binding the contract method 0x2cffd02e.
//
// Solidity: function claimAsset(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originTokenAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Legacy *LegacyTransactorSession) ClaimAsset(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originTokenAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Legacy.Contract.ClaimAsset(&_Legacy.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originTokenAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimMessage is a paid mutator transaction binding the contract method 0x2d2c9d94.
//
// Solidity: function claimMessage(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Legacy *LegacyTransactor) ClaimMessage(opts *bind.TransactOpts, smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "claimMessage", smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimMessage is a paid mutator transaction binding the contract method 0x2d2c9d94.
//
// Solidity: function claimMessage(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Legacy *LegacySession) ClaimMessage(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Legacy.Contract.ClaimMessage(&_Legacy.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// ClaimMessage is a paid mutator transaction binding the contract method 0x2d2c9d94.
//
// Solidity: function claimMessage(bytes32[32] smtProof, uint32 index, bytes32 mainnetExitRoot, bytes32 rollupExitRoot, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata) returns()
func (_Legacy *LegacyTransactorSession) ClaimMessage(smtProof [32][32]byte, index uint32, mainnetExitRoot [32]byte, rollupExitRoot [32]byte, originNetwork uint32, originAddress common.Address, destinationNetwork uint32, destinationAddress common.Address, amount *big.Int, metadata []byte) (*types.Transaction, error) {
	return _Legacy.Contract.ClaimMessage(&_Legacy.TransactOpts, smtProof, index, mainnetExitRoot, rollupExitRoot, originNetwork, originAddress, destinationNetwork, destinationAddress, amount, metadata)
}

// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976.
//
// Solidity: function deactivateEmergencyState() returns()
func (_Legacy *LegacyTransactor) DeactivateEmergencyState(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "deactivateEmergencyState")
}

// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976.
//
// Solidity: function deactivateEmergencyState() returns()
func (_Legacy *LegacySession) DeactivateEmergencyState() (*types.Transaction, error) {
	return _Legacy.Contract.DeactivateEmergencyState(&_Legacy.TransactOpts)
}

// DeactivateEmergencyState is a paid mutator transaction binding the contract method 0xdbc16976.
//
// Solidity: function deactivateEmergencyState() returns()
func (_Legacy *LegacyTransactorSession) DeactivateEmergencyState() (*types.Transaction, error) {
	return _Legacy.Contract.DeactivateEmergencyState(&_Legacy.TransactOpts)
}

// Initialize is a paid mutator transaction binding the contract method 0x647c576c.
//
// Solidity: function initialize(uint32 _networkID, address _globalExitRootManager, address _polygonZkEVMaddress) returns()
func (_Legacy *LegacyTransactor) Initialize(opts *bind.TransactOpts, _networkID uint32, _globalExitRootManager common.Address, _polygonZkEVMaddress common.Address) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "initialize", _networkID, _globalExitRootManager, _polygonZkEVMaddress)
}

// Initialize is a paid mutator transaction binding the contract method 0x647c576c.
//
// Solidity: function initialize(uint32 _networkID, address _globalExitRootManager, address _polygonZkEVMaddress) returns()
func (_Legacy *LegacySession) Initialize(_networkID uint32, _globalExitRootManager common.Address, _polygonZkEVMaddress common.Address) (*types.Transaction, error) {
	return _Legacy.Contract.Initialize(&_Legacy.TransactOpts, _networkID, _globalExitRootManager, _polygonZkEVMaddress)
}

// Initialize is a paid mutator transaction binding the contract method 0x647c576c.
//
// Solidity: function initialize(uint32 _networkID, address _globalExitRootManager, address _polygonZkEVMaddress) returns()
func (_Legacy *LegacyTransactorSession) Initialize(_networkID uint32, _globalExitRootManager common.Address, _polygonZkEVMaddress common.Address) (*types.Transaction, error) {
	return _Legacy.Contract.Initialize(&_Legacy.TransactOpts, _networkID, _globalExitRootManager, _polygonZkEVMaddress)
}

// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97.
//
// Solidity: function updateGlobalExitRoot() returns()
func (_Legacy *LegacyTransactor) UpdateGlobalExitRoot(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _Legacy.contract.Transact(opts, "updateGlobalExitRoot")
}

// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97.
//
// Solidity: function updateGlobalExitRoot() returns()
func (_Legacy *LegacySession) UpdateGlobalExitRoot() (*types.Transaction, error) {
	return _Legacy.Contract.UpdateGlobalExitRoot(&_Legacy.TransactOpts)
}

// UpdateGlobalExitRoot is a paid mutator transaction binding the contract method 0x79e2cf97.
//
// Solidity: function updateGlobalExitRoot() returns()
func (_Legacy *LegacyTransactorSession) UpdateGlobalExitRoot() (*types.Transaction, error) {
	return _Legacy.Contract.UpdateGlobalExitRoot(&_Legacy.TransactOpts)
}

// LegacyBridgeEventIterator is returned from FilterBridgeEvent and is used to iterate over the raw logs and unpacked data for BridgeEvent events raised by the Legacy contract.
type LegacyBridgeEventIterator struct {
	Event *LegacyBridgeEvent // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *LegacyBridgeEventIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(LegacyBridgeEvent)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(LegacyBridgeEvent)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *LegacyBridgeEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LegacyBridgeEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LegacyBridgeEvent represents a BridgeEvent event raised by the Legacy contract.
type LegacyBridgeEvent struct {
	LeafType           uint8
	OriginNetwork      uint32
	OriginAddress      common.Address
	DestinationNetwork uint32
	DestinationAddress common.Address
	Amount             *big.Int
	Metadata           []byte
	DepositCount       uint32
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterBridgeEvent is a free log retrieval operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b.
//
// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount)
func (_Legacy *LegacyFilterer) FilterBridgeEvent(opts *bind.FilterOpts) (*LegacyBridgeEventIterator, error) {

	logs, sub, err := _Legacy.contract.FilterLogs(opts, "BridgeEvent")
	if err != nil {
		return nil, err
	}
	return &LegacyBridgeEventIterator{contract: _Legacy.contract, event: "BridgeEvent", logs: logs, sub: sub}, nil
}

// WatchBridgeEvent is a free log subscription operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b.
//
// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount)
func (_Legacy *LegacyFilterer) WatchBridgeEvent(opts *bind.WatchOpts, sink chan<- *LegacyBridgeEvent) (event.Subscription, error) {

	logs, sub, err := _Legacy.contract.WatchLogs(opts, "BridgeEvent")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(LegacyBridgeEvent)
				if err := _Legacy.contract.UnpackLog(event, "BridgeEvent", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseBridgeEvent is a log parse operation binding the contract event 0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b.
//
// Solidity: event BridgeEvent(uint8 leafType, uint32 originNetwork, address originAddress, uint32 destinationNetwork, address destinationAddress, uint256 amount, bytes metadata, uint32 depositCount)
func (_Legacy *LegacyFilterer) ParseBridgeEvent(log types.Log) (*LegacyBridgeEvent, error) {
	event := new(LegacyBridgeEvent)
	if err := _Legacy.contract.UnpackLog(event, "BridgeEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LegacyClaimEventIterator is returned from FilterClaimEvent and is used to iterate over the raw logs and unpacked data for ClaimEvent events raised by the Legacy contract.
type LegacyClaimEventIterator struct {
	Event *LegacyClaimEvent // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *LegacyClaimEventIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(LegacyClaimEvent)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(LegacyClaimEvent)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *LegacyClaimEventIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LegacyClaimEventIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LegacyClaimEvent represents a ClaimEvent event raised by the Legacy contract.
type LegacyClaimEvent struct {
	Index              uint32
	OriginNetwork      uint32
	OriginAddress      common.Address
	DestinationAddress common.Address
	Amount             *big.Int
	Raw                types.Log // Blockchain specific contextual infos
}

// FilterClaimEvent is a free log retrieval operation binding the contract event 0x25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983.
//
// Solidity: event ClaimEvent(uint32 index, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount)
func (_Legacy *LegacyFilterer) FilterClaimEvent(opts *bind.FilterOpts) (*LegacyClaimEventIterator, error) {

	logs, sub, err := _Legacy.contract.FilterLogs(opts, "ClaimEvent")
	if err != nil {
		return nil, err
	}
	return &LegacyClaimEventIterator{contract: _Legacy.contract, event: "ClaimEvent", logs: logs, sub: sub}, nil
}

// WatchClaimEvent is a free log subscription operation binding the contract event 0x25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983.
//
// Solidity: event ClaimEvent(uint32 index, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount)
func (_Legacy *LegacyFilterer) WatchClaimEvent(opts *bind.WatchOpts, sink chan<- *LegacyClaimEvent) (event.Subscription, error) {

	logs, sub, err := _Legacy.contract.WatchLogs(opts, "ClaimEvent")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(LegacyClaimEvent)
				if err := _Legacy.contract.UnpackLog(event, "ClaimEvent", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseClaimEvent is a log parse operation binding the contract event 0x25308c93ceeed162da955b3f7ce3e3f93606579e40fb92029faa9efe27545983.
//
// Solidity: event ClaimEvent(uint32 index, uint32 originNetwork, address originAddress, address destinationAddress, uint256 amount)
func (_Legacy *LegacyFilterer) ParseClaimEvent(log types.Log) (*LegacyClaimEvent, error) {
	event := new(LegacyClaimEvent)
	if err := _Legacy.contract.UnpackLog(event, "ClaimEvent", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LegacyEmergencyStateActivatedIterator is returned from FilterEmergencyStateActivated and is used to iterate over the raw logs and unpacked data for EmergencyStateActivated events raised by the Legacy contract.
type LegacyEmergencyStateActivatedIterator struct {
	Event *LegacyEmergencyStateActivated // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *LegacyEmergencyStateActivatedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(LegacyEmergencyStateActivated)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(LegacyEmergencyStateActivated)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *LegacyEmergencyStateActivatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LegacyEmergencyStateActivatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LegacyEmergencyStateActivated represents a EmergencyStateActivated event raised by the Legacy contract.
type LegacyEmergencyStateActivated struct {
	Raw types.Log // Blockchain specific contextual infos
}

// FilterEmergencyStateActivated is a free log retrieval operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497.
//
// Solidity: event EmergencyStateActivated()
func (_Legacy *LegacyFilterer) FilterEmergencyStateActivated(opts *bind.FilterOpts) (*LegacyEmergencyStateActivatedIterator, error) {

	logs, sub, err := _Legacy.contract.FilterLogs(opts, "EmergencyStateActivated")
	if err != nil {
		return nil, err
	}
	return &LegacyEmergencyStateActivatedIterator{contract: _Legacy.contract, event: "EmergencyStateActivated", logs: logs, sub: sub}, nil
}

// WatchEmergencyStateActivated is a free log subscription operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497.
//
// Solidity: event EmergencyStateActivated()
func (_Legacy *LegacyFilterer) WatchEmergencyStateActivated(opts *bind.WatchOpts, sink chan<- *LegacyEmergencyStateActivated) (event.Subscription, error) {

	logs, sub, err := _Legacy.contract.WatchLogs(opts, "EmergencyStateActivated")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(LegacyEmergencyStateActivated)
				if err := _Legacy.contract.UnpackLog(event, "EmergencyStateActivated", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseEmergencyStateActivated is a log parse operation binding the contract event 0x2261efe5aef6fedc1fd1550b25facc9181745623049c7901287030b9ad1a5497.
//
// Solidity: event EmergencyStateActivated()
func (_Legacy *LegacyFilterer) ParseEmergencyStateActivated(log types.Log) (*LegacyEmergencyStateActivated, error) {
	event := new(LegacyEmergencyStateActivated)
	if err := _Legacy.contract.UnpackLog(event, "EmergencyStateActivated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LegacyEmergencyStateDeactivatedIterator is returned from FilterEmergencyStateDeactivated and is used to iterate over the raw logs and unpacked data for EmergencyStateDeactivated events raised by the Legacy contract.
type LegacyEmergencyStateDeactivatedIterator struct {
	Event *LegacyEmergencyStateDeactivated // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *LegacyEmergencyStateDeactivatedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(LegacyEmergencyStateDeactivated)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(LegacyEmergencyStateDeactivated)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *LegacyEmergencyStateDeactivatedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LegacyEmergencyStateDeactivatedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LegacyEmergencyStateDeactivated represents a EmergencyStateDeactivated event raised by the Legacy contract.
type LegacyEmergencyStateDeactivated struct {
	Raw types.Log // Blockchain specific contextual infos
}

// FilterEmergencyStateDeactivated is a free log retrieval operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3.
//
// Solidity: event EmergencyStateDeactivated()
func (_Legacy *LegacyFilterer) FilterEmergencyStateDeactivated(opts *bind.FilterOpts) (*LegacyEmergencyStateDeactivatedIterator, error) {

	logs, sub, err := _Legacy.contract.FilterLogs(opts, "EmergencyStateDeactivated")
	if err != nil {
		return nil, err
	}
	return &LegacyEmergencyStateDeactivatedIterator{contract: _Legacy.contract, event: "EmergencyStateDeactivated", logs: logs, sub: sub}, nil
}

// WatchEmergencyStateDeactivated is a free log subscription operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3.
//
// Solidity: event EmergencyStateDeactivated()
func (_Legacy *LegacyFilterer) WatchEmergencyStateDeactivated(opts *bind.WatchOpts, sink chan<- *LegacyEmergencyStateDeactivated) (event.Subscription, error) {

	logs, sub, err := _Legacy.contract.WatchLogs(opts, "EmergencyStateDeactivated")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(LegacyEmergencyStateDeactivated)
				if err := _Legacy.contract.UnpackLog(event, "EmergencyStateDeactivated", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseEmergencyStateDeactivated is a log parse operation binding the contract event 0x1e5e34eea33501aecf2ebec9fe0e884a40804275ea7fe10b2ba084c8374308b3.
//
// Solidity: event EmergencyStateDeactivated()
func (_Legacy *LegacyFilterer) ParseEmergencyStateDeactivated(log types.Log) (*LegacyEmergencyStateDeactivated, error) {
	event := new(LegacyEmergencyStateDeactivated)
	if err := _Legacy.contract.UnpackLog(event, "EmergencyStateDeactivated", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LegacyInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Legacy contract.
type LegacyInitializedIterator struct {
	Event *LegacyInitialized // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *LegacyInitializedIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(LegacyInitialized)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(LegacyInitialized)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *LegacyInitializedIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LegacyInitializedIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LegacyInitialized represents a Initialized event raised by the Legacy contract.
type LegacyInitialized struct {
	Version uint8
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498.
//
// Solidity: event Initialized(uint8 version)
func (_Legacy *LegacyFilterer) FilterInitialized(opts *bind.FilterOpts) (*LegacyInitializedIterator, error) {

	logs, sub, err := _Legacy.contract.FilterLogs(opts, "Initialized")
	if err != nil {
		return nil, err
	}
	return &LegacyInitializedIterator{contract: _Legacy.contract, event: "Initialized", logs: logs, sub: sub}, nil
}

// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498.
//
// Solidity: event Initialized(uint8 version)
func (_Legacy *LegacyFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *LegacyInitialized) (event.Subscription, error) {

	logs, sub, err := _Legacy.contract.WatchLogs(opts, "Initialized")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(LegacyInitialized)
				if err := _Legacy.contract.UnpackLog(event, "Initialized", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498.
//
// Solidity: event Initialized(uint8 version)
func (_Legacy *LegacyFilterer) ParseInitialized(log types.Log) (*LegacyInitialized, error) {
	event := new(LegacyInitialized)
	if err := _Legacy.contract.UnpackLog(event, "Initialized", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// LegacyNewWrappedTokenIterator is returned from FilterNewWrappedToken and is used to iterate over the raw logs and unpacked data for NewWrappedToken events raised by the Legacy contract.
type LegacyNewWrappedTokenIterator struct {
	Event *LegacyNewWrappedToken // Event containing the contract specifics and raw log

	contract *bind.BoundContract // Generic contract to use for unpacking event data
	event    string              // Event name to use for unpacking event data

	logs chan types.Log        // Log channel receiving the found contract events
	sub  ethereum.Subscription // Subscription for errors, completion and termination
	done bool                  // Whether the subscription completed delivering logs
	fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *LegacyNewWrappedTokenIterator) Next() bool {
	// If the iterator failed, stop iterating
	if it.fail != nil {
		return false
	}
	// If the iterator completed, deliver directly whatever's available
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(LegacyNewWrappedToken)
			if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
				it.fail = err
				return false
			}
			it.Event.Raw = log
			return true

		default:
			return false
		}
	}
	// Iterator still in progress, wait for either a data or an error event
	select {
	case log := <-it.logs:
		it.Event = new(LegacyNewWrappedToken)
		if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
			it.fail = err
			return false
		}
		it.Event.Raw = log
		return true

	case err := <-it.sub.Err():
		it.done = true
		it.fail = err
		return it.Next()
	}
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *LegacyNewWrappedTokenIterator) Error() error {
	return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *LegacyNewWrappedTokenIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}

// LegacyNewWrappedToken represents a NewWrappedToken event raised by the Legacy contract.
type LegacyNewWrappedToken struct {
	OriginNetwork       uint32
	OriginTokenAddress  common.Address
	WrappedTokenAddress common.Address
	Metadata            []byte
	Raw                 types.Log // Blockchain specific contextual infos
}

// FilterNewWrappedToken is a free log retrieval operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39.
//
// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata)
func (_Legacy *LegacyFilterer) FilterNewWrappedToken(opts *bind.FilterOpts) (*LegacyNewWrappedTokenIterator, error) {

	logs, sub, err := _Legacy.contract.FilterLogs(opts, "NewWrappedToken")
	if err != nil {
		return nil, err
	}
	return &LegacyNewWrappedTokenIterator{contract: _Legacy.contract, event: "NewWrappedToken", logs: logs, sub: sub}, nil
}

// WatchNewWrappedToken is a free log subscription operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39.
//
// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata)
func (_Legacy *LegacyFilterer) WatchNewWrappedToken(opts *bind.WatchOpts, sink chan<- *LegacyNewWrappedToken) (event.Subscription, error) {

	logs, sub, err := _Legacy.contract.WatchLogs(opts, "NewWrappedToken")
	if err != nil {
		return nil, err
	}
	return event.NewSubscription(func(quit <-chan struct{}) error {
		defer sub.Unsubscribe()
		for {
			select {
			case log := <-logs:
				// New log arrived, parse the event and forward to the user
				event := new(LegacyNewWrappedToken)
				if err := _Legacy.contract.UnpackLog(event, "NewWrappedToken", log); err != nil {
					return err
				}
				event.Raw = log

				select {
				case sink <- event:
				case err := <-sub.Err():
					return err
				case <-quit:
					return nil
				}
			case err := <-sub.Err():
				return err
			case <-quit:
				return nil
			}
		}
	}), nil
}

// ParseNewWrappedToken is a log parse operation binding the contract event 0x490e59a1701b938786ac72570a1efeac994a3dbe96e2e883e19e902ace6e6a39.
//
// Solidity: event NewWrappedToken(uint32 originNetwork, address originTokenAddress, address wrappedTokenAddress, bytes metadata)
func (_Legacy *LegacyFilterer) ParseNewWrappedToken(log types.Log) (*LegacyNewWrappedToken, error) {
	event := new(LegacyNewWrappedToken)
	if err := _Legacy.contract.UnpackLog(event, "NewWrappedToken", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
