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

package contractAutomationServiceManager

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
)

// BN254G1Point is an auto generated low-level Go binding around an user-defined struct.
type BN254G1Point struct {
	X *big.Int
	Y *big.Int
}

// BN254G2Point is an auto generated low-level Go binding around an user-defined struct.
type BN254G2Point struct {
	X [2]*big.Int
	Y [2]*big.Int
}

// IBLSSignatureCheckerNonSignerStakesAndSignature is an auto generated low-level Go binding around an user-defined struct.
type IBLSSignatureCheckerNonSignerStakesAndSignature struct {
	NonSignerQuorumBitmapIndices []uint32
	NonSignerPubkeys             []BN254G1Point
	QuorumApks                   []BN254G1Point
	ApkG2                        BN254G2Point
	Sigma                        BN254G1Point
	QuorumApkIndices             []uint32
	TotalStakeIndices            []uint32
	NonSignerStakeIndices        [][]uint32
}

// IBLSSignatureCheckerQuorumStakeTotals is an auto generated low-level Go binding around an user-defined struct.
type IBLSSignatureCheckerQuorumStakeTotals struct {
	SignedStakeForQuorum []*big.Int
	TotalStakeForQuorum  []*big.Int
}

// ISignatureUtilsSignatureWithSaltAndExpiry is an auto generated low-level Go binding around an user-defined struct.
type ISignatureUtilsSignatureWithSaltAndExpiry struct {
	Signature []byte
	Salt      [32]byte
	Expiry    *big.Int
}

// ContractAutomationServiceManagerMetaData contains all meta data concerning the ContractAutomationServiceManager contract.
var ContractAutomationServiceManagerMetaData = &bind.MetaData{
	ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"__avsDirectory\",\"type\":\"address\",\"internalType\":\"contractIAVSDirectory\"},{\"name\":\"__registryCoordinator\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"},{\"name\":\"__stakeRegistry\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"automationTaskManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAutomationTaskManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsDirectory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blsApkRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBLSApkRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkSignatures\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"quorumNumbers\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.NonSignerStakesAndSignature\",\"components\":[{\"name\":\"nonSignerQuorumBitmapIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerPubkeys\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApks\",\"type\":\"tuple[]\",\"internalType\":\"structBN254.G1Point[]\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"quorumApkIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"totalStakeIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"nonSignerStakeIndices\",\"type\":\"uint32[][]\",\"internalType\":\"uint32[][]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIBLSSignatureChecker.QuorumStakeTotals\",\"components\":[{\"name\":\"signedStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"},{\"name\":\"totalStakeForQuorum\",\"type\":\"uint96[]\",\"internalType\":\"uint96[]\"}]},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getOperatorRestakedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRestakeableStrategies\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_whitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtils.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registryCoordinator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIRegistryCoordinator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPauserRegistry\",\"inputs\":[{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStaleStakesForbidden\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setWhitelister\",\"inputs\":[{\"name\":\"whitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakeRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStakeRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"staleStakesForbidden\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"trySignatureAndApkVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"sigma\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"siganatureIsValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"_metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelister\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAdded\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemoved\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PauserRegistrySet\",\"inputs\":[{\"name\":\"pauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"newPauserRegistry\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIPauserRegistry\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaleStakesForbiddenUpdate\",\"inputs\":[{\"name\":\"value\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]",
	Bin: "0x6101606040523480156200001257600080fd5b5060405162004951380380620049518339810160408190526200003591620002da565b6001600160a01b0380841660c052808316608052811660a052818381836200005c620001ff565b5050506001600160a01b03811660e081905260408051636830483560e01b815290516368304835916004808201926020929091908290030181865afa158015620000aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d091906200032e565b6001600160a01b0316610100816001600160a01b031681525050806001600160a01b0316635df459466040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000129573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014f91906200032e565b6001600160a01b0316610120816001600160a01b031681525050610100516001600160a01b031663df5cf7236040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d191906200032e565b6001600160a01b03166101405250609b805460ff19166001179055620001f6620001ff565b50505062000355565b600054610100900460ff16156200026c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620002bf576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114620002d757600080fd5b50565b600080600060608486031215620002f057600080fd5b8351620002fd81620002c1565b60208501519093506200031081620002c1565b60408501519092506200032381620002c1565b809150509250925092565b6000602082840312156200034157600080fd5b81516200034e81620002c1565b9392505050565b60805160a05160c05160e0516101005161012051610140516145076200044a6000396000818161042301526117270152600081816102e2015261190901526000818161030901528181611adf0152611ca101526000818161035601528181610e05015281816113f20152818161158a01526117c401526000818161032d0152818161202501528181612189015261223b015260008181610a0501528181610b6001528181610bf701528181612366015281816124e90152612588015260008181610830015281816108bf0152818161093f01528181611fc501528181612121015281816122a4015261244401526145076000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636efb4636116100f9578063a98fb35511610097578063e481af9d11610071578063e481af9d14610445578063f2fde38b1461044d578063f98f5b9214610460578063fabc1cbc1461047357600080fd5b8063a98fb355146103fe578063b98d090814610411578063df5cf7231461041e57600080fd5b80638da5cb5b116100d35780638da5cb5b146103b45780639926ee7d146103c55780639e00cbcb146103d8578063a364f4da146103eb57600080fd5b80636efb463614610378578063715018a614610399578063886f1195146103a157600080fd5b8063595c6a67116101665780635df45946116101405780635df45946146102dd57806368304835146103045780636b3aa72e1461032b5780636d14a9871461035157600080fd5b8063595c6a67146102915780635ac86ab7146102995780635c975abb146102cc57600080fd5b806322758a4a116101a257806322758a4a1461022057806333cfb7b71461024b578063358394d81461026b578063416c7e5e1461027e57600080fd5b806310d67a2f146101c9578063136439dd146101de578063171f1d5b146101f1575b600080fd5b6101dc6101d7366004613814565b610486565b005b6101dc6101ec366004613831565b610542565b6102046101ff3660046139bd565b610681565b6040805192151583529015156020830152015b60405180910390f35b609854610233906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b61025e610259366004613814565b61080b565b6040516102179190613a0e565b6101dc610279366004613a5b565b610cda565b6101dc61028c366004613abc565b610e03565b6101dc610f78565b6102bc6102a7366004613ae8565b60ce54600160ff9092169190911b9081161490565b6040519015158152602001610217565b60ce54604051908152602001610217565b6102337f000000000000000000000000000000000000000000000000000000000000000081565b6102337f000000000000000000000000000000000000000000000000000000000000000081565b7f0000000000000000000000000000000000000000000000000000000000000000610233565b6102337f000000000000000000000000000000000000000000000000000000000000000081565b61038b610386366004613dbb565b61103f565b604051610217929190613eae565b6101dc611f56565b60cd54610233906001600160a01b031681565b6033546001600160a01b0316610233565b6101dc6103d3366004613f4e565b611f6a565b609754610233906001600160a01b031681565b6101dc6103f9366004613814565b6120c6565b6101dc61040c366004613ff8565b61221c565b609b546102bc9060ff1681565b6102337f000000000000000000000000000000000000000000000000000000000000000081565b61025e61229e565b6101dc61045b366004613814565b612667565b6101dc61046e366004613814565b6126dd565b6101dc610481366004613831565b6126ee565b60cd60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190614048565b6001600160a01b0316336001600160a01b0316146105365760405162461bcd60e51b815260040161052d90614065565b60405180910390fd5b61053f8161284a565b50565b60cd5460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ae91906140af565b6105ca5760405162461bcd60e51b815260040161052d906140cc565b60ce54818116146106435760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e70617573653a20696e76616c696420617474656d70742060448201527f746f20756e70617573652066756e6374696f6e616c6974790000000000000000606482015260840161052d565b60ce81905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d906020015b60405180910390a250565b60008060007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001878760000151886020015188600001516000600281106106c9576106c9614114565b60200201518951600160200201518a602001516000600281106106ee576106ee614114565b60200201518b6020015160016002811061070a5761070a614114565b602090810291909101518c518d8301516040516107679a99989796959401988952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b6040516020818303038152906040528051906020012060001c61078a919061412a565b90506107fd6107a361079c8884612941565b86906129d8565b6107ab612a6c565b6107f36107e4856107de604080518082018252600080825260209182015281518083019092526001825260029082015290565b90612941565b6107ed8c612b2c565b906129d8565b886201d4c0612bbc565b909890975095505050505050565b6040516309aa152760e11b81526001600160a01b0382811660048301526060916000917f000000000000000000000000000000000000000000000000000000000000000016906313542a4e90602401602060405180830381865afa158015610877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089b919061414c565b60405163871ef04960e01b8152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063871ef04990602401602060405180830381865afa158015610906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092a9190614165565b90506001600160c01b03811615806109c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf919061418e565b60ff16155b156109e057505060408051600081526020810190915292915050565b60006109f4826001600160c01b0316612de0565b90506000805b8251811015610aca577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633ca5a5f5848381518110610a4457610a44614114565b01602001516040516001600160e01b031960e084901b16815260f89190911c6004820152602401602060405180830381865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac919061414c565b610ab690836141c1565b915080610ac2816141d9565b9150506109fa565b506000816001600160401b03811115610ae557610ae561384a565b604051908082528060200260200182016040528015610b0e578160200160208202803683370190505b5090506000805b8451811015610ccd576000858281518110610b3257610b32614114565b0160200151604051633ca5a5f560e01b815260f89190911c6004820181905291506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633ca5a5f590602401602060405180830381865afa158015610ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb919061414c565b905060005b81811015610cb7576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061420b565b60000151868681518110610c7f57610c7f614114565b6001600160a01b039092166020928302919091019091015284610ca1816141d9565b9550508080610caf906141d9565b915050610bd0565b5050508080610cc5906141d9565b915050610b15565b5090979650505050505050565b600054610100900460ff1615808015610cfa5750600054600160ff909116105b80610d145750303b158015610d14575060005460ff166001145b610d775760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161052d565b6000805460ff191660011790558015610d9a576000805461ff0019166101001790555b610da48585612ea2565b610dad83612f8c565b610db682612ff7565b8015610dfc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e859190614048565b6001600160a01b0316336001600160a01b031614610f315760405162461bcd60e51b815260206004820152605c60248201527f424c535369676e6174757265436865636b65722e6f6e6c79436f6f7264696e6160448201527f746f724f776e65723a2063616c6c6572206973206e6f7420746865206f776e6560648201527f72206f6620746865207265676973747279436f6f7264696e61746f7200000000608482015260a40161052d565b609b805460ff19168215159081179091556040519081527f40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc9060200160405180910390a150565b60cd5460405163237dfb4760e11b81523360048201526001600160a01b03909116906346fbf68e90602401602060405180830381865afa158015610fc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe491906140af565b6110005760405162461bcd60e51b815260040161052d906140cc565b60001960ce81905560405190815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2565b60408051808201909152606080825260208201526000846110b65760405162461bcd60e51b815260206004820152603760248201526000805160206144b283398151915260448201527f7265733a20656d7074792071756f72756d20696e707574000000000000000000606482015260840161052d565b604083015151851480156110ce575060a08301515185145b80156110de575060c08301515185145b80156110ee575060e08301515185145b6111585760405162461bcd60e51b815260206004820152604160248201526000805160206144b283398151915260448201527f7265733a20696e7075742071756f72756d206c656e677468206d69736d6174636064820152600d60fb1b608482015260a40161052d565b825151602084015151146111d05760405162461bcd60e51b8152602060048201526044602482018190526000805160206144b2833981519152908201527f7265733a20696e707574206e6f6e7369676e6572206c656e677468206d69736d6064820152630c2e8c6d60e31b608482015260a40161052d565b4363ffffffff168463ffffffff161061123f5760405162461bcd60e51b815260206004820152603c60248201526000805160206144b283398151915260448201527f7265733a20696e76616c6964207265666572656e636520626c6f636b00000000606482015260840161052d565b6040805180820182526000808252602080830191909152825180840190935260608084529083015290866001600160401b038111156112805761128061384a565b6040519080825280602002602001820160405280156112a9578160200160208202803683370190505b506020820152866001600160401b038111156112c7576112c761384a565b6040519080825280602002602001820160405280156112f0578160200160208202803683370190505b50815260408051808201909152606080825260208201528560200151516001600160401b038111156113245761132461384a565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b5081526020860151516001600160401b0381111561136d5761136d61384a565b604051908082528060200260200182016040528015611396578160200160208202803683370190505b50816020018190525060006114688a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051639aa1653d60e01b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350639aa1653d925060048083019260209291908290030181865afa15801561143f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611463919061418e565b613019565b905060005b876020015151811015611703576114b28860200151828151811061149357611493614114565b6020026020010151805160009081526020918201519091526040902090565b836020015182815181106114c8576114c8614114565b602090810291909101015280156115885760208301516114e960018361424a565b815181106114f9576114f9614114565b602002602001015160001c8360200151828151811061151a5761151a614114565b602002602001015160001c11611588576040805162461bcd60e51b81526020600482015260248101919091526000805160206144b283398151915260448201527f7265733a206e6f6e5369676e65725075626b657973206e6f7420736f72746564606482015260840161052d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166304ec6351846020015183815181106115cd576115cd614114565b60200260200101518b8b6000015185815181106115ec576115ec614114565b60200260200101516040518463ffffffff1660e01b81526004016116299392919092835263ffffffff918216602084015216604082015260600190565b602060405180830381865afa158015611646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166a9190614165565b6001600160c01b03168360000151828151811061168957611689614114565b6020026020010181815250506116ef61079c6116c384866000015185815181106116b5576116b5614114565b6020026020010151166130ac565b8a6020015184815181106116d9576116d9614114565b60200260200101516130d790919063ffffffff16565b9450806116fb816141d9565b91505061146d565b505061170e836131bb565b609b5490935060ff166000816117255760006117a7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c448feb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a7919061414c565b905060005b8a811015611e25578215611907578963ffffffff16827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663249a0c428f8f8681811061180357611803614114565b60405160e085901b6001600160e01b031916815292013560f81c600483015250602401602060405180830381865afa158015611843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611867919061414c565b61187191906141c1565b116119075760405162461bcd60e51b815260206004820152606660248201526000805160206144b283398151915260448201527f7265733a205374616b6552656769737472792075706461746573206d7573742060648201527f62652077697468696e207769746864726177616c44656c6179426c6f636b732060848201526577696e646f7760d01b60a482015260c40161052d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166368bccaac8d8d8481811061194857611948614114565b9050013560f81c60f81b60f81c8c8c60a00151858151811061196c5761196c614114565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa1580156119c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ec9190614261565b6001600160401b031916611a0f8a60400151838151811061149357611493614114565b67ffffffffffffffff191614611aab5760405162461bcd60e51b815260206004820152606160248201526000805160206144b283398151915260448201527f7265733a2071756f72756d41706b206861736820696e2073746f72616765206460648201527f6f6573206e6f74206d617463682070726f76696465642071756f72756d2061706084820152606b60f81b60a482015260c40161052d565b611adb89604001518281518110611ac457611ac4614114565b6020026020010151876129d890919063ffffffff16565b95507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c8294c568d8d84818110611b1e57611b1e614114565b9050013560f81c60f81b60f81c8c8c60c001518581518110611b4257611b42614114565b60209081029190910101516040516001600160e01b031960e086901b16815260ff909316600484015263ffffffff9182166024840152166044820152606401602060405180830381865afa158015611b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc2919061428c565b85602001518281518110611bd857611bd8614114565b6001600160601b03909216602092830291909101820152850151805182908110611c0457611c04614114565b602002602001015185600001518281518110611c2257611c22614114565b60200260200101906001600160601b031690816001600160601b0316815250506000805b8a6020015151811015611e1057611c9a86600001518281518110611c6c57611c6c614114565b60200260200101518f8f86818110611c8657611c86614114565b600192013560f81c9290921c811614919050565b15611dfe577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f2be94ae8f8f86818110611ce057611ce0614114565b9050013560f81c60f81b60f81c8e89602001518581518110611d0457611d04614114565b60200260200101518f60e001518881518110611d2257611d22614114565b60200260200101518781518110611d3b57611d3b614114565b60209081029190910101516040516001600160e01b031960e087901b16815260ff909416600485015263ffffffff92831660248501526044840191909152166064820152608401602060405180830381865afa158015611d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc3919061428c565b8751805185908110611dd757611dd7614114565b60200260200101818151611deb91906142a7565b6001600160601b03169052506001909101905b80611e08816141d9565b915050611c46565b50508080611e1d906141d9565b9150506117ac565b505050600080611e3f8c868a606001518b60800151610681565b9150915081611eb05760405162461bcd60e51b815260206004820152604360248201526000805160206144b283398151915260448201527f7265733a2070616972696e6720707265636f6d70696c652063616c6c206661696064820152621b195960ea1b608482015260a40161052d565b80611f115760405162461bcd60e51b815260206004820152603960248201526000805160206144b283398151915260448201527f7265733a207369676e617475726520697320696e76616c696400000000000000606482015260840161052d565b50506000878260200151604051602001611f2c9291906142cf565b60408051808303601f190181529190528051602090910120929b929a509198505050505050505050565b611f5e613256565b611f6860006132b0565b565b60ce5415611fba5760405162461bcd60e51b815260206004820152601c60248201527f5061757361626c653a20636f6e74726163742069732070617573656400000000604482015260640161052d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146120025760405162461bcd60e51b815260040161052d90614317565b61200d609983613302565b50604051639926ee7d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639926ee7d9061205c90859085906004016143dc565b600060405180830381600087803b15801561207657600080fd5b505af115801561208a573d6000803e3d6000fd5b50506040516001600160a01b03851692507fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d9150600090a25050565b60ce54156121165760405162461bcd60e51b815260206004820152601c60248201527f5061757361626c653a20636f6e74726163742069732070617573656400000000604482015260640161052d565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461215e5760405162461bcd60e51b815260040161052d90614317565b612169609982613317565b506040516351b27a6d60e11b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a364f4da90602401600060405180830381600087803b1580156121cd57600080fd5b505af11580156121e1573d6000803e3d6000fd5b50506040516001600160a01b03841692507f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d9150600090a250565b612224613256565b60405163a98fb35560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a98fb35590612270908490600401614427565b600060405180830381600087803b15801561228a57600080fd5b505af1158015610dfc573d6000803e3d6000fd5b606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612324919061418e565b60ff1690508061234257505060408051600081526020810190915290565b6000805b828110156123f757604051633ca5a5f560e01b815260ff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa1580156123b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d9919061414c565b6123e390836141c1565b9150806123ef816141d9565b915050612346565b506000816001600160401b038111156124125761241261384a565b60405190808252806020026020018201604052801561243b578160200160208202803683370190505b5090506000805b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639aa1653d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c4919061418e565b60ff1681101561265d57604051633ca5a5f560e01b815260ff821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633ca5a5f590602401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255c919061414c565b905060005b81811015612648576040516356e4026d60e11b815260ff84166004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063adc804da906044016040805180830381865afa1580156125d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fa919061420b565b6000015185858151811061261057612610614114565b6001600160a01b039092166020928302919091019091015283612632816141d9565b9450508080612640906141d9565b915050612561565b50508080612655906141d9565b915050612442565b5090949350505050565b61266f613256565b6001600160a01b0381166126d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052d565b61053f816132b0565b6126e5613256565b61053f81612ff7565b60cd60009054906101000a90046001600160a01b03166001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127659190614048565b6001600160a01b0316336001600160a01b0316146127955760405162461bcd60e51b815260040161052d90614065565b60ce5419811960ce541916146128135760405162461bcd60e51b815260206004820152603860248201527f5061757361626c652e756e70617573653a20696e76616c696420617474656d7060448201527f7420746f2070617573652066756e6374696f6e616c6974790000000000000000606482015260840161052d565b60ce81905560405181815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c90602001610676565b6001600160a01b0381166128d85760405162461bcd60e51b815260206004820152604960248201527f5061757361626c652e5f73657450617573657252656769737472793a206e657760448201527f50617573657252656769737472792063616e6e6f7420626520746865207a65726064820152686f206164647265737360b81b608482015260a40161052d565b60cd54604080516001600160a01b03928316815291831660208301527f6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6910160405180910390a160cd80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518082019091526000808252602082015261295d613725565b835181526020808501519082015260408082018490526000908360608460076107d05a03fa905080801561299057612992565bfe5b50806129d05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5b5d5b0b59985a5b1959609a1b604482015260640161052d565b505092915050565b60408051808201909152600080825260208201526129f4613743565b835181526020808501518183015283516040808401919091529084015160608301526000908360808460066107d05a03fa90508080156129905750806129d05760405162461bcd60e51b815260206004820152600d60248201526c1958cb5859190b59985a5b1959609a1b604482015260640161052d565b612a74613761565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b604080518082019091526000808252602082015260008080612b5c6000805160206144928339815191528661412a565b90505b612b688161332c565b9093509150600080516020614492833981519152828309831415612ba2576040805180820190915290815260208101919091529392505050565b600080516020614492833981519152600182089050612b5f565b604080518082018252868152602080820186905282518084019093528683528201849052600091829190612bee613786565b60005b6002811015612db3576000612c0782600661443a565b9050848260028110612c1b57612c1b614114565b60200201515183612c2d8360006141c1565b600c8110612c3d57612c3d614114565b6020020152848260028110612c5457612c54614114565b60200201516020015183826001612c6b91906141c1565b600c8110612c7b57612c7b614114565b6020020152838260028110612c9257612c92614114565b6020020151515183612ca58360026141c1565b600c8110612cb557612cb5614114565b6020020152838260028110612ccc57612ccc614114565b6020020151516001602002015183612ce58360036141c1565b600c8110612cf557612cf5614114565b6020020152838260028110612d0c57612d0c614114565b602002015160200151600060028110612d2757612d27614114565b602002015183612d388360046141c1565b600c8110612d4857612d48614114565b6020020152838260028110612d5f57612d5f614114565b602002015160200151600160028110612d7a57612d7a614114565b602002015183612d8b8360056141c1565b600c8110612d9b57612d9b614114565b60200201525080612dab816141d9565b915050612bf1565b50612dbc6137a5565b60006020826101808560088cfa9151919c9115159b50909950505050505050505050565b6060600080612dee846130ac565b61ffff166001600160401b03811115612e0957612e0961384a565b6040519080825280601f01601f191660200182016040528015612e33576020820181803683370190505b5090506000805b825182108015612e4b575061010081105b1561265d576001811b935085841615612e92578060f81b838381518110612e7457612e74614114565b60200101906001600160f81b031916908160001a9053508160010191505b612e9b816141d9565b9050612e3a565b60cd546001600160a01b0316158015612ec357506001600160a01b03821615155b612f455760405162461bcd60e51b815260206004820152604760248201527f5061757361626c652e5f696e697469616c697a655061757365723a205f696e6960448201527f7469616c697a6550617573657228292063616e206f6e6c792062652063616c6c6064820152666564206f6e636560c81b608482015260a40161052d565b60ce81905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a2612f888261284a565b5050565b600054610100900460ff166126d45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161052d565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b600080613025846133ae565b9050808360ff166001901b116130a35760405162461bcd60e51b815260206004820152603f60248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206269746d61702065786365656473206d61782076616c756500606482015260840161052d565b90505b92915050565b6000805b82156130a6576130c160018461424a565b90921691806130cf81614459565b9150506130b0565b60408051808201909152600080825260208201526102008261ffff16106131335760405162461bcd60e51b815260206004820152601060248201526f7363616c61722d746f6f2d6c6172676560801b604482015260640161052d565b8161ffff16600114156131475750816130a6565b6040805180820190915260008082526020820181905284906001905b8161ffff168661ffff16106131b057600161ffff871660ff83161c811614156131935761319084846129d8565b93505b61319d83846129d8565b92506201fffe600192831b169101613163565b509195945050505050565b604080518082019091526000808252602082015281511580156131e057506020820151155b156131fe575050604080518082019091526000808252602082015290565b6040518060400160405280836000015181526020016000805160206144928339815191528460200151613231919061412a565b6132499060008051602061449283398151915261424a565b905292915050565b919050565b6033546001600160a01b03163314611f685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161052d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006130a3836001600160a01b03841661353b565b60006130a3836001600160a01b03841661358a565b600080806000805160206144928339815191526003600080516020614492833981519152866000805160206144928339815191528889090908905060006133a2827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f5260008051602061449283398151915261367d565b91959194509092505050565b6000610100825111156134375760405162461bcd60e51b8152602060048201526044602482018190527f4269746d61705574696c732e6f72646572656442797465734172726179546f42908201527f69746d61703a206f7264657265644279746573417272617920697320746f6f206064820152636c6f6e6760e01b608482015260a40161052d565b815161344557506000919050565b6000808360008151811061345b5761345b614114565b0160200151600160f89190911c81901b92505b84518110156135325784818151811061348957613489614114565b0160200151600160f89190911c1b915082821161351e5760405162461bcd60e51b815260206004820152604760248201527f4269746d61705574696c732e6f72646572656442797465734172726179546f4260448201527f69746d61703a206f72646572656442797465734172726179206973206e6f74206064820152661bdc99195c995960ca1b608482015260a40161052d565b9181179161352b816141d9565b905061346e565b50909392505050565b6000818152600183016020526040812054613582575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556130a6565b5060006130a6565b600081815260018301602052604081205480156136735760006135ae60018361424a565b85549091506000906135c29060019061424a565b90508181146136275760008660000182815481106135e2576135e2614114565b906000526020600020015490508087600001848154811061360557613605614114565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806136385761363861447b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506130a6565b60009150506130a6565b6000806136886137a5565b6136906137c3565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa925082801561299057508261371a5760405162461bcd60e51b815260206004820152601a60248201527f424e3235342e6578704d6f643a2063616c6c206661696c757265000000000000604482015260640161052d565b505195945050505050565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b60405180604001604052806137746137e1565b81526020016137816137e1565b905290565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461053f57600080fd5b60006020828403121561382657600080fd5b81356130a3816137ff565b60006020828403121561384357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156138825761388261384a565b60405290565b60405161010081016001600160401b03811182821017156138825761388261384a565b604051606081016001600160401b03811182821017156138825761388261384a565b604051601f8201601f191681016001600160401b03811182821017156138f5576138f561384a565b604052919050565b60006040828403121561390f57600080fd5b613917613860565b9050813581526020820135602082015292915050565b600082601f83011261393e57600080fd5b613946613860565b80604084018581111561395857600080fd5b845b8181101561397257803584526020938401930161395a565b509095945050505050565b60006080828403121561398f57600080fd5b613997613860565b90506139a3838361392d565b81526139b2836040840161392d565b602082015292915050565b60008060008061012085870312156139d457600080fd5b843593506139e586602087016138fd565b92506139f4866060870161397d565b9150613a038660e087016138fd565b905092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015613a4f5783516001600160a01b031683529284019291840191600101613a2a565b50909695505050505050565b60008060008060808587031215613a7157600080fd5b8435613a7c816137ff565b9350602085013592506040850135613a93816137ff565b91506060850135613aa3816137ff565b939692955090935050565b801515811461053f57600080fd5b600060208284031215613ace57600080fd5b81356130a381613aae565b60ff8116811461053f57600080fd5b600060208284031215613afa57600080fd5b81356130a381613ad9565b803563ffffffff8116811461325157600080fd5b60006001600160401b03821115613b3257613b3261384a565b5060051b60200190565b600082601f830112613b4d57600080fd5b81356020613b62613b5d83613b19565b6138cd565b82815260059290921b84018101918181019086841115613b8157600080fd5b8286015b84811015613ba357613b9681613b05565b8352918301918301613b85565b509695505050505050565b600082601f830112613bbf57600080fd5b81356020613bcf613b5d83613b19565b82815260069290921b84018101918181019086841115613bee57600080fd5b8286015b84811015613ba357613c0488826138fd565b835291830191604001613bf2565b600082601f830112613c2357600080fd5b81356020613c33613b5d83613b19565b82815260059290921b84018101918181019086841115613c5257600080fd5b8286015b84811015613ba35780356001600160401b03811115613c755760008081fd5b613c838986838b0101613b3c565b845250918301918301613c56565b60006101808284031215613ca457600080fd5b613cac613888565b905081356001600160401b0380821115613cc557600080fd5b613cd185838601613b3c565b83526020840135915080821115613ce757600080fd5b613cf385838601613bae565b60208401526040840135915080821115613d0c57600080fd5b613d1885838601613bae565b6040840152613d2a856060860161397d565b6060840152613d3c8560e086016138fd565b6080840152610120840135915080821115613d5657600080fd5b613d6285838601613b3c565b60a0840152610140840135915080821115613d7c57600080fd5b613d8885838601613b3c565b60c0840152610160840135915080821115613da257600080fd5b50613daf84828501613c12565b60e08301525092915050565b600080600080600060808688031215613dd357600080fd5b8535945060208601356001600160401b0380821115613df157600080fd5b818801915088601f830112613e0557600080fd5b813581811115613e1457600080fd5b896020828501011115613e2657600080fd5b6020830196509450613e3a60408901613b05565b93506060880135915080821115613e5057600080fd5b50613e5d88828901613c91565b9150509295509295909350565b600081518084526020808501945080840160005b83811015613ea35781516001600160601b031687529582019590820190600101613e7e565b509495945050505050565b6040815260008351604080840152613ec96080840182613e6a565b90506020850151603f19848303016060850152613ee68282613e6a565b925050508260208301529392505050565b60006001600160401b03831115613f1057613f1061384a565b613f23601f8401601f19166020016138cd565b9050828152838383011115613f3757600080fd5b828260208301376000602084830101529392505050565b60008060408385031215613f6157600080fd5b8235613f6c816137ff565b915060208301356001600160401b0380821115613f8857600080fd5b9084019060608287031215613f9c57600080fd5b613fa46138ab565b823582811115613fb357600080fd5b83019150601f82018713613fc657600080fd5b613fd587833560208501613ef7565b815260208301356020820152604083013560408201528093505050509250929050565b60006020828403121561400a57600080fd5b81356001600160401b0381111561402057600080fd5b8201601f8101841361403157600080fd5b61404084823560208401613ef7565b949350505050565b60006020828403121561405a57600080fd5b81516130a3816137ff565b6020808252602a908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526939903ab73830bab9b2b960b11b606082015260800190565b6000602082840312156140c157600080fd5b81516130a381613aae565b60208082526028908201527f6d73672e73656e646572206973206e6f74207065726d697373696f6e6564206160408201526739903830bab9b2b960c11b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008261414757634e487b7160e01b600052601260045260246000fd5b500690565b60006020828403121561415e57600080fd5b5051919050565b60006020828403121561417757600080fd5b81516001600160c01b03811681146130a357600080fd5b6000602082840312156141a057600080fd5b81516130a381613ad9565b634e487b7160e01b600052601160045260246000fd5b600082198211156141d4576141d46141ab565b500190565b60006000198214156141ed576141ed6141ab565b5060010190565b80516001600160601b038116811461325157600080fd5b60006040828403121561421d57600080fd5b614225613860565b8251614230816137ff565b815261423e602084016141f4565b60208201529392505050565b60008282101561425c5761425c6141ab565b500390565b60006020828403121561427357600080fd5b815167ffffffffffffffff19811681146130a357600080fd5b60006020828403121561429e57600080fd5b6130a3826141f4565b60006001600160601b03838116908316818110156142c7576142c76141ab565b039392505050565b63ffffffff60e01b8360e01b1681526000600482018351602080860160005b8381101561430a578151855293820193908201906001016142ee565b5092979650505050505050565b60208082526052908201527f536572766963654d616e61676572426173652e6f6e6c7952656769737472794360408201527f6f6f7264696e61746f723a2063616c6c6572206973206e6f742074686520726560608201527133b4b9ba393c9031b7b7b93234b730ba37b960711b608082015260a00190565b6000815180845260005b818110156143b557602081850181015186830182015201614399565b818111156143c7576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b038316815260406020820152600082516060604084015261440660a084018261438f565b90506020840151606084015260408401516080840152809150509392505050565b6020815260006130a3602083018461438f565b6000816000190483118215151615614454576144546141ab565b500290565b600061ffff80831681811415614471576144716141ab565b6001019392505050565b634e487b7160e01b600052603160045260246000fdfe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47424c535369676e6174757265436865636b65722e636865636b5369676e617475a26469706673582212201b95a64e285c97272da43717a03abc936ce2cb5bc204a78bae514edcf38a50d964736f6c634300080c0033",
}

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

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

// DeployContractAutomationServiceManager deploys a new Ethereum contract, binding an instance of ContractAutomationServiceManager to it.
func DeployContractAutomationServiceManager(auth *bind.TransactOpts, backend bind.ContractBackend, __avsDirectory common.Address, __registryCoordinator common.Address, __stakeRegistry common.Address) (common.Address, *types.Transaction, *ContractAutomationServiceManager, error) {
	parsed, err := ContractAutomationServiceManagerMetaData.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(ContractAutomationServiceManagerBin), backend, __avsDirectory, __registryCoordinator, __stakeRegistry)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &ContractAutomationServiceManager{ContractAutomationServiceManagerCaller: ContractAutomationServiceManagerCaller{contract: contract}, ContractAutomationServiceManagerTransactor: ContractAutomationServiceManagerTransactor{contract: contract}, ContractAutomationServiceManagerFilterer: ContractAutomationServiceManagerFilterer{contract: contract}}, nil
}

// ContractAutomationServiceManager is an auto generated Go binding around an Ethereum contract.
type ContractAutomationServiceManager struct {
	ContractAutomationServiceManagerCaller     // Read-only binding to the contract
	ContractAutomationServiceManagerTransactor // Write-only binding to the contract
	ContractAutomationServiceManagerFilterer   // Log filterer for contract events
}

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

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

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

// ContractAutomationServiceManagerSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type ContractAutomationServiceManagerSession struct {
	Contract     *ContractAutomationServiceManager // 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
}

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

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

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

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

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

// NewContractAutomationServiceManager creates a new instance of ContractAutomationServiceManager, bound to a specific deployed contract.
func NewContractAutomationServiceManager(address common.Address, backend bind.ContractBackend) (*ContractAutomationServiceManager, error) {
	contract, err := bindContractAutomationServiceManager(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManager{ContractAutomationServiceManagerCaller: ContractAutomationServiceManagerCaller{contract: contract}, ContractAutomationServiceManagerTransactor: ContractAutomationServiceManagerTransactor{contract: contract}, ContractAutomationServiceManagerFilterer: ContractAutomationServiceManagerFilterer{contract: contract}}, nil
}

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

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

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

// bindContractAutomationServiceManager binds a generic wrapper to an already deployed contract.
func bindContractAutomationServiceManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := ContractAutomationServiceManagerMetaData.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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ContractAutomationServiceManager.Contract.ContractAutomationServiceManagerCaller.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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.ContractAutomationServiceManagerTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.ContractAutomationServiceManagerTransactor.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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _ContractAutomationServiceManager.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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.contract.Transfer(opts)
}

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

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

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

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

	return out0, err

}

// AutomationTaskManager is a free data retrieval call binding the contract method 0x9e00cbcb.
//
// Solidity: function automationTaskManager() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) AutomationTaskManager() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.AutomationTaskManager(&_ContractAutomationServiceManager.CallOpts)
}

// AutomationTaskManager is a free data retrieval call binding the contract method 0x9e00cbcb.
//
// Solidity: function automationTaskManager() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) AutomationTaskManager() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.AutomationTaskManager(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e.
//
// Solidity: function avsDirectory() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) AvsDirectory() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.AvsDirectory(&_ContractAutomationServiceManager.CallOpts)
}

// AvsDirectory is a free data retrieval call binding the contract method 0x6b3aa72e.
//
// Solidity: function avsDirectory() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) AvsDirectory() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.AvsDirectory(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946.
//
// Solidity: function blsApkRegistry() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) BlsApkRegistry() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.BlsApkRegistry(&_ContractAutomationServiceManager.CallOpts)
}

// BlsApkRegistry is a free data retrieval call binding the contract method 0x5df45946.
//
// Solidity: function blsApkRegistry() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) BlsApkRegistry() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.BlsApkRegistry(&_ContractAutomationServiceManager.CallOpts)
}

// CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636.
//
// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) params) view returns((uint96[],uint96[]), bytes32)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCaller) CheckSignatures(opts *bind.CallOpts, msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, params IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) {
	var out []interface{}
	err := _ContractAutomationServiceManager.contract.Call(opts, &out, "checkSignatures", msgHash, quorumNumbers, referenceBlockNumber, params)

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

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

	return out0, out1, err

}

// CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636.
//
// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) params) view returns((uint96[],uint96[]), bytes32)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) CheckSignatures(msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, params IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) {
	return _ContractAutomationServiceManager.Contract.CheckSignatures(&_ContractAutomationServiceManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, params)
}

// CheckSignatures is a free data retrieval call binding the contract method 0x6efb4636.
//
// Solidity: function checkSignatures(bytes32 msgHash, bytes quorumNumbers, uint32 referenceBlockNumber, (uint32[],(uint256,uint256)[],(uint256,uint256)[],(uint256[2],uint256[2]),(uint256,uint256),uint32[],uint32[],uint32[][]) params) view returns((uint96[],uint96[]), bytes32)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) CheckSignatures(msgHash [32]byte, quorumNumbers []byte, referenceBlockNumber uint32, params IBLSSignatureCheckerNonSignerStakesAndSignature) (IBLSSignatureCheckerQuorumStakeTotals, [32]byte, error) {
	return _ContractAutomationServiceManager.Contract.CheckSignatures(&_ContractAutomationServiceManager.CallOpts, msgHash, quorumNumbers, referenceBlockNumber, params)
}

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

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

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

	return out0, err

}

// Delegation is a free data retrieval call binding the contract method 0xdf5cf723.
//
// Solidity: function delegation() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Delegation() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.Delegation(&_ContractAutomationServiceManager.CallOpts)
}

// Delegation is a free data retrieval call binding the contract method 0xdf5cf723.
//
// Solidity: function delegation() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) Delegation() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.Delegation(&_ContractAutomationServiceManager.CallOpts)
}

// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7.
//
// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[])
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCaller) GetOperatorRestakedStrategies(opts *bind.CallOpts, operator common.Address) ([]common.Address, error) {
	var out []interface{}
	err := _ContractAutomationServiceManager.contract.Call(opts, &out, "getOperatorRestakedStrategies", operator)

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

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

	return out0, err

}

// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7.
//
// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[])
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) {
	return _ContractAutomationServiceManager.Contract.GetOperatorRestakedStrategies(&_ContractAutomationServiceManager.CallOpts, operator)
}

// GetOperatorRestakedStrategies is a free data retrieval call binding the contract method 0x33cfb7b7.
//
// Solidity: function getOperatorRestakedStrategies(address operator) view returns(address[])
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) GetOperatorRestakedStrategies(operator common.Address) ([]common.Address, error) {
	return _ContractAutomationServiceManager.Contract.GetOperatorRestakedStrategies(&_ContractAutomationServiceManager.CallOpts, operator)
}

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

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

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

	return out0, err

}

// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d.
//
// Solidity: function getRestakeableStrategies() view returns(address[])
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) GetRestakeableStrategies() ([]common.Address, error) {
	return _ContractAutomationServiceManager.Contract.GetRestakeableStrategies(&_ContractAutomationServiceManager.CallOpts)
}

// GetRestakeableStrategies is a free data retrieval call binding the contract method 0xe481af9d.
//
// Solidity: function getRestakeableStrategies() view returns(address[])
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) GetRestakeableStrategies() ([]common.Address, error) {
	return _ContractAutomationServiceManager.Contract.GetRestakeableStrategies(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Owner() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.Owner(&_ContractAutomationServiceManager.CallOpts)
}

// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) Owner() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.Owner(&_ContractAutomationServiceManager.CallOpts)
}

// Paused is a free data retrieval call binding the contract method 0x5ac86ab7.
//
// Solidity: function paused(uint8 index) view returns(bool)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) {
	var out []interface{}
	err := _ContractAutomationServiceManager.contract.Call(opts, &out, "paused", index)

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

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

	return out0, err

}

// Paused is a free data retrieval call binding the contract method 0x5ac86ab7.
//
// Solidity: function paused(uint8 index) view returns(bool)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Paused(index uint8) (bool, error) {
	return _ContractAutomationServiceManager.Contract.Paused(&_ContractAutomationServiceManager.CallOpts, index)
}

// Paused is a free data retrieval call binding the contract method 0x5ac86ab7.
//
// Solidity: function paused(uint8 index) view returns(bool)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) Paused(index uint8) (bool, error) {
	return _ContractAutomationServiceManager.Contract.Paused(&_ContractAutomationServiceManager.CallOpts, index)
}

// Paused0 is a free data retrieval call binding the contract method 0x5c975abb.
//
// Solidity: function paused() view returns(uint256)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _ContractAutomationServiceManager.contract.Call(opts, &out, "paused0")

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

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

	return out0, err

}

// Paused0 is a free data retrieval call binding the contract method 0x5c975abb.
//
// Solidity: function paused() view returns(uint256)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Paused0() (*big.Int, error) {
	return _ContractAutomationServiceManager.Contract.Paused0(&_ContractAutomationServiceManager.CallOpts)
}

// Paused0 is a free data retrieval call binding the contract method 0x5c975abb.
//
// Solidity: function paused() view returns(uint256)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) Paused0() (*big.Int, error) {
	return _ContractAutomationServiceManager.Contract.Paused0(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195.
//
// Solidity: function pauserRegistry() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) PauserRegistry() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.PauserRegistry(&_ContractAutomationServiceManager.CallOpts)
}

// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195.
//
// Solidity: function pauserRegistry() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) PauserRegistry() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.PauserRegistry(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987.
//
// Solidity: function registryCoordinator() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) RegistryCoordinator() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.RegistryCoordinator(&_ContractAutomationServiceManager.CallOpts)
}

// RegistryCoordinator is a free data retrieval call binding the contract method 0x6d14a987.
//
// Solidity: function registryCoordinator() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) RegistryCoordinator() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.RegistryCoordinator(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// StakeRegistry is a free data retrieval call binding the contract method 0x68304835.
//
// Solidity: function stakeRegistry() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) StakeRegistry() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.StakeRegistry(&_ContractAutomationServiceManager.CallOpts)
}

// StakeRegistry is a free data retrieval call binding the contract method 0x68304835.
//
// Solidity: function stakeRegistry() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) StakeRegistry() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.StakeRegistry(&_ContractAutomationServiceManager.CallOpts)
}

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

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

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

	return out0, err

}

// StaleStakesForbidden is a free data retrieval call binding the contract method 0xb98d0908.
//
// Solidity: function staleStakesForbidden() view returns(bool)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) StaleStakesForbidden() (bool, error) {
	return _ContractAutomationServiceManager.Contract.StaleStakesForbidden(&_ContractAutomationServiceManager.CallOpts)
}

// StaleStakesForbidden is a free data retrieval call binding the contract method 0xb98d0908.
//
// Solidity: function staleStakesForbidden() view returns(bool)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) StaleStakesForbidden() (bool, error) {
	return _ContractAutomationServiceManager.Contract.StaleStakesForbidden(&_ContractAutomationServiceManager.CallOpts)
}

// TrySignatureAndApkVerification is a free data retrieval call binding the contract method 0x171f1d5b.
//
// Solidity: function trySignatureAndApkVerification(bytes32 msgHash, (uint256,uint256) apk, (uint256[2],uint256[2]) apkG2, (uint256,uint256) sigma) view returns(bool pairingSuccessful, bool siganatureIsValid)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCaller) TrySignatureAndApkVerification(opts *bind.CallOpts, msgHash [32]byte, apk BN254G1Point, apkG2 BN254G2Point, sigma BN254G1Point) (struct {
	PairingSuccessful bool
	SiganatureIsValid bool
}, error) {
	var out []interface{}
	err := _ContractAutomationServiceManager.contract.Call(opts, &out, "trySignatureAndApkVerification", msgHash, apk, apkG2, sigma)

	outstruct := new(struct {
		PairingSuccessful bool
		SiganatureIsValid bool
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.PairingSuccessful = *abi.ConvertType(out[0], new(bool)).(*bool)
	outstruct.SiganatureIsValid = *abi.ConvertType(out[1], new(bool)).(*bool)

	return *outstruct, err

}

// TrySignatureAndApkVerification is a free data retrieval call binding the contract method 0x171f1d5b.
//
// Solidity: function trySignatureAndApkVerification(bytes32 msgHash, (uint256,uint256) apk, (uint256[2],uint256[2]) apkG2, (uint256,uint256) sigma) view returns(bool pairingSuccessful, bool siganatureIsValid)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) TrySignatureAndApkVerification(msgHash [32]byte, apk BN254G1Point, apkG2 BN254G2Point, sigma BN254G1Point) (struct {
	PairingSuccessful bool
	SiganatureIsValid bool
}, error) {
	return _ContractAutomationServiceManager.Contract.TrySignatureAndApkVerification(&_ContractAutomationServiceManager.CallOpts, msgHash, apk, apkG2, sigma)
}

// TrySignatureAndApkVerification is a free data retrieval call binding the contract method 0x171f1d5b.
//
// Solidity: function trySignatureAndApkVerification(bytes32 msgHash, (uint256,uint256) apk, (uint256[2],uint256[2]) apkG2, (uint256,uint256) sigma) view returns(bool pairingSuccessful, bool siganatureIsValid)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) TrySignatureAndApkVerification(msgHash [32]byte, apk BN254G1Point, apkG2 BN254G2Point, sigma BN254G1Point) (struct {
	PairingSuccessful bool
	SiganatureIsValid bool
}, error) {
	return _ContractAutomationServiceManager.Contract.TrySignatureAndApkVerification(&_ContractAutomationServiceManager.CallOpts, msgHash, apk, apkG2, sigma)
}

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

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

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

	return out0, err

}

// Whitelister is a free data retrieval call binding the contract method 0x22758a4a.
//
// Solidity: function whitelister() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Whitelister() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.Whitelister(&_ContractAutomationServiceManager.CallOpts)
}

// Whitelister is a free data retrieval call binding the contract method 0x22758a4a.
//
// Solidity: function whitelister() view returns(address)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerCallerSession) Whitelister() (common.Address, error) {
	return _ContractAutomationServiceManager.Contract.Whitelister(&_ContractAutomationServiceManager.CallOpts)
}

// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da.
//
// Solidity: function deregisterOperatorFromAVS(address operator) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) DeregisterOperatorFromAVS(opts *bind.TransactOpts, operator common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "deregisterOperatorFromAVS", operator)
}

// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da.
//
// Solidity: function deregisterOperatorFromAVS(address operator) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractAutomationServiceManager.TransactOpts, operator)
}

// DeregisterOperatorFromAVS is a paid mutator transaction binding the contract method 0xa364f4da.
//
// Solidity: function deregisterOperatorFromAVS(address operator) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) DeregisterOperatorFromAVS(operator common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.DeregisterOperatorFromAVS(&_ContractAutomationServiceManager.TransactOpts, operator)
}

// Initialize is a paid mutator transaction binding the contract method 0x358394d8.
//
// Solidity: function initialize(address _pauserRegistry, uint256 _initialPausedStatus, address _initialOwner, address _whitelister) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) Initialize(opts *bind.TransactOpts, _pauserRegistry common.Address, _initialPausedStatus *big.Int, _initialOwner common.Address, _whitelister common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "initialize", _pauserRegistry, _initialPausedStatus, _initialOwner, _whitelister)
}

// Initialize is a paid mutator transaction binding the contract method 0x358394d8.
//
// Solidity: function initialize(address _pauserRegistry, uint256 _initialPausedStatus, address _initialOwner, address _whitelister) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Initialize(_pauserRegistry common.Address, _initialPausedStatus *big.Int, _initialOwner common.Address, _whitelister common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.Initialize(&_ContractAutomationServiceManager.TransactOpts, _pauserRegistry, _initialPausedStatus, _initialOwner, _whitelister)
}

// Initialize is a paid mutator transaction binding the contract method 0x358394d8.
//
// Solidity: function initialize(address _pauserRegistry, uint256 _initialPausedStatus, address _initialOwner, address _whitelister) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) Initialize(_pauserRegistry common.Address, _initialPausedStatus *big.Int, _initialOwner common.Address, _whitelister common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.Initialize(&_ContractAutomationServiceManager.TransactOpts, _pauserRegistry, _initialPausedStatus, _initialOwner, _whitelister)
}

// Pause is a paid mutator transaction binding the contract method 0x136439dd.
//
// Solidity: function pause(uint256 newPausedStatus) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "pause", newPausedStatus)
}

// Pause is a paid mutator transaction binding the contract method 0x136439dd.
//
// Solidity: function pause(uint256 newPausedStatus) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.Pause(&_ContractAutomationServiceManager.TransactOpts, newPausedStatus)
}

// Pause is a paid mutator transaction binding the contract method 0x136439dd.
//
// Solidity: function pause(uint256 newPausedStatus) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.Pause(&_ContractAutomationServiceManager.TransactOpts, newPausedStatus)
}

// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67.
//
// Solidity: function pauseAll() returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "pauseAll")
}

// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67.
//
// Solidity: function pauseAll() returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) PauseAll() (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.PauseAll(&_ContractAutomationServiceManager.TransactOpts)
}

// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67.
//
// Solidity: function pauseAll() returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) PauseAll() (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.PauseAll(&_ContractAutomationServiceManager.TransactOpts)
}

// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d.
//
// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) RegisterOperatorToAVS(opts *bind.TransactOpts, operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "registerOperatorToAVS", operator, operatorSignature)
}

// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d.
//
// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.RegisterOperatorToAVS(&_ContractAutomationServiceManager.TransactOpts, operator, operatorSignature)
}

// RegisterOperatorToAVS is a paid mutator transaction binding the contract method 0x9926ee7d.
//
// Solidity: function registerOperatorToAVS(address operator, (bytes,bytes32,uint256) operatorSignature) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) RegisterOperatorToAVS(operator common.Address, operatorSignature ISignatureUtilsSignatureWithSaltAndExpiry) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.RegisterOperatorToAVS(&_ContractAutomationServiceManager.TransactOpts, operator, operatorSignature)
}

// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "renounceOwnership")
}

// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) RenounceOwnership() (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.RenounceOwnership(&_ContractAutomationServiceManager.TransactOpts)
}

// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.RenounceOwnership(&_ContractAutomationServiceManager.TransactOpts)
}

// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f.
//
// Solidity: function setPauserRegistry(address newPauserRegistry) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) SetPauserRegistry(opts *bind.TransactOpts, newPauserRegistry common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "setPauserRegistry", newPauserRegistry)
}

// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f.
//
// Solidity: function setPauserRegistry(address newPauserRegistry) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.SetPauserRegistry(&_ContractAutomationServiceManager.TransactOpts, newPauserRegistry)
}

// SetPauserRegistry is a paid mutator transaction binding the contract method 0x10d67a2f.
//
// Solidity: function setPauserRegistry(address newPauserRegistry) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) SetPauserRegistry(newPauserRegistry common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.SetPauserRegistry(&_ContractAutomationServiceManager.TransactOpts, newPauserRegistry)
}

// SetStaleStakesForbidden is a paid mutator transaction binding the contract method 0x416c7e5e.
//
// Solidity: function setStaleStakesForbidden(bool value) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) SetStaleStakesForbidden(opts *bind.TransactOpts, value bool) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "setStaleStakesForbidden", value)
}

// SetStaleStakesForbidden is a paid mutator transaction binding the contract method 0x416c7e5e.
//
// Solidity: function setStaleStakesForbidden(bool value) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) SetStaleStakesForbidden(value bool) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.SetStaleStakesForbidden(&_ContractAutomationServiceManager.TransactOpts, value)
}

// SetStaleStakesForbidden is a paid mutator transaction binding the contract method 0x416c7e5e.
//
// Solidity: function setStaleStakesForbidden(bool value) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) SetStaleStakesForbidden(value bool) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.SetStaleStakesForbidden(&_ContractAutomationServiceManager.TransactOpts, value)
}

// SetWhitelister is a paid mutator transaction binding the contract method 0xf98f5b92.
//
// Solidity: function setWhitelister(address whitelister) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) SetWhitelister(opts *bind.TransactOpts, whitelister common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "setWhitelister", whitelister)
}

// SetWhitelister is a paid mutator transaction binding the contract method 0xf98f5b92.
//
// Solidity: function setWhitelister(address whitelister) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) SetWhitelister(whitelister common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.SetWhitelister(&_ContractAutomationServiceManager.TransactOpts, whitelister)
}

// SetWhitelister is a paid mutator transaction binding the contract method 0xf98f5b92.
//
// Solidity: function setWhitelister(address whitelister) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) SetWhitelister(whitelister common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.SetWhitelister(&_ContractAutomationServiceManager.TransactOpts, whitelister)
}

// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "transferOwnership", newOwner)
}

// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.TransferOwnership(&_ContractAutomationServiceManager.TransactOpts, newOwner)
}

// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.TransferOwnership(&_ContractAutomationServiceManager.TransactOpts, newOwner)
}

// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc.
//
// Solidity: function unpause(uint256 newPausedStatus) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "unpause", newPausedStatus)
}

// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc.
//
// Solidity: function unpause(uint256 newPausedStatus) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.Unpause(&_ContractAutomationServiceManager.TransactOpts, newPausedStatus)
}

// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc.
//
// Solidity: function unpause(uint256 newPausedStatus) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.Unpause(&_ContractAutomationServiceManager.TransactOpts, newPausedStatus)
}

// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355.
//
// Solidity: function updateAVSMetadataURI(string _metadataURI) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, _metadataURI string) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.contract.Transact(opts, "updateAVSMetadataURI", _metadataURI)
}

// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355.
//
// Solidity: function updateAVSMetadataURI(string _metadataURI) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerSession) UpdateAVSMetadataURI(_metadataURI string) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.UpdateAVSMetadataURI(&_ContractAutomationServiceManager.TransactOpts, _metadataURI)
}

// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa98fb355.
//
// Solidity: function updateAVSMetadataURI(string _metadataURI) returns()
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerTransactorSession) UpdateAVSMetadataURI(_metadataURI string) (*types.Transaction, error) {
	return _ContractAutomationServiceManager.Contract.UpdateAVSMetadataURI(&_ContractAutomationServiceManager.TransactOpts, _metadataURI)
}

// ContractAutomationServiceManagerInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerInitializedIterator struct {
	Event *ContractAutomationServiceManagerInitialized // 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 *ContractAutomationServiceManagerInitializedIterator) 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(ContractAutomationServiceManagerInitialized)
			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(ContractAutomationServiceManagerInitialized)
		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 *ContractAutomationServiceManagerInitializedIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerInitialized represents a Initialized event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerInitialized 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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterInitialized(opts *bind.FilterOpts) (*ContractAutomationServiceManagerInitializedIterator, error) {

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "Initialized")
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerInitializedIterator{contract: _ContractAutomationServiceManager.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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerInitialized) (event.Subscription, error) {

	logs, sub, err := _ContractAutomationServiceManager.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(ContractAutomationServiceManagerInitialized)
				if err := _ContractAutomationServiceManager.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 (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParseInitialized(log types.Log) (*ContractAutomationServiceManagerInitialized, error) {
	event := new(ContractAutomationServiceManagerInitialized)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "Initialized", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerOperatorAddedIterator is returned from FilterOperatorAdded and is used to iterate over the raw logs and unpacked data for OperatorAdded events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerOperatorAddedIterator struct {
	Event *ContractAutomationServiceManagerOperatorAdded // 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 *ContractAutomationServiceManagerOperatorAddedIterator) 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(ContractAutomationServiceManagerOperatorAdded)
			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(ContractAutomationServiceManagerOperatorAdded)
		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 *ContractAutomationServiceManagerOperatorAddedIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerOperatorAdded represents a OperatorAdded event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerOperatorAdded struct {
	Operator common.Address
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterOperatorAdded is a free log retrieval operation binding the contract event 0xac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d.
//
// Solidity: event OperatorAdded(address indexed operator)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterOperatorAdded(opts *bind.FilterOpts, operator []common.Address) (*ContractAutomationServiceManagerOperatorAddedIterator, error) {

	var operatorRule []interface{}
	for _, operatorItem := range operator {
		operatorRule = append(operatorRule, operatorItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "OperatorAdded", operatorRule)
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerOperatorAddedIterator{contract: _ContractAutomationServiceManager.contract, event: "OperatorAdded", logs: logs, sub: sub}, nil
}

// WatchOperatorAdded is a free log subscription operation binding the contract event 0xac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d.
//
// Solidity: event OperatorAdded(address indexed operator)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchOperatorAdded(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerOperatorAdded, operator []common.Address) (event.Subscription, error) {

	var operatorRule []interface{}
	for _, operatorItem := range operator {
		operatorRule = append(operatorRule, operatorItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "OperatorAdded", operatorRule)
	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(ContractAutomationServiceManagerOperatorAdded)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "OperatorAdded", 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
}

// ParseOperatorAdded is a log parse operation binding the contract event 0xac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d.
//
// Solidity: event OperatorAdded(address indexed operator)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParseOperatorAdded(log types.Log) (*ContractAutomationServiceManagerOperatorAdded, error) {
	event := new(ContractAutomationServiceManagerOperatorAdded)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "OperatorAdded", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerOperatorRemovedIterator is returned from FilterOperatorRemoved and is used to iterate over the raw logs and unpacked data for OperatorRemoved events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerOperatorRemovedIterator struct {
	Event *ContractAutomationServiceManagerOperatorRemoved // 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 *ContractAutomationServiceManagerOperatorRemovedIterator) 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(ContractAutomationServiceManagerOperatorRemoved)
			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(ContractAutomationServiceManagerOperatorRemoved)
		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 *ContractAutomationServiceManagerOperatorRemovedIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerOperatorRemoved represents a OperatorRemoved event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerOperatorRemoved struct {
	Operator common.Address
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterOperatorRemoved is a free log retrieval operation binding the contract event 0x80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d.
//
// Solidity: event OperatorRemoved(address indexed operator)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterOperatorRemoved(opts *bind.FilterOpts, operator []common.Address) (*ContractAutomationServiceManagerOperatorRemovedIterator, error) {

	var operatorRule []interface{}
	for _, operatorItem := range operator {
		operatorRule = append(operatorRule, operatorItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "OperatorRemoved", operatorRule)
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerOperatorRemovedIterator{contract: _ContractAutomationServiceManager.contract, event: "OperatorRemoved", logs: logs, sub: sub}, nil
}

// WatchOperatorRemoved is a free log subscription operation binding the contract event 0x80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d.
//
// Solidity: event OperatorRemoved(address indexed operator)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchOperatorRemoved(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerOperatorRemoved, operator []common.Address) (event.Subscription, error) {

	var operatorRule []interface{}
	for _, operatorItem := range operator {
		operatorRule = append(operatorRule, operatorItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "OperatorRemoved", operatorRule)
	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(ContractAutomationServiceManagerOperatorRemoved)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "OperatorRemoved", 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
}

// ParseOperatorRemoved is a log parse operation binding the contract event 0x80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d.
//
// Solidity: event OperatorRemoved(address indexed operator)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParseOperatorRemoved(log types.Log) (*ContractAutomationServiceManagerOperatorRemoved, error) {
	event := new(ContractAutomationServiceManagerOperatorRemoved)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "OperatorRemoved", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerOwnershipTransferredIterator struct {
	Event *ContractAutomationServiceManagerOwnershipTransferred // 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 *ContractAutomationServiceManagerOwnershipTransferredIterator) 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(ContractAutomationServiceManagerOwnershipTransferred)
			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(ContractAutomationServiceManagerOwnershipTransferred)
		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 *ContractAutomationServiceManagerOwnershipTransferredIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerOwnershipTransferred represents a OwnershipTransferred event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerOwnershipTransferred struct {
	PreviousOwner common.Address
	NewOwner      common.Address
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ContractAutomationServiceManagerOwnershipTransferredIterator, error) {

	var previousOwnerRule []interface{}
	for _, previousOwnerItem := range previousOwner {
		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
	}
	var newOwnerRule []interface{}
	for _, newOwnerItem := range newOwner {
		newOwnerRule = append(newOwnerRule, newOwnerItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerOwnershipTransferredIterator{contract: _ContractAutomationServiceManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}

// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {

	var previousOwnerRule []interface{}
	for _, previousOwnerItem := range previousOwner {
		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
	}
	var newOwnerRule []interface{}
	for _, newOwnerItem := range newOwner {
		newOwnerRule = append(newOwnerRule, newOwnerItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
	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(ContractAutomationServiceManagerOwnershipTransferred)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "OwnershipTransferred", 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
}

// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParseOwnershipTransferred(log types.Log) (*ContractAutomationServiceManagerOwnershipTransferred, error) {
	event := new(ContractAutomationServiceManagerOwnershipTransferred)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerPausedIterator struct {
	Event *ContractAutomationServiceManagerPaused // 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 *ContractAutomationServiceManagerPausedIterator) 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(ContractAutomationServiceManagerPaused)
			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(ContractAutomationServiceManagerPaused)
		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 *ContractAutomationServiceManagerPausedIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerPaused represents a Paused event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerPaused struct {
	Account         common.Address
	NewPausedStatus *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d.
//
// Solidity: event Paused(address indexed account, uint256 newPausedStatus)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*ContractAutomationServiceManagerPausedIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "Paused", accountRule)
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerPausedIterator{contract: _ContractAutomationServiceManager.contract, event: "Paused", logs: logs, sub: sub}, nil
}

// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d.
//
// Solidity: event Paused(address indexed account, uint256 newPausedStatus)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerPaused, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "Paused", accountRule)
	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(ContractAutomationServiceManagerPaused)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "Paused", 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
}

// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d.
//
// Solidity: event Paused(address indexed account, uint256 newPausedStatus)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParsePaused(log types.Log) (*ContractAutomationServiceManagerPaused, error) {
	event := new(ContractAutomationServiceManagerPaused)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "Paused", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerPauserRegistrySetIterator is returned from FilterPauserRegistrySet and is used to iterate over the raw logs and unpacked data for PauserRegistrySet events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerPauserRegistrySetIterator struct {
	Event *ContractAutomationServiceManagerPauserRegistrySet // 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 *ContractAutomationServiceManagerPauserRegistrySetIterator) 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(ContractAutomationServiceManagerPauserRegistrySet)
			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(ContractAutomationServiceManagerPauserRegistrySet)
		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 *ContractAutomationServiceManagerPauserRegistrySetIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerPauserRegistrySet represents a PauserRegistrySet event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerPauserRegistrySet struct {
	PauserRegistry    common.Address
	NewPauserRegistry common.Address
	Raw               types.Log // Blockchain specific contextual infos
}

// FilterPauserRegistrySet is a free log retrieval operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6.
//
// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterPauserRegistrySet(opts *bind.FilterOpts) (*ContractAutomationServiceManagerPauserRegistrySetIterator, error) {

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "PauserRegistrySet")
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerPauserRegistrySetIterator{contract: _ContractAutomationServiceManager.contract, event: "PauserRegistrySet", logs: logs, sub: sub}, nil
}

// WatchPauserRegistrySet is a free log subscription operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6.
//
// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchPauserRegistrySet(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerPauserRegistrySet) (event.Subscription, error) {

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "PauserRegistrySet")
	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(ContractAutomationServiceManagerPauserRegistrySet)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "PauserRegistrySet", 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
}

// ParsePauserRegistrySet is a log parse operation binding the contract event 0x6e9fcd539896fca60e8b0f01dd580233e48a6b0f7df013b89ba7f565869acdb6.
//
// Solidity: event PauserRegistrySet(address pauserRegistry, address newPauserRegistry)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParsePauserRegistrySet(log types.Log) (*ContractAutomationServiceManagerPauserRegistrySet, error) {
	event := new(ContractAutomationServiceManagerPauserRegistrySet)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "PauserRegistrySet", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerStaleStakesForbiddenUpdateIterator is returned from FilterStaleStakesForbiddenUpdate and is used to iterate over the raw logs and unpacked data for StaleStakesForbiddenUpdate events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerStaleStakesForbiddenUpdateIterator struct {
	Event *ContractAutomationServiceManagerStaleStakesForbiddenUpdate // 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 *ContractAutomationServiceManagerStaleStakesForbiddenUpdateIterator) 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(ContractAutomationServiceManagerStaleStakesForbiddenUpdate)
			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(ContractAutomationServiceManagerStaleStakesForbiddenUpdate)
		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 *ContractAutomationServiceManagerStaleStakesForbiddenUpdateIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerStaleStakesForbiddenUpdate represents a StaleStakesForbiddenUpdate event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerStaleStakesForbiddenUpdate struct {
	Value bool
	Raw   types.Log // Blockchain specific contextual infos
}

// FilterStaleStakesForbiddenUpdate is a free log retrieval operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc.
//
// Solidity: event StaleStakesForbiddenUpdate(bool value)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterStaleStakesForbiddenUpdate(opts *bind.FilterOpts) (*ContractAutomationServiceManagerStaleStakesForbiddenUpdateIterator, error) {

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "StaleStakesForbiddenUpdate")
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerStaleStakesForbiddenUpdateIterator{contract: _ContractAutomationServiceManager.contract, event: "StaleStakesForbiddenUpdate", logs: logs, sub: sub}, nil
}

// WatchStaleStakesForbiddenUpdate is a free log subscription operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc.
//
// Solidity: event StaleStakesForbiddenUpdate(bool value)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchStaleStakesForbiddenUpdate(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerStaleStakesForbiddenUpdate) (event.Subscription, error) {

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "StaleStakesForbiddenUpdate")
	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(ContractAutomationServiceManagerStaleStakesForbiddenUpdate)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "StaleStakesForbiddenUpdate", 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
}

// ParseStaleStakesForbiddenUpdate is a log parse operation binding the contract event 0x40e4ed880a29e0f6ddce307457fb75cddf4feef7d3ecb0301bfdf4976a0e2dfc.
//
// Solidity: event StaleStakesForbiddenUpdate(bool value)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParseStaleStakesForbiddenUpdate(log types.Log) (*ContractAutomationServiceManagerStaleStakesForbiddenUpdate, error) {
	event := new(ContractAutomationServiceManagerStaleStakesForbiddenUpdate)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "StaleStakesForbiddenUpdate", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// ContractAutomationServiceManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerUnpausedIterator struct {
	Event *ContractAutomationServiceManagerUnpaused // 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 *ContractAutomationServiceManagerUnpausedIterator) 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(ContractAutomationServiceManagerUnpaused)
			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(ContractAutomationServiceManagerUnpaused)
		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 *ContractAutomationServiceManagerUnpausedIterator) Error() error {
	return it.fail
}

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

// ContractAutomationServiceManagerUnpaused represents a Unpaused event raised by the ContractAutomationServiceManager contract.
type ContractAutomationServiceManagerUnpaused struct {
	Account         common.Address
	NewPausedStatus *big.Int
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c.
//
// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*ContractAutomationServiceManagerUnpausedIterator, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.FilterLogs(opts, "Unpaused", accountRule)
	if err != nil {
		return nil, err
	}
	return &ContractAutomationServiceManagerUnpausedIterator{contract: _ContractAutomationServiceManager.contract, event: "Unpaused", logs: logs, sub: sub}, nil
}

// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c.
//
// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *ContractAutomationServiceManagerUnpaused, account []common.Address) (event.Subscription, error) {

	var accountRule []interface{}
	for _, accountItem := range account {
		accountRule = append(accountRule, accountItem)
	}

	logs, sub, err := _ContractAutomationServiceManager.contract.WatchLogs(opts, "Unpaused", accountRule)
	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(ContractAutomationServiceManagerUnpaused)
				if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "Unpaused", 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
}

// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c.
//
// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus)
func (_ContractAutomationServiceManager *ContractAutomationServiceManagerFilterer) ParseUnpaused(log types.Log) (*ContractAutomationServiceManagerUnpaused, error) {
	event := new(ContractAutomationServiceManagerUnpaused)
	if err := _ContractAutomationServiceManager.contract.UnpackLog(event, "Unpaused", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
